weaver-e10-builder 1.2.3 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/assets/org-employee-template.xlsx +0 -0
  2. package/dist/commands/actionflow.d.ts.map +1 -1
  3. package/dist/commands/actionflow.js +12 -25
  4. package/dist/commands/actionflow.js.map +1 -1
  5. package/dist/commands/designer-css.d.ts +15 -0
  6. package/dist/commands/designer-css.d.ts.map +1 -0
  7. package/dist/commands/designer-css.js +205 -0
  8. package/dist/commands/designer-css.js.map +1 -0
  9. package/dist/commands/form-button.d.ts.map +1 -1
  10. package/dist/commands/form-button.js +28 -5
  11. package/dist/commands/form-button.js.map +1 -1
  12. package/dist/commands/form-field-lang.d.ts.map +1 -1
  13. package/dist/commands/form-field-lang.js +4 -39
  14. package/dist/commands/form-field-lang.js.map +1 -1
  15. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  16. package/dist/commands/form-field-linkage.js +27 -6
  17. package/dist/commands/form-field-linkage.js.map +1 -1
  18. package/dist/commands/form-formula-linkage.d.ts +3 -0
  19. package/dist/commands/form-formula-linkage.d.ts.map +1 -0
  20. package/dist/commands/form-formula-linkage.js +434 -0
  21. package/dist/commands/form-formula-linkage.js.map +1 -0
  22. package/dist/commands/form-formula.d.ts.map +1 -1
  23. package/dist/commands/form-formula.js +22 -3
  24. package/dist/commands/form-formula.js.map +1 -1
  25. package/dist/commands/form-layout-init.d.ts.map +1 -1
  26. package/dist/commands/form-layout-init.js +15 -10
  27. package/dist/commands/form-layout-init.js.map +1 -1
  28. package/dist/commands/form-layout.js +24 -21
  29. package/dist/commands/form-layout.js.map +1 -1
  30. package/dist/commands/form-list-click.d.ts.map +1 -1
  31. package/dist/commands/form-list-click.js +2 -1
  32. package/dist/commands/form-list-click.js.map +1 -1
  33. package/dist/commands/form-native.d.ts.map +1 -1
  34. package/dist/commands/form-native.js +192 -3
  35. package/dist/commands/form-native.js.map +1 -1
  36. package/dist/commands/form-validate.d.ts.map +1 -1
  37. package/dist/commands/form-validate.js +11 -3
  38. package/dist/commands/form-validate.js.map +1 -1
  39. package/dist/commands/form.d.ts.map +1 -1
  40. package/dist/commands/form.js +323 -192
  41. package/dist/commands/form.js.map +1 -1
  42. package/dist/commands/matrix.d.ts.map +1 -1
  43. package/dist/commands/matrix.js +175 -36
  44. package/dist/commands/matrix.js.map +1 -1
  45. package/dist/commands/menu.d.ts.map +1 -1
  46. package/dist/commands/menu.js +170 -23
  47. package/dist/commands/menu.js.map +1 -1
  48. package/dist/commands/org.d.ts +10 -0
  49. package/dist/commands/org.d.ts.map +1 -0
  50. package/dist/commands/org.js +278 -0
  51. package/dist/commands/org.js.map +1 -0
  52. package/dist/commands/role.d.ts.map +1 -1
  53. package/dist/commands/role.js +106 -62
  54. package/dist/commands/role.js.map +1 -1
  55. package/dist/commands/wf-form.d.ts +1 -0
  56. package/dist/commands/wf-form.d.ts.map +1 -1
  57. package/dist/commands/wf-form.js +545 -39
  58. package/dist/commands/wf-form.js.map +1 -1
  59. package/dist/commands/workflow-auth-resp.d.ts.map +1 -1
  60. package/dist/commands/workflow-auth-resp.js +53 -5
  61. package/dist/commands/workflow-auth-resp.js.map +1 -1
  62. package/dist/commands/workflow-create-auth-resp.d.ts.map +1 -1
  63. package/dist/commands/workflow-create-auth-resp.js +5 -1
  64. package/dist/commands/workflow-create-auth-resp.js.map +1 -1
  65. package/dist/commands/workflow-node-assign-flow.d.ts.map +1 -1
  66. package/dist/commands/workflow-node-assign-flow.js +1 -2
  67. package/dist/commands/workflow-node-assign-flow.js.map +1 -1
  68. package/dist/commands/workflow-node.d.ts.map +1 -1
  69. package/dist/commands/workflow-node.js +147 -2
  70. package/dist/commands/workflow-node.js.map +1 -1
  71. package/dist/commands/workflow-odoc.d.ts.map +1 -1
  72. package/dist/commands/workflow-odoc.js +56 -56
  73. package/dist/commands/workflow-odoc.js.map +1 -1
  74. package/dist/commands/workflow-setting.d.ts.map +1 -1
  75. package/dist/commands/workflow-setting.js +77 -1
  76. package/dist/commands/workflow-setting.js.map +1 -1
  77. package/dist/commands/workflow.d.ts.map +1 -1
  78. package/dist/commands/workflow.js +114 -89
  79. package/dist/commands/workflow.js.map +1 -1
  80. package/dist/core/client.d.ts +14 -0
  81. package/dist/core/client.d.ts.map +1 -1
  82. package/dist/core/client.js +28 -12
  83. package/dist/core/client.js.map +1 -1
  84. package/dist/index.js +6 -0
  85. package/dist/index.js.map +1 -1
  86. package/dist/services/action-detail.d.ts.map +1 -1
  87. package/dist/services/action-detail.js +5 -4
  88. package/dist/services/action-detail.js.map +1 -1
  89. package/dist/services/actionflow/command_output.d.ts +7 -0
  90. package/dist/services/actionflow/command_output.d.ts.map +1 -1
  91. package/dist/services/actionflow/command_output.js +46 -0
  92. package/dist/services/actionflow/command_output.js.map +1 -1
  93. package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
  94. package/dist/services/actionflow/components/action_eb_add.js +14 -4
  95. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  96. package/dist/services/actionflow/components/action_eb_add_compiler.d.ts.map +1 -1
  97. package/dist/services/actionflow/components/action_eb_add_compiler.js +29 -0
  98. package/dist/services/actionflow/components/action_eb_add_compiler.js.map +1 -1
  99. package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
  100. package/dist/services/actionflow/components/action_eb_update.js +23 -8
  101. package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
  102. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  103. package/dist/services/actionflow/components/action_eb_update_compiler.js +261 -13
  104. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  105. package/dist/services/actionflow/components/approve_create.d.ts.map +1 -1
  106. package/dist/services/actionflow/components/approve_create.js +6 -3
  107. package/dist/services/actionflow/components/approve_create.js.map +1 -1
  108. package/dist/services/actionflow/components/custom_set_form.d.ts +10 -0
  109. package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -0
  110. package/dist/services/actionflow/components/custom_set_form.js +99 -0
  111. package/dist/services/actionflow/components/custom_set_form.js.map +1 -0
  112. package/dist/services/actionflow/components/custom_trigger.d.ts +2 -2
  113. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -1
  114. package/dist/services/actionflow/components/custom_trigger.js +11 -11
  115. package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
  116. package/dist/services/actionflow/components/dml_execute.d.ts.map +1 -1
  117. package/dist/services/actionflow/components/dml_execute.js +7 -3
  118. package/dist/services/actionflow/components/dml_execute.js.map +1 -1
  119. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  120. package/dist/services/actionflow/components/document_actions.js +7 -3
  121. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  122. package/dist/services/actionflow/components/enquiry_form.js +1 -1
  123. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  124. package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
  125. package/dist/services/actionflow/components/hrm_actions.js +7 -3
  126. package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
  127. package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
  128. package/dist/services/actionflow/components/multiple_execution.js +14 -5
  129. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  130. package/dist/services/actionflow/components/output.d.ts.map +1 -1
  131. package/dist/services/actionflow/components/output.js +6 -1
  132. package/dist/services/actionflow/components/output.js.map +1 -1
  133. package/dist/services/actionflow/components/send_message.js +2 -2
  134. package/dist/services/actionflow/components/send_message.js.map +1 -1
  135. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  136. package/dist/services/actionflow/components/workflow_actions.js +7 -3
  137. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  138. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  139. package/dist/services/actionflow/context_preflight.js +25 -8
  140. package/dist/services/actionflow/context_preflight.js.map +1 -1
  141. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  142. package/dist/services/actionflow/context_provider.js +24 -4
  143. package/dist/services/actionflow/context_provider.js.map +1 -1
  144. package/dist/services/actionflow/custom_trigger_context.d.ts +10 -0
  145. package/dist/services/actionflow/custom_trigger_context.d.ts.map +1 -0
  146. package/dist/services/actionflow/custom_trigger_context.js +46 -0
  147. package/dist/services/actionflow/custom_trigger_context.js.map +1 -0
  148. package/dist/services/actionflow/dynamic_resources.d.ts.map +1 -1
  149. package/dist/services/actionflow/dynamic_resources.js +1 -1
  150. package/dist/services/actionflow/dynamic_resources.js.map +1 -1
  151. package/dist/services/actionflow/ebuilder_source.d.ts +19 -0
  152. package/dist/services/actionflow/ebuilder_source.d.ts.map +1 -0
  153. package/dist/services/actionflow/ebuilder_source.js +78 -0
  154. package/dist/services/actionflow/ebuilder_source.js.map +1 -0
  155. package/dist/services/actionflow/filter_rules.js +2 -2
  156. package/dist/services/actionflow/filter_rules.js.map +1 -1
  157. package/dist/services/actionflow/form_source.d.ts +51 -10
  158. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  159. package/dist/services/actionflow/form_source.js +173 -29
  160. package/dist/services/actionflow/form_source.js.map +1 -1
  161. package/dist/services/actionflow/formula_service.d.ts +13 -2
  162. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  163. package/dist/services/actionflow/formula_service.js +104 -42
  164. package/dist/services/actionflow/formula_service.js.map +1 -1
  165. package/dist/services/actionflow/id_generator.d.ts +2 -0
  166. package/dist/services/actionflow/id_generator.d.ts.map +1 -1
  167. package/dist/services/actionflow/id_generator.js +13 -0
  168. package/dist/services/actionflow/id_generator.js.map +1 -1
  169. package/dist/services/actionflow/preflight_service.d.ts +6 -0
  170. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  171. package/dist/services/actionflow/preflight_service.js +217 -4
  172. package/dist/services/actionflow/preflight_service.js.map +1 -1
  173. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  174. package/dist/services/actionflow/workflow_compiler.js +172 -50
  175. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  176. package/dist/services/auth-resp-condition.d.ts +35 -0
  177. package/dist/services/auth-resp-condition.d.ts.map +1 -0
  178. package/dist/services/auth-resp-condition.js +111 -0
  179. package/dist/services/auth-resp-condition.js.map +1 -0
  180. package/dist/services/condition-rules.d.ts.map +1 -1
  181. package/dist/services/condition-rules.js +4 -1
  182. package/dist/services/condition-rules.js.map +1 -1
  183. package/dist/services/designer-css.d.ts +89 -0
  184. package/dist/services/designer-css.d.ts.map +1 -0
  185. package/dist/services/designer-css.js +163 -0
  186. package/dist/services/designer-css.js.map +1 -0
  187. package/dist/services/dom-structure.d.ts +42 -0
  188. package/dist/services/dom-structure.d.ts.map +1 -0
  189. package/dist/services/dom-structure.js +251 -0
  190. package/dist/services/dom-structure.js.map +1 -0
  191. package/dist/services/esb-interface/document-parser.d.ts.map +1 -1
  192. package/dist/services/esb-interface/document-parser.js +62 -5
  193. package/dist/services/esb-interface/document-parser.js.map +1 -1
  194. package/dist/services/form-association.d.ts +19 -0
  195. package/dist/services/form-association.d.ts.map +1 -1
  196. package/dist/services/form-association.js +64 -0
  197. package/dist/services/form-association.js.map +1 -1
  198. package/dist/services/form-button-action.d.ts +7 -0
  199. package/dist/services/form-button-action.d.ts.map +1 -1
  200. package/dist/services/form-button-action.js +11 -1
  201. package/dist/services/form-button-action.js.map +1 -1
  202. package/dist/services/form-create.d.ts +4 -0
  203. package/dist/services/form-create.d.ts.map +1 -1
  204. package/dist/services/form-create.js +18 -12
  205. package/dist/services/form-create.js.map +1 -1
  206. package/dist/services/form-field-patch.d.ts +25 -1
  207. package/dist/services/form-field-patch.d.ts.map +1 -1
  208. package/dist/services/form-field-patch.js +52 -9
  209. package/dist/services/form-field-patch.js.map +1 -1
  210. package/dist/services/form-formula-linkage.d.ts +349 -0
  211. package/dist/services/form-formula-linkage.d.ts.map +1 -0
  212. package/dist/services/form-formula-linkage.js +546 -0
  213. package/dist/services/form-formula-linkage.js.map +1 -0
  214. package/dist/services/form-i18n-label.d.ts +48 -0
  215. package/dist/services/form-i18n-label.d.ts.map +1 -0
  216. package/dist/services/form-i18n-label.js +91 -0
  217. package/dist/services/form-i18n-label.js.map +1 -0
  218. package/dist/services/form-layout-insert.d.ts +84 -0
  219. package/dist/services/form-layout-insert.d.ts.map +1 -0
  220. package/dist/services/form-layout-insert.js +244 -0
  221. package/dist/services/form-layout-insert.js.map +1 -0
  222. package/dist/services/form-linkage-condition.d.ts +159 -0
  223. package/dist/services/form-linkage-condition.d.ts.map +1 -0
  224. package/dist/services/form-linkage-condition.js +307 -0
  225. package/dist/services/form-linkage-condition.js.map +1 -0
  226. package/dist/services/form-style-template.d.ts +6 -2
  227. package/dist/services/form-style-template.d.ts.map +1 -1
  228. package/dist/services/form-style-template.js +8 -4
  229. package/dist/services/form-style-template.js.map +1 -1
  230. package/dist/services/formula-detail.d.ts +98 -6
  231. package/dist/services/formula-detail.d.ts.map +1 -1
  232. package/dist/services/formula-detail.js +208 -26
  233. package/dist/services/formula-detail.js.map +1 -1
  234. package/dist/services/matrix-rows.d.ts +43 -0
  235. package/dist/services/matrix-rows.d.ts.map +1 -0
  236. package/dist/services/matrix-rows.js +104 -0
  237. package/dist/services/matrix-rows.js.map +1 -0
  238. package/dist/services/menu-catalog.d.ts +84 -0
  239. package/dist/services/menu-catalog.d.ts.map +1 -0
  240. package/dist/services/menu-catalog.js +183 -0
  241. package/dist/services/menu-catalog.js.map +1 -0
  242. package/dist/services/org-department.d.ts +114 -0
  243. package/dist/services/org-department.d.ts.map +1 -0
  244. package/dist/services/org-department.js +209 -0
  245. package/dist/services/org-department.js.map +1 -0
  246. package/dist/services/org-employee.d.ts +87 -0
  247. package/dist/services/org-employee.d.ts.map +1 -0
  248. package/dist/services/org-employee.js +219 -0
  249. package/dist/services/org-employee.js.map +1 -0
  250. package/dist/services/role-member.d.ts +99 -0
  251. package/dist/services/role-member.d.ts.map +1 -0
  252. package/dist/services/role-member.js +206 -0
  253. package/dist/services/role-member.js.map +1 -0
  254. package/dist/services/workflow-add-step.d.ts +45 -0
  255. package/dist/services/workflow-add-step.d.ts.map +1 -0
  256. package/dist/services/workflow-add-step.js +122 -0
  257. package/dist/services/workflow-add-step.js.map +1 -0
  258. package/dist/services/workflow-assign-flow.d.ts +1 -6
  259. package/dist/services/workflow-assign-flow.d.ts.map +1 -1
  260. package/dist/services/workflow-assign-flow.js +3 -8
  261. package/dist/services/workflow-assign-flow.js.map +1 -1
  262. package/dist/services/workflow-drawback.d.ts +19 -0
  263. package/dist/services/workflow-drawback.d.ts.map +1 -0
  264. package/dist/services/workflow-drawback.js +59 -0
  265. package/dist/services/workflow-drawback.js.map +1 -0
  266. package/dist/services/workflow-info.d.ts +83 -0
  267. package/dist/services/workflow-info.d.ts.map +1 -0
  268. package/dist/services/workflow-info.js +97 -0
  269. package/dist/services/workflow-info.js.map +1 -0
  270. package/dist/services/workflow-links.d.ts +51 -0
  271. package/dist/services/workflow-links.d.ts.map +1 -0
  272. package/dist/services/workflow-links.js +162 -0
  273. package/dist/services/workflow-links.js.map +1 -0
  274. package/dist/services/workflow-node-layout.d.ts +45 -4
  275. package/dist/services/workflow-node-layout.d.ts.map +1 -1
  276. package/dist/services/workflow-node-layout.js +142 -41
  277. package/dist/services/workflow-node-layout.js.map +1 -1
  278. package/dist/services/workflow-odoc-setting.d.ts +43 -0
  279. package/dist/services/workflow-odoc-setting.d.ts.map +1 -0
  280. package/dist/services/workflow-odoc-setting.js +109 -0
  281. package/dist/services/workflow-odoc-setting.js.map +1 -0
  282. package/dist/services/workflow-tab-config.d.ts +54 -0
  283. package/dist/services/workflow-tab-config.d.ts.map +1 -0
  284. package/dist/services/workflow-tab-config.js +137 -0
  285. package/dist/services/workflow-tab-config.js.map +1 -0
  286. package/dist/types.d.ts +5 -1
  287. package/dist/types.d.ts.map +1 -1
  288. package/dist/utils/column-name.d.ts +24 -0
  289. package/dist/utils/column-name.d.ts.map +1 -1
  290. package/dist/utils/column-name.js +16 -0
  291. package/dist/utils/column-name.js.map +1 -1
  292. package/ecodecmd/package.json +1 -2
  293. package/ecodecmd/src/loaddep.js +19 -9
  294. package/package.json +48 -48
  295. package/skill-docs/SKILL.md +15 -11
  296. package/skill-docs/_catalog.md +85 -79
  297. package/skill-docs/actionflows/SKILL.md +173 -168
  298. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +38 -1
  299. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +42 -0
  300. package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +1 -1
  301. package/skill-docs/actionflows/references/components/logic/Output.md +2 -0
  302. package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +48 -11
  303. package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +1 -1
  304. package/skill-docs/assets/dom-structure/Bar.json +341 -0
  305. package/skill-docs/assets/dom-structure/BarStack.json +341 -0
  306. package/skill-docs/assets/dom-structure/Bubble.json +323 -0
  307. package/skill-docs/assets/dom-structure/Calendar.json +515 -0
  308. package/skill-docs/assets/dom-structure/Circular.json +337 -0
  309. package/skill-docs/assets/dom-structure/CollapsePanel.json +289 -0
  310. package/skill-docs/assets/dom-structure/Comment.json +617 -0
  311. package/skill-docs/assets/dom-structure/CountDown.json +755 -0
  312. package/skill-docs/assets/dom-structure/DigitalPanel.json +191 -0
  313. package/skill-docs/assets/dom-structure/EbButton.json +387 -0
  314. package/skill-docs/assets/dom-structure/FastCreate.json +242 -0
  315. package/skill-docs/assets/dom-structure/Gauge.json +282 -0
  316. package/skill-docs/assets/dom-structure/HBar.json +336 -0
  317. package/skill-docs/assets/dom-structure/HBarStack.json +337 -0
  318. package/skill-docs/assets/dom-structure/Line.json +341 -0
  319. package/skill-docs/assets/dom-structure/NList.json +712 -0
  320. package/skill-docs/assets/dom-structure/NavBar.json +274 -0
  321. package/skill-docs/assets/dom-structure/NavPanel.json +390 -0
  322. package/skill-docs/assets/dom-structure/NewTab.json +606 -0
  323. package/skill-docs/assets/dom-structure/Nightingale.json +336 -0
  324. package/skill-docs/assets/dom-structure/PageHeader.json +205 -0
  325. package/skill-docs/assets/dom-structure/Picture.json +209 -0
  326. package/skill-docs/assets/dom-structure/Pie.json +338 -0
  327. package/skill-docs/assets/dom-structure/ProgressChart.json +299 -0
  328. package/skill-docs/assets/dom-structure/SearchGlobal.json +628 -0
  329. package/skill-docs/assets/dom-structure/Slide.json +489 -0
  330. package/skill-docs/assets/dom-structure/Treemap.json +324 -0
  331. package/skill-docs/references/common/guide-plan-template.md +10 -4
  332. package/skill-docs/references/common/ref-cli-commands.md +67 -34
  333. package/skill-docs/references/ebuilder-designer/guide-designer-components.md +12 -1
  334. package/skill-docs/references/ebuilder-designer/guide-designer-css.md +127 -0
  335. package/skill-docs/references/ebuilder-designer/guide-designer.md +6 -5
  336. package/skill-docs/references/esb-interface/guide-import.md +4 -1
  337. package/skill-docs/references/form/guide-create-form.md +14 -1
  338. package/skill-docs/references/form/guide-field-linkage.md +2 -0
  339. package/skill-docs/references/form/guide-form-formula-functions.md +36 -0
  340. package/skill-docs/references/form/guide-form-layout-incremental.md +75 -0
  341. package/skill-docs/references/form/guide-form-layout-planning.md +1 -1
  342. package/skill-docs/references/form/guide-form-linkage.md +89 -5
  343. package/skill-docs/references/form/guide-formula-linkage.md +250 -0
  344. package/skill-docs/references/form/ref-form-fields.md +6 -0
  345. package/skill-docs/references/hrm/guide-matrix.md +79 -16
  346. package/skill-docs/references/hrm/guide-org-employee.md +56 -0
  347. package/skill-docs/references/menu/system-menus.md +12 -0
  348. package/skill-docs/references/workflow/guide-workflow-auth-resp.md +48 -22
  349. package/skill-docs/references/workflow/guide-workflow-odoc-setting.md +248 -0
  350. package/skill-docs/references/workflow/guide-workflow-odoc.md +25 -33
  351. package/skill-docs/references/workflow/guide-workflow.md +18 -3
