weaver-e10-builder 1.5.10 → 1.5.11
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/app.d.ts.map +1 -1
- package/dist/commands/app.js +159 -8
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/designer-setters.d.ts.map +1 -1
- package/dist/commands/designer-setters.js +26 -4
- package/dist/commands/designer-setters.js.map +1 -1
- package/dist/commands/form-association-manage.d.ts.map +1 -1
- package/dist/commands/form-association-manage.js +3 -0
- package/dist/commands/form-association-manage.js.map +1 -1
- package/dist/commands/form-button-actions-cmd.d.ts +3 -0
- package/dist/commands/form-button-actions-cmd.d.ts.map +1 -0
- package/dist/commands/form-button-actions-cmd.js +309 -0
- package/dist/commands/form-button-actions-cmd.js.map +1 -0
- package/dist/commands/form-button-permission-cmd.d.ts +3 -0
- package/dist/commands/form-button-permission-cmd.d.ts.map +1 -0
- package/dist/commands/form-button-permission-cmd.js +132 -0
- package/dist/commands/form-button-permission-cmd.js.map +1 -0
- package/dist/commands/form-button-props-cmd.d.ts +3 -0
- package/dist/commands/form-button-props-cmd.d.ts.map +1 -0
- package/dist/commands/form-button-props-cmd.js +236 -0
- package/dist/commands/form-button-props-cmd.js.map +1 -0
- package/dist/commands/form-button.d.ts.map +1 -1
- package/dist/commands/form-button.js +82 -55
- package/dist/commands/form-button.js.map +1 -1
- package/dist/commands/form-formula-linkage.d.ts.map +1 -1
- package/dist/commands/form-formula-linkage.js +154 -63
- package/dist/commands/form-formula-linkage.js.map +1 -1
- package/dist/commands/form-list-permission.d.ts.map +1 -1
- package/dist/commands/form-list-permission.js +29 -3
- package/dist/commands/form-list-permission.js.map +1 -1
- package/dist/commands/form-list-search-group.d.ts.map +1 -1
- package/dist/commands/form-list-search-group.js +66 -3
- package/dist/commands/form-list-search-group.js.map +1 -1
- package/dist/commands/form-list-utils.d.ts +14 -0
- package/dist/commands/form-list-utils.d.ts.map +1 -1
- package/dist/commands/form-list-utils.js +65 -4
- package/dist/commands/form-list-utils.js.map +1 -1
- package/dist/commands/form-message.d.ts.map +1 -1
- package/dist/commands/form-message.js +16 -4
- package/dist/commands/form-message.js.map +1 -1
- package/dist/commands/form-permission.d.ts +20 -0
- package/dist/commands/form-permission.d.ts.map +1 -1
- package/dist/commands/form-permission.js +69 -11
- package/dist/commands/form-permission.js.map +1 -1
- package/dist/commands/menu-permission.d.ts.map +1 -1
- package/dist/commands/menu-permission.js +6 -7
- package/dist/commands/menu-permission.js.map +1 -1
- package/dist/commands/menu.d.ts.map +1 -1
- package/dist/commands/menu.js +63 -40
- package/dist/commands/menu.js.map +1 -1
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +56 -36
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow-function-management.d.ts +5 -0
- package/dist/commands/workflow-function-management.d.ts.map +1 -0
- package/dist/commands/workflow-function-management.js +91 -0
- package/dist/commands/workflow-function-management.js.map +1 -0
- package/dist/commands/workflow-node-assign-flow.d.ts.map +1 -1
- package/dist/commands/workflow-node-assign-flow.js +1 -0
- package/dist/commands/workflow-node-assign-flow.js.map +1 -1
- package/dist/commands/workflow-node-sign.d.ts +0 -12
- package/dist/commands/workflow-node-sign.d.ts.map +1 -1
- package/dist/commands/workflow-node-sign.js +31 -102
- package/dist/commands/workflow-node-sign.js.map +1 -1
- package/dist/commands/workflow-opinion-settings.d.ts +5 -0
- package/dist/commands/workflow-opinion-settings.d.ts.map +1 -0
- package/dist/commands/workflow-opinion-settings.js +51 -0
- package/dist/commands/workflow-opinion-settings.js.map +1 -0
- package/dist/commands/workflow-subprocess.d.ts.map +1 -1
- package/dist/commands/workflow-subprocess.js +370 -20
- package/dist/commands/workflow-subprocess.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +35 -61
- package/dist/commands/workflow.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -1
- package/dist/services/actionflow/calendar_mapper.js +30 -4
- package/dist/services/actionflow/calendar_mapper.js.map +1 -1
- package/dist/services/actionflow/component_registry.d.ts.map +1 -1
- package/dist/services/actionflow/component_registry.js +6 -0
- package/dist/services/actionflow/component_registry.js.map +1 -1
- package/dist/services/actionflow/components/meeting_create.d.ts.map +1 -1
- package/dist/services/actionflow/components/meeting_create.js +5 -1
- package/dist/services/actionflow/components/meeting_create.js.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.js +15 -3
- package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts +7 -0
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +25 -0
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/app-publish.d.ts +25 -0
- package/dist/services/app-publish.d.ts.map +1 -1
- package/dist/services/app-publish.js +38 -0
- package/dist/services/app-publish.js.map +1 -1
- package/dist/services/app-range.d.ts +66 -0
- package/dist/services/app-range.d.ts.map +1 -0
- package/dist/services/app-range.js +137 -0
- package/dist/services/app-range.js.map +1 -0
- package/dist/services/form-association.d.ts +13 -0
- package/dist/services/form-association.d.ts.map +1 -1
- package/dist/services/form-association.js +42 -0
- package/dist/services/form-association.js.map +1 -1
- package/dist/services/form-button-action.d.ts +82 -0
- package/dist/services/form-button-action.d.ts.map +1 -1
- package/dist/services/form-button-action.js +194 -2
- package/dist/services/form-button-action.js.map +1 -1
- package/dist/services/form-button-condition.d.ts +45 -0
- package/dist/services/form-button-condition.d.ts.map +1 -0
- package/dist/services/form-button-condition.js +106 -0
- package/dist/services/form-button-condition.js.map +1 -0
- package/dist/services/form-button-context.d.ts +41 -0
- package/dist/services/form-button-context.d.ts.map +1 -0
- package/dist/services/form-button-context.js +54 -0
- package/dist/services/form-button-context.js.map +1 -0
- package/dist/services/form-button-logicflow.d.ts +30 -0
- package/dist/services/form-button-logicflow.d.ts.map +1 -0
- package/dist/services/form-button-logicflow.js +59 -0
- package/dist/services/form-button-logicflow.js.map +1 -0
- package/dist/services/form-button-org.d.ts +30 -0
- package/dist/services/form-button-org.d.ts.map +1 -0
- package/dist/services/form-button-org.js +80 -0
- package/dist/services/form-button-org.js.map +1 -0
- package/dist/services/form-button-permission.d.ts +65 -0
- package/dist/services/form-button-permission.d.ts.map +1 -0
- package/dist/services/form-button-permission.js +113 -0
- package/dist/services/form-button-permission.js.map +1 -0
- package/dist/services/form-button-position.d.ts +4 -18
- package/dist/services/form-button-position.d.ts.map +1 -1
- package/dist/services/form-button-position.js +4 -36
- package/dist/services/form-button-position.js.map +1 -1
- package/dist/services/form-button-props.d.ts +55 -0
- package/dist/services/form-button-props.d.ts.map +1 -0
- package/dist/services/form-button-props.js +90 -0
- package/dist/services/form-button-props.js.map +1 -0
- package/dist/services/form-button-save.d.ts +49 -0
- package/dist/services/form-button-save.d.ts.map +1 -0
- package/dist/services/form-button-save.js +54 -0
- package/dist/services/form-button-save.js.map +1 -0
- package/dist/services/form-formula-linkage.d.ts +116 -20
- package/dist/services/form-formula-linkage.d.ts.map +1 -1
- package/dist/services/form-formula-linkage.js +250 -38
- package/dist/services/form-formula-linkage.js.map +1 -1
- package/dist/services/form-list-search-group.d.ts +17 -2
- package/dist/services/form-list-search-group.d.ts.map +1 -1
- package/dist/services/form-list-search-group.js +29 -12
- package/dist/services/form-list-search-group.js.map +1 -1
- package/dist/services/form-list-search.d.ts.map +1 -1
- package/dist/services/form-list-search.js +4 -0
- package/dist/services/form-list-search.js.map +1 -1
- package/dist/services/form-list-stats.d.ts.map +1 -1
- package/dist/services/form-list-stats.js +9 -2
- package/dist/services/form-list-stats.js.map +1 -1
- package/dist/services/form-message.d.ts +26 -7
- package/dist/services/form-message.d.ts.map +1 -1
- package/dist/services/form-message.js +52 -5
- package/dist/services/form-message.js.map +1 -1
- package/dist/services/form-permission-archive.d.ts +9 -1
- package/dist/services/form-permission-archive.d.ts.map +1 -1
- package/dist/services/form-permission-archive.js +38 -22
- package/dist/services/form-permission-archive.js.map +1 -1
- package/dist/services/form-view-populate.d.ts.map +1 -1
- package/dist/services/form-view-populate.js +7 -0
- package/dist/services/form-view-populate.js.map +1 -1
- package/dist/services/icon-path.d.ts +70 -0
- package/dist/services/icon-path.d.ts.map +1 -0
- package/dist/services/icon-path.js +80 -0
- package/dist/services/icon-path.js.map +1 -0
- package/dist/services/matrix-condition.d.ts +161 -0
- package/dist/services/matrix-condition.d.ts.map +1 -0
- package/dist/services/matrix-condition.js +403 -0
- package/dist/services/matrix-condition.js.map +1 -0
- package/dist/services/menu-catalog.d.ts +33 -0
- package/dist/services/menu-catalog.d.ts.map +1 -1
- package/dist/services/menu-catalog.js +56 -0
- package/dist/services/menu-catalog.js.map +1 -1
- package/dist/services/permission-entity.d.ts +55 -0
- package/dist/services/permission-entity.d.ts.map +1 -0
- package/dist/services/permission-entity.js +79 -0
- package/dist/services/permission-entity.js.map +1 -0
- package/dist/services/workflow-assign-flow.d.ts.map +1 -1
- package/dist/services/workflow-assign-flow.js.map +1 -1
- package/dist/services/workflow-function-management.d.ts +123 -0
- package/dist/services/workflow-function-management.d.ts.map +1 -0
- package/dist/services/workflow-function-management.js +425 -0
- package/dist/services/workflow-function-management.js.map +1 -0
- package/dist/services/workflow-matrix-rule.d.ts +34 -0
- package/dist/services/workflow-matrix-rule.d.ts.map +1 -0
- package/dist/services/workflow-matrix-rule.js +94 -0
- package/dist/services/workflow-matrix-rule.js.map +1 -0
- package/dist/services/workflow-opinion-settings.d.ts +67 -0
- package/dist/services/workflow-opinion-settings.d.ts.map +1 -0
- package/dist/services/workflow-opinion-settings.js +328 -0
- package/dist/services/workflow-opinion-settings.js.map +1 -0
- package/package.json +1 -1
- package/skill-docs/SKILL.md +5 -5
- package/skill-docs/_catalog.md +3 -0
- package/skill-docs/actionflows/references/components/calendar/MeetingCreate.md +2 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +1 -1
- package/skill-docs/references/common/ref-cli-commands.md +60 -22
- package/skill-docs/references/ebuilder-designer/guide-designer-components.md +9 -0
- package/skill-docs/references/form/guide-form-archive-permission.md +55 -2
- package/skill-docs/references/form/guide-form-association.md +13 -0
- package/skill-docs/references/form/guide-form-button.md +87 -0
- package/skill-docs/references/form/guide-form-message.md +19 -2
- package/skill-docs/references/form/guide-form-view.md +23 -3
- package/skill-docs/references/form/guide-formula-linkage.md +42 -11
- package/skill-docs/references/workflow/guide-function-management.md +154 -0
- package/skill-docs/references/workflow/guide-opinion-settings.md +126 -0
- package/skill-docs/references/workflow/guide-workflow.md +22 -6
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
const rangeScenes = { 'add-operator': 10, 'assign-flow': 6, 'assign-flow-target': 7 };
|
|
2
|
+
const AF = '/api/bs/workflow/pathdef/assignFlow';
|
|
3
|
+
/** Resolve CLI flags before any initializing GET. A string retains the original add-operator API. */
|
|
4
|
+
export function rangeContext(value) {
|
|
5
|
+
const o = typeof value === 'string' ? { addOperatorId: value } : value;
|
|
6
|
+
const scene = o.scene ?? (o.addOperatorId ? 'add-operator' : undefined);
|
|
7
|
+
if (scene === 'add-operator') {
|
|
8
|
+
if (o.nodeId !== undefined || o.targetNodeId !== undefined)
|
|
9
|
+
throw new Error('加审范围不能同时指定 --node-id/--target-node-id');
|
|
10
|
+
return { scene, addOperatorId: id(o.addOperatorId, '--add-operator-id') };
|
|
11
|
+
}
|
|
12
|
+
if (scene === 'assign-flow' || scene === 'assign-flow-target') {
|
|
13
|
+
if (o.addOperatorId !== undefined)
|
|
14
|
+
throw new Error('指定流转范围不能同时指定 --add-operator-id');
|
|
15
|
+
const nodeId = id(o.nodeId, '--node-id(源节点)');
|
|
16
|
+
if (scene === 'assign-flow-target')
|
|
17
|
+
return { scene, nodeId, targetNodeId: id(o.targetNodeId, '--target-node-id') };
|
|
18
|
+
if (o.targetNodeId !== undefined)
|
|
19
|
+
throw new Error('单独目标节点范围请使用 --scene assign-flow-target');
|
|
20
|
+
return { scene, nodeId };
|
|
21
|
+
}
|
|
22
|
+
throw new Error('请指定 --add-operator-id,或 --scene assign-flow/assign-flow-target 及节点参数');
|
|
23
|
+
}
|
|
24
|
+
const FM = '/api/bs/workflow/pathdef/functionMangerSet';
|
|
25
|
+
const RR = '/api/bs/workflow/pathdef/receiverRange';
|
|
26
|
+
const NODE = '/api/bs/workflow/pathdef/nodeBase/getNodeEditTable';
|
|
27
|
+
const specs = {
|
|
28
|
+
withdraw: { get: 'getRetractManagerForm', save: 'updateRetractManager', fields: ['allowType', 'allowNodes', 'beAllowType', 'beAllowNodes', 'allowRemind', 'remarkRequired', 'doPreOperate'] },
|
|
29
|
+
'add-operator': { get: 'getAddMinusConfigForm', save: 'saveAddMinusConfigForm', fields: ['todoAfterBackTodo', 'allowModifyBackTodo', 'todoSignAttr', 'todoSignAttrDef', 'todoNoSignAttr', 'todoNoSignAttrDef', 'doneSignAttr', 'doneSignAttrDef'] },
|
|
30
|
+
'forward-circulate-back': { get: 'getForwardCirculateForm', save: 'saveForwardCirculateForm', fields: ['forwardBackCondition', 'forwardAllowBack', 'circulateBackCondition', 'circulateAllowBack', 'ccBackCondition', 'ccAllowBack'] },
|
|
31
|
+
};
|
|
32
|
+
const ruleFields = ['allowNodeType', 'allowNode', 'operatorType', 'operatorNode'];
|
|
33
|
+
// enableSecurityLevel/isUpgrade are server capabilities, not editable settings.
|
|
34
|
+
const rangeFields = ['isopen', 'modetype'];
|
|
35
|
+
const detailFields = ['objtype', 'relationship', 'dept', 'subDept', 'person', 'role', 'job', 'rolelevel', 'joblevel', 'joblevelBrowser', 'seclevel', 'suitableType'];
|
|
36
|
+
export function checkResponse(r, label) {
|
|
37
|
+
if (!r || r.code !== 200 || r.status === false || r.fail === true || r.data === false || r.data?.status === false) {
|
|
38
|
+
throw new Error(`${label}失败: ${r?.msg || '无有效响应'}`);
|
|
39
|
+
}
|
|
40
|
+
return r.data;
|
|
41
|
+
}
|
|
42
|
+
export function id(value, label = 'ID') {
|
|
43
|
+
if (typeof value === 'number' && !Number.isSafeInteger(value))
|
|
44
|
+
throw new Error(`${label}长ID必须使用字符串`);
|
|
45
|
+
const s = String(value ?? '');
|
|
46
|
+
if (!/^[1-9]\d*$/.test(s))
|
|
47
|
+
throw new Error(`${label}必须为正整数ID字符串`);
|
|
48
|
+
return s;
|
|
49
|
+
}
|
|
50
|
+
export function ids(value) {
|
|
51
|
+
const a = Array.isArray(value) ? value : typeof value === 'string' ? value.split(',').filter(Boolean) : null;
|
|
52
|
+
if (!a)
|
|
53
|
+
throw new Error('ID清单必须是数组或逗号分隔字符串');
|
|
54
|
+
const out = a.map(v => id(typeof v === 'object' && v ? v.id ?? v.dataId : v));
|
|
55
|
+
if (new Set(out).size !== out.length)
|
|
56
|
+
throw new Error('ID清单不能重复');
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
const scalar = (v) => String(Array.isArray(v) ? v[0] ?? '' : v ?? '');
|
|
60
|
+
function bool(v) {
|
|
61
|
+
if ([true, 1, '1'].includes(v))
|
|
62
|
+
return true;
|
|
63
|
+
if ([false, 0, '0'].includes(v))
|
|
64
|
+
return false;
|
|
65
|
+
throw new Error(`布尔值必须为true/false或0/1`);
|
|
66
|
+
}
|
|
67
|
+
function options(item) { return item?.options || []; }
|
|
68
|
+
function enumValue(v, item, key) {
|
|
69
|
+
const s = scalar(v);
|
|
70
|
+
const opts = options(item);
|
|
71
|
+
const matched = opts.find(o => String(o.id) === s || o.content === s);
|
|
72
|
+
if (opts.length && (!matched || matched.disabled))
|
|
73
|
+
throw new Error(`${key}不支持 ${s},允许值:${opts.filter(o => !o.disabled).map(o => `${o.id}=${o.content}`).join(', ')}`);
|
|
74
|
+
return matched ? String(matched.id) : s;
|
|
75
|
+
}
|
|
76
|
+
export function normalizeForm(form) {
|
|
77
|
+
if (!form || !form.data || typeof form.data !== 'object' || Array.isArray(form.data))
|
|
78
|
+
throw new Error('服务端未返回配置/默认值,拒绝使用硬编码默认值');
|
|
79
|
+
const d = { ...form.data };
|
|
80
|
+
for (const [k, item] of Object.entries(form.items || {})) {
|
|
81
|
+
if (!(k in d))
|
|
82
|
+
continue;
|
|
83
|
+
if (item.itemType === 'SWITCH')
|
|
84
|
+
d[k] = bool(d[k]);
|
|
85
|
+
else if (['SELECT', 'RADIO'].includes(item.itemType))
|
|
86
|
+
d[k] = scalar(d[k]);
|
|
87
|
+
else if (item.itemType === 'CHECKBOX')
|
|
88
|
+
d[k] = Array.isArray(d[k]) ? d[k].map(String) : String(d[k] || '').split(',').filter(Boolean);
|
|
89
|
+
else if (item.itemType === 'BROWSER')
|
|
90
|
+
d[k] = ids(d[k] || []);
|
|
91
|
+
}
|
|
92
|
+
return d;
|
|
93
|
+
}
|
|
94
|
+
export function patchForm(form, patch, fields) {
|
|
95
|
+
if (!patch || typeof patch !== 'object' || Array.isArray(patch))
|
|
96
|
+
throw new Error('--data 必须是JSON对象');
|
|
97
|
+
const d = normalizeForm(form);
|
|
98
|
+
for (const [k, v] of Object.entries(patch)) {
|
|
99
|
+
if (!fields.includes(k) || !(k in d) && !(k in (form.items || {})))
|
|
100
|
+
throw new Error(`未知或当前环境不支持的设置项:${k}`);
|
|
101
|
+
const item = form.items?.[k];
|
|
102
|
+
if (item?.disable || item?.readOnly)
|
|
103
|
+
throw new Error(`${k}在当前环境不可修改`);
|
|
104
|
+
if (item?.itemType === 'SWITCH' || typeof d[k] === 'boolean')
|
|
105
|
+
d[k] = bool(v);
|
|
106
|
+
else if (item?.itemType === 'BROWSER')
|
|
107
|
+
d[k] = ids(v);
|
|
108
|
+
else if (item?.itemType === 'CHECKBOX') {
|
|
109
|
+
if (!Array.isArray(v))
|
|
110
|
+
throw new Error(`${k}必须为数组,清空请传[]`);
|
|
111
|
+
d[k] = [...new Set(v.map(x => enumValue(x, item, k)))];
|
|
112
|
+
}
|
|
113
|
+
else if (['SELECT', 'RADIO'].includes(item?.itemType))
|
|
114
|
+
d[k] = enumValue(v, item, k);
|
|
115
|
+
else
|
|
116
|
+
d[k] = v;
|
|
117
|
+
}
|
|
118
|
+
return d;
|
|
119
|
+
}
|
|
120
|
+
function comparable(v) {
|
|
121
|
+
return JSON.stringify(Array.isArray(v) ? [...v].map(String).sort() : v);
|
|
122
|
+
}
|
|
123
|
+
export function verify(expected, actual, fields, label = '配置') {
|
|
124
|
+
const diff = fields.filter(k => k in expected && comparable(expected[k]) !== comparable(actual[k]));
|
|
125
|
+
if (diff.length)
|
|
126
|
+
throw new Error(`${label}保存后回读不一致(可能已写入,请先查询再处理):${diff.map(k => `${k} 期望=${JSON.stringify(expected[k])} 实际=${JSON.stringify(actual[k])}`).join('; ')}`);
|
|
127
|
+
}
|
|
128
|
+
function formOf(data) {
|
|
129
|
+
if (!data?.data || !data?.items)
|
|
130
|
+
throw new Error('配置表单结构异常,停止写入');
|
|
131
|
+
return data;
|
|
132
|
+
}
|
|
133
|
+
export class FunctionManagement {
|
|
134
|
+
client;
|
|
135
|
+
base;
|
|
136
|
+
constructor(client, base) {
|
|
137
|
+
this.client = client;
|
|
138
|
+
this.base = base;
|
|
139
|
+
}
|
|
140
|
+
async get(path, query) {
|
|
141
|
+
const r = await this.client.get(this.base + path + '?' + new URLSearchParams(Object.entries(query).map(([k, v]) => [k, String(v)])));
|
|
142
|
+
return checkResponse(r, path);
|
|
143
|
+
}
|
|
144
|
+
async post(path, data) { return checkResponse(await this.client.post(this.base + path, data), path); }
|
|
145
|
+
async singleton(kind, workflowId) {
|
|
146
|
+
const d = await this.get(`${FM}/${specs[kind].get}`, { workflowId: id(workflowId), ...(kind === 'add-operator' ? { belongType: 1 } : {}) });
|
|
147
|
+
return formOf(kind === 'withdraw' ? d?.retractManagerForm : d);
|
|
148
|
+
}
|
|
149
|
+
async validateNodes(workflowId, lists, items = []) {
|
|
150
|
+
const wanted = lists.flatMap(v => ids(v));
|
|
151
|
+
if (!wanted.length)
|
|
152
|
+
return;
|
|
153
|
+
const res = await this.get(NODE, { workflowId });
|
|
154
|
+
if (!Array.isArray(res?.data))
|
|
155
|
+
throw new Error('无法查询流程节点,停止写入');
|
|
156
|
+
const available = new Map(res.data.map((n) => [String(n.id ?? n.nodeId), n]));
|
|
157
|
+
for (const [index, values] of lists.entries())
|
|
158
|
+
for (const n of ids(values)) {
|
|
159
|
+
const node = available.get(n);
|
|
160
|
+
if (!node)
|
|
161
|
+
throw new Error(`节点 ${n} 不属于流程 ${workflowId}`);
|
|
162
|
+
const filter = items[index]?.browserBean?.commonParams;
|
|
163
|
+
if (!filter)
|
|
164
|
+
continue;
|
|
165
|
+
// Browser condition=3 means exclude. Follow the live form's constraints.
|
|
166
|
+
for (const [key, condition, property] of [['nodeTypes', 'nodeTypesConditionType', 'nodeType'], ['nodeAttrs', 'nodeAttrsCondition', 'nodeAttr']]) {
|
|
167
|
+
if (String(filter[condition]) === '3' && String(filter[key] || '').split(',').includes(String(node[property]))) {
|
|
168
|
+
throw new Error(`节点 ${n} 的${property}=${node[property]}不在当前设置可选范围内`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
async saveSingleton(kind, workflowId, patch) {
|
|
174
|
+
const form = await this.singleton(kind, workflowId);
|
|
175
|
+
const next = patchForm(form, patch, specs[kind].fields);
|
|
176
|
+
// `Record<string, any>` 只是把「下面按 k 动态写键」这个用法告诉类型系统;运行期对象不变。
|
|
177
|
+
const payload = { ...next, workflowId, ...(kind === 'add-operator' ? { belongType: 1 } : {}) };
|
|
178
|
+
if (kind === 'withdraw') {
|
|
179
|
+
await this.validateNodes(workflowId, [next.allowNodes, next.beAllowNodes], [form.items.allowNodes, form.items.beAllowNodes]);
|
|
180
|
+
for (const k of ['allowRemind', 'remarkRequired', 'doPreOperate'])
|
|
181
|
+
if (k in next)
|
|
182
|
+
payload[k] = bool(next[k]) ? 1 : 0;
|
|
183
|
+
for (const k of ['allowNodes', 'beAllowNodes']) {
|
|
184
|
+
payload[k + 'Data'] = ids(next[k]);
|
|
185
|
+
// Preserve multi keys from GET; the backend consumes the explicit *Data IDs.
|
|
186
|
+
payload[k] = ids(next[k]).map(id => ({ id }));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
await this.post(`${FM}/${specs[kind].save}`, payload);
|
|
190
|
+
const after = normalizeForm(await this.singleton(kind, workflowId));
|
|
191
|
+
verify(next, after, specs[kind].fields);
|
|
192
|
+
return { success: true, workflowId, before: normalizeForm(form), after };
|
|
193
|
+
}
|
|
194
|
+
async listOperatorRules(workflowId, belongType) {
|
|
195
|
+
const r = await this.get(`${FM}/getAddMinusOperatorList`, { workflowId: id(workflowId), belongType });
|
|
196
|
+
if (!Array.isArray(r?.datas))
|
|
197
|
+
throw new Error('加减审规则列表结构异常');
|
|
198
|
+
return r.datas;
|
|
199
|
+
}
|
|
200
|
+
async operatorRuleForm(workflowId, belongType, ruleId) {
|
|
201
|
+
if (ruleId && !(await this.listOperatorRules(workflowId, belongType)).some(r => String(r.id) === id(ruleId)))
|
|
202
|
+
throw new Error('规则ID不属于此流程及加减审类型,拒绝修改');
|
|
203
|
+
return formOf(await this.get(`${FM}/getAddMinusOperatorForm`, { workflowId: id(workflowId), belongType, id: ruleId || '-1', isCreate: !ruleId }));
|
|
204
|
+
}
|
|
205
|
+
async saveOperatorRule(workflowId, belongType, patch, ruleId) {
|
|
206
|
+
const beforeList = await this.listOperatorRules(workflowId, belongType);
|
|
207
|
+
const oldRow = ruleId ? beforeList.find(r => String(r.id) === id(ruleId)) : undefined;
|
|
208
|
+
if (ruleId && !oldRow)
|
|
209
|
+
throw new Error('规则ID不属于此流程及加减审类型');
|
|
210
|
+
const form = await this.operatorRuleForm(workflowId, belongType, ruleId);
|
|
211
|
+
const next = patchForm(form, patch, ruleFields);
|
|
212
|
+
if (next.allowNodeType !== '0' && !ids(next.allowNode).length)
|
|
213
|
+
throw new Error('选择/排除节点时 allowNode 不能为空');
|
|
214
|
+
if (next.operatorType.includes('3') && !ids(next.operatorNode).length)
|
|
215
|
+
throw new Error('指定节点操作者需要 operatorNode');
|
|
216
|
+
if (!next.operatorType.length)
|
|
217
|
+
throw new Error('operatorType 不能为空');
|
|
218
|
+
await this.validateNodes(workflowId, [next.allowNode, next.operatorNode], [form.items.allowNode, form.items.operatorNode]);
|
|
219
|
+
const payload = { ...next, workflowId, belongType, id: ruleId || '-1', isCreate: ruleId ? 0 : 1 };
|
|
220
|
+
for (const k of ['allowNode', 'operatorNode', 'operatorType'])
|
|
221
|
+
payload[k] = next[k].join(',');
|
|
222
|
+
await this.post(`${FM}/saveAddMinusOperatorForm`, payload);
|
|
223
|
+
const afterList = await this.listOperatorRules(workflowId, belongType);
|
|
224
|
+
const candidates = ruleId ? afterList.filter(r => String(r.id) === ruleId) : afterList.filter(r => !beforeList.some(x => String(x.id) === String(r.id)));
|
|
225
|
+
if (candidates.length !== 1)
|
|
226
|
+
throw new Error('保存后不能唯一定位规则;可能发生并发写入,请查询列表,勿重复新增');
|
|
227
|
+
const saved = candidates[0];
|
|
228
|
+
const after = normalizeForm(await this.operatorRuleForm(workflowId, belongType, String(saved.id)));
|
|
229
|
+
verify(next, after, ruleFields, '加减审规则');
|
|
230
|
+
if (oldRow && String(oldRow.receiverRangeKey ?? '0') !== String(saved.receiverRangeKey ?? '0'))
|
|
231
|
+
throw new Error('接收人范围引用发生变化,请检查');
|
|
232
|
+
return { success: true, workflowId, ruleId: String(saved.id), receiverRangeKey: saved.receiverRangeKey, before: normalizeForm(form), after };
|
|
233
|
+
}
|
|
234
|
+
async assignTargets(workflowId, nodeId) {
|
|
235
|
+
const result = await this.get(`${AF}/getTargetNodeList`, { workflowId, nodeId });
|
|
236
|
+
if (!Array.isArray(result?.datas))
|
|
237
|
+
throw new Error('指定流转目标节点列表结构异常');
|
|
238
|
+
return result.datas;
|
|
239
|
+
}
|
|
240
|
+
async range(workflowId, input) {
|
|
241
|
+
id(workflowId, '流程ID');
|
|
242
|
+
const context = rangeContext(input);
|
|
243
|
+
const scene = rangeScenes[context.scene];
|
|
244
|
+
const query = { workflowId, scene, nodeId: context.scene === 'add-operator' ? '-1' : context.nodeId };
|
|
245
|
+
let rule;
|
|
246
|
+
if (context.scene === 'add-operator') {
|
|
247
|
+
rule = (await this.listOperatorRules(workflowId, 1)).find(r => String(r.id) === context.addOperatorId);
|
|
248
|
+
if (!rule)
|
|
249
|
+
throw new Error('加审规则ID不属于此流程');
|
|
250
|
+
Object.assign(query, { receiverRangeKey: rule.receiverRangeKey || '0', targetId: context.addOperatorId });
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
await this.validateNodes(workflowId, [[context.nodeId], ...(context.scene === 'assign-flow-target' ? [[context.targetNodeId]] : [])]);
|
|
254
|
+
if (context.scene === 'assign-flow-target') {
|
|
255
|
+
const matches = (await this.assignTargets(workflowId, context.nodeId)).filter(r => String(r.targetNodeId) === context.targetNodeId);
|
|
256
|
+
if (matches.length !== 1)
|
|
257
|
+
throw new Error('目标节点单独配置不存在或不唯一;请先查询 workflow node-assign-flow targets,缺少时使用 add-target');
|
|
258
|
+
rule = matches[0];
|
|
259
|
+
Object.assign(query, { receiverRangeKey: rule.receiverRangeKey || '0', assignFlowAloneId: id(rule.id, '目标节点配置ID') });
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
const form = formOf(await this.get(`${RR}/getBaseSetForm`, query));
|
|
263
|
+
const data = normalizeForm(form);
|
|
264
|
+
id(data.mainId, '接收人范围mainId');
|
|
265
|
+
if (String(data.workflowId) !== workflowId || String(data.scene) !== String(scene) ||
|
|
266
|
+
context.scene !== 'add-operator' && String(data.nodeId) !== context.nodeId) {
|
|
267
|
+
throw new Error('接收人范围返回的流程/节点/场景不一致,停止写入');
|
|
268
|
+
}
|
|
269
|
+
// GET may initialize a range and attach it to its owner. Re-read that link before writing.
|
|
270
|
+
if (rule) {
|
|
271
|
+
let linked;
|
|
272
|
+
if (context.scene === 'add-operator') {
|
|
273
|
+
linked = (await this.listOperatorRules(workflowId, 1)).find(r => String(r.id) === context.addOperatorId);
|
|
274
|
+
}
|
|
275
|
+
else if (context.scene === 'assign-flow-target') {
|
|
276
|
+
linked = (await this.assignTargets(workflowId, context.nodeId)).find(r => String(r.id) === String(rule.id) && String(r.targetNodeId) === context.targetNodeId);
|
|
277
|
+
}
|
|
278
|
+
if (String(linked?.receiverRangeKey) !== String(data.mainId))
|
|
279
|
+
throw new Error('接收人范围引用未正确关联,停止写入');
|
|
280
|
+
rule = linked;
|
|
281
|
+
}
|
|
282
|
+
const rules = await this.rangeRows(String(data.mainId), String(data.modetype));
|
|
283
|
+
return { form, rules, rule, context, scene, nodeId: query.nodeId };
|
|
284
|
+
}
|
|
285
|
+
async rangeRows(mainId, mode) {
|
|
286
|
+
if (mode !== '0')
|
|
287
|
+
throw new Error('此命令明细操作当前支持普通模式;高级模式须使用分组接口,拒绝将普通明细写入高级配置');
|
|
288
|
+
const r = await this.get(`${RR}/getReceiverList`, { mainId, modetype: mode });
|
|
289
|
+
if (!Array.isArray(r?.data))
|
|
290
|
+
throw new Error('接收范围列表结构异常');
|
|
291
|
+
return r.data;
|
|
292
|
+
}
|
|
293
|
+
async rangeSchema(scene = 'add-operator') {
|
|
294
|
+
return formOf(await this.get(`${RR}/getReceiverForm`, { scene: rangeScenes[scene] }));
|
|
295
|
+
}
|
|
296
|
+
async saveRange(workflowId, input, patch) {
|
|
297
|
+
const scope = await this.range(workflowId, input);
|
|
298
|
+
const { form, context, scene, nodeId } = scope;
|
|
299
|
+
const fields = context.scene === 'add-operator' ? rangeFields : [...rangeFields, 'limitOperatorRange'];
|
|
300
|
+
const next = patchForm(form, patch, fields);
|
|
301
|
+
if (String(next.modetype) !== '0')
|
|
302
|
+
throw new Error('本次接收人范围命令支持普通模式');
|
|
303
|
+
await this.post(`${RR}/saveBaseSetForm`, { ...next, workflowId, nodeId, scene, isChanged: true, isSync: false });
|
|
304
|
+
const after = normalizeForm((await this.range(workflowId, context)).form);
|
|
305
|
+
verify(next, after, fields);
|
|
306
|
+
return { success: true, workflowId, ...context, before: normalizeForm(form), after };
|
|
307
|
+
}
|
|
308
|
+
async saveRangeRule(workflowId, input, patch, ruleId) {
|
|
309
|
+
const scope = await this.range(workflowId, input);
|
|
310
|
+
const base = normalizeForm(scope.form);
|
|
311
|
+
const schema = await this.rangeSchema(scope.context.scene);
|
|
312
|
+
const old = ruleId ? scope.rules.find(r => String(r.id) === id(ruleId)) : undefined;
|
|
313
|
+
if (ruleId && !old)
|
|
314
|
+
throw new Error('范围明细ID不属于当前接收人范围');
|
|
315
|
+
const before = old ? decodeRangeRow(old, schema) : normalizeForm(schema);
|
|
316
|
+
const next = patchForm({ ...schema, data: before }, patch, scope.scene === 10 ? detailFields.filter(k => k !== 'suitableType') : detailFields);
|
|
317
|
+
const normalized = rangeRule(next, schema);
|
|
318
|
+
for (const key of Object.keys(patch)) {
|
|
319
|
+
if (!(key in normalized))
|
|
320
|
+
throw new Error(`${key}不适用于当前接收人类型 ${normalized.objtype}`);
|
|
321
|
+
}
|
|
322
|
+
const payload = { ...normalized, workflowId, nodeId: scope.nodeId, scene: scope.scene, mainId: String(base.mainId), commonId: String(base.mainId), modetype: '0' };
|
|
323
|
+
const postResult = await this.post(`${RR}/saveReceiverForm`, payload);
|
|
324
|
+
if (String(postResult?.mainId) !== String(base.mainId))
|
|
325
|
+
throw new Error('范围新增返回mainId不一致,停止后续操作');
|
|
326
|
+
const rows = await this.rangeRows(String(base.mainId), '0');
|
|
327
|
+
const added = rows.filter(r => !scope.rules.some(x => String(x.id) === String(r.id)));
|
|
328
|
+
if (added.length !== 1)
|
|
329
|
+
throw new Error('不能唯一定位新范围明细;未删除旧项,请查询后处理,勿盲目重试');
|
|
330
|
+
const newId = String(added[0].id);
|
|
331
|
+
try {
|
|
332
|
+
verify(normalized, rangeRule(decodeRangeRow(added[0], schema), schema), Object.keys(normalized), '范围明细');
|
|
333
|
+
}
|
|
334
|
+
catch (e) {
|
|
335
|
+
// The old row has not been touched. Compensate only the newly identified row.
|
|
336
|
+
try {
|
|
337
|
+
await this.get(`${RR}/deleteReceiver`, { ids: newId, mainId: base.mainId, modetype: 0 });
|
|
338
|
+
if ((await this.rangeRows(String(base.mainId), '0')).some(r => String(r.id) === newId))
|
|
339
|
+
throw new Error('删除未生效');
|
|
340
|
+
}
|
|
341
|
+
catch (cleanup) {
|
|
342
|
+
throw new Error(`新项 ${newId} 验证失败且清理失败,旧项 ${ruleId || '无'} 未删除。${e.message};${cleanup.message}`);
|
|
343
|
+
}
|
|
344
|
+
throw new Error(`新项验证失败,已清理新项 ${newId},旧配置保留。${e.message}`);
|
|
345
|
+
}
|
|
346
|
+
if (old) {
|
|
347
|
+
// No backend update-by-ID API. Never delete the old row before the replacement is verified.
|
|
348
|
+
try {
|
|
349
|
+
await this.get(`${RR}/deleteReceiver`, { ids: ruleId, mainId: base.mainId, modetype: 0 });
|
|
350
|
+
}
|
|
351
|
+
catch (e) {
|
|
352
|
+
throw new Error(`新项 ${newId} 已保存,旧项 ${ruleId} 删除失败;请先查询,勿重复新增。${e.message}`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
const final = await this.range(workflowId, scope.context);
|
|
356
|
+
if (old && final.rules.some(r => String(r.id) === ruleId) || !final.rules.some(r => String(r.id) === newId))
|
|
357
|
+
throw new Error(`范围替换后回读异常:旧ID=${ruleId || ''},新ID=${newId}`);
|
|
358
|
+
for (const r of scope.rules.filter(r => String(r.id) !== ruleId)) {
|
|
359
|
+
const back = final.rules.find(x => String(x.id) === String(r.id));
|
|
360
|
+
if (!back || JSON.stringify(back) !== JSON.stringify(r))
|
|
361
|
+
throw new Error(`未指定的范围明细 ${r.id} 发生变化`);
|
|
362
|
+
}
|
|
363
|
+
return { success: true, workflowId, ...scope.context, mainId: base.mainId, previousRuleId: ruleId, ruleId: newId, before, after: decodeRangeRow(final.rules.find(r => String(r.id) === newId), schema) };
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
function orgField(type) {
|
|
367
|
+
if (['10', '18', '19', '20', '21'].includes(type))
|
|
368
|
+
return 'dept';
|
|
369
|
+
if (['11', '22', '23', '24', '25'].includes(type))
|
|
370
|
+
return 'subDept';
|
|
371
|
+
return { '12': 'person', '13': 'role', '14': 'job' }[type];
|
|
372
|
+
}
|
|
373
|
+
function level(v) {
|
|
374
|
+
const match = typeof v === 'object' && v ? [null, String(v.min), String(v.max)] : String(v ?? '').match(/^(-?\d+)\s*[,\-]\s*(-?\d+)$/);
|
|
375
|
+
if (!match)
|
|
376
|
+
throw new Error('seclevel格式为"最小值,最大值",例如"-999,999"');
|
|
377
|
+
const min = Number(match[1]), max = Number(match[2]);
|
|
378
|
+
if (!Number.isInteger(min) || !Number.isInteger(max) || min < -999 || max > 999 || min > max)
|
|
379
|
+
throw new Error('安全级别范围无效');
|
|
380
|
+
return `${min},${max}`;
|
|
381
|
+
}
|
|
382
|
+
export function rangeRule(d, schema) {
|
|
383
|
+
const type = enumValue(d.objtype, schema.items.objtype, 'objtype');
|
|
384
|
+
const result = { objtype: type, relationship: enumValue(d.relationship, schema.items.relationship, 'relationship') };
|
|
385
|
+
const field = orgField(type);
|
|
386
|
+
if (field) {
|
|
387
|
+
const values = ids(d[field] || []);
|
|
388
|
+
if (!values.length)
|
|
389
|
+
throw new Error(`${type}类型需要${field}的真实ID`);
|
|
390
|
+
result[field] = values.join(',');
|
|
391
|
+
}
|
|
392
|
+
if ((field === 'dept' || field === 'subDept' || type === '13' || type === '15') && 'seclevel' in schema.data)
|
|
393
|
+
result.seclevel = level(d.seclevel);
|
|
394
|
+
if (type === '13')
|
|
395
|
+
result.rolelevel = enumValue(d.rolelevel, schema.items.rolelevel, 'rolelevel');
|
|
396
|
+
if (type === '14') {
|
|
397
|
+
result.joblevel = enumValue(d.joblevel, schema.items.joblevel, 'joblevel');
|
|
398
|
+
result.joblevelBrowser = ids(d.joblevelBrowser || []).join(',');
|
|
399
|
+
if (result.joblevel !== '0' && !result.joblevelBrowser)
|
|
400
|
+
throw new Error('岗位指定部门/分部级别需要joblevelBrowser');
|
|
401
|
+
}
|
|
402
|
+
if ('suitableType' in d)
|
|
403
|
+
result.suitableType = enumValue(d.suitableType, schema.items.suitableType, 'suitableType');
|
|
404
|
+
return result;
|
|
405
|
+
}
|
|
406
|
+
export function decodeRangeRow(row, schema) {
|
|
407
|
+
const data = normalizeForm(schema);
|
|
408
|
+
data.objtype = String(row.type);
|
|
409
|
+
data.relationship = enumValue(row.relationship, schema.items.relationship, 'relationship');
|
|
410
|
+
const field = orgField(data.objtype);
|
|
411
|
+
if (field)
|
|
412
|
+
data[field] = ids(row.content || []);
|
|
413
|
+
if (row.seclevel)
|
|
414
|
+
data.seclevel = level(row.seclevel);
|
|
415
|
+
if (data.objtype === '13')
|
|
416
|
+
data.rolelevel = enumValue(row.rolelevel, schema.items.rolelevel, 'rolelevel');
|
|
417
|
+
if (data.objtype === '14') {
|
|
418
|
+
data.joblevel = enumValue(row.jobLevel, schema.items.joblevel, 'joblevel');
|
|
419
|
+
data.joblevelBrowser = ids(row.jobcontent || []);
|
|
420
|
+
}
|
|
421
|
+
if ('suitableType' in data)
|
|
422
|
+
data.suitableType = String(row.suitableType);
|
|
423
|
+
return data;
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=workflow-function-management.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-function-management.js","sourceRoot":"","sources":["../../src/services/workflow-function-management.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Matrix write contract: DoSaveOrUpdateNodeOperatorCmd converts wire type=fieldId
|
|
2
|
+
* to persisted type=2,targetField=fieldId. Never send literal type=2 as a field ID. */
|
|
3
|
+
export interface MatrixColumn {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
type: string;
|
|
7
|
+
}
|
|
8
|
+
export interface MatrixRuleInput {
|
|
9
|
+
sourceField: string;
|
|
10
|
+
type: string | number;
|
|
11
|
+
targetField?: string;
|
|
12
|
+
targetFieldCN?: string;
|
|
13
|
+
content?: string | string[];
|
|
14
|
+
contentCN?: string;
|
|
15
|
+
operate?: string | number;
|
|
16
|
+
}
|
|
17
|
+
export declare function matrixOperate(sourceType: string, value?: string | number): number;
|
|
18
|
+
export declare function parseMatrixRuleInputs(legacy?: string[], structured?: unknown): MatrixRuleInput[];
|
|
19
|
+
export declare function buildMatrixRules(columns: MatrixColumn[], inputs: MatrixRuleInput[]): {
|
|
20
|
+
rules: {
|
|
21
|
+
content?: string | undefined;
|
|
22
|
+
contentCN?: string | undefined;
|
|
23
|
+
sourceField: string;
|
|
24
|
+
sourceFieldCN: string;
|
|
25
|
+
sourceType: string;
|
|
26
|
+
type: string;
|
|
27
|
+
typeCN: string;
|
|
28
|
+
operate: number;
|
|
29
|
+
operateCN: string;
|
|
30
|
+
isFieldEmpty: number;
|
|
31
|
+
}[];
|
|
32
|
+
description: string;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=workflow-matrix-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-matrix-rule.d.ts","sourceRoot":"","sources":["../../src/services/workflow-matrix-rule.ts"],"names":[],"mappings":"AAAA;uFACuF;AACvF,MAAM,WAAW,YAAY;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACxE,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAUD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAWjF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,eAAe,EAAE,CAahG;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;;;;;;;;;;;;;;EA+ClF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const systemTypes = new Set(['0', '1', '3', '4', '5']);
|
|
2
|
+
const labels = {
|
|
3
|
+
1: '本部门', 2: '本部门及下级部门', 3: '本部门及上级部门',
|
|
4
|
+
4: '本分部', 5: '本分部及下级分部', 6: '本分部及上级分部',
|
|
5
|
+
49: '本部门(逐级向上)', 50: '本分部(逐级向上)',
|
|
6
|
+
67: '本部门及下级部门(逐级向上)',
|
|
7
|
+
};
|
|
8
|
+
export function matrixOperate(sourceType, value) {
|
|
9
|
+
const sub = sourceType === 'subcompany';
|
|
10
|
+
if (value === undefined || value === '')
|
|
11
|
+
return sub ? 4 : 1;
|
|
12
|
+
const mapping = sub
|
|
13
|
+
? { self: 4, children: 5, parents: 6, upward: 50, '1': 4, '2': 5, '3': 6, '49': 50 }
|
|
14
|
+
: { self: 1, children: 2, parents: 3, upward: 49, '4': 1, '5': 2, '6': 3, '50': 49 };
|
|
15
|
+
const operate = mapping[String(value)] ?? Number(value);
|
|
16
|
+
if (!(sub ? [4, 5, 6, 50] : [1, 2, 3, 49, 67]).includes(operate)) {
|
|
17
|
+
throw new Error(`${sourceType} 不支持矩阵范围 ${value}`);
|
|
18
|
+
}
|
|
19
|
+
return operate;
|
|
20
|
+
}
|
|
21
|
+
export function parseMatrixRuleInputs(legacy, structured) {
|
|
22
|
+
if (legacy?.length && structured !== undefined)
|
|
23
|
+
throw new Error('--matrix-rule 与 --matrix-rules 不能同时使用');
|
|
24
|
+
if (structured !== undefined) {
|
|
25
|
+
if (!Array.isArray(structured) || structured.some(r => !r || typeof r !== 'object' || Array.isArray(r))) {
|
|
26
|
+
throw new Error('--matrix-rules 必须是条件对象数组');
|
|
27
|
+
}
|
|
28
|
+
return structured;
|
|
29
|
+
}
|
|
30
|
+
return (legacy || []).map(s => {
|
|
31
|
+
// Preserve legacy extra segments (historical virtualId/display label); do not reinterpret them as content.
|
|
32
|
+
const [sourceField, type = '0', operate] = s.split(':').map(v => v.trim());
|
|
33
|
+
return { sourceField, type: type || '0', operate };
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export function buildMatrixRules(columns, inputs) {
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
const rules = inputs.map(input => {
|
|
39
|
+
const sourceField = String(input.sourceField ?? '').trim();
|
|
40
|
+
const col = columns.find(c => String(c.id) === sourceField);
|
|
41
|
+
if (!col)
|
|
42
|
+
throw new Error(`矩阵中不存在条件列 ${sourceField}`);
|
|
43
|
+
if (seen.has(sourceField))
|
|
44
|
+
throw new Error(`矩阵条件列 ${sourceField} 重复`);
|
|
45
|
+
seen.add(sourceField);
|
|
46
|
+
if (!['department', 'subcompany'].includes(col.type)) {
|
|
47
|
+
throw new Error(`矩阵条件列 ${sourceField} 类型 ${col.type} 暂不支持;本命令支持部门/分部条件`);
|
|
48
|
+
}
|
|
49
|
+
const org = col.type === 'subcompany' ? '分部' : '部门';
|
|
50
|
+
let type = String(input.type ?? '').trim();
|
|
51
|
+
if (!type)
|
|
52
|
+
throw new Error(`条件列 ${sourceField} 缺少 type`);
|
|
53
|
+
let typeCN = '';
|
|
54
|
+
let content = '';
|
|
55
|
+
const isField = type === 'field' || type === '2' || !systemTypes.has(type);
|
|
56
|
+
if (isField) {
|
|
57
|
+
const fieldId = String(type === 'field' || type === '2' ? input.targetField ?? '' : type).trim();
|
|
58
|
+
if (!/^-?\d+$/.test(fieldId) || ['0', '1', '2', '3', '4', '5'].includes(fieldId)) {
|
|
59
|
+
throw new Error(`条件列 ${sourceField} 请提供真实表单字段ID(type=field/2 时必须传 targetField)`);
|
|
60
|
+
}
|
|
61
|
+
if (input.targetField !== undefined && String(input.targetField) !== fieldId)
|
|
62
|
+
throw new Error('type字段ID与targetField不一致');
|
|
63
|
+
if (input.content !== undefined)
|
|
64
|
+
throw new Error('表单字段条件不能同时指定 content');
|
|
65
|
+
type = fieldId;
|
|
66
|
+
typeCN = input.targetFieldCN || fieldId;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
if (type === '4')
|
|
70
|
+
throw new Error(`${org}条件不支持“发起人本人”type=4,请使用发起人${org}type=1`);
|
|
71
|
+
if (input.targetField !== undefined)
|
|
72
|
+
throw new Error('系统来源条件不能同时指定 targetField;表单字段请使用 type=field');
|
|
73
|
+
typeCN = { '0': `指定${org}`, '1': `发起人${org}(系统)`, '3': `当前节点未操作者${org}(系统)`, '5': `当前操作人${org}(系统)` }[type];
|
|
74
|
+
if (type === '0') {
|
|
75
|
+
const ids = (Array.isArray(input.content) ? input.content : String(input.content ?? '').split(',')).map(v => String(v).trim());
|
|
76
|
+
if (!ids.length || ids.some(v => !/^[1-9]\d*$/.test(v))) {
|
|
77
|
+
throw new Error(`指定${org}必须通过 --matrix-rules 的 content 提供真实${org}ID(字符串或字符串数组)`);
|
|
78
|
+
}
|
|
79
|
+
content = [...new Set(ids)].join(',');
|
|
80
|
+
}
|
|
81
|
+
else if (input.content !== undefined)
|
|
82
|
+
throw new Error(`type=${type} 为系统来源,不能同时指定 content`);
|
|
83
|
+
}
|
|
84
|
+
const operate = matrixOperate(col.type, input.operate);
|
|
85
|
+
return {
|
|
86
|
+
sourceField, sourceFieldCN: col.name, sourceType: col.type,
|
|
87
|
+
type, typeCN, operate, operateCN: labels[operate], isFieldEmpty: 0,
|
|
88
|
+
...(type === '0' ? { content, contentCN: input.contentCN || content } : {}),
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
const description = rules.map(r => `${r.sourceFieldCN} 属于 ${r.typeCN}${'contentCN' in r ? `(${r.contentCN})` : ''}(${r.operateCN})`).join('; ');
|
|
92
|
+
return { rules, description };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=workflow-matrix-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-matrix-rule.js","sourceRoot":"","sources":["../../src/services/workflow-matrix-rule.ts"],"names":[],"mappings":"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"}
|