@lcap/nasl
Version:
NetEase Application Specific Language
593 lines (589 loc) • 30.5 kB
JavaScript
"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.genLogicParamWithDefaultValue = exports.genFormDesignerSelectLoadLogic = exports.genEditTableColumnComponent = exports.genCurdEditMultipleKeyBlock = void 0;
/**
* 1. 从genCurdEditTableBlock组件复制,算是工行的定制化需求多主键(联合主键的支持)
* 2. 改动了原来判断id的逻辑
* 3. 先简单做后续在看如何优化
*/
const utils = __importStar(require("../utils"));
const concepts_1 = require("../concepts");
const utils_1 = require("./utils");
const _1 = require(".");
function genFilterTemplate(entity, nameGroup, selectNameGroupMap) {
const dataSource = entity.parentNode;
const properties = entity.properties.filter((0, _1.filterProperty)('inFilter'));
return `
<u-linear-layout>
<u-form layout="inline">
${properties
.map((property) => {
const vModel = `${nameGroup.viewVariableFilter}.${property.name}`;
const label = (property.label || property.name).replace(/"/g, '"');
let formItem = `<u-form-item layout="center"><template #label><u-text text="${label}"></u-text></template>`;
const { typeAnnotation } = property || {};
const { typeName: propertyTypeName, typeNamespace: propertyTypeNamespace } = typeAnnotation || {};
const propertyTypeMaxLength = Number(property.rules
.find((item) => item.indexOf('max') > -1)
?.split('(')[1]
.slice(0, -1)) || 0;
if (property.relationEntity) {
// 有外键关联
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"
textField="${lowerEntityName}.${displayedProperty.name}" valueField="${lowerEntityName}.${relationProperty.name}" :pagination="true" v-model="${vModel}" :emptyValueIsNull="true">
</u-select>
`;
}
else
return '';
}
else
return '';
}
else if (propertyTypeName === 'Boolean') {
formItem += `
<u-select :clearable="true" v-model="${vModel}" placeholder="请选择${label}" :emptyValueIsNull="true">
<u-select-item :value="true" text="是"><u-text text="是"></u-text></u-select-item>
<u-select-item :value="false" text="否"><u-text text="否"></u-text></u-select-item>
</u-select>
`;
}
else if (propertyTypeName === 'Integer' || propertyTypeName === 'Long') {
formItem += `<u-number-input v-model="${vModel}" placeholder="请输入${label}"></u-number-input>`;
}
else if (propertyTypeName === 'Double') {
formItem += `<u-number-input v-model="${vModel}" :precision="0" :step="0" placeholder="请输入${label}"></u-number-input>`;
}
else if (propertyTypeName === 'Decimal') {
formItem += `<u-number-input v-model="${vModel}" :precision="0" :step="0" placeholder="请输入${label}"></u-number-input>`;
}
else if (propertyTypeName === 'String' && propertyTypeMaxLength > 256) {
formItem += `<u-textarea v-model="${vModel}" placeholder="请输入${label}" :emptyValueIsNull="true"></u-textarea>`;
}
else if (propertyTypeName === 'Date') {
formItem += `<u-date-picker :clearable="true" :value.sync="${vModel}" placeholder="请选择${label}" :emptyValueIsNull="true"></u-date-picker>`;
}
else if (propertyTypeName === 'Time') {
formItem += `<u-time-picker :value.sync="${vModel}" placeholder="请选择${label}" :emptyValueIsNull="true"></u-time-picker>`;
}
else if (propertyTypeName === 'DateTime') {
formItem += `<u-date-time-picker :clearable="true" :value.sync="${vModel}" placeholder="请选择${label}" :emptyValueIsNull="true"></u-date-time-picker>`;
}
else {
const namespaceArr = propertyTypeNamespace?.split?.('.') || [];
const type = namespaceArr.pop();
if (type === 'enums') {
const Enum = dataSource.app.findNodeByCompleteName(`${propertyTypeNamespace}.${propertyTypeName}`);
formItem += (0, _1.genEnumSelectBlock)(Enum, `${vModel}`, '', `请选择${label}`, true);
}
else {
formItem += `<u-input v-model="${vModel}" placeholder="请输入${label}" :emptyValueIsNull="true"></u-input>`;
}
}
formItem += `</u-form-item>`;
return formItem;
})
.join('')}
<u-form-item layout="center" label-size="auto">
<u-button color="primary" @click="${nameGroup.viewLogicReload}">查 询</u-button>
</u-form-item>
</u-form>
</u-linear-layout>
<u-linear-layout mode="flex" alignment="start" justify="end"><u-button color="primary" @click="${nameGroup.viewLogicCreate}">创 建</u-button></u-linear-layout>
`;
}
function genSaveModalTemplate(entity, nameGroup, selectNameGroupMap) {
const dataSource = entity.parentNode;
const properties = entity.properties.filter((0, _1.filterProperty)('inForm'));
return `
<u-modal ref="${nameGroup.viewElementSaveModal}">
<template #title>
<div>创建</div>
</template>
<template #body>
<u-form ref="${nameGroup.viewElementSaveModalForm}">
${properties
.map((property) => {
const vModel = `${nameGroup.viewVariableInput}.${property.name}`;
const label = (property.label || property.name).replace(/"/g, '"');
const required = !!property.required;
const rules = [];
if (property.rules && property.rules.length) {
property.rules.forEach((rule) => rules.push(rule));
}
if (required)
rules.push('required');
const rulesStr = rules.join(' | ');
let formItem = `<u-form-item
${required ? ':required="true"' : ''}
${rulesStr.length ? `rules="${rulesStr}"` : ''}
layout="center"
><template #label><u-text text="${label}"></u-text></template>`;
const { typeAnnotation } = property || {};
const { typeName: propertyTypeName, typeNamespace: propertyTypeNamespace } = typeAnnotation || {};
const propertyTypeMaxLength = Number(property.rules
.find((item) => item.indexOf('max') > -1)
?.split('(')[1]
.slice(0, -1)) || 0;
if (property.relationEntity) {
// 有外键关联
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"
textField="${lowerEntityName}.${displayedProperty.name}" valueField="${lowerEntityName}.${relationProperty.name}" :pagination="true" v-model="${vModel}" :emptyValueIsNull="true">
</u-select>
`;
}
else
return '';
}
else
return '';
}
else if (propertyTypeName === 'Boolean') {
formItem += `
<u-select :clearable="true" v-model="${vModel}" placeholder="请选择${label}" :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 v-model="${vModel}" placeholder="请输入${label}"></u-number-input>`;
}
else if (propertyTypeName === 'Double') {
formItem += `<u-number-input v-model="${vModel}" :precision="0" :step="0" placeholder="请输入${label}"></u-number-input>`;
}
else if (propertyTypeName === 'Decimal') {
formItem += `<u-number-input v-model="${vModel}" :precision="0" :step="0" placeholder="请输入${label}"></u-number-input>`;
}
else if (propertyTypeName === 'String' && propertyTypeMaxLength > 256) {
formItem += `<u-textarea v-model="${vModel}" placeholder="请输入${label}" :emptyValueIsNull="true"></u-textarea>`;
}
else if (propertyTypeName === 'Date') {
formItem += `<u-date-picker :clearable="true" :value.sync="${vModel}" placeholder="请选择${label}" :emptyValueIsNull="true"></u-date-picker>`;
}
else if (propertyTypeName === 'Time') {
formItem += `<u-time-picker :value.sync="${vModel}" placeholder="请选择${label}" :emptyValueIsNull="true"></u-time-picker>`;
}
else if (propertyTypeName === 'DateTime') {
formItem += `<u-date-time-picker :clearable="true" :value.sync="${vModel}" placeholder="请选择${label}" :emptyValueIsNull="true"></u-date-time-picker>`;
}
else {
const namespaceArr = propertyTypeNamespace?.split?.('.') || [];
const type = namespaceArr.pop();
if (type === 'enums') {
const Enum = dataSource.app.findNodeByCompleteName(`${propertyTypeNamespace}.${propertyTypeName}`);
formItem += (0, _1.genEnumSelectBlock)(Enum, `${vModel}`, '', `请选择${label}`, true);
}
else {
formItem += `<u-input v-model="${vModel}" placeholder="请输入${label}" :emptyValueIsNull="true"></u-input>`;
}
}
formItem += `</u-form-item>\n`;
return formItem;
})
.join('')}
</u-form>
</template>
<template #foot>
<u-linear-layout>
<u-button color="primary" @click="${nameGroup.viewLogicSubmit}()">立即创建</u-button>
</u-linear-layout>
</template>
</u-modal>`;
}
function genInitLogic(nameGroup) {
return utils_1.NaslNode.Logic({
name: nameGroup.viewLogicInit,
description: '',
params: [],
returns: [],
variables: [],
body: [
utils_1.NaslLogicItem.Start,
utils_1.NaslLogicItem.CallFunction({
calleeName: 'Clear',
arguments: [
utils_1.NaslLogicItem.Argument({
keyword: 'struct',
expression: utils_1.NaslLogicItem.Identifier({
name: nameGroup.viewVariableFilter,
}),
}),
utils_1.NaslLogicItem.Argument({
keyword: 'mode',
expression: utils_1.NaslLogicItem.StringLiteral({
value: 'deep',
}),
}),
],
}),
utils_1.NaslLogicItem.End,
],
playground: [],
});
}
function genCreateLogic(nameGroup) {
return utils_1.NaslNode.Logic({
name: nameGroup.viewLogicCreate,
description: '',
params: [],
returns: [],
variables: [],
body: [
utils_1.NaslLogicItem.Start,
utils_1.NaslLogicItem.Assignment({
left: utils_1.NaslLogicItem.Identifier({
name: nameGroup.viewVariableInput,
}),
right: utils_1.NaslLogicItem.CallFunction({
calleeName: 'Clone',
arguments: [
utils_1.NaslLogicItem.Argument({
keyword: 'obj',
expression: utils_1.NaslLogicItem.Identifier({
name: nameGroup.viewVariableEntity,
}),
}),
],
}),
}),
(0, _1.genCallComponentLogic)(nameGroup.viewElementSaveModal, 'open'),
utils_1.NaslLogicItem.End,
],
playground: [],
});
}
function genCurdEditMultipleKeyBlock(entity, oldNode) {
const likeComponent = oldNode?.likeComponent;
const dataSource = entity.parentNode;
const module = dataSource.app;
const viewElementMainView = likeComponent.getViewElementUniqueName('tableView');
const nameGroup = (0, _1.genUniqueQueryNameGroup)(module, likeComponent, viewElementMainView);
nameGroup.viewElementMainView = viewElementMainView;
nameGroup.viewElementSaveModal = likeComponent.getViewElementUniqueName('saveModal');
nameGroup.viewElementSaveModalForm = likeComponent.getViewElementUniqueName('saveModalForm');
nameGroup.viewLogicRemove = likeComponent.getLogicUniqueName('remove');
nameGroup.viewLogicInit = likeComponent.getLogicUniqueName('init');
nameGroup.viewLogicCreate = likeComponent.getLogicUniqueName('create');
nameGroup.viewLogicSubmit = likeComponent.getLogicUniqueName('submit');
nameGroup.viewLogicBlurUpdate = likeComponent.getLogicUniqueName('blurUpdate');
nameGroup.viewLogicReload = likeComponent.getLogicUniqueName('reload');
nameGroup.viewVariableEntity = likeComponent.getVariableUniqueName(utils.firstLowerCase(entity.name));
nameGroup.viewVariableInput = likeComponent.getVariableUniqueName('input');
nameGroup.viewVariableFilter = likeComponent.getVariableUniqueName('filter');
// 收集所有和本实体关联的实体
const entitySet = new Set();
entitySet.add(entity);
const selectNameGroupMap = new Map();
const newLogics = [];
const newLoadSelectLogics = [];
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 viewElementSelect = likeComponent.getViewElementUniqueName('select');
const selectNameGroup = (0, _1.genUniqueQueryNameGroup)(module, likeComponent, viewElementSelect, false, relationEntity.name);
selectNameGroup.viewElementSelect = viewElementSelect;
// 存在多个属性关联同一个实体的情况,因此加上属性名用以唯一标识
const key = [property.name, relationEntity.name].join('-');
selectNameGroupMap.set(key, selectNameGroup);
const newLogic = (0, _1.genQueryLogic)([relationEntity], selectNameGroup, false, false, module);
newLogics.push(newLogic);
newLoadSelectLogics.push((0, _1.genLoadSelectLogic)(relationEntity, selectNameGroup, newLogic));
}
}
}
});
const allEntities = [...entitySet];
const entityLogic = (0, _1.genQueryLogic)(allEntities, nameGroup, true, true, module);
newLogics.push(entityLogic);
return `<template>
<u-linear-layout direction="vertical">
${genFilterTemplate(entity, nameGroup, selectNameGroupMap)}
${(0, _1.genEditTableTemplate)(entity, nameGroup, entityLogic, selectNameGroupMap, 'genCurdEditMultipleKeyBlock')}
${genSaveModalTemplate(entity, nameGroup, selectNameGroupMap)}
</u-linear-layout>
</template>
<definition>
{
"viewVariables": [
{
"concept": "Variable",
"name": "${nameGroup.viewVariableEntity}",
"typeAnnotation": ${JSON.stringify(utils_1.NaslTypeAnnotation.Reference({
typeNamespace: entity.getNamespace(),
typeName: entity.name,
}))}
},
{
"concept": "Variable",
"name": "${nameGroup.viewVariableInput}",
"typeAnnotation": ${JSON.stringify(utils_1.NaslTypeAnnotation.Reference({
typeNamespace: entity.getNamespace(),
typeName: entity.name,
}))}
},
{
"concept": "Variable",
"name": "${nameGroup.viewVariableFilter}",
"typeAnnotation": ${JSON.stringify(utils_1.NaslTypeAnnotation.Reference({
typeNamespace: entity.getNamespace(),
typeName: entity.name,
}))}
}
],
"viewLogics": [
${JSON.stringify((0, _1.genEditTableLoadLogic)(entity, nameGroup, entityLogic, true))},
${JSON.stringify((0, _1.genTableRemoveLogic)(entity, nameGroup))},
${JSON.stringify(genInitLogic(nameGroup))},
${JSON.stringify(genCreateLogic(nameGroup))},
${JSON.stringify((0, _1.genSubmitLogic)(entity, nameGroup))},
${JSON.stringify((0, _1.genBlurUpdateLogic)(entity, nameGroup))},
${JSON.stringify((0, _1.genReloadLogic)(nameGroup))}
${newLoadSelectLogics.map((logic) => `,${JSON.stringify(logic)}`).join('\n')}
],
"viewBindEvents": [
{
"concept": "BindEvent",
"arguments": [],
"name": "created",
"calleeNamespace": "",
"calleeName": "${nameGroup.viewLogicInit}"
}
],
"logics": ${JSON.stringify(newLogics)}
}
</definition>
`;
}
exports.genCurdEditMultipleKeyBlock = genCurdEditMultipleKeyBlock;
/**
* 根据实体属性生成表格列模板
* @param property 实体属性
*/
function genEditTableColumnComponent(app, entity, property, view, nameGroup) {
const dataSource = entity.parentNode;
const valueExpression = `${nameGroup.valuePrefixExpression}.${property.name}`;
const module = app;
const newLogics = [];
const newLoadSelectLogics = [];
const genEditComponent = (property) => {
const label = (property.label || property.name).replace(/"/g, '"');
let formItem = '';
const propertyTypeName = property.typeAnnotation.typeName;
const propertyTypeNamespace = property.typeAnnotation.typeNamespace;
const propertyTypeMaxLength = Number(property.rules
?.find?.((item) => item.indexOf('max') > -1)
?.split('(')[1]
.slice(0, -1)) || 0;
if (property.relationEntity) {
// 有外键关联
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 selectNameGroup = {
viewLogicLoad: nameGroup.viewElementSelectLogic,
viewElementSelect: '',
};
let dataSourceValue = selectNameGroup.viewLogicLoad;
if (!nameGroup.viewElementSelectLogic) {
const viewElementSelect = view.getViewElementUniqueName('select');
const selectNameGroup = (0, _1.genUniqueQueryNameGroup)(module, view, viewElementSelect, false, relationEntity.name);
selectNameGroup.viewElementSelect = viewElementSelect;
const newLogic = (0, _1.genQueryLogic)([relationEntity], selectNameGroup, false, false, module);
newLogics.push(newLogic);
newLoadSelectLogics.push((0, _1.genLoadSelectLogic)(relationEntity, selectNameGroup, newLogic));
dataSourceValue = `(params) => ${selectNameGroup.viewLogicLoad}(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 && propertyTypeNamespace.split('.')) || [];
const type = namespaceArr.pop();
if (type === 'enums') {
const enumeration = 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 `<template>${genEditComponent(property)}</template>
<definition>
{
"viewLogics": [
${JSON.stringify((0, _1.genBlurUpdateLogic)(entity, nameGroup))}
${newLoadSelectLogics.map((logic) => `,${JSON.stringify(logic)}`).join('\n')}
],
"logics": ${JSON.stringify(newLogics)}
}
</definition>`;
}
exports.genEditTableColumnComponent = genEditTableColumnComponent;
// 生成单选、多选、选择器的数据源
function genFormDesignerSelectLoadLogic(entity, nameGroup, newLogic, defaultValue = {}) {
const moduleNode = entity.app;
const moduleNamespace = moduleNode?.getNamespace();
const params = [];
Object.entries(defaultValue).forEach(([key, value], index) => {
params.push(genLogicParamWithDefaultValue(`${newLogic.params[index].name}`, value));
});
return {
logic: 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,
],
}),
params
};
}
exports.genFormDesignerSelectLoadLogic = genFormDesignerSelectLoadLogic;
function genLogicParamWithDefaultValue(paramIdOrName, defaultValue) {
const genArgumentExpression = (defaultValue) => {
if (typeof defaultValue === 'string') {
return new concepts_1.StringLiteral({ value: defaultValue });
}
else if (typeof defaultValue === 'number') {
return new concepts_1.NumericLiteral({ value: defaultValue.toString() });
}
};
return utils_1.NaslLogicItem.Argument({
keyword: paramIdOrName,
expression: genArgumentExpression(defaultValue),
});
}
exports.genLogicParamWithDefaultValue = genLogicParamWithDefaultValue;
//# sourceMappingURL=genCurdEditMultipleKeyBlock.js.map