@@ -3,12 +3,13 @@
3
3
  * 对齐 Python 版 core/workflow_compiler.py(黄金参照)。
4
4
  * 第 1 期聚焦:ApproveTrigger / ActionEbAdd / ActionEbUpdate / ActionEbDelete / Output 的编译主链。
5
5
  */
6
- import { genSfId } from './id_generator.js';
6
+ import { genSfId, normalizeNumericFrontId } from './id_generator.js';
7
7
  import fs from 'node:fs';
8
8
  import { get, getCompiler, getNodePost } from './components/index.js';
9
9
  import { findInMetadata, getTargetFormFields, getWorkflowDetailNames, getTargetDetailFields, getWorkflowDetailFields, getWorkflowFieldIds, workflowFieldId, getWorkflowContextFields, getWorkflowContextFieldsByKey } from './runtime_metadata.js';
10
- import { buildPersonFormula, buildSettingEntry, buildAssignBean, attachEsbAssign, resolveEnumConstant, resolveParamKey, resolveSourceFieldLabel, resolveSourceFieldType, normalizeConstantAssignment, lookupTargetFieldMeta, formulaFixedForAssignSwitch, formulaSystemVar, formulaContext, assignFlatContextDirect, getFormulaFn, formulaFunction, } from './formula_service.js';
10
+ import { buildPersonFormula, buildSettingEntry, buildAssignBean, attachEsbAssign, resolveEnumConstant, resolveParamKey, resolveSourceFieldLabel, resolveSourceFieldType, normalizeConstantAssignment, lookupTargetFieldMeta, formulaFixedForAssignSwitch, formulaSystemVar, formulaContext, assignFlatContextDirect, getFormulaFn, formulaFunction, contextRootForComponent, contextTableNameForRoot, normalizeContextParamKey, } from './formula_service.js';
11
11
  import { buildFormulaReference, buildUpdateFieldCondition } from './components/action_eb_update_compiler.js';
