@lcap/nasl
Version:
NetEase Application Specific Language
357 lines (356 loc) • 15.4 kB
JavaScript
;
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