weaver-e10-builder 1.5.9 → 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.
Files changed (249) hide show
  1. package/dist/commands/app.d.ts.map +1 -1
  2. package/dist/commands/app.js +159 -8
  3. package/dist/commands/app.js.map +1 -1
  4. package/dist/commands/designer-setters.d.ts.map +1 -1
  5. package/dist/commands/designer-setters.js +26 -4
  6. package/dist/commands/designer-setters.js.map +1 -1
  7. package/dist/commands/form-association-manage.d.ts.map +1 -1
  8. package/dist/commands/form-association-manage.js +3 -0
  9. package/dist/commands/form-association-manage.js.map +1 -1
  10. package/dist/commands/form-button-actions-cmd.d.ts +3 -0
  11. package/dist/commands/form-button-actions-cmd.d.ts.map +1 -0
  12. package/dist/commands/form-button-actions-cmd.js +309 -0
  13. package/dist/commands/form-button-actions-cmd.js.map +1 -0
  14. package/dist/commands/form-button-permission-cmd.d.ts +3 -0
  15. package/dist/commands/form-button-permission-cmd.d.ts.map +1 -0
  16. package/dist/commands/form-button-permission-cmd.js +132 -0
  17. package/dist/commands/form-button-permission-cmd.js.map +1 -0
  18. package/dist/commands/form-button-props-cmd.d.ts +3 -0
  19. package/dist/commands/form-button-props-cmd.d.ts.map +1 -0
  20. package/dist/commands/form-button-props-cmd.js +236 -0
  21. package/dist/commands/form-button-props-cmd.js.map +1 -0
  22. package/dist/commands/form-button.d.ts.map +1 -1
  23. package/dist/commands/form-button.js +82 -55
  24. package/dist/commands/form-button.js.map +1 -1
  25. package/dist/commands/form-formula-linkage.d.ts.map +1 -1
  26. package/dist/commands/form-formula-linkage.js +154 -63
  27. package/dist/commands/form-formula-linkage.js.map +1 -1
  28. package/dist/commands/form-list-permission.d.ts.map +1 -1
  29. package/dist/commands/form-list-permission.js +31 -12
  30. package/dist/commands/form-list-permission.js.map +1 -1
  31. package/dist/commands/form-list-search-group.d.ts.map +1 -1
  32. package/dist/commands/form-list-search-group.js +66 -3
  33. package/dist/commands/form-list-search-group.js.map +1 -1
  34. package/dist/commands/form-list-utils.d.ts +14 -0
  35. package/dist/commands/form-list-utils.d.ts.map +1 -1
  36. package/dist/commands/form-list-utils.js +65 -4
  37. package/dist/commands/form-list-utils.js.map +1 -1
  38. package/dist/commands/form-message.d.ts.map +1 -1
  39. package/dist/commands/form-message.js +16 -4
  40. package/dist/commands/form-message.js.map +1 -1
  41. package/dist/commands/form-permission.d.ts +20 -0
  42. package/dist/commands/form-permission.d.ts.map +1 -1
  43. package/dist/commands/form-permission.js +442 -6
  44. package/dist/commands/form-permission.js.map +1 -1
  45. package/dist/commands/menu-permission.d.ts.map +1 -1
  46. package/dist/commands/menu-permission.js +6 -7
  47. package/dist/commands/menu-permission.js.map +1 -1
  48. package/dist/commands/menu.d.ts +2 -2
  49. package/dist/commands/menu.d.ts.map +1 -1
  50. package/dist/commands/menu.js +107 -51
  51. package/dist/commands/menu.js.map +1 -1
  52. package/dist/commands/wf-form.d.ts.map +1 -1
  53. package/dist/commands/wf-form.js +56 -36
  54. package/dist/commands/wf-form.js.map +1 -1
  55. package/dist/commands/workflow-function-management.d.ts +5 -0
  56. package/dist/commands/workflow-function-management.d.ts.map +1 -0
  57. package/dist/commands/workflow-function-management.js +91 -0
  58. package/dist/commands/workflow-function-management.js.map +1 -0
  59. package/dist/commands/workflow-node-assign-flow.d.ts.map +1 -1
  60. package/dist/commands/workflow-node-assign-flow.js +1 -0
  61. package/dist/commands/workflow-node-assign-flow.js.map +1 -1
  62. package/dist/commands/workflow-node-sign.d.ts +0 -12
  63. package/dist/commands/workflow-node-sign.d.ts.map +1 -1
  64. package/dist/commands/workflow-node-sign.js +31 -102
  65. package/dist/commands/workflow-node-sign.js.map +1 -1
  66. package/dist/commands/workflow-opinion-settings.d.ts +5 -0
  67. package/dist/commands/workflow-opinion-settings.d.ts.map +1 -0
  68. package/dist/commands/workflow-opinion-settings.js +51 -0
  69. package/dist/commands/workflow-opinion-settings.js.map +1 -0
  70. package/dist/commands/workflow-subprocess.d.ts.map +1 -1
  71. package/dist/commands/workflow-subprocess.js +370 -20
  72. package/dist/commands/workflow-subprocess.js.map +1 -1
  73. package/dist/commands/workflow.d.ts.map +1 -1
  74. package/dist/commands/workflow.js +35 -61
  75. package/dist/commands/workflow.js.map +1 -1
  76. package/dist/index.js +4 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -1
  79. package/dist/services/actionflow/calendar_mapper.js +44 -13
  80. package/dist/services/actionflow/calendar_mapper.js.map +1 -1
  81. package/dist/services/actionflow/component_registry.d.ts.map +1 -1
  82. package/dist/services/actionflow/component_registry.js +6 -0
  83. package/dist/services/actionflow/component_registry.js.map +1 -1
  84. package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -1
  85. package/dist/services/actionflow/components/custom_set_form.js +9 -7
  86. package/dist/services/actionflow/components/custom_set_form.js.map +1 -1
  87. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  88. package/dist/services/actionflow/components/index.js +2 -1
  89. package/dist/services/actionflow/components/index.js.map +1 -1
  90. package/dist/services/actionflow/components/inner_mq_listener.d.ts +6 -0
  91. package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -1
  92. package/dist/services/actionflow/components/inner_mq_listener.js +50 -2
  93. package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -1
  94. package/dist/services/actionflow/components/meeting_create.d.ts.map +1 -1
  95. package/dist/services/actionflow/components/meeting_create.js +6 -2
  96. package/dist/services/actionflow/components/meeting_create.js.map +1 -1
  97. package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
  98. package/dist/services/actionflow/components/multiple_execution.js +20 -19
  99. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  100. package/dist/services/actionflow/components/output.d.ts.map +1 -1
  101. package/dist/services/actionflow/components/output.js +3 -10
  102. package/dist/services/actionflow/components/output.js.map +1 -1
  103. package/dist/services/actionflow/components/schedule_create.js +2 -2
  104. package/dist/services/actionflow/components/schedule_create.js.map +1 -1
  105. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  106. package/dist/services/actionflow/components/workflow_actions.js +48 -19
  107. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  108. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  109. package/dist/services/actionflow/context_preflight.js +47 -10
  110. package/dist/services/actionflow/context_preflight.js.map +1 -1
  111. package/dist/services/actionflow/custom_trigger_context.d.ts.map +1 -1
  112. package/dist/services/actionflow/custom_trigger_context.js +1 -0
  113. package/dist/services/actionflow/custom_trigger_context.js.map +1 -1
  114. package/dist/services/actionflow/formula_service.d.ts +7 -0
  115. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  116. package/dist/services/actionflow/formula_service.js +39 -9
  117. package/dist/services/actionflow/formula_service.js.map +1 -1
  118. package/dist/services/actionflow/machine_key.d.ts +13 -0
  119. package/dist/services/actionflow/machine_key.d.ts.map +1 -0
  120. package/dist/services/actionflow/machine_key.js +62 -0
  121. package/dist/services/actionflow/machine_key.js.map +1 -0
  122. package/dist/services/actionflow/param_group_dto.d.ts.map +1 -1
  123. package/dist/services/actionflow/param_group_dto.js +14 -5
  124. package/dist/services/actionflow/param_group_dto.js.map +1 -1
  125. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  126. package/dist/services/actionflow/preflight_service.js +9 -3
  127. package/dist/services/actionflow/preflight_service.js.map +1 -1
  128. package/dist/services/app-publish.d.ts +25 -0
  129. package/dist/services/app-publish.d.ts.map +1 -1
  130. package/dist/services/app-publish.js +38 -0
  131. package/dist/services/app-publish.js.map +1 -1
  132. package/dist/services/app-range.d.ts +66 -0
  133. package/dist/services/app-range.d.ts.map +1 -0
  134. package/dist/services/app-range.js +137 -0
  135. package/dist/services/app-range.js.map +1 -0
  136. package/dist/services/form-association.d.ts +13 -0
  137. package/dist/services/form-association.d.ts.map +1 -1
  138. package/dist/services/form-association.js +42 -0
  139. package/dist/services/form-association.js.map +1 -1
  140. package/dist/services/form-button-action.d.ts +82 -0
  141. package/dist/services/form-button-action.d.ts.map +1 -1
  142. package/dist/services/form-button-action.js +194 -2
  143. package/dist/services/form-button-action.js.map +1 -1
  144. package/dist/services/form-button-condition.d.ts +45 -0
  145. package/dist/services/form-button-condition.d.ts.map +1 -0
  146. package/dist/services/form-button-condition.js +106 -0
  147. package/dist/services/form-button-condition.js.map +1 -0
  148. package/dist/services/form-button-context.d.ts +41 -0
  149. package/dist/services/form-button-context.d.ts.map +1 -0
  150. package/dist/services/form-button-context.js +54 -0
  151. package/dist/services/form-button-context.js.map +1 -0
  152. package/dist/services/form-button-logicflow.d.ts +30 -0
  153. package/dist/services/form-button-logicflow.d.ts.map +1 -0
  154. package/dist/services/form-button-logicflow.js +59 -0
  155. package/dist/services/form-button-logicflow.js.map +1 -0
  156. package/dist/services/form-button-org.d.ts +30 -0
  157. package/dist/services/form-button-org.d.ts.map +1 -0
  158. package/dist/services/form-button-org.js +80 -0
  159. package/dist/services/form-button-org.js.map +1 -0
  160. package/dist/services/form-button-permission.d.ts +65 -0
  161. package/dist/services/form-button-permission.d.ts.map +1 -0
  162. package/dist/services/form-button-permission.js +113 -0
  163. package/dist/services/form-button-permission.js.map +1 -0
  164. package/dist/services/form-button-position.d.ts +4 -18
  165. package/dist/services/form-button-position.d.ts.map +1 -1
  166. package/dist/services/form-button-position.js +4 -36
  167. package/dist/services/form-button-position.js.map +1 -1
  168. package/dist/services/form-button-props.d.ts +55 -0
  169. package/dist/services/form-button-props.d.ts.map +1 -0
  170. package/dist/services/form-button-props.js +90 -0
  171. package/dist/services/form-button-props.js.map +1 -0
  172. package/dist/services/form-button-save.d.ts +49 -0
  173. package/dist/services/form-button-save.d.ts.map +1 -0
  174. package/dist/services/form-button-save.js +54 -0
  175. package/dist/services/form-button-save.js.map +1 -0
  176. package/dist/services/form-formula-linkage.d.ts +116 -20
  177. package/dist/services/form-formula-linkage.d.ts.map +1 -1
  178. package/dist/services/form-formula-linkage.js +250 -38
  179. package/dist/services/form-formula-linkage.js.map +1 -1
  180. package/dist/services/form-list-search-group.d.ts +17 -2
  181. package/dist/services/form-list-search-group.d.ts.map +1 -1
  182. package/dist/services/form-list-search-group.js +29 -12
  183. package/dist/services/form-list-search-group.js.map +1 -1
  184. package/dist/services/form-list-search.d.ts.map +1 -1
  185. package/dist/services/form-list-search.js +4 -0
  186. package/dist/services/form-list-search.js.map +1 -1
  187. package/dist/services/form-list-stats.d.ts.map +1 -1
  188. package/dist/services/form-list-stats.js +9 -2
  189. package/dist/services/form-list-stats.js.map +1 -1
  190. package/dist/services/form-message.d.ts +26 -7
  191. package/dist/services/form-message.d.ts.map +1 -1
  192. package/dist/services/form-message.js +52 -5
  193. package/dist/services/form-message.js.map +1 -1
  194. package/dist/services/form-permission-archive.d.ts +121 -0
  195. package/dist/services/form-permission-archive.d.ts.map +1 -0
  196. package/dist/services/form-permission-archive.js +375 -0
  197. package/dist/services/form-permission-archive.js.map +1 -0
  198. package/dist/services/form-view-populate.d.ts.map +1 -1
  199. package/dist/services/form-view-populate.js +7 -0
  200. package/dist/services/form-view-populate.js.map +1 -1
  201. package/dist/services/icon-path.d.ts +70 -0
  202. package/dist/services/icon-path.d.ts.map +1 -0
  203. package/dist/services/icon-path.js +80 -0
  204. package/dist/services/icon-path.js.map +1 -0
  205. package/dist/services/matrix-condition.d.ts +161 -0
  206. package/dist/services/matrix-condition.d.ts.map +1 -0
  207. package/dist/services/matrix-condition.js +403 -0
  208. package/dist/services/matrix-condition.js.map +1 -0
  209. package/dist/services/menu-catalog.d.ts +46 -0
  210. package/dist/services/menu-catalog.d.ts.map +1 -1
  211. package/dist/services/menu-catalog.js +80 -0
  212. package/dist/services/menu-catalog.js.map +1 -1
  213. package/dist/services/permission-entity.d.ts +55 -0
  214. package/dist/services/permission-entity.d.ts.map +1 -0
  215. package/dist/services/permission-entity.js +79 -0
  216. package/dist/services/permission-entity.js.map +1 -0
  217. package/dist/services/workflow-assign-flow.d.ts.map +1 -1
  218. package/dist/services/workflow-assign-flow.js.map +1 -1
  219. package/dist/services/workflow-function-management.d.ts +123 -0
  220. package/dist/services/workflow-function-management.d.ts.map +1 -0
  221. package/dist/services/workflow-function-management.js +425 -0
  222. package/dist/services/workflow-function-management.js.map +1 -0
  223. package/dist/services/workflow-matrix-rule.d.ts +34 -0
  224. package/dist/services/workflow-matrix-rule.d.ts.map +1 -0
  225. package/dist/services/workflow-matrix-rule.js +94 -0
  226. package/dist/services/workflow-matrix-rule.js.map +1 -0
  227. package/dist/services/workflow-opinion-settings.d.ts +67 -0
  228. package/dist/services/workflow-opinion-settings.d.ts.map +1 -0
  229. package/dist/services/workflow-opinion-settings.js +328 -0
  230. package/dist/services/workflow-opinion-settings.js.map +1 -0
  231. package/package.json +1 -1
  232. package/skill-docs/SKILL.md +5 -5
  233. package/skill-docs/_catalog.md +5 -1
  234. package/skill-docs/actionflows/SKILL.md +1 -0
  235. package/skill-docs/actionflows/references/components/calendar/MeetingCreate.md +2 -0
  236. package/skill-docs/actionflows/references/components/logic/Output.md +1 -1
  237. package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +1 -1
  238. package/skill-docs/actionflows/references/dynamic_capability_matrix.md +3 -3
  239. package/skill-docs/references/common/ref-cli-commands.md +63 -23
  240. package/skill-docs/references/ebuilder-designer/guide-designer-components.md +9 -0
  241. package/skill-docs/references/form/guide-form-archive-permission.md +175 -0
  242. package/skill-docs/references/form/guide-form-association.md +13 -0
  243. package/skill-docs/references/form/guide-form-button.md +87 -0
  244. package/skill-docs/references/form/guide-form-message.md +19 -2
  245. package/skill-docs/references/form/guide-form-view.md +23 -3
  246. package/skill-docs/references/form/guide-formula-linkage.md +42 -11
  247. package/skill-docs/references/workflow/guide-function-management.md +154 -0
  248. package/skill-docs/references/workflow/guide-opinion-settings.md +126 -0
  249. 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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"}