12
+ import { resolveCustomTriggerDtoId } from './custom_trigger_context.js';
12
13
  import { resolveSystemParameter, isDateSystemParameter } from './system_params.js';
13
14
  import { conditionFieldFamily, filterFieldType, normalizeFilterOperator, conditionOperatorOverride, resolveFormCtx, buildFilterContextFormula, } from './filter_rules.js';
14
15
  import { getStepBranches } from './step_branches.js';
@@ -224,7 +225,11 @@ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId
224
225
  if (!wfName)
225
226
  wfName = String(meta?._upstream_form_name || '');
226
227
  const pn = wfName ? `${wfName}.${label}` : label;
227
- result.updateId = assignFlatContextDirect(resolved, label, String(eventId || val.source || '0'), appId, 'string', pn, meta);
228
+ const sourceComponent = String(val._resolvedContext?.componentType || val.componentType || '');
229
+ const updateMeta = sourceComponent === 'CustomTrigger'
230
+ ? { ...(meta || {}), _context_component_type: sourceComponent }
231
+ : meta;
232
+ result.updateId = assignFlatContextDirect(resolved, label, String(eventId || val.source || '0'), appId, 'string', pn, updateMeta, val._resolvedContext?.fieldId);
228
233
  // esbAssign.wId 指向当前数据动作节点(设计器动态赋值定位用),与 filterInput 修复同源。
