weaver-e10-builder 1.0.12-beta → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/actionflow.d.ts.map +1 -1
- package/dist/commands/actionflow.js +17 -3
- package/dist/commands/actionflow.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +3 -0
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/form-association-manage.d.ts +3 -0
- package/dist/commands/form-association-manage.d.ts.map +1 -0
- package/dist/commands/form-association-manage.js +76 -0
- package/dist/commands/form-association-manage.js.map +1 -0
- package/dist/commands/form-association.d.ts.map +1 -1
- package/dist/commands/form-association.js +29 -25
- package/dist/commands/form-association.js.map +1 -1
- package/dist/commands/form-button.d.ts.map +1 -1
- package/dist/commands/form-button.js +71 -159
- package/dist/commands/form-button.js.map +1 -1
- package/dist/commands/form-field-linkage.d.ts +3 -0
- package/dist/commands/form-field-linkage.d.ts.map +1 -0
- package/dist/commands/form-field-linkage.js +300 -0
- package/dist/commands/form-field-linkage.js.map +1 -0
- package/dist/commands/form-list-columns.d.ts +3 -0
- package/dist/commands/form-list-columns.d.ts.map +1 -0
- package/dist/commands/form-list-columns.js +50 -0
- package/dist/commands/form-list-columns.js.map +1 -0
- package/dist/commands/form-list-stats.d.ts +0 -8
- package/dist/commands/form-list-stats.d.ts.map +1 -1
- package/dist/commands/form-list-stats.js +41 -133
- package/dist/commands/form-list-stats.js.map +1 -1
- package/dist/commands/form-list.d.ts.map +1 -1
- package/dist/commands/form-list.js +2 -126
- package/dist/commands/form-list.js.map +1 -1
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +116 -2
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/interface.d.ts +3 -0
- package/dist/commands/interface.d.ts.map +1 -0
- package/dist/commands/interface.js +51 -0
- package/dist/commands/interface.js.map +1 -0
- package/dist/commands/menu-permission.d.ts.map +1 -1
- package/dist/commands/menu-permission.js +133 -82
- package/dist/commands/menu-permission.js.map +1 -1
- package/dist/commands/skill.js +2 -2
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +101 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/workflow-node-empty-handle.d.ts +13 -0
- package/dist/commands/workflow-node-empty-handle.d.ts.map +1 -0
- package/dist/commands/workflow-node-empty-handle.js +137 -0
- package/dist/commands/workflow-node-empty-handle.js.map +1 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +90 -18
- package/dist/commands/workflow.js.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/postinstall.d.ts +2 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +17 -0
- package/dist/postinstall.js.map +1 -0
- package/dist/services/actionflow/command_output.d.ts +4 -0
- package/dist/services/actionflow/command_output.d.ts.map +1 -1
- package/dist/services/actionflow/command_output.js +44 -0
- package/dist/services/actionflow/command_output.js.map +1 -1
- package/dist/services/actionflow/component_registry.d.ts.map +1 -1
- package/dist/services/actionflow/component_registry.js +5 -1
- package/dist/services/actionflow/component_registry.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.js +1 -1
- package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
- package/dist/services/actionflow/components/approve_trigger.d.ts +5 -0
- package/dist/services/actionflow/components/approve_trigger.d.ts.map +1 -1
- package/dist/services/actionflow/components/approve_trigger.js +22 -1
- package/dist/services/actionflow/components/approve_trigger.js.map +1 -1
- package/dist/services/actionflow/components/approve_trigger_compiler.js +2 -2
- package/dist/services/actionflow/components/approve_trigger_compiler.js.map +1 -1
- package/dist/services/actionflow/components/custom_trigger.d.ts +9 -0
- package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -0
- package/dist/services/actionflow/components/custom_trigger.js +47 -0
- package/dist/services/actionflow/components/custom_trigger.js.map +1 -0
- package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.js +29 -3
- package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
- package/dist/services/actionflow/components/event_button.d.ts +3 -0
- package/dist/services/actionflow/components/event_button.d.ts.map +1 -0
- package/dist/services/actionflow/components/event_button.js +32 -0
- package/dist/services/actionflow/components/event_button.js.map +1 -0
- package/dist/services/actionflow/components/index.d.ts.map +1 -1
- package/dist/services/actionflow/components/index.js +10 -0
- package/dist/services/actionflow/components/index.js.map +1 -1
- package/dist/services/actionflow/components/inner_mq_listener.d.ts +3 -0
- package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -0
- package/dist/services/actionflow/components/inner_mq_listener.js +40 -0
- package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -0
- package/dist/services/actionflow/components/inner_mq_send.d.ts +5 -0
- package/dist/services/actionflow/components/inner_mq_send.d.ts.map +1 -0
- package/dist/services/actionflow/components/inner_mq_send.js +72 -0
- package/dist/services/actionflow/components/inner_mq_send.js.map +1 -0
- package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
- package/dist/services/actionflow/components/send_message.js +7 -4
- package/dist/services/actionflow/components/send_message.js.map +1 -1
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
- package/dist/services/actionflow/context_preflight.js +7 -1
- package/dist/services/actionflow/context_preflight.js.map +1 -1
- package/dist/services/actionflow/design_client.d.ts +13 -2
- package/dist/services/actionflow/design_client.d.ts.map +1 -1
- package/dist/services/actionflow/design_client.js +56 -8
- package/dist/services/actionflow/design_client.js.map +1 -1
- package/dist/services/actionflow/enrich_approve_trigger.d.ts.map +1 -1
- package/dist/services/actionflow/enrich_approve_trigger.js +31 -0
- package/dist/services/actionflow/enrich_approve_trigger.js.map +1 -1
- package/dist/services/actionflow/form_source.d.ts +2 -0
- package/dist/services/actionflow/form_source.d.ts.map +1 -1
- package/dist/services/actionflow/form_source.js +5 -0
- package/dist/services/actionflow/form_source.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts +1 -1
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +118 -12
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/functions_catalog.d.ts +2 -1
- package/dist/services/actionflow/functions_catalog.d.ts.map +1 -1
- package/dist/services/actionflow/functions_catalog.js +2392 -180
- package/dist/services/actionflow/functions_catalog.js.map +1 -1
- package/dist/services/actionflow/functions_source.d.ts.map +1 -1
- package/dist/services/actionflow/functions_source.js +3 -0
- package/dist/services/actionflow/functions_source.js.map +1 -1
- package/dist/services/actionflow/generation_service.d.ts +11 -0
- package/dist/services/actionflow/generation_service.d.ts.map +1 -1
- package/dist/services/actionflow/generation_service.js +66 -23
- package/dist/services/actionflow/generation_service.js.map +1 -1
- package/dist/services/actionflow/plan_constraints.d.ts +5 -0
- package/dist/services/actionflow/plan_constraints.d.ts.map +1 -0
- package/dist/services/actionflow/plan_constraints.js +54 -0
- package/dist/services/actionflow/plan_constraints.js.map +1 -0
- package/dist/services/actionflow/preflight_service.d.ts +3 -0
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +152 -8
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
- package/dist/services/actionflow/readback_verifier.js +63 -2
- package/dist/services/actionflow/readback_verifier.js.map +1 -1
- package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
- package/dist/services/actionflow/save_workflow_draft.js +43 -2
- package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
- package/dist/services/actionflow/update_service.d.ts +41 -0
- package/dist/services/actionflow/update_service.d.ts.map +1 -0
- package/dist/services/actionflow/update_service.js +767 -0
- package/dist/services/actionflow/update_service.js.map +1 -0
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +120 -12
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/esb-interface/document-parser.d.ts +6 -0
- package/dist/services/esb-interface/document-parser.d.ts.map +1 -0
- package/dist/services/esb-interface/document-parser.js +247 -0
- package/dist/services/esb-interface/document-parser.js.map +1 -0
- package/dist/services/esb-interface/importer.d.ts +9 -0
- package/dist/services/esb-interface/importer.d.ts.map +1 -0
- package/dist/services/esb-interface/importer.js +44 -0
- package/dist/services/esb-interface/importer.js.map +1 -0
- package/dist/services/esb-interface/postman-collection.d.ts +9 -0
- package/dist/services/esb-interface/postman-collection.d.ts.map +1 -0
- package/dist/services/esb-interface/postman-collection.js +125 -0
- package/dist/services/esb-interface/postman-collection.js.map +1 -0
- package/dist/services/esb-interface/types.d.ts +91 -0
- package/dist/services/esb-interface/types.d.ts.map +1 -0
- package/dist/services/esb-interface/types.js +2 -0
- package/dist/services/esb-interface/types.js.map +1 -0
- package/dist/services/form-association.d.ts +49 -0
- package/dist/services/form-association.d.ts.map +1 -0
- package/dist/services/form-association.js +279 -0
- package/dist/services/form-association.js.map +1 -0
- package/dist/services/form-button-position.d.ts +35 -0
- package/dist/services/form-button-position.d.ts.map +1 -0
- package/dist/services/form-button-position.js +109 -0
- package/dist/services/form-button-position.js.map +1 -0
- package/dist/services/form-list-columns.d.ts +54 -0
- package/dist/services/form-list-columns.d.ts.map +1 -0
- package/dist/services/form-list-columns.js +236 -0
- package/dist/services/form-list-columns.js.map +1 -0
- package/dist/services/form-list-stats.d.ts +44 -0
- package/dist/services/form-list-stats.d.ts.map +1 -0
- package/dist/services/form-list-stats.js +302 -0
- package/dist/services/form-list-stats.js.map +1 -0
- package/dist/services/skill-provision.d.ts +6 -1
- package/dist/services/skill-provision.d.ts.map +1 -1
- package/dist/services/skill-provision.js +12 -2
- package/dist/services/skill-provision.js.map +1 -1
- package/dist/services/update-check.d.ts +24 -0
- package/dist/services/update-check.d.ts.map +1 -0
- package/dist/services/update-check.js +108 -0
- package/dist/services/update-check.js.map +1 -0
- package/package.json +2 -1
- package/skill-docs/SKILL.md +29 -107
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +61 -39
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -21
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +23 -21
- package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +101 -75
- package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +33 -0
- package/skill-docs/actionflows/references/components/logic/Condition.md +23 -23
- package/skill-docs/actionflows/references/components/message/InnerMQSend.md +40 -0
- package/skill-docs/actionflows/references/components/message/SendMessage.md +2 -2
- package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +45 -0
- package/skill-docs/actionflows/references/components/trigger/InnerMQListener.md +40 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveTrigger.md +35 -0
- package/skill-docs/actionflows/references/condition_rules.md +4 -2
- package/skill-docs/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -1046
- package/skill-docs/actionflows/references/trigger_runtime_notes.md +53 -51
- package/skill-docs/references/common/guide-plan-template.md +201 -0
- package/skill-docs/references/common/ref-cli-commands.md +45 -11
- package/skill-docs/references/form/guide-create-form.md +4 -2
- package/skill-docs/references/form/guide-field-linkage.md +121 -0
- package/skill-docs/references/form/guide-form-association.md +108 -0
- package/skill-docs/references/form/guide-form-button.md +54 -0
- package/skill-docs/references/form/guide-form-view.md +26 -9
- package/skill-docs/references/form/guide-list-columns.md +52 -0
- package/skill-docs/references/form/guide-list-stats.md +83 -0
- package/skill-docs/references/workflow/guide-workflow-action.md +172 -168
- package/skill-docs/references/workflow/guide-workflow.md +16 -2
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { randomInt } from 'node:crypto';
|
|
2
|
+
import { lzwCompress } from '../core/lzw.js';
|
|
3
|
+
export const ASSOCIATION_BASE = '/api/bs/ebuilder/form/association';
|
|
4
|
+
function data(response, operation) {
|
|
5
|
+
if (response?.code !== 200 || response?.status === false || response?.fail === true || response?.data == null)
|
|
6
|
+
throw new Error(`${operation}失败: ${response?.msg || '返回数据无效'}`);
|
|
7
|
+
return response.data;
|
|
8
|
+
}
|
|
9
|
+
export function associationLayouts(values) {
|
|
10
|
+
const map = { '显示': '0', show: '0', '0': '0', '编辑': '2', edit: '2', '2': '2' };
|
|
11
|
+
if (values.length === 1 && ['none', '无'].includes(values[0]))
|
|
12
|
+
return '';
|
|
13
|
+
if (!values.length)
|
|
14
|
+
throw new Error('请指定显示/编辑布局,或 none');
|
|
15
|
+
return [...new Set(values.map(v => {
|
|
16
|
+
if (!map[v])
|
|
17
|
+
throw new Error(`未知布局: ${v}(显示=0,编辑=2)`);
|
|
18
|
+
return map[v];
|
|
19
|
+
}))].sort().join(',');
|
|
20
|
+
}
|
|
21
|
+
export function associationTerminals(values) {
|
|
22
|
+
if (!values.length || values.some(v => !['PC', 'MOBILE'].includes(v)))
|
|
23
|
+
throw new Error('适用终端仅支持 PC / MOBILE,至少选择一个');
|
|
24
|
+
return [...new Set(values)];
|
|
25
|
+
}
|
|
26
|
+
/** 详情返回明文条件,所有写操作均需压缩;不能因只改布局而损坏原权限条件。 */
|
|
27
|
+
export function serializeAssociation(detail) {
|
|
28
|
+
const result = structuredClone(detail);
|
|
29
|
+
if (!Array.isArray(result.associationActions) || !Array.isArray(result.associationPermissions))
|
|
30
|
+
throw new Error('关联详情缺少动作或权限,停止保存');
|
|
31
|
+
result.associationPermissions = result.associationPermissions.map((permission) => {
|
|
32
|
+
const root = permission.condition?.rootdata || '';
|
|
33
|
+
if (root)
|
|
34
|
+
JSON.parse(root); // 不接受未识别或已压缩的数据,避免重复压缩。
|
|
35
|
+
return { ...permission, condition: { ...permission.condition, rootdata: root ? lzwCompress(root) : '' } };
|
|
36
|
+
});
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
export function withConditionLogic(tree, logic) {
|
|
40
|
+
if (!['and', 'or'].includes(logic))
|
|
41
|
+
throw new Error('--logic 必须为 and 或 or');
|
|
42
|
+
return JSON.stringify({ ...JSON.parse(tree), relationship: logic === 'or' ? '2' : '1' });
|
|
43
|
+
}
|
|
44
|
+
function chooseField(fields, selector, source) {
|
|
45
|
+
if (typeof selector !== 'string' || !selector.trim())
|
|
46
|
+
throw new Error('映射必须指定字符串 targetField 和 sourceField');
|
|
47
|
+
const idKey = source ? 'fieldId' : 'id';
|
|
48
|
+
const exact = fields.filter(f => String(f[idKey]) === selector);
|
|
49
|
+
const matches = exact.length ? exact : fields.filter(f => (source ? f.fieldShowName : f.text) === selector);
|
|
50
|
+
if (matches.length !== 1)
|
|
51
|
+
throw new Error(`${source ? '来源' : '目标'}字段 ${selector} ${matches.length ? '不唯一,请用 ID' : '不存在'}`);
|
|
52
|
+
if (matches[0].child || matches[0].mainField === false || matches[0].subTableId)
|
|
53
|
+
throw new Error('当前筛选映射仅支持主表字段,明细字段尚未验证');
|
|
54
|
+
return matches[0];
|
|
55
|
+
}
|
|
56
|
+
export function buildAssociationMappings(mappings, sourceFields, targetFields) {
|
|
57
|
+
if (!Array.isArray(mappings))
|
|
58
|
+
throw new Error('--mappings 必须为数组');
|
|
59
|
+
const seen = new Set();
|
|
60
|
+
return mappings.map(mapping => {
|
|
61
|
+
if (!mapping || typeof mapping !== 'object')
|
|
62
|
+
throw new Error('映射项必须是对象');
|
|
63
|
+
const source = chooseField(sourceFields, mapping.sourceField, true);
|
|
64
|
+
const target = chooseField(targetFields, mapping.targetField, false);
|
|
65
|
+
if (seen.has(String(target.id)))
|
|
66
|
+
throw new Error(`目标字段 ${target.id} 重复映射`);
|
|
67
|
+
seen.add(String(target.id));
|
|
68
|
+
return {
|
|
69
|
+
name: { id: String(target.id), content: target.text, showDetailName: '', compType: target.compType || target.type },
|
|
70
|
+
nameType: 'FORMFIELDS',
|
|
71
|
+
value: { id: String(source.fieldId), content: source.fieldShowName, name: source.fieldShowName,
|
|
72
|
+
compType: source.componentKey || source.fieldType, fieldId: String(source.fieldId), fieldName: source.fieldName, dataIndex: source.dataIndex },
|
|
73
|
+
type: 'FORMFIELDS',
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
export function selectAssociationAction(actions, actionId) {
|
|
78
|
+
const candidates = actions.map((action, index) => ({ action, index })).filter(({ action }) => {
|
|
79
|
+
if (action.actionType !== 'openpage')
|
|
80
|
+
return false;
|
|
81
|
+
if (actionId)
|
|
82
|
+
return String(action.id) === actionId;
|
|
83
|
+
try {
|
|
84
|
+
return JSON.parse(action.url).page?.pageType === 'VIEWPORT';
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
if (candidates.length !== 1)
|
|
91
|
+
throw new Error('无法唯一确定目标视图动作,请指定 --action <动作ID>');
|
|
92
|
+
return candidates[0].index;
|
|
93
|
+
}
|
|
94
|
+
function collectViews(nodes, parent, out = []) {
|
|
95
|
+
for (const node of nodes) {
|
|
96
|
+
if (node.type === 'VIEWPORT')
|
|
97
|
+
out.push({ id: String(node.id), name: node.name.replace(/^\[[^\]]+\]/, ''), viewType: node.viewType, objId: parent?.id, formName: parent?.name });
|
|
98
|
+
if (Array.isArray(node.menus))
|
|
99
|
+
collectViews(node.menus, node, out);
|
|
100
|
+
}
|
|
101
|
+
return out;
|
|
102
|
+
}
|
|
103
|
+
export class AssociationService {
|
|
104
|
+
client;
|
|
105
|
+
base;
|
|
106
|
+
appId;
|
|
107
|
+
objId;
|
|
108
|
+
constructor(client, base, appId, objId) {
|
|
109
|
+
this.client = client;
|
|
110
|
+
this.base = base;
|
|
111
|
+
this.appId = appId;
|
|
112
|
+
this.objId = objId;
|
|
113
|
+
}
|
|
114
|
+
headers() { return { ebBusinessId: this.appId }; }
|
|
115
|
+
query() { return new URLSearchParams({ apid: this.appId, tpaid: this.objId, objId: this.objId }).toString(); }
|
|
116
|
+
async list() {
|
|
117
|
+
const result = data(await this.client.get(`${this.base}${ASSOCIATION_BASE}/getListByObjId?${this.query()}&pageName=`, this.headers()), '读取关联列表');
|
|
118
|
+
if (!Array.isArray(result.datas))
|
|
119
|
+
throw new Error('关联列表结构无效');
|
|
120
|
+
if (Number(result.total) > result.datas.length)
|
|
121
|
+
throw new Error('关联列表返回不完整,停止匹配关联 ID');
|
|
122
|
+
return result.datas;
|
|
123
|
+
}
|
|
124
|
+
async get(id) {
|
|
125
|
+
const detail = data(await this.client.get(`${this.base}${ASSOCIATION_BASE}/getDataAssociationById/${encodeURIComponent(id)}?${this.query()}`, this.headers()), '读取关联详情');
|
|
126
|
+
if (String(detail.objId) !== this.objId)
|
|
127
|
+
throw new Error(`关联 ${id} 不属于表单 ${this.objId}`);
|
|
128
|
+
if (!Array.isArray(detail.associationActions) || !Array.isArray(detail.associationPermissions))
|
|
129
|
+
throw new Error('关联详情缺少动作或权限');
|
|
130
|
+
return { ...detail, id };
|
|
131
|
+
}
|
|
132
|
+
async views(targetApp = this.appId) {
|
|
133
|
+
const query = new URLSearchParams({ appId: targetApp, pageId: '', clientType: 'PC', module: 'EB_PAGE', entranceType: '0' });
|
|
134
|
+
const tree = data(await this.client.get(`${this.base}/api/bs/ebuilder/common/link/menu/tree?${query}`, { ebBusinessId: targetApp }), '读取目标视图');
|
|
135
|
+
if (!Array.isArray(tree))
|
|
136
|
+
throw new Error('目标视图树结构无效');
|
|
137
|
+
// 当前应用分支有明确归属;其他应用须通过 --target-app 单独查询。
|
|
138
|
+
return collectViews(tree.filter(node => node.id === 'currentApp'));
|
|
139
|
+
}
|
|
140
|
+
async resolveView(selector, targetApp = this.appId) {
|
|
141
|
+
const available = await this.views(targetApp);
|
|
142
|
+
const exact = available.filter(v => v.id === selector);
|
|
143
|
+
const matches = exact.length ? exact : available.filter(v => v.name === selector);
|
|
144
|
+
if (matches.length !== 1)
|
|
145
|
+
throw new Error(`目标视图 ${selector} ${matches.length ? '不唯一,请用 ID' : '不在指定应用可选视图中'}`);
|
|
146
|
+
const view = matches[0];
|
|
147
|
+
const info = data(await this.client.get(`${this.base}/api/bs/ebuilder/form/viewdesigner/getViewBaseInfoByPageId?pageId=${encodeURIComponent(view.id)}`, { ebBusinessId: targetApp }), '读取视图归属');
|
|
148
|
+
if (!info.isExist || String(info.objId) !== String(view.objId))
|
|
149
|
+
throw new Error('目标视图不存在或所属表单与菜单树不一致');
|
|
150
|
+
return { ...view, appId: targetApp };
|
|
151
|
+
}
|
|
152
|
+
async fields(view) {
|
|
153
|
+
const source = data(await this.client.get(`${this.base}${ASSOCIATION_BASE}/getObjFieldEntities/${this.objId}?${this.query()}`, this.headers()), '读取来源字段');
|
|
154
|
+
const query = new URLSearchParams({ sourceId: view.objId, sourceType: 'FORM', needChild: 'true', customParam: JSON.stringify({ terminal: '', appId: view.appId }) });
|
|
155
|
+
const groups = data(await this.client.get(`${this.base}/api/ebuilder/common/ds/fields?${query}`, { ebBusinessId: view.appId }), '读取目标字段');
|
|
156
|
+
if (!Array.isArray(source) || !Array.isArray(groups))
|
|
157
|
+
throw new Error('字段元数据结构无效');
|
|
158
|
+
const target = groups.filter(g => String(g.id) === String(view.objId)).flatMap(g => g.fields || []);
|
|
159
|
+
if (!target.length)
|
|
160
|
+
throw new Error('未读到目标主表字段');
|
|
161
|
+
return { source, target };
|
|
162
|
+
}
|
|
163
|
+
async mapped(mappings, view) {
|
|
164
|
+
if (!Array.isArray(mappings))
|
|
165
|
+
throw new Error('--mappings 必须为数组');
|
|
166
|
+
if (!mappings.length)
|
|
167
|
+
return [];
|
|
168
|
+
const fields = await this.fields(view);
|
|
169
|
+
return buildAssociationMappings(mappings, fields.source, fields.target);
|
|
170
|
+
}
|
|
171
|
+
async create(options) {
|
|
172
|
+
if (!options.name?.trim() || !options.view)
|
|
173
|
+
throw new Error('创建需指定页签名称和目标视图');
|
|
174
|
+
if (!Array.isArray(options.permissions) || !options.permissions.length || options.permissions.some(p => !p || !p.selectedType))
|
|
175
|
+
throw new Error('创建需显式指定非空 --permissions 数组(selectedType 等平台权限配置)');
|
|
176
|
+
const before = await this.list();
|
|
177
|
+
if (before.some(a => a.pageName === options.name))
|
|
178
|
+
throw new Error('同名页签已存在,请按 ID 修改,避免重复创建');
|
|
179
|
+
const view = await this.resolveView(options.view, options.targetApp);
|
|
180
|
+
const link = { openMode: '1', name: view.name, autoFillParams: true,
|
|
181
|
+
icon: { path: '#icon-eBuilder-o', style: { color: '#5d9cec', fillType: 'borderColor', borderColor: '#5d9cec' } },
|
|
182
|
+
page: { pageId: view.id, parentId: `Form_${view.objId}`, openMode: '1', pageName: view.name, pageType: 'VIEWPORT', appid: view.appId, pageViewType: view.viewType, dsDataset: {} },
|
|
183
|
+
params: await this.mapped(options.mappings || [], view) };
|
|
184
|
+
const draft = {
|
|
185
|
+
objId: this.objId, pageName: options.name, open: options.enabled ?? true, selected: false, confirm: 0,
|
|
186
|
+
showLayout: associationLayouts(options.layouts || ['显示']), applicable: associationTerminals(options.terminals || ['PC', 'MOBILE']),
|
|
187
|
+
associationPermissions: options.permissions, customTips: { tipsSql: '', tipsCustomApi: '' },
|
|
188
|
+
associationActions: [{ name: view.name, conditionTxt: '', id: `-${Date.now()}${randomInt(1000)}`, enable: 1,
|
|
189
|
+
actionType: 'openpage', buttonId: '', windowSize: 30, executeSelectedDatas: 0, url: JSON.stringify(link), openType: '1', index: 0,
|
|
190
|
+
interfacePath: '', desc: '', urlType: '0', urlFieldId: '', interfaceType: '', confirmTitle: '', ecode: '', littlecardName: '自定义小卡片', littlecardJson: '',
|
|
191
|
+
dataSource: '2', fieldAssignType: '[]', confirmContent: '', confirmTrue: '', confirmFalse: '' }],
|
|
192
|
+
};
|
|
193
|
+
const saved = data(await this.client.post(`${this.base}${ASSOCIATION_BASE}/saveOrUpdate?${this.query()}`, serializeAssociation(draft), this.headers()), '创建关联');
|
|
194
|
+
const beforeIds = new Set(before.map(a => String(a.id)));
|
|
195
|
+
const added = (await this.list()).filter(a => !beforeIds.has(String(a.id)) && a.pageName === options.name);
|
|
196
|
+
const ids = saved.id && !beforeIds.has(String(saved.id)) ? [String(saved.id)] : added.map(a => String(a.id));
|
|
197
|
+
const matches = [];
|
|
198
|
+
for (const id of ids) {
|
|
199
|
+
const detail = await this.get(id);
|
|
200
|
+
try {
|
|
201
|
+
verifyAssociation(draft, detail);
|
|
202
|
+
matches.push(detail);
|
|
203
|
+
}
|
|
204
|
+
catch { /* 并发创建同名页签时通过详情区分 */ }
|
|
205
|
+
}
|
|
206
|
+
if (matches.length !== 1)
|
|
207
|
+
throw new Error(`创建已提交,但无法唯一回读匹配页签(候选 ${ids.join(',')}),请查询 list,勿直接重试创建`);
|
|
208
|
+
return { success: true, verified: true, associationId: matches[0].id, detail: matches[0] };
|
|
209
|
+
}
|
|
210
|
+
async update(id, options) {
|
|
211
|
+
const draft = structuredClone(await this.get(id));
|
|
212
|
+
if (options.name !== undefined) {
|
|
213
|
+
if (!options.name.trim())
|
|
214
|
+
throw new Error('页签名称不能为空');
|
|
215
|
+
draft.pageName = options.name;
|
|
216
|
+
}
|
|
217
|
+
if (options.layouts)
|
|
218
|
+
draft.showLayout = associationLayouts(options.layouts);
|
|
219
|
+
if (options.terminals)
|
|
220
|
+
draft.applicable = associationTerminals(options.terminals);
|
|
221
|
+
if (options.enabled !== undefined)
|
|
222
|
+
draft.open = options.enabled;
|
|
223
|
+
if (options.targetApp && !options.view)
|
|
224
|
+
throw new Error('--target-app 必须同时指定 --view');
|
|
225
|
+
if (options.view || options.mappings !== undefined) {
|
|
226
|
+
const index = selectAssociationAction(draft.associationActions, options.action);
|
|
227
|
+
const action = draft.associationActions[index];
|
|
228
|
+
const link = JSON.parse(action.url);
|
|
229
|
+
if (link.page?.pageType !== 'VIEWPORT')
|
|
230
|
+
throw new Error('当前命令只支持绑定 VIEWPORT 视图的动作');
|
|
231
|
+
const view = await this.resolveView(options.view || link.page.pageId, options.targetApp || link.page.appid || this.appId);
|
|
232
|
+
if (view.id !== String(link.page.pageId) && (link.params || []).length && options.mappings === undefined)
|
|
233
|
+
throw new Error('切换目标视图时必须显式提供 --mappings([] 表示清空),避免沿用旧字段');
|
|
234
|
+
link.page = { ...link.page, pageId: view.id, parentId: `Form_${view.objId}`, pageName: view.name, pageType: 'VIEWPORT', appid: view.appId, pageViewType: view.viewType };
|
|
235
|
+
link.name = view.name;
|
|
236
|
+
if (options.mappings !== undefined) {
|
|
237
|
+
link.params = await this.mapped(options.mappings, view);
|
|
238
|
+
link.autoFillParams = true;
|
|
239
|
+
}
|
|
240
|
+
draft.associationActions[index] = { ...action, name: view.name, url: JSON.stringify(link) };
|
|
241
|
+
}
|
|
242
|
+
data(await this.client.post(`${this.base}${ASSOCIATION_BASE}/saveOrUpdate?${this.query()}`, serializeAssociation(draft), this.headers()), '更新关联');
|
|
243
|
+
const after = await this.get(id);
|
|
244
|
+
verifyAssociation(draft, after);
|
|
245
|
+
return { success: true, verified: true, associationId: id, detail: after };
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/** 校验业务语义,允许服务端补充时间戳、条件 moduleId、动作正式 ID 等。 */
|
|
249
|
+
export function verifyAssociation(expected, actual) {
|
|
250
|
+
const canonical = (value) => JSON.stringify(value, (_key, v) => v && typeof v === 'object' && !Array.isArray(v) ? Object.fromEntries(Object.keys(v).sort().map(k => [k, v[k]])) : v);
|
|
251
|
+
const equal = (a, b, label) => { if (canonical(a) !== canonical(b))
|
|
252
|
+
throw new Error(`已保存,但 ${label} 回读不一致`); };
|
|
253
|
+
for (const key of ['objId', 'pageName', 'open', 'selected', 'confirm'])
|
|
254
|
+
equal(expected[key], actual[key], key);
|
|
255
|
+
equal(String(expected.showLayout || '').split(',').sort(), String(actual.showLayout || '').split(',').sort(), '布局');
|
|
256
|
+
equal([...(expected.applicable || [])].sort(), [...(actual.applicable || [])].sort(), '适用终端');
|
|
257
|
+
equal(expected.associationActions.length, actual.associationActions?.length, '动作数量');
|
|
258
|
+
expected.associationActions.forEach((action, i) => {
|
|
259
|
+
const after = actual.associationActions[i];
|
|
260
|
+
if (expected.id)
|
|
261
|
+
equal(String(action.id), String(after.id), '原动作 ID');
|
|
262
|
+
// 页签创建传 windowSize=30,但平台详情会规范化为 0;已有动作则必须保持原值。
|
|
263
|
+
for (const key of ['actionType', 'enable', 'openType', ...(expected.id ? ['windowSize'] : [])])
|
|
264
|
+
equal(action[key], after[key], `动作 ${key}`);
|
|
265
|
+
equal(action.url ? JSON.parse(action.url) : null, after.url ? JSON.parse(after.url) : null, '目标视图与数据筛选');
|
|
266
|
+
});
|
|
267
|
+
equal(expected.associationPermissions.length, actual.associationPermissions?.length, '权限数量');
|
|
268
|
+
expected.associationPermissions.forEach((permission, i) => {
|
|
269
|
+
const after = actual.associationPermissions[i];
|
|
270
|
+
for (const key of ['selectedType', 'dataid'])
|
|
271
|
+
equal(permission[key], after[key], `权限 ${key}`);
|
|
272
|
+
const root = (p) => p.condition?.rootdata ? JSON.parse(p.condition.rootdata) : null;
|
|
273
|
+
equal(root(permission), root(after), '原权限条件');
|
|
274
|
+
});
|
|
275
|
+
for (const key of ['tipsSql', 'tipsCustomApi'])
|
|
276
|
+
if (expected.customTips?.[key] !== undefined)
|
|
277
|
+
equal(expected.customTips[key], actual.customTips?.[key], key);
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=form-association.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-association.js","sourceRoot":"","sources":["../../src/services/form-association.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ApiClient } from '../core/client.js';
|
|
2
|
+
type Client = Pick<ApiClient, 'get' | 'post'>;
|
|
3
|
+
export type Positions = Record<string, string[]>;
|
|
4
|
+
export interface ButtonViews {
|
|
5
|
+
table?: Array<{
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
}>;
|
|
9
|
+
form?: Array<{
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
export declare function parsePositions(value: unknown): Positions;
|
|
15
|
+
export declare function resolveButtonView(view: string, catalog: ButtonViews): string;
|
|
16
|
+
export declare function buildButtonPosition(existing: unknown, patch: Positions, catalog: ButtonViews, replace?: boolean): {
|
|
17
|
+
showPosition: string;
|
|
18
|
+
showPositionSpan: any;
|
|
19
|
+
};
|
|
20
|
+
export declare function readButton(client: Client, base: string, appId: string, objId: string, buttonId: string): Promise<any>;
|
|
21
|
+
export declare function readButtonContext(client: Client, base: string, appId: string, objId: string, buttonId: string): Promise<{
|
|
22
|
+
button: any;
|
|
23
|
+
details: any;
|
|
24
|
+
views: ButtonViews;
|
|
25
|
+
}>;
|
|
26
|
+
export declare function samePositions(a: unknown, b: unknown): boolean;
|
|
27
|
+
export declare function saveButtonPosition(client: Client, base: string, appId: string, objId: string, context: Awaited<ReturnType<typeof readButtonContext>>, config: ReturnType<typeof buildButtonPosition>): Promise<{
|
|
28
|
+
showPosition: string;
|
|
29
|
+
showPositionSpan: any;
|
|
30
|
+
success: boolean;
|
|
31
|
+
verified: boolean;
|
|
32
|
+
buttonId: any;
|
|
33
|
+
}>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=form-button-position.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-button-position.d.ts","sourceRoot":"","sources":["../../src/services/form-button-position.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;AAC9C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AACjD,MAAM,WAAW,WAAW;IAAG,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE;AAQxH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAaxD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAS5E;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,UAAQ;;;EAmB7G;AAOD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAW5G;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;GAQnH;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAG7D;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC;;;;;;GAY1M"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
const aliases = {
|
|
2
|
+
'右上': 'rightTop', '右上角': 'rightTop', righttop: 'rightTop',
|
|
3
|
+
'右上下拉': 'rightTopDropDown', righttopdropdown: 'rightTopDropDown',
|
|
4
|
+
'行上': 'lineEnd', '行内': 'lineEnd', lineend: 'lineEnd',
|
|
5
|
+
'行末下拉': 'LineEndDropDown', lineenddropdown: 'LineEndDropDown',
|
|
6
|
+
};
|
|
7
|
+
export function parsePositions(value) {
|
|
8
|
+
const parsed = typeof value === 'string' ? JSON.parse(value) : value;
|
|
9
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
10
|
+
throw new Error('showPosition 必须为视图到位置数组的对象');
|
|
11
|
+
const result = {};
|
|
12
|
+
for (const [key, positions] of Object.entries(parsed)) {
|
|
13
|
+
if (!Array.isArray(positions) || !positions.length)
|
|
14
|
+
throw new Error(`${key} 必须指定非空位置数组`);
|
|
15
|
+
result[key] = [...new Set(positions.map(p => {
|
|
16
|
+
const mapped = typeof p === 'string' ? aliases[p.toLowerCase()] : undefined;
|
|
17
|
+
if (!mapped)
|
|
18
|
+
throw new Error(`未知按钮位置: ${p}`);
|
|
19
|
+
return mapped;
|
|
20
|
+
}))];
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
export function resolveButtonView(view, catalog) {
|
|
25
|
+
const form = { '新建': 'add', '编辑': 'edit', '显示': 'show' };
|
|
26
|
+
const normalized = form[view] || view.replace(/_form$/, '');
|
|
27
|
+
if ((catalog.form || []).some(v => v.id === normalized))
|
|
28
|
+
return `${normalized}_form`;
|
|
29
|
+
const tables = catalog.table || [];
|
|
30
|
+
const candidates = ['台账', 'table', 'list'].includes(view)
|
|
31
|
+
? tables : tables.filter(v => v.id === view.replace(/_table$/, '') || v.name === view);
|
|
32
|
+
if (candidates.length !== 1)
|
|
33
|
+
throw new Error(`视图“${view}”${candidates.length ? '不唯一,请指定 ID' : '不在此按钮可选视图中'}`);
|
|
34
|
+
return `${candidates[0].id}_table`;
|
|
35
|
+
}
|
|
36
|
+
export function buildButtonPosition(existing, patch, catalog, replace = false) {
|
|
37
|
+
const normalized = {};
|
|
38
|
+
for (const [view, positions] of Object.entries(parsePositions(patch))) {
|
|
39
|
+
const key = resolveButtonView(view, catalog);
|
|
40
|
+
if (key.endsWith('_form') && positions.some(p => p === 'lineEnd' || p === 'LineEndDropDown'))
|
|
41
|
+
throw new Error('行上/行末下拉仅适用于台账视图');
|
|
42
|
+
normalized[key] = positions;
|
|
43
|
+
}
|
|
44
|
+
const merged = { ...(replace ? {} : parsePositions(existing || '{}')), ...normalized };
|
|
45
|
+
const span = { str: {}, obj: {} };
|
|
46
|
+
for (const key of Object.keys(merged)) {
|
|
47
|
+
const group = key.endsWith('_table') ? 'table' : 'form';
|
|
48
|
+
const id = key.replace(/_(table|form)$/, '');
|
|
49
|
+
const item = (catalog[group] || []).find(v => v.id === id);
|
|
50
|
+
if (!item)
|
|
51
|
+
throw new Error(`已有视图 ${key} 不在可选视图中,请核实或显式 --replace`);
|
|
52
|
+
const content = group === 'form' ? id : item.name;
|
|
53
|
+
(span.str[group] ||= []).push(content);
|
|
54
|
+
(span.obj[group] ||= []).push({ id, content });
|
|
55
|
+
}
|
|
56
|
+
return { showPosition: JSON.stringify(merged), showPositionSpan: span };
|
|
57
|
+
}
|
|
58
|
+
function checked(result, operation) {
|
|
59
|
+
if (result?.code !== 200 || result?.status === false || result?.data == null)
|
|
60
|
+
throw new Error(`${operation}失败: ${result?.msg || '返回结构无效'}`);
|
|
61
|
+
return result.data;
|
|
62
|
+
}
|
|
63
|
+
export async function readButton(client, base, appId, objId, buttonId) {
|
|
64
|
+
for (let current = 1;; current++) {
|
|
65
|
+
const data = checked(await client.post(`${base}/api/bs/ebuilder/form/button/getButtonList?apid=${appId}&objId=${objId}`, { objId, searchVal: '', current, pageSize: 50, searchParamData: {} }, { ebBusinessId: appId }), '读取按钮');
|
|
66
|
+
if (!Array.isArray(data.datas))
|
|
67
|
+
throw new Error('按钮列表返回结构无效');
|
|
68
|
+
const button = data.datas.find((b) => String(b.id) === buttonId);
|
|
69
|
+
if (button)
|
|
70
|
+
return button;
|
|
71
|
+
if (!data.datas.length || current * 50 >= Number(data.total))
|
|
72
|
+
break;
|
|
73
|
+
if (current >= 1000)
|
|
74
|
+
throw new Error('按钮分页超出上限');
|
|
75
|
+
}
|
|
76
|
+
throw new Error(`按钮 ${buttonId} 不存在`);
|
|
77
|
+
}
|
|
78
|
+
export async function readButtonContext(client, base, appId, objId, buttonId) {
|
|
79
|
+
const button = await readButton(client, base, appId, objId, buttonId);
|
|
80
|
+
const query = new URLSearchParams({ apid: appId, objId, tpaid: objId, buttonId, buttonKey: button.buttonKey, buttonType: button.buttonType, thirdPartyFlag: String(button.thirdPartyFlag || 0) });
|
|
81
|
+
const headers = { ebBusinessId: appId };
|
|
82
|
+
const details = checked(await client.get(`${base}/api/bs/ebuilder/form/button/getActionAndPermission?${query}`, headers), '读取动作权限');
|
|
83
|
+
if (!Array.isArray(details.actions) || !Array.isArray(details.permissions))
|
|
84
|
+
throw new Error('动作/权限返回不完整,停止保存');
|
|
85
|
+
const views = checked(await client.get(`${base}/api/bs/ebuilder/form/button/getViewDatas?${query}`, headers), '读取可选视图');
|
|
86
|
+
return { button, details, views };
|
|
87
|
+
}
|
|
88
|
+
export function samePositions(a, b) {
|
|
89
|
+
const canonical = (v) => JSON.stringify(Object.entries(parsePositions(v)).sort(([a], [b]) => a.localeCompare(b)).map(([k, p]) => [k, [...p].sort()]));
|
|
90
|
+
return canonical(a) === canonical(b);
|
|
91
|
+
}
|
|
92
|
+
export async function saveButtonPosition(client, base, appId, objId, context, config) {
|
|
93
|
+
const { button, details } = context;
|
|
94
|
+
const payload = { button: { ...button, ...config }, actionDatas: details.actions, permissionDatas: details.permissions };
|
|
95
|
+
for (const key of ['logMessage', 'customTips'])
|
|
96
|
+
if (details[key] != null)
|
|
97
|
+
payload[key] = details[key];
|
|
98
|
+
checked(await client.post(`${base}/api/bs/ebuilder/form/button/saveOrUpdate?apid=${appId}&objId=${objId}`, payload, { ebBusinessId: appId }), '保存按钮');
|
|
99
|
+
const after = await readButtonContext(client, base, appId, objId, String(button.id));
|
|
100
|
+
if (!samePositions(after.button.showPosition, config.showPosition))
|
|
101
|
+
throw new Error('已保存,但按钮位置回读不一致');
|
|
102
|
+
for (const key of ['actions', 'permissions']) {
|
|
103
|
+
const ids = (items) => items.map(i => String(i.id)).sort().join(',');
|
|
104
|
+
if (ids(details[key]) !== ids(after.details[key]))
|
|
105
|
+
throw new Error(`已保存,但 ${key} 回读 ID 不一致`);
|
|
106
|
+
}
|
|
107
|
+
return { success: true, verified: true, buttonId: button.id, ...config };
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=form-button-position.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-button-position.js","sourceRoot":"","sources":["../../src/services/form-button-position.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ApiClient } from '../core/client.js';
|
|
2
|
+
type Client = Pick<ApiClient, 'get' | 'post' | 'postForm'>;
|
|
3
|
+
export interface ColumnSpec {
|
|
4
|
+
fieldId: string;
|
|
5
|
+
text?: string;
|
|
6
|
+
width?: number;
|
|
7
|
+
format?: string | null;
|
|
8
|
+
decimalLength?: number | null;
|
|
9
|
+
hidden?: boolean;
|
|
10
|
+
viewDataDetail?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ColumnChanges {
|
|
13
|
+
add?: string[];
|
|
14
|
+
remove?: string[];
|
|
15
|
+
set?: ColumnSpec[];
|
|
16
|
+
terminal?: string;
|
|
17
|
+
pcOnly?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function parseColumnSpecs(value: unknown): ColumnSpec[];
|
|
20
|
+
/** 新列采用设计器的精简对象,明细只设置 mainField=false,不能带明细展开容器属性。 */
|
|
21
|
+
export declare function newDisplayColumn(field: any, objId: string): any;
|
|
22
|
+
export declare function buildDisplayColumns(existing: any[], changes: ColumnChanges, resolve: (id: string) => Promise<any>, objId: string): Promise<any[]>;
|
|
23
|
+
export declare function verifyDisplayColumns(expected: any[], actual: any[]): void;
|
|
24
|
+
export declare class ListColumnsService {
|
|
25
|
+
private client;
|
|
26
|
+
private base;
|
|
27
|
+
private appId;
|
|
28
|
+
private objId;
|
|
29
|
+
private listId;
|
|
30
|
+
private fields?;
|
|
31
|
+
private formId?;
|
|
32
|
+
constructor(client: Client, base: string, appId: string, objId: string, listId: string);
|
|
33
|
+
config(terminal?: string): Promise<any>;
|
|
34
|
+
resolveField(id: string): Promise<any>;
|
|
35
|
+
save(changes: ColumnChanges): Promise<{
|
|
36
|
+
success: boolean;
|
|
37
|
+
unchanged: boolean;
|
|
38
|
+
listId: string;
|
|
39
|
+
terminal: string;
|
|
40
|
+
columns: any[];
|
|
41
|
+
verified?: undefined;
|
|
42
|
+
otherTerminalPreserved?: undefined;
|
|
43
|
+
} | {
|
|
44
|
+
success: boolean;
|
|
45
|
+
verified: boolean;
|
|
46
|
+
listId: string;
|
|
47
|
+
terminal: string;
|
|
48
|
+
otherTerminalPreserved: boolean;
|
|
49
|
+
columns: any;
|
|
50
|
+
unchanged?: undefined;
|
|
51
|
+
}>;
|
|
52
|
+
}
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=form-list-columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-list-columns.d.ts","sourceRoot":"","sources":["../../src/services/form-list-columns.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC,CAAC;AAC3D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC3E;AACD,MAAM,WAAW,aAAa;IAAG,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE;AAQ7H,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,EAAE,CAsB7D;AAED,sDAAsD;AACtD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAY/D;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAuCvJ;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAQzE;AAQD,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,MAAM;IAAU,OAAO,CAAC,IAAI;IAAU,OAAO,CAAC,KAAK;IAAU,OAAO,CAAC,KAAK;IAAU,OAAO,CAAC,MAAM;IAFtH,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;gBACJ,MAAM,EAAE,MAAM,EAAU,IAAI,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM;IACxH,MAAM,CAAC,QAAQ,SAAO;IAGtB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBtC,IAAI,CAAC,OAAO,EAAE,aAAa;;;;;;;;;;;;;;;;;CAiClC"}
|