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
@@ -11,7 +11,7 @@ import { randomUUID } from 'node:crypto';
11
11
  import { readFileSync } from 'node:fs';
12
12
  import { buildConditionDetail, resolveWorkflowEffect, readLinkageConfig } from '../services/form-linkage-condition.js';
13
13
  import { resolveFormulaRefs } from '../services/formula-detail.js';
14
- import { FLOW_ROUTE, assertAssignableTarget, buildAssignExpression, buildDrivingColumnsBody, buildDrivingEventsBody, buildFdEffect, buildFormulaLinkageName, buildFormulaSavePayload, buildLinkageApiUrl, buildLinkageDeleteBody, buildLinkageListBody, buildLinkageQueryBody, buildLinkageSavePayload, buildLinkageUpdatePayload, buildMonitorActions, buildPreCheckBody, describeColumn, extractEffect, extractTriggerState, findColumnById, isAssignableTarget, moduleColumnsOf, partitionDrivingColumns, resolveDrivingColumn, resolveDrivingEvent, summarizeLinkage, formatTriggerLine, targetDriftWarning, toBareLabel, } from '../services/form-formula-linkage.js';
14
+ import { FLOW_ROUTE, assertAssignableTarget, buildAssignExpression, buildDrivingColumnsBody, buildDrivingEventsBody, buildFdEffect, buildFormulaLinkageName, buildFormulaSavePayload, buildLinkageApiUrl, buildLinkageDeleteBody, buildLinkageListBody, buildLinkageQueryBody, buildLinkageSavePayload, buildLinkageUpdatePayload, buildMonitorActions, buildPreCheckBody, buildTriggerSpecs, describeColumn, extractEffect, formatSpecsLine, isAssignableTarget, isWorkflowDimension, mergeMonitorActions, moduleColumnsOf, partitionDrivingColumns, resolveDrivingColumn, specsFromStoredTriggers, storedTriggers, summarizeLinkage, formatTriggerLine, targetDriftWarning, toBareLabel, } from '../services/form-formula-linkage.js';
15
15
  /** 流程表单选项配色(对齐浏览器抓包 styleConfig.OptionBackground,循环取用)。 */
16
16
  const OPTION_COLORS = ['#FFBD4F', '#FF716E', '#3BD8C3', '#5B8FF9', '#5AD8A6', '#F6BD16', '#E86452', '#6DC8EC', '#945FB9', '#FF99C3'];