229
234
  attachEsbAssign(result.updateId, meta, String(eventId || val.source || '0'));
230
235
  }
@@ -279,18 +284,25 @@ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId
279
284
  result.filterInput = buildFilterInput(result, val, meta, appId, componentType);
280
285
  }
281
286
  else if (special === '_bizWorkflowPath' && val && typeof val === 'object') {
282
- const wfId = String(val.id || '');
283
- let formIds = val.formIds;
284
- if (!Array.isArray(formIds))
285
- formIds = val.formId || val.objId ? [String(val.formId || val.objId)] : [];
286
- result.workflowPath = [{
287
- bridgeService: 'ebuilder', relateFormTypes: ['WEA_EBUILDER'],
288
- name: String(val.name || val.text || ''),
289
- formIds: formIds.filter(Boolean).map(String),
290
- id: wfId,
291
- createFlowId: String(val.createFlowId || wfId),
292
- workflowtype: String(val.workflowtype ?? val.workflowType ?? appId ?? ''),
293
- }];
287
+ const workflowRows = Array.isArray(val) ? val : [val];
288
+ result.workflowPath = workflowRows
289
+ .filter((item) => item && typeof item === 'object' && !Array.isArray(item))
290
+ .map((item) => {
291
+ // ApproveCreateDTO 接收前端完整的 WorkflowPathBrowser 对象;只归一化
292
+ // 后端保存必需的别名,不能重建对象后丢掉 version/status/分权等字段。
293
+ const workflow = JSON.parse(JSON.stringify(item));
294
+ const wfId = String(workflow.id || workflow.createFlowId || '');
295
+ let formIds = workflow.formIds;
296
+ if (!Array.isArray(formIds))
297
+ formIds = workflow.formId || workflow.objId ? [String(workflow.formId || workflow.objId)] : [];
298
+ workflow.id = wfId;
299
+ workflow.formIds = formIds.filter(Boolean).map(String);
300
+ workflow.createFlowId = String(workflow.createFlowId || wfId);
301
+ workflow.workflowtype = String(workflow.workflowtype ?? workflow.workflowType ?? appId ?? '');
302
+ workflow.bridgeService ??= 'ebuilder';
303
+ workflow.relateFormTypes ??= ['WEA_EBUILDER'];
304
+ return workflow;
305
+ });
294
306
  }
