UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

322 lines (319 loc) 16.4 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.genBlurUpdateLogic = exports.genEditTableRemoveLogic = exports.genEditTableLoadLogic = exports.genEditTableTemplate = exports.genEditTableColumnTemplate = void 0; const utils = __importStar(require("../utils")); const _1 = require("."); const utils_1 = require("./utils"); /** * 根据实体属性生成表格列模板 * @param property 实体属性 */ function genEditTableColumnTemplate(entity, property, nameGroup, selectNameGroupMap) { const dataSource = entity.parentNode; const lowerEntityName = utils.firstLowerCase(entity.name); const valueExpression = `current.item.${lowerEntityName}.${property.name}`; const title = property.label || property.name; const canEditable = (property) => !property.readonly; const getText = (property) => { const propertyTypeName = property.typeAnnotation.typeName; if (propertyTypeName === 'Boolean') { return ` <u-text v-if="${valueExpression}" text="是"></u-text> <u-text v-if="!${valueExpression}" text="否"></u-text> `; } return `<u-text :text="${valueExpression}"></u-text>`; }; const genEditComponent = (property) => { if (property.readonly) return ''; const label = property.label || property.name; let formItem = ''; const propertyTypeNamespace = property.typeAnnotation.typeNamespace; const propertyTypeName = (0, utils_1.transEntityMetadataTypes)(property.typeAnnotation, dataSource.app); const propertyTypeMaxLength = Number(property.rules .find((item) => item.indexOf('max') > -1) ?.split('(')[1] .slice(0, -1)) || 0; if (property.relationEntity && selectNameGroupMap) { // 有外键关联 const relationEntity = dataSource?.findEntityByName(property.relationEntity); if (relationEntity) { const relationProperty = relationEntity.properties.find((prop) => prop.name === property.relationProperty); const displayedProperty = (0, _1.getFirstDisplayedProperty)(relationEntity); if (displayedProperty) { const lowerEntityName = utils.firstLowerCase(relationEntity.name); // 存在多个属性关联同一个实体的情况,因此加上属性名用以唯一标识 const key = [property.name, relationEntity.name].join('-'); const selectNameGroup = selectNameGroupMap.get(key); let dataSourceValue = `(params) => ${selectNameGroup.logic}(elements.$ce.page, elements.$ce.size)`; formItem += ` <u-select :clearable="true" placeholder="请选择${label}" :dataSource="${dataSourceValue}" :pageSize="50" :autofocus="true" :opened="true" appendTo="body" @blur="${nameGroup.viewLogicBlurUpdate}" @select="${nameGroup.viewLogicBlurUpdate}" textField="${lowerEntityName}.${displayedProperty.name}" valueField="${lowerEntityName}.${relationProperty.name}" :pagination="true" :value.sync="${valueExpression}" :emptyValueIsNull="true"> </u-select> `; } else return ''; } else return ''; } else if (propertyTypeName === 'Boolean') { formItem += `<u-select :clearable="true" :value.sync="${valueExpression}" placeholder="请选择${label}" :autofocus="true" :opened="true" appendTo="body" @blur="${nameGroup.viewLogicBlurUpdate}" @select="${nameGroup.viewLogicBlurUpdate}" :emptyValueIsNull="true"> <u-select-item :value="true" text="是">是</u-select-item> <u-select-item :value="false" text="否">否</u-select-item> </u-select>`; } else if (propertyTypeName === 'Integer' || propertyTypeName === 'Long') { formItem = `<u-number-input :value.sync="${valueExpression}" placeholder="请输入${label}" :autofocus="true" @blur="${nameGroup.viewLogicBlurUpdate}"></u-number-input>`; } else if (propertyTypeName === 'Double') { formItem = `<u-number-input :value.sync="${valueExpression}" :precision="0" :step="0" placeholder="请输入${label}" :autofocus="true" @blur="${nameGroup.viewLogicBlurUpdate}"></u-number-input>`; } else if (propertyTypeName === 'Decimal') { formItem = `<u-number-input :value.sync="${valueExpression}" :precision="0" :step="0" placeholder="请输入${label}" :autofocus="true" @blur="${nameGroup.viewLogicBlurUpdate}"></u-number-input>`; } else if (propertyTypeName === 'String' && propertyTypeMaxLength > 256) { formItem = `<u-validator placement="bottom" display="appear" @blur-valid="${nameGroup.viewLogicBlurUpdate}" style="width:100%"> <u-textarea :value.sync="${valueExpression}" placeholder="请输入${label}" :autofocus="true" size="full" :emptyValueIsNull="true"></u-textarea> </u-validator>`; } else if (propertyTypeName === 'Date') { formItem = `<u-date-picker :clearable="true" :value.sync="${valueExpression}" placeholder="请选择${label}" appendTo="body" :autofocus="true" :opened="true" @blur="${nameGroup.viewLogicBlurUpdate}" :emptyValueIsNull="true"></u-date-picker>`; } else if (propertyTypeName === 'Time') { formItem = `<u-time-picker :value.sync="${valueExpression}" placeholder="请选择${label}" appendTo="body" :autofocus="true" @blur="${nameGroup.viewLogicBlurUpdate}" :emptyValueIsNull="true"></u-time-picker>`; } else if (propertyTypeName === 'DateTime') { formItem = `<u-date-time-picker :clearable="true" :value.sync="${valueExpression}" placeholder="请选择${label}" appendTo="body" :autofocus="true" :opened="true" @blur="${nameGroup.viewLogicBlurUpdate}" :emptyValueIsNull="true"></u-date-time-picker>`; } else { const namespaceArr = propertyTypeNamespace?.split?.('.') || []; const type = namespaceArr.pop(); if (type === 'enums') { const enumeration = dataSource.app.findNodeByCompleteName(`${propertyTypeNamespace}.${propertyTypeName}`); const namespace = enumeration?.getNamespace() || ''; const name = enumeration?.name || ''; const enumTypeAnnotationStr = `__enumTypeAnnotation_${namespace}.${name}`; formItem += `<u-select :clearable="true" :dataSource="$utils.EnumToList('${enumTypeAnnotationStr}')" :pageSize="50" :value.sync="${valueExpression}" placeholder="请选择${label}" :autofocus="true" :opened="true" appendTo="body" @blur="${nameGroup.viewLogicBlurUpdate}" @select="${nameGroup.viewLogicBlurUpdate}" :emptyValueIsNull="true"> </u-select>`; } else { formItem = `<u-validator placement="bottom" display="appear" @blur-valid="${nameGroup.viewLogicBlurUpdate}" style="width:100%" appendTo="body"> <u-input :value.sync="${valueExpression}" placeholder="请输入${label}" :autofocus="true" size="full" :emptyValueIsNull="true"></u-input> </u-validator>`; } } return `<template #editcell="current"> <u-linear-layout gap="small"> ${formItem} </u-linear-layout> </template>`; }; return `<u-table-view-column field="${utils.firstLowerCase(entity.name)}.${property.name}" ${canEditable(property) ? 'type="editable"' : ''}> <template #title><u-text text="${title}"></u-text></template> <template #cell="current"> <u-linear-layout gap="small"> ${getText(property)} </u-linear-layout> </template> <template #expander="current"> <u-table-view-expander @toggle="current.toggle"> </u-table-view-expander> </template> ${genEditComponent(property)} </u-table-view-column>`; } exports.genEditTableColumnTemplate = genEditTableColumnTemplate; /** * 生成表格模板 * @param entity 实体 * @param nameGroup 命名组 */ function genEditTableTemplate(entity, nameGroup, newLogic, selectNameGroupMap, entryFromCall) { const properties = entity.properties.filter((0, _1.filterProperty)('inTable')); let dataSourceValue = `(params) => ${newLogic.name}(elements.$ce.page,elements.$ce.size,elements.$ce.sort,elements.$ce.order)`; if (['genCurdEditMultipleKeyBlock'].includes(entryFromCall)) { dataSourceValue = `(params) => ${newLogic.name}(elements.$ce.page,elements.$ce.size,elements.$ce.sort,elements.$ce.order,${nameGroup.viewVariableFilter})`; } return `<u-table-view ref="${nameGroup.viewElementMainView}" :dataSource="${dataSourceValue}" dataSchema="${nameGroup.structure}" valueField="${utils.firstLowerCase(entity.name)}.${entity.properties.find((p) => p.primaryKey)?.name || 'id'}" :pagination="true" :showSizer="true" :pageSize="20" :pageNumber="1" :defaultColumnWidth="300" editable> <u-table-view-column type="index" width="60"> <template #title><u-text text="序号"></u-text></template> <template #cell="current"></template> <template #expander="current"> <u-table-view-expander @toggle="current.toggle"> </u-table-view-expander> </template> </u-table-view-column> ${properties.map((property) => `${genEditTableColumnTemplate(entity, property, nameGroup, selectNameGroupMap)}\n`).join('')} <u-table-view-column> <template #title><u-text text="操作"></u-text></template> <template #cell="current"> <u-linear-layout gap="small"> <u-link @click="${nameGroup.viewLogicRemove}">删除</u-link> </u-linear-layout> </template> <template #expander="current"> <u-table-view-expander @toggle="current.toggle"> </u-table-view-expander> </template> </u-table-view-column> </u-table-view> `; } exports.genEditTableTemplate = genEditTableTemplate; /** * 生成表格 load 逻辑 * @param entity 实体 */ function genEditTableLoadLogic(entity, nameGroup, newLogic, supportFilter) { const moduleNode = entity.app; const moduleNamespace = moduleNode?.getNamespace(); const params = [ (0, _1.genLogicParam)(`${newLogic.params[0].name}`, 'params.page'), (0, _1.genLogicParam)(`${newLogic.params[1].name}`, 'params.size'), (0, _1.genLogicParam)(`${newLogic.params[2].name}`, 'params.sort'), (0, _1.genLogicParam)(`${newLogic.params[3].name}`, 'params.order'), ]; if (supportFilter) params.push((0, _1.genLogicParam)(`${newLogic.params[4].name}`, nameGroup.viewVariableFilter)); return utils_1.NaslNode.Logic({ name: nameGroup.viewLogicLoad, params: [ utils_1.NaslNode.Param({ name: 'params', typeAnnotation: utils_1.NaslUITypeAnnotation.DataSourceParams, }), ], returns: [ utils_1.NaslNode.Return({ name: 'result', typeAnnotation: null, }), ], variables: [], body: [ utils_1.NaslLogicItem.Start, utils_1.NaslLogicItem.Assignment({ left: utils_1.NaslLogicItem.Identifier({ name: 'result', }), right: utils_1.NaslLogicItem.CallLogic({ calleeNamespace: `${moduleNamespace}.logics`, calleeName: newLogic.name, arguments: params, }), }), utils_1.NaslLogicItem.End, ], }); } exports.genEditTableLoadLogic = genEditTableLoadLogic; /** * 生成表格 remove 逻辑 * @param entity 实体 */ function genEditTableRemoveLogic(entity, nameGroup) { const lowerEntityName = utils.firstLowerCase(entity.name); const { ns } = entity; const deleteLogic = ns?.logics?.find((logic) => logic.name === `delete`); const idPropertys = entity.properties.filter((property) => property.primaryKey || property.name === 'id'); return utils_1.NaslNode.Logic({ name: nameGroup.viewLogicRemove, params: [], returns: [], variables: [], body: [ utils_1.NaslLogicItem.Start, utils_1.NaslLogicItem.CallLogic({ calleeNamespace: deleteLogic.getNamespace(), calleeName: deleteLogic.name, arguments: idPropertys.map((idProperty) => { let paramFromLogic = (0, _1.getParamFromLogic)(deleteLogic, idProperty.name); // 如果旧逻辑,但是新导入表中,id的name 不是id 的话,就直接使用名称叫id的 if (!paramFromLogic) { paramFromLogic = (0, _1.getParamFromLogic)(deleteLogic, 'id'); } return (0, _1.genLogicParam)(paramFromLogic.name, `current.item.${lowerEntityName}.${paramFromLogic.name}`); }), }), (0, _1.genCallComponentLogic)(nameGroup.viewElementMainView, 'reload'), utils_1.NaslLogicItem.End, ], }); } exports.genEditTableRemoveLogic = genEditTableRemoveLogic; function genBlurUpdateLogic(entity, nameGroup) { const callLogics = []; if (entity.concept === 'Entity') { const lowerEntityName = utils.firstLowerCase(entity.name); const { ns } = entity; const updateLogic = ns?.logics?.find((logic) => logic.name === `update`); const valuePrefixExpression = nameGroup.valuePrefixExpression ? nameGroup.valuePrefixExpression : `current.item.${lowerEntityName}`; callLogics.push(utils_1.NaslLogicItem.CallLogic({ calleeNamespace: updateLogic.getNamespace(), calleeName: updateLogic.name, arguments: [(0, _1.genLogicParam)(`${updateLogic.params[0].name}`, valuePrefixExpression)], })); } return utils_1.NaslNode.Logic({ name: nameGroup.viewLogicBlurUpdate, params: [], returns: [], body: [ utils_1.NaslLogicItem.Start, (0, _1.genCallComponentLogic)(nameGroup.viewElementMainView, 'resetEdit', [ utils_1.NaslLogicItem.Argument({ keyword: 'item', expression: utils_1.NaslLogicItem.MemberExpression({ object: utils_1.NaslLogicItem.Identifier({ name: 'current', }), property: utils_1.NaslLogicItem.Identifier({ name: 'item', }), }), }), ]), ...callLogics, utils_1.NaslLogicItem.End, ], playground: [], }); } exports.genBlurUpdateLogic = genBlurUpdateLogic; //# sourceMappingURL=genEditTableBlock.js.map