17
17
  /**
@@ -2262,12 +2262,12 @@ export function registerWorkflowFormCommands(program) {
2262
2262
  }
2263
2263
  });
2264
2264
  flCmd.command('add')
2265
- .description('新增函数联动:事件 + 触发字段 + 赋值目标 + 公式')
2265
+ .description('新增函数联动:触发时机(可多个)+ 触发字段 + 赋值目标 + 公式')
2266
2266
  .argument('<formId>', '流程表单 formId')
2267
2267
  .requiredOption('--target <field>', '赋值目标字段(被写入)')
2268
2268
  .requiredOption('--expression <expr>', '公式右侧函数体;也接受整段赋值式,或用 @文件 传长表达式')
2269
- .option('--event <event>', '触发事件(名称或 type,见 events),默认 changeField 值改变时', 'changeField')
2270
- .option('--trigger <fields...>', '触发字段,可多个')
2269
+ .option('--event <event...>', '触发时机,**可多个**;每个可自带触发字段 —— 「名称或 type」或「类型:字段,字段」。默认 changeField 值改变时', ['changeField'])
2270
+ .option('--trigger <fields...>', '触发字段,可多个。作用于**没有自带字段**的字段级触发时机')
2271
2271
  .option('--effect <dimension>', '生效维度: form=当前表单(默认)/ formLayout=表单布局 / workFlow=当前工作流 / includeNode=选择节点')
2272
2272
  .option('--workflow-id <id>', '流程 ID(refId,也是 workFlow/includeNode 的取值来源;不给按 formId 兜底)')
2273
2273
  .option('--node <node>', 'includeNode 的节点(id 或节点名)')
@@ -2286,22 +2286,21 @@ export function registerWorkflowFormCommands(program) {
2286
2286
  const ebb = { ebbusinessid: formId };
2287
2287
  const refId = cmdOpts.workflowId || formId;
2288
2288
  const { events, columns, source } = await wfLinkageContext(client, baseUrl, formId, cmdOpts.workflowId);
2289
- const event = resolveDrivingEvent(events, cmdOpts.event);
2290
2289
  const targetCol = resolveDrivingColumn(columns, cmdOpts.target, FLOW_ROUTE);
2291
2290
  assertAssignableTarget(targetCol, FLOW_ROUTE);
2292
2291
  const drift = targetDriftWarning(targetCol, FLOW_ROUTE);
2293
2292
  if (drift)
2294
2293
  console.error(` ⚠ ${drift}`);
2295
- const triggerCols = (cmdOpts.trigger || []).map((t) => resolveDrivingColumn(columns, t, FLOW_ROUTE));
2296
- if (!event.selectColumn && triggerCols.length) {
2297
- console.error(` ⚠ 事件「${event.name}」是表单级的,不需要触发字段,--trigger 已忽略`);
2298
- }
2299
- const monitorActions = buildMonitorActions(event, triggerCols);
2294
+ const built = buildTriggerSpecs(events, columns, cmdOpts.event, cmdOpts.trigger || [], FLOW_ROUTE);
2295
+ const specs = built.specs;
2296
+ for (const w of built.warnings)
2297
+ console.error(` ⚠ ${w}`);
2298
+ const monitorActions = buildMonitorActions(specs);
2300
2299
  const { effect } = await wfEffectOf(client, baseUrl, formId, cmdOpts);
2301
2300
  const { expression, stripped } = buildAssignExpression(targetCol, readExpressionArg(cmdOpts.expression));
2302
2301
  if (stripped)
2303
2302
  console.error(' ℹ 表达式自带赋值式,已按 --target 校验左侧并沿用右侧');
2304
- console.error(` 联动: ${effect.effectName} / ${event.name} ← ${triggerCols.map((c) => toBareLabel(c)).join('、') || '(表单级)'} → 填 ${toBareLabel(targetCol)}(${targetCol.id})`);
2303
+ console.error(` 联动: ${effect.effectName} / ${formatSpecsLine(specs)} → 填 ${toBareLabel(targetCol)}(${targetCol.id})`);
2305
2304
  // 这条路由的 parameter **不带 appId 键**,所以 ctx 里不给 appId
2306
2305
  const parsed = resolveFormulaRefs(expression, {
2307
2306
  mainFields: source.mainFields, detailTables: source.detailTables,
@@ -2353,10 +2352,13 @@ export function registerWorkflowFormCommands(program) {
2353
2352
  success: true, linkageId, excelId, formId, refId, effect: effect.effectName,
2354
2353
  expression: s.expression || parsed.normalizedExpression,
2355
2354
  target: { id: targetCol.id, name: toBareLabel(targetCol) },
2356
- event: event.type, triggers: triggerCols.map((c) => ({ id: c.id, name: toBareLabel(c) })),
2355
+ events: specs.map((sp) => ({
2356
+ type: sp.event.type, name: sp.event.name,
2357
+ triggers: sp.cols.map((c) => ({ id: String(c.id), name: toBareLabel(c) })),
2358
+ })),
2357
2359
  };
2358
2360
  console.log(opts.json ? JSON.stringify(out, null, 2)
2359
- : `函数联动已创建: [${linkageId}] ${effect.effectName} / ${event.name} ← ${triggerCols.map((c) => toBareLabel(c)).join('、') || '(表单级)'} → ${toBareLabel(targetCol)}`);
2361
+ : `函数联动已创建: [${linkageId}] ${effect.effectName} / ${formatSpecsLine(specs)} → ${toBareLabel(targetCol)}`);
2360
2362
  }
2361
2363
  catch (e) {
2362
2364
  console.error(`新增函数联动失败: ${e.message}`);
@@ -2364,11 +2366,11 @@ export function registerWorkflowFormCommands(program) {
2364
2366
  }
2365
2367
  });
2366
2368
  flCmd.command('update')
2367
- .description('改已有函数联动的触发条件/生效维度/名称/启停(不传的项沿用现有)')
2369
+ .description('改已有函数联动的触发时机/生效维度/名称/启停(不给 --event/--trigger 就原样沿用现有的触发时机)')
2368
2370
  .argument('<formId>', '流程表单 formId')
2369
2371
  .argument('<linkageId>', '联动 ID')
2370
- .option('--event <event>', '改触发事件')
2371
- .option('--trigger <fields...>', '改触发字段')
2372
+ .option('--event <event...>', '改触发时机,可多个(写法同 add:可带 --event 类型:字段,字段)。不给则沿用现有')
2373
+ .option('--trigger <fields...>', '改触发字段(作用于记录里的字段级触发时机)。不给则沿用现有')
2372
2374
  .option('--effect <dimension>', '改生效维度: form / formLayout / workFlow / includeNode')
2373
2375
  .option('--workflow-id <id>', '流程 ID(refId;不给沿用记录里的)')
2374
2376
  .option('--node <node>', 'includeNode 的节点')
@@ -2386,26 +2388,38 @@ export function registerWorkflowFormCommands(program) {
2386
2388
  const ebb = { ebbusinessid: formId };
2387
2389
  const record = await wfReadLinkage(client, baseUrl, formId, linkageId, cmdOpts.workflowId);
2388
2390
  const refId = String(record?.refId || cmdOpts.workflowId || formId);
2389
- const cur = extractTriggerState(record);
2390
- const { events, columns } = await wfLinkageContext(client, baseUrl, formId, cmdOpts.workflowId);
2391
- const event = resolveDrivingEvent(events, cmdOpts.event || cur.eventType);
2392
- const triggerInput = cmdOpts.trigger?.length ? cmdOpts.trigger : cur.triggerIds;
2393
- const triggerCols = [];
2394
- for (const t of triggerInput) {
2395
- const col = findColumnById(columns, t) || (() => { try {
2396
- return resolveDrivingColumn(columns, t, FLOW_ROUTE);
2397
- }
2398
- catch {
2399
- return undefined;
2400
- } })();
2401
- if (!col)
2402
- throw new Error(`触发字段「${t}」在当前表单里找不到了(可能已被删除)。用 wf-form formula-linkage columns 复核`);
2403
- triggerCols.push(col);
2404
- }
2405
- const monitorActions = buildMonitorActions(event, triggerCols);
2391
+ const curEffect = extractEffect(record);
2406
2392
  const effect = cmdOpts.effect
2407
2393
  ? (await wfEffectOf(client, baseUrl, formId, cmdOpts)).effect
2408
- : extractEffect(record);
2394
+ : curEffect;
2395
+ // 在「表单/布局」与「工作流/节点」之间换维度时,可用事件整个换了一套;不给 --event 就会存出
2396
+ // 一条「事件是工作流事件、维度却是当前表单」的坏规则 —— 当场拦下
2397
+ if (isWorkflowDimension(curEffect?.effectType) !== isWorkflowDimension(effect?.effectType)
2398
+ && !cmdOpts.event?.length) {
2399
+ throw new Error('生效维度在「当前表单/表单布局」与「当前工作流/选择节点」之间切换时,必须同时用 --event 指定新维度下可用的触发时机');
2400
+ }
2401
+ let specs = null;
2402
+ const wantEvents = !!cmdOpts.event?.length;
2403
+ const wantTrigger = !!cmdOpts.trigger?.length;
2404
+ if (wantEvents || wantTrigger) {
2405
+ const { events, columns } = await wfLinkageContext(client, baseUrl, formId, cmdOpts.workflowId);
2406
+ if (wantEvents) {
2407
+ const built = buildTriggerSpecs(events, columns, cmdOpts.event, cmdOpts.trigger || [], FLOW_ROUTE);
2408
+ specs = built.specs;
2409
+ for (const w of built.warnings)
2410
+ console.error(` ⚠ ${w}`);
2411
+ }
2412
+ else {
2413
+ // 只给 --trigger:触发时机沿用记录里的(记录自己说了算哪些是字段级),只换字段
2414
+ const built = specsFromStoredTriggers(storedTriggers(record), events, columns, cmdOpts.trigger || []);
2415
+ specs = built.specs;
2416
+ if (!built.overrideApplied)
2417
+ console.error(' ⚠ 记录里没有字段级触发时机,--trigger 已忽略');
2418
+ }
2419
+ }
2420
+ // ⚠ 两个都没给就**原样透传**读回的 monitorActions —— 早先这里是拿 `actions[0]` 重建,
2421
+ // 一条挂了多个触发时机的规则改个名字就会把其余触发时机静默抹掉
2422
+ const monitorActions = specs ? mergeMonitorActions(record?.monitorActions || [], specs) : (record?.monitorActions || []);
2409
2423
  let linkageState = record?.linkageState !== false;
2410
2424
  if (cmdOpts.state) {
2411
2425
  const v = String(cmdOpts.state).toLowerCase();
@@ -2422,9 +2436,15 @@ export function registerWorkflowFormCommands(program) {
2422
2436
  throw new Error(`更新失败: ${res?.msg || '未知错误'}`);
2423
2437
  await client.post(`${baseUrl}${buildLinkageApiUrl(FLOW_ROUTE, 'preCheck')}`, buildPreCheckBody(FLOW_ROUTE, { formId, linkageIds: [linkageId], refId }), ebb);
2424
2438
  const after = summarizeLinkage(await wfReadLinkage(client, baseUrl, formId, linkageId, refId));
2425
- const out = { success: true, linkageId, name: after.name, state: after.state, effect: wfEffectLabel(after.effect), event: after.eventNames.join('、'), triggers: after.triggerNames };
2439
+ // 触发时机数量对不上就是被平台吞了 —— 这种静默丢失必须当场喊出来
2440
+ const want = monitorActions.map((a) => String(a?.actionType || '')).filter(Boolean).join(',');
2441
+ const got = after.triggers.map((t) => t.eventType).join(',');
2442
+ if (want !== got) {
2443
+ console.error(` ⚠ 回读的触发时机与提交的不一致,以平台为准\n 提交: ${want || '(空)'}\n 回读: ${got || '(空)'}`);
2444
+ }
2445
+ const out = { success: true, linkageId, name: after.name, state: after.state, effect: wfEffectLabel(after.effect), events: after.triggers };
2426
2446
  console.log(opts.json ? JSON.stringify(out, null, 2)
2427
- : `函数联动已更新: [${linkageId}] ${after.name} (${after.state ? '启用' : '停用'}) ${wfEffectLabel(after.effect)} / ${after.eventNames.join('、')} ← ${after.triggerNames.join('、')}`);
2447
+ : `函数联动已更新: [${linkageId}] ${after.name} (${after.state ? '启用' : '停用'}) ${wfEffectLabel(after.effect)} / ${formatTriggerLine(after)}`);
2428
2448
  }
2429
2449
  catch (e) {
2430
2450
  console.error(`更新函数联动失败: ${e.message}`);