295
307
  else if (special === '_bizRequestName') {
296
308
  if (typeof val === 'string' && val.trim())
@@ -306,7 +318,10 @@ function handleSpecial(draftKey, special, val, result, meta, appId, idx, eventId
306
318
  else {
307
319
  const wfId = String(meta?._workflow_id || '');
308
320
  const rqKey = resolveParamKey(wfId, String(val.key ?? val.value ?? ''));
309
- result.requestName = formulaContext('', rqKey, { name: String(val.label || '') });
321
+ result.requestName = formulaContext('', rqKey, {
322
+ name: String(val.label || ''),
323
+ frontId: val._resolvedContext?.fieldId || val.frontId || val.fieldId,
324
+ });
310
325
  attachEsbAssign(result.requestName, meta, String(eventId || ''));
311
326
  }
312
327
  }
@@ -375,7 +390,7 @@ function handleBasisValue(val, result, meta, appId, eventId) {
375
390
  comId: srcId, newParentName: bvParent,
376
391
  };
377
392
  const bvf = {
378
- frontId: bvId, formulaType: bvfType, name: bvLabel, businessId: fBiz, id: fId,
393
+ frontId: normalizeNumericFrontId(bvId, '依据值 FormulaBean.frontId'), formulaType: bvfType, name: bvLabel, businessId: fBiz, id: fId,
379
394
  source: srcId, type: '3', value: `FormData.${bvKey}`, childs: [], config: bvfConfig, parentId: '0',
380
395
  };
381
396
  // 依据值公式同样需要 esbAssign.wId 指向当前数据动作节点(设计器动态赋值定位用)。
@@ -599,6 +614,7 @@ export function fillSetting(result, updates, mapping, constants, formula, meta,
599
614
  dataDrWithCalc: false,
600
615
  main,
601
616
  detail: [],
617
+ deleteMainFields: [],
602
618
  updateFieldCondition: { updateField: [] },
603
619
  };
604
620
  }
@@ -1075,6 +1091,7 @@ function conditionFormulaType(right, shape, sourceId) {
1075
1091
  name: String(right?.label || right?.name || key),
1076
1092
  fieldType: shape.formulaType,
1077
1093
  componentType: String(right?.componentType || right?.comType || 'ApproveTrigger'),
1094
+ frontId: right?._resolvedContext?.fieldId || right?._resolvedContext?.rawField?.id || right?.frontId || right?.fieldId,
1078
1095
  });
1079
1096
  bean.businessId = String(right?.businessId || bean.businessId || '0');
1080
1097
  return bean;
@@ -1244,6 +1261,32 @@ export function buildConditionDetail(condition, sourceId, meta = null) {
1244
1261
  };
1245
1262
  }
1246
1263
  // ── _build_setting_detail ───────────────────────────────────
