UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

357 lines (356 loc) 15.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.genGridViewCardBlock = exports.genGridViewBlock = exports.genGridViewRemoveLogic = exports.genGridViewLoadLogic = exports.genH5GridViewTemplate = exports.genGridViewTemplate = exports.genH5GridViewCardTemplate = exports.genGridViewCardTemplate = void 0; const config_1 = require("../config"); const utils = __importStar(require("../utils")); const _1 = require("."); const utils_1 = require("./utils"); /** * 根据实体属性生成表格列模板 * @param property 实体属性 */ function genGridViewCardTemplate(property, nameGroup) { const { entity } = property; const dataSource = entity.parentNode; const lowerEntityName = utils.firstLowerCase(entity.name); const currentName = nameGroup.currentName || 'current'; let valueExpression = `${currentName}.item.${lowerEntityName}.${property.name}`; const title = property.label || property.name; if (property.relationEntity) { // 有外键关联 const relationEntity = dataSource?.findEntityByName(property.relationEntity); if (relationEntity) { const displayedProperty = (0, _1.getFirstDisplayedProperty)(relationEntity); if (displayedProperty) { const relationLowerEntityName = utils.firstLowerCase(relationEntity.name); valueExpression = `${currentName}.item.${relationLowerEntityName}.${displayedProperty.name}`; } else return ''; } else return ''; } else { valueExpression = `${currentName}.item.${lowerEntityName}.${property.name}`; } 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>`; }; return `<u-linear-layout gap="small"> <u-text text="${title}:"></u-text>${getText(property)} </u-linear-layout>`; } exports.genGridViewCardTemplate = genGridViewCardTemplate; function genH5GridViewCardTemplate(property, nameGroup) { const { entity } = property; const dataSource = entity.parentNode; const lowerEntityName = utils.firstLowerCase(entity.name); const currentName = nameGroup.currentName || 'current'; let valueExpression = `${currentName}.item.${lowerEntityName}.${property.name}`; if (property.relationEntity) { // 有外键关联 const relationEntity = dataSource?.findEntityByName(property.relationEntity); if (relationEntity) { const displayedProperty = (0, _1.getFirstDisplayedProperty)(relationEntity); if (displayedProperty) { const relationLowerEntityName = utils.firstLowerCase(relationEntity.name); valueExpression = `${currentName}.item.${relationLowerEntityName}.${displayedProperty.name}`; } else return ''; } else return ''; } else { valueExpression = `${currentName}.item.${lowerEntityName}.${property.name}`; } const getText = (property) => { const propertyTypeName = property.typeAnnotation.typeName; if (propertyTypeName === 'Boolean') { return ` <van-text v-if="${valueExpression}" text="是" display="block"></van-text> <van-text v-if="!${valueExpression}" text="否" display="block"></van-text> `; } return `<van-text :text="${valueExpression}" display="block"></van-text>`; }; return `${getText(property)}`; } exports.genH5GridViewCardTemplate = genH5GridViewCardTemplate; /** * 生成表格模板 * @param entity 实体 * @param nameGroup 命名组 */ function genGridViewTemplate(entity, nameGroup, newLogic, modifyable, entryFromCall) { const currentName = nameGroup.currentName || 'current'; const properties = entity.properties.filter((0, _1.filterProperty)('inTable')); let dataSourceValue = `(params) => ${newLogic.name}(elements.$ce.page, elements.$ce.size)`; if (['genCurdMultipleKeyBlock'].includes(entryFromCall)) { dataSourceValue = `(params) => ${newLogic.name}(elements.$ce.page, elements.$ce.size,${nameGroup.viewVariableFilter})`; } return `<u-grid-view ref="${nameGroup.viewElementMainView}" :dataSource="${dataSourceValue}" dataSchema="${nameGroup.structure}" valueField="${utils.firstLowerCase(entity.name)}.${entity.properties.find((p) => p.primaryKey)?.name || 'id'}" :pageSize="50" :pageNumber="1" :pageable="true" :remotePaging="true" :showSizer="true" :repeat="4" :border="false" :readonly="true" :showFoot="true" style="height:auto"> <template #item="current"> <u-card title=""> <u-linear-layout direction="vertical" gap="small"> ${properties.map((property) => `${genGridViewCardTemplate(property, nameGroup)}\n`).join('')} <u-linear-layout gap="small"> <u-link ${modifyable ? `@click="${nameGroup.viewLogicModify || 'modify'}"` : ''}>修改</u-link> <u-link @click="${nameGroup.viewLogicRemove}">删除</u-link> </u-linear-layout> </u-linear-layout> </u-card> </template> </u-grid-view> `; } exports.genGridViewTemplate = genGridViewTemplate; function genH5GridViewTemplate(entity, nameGroup, newLogic, modifyable, entryFromCall) { const currentName = nameGroup.currentName || 'current'; const properties = entity.properties.filter((0, _1.filterProperty)('inTable')); let dataSourceValue = `(params) => ${newLogic.name}(elements.$ce.page, elements.$ce.size)`; if (['genCurdMultipleKeyBlock'].includes(entryFromCall)) { dataSourceValue = `(params) => ${newLogic.name}(elements.$ce.page, elements.$ce.size,${nameGroup.viewVariableFilter})`; } return `<van-grid-view ref="${nameGroup.viewElementMainView}" :dataSource="${dataSourceValue}" dataSchema="${nameGroup.structure}" pageable="auto-more" :pageSize="50" :pageNumber="1" :remotePaging="true" :col="2" :iffall="false"> <template #item="current"> <van-cardu no-title> ${properties.map((property) => `${genH5GridViewCardTemplate(property, nameGroup)}\n`).join('')} </van-cardu> </template> </van-grid-view> `; } exports.genH5GridViewTemplate = genH5GridViewTemplate; /** * 生成表格 load 逻辑 * @param entity 实体 */ function genGridViewLoadLogic(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'), ]; if (supportFilter) params.push((0, _1.genLogicParam)(`${newLogic.params[2].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.genGridViewLoadLogic = genGridViewLoadLogic; /** * 生成表格 remove 逻辑 * @param entity 实体 */ function genGridViewRemoveLogic(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'); const currentName = nameGroup.currentName || 'current'; 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, `${currentName}.item.${lowerEntityName}.${paramFromLogic.name}`); }), }), (0, _1.genCallComponentLogic)(nameGroup.viewElementMainView, 'reload'), utils_1.NaslLogicItem.End, ], }); } exports.genGridViewRemoveLogic = genGridViewRemoveLogic; /** * 生成表格区块 * @param entity 实体 * @param view 所插入的页面,用于生成逻辑名字,去重等 * @notice 目前 logic 名去重做成前置处理了,与 mergeBlock 的后置处理不冲突 * (页面 load 名) -产生-> (logic 名) -产生-> (structure 名) * load -> load_someView_tableView * load_select_student -> load_someView_select_student */ // 数据网格(简) function genGridViewBlock(entity, oldNode) { const likeComponent = oldNode?.likeComponent; const dataSource = entity.parentNode; const module = dataSource.app; const viewElementMainView = likeComponent.getViewElementUniqueName('gridView'); const nameGroup = (0, _1.genUniqueQueryNameGroup)(module, likeComponent, viewElementMainView); nameGroup.viewElementMainView = viewElementMainView; nameGroup.viewVariableEntity = likeComponent.getVariableUniqueName(utils.firstLowerCase(entity.name)); nameGroup.viewLogicRemove = likeComponent.getLogicUniqueName('remove'); nameGroup.viewVariableFilter = likeComponent.getVariableUniqueName('filter'); // 当前节点的currentName nameGroup.currentName = oldNode.getCurrentName(); // 收集所有和本实体关联的实体 const entitySet = new Set(); entitySet.add(entity); const newLogics = []; entity.properties.forEach((property) => { if (property.relationEntity) { // 有外键关联 const relationEntity = dataSource?.findEntityByName(property.relationEntity); if (relationEntity) { const displayedProperty = (0, _1.getFirstDisplayedProperty)(relationEntity); if (displayedProperty) entitySet.add(relationEntity); } } }); const allEntities = [...entitySet]; const entityLogic = (0, _1.genQueryLogic)(allEntities, nameGroup, false, false, module); newLogics.push(entityLogic); return ` <template> ${config_1.config.scope === 'h5' ? genH5GridViewTemplate(entity, nameGroup, entityLogic) : genGridViewTemplate(entity, nameGroup, entityLogic)} </template> <definition> { "viewLogics": [ ${JSON.stringify(genGridViewLoadLogic(entity, nameGroup, entityLogic, false))}, ${JSON.stringify(genGridViewRemoveLogic(entity, nameGroup))} ], "logics": ${JSON.stringify(newLogics)} } </definition> `; } exports.genGridViewBlock = genGridViewBlock; function genGridViewCardBlock(property, oldNode) { const likeComponent = oldNode?.likeComponent; const { entity } = property; const dataSource = entity.parentNode; const module = dataSource.app; const viewElementMainView = likeComponent.getViewElementUniqueName('gridView'); const nameGroup = (0, _1.genUniqueQueryNameGroup)(module, likeComponent, viewElementMainView); nameGroup.viewElementMainView = viewElementMainView; nameGroup.viewVariableEntity = likeComponent.getVariableUniqueName(utils.firstLowerCase(entity.name)); nameGroup.viewLogicRemove = likeComponent.getLogicUniqueName('remove'); nameGroup.viewVariableFilter = likeComponent.getVariableUniqueName('filter'); // 收集所有和本实体关联的实体 const entitySet = new Set(); entitySet.add(entity); const newLogics = []; entity.properties.forEach((property) => { if (property.relationEntity) { // 有外键关联 const relationEntity = dataSource?.findEntityByName(property.relationEntity); if (relationEntity) { const displayedProperty = (0, _1.getFirstDisplayedProperty)(relationEntity); if (displayedProperty) entitySet.add(relationEntity); } } }); const allEntities = [...entitySet]; const entityLogic = (0, _1.genQueryLogic)(allEntities, nameGroup, true, false, module); newLogics.push(entityLogic); return ` <template> ${genGridViewTemplate(entity, nameGroup, entityLogic)} </template> <definition> { "viewLogics": [ ${JSON.stringify(genGridViewLoadLogic(entity, nameGroup, entityLogic, false))}, ${JSON.stringify(genGridViewRemoveLogic(entity, nameGroup))} ], "logics": ${JSON.stringify(newLogics)} } </definition> `; } exports.genGridViewCardBlock = genGridViewCardBlock; exports.default = genGridViewBlock; //# sourceMappingURL=genGridViewBlock.js.map