1264
+ function buildDetailRowId(value, meta, appId, eventId, nodeType) {
1265
+ if (!value || typeof value !== 'object')
1266
+ throw new Error('明细 rowId 必须是固定值、上下文或其他动态赋值对象');
1267
+ const raw = value.assign ?? value.value ?? value;
1268
+ let assign;
1269
+ if (raw && typeof raw === 'object' && (raw.type || raw.formulaType) && !raw.kind)
1270
+ assign = { ...raw };
1271
+ else
1272
+ assign = buildFormulaReference(raw, { meta, appId, eventId, componentType: nodeType });
1273
+ attachEsbAssign(assign, meta, eventId);
1274
+ const assignId = String(value.assignId || assign.id || genSfId());
1275
+ const fieldId = value.id ?? value.primaryId ?? assignId;
1276
+ return {
1277
+ id: String(fieldId),
1278
+ primaryId: value.primaryId == null ? String(fieldId) : value.primaryId,
1279
+ original: false,
1280
+ assign,
1281
+ assignId,
1282
+ operate: value.operate || 'OPERATE_EQUAL',
1283
+ assignType: value.assignType || '',
1284
+ fieldType: value.fieldType || 'Text',
1285
+ switchType: value.switchType || (String(assign.type || assign.formulaType) === '1' ? 'fixvalue' : 'assign'),
1286
+ multiSelect: value.multiSelect === true,
1287
+ fieldKey: 'rowId',
1288
+ };
1289
+ }
1247
1290
  export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId, nodeType) {
1248
1291
  if (!Array.isArray(detailItems))
1249
1292
  return;
@@ -1251,6 +1294,13 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1251
1294
  for (const item of detailItems) {
1252
1295
  if (!item || typeof item !== 'object' || !item.detailTableId)
1253
1296
  continue;
1297
+ if (nodeType === 'ActionEbAdd') {
1298
+ const strategyKeys = ['operateType', 'updateType', 'updateFieldCondition', 'updatePolicy', 'rowId'];
1299
+ const configured = strategyKeys.filter((key) => item[key] !== undefined && item[key] !== null && item[key] !== '');
1300
+ if (configured.length) {
1301
+ throw new Error(`ActionEbAdd.detail 明细策略固定为新增,不支持 ${configured.join('、')};请使用 ActionEbUpdate`);
1302
+ }
1303
+ }
1254
1304
  const ele = { detailTableId: String(item.detailTableId) };
1255
1305
  if (item.updateFieldCondition && typeof item.updateFieldCondition === 'object') {
1256
1306
  ele.updateFieldCondition = buildUpdateFieldCondition(item.updateFieldCondition, { meta, appId, eventId: String(eventId), componentType: nodeType });
@@ -1262,7 +1312,19 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1262
1312
  // 明细项依据值:引用整个明细表,source=event 节点 id, frontId=明细表 id。
1263
1313
  if (item.basisValue && typeof item.basisValue === 'object') {
1264
1314
  const bvVal = item.basisValue;
1265
- const bvKey = String(bvVal.paramKey || bvVal.key || '').trim();
1315
+ let bvKey = String(bvVal.paramKey || bvVal.key || '').trim();
1316
+ const isCustomTriggerSource = String(meta?._context_component_type || meta?._upstream_component_type || '') === 'CustomTrigger';
1317
+ const basisContextRoot = isCustomTriggerSource ? contextRootForComponent('CustomTrigger') : 'FormData';
1318
+ const basisTableName = contextTableNameForRoot(basisContextRoot);
1319
+ if (isCustomTriggerSource)
1320
+ bvKey = normalizeContextParamKey(bvKey, 'CustomTrigger');
1321
+ if (bvKey && !bvKey.includes('[]')) {
1322
+ const wfId = String(meta?._workflow_id || '');
1323
+ const keyIndex = wfId ? getWorkflowContextFieldsByKey()[wfId] || {} : {};
1324
+ const arrayKey = `${bvKey}[]`;
1325
+ if (keyIndex[arrayKey] && !keyIndex[bvKey])
1326
+ bvKey = arrayKey;
1327
+ }
1266
1328
  const bvLabel = String(bvVal.label || bvVal.name || bvKey);
1267
1329
  if (bvKey) {
1268
1330
  const bvType = resolveSourceFieldType(bvKey, meta);
@@ -1273,15 +1335,28 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1273
1335
  prefix = String(meta._upstream_form_name || '');
1274
1336
  }
1275
1337
  const parentName = prefix ? `${prefix}.${bvLabel}[]` : `${bvLabel}[]`;
1276
- const bvSubformId = bvKey.includes('[]') ? bvKey.split('[]')[0].includes('.') ? bvKey.split('[]')[0].slice(bvKey.split('[]')[0].lastIndexOf('.') + 1) : bvKey : bvKey;
1338
+ // CustomTrigger 的明细依据值也是表维度上下文,frontId 必须取
1339
+ // CustFormTableDto.id,不能把 detail1 这类 paramKey 尾段直接当成 ID。
1340
+ const customTriggerTableId = isCustomTriggerSource
1341
+ ? resolveCustomTriggerDtoId(bvKey, meta?._custom_trigger_data, 'table')
1342
+ : '';
1343
+ const legacyBvSubformId = bvKey.includes('[]')
1344
+ ? bvKey.split('[]')[0].includes('.')
1345
+ ? bvKey.split('[]')[0].slice(bvKey.split('[]')[0].lastIndexOf('.') + 1)
1346
+ : bvKey
1347
+ : bvKey;
1348
+ // CustomTrigger 无法定位 DTO 表对象时按统一规则留空;不能回退到
1349
+ // detail1 这类业务 paramKey,否则既不是真实 ID,也会触发数字校验。
1350
+ const bvSubformId = isCustomTriggerSource ? customTriggerTableId : legacyBvSubformId;
1277
1351
  ele.basisValue = {
1278
- frontId: bvSubformId,
1352
+ frontId: normalizeNumericFrontId(bvSubformId, '明细依据值 FormulaBean.frontId'),
1279
1353
  formulaType: bvType,
1280
1354
  name: bvLabel,
1355
+ businessId: appId,
1281
1356
  id: genSfId(),
1282
1357
  source: String(eventId),
1283
1358
  type: '3',
1284
- value: `FormData.${bvKey}`,
1359
+ value: `${basisContextRoot}.${bvKey}`,
1285
1360
  childs: [],
1286
1361
  config: {
1287
1362
  paramKey: bvKey,
@@ -1293,12 +1368,13 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1293
1368
  multKey: '',
1294
1369
  multTypeObj: {
1295
1370
  allName: parentName, currentName: parentName,
1296
- currentParamKey: `FormData.${bvKey}`, allParamKey: `FormData.${bvKey}`,
1371
+ currentParamKey: `${basisContextRoot}.${bvKey}`, allParamKey: `${basisContextRoot}.${bvKey}`,
1297
1372
  },
1298
1373
  comId: String(eventId),
1299
- comType: 'ApproveTrigger',
1374
+ comType: isCustomTriggerSource ? 'CustomTrigger' : 'ApproveTrigger',
1300
1375
  newParentName: parentName,
1301
- fieldInfo: { paramKey: bvKey, tablePrimaryKey: 'FormData' },
1376
+ tableName: basisTableName,
1377
+ fieldInfo: { paramKey: bvKey, tablePrimaryKey: basisContextRoot },
1302
1378
  },
1303
1379
  parentId: '0',
1304
1380
  };
@@ -1306,6 +1382,10 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1306
1382
  }
1307
1383
  const mapping = item.mapping || {};
1308
1384
  const constants = item.constants || {};
1385
+ const detailTargetFormId = String((nodeData.targetForm || {}).id || '');
1386
+ const targetDetailFields = detailTargetFormId
1387
+ ? (getTargetDetailFields()[detailTargetFormId] || {})[String(item.detailTableId)] || {}
1388
+ : {};
1309
1389
  if (mapping && typeof mapping === 'object' && !Array.isArray(mapping)) {
1310
1390
  for (const [sourceKey, targetFieldIdRaw] of Object.entries(mapping)) {
1311
1391
  const targetFieldId = targetFieldIdRaw;
@@ -1326,10 +1406,16 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1326
1406
  const refKey = String(targetFieldId.paramKey || sourceKey);
1327
1407
  const refLabel = String(targetFieldId.label || sourceKey);
1328
1408
  const refDetail = String(targetFieldId.detailLabel || '');
1329
- assignment = { kind: 'context', paramKey: refKey, label: refLabel };
1409
+ const declaredKind = String(targetFieldId.kind || targetFieldId.assignmentKind || 'context');
1410
+ assignment = {
1411
+ ...(targetFieldId.assignment && typeof targetFieldId.assignment === 'object' ? targetFieldId.assignment : {}),
1412
+ kind: declaredKind, paramKey: refKey, label: refLabel,
1413
+ };
1330
1414
  if (refDetail)
1331
1415
  assignment.detailLabel = refDetail;
1332
- eleData[raw] = buildSettingEntry(raw, assignment, 'Text', meta, appId, eventId, operate, nodeType, true, '');
1416
+ const targetMeta = targetDetailFields[raw] || {};
1417
+ const targetType = String(targetMeta.componentKey || targetMeta.type || 'Text');
1418
+ eleData[raw] = buildSettingEntry(raw, assignment, targetType, meta, appId, eventId, operate, nodeType, true, '');
1333
1419
  }
1334
1420
  else {
1335
1421
  let raw = String(targetFieldId);
@@ -1342,16 +1428,20 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1342
1428
  raw = raw.slice(1);
1343
1429
  }
1344
1430
  assignment = { kind: 'context', paramKey: String(sourceKey), label: resolveSourceFieldLabel(String(sourceKey), meta, String(sourceKey)) };
1345
- eleData[raw] = buildSettingEntry(raw, assignment, 'Text', meta, appId, eventId, operate, nodeType, true, '');
1431
+ const targetMeta = targetDetailFields[raw] || {};
1432
+ const targetType = String(targetMeta.componentKey || targetMeta.type || 'Text');
1433
+ eleData[raw] = buildSettingEntry(raw, assignment, targetType, meta, appId, eventId, operate, nodeType, true, '');
1346
1434
  }
1347
1435
  }
1348
1436
  }
1349
1437
  if (constants && typeof constants === 'object' && !Array.isArray(constants)) {
1350
1438
  for (const [targetFieldIdRaw, valueRaw] of Object.entries(constants)) {
1351
1439
  const targetFieldId = String(targetFieldIdRaw);
1352
- const value = valueRaw;
1440
+ const targetMeta = targetDetailFields[targetFieldId] || {};
1441
+ const value = resolveEnumConstant(valueRaw, targetMeta);
1353
1442
  const [assignment, ft] = normalizeConstantAssignment(value, 'Text');
1354
- eleData[targetFieldId] = buildSettingEntry(targetFieldId, assignment, ft, meta, appId, eventId, 'OPERATE_EQUAL', nodeType, true, '');
1443
+ const targetType = String(targetMeta.componentKey || targetMeta.type || ft);
1444
+ eleData[targetFieldId] = buildSettingEntry(targetFieldId, assignment, targetType, meta, appId, eventId, 'OPERATE_EQUAL', nodeType, true, '');
1355
1445
  }
1356
1446
  }
1357
1447
  const formula = item.formula || {};
@@ -1372,14 +1462,22 @@ export function buildSettingDetail(nodeData, detailItems, meta, appId, eventId,
1372
1462
  const targetFormId = String((nodeData.targetForm || {}).id || '');
1373
1463
  autoFillDetailMapping(eleData, item, targetFormId, meta, appId, eventId, nodeType);
1374
1464
  ele.data = eleData;
1375
- if (item.deleteFields)
1376
- ele.deleteFields = item.deleteFields;
1465
+ ele.deleteFields = Array.isArray(item.deleteFields) ? item.deleteFields : [];
1466
+ // EsbDetailForm 的明细操作值来自 ActionEbDlg:add/update/updateAdd/cover/delete/default。
1467
+ // ActionEbAdd 没有明细操作选择器,不能写入不存在的 "insert";缺省操作由 ADD
1468
+ // 组件按新增明细处理。ActionEbUpdate 则保留用户明确选择的策略。
1377
1469
  if (item.operateType)
1378
- ele.operateType = item.operateType;
1379
- else
1470
+ ele.operateType = String(item.operateType);
1471
+ else if (nodeType !== 'ActionEbAdd' && nodeType !== 'ActionEbUpdate')
1380
1472
  ele.operateType = 'insert';
1381
- if (item.updateFieldCondition && typeof item.updateFieldCondition === 'object')
1382
- ele.updateFieldCondition = item.updateFieldCondition;
1473
+ if (item.updateType)
1474
+ ele.updateType = String(item.updateType);
1475
+ if (item.updatePolicy !== undefined && item.updatePolicy !== null && item.updatePolicy !== '') {
1476
+ ele.updatePolicy = String(item.updatePolicy);
1477
+ }
1478
+ if (item.rowId !== undefined && item.rowId !== null && item.rowId !== '') {
1479
+ ele.rowId = buildDetailRowId(item.rowId, meta, appId, String(eventId), nodeType);
1480
+ }
1383
1481
  detailOut.push(ele);
1384
1482
  }
1385
1483
  if (detailOut.length)
@@ -1442,6 +1540,13 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1442
1540
  parentId: '0',
1443
1541
  };
1444
1542
  const nodeData = node.data || {};
1543
+ if (nodeType === 'ApproveCreate') {
1544
+ // ApproveCreateComponent#save 使用这些 DTO 字段;它们不能依赖前端默认值。
1545
+ nodeData.module ??= 'workflow';
1546
+ nodeData.applicationId ??= String(appId);
1547
+ nodeData.dataId ??= [];
1548
+ nodeData.rejectToNodeId ??= [];
1549
+ }
1445
1550
  const pendingMapping = nodeData._pending_mapping;
1446
1551
  delete nodeData._pending_mapping;
1447
1552
  const pendingConstants = nodeData._pending_constants;
@@ -1461,15 +1566,18 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1461
1566
  delete nodeData.setting;
1462
1567
  const main = (setting || {}).main || {};
1463
1568
  const detailOut = (setting || {}).detail || [];
1464
- nodeData.formData = { main, detail: detailOut, dataDrWithCalc: false };
1465
- const fieldsMetaKey = String(formDataPayload.fieldsMetaKey || '_bizFields');
1466
- let bizFields = meta && typeof meta === 'object' ? (meta[fieldsMetaKey] || {}) : {};
1467
- if (!bizFields || Object.keys(bizFields).length === 0)
1468
- bizFields = draftAction.params?.[fieldsMetaKey] || {};
1469
- nodeData.fields = {
1470
- main: bizFields && typeof bizFields === 'object' ? (bizFields.main || []) : [],
1471
- detail: bizFields && typeof bizFields === 'object' ? (bizFields.detail || []) : [],
1472
- };
1569
+ nodeData.formData = { main, detail: detailOut, dataDrWithCalc: false, deleteMainFields: [] };
1570
+ // ApproveCreateDTO 没有使用 fields;目标字段仅用于编译 mapping,不能写入保存 DTO。
1571
+ if (nodeType !== 'ApproveCreate') {
1572
+ const fieldsMetaKey = String(formDataPayload.fieldsMetaKey || '_bizFields');
1573
+ let bizFields = meta && typeof meta === 'object' ? (meta[fieldsMetaKey] || {}) : {};
1574
+ if (!bizFields || Object.keys(bizFields).length === 0)
1575
+ bizFields = draftAction.params?.[fieldsMetaKey] || {};
1576
+ nodeData.fields = {
1577
+ main: bizFields && typeof bizFields === 'object' ? (bizFields.main || []) : [],
1578
+ detail: bizFields && typeof bizFields === 'object' ? (bizFields.detail || []) : [],
1579
+ };
1580
+ }
1473
1581
  }
1474
1582
  else if (pendingDetail && !(pendingMapping || pendingConstants || pendingFormula)) {
1475
1583
  // 只有明细表赋值(无主表 mapping/constants):先 _fill_setting 生成空 main + setting,再放回 detail。
@@ -1479,8 +1587,9 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1479
1587
  }
1480
1588
  else if (formDataPayload && typeof formDataPayload === 'object') {
1481
1589
  // 声明 formDataPayload 的组件即使没有字段映射,也显式携带表单数据容器。
1482
- nodeData.formData ??= { main: {}, detail: [], dataDrWithCalc: false };
1483
- nodeData.fields ??= { main: [], detail: [] };
1590
+ nodeData.formData ??= { main: {}, detail: [], dataDrWithCalc: false, deleteMainFields: [] };
1591
+ if (nodeType !== 'ApproveCreate')
1592
+ nodeData.fields ??= { main: [], detail: [] };
1484
1593
  nodeData.formDataId ??= genSfId();
1485
1594
  }
1486
1595
  else if ((pendingMapping || pendingConstants || pendingFormula) && !('setting' in nodeData)) {
@@ -1609,7 +1718,9 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1609
1718
  // saveDesign 需要 fields 明确登记组件配置的可持久化字段。
1610
1719
  // 手工添加的 EnquiryForm 等节点都会带这组字段;仅发送 data
1611
1720
  // 会导致后端保存后无法按 data.id 读取配置,前端回显为全部必填为空。
1612
- node.fields = Object.keys(node.data || {});
1721
+ // ApproveCreate 直接对应 ApproveCreateDTO,后端不接收该字段。
1722
+ if (nodeType !== 'ApproveCreate')
1723
+ node.fields = Object.keys(node.data || {});
1613
1724
  delete node.componentId;
1614
1725
  // 保留上面依据 previousNodeId 建立的 sources。组件目录壳只补前端元数据,
1615
1726
  // 不能把非首节点重新变成起始节点,否则平台会拒绝“有两个起始执行组件”。
@@ -1627,6 +1738,13 @@ export function convertNode(draftAction, isEvent = false, meta = null, appId = '
1627
1738
  if (postNode) {
1628
1739
  node = postNode(node, { draftAction, meta: meta || {}, appId, eventNodeId, isEvent });
1629
1740
  }
1741
+ // ApproveCreateDTO 的保存请求不需要 fields;同时清掉可能由目录元数据或
1742
+ // 旧编译结果带入的同名字段,避免它出现在最终请求 JSON 中。
1743
+ if (nodeType === 'ApproveCreate') {
1744
+ delete node.fields;
1745
+ if (node.data && typeof node.data === 'object')
1746
+ delete node.data.fields;
1747
+ }
1630
1748
  return node;
1631
1749
  }
1632
1750
  // ── convert_condition ───────────────────────────────────────
@@ -1815,20 +1933,25 @@ export function convert(draft, appId = '', sceneId = '', metadataPath = '', leni
1815
1933
  meta = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
1816
1934
  if (!meta || typeof meta !== 'object')
1817
1935
  meta = {};
1936
+ let draftEvent = draft.event || {};
1937
+ let draftActions = draft.actions || [];
1818
1938
  meta._scene_id = String(sceneId || '');
1819
1939
  meta._http_response_fields = collectHttpResponseFields(draft.actions || []);
1820
1940
  meta._componentOptions = draft._componentOptions && typeof draft._componentOptions === 'object'
1821
1941
  ? draft._componentOptions
1822
1942
  : {};
1823
1943
  meta._function_registry = Array.isArray(draft._functionRegistry) ? draft._functionRegistry : undefined;
1824
- let draftEvent = draft.event || {};
1825
- let draftActions = draft.actions || [];
1944
+ // 事件上下文来源对所有事件类型都有效;CustomTrigger 没有 workflowId,
1945
+ // 不能等到 workflowId 分支里再设置,否则其字段公式会被误判为 ApprovalData。
1826
1946
  const lenientWarnings = [];
1827
1947
  if ('resolvedPlan' in draft) {
1828
1948
  const rp = draft.resolvedPlan;
1829
1949
  draftEvent = rp.event || {};
1830
1950
  draftActions = rp.actions || [];
1831
1951
  }
1952
+ // 事件上下文来源对所有事件类型都有效;CustomTrigger 没有 workflowId,
1953
+ // 不能等到 workflowId 分支里再设置,否则其字段公式会被误判为 ApprovalData。
1954
+ meta._upstream_component_type = String(draftEvent?.type || 'ApproveTrigger');
1832
1955
  const eventNode = convertNode(draftEvent, true, meta, appId);
1833
1956
  const eventId = eventNode.id;
1834
1957
  const eventName = String(eventNode.attr?.componentName || eventNode.data?.typeName || eventNode.name || '流程触发');
@@ -1873,7 +1996,6 @@ export function convert(draft, appId = '', sceneId = '', metadataPath = '', leni
1873
1996
  eventFormId = workflowId;
1874
1997
  }
1875
1998
  meta._event_form_id = eventFormId;
1876
- meta._upstream_component_type = String(draftEvent?.type || 'ApproveTrigger');
1877
1999
  let wfName = '';
1878
2000
  if (Array.isArray(workflowPath) && workflowPath.length && workflowPath[0] && typeof workflowPath[0] === 'object')
1879
2001
  wfName = String(workflowPath[0].name || workflowPath[0].text || '');