weaver-e10-builder 1.5.13 → 1.5.15

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 (340) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +1 -0
  3. package/dist/commands/actionflow.js.map +1 -1
  4. package/dist/commands/designer-setters.d.ts.map +1 -1
  5. package/dist/commands/designer-setters.js +148 -47
  6. package/dist/commands/designer-setters.js.map +1 -1
  7. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  8. package/dist/commands/form-add-detail-table.js +53 -7
  9. package/dist/commands/form-add-detail-table.js.map +1 -1
  10. package/dist/commands/form-browser-definition.d.ts +14 -0
  11. package/dist/commands/form-browser-definition.d.ts.map +1 -0
  12. package/dist/commands/form-browser-definition.js +493 -0
  13. package/dist/commands/form-browser-definition.js.map +1 -0
  14. package/dist/commands/form-code.d.ts +5 -0
  15. package/dist/commands/form-code.d.ts.map +1 -0
  16. package/dist/commands/form-code.js +276 -0
  17. package/dist/commands/form-code.js.map +1 -0
  18. package/dist/commands/form-engine-linkage.d.ts +3 -0
  19. package/dist/commands/form-engine-linkage.d.ts.map +1 -0
  20. package/dist/commands/form-engine-linkage.js +199 -0
  21. package/dist/commands/form-engine-linkage.js.map +1 -0
  22. package/dist/commands/form-formula.d.ts.map +1 -1
  23. package/dist/commands/form-formula.js +7 -19
  24. package/dist/commands/form-formula.js.map +1 -1
  25. package/dist/commands/form-layout-template-advanced.d.ts +3 -0
  26. package/dist/commands/form-layout-template-advanced.d.ts.map +1 -0
  27. package/dist/commands/form-layout-template-advanced.js +115 -0
  28. package/dist/commands/form-layout-template-advanced.js.map +1 -0
  29. package/dist/commands/form-layout-template-easy.d.ts +3 -0
  30. package/dist/commands/form-layout-template-easy.d.ts.map +1 -0
  31. package/dist/commands/form-layout-template-easy.js +59 -0
  32. package/dist/commands/form-layout-template-easy.js.map +1 -0
  33. package/dist/commands/form-layout.d.ts.map +1 -1
  34. package/dist/commands/form-layout.js +77 -0
  35. package/dist/commands/form-layout.js.map +1 -1
  36. package/dist/commands/form-list-filter.js +1 -1
  37. package/dist/commands/form-list-filter.js.map +1 -1
  38. package/dist/commands/form-list-utils.d.ts +5 -0
  39. package/dist/commands/form-list-utils.d.ts.map +1 -1
  40. package/dist/commands/form-list-utils.js +23 -3
  41. package/dist/commands/form-list-utils.js.map +1 -1
  42. package/dist/commands/form-permission.d.ts.map +1 -1
  43. package/dist/commands/form-permission.js +55 -19
  44. package/dist/commands/form-permission.js.map +1 -1
  45. package/dist/commands/form-physical-table.d.ts.map +1 -1
  46. package/dist/commands/form-physical-table.js +8 -2
  47. package/dist/commands/form-physical-table.js.map +1 -1
  48. package/dist/commands/form.d.ts.map +1 -1
  49. package/dist/commands/form.js +143 -5
  50. package/dist/commands/form.js.map +1 -1
  51. package/dist/commands/menu.d.ts +68 -2
  52. package/dist/commands/menu.d.ts.map +1 -1
  53. package/dist/commands/menu.js +186 -41
  54. package/dist/commands/menu.js.map +1 -1
  55. package/dist/commands/page.d.ts.map +1 -1
  56. package/dist/commands/page.js +29 -6
  57. package/dist/commands/page.js.map +1 -1
  58. package/dist/commands/special.d.ts.map +1 -1
  59. package/dist/commands/special.js +3 -2
  60. package/dist/commands/special.js.map +1 -1
  61. package/dist/commands/wf-form.d.ts.map +1 -1
  62. package/dist/commands/wf-form.js +76 -31
  63. package/dist/commands/wf-form.js.map +1 -1
  64. package/dist/commands/workflow-auth-resp.js +2 -2
  65. package/dist/commands/workflow-auth-resp.js.map +1 -1
  66. package/dist/commands/workflow-base-command.d.ts +4 -0
  67. package/dist/commands/workflow-base-command.d.ts.map +1 -0
  68. package/dist/commands/workflow-base-command.js +6 -0
  69. package/dist/commands/workflow-base-command.js.map +1 -0
  70. package/dist/commands/workflow-base-settings.d.ts +3 -0
  71. package/dist/commands/workflow-base-settings.d.ts.map +1 -0
  72. package/dist/commands/workflow-base-settings.js +76 -0
  73. package/dist/commands/workflow-base-settings.js.map +1 -0
  74. package/dist/commands/workflow-condition.d.ts.map +1 -1
  75. package/dist/commands/workflow-condition.js +59 -450
  76. package/dist/commands/workflow-condition.js.map +1 -1
  77. package/dist/commands/workflow-export.d.ts +9 -0
  78. package/dist/commands/workflow-export.d.ts.map +1 -0
  79. package/dist/commands/workflow-export.js +121 -0
  80. package/dist/commands/workflow-export.js.map +1 -0
  81. package/dist/commands/workflow-function-settings.d.ts +3 -0
  82. package/dist/commands/workflow-function-settings.d.ts.map +1 -0
  83. package/dist/commands/workflow-function-settings.js +47 -0
  84. package/dist/commands/workflow-function-settings.js.map +1 -0
  85. package/dist/commands/workflow-node.d.ts.map +1 -1
  86. package/dist/commands/workflow-node.js +28 -53
  87. package/dist/commands/workflow-node.js.map +1 -1
  88. package/dist/commands/workflow-operator-batch.d.ts +3 -0
  89. package/dist/commands/workflow-operator-batch.d.ts.map +1 -0
  90. package/dist/commands/workflow-operator-batch.js +35 -0
  91. package/dist/commands/workflow-operator-batch.js.map +1 -0
  92. package/dist/commands/workflow-setting.d.ts.map +1 -1
  93. package/dist/commands/workflow-setting.js +137 -406
  94. package/dist/commands/workflow-setting.js.map +1 -1
  95. package/dist/commands/workflow-subprocess.d.ts.map +1 -1
  96. package/dist/commands/workflow-subprocess.js +21 -33
  97. package/dist/commands/workflow-subprocess.js.map +1 -1
  98. package/dist/commands/workflow.d.ts.map +1 -1
  99. package/dist/commands/workflow.js +18 -33
  100. package/dist/commands/workflow.js.map +1 -1
  101. package/dist/index.js +18 -1
  102. package/dist/index.js.map +1 -1
  103. package/dist/services/actionflow/browser_source.d.ts +9 -0
  104. package/dist/services/actionflow/browser_source.d.ts.map +1 -0
  105. package/dist/services/actionflow/browser_source.js +12 -0
  106. package/dist/services/actionflow/browser_source.js.map +1 -0
  107. package/dist/services/actionflow/components/date_trigger.js +1 -1
  108. package/dist/services/actionflow/components/date_trigger.js.map +1 -1
  109. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  110. package/dist/services/actionflow/components/document_actions.js +178 -25
  111. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  112. package/dist/services/actionflow/components/enquiry_form.js +1 -1
  113. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  114. package/dist/services/actionflow/components/logic_flow_set.d.ts.map +1 -1
  115. package/dist/services/actionflow/components/logic_flow_set.js +80 -8
  116. package/dist/services/actionflow/components/logic_flow_set.js.map +1 -1
  117. package/dist/services/actionflow/components/meeting_create.d.ts.map +1 -1
  118. package/dist/services/actionflow/components/meeting_create.js +1 -0
  119. package/dist/services/actionflow/components/meeting_create.js.map +1 -1
  120. package/dist/services/actionflow/components/schedule_create.d.ts.map +1 -1
  121. package/dist/services/actionflow/components/schedule_create.js +2 -0
  122. package/dist/services/actionflow/components/schedule_create.js.map +1 -1
  123. package/dist/services/actionflow/components/time_batch_trigger.js +1 -1
  124. package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -1
  125. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  126. package/dist/services/actionflow/components/workflow_actions.js +6 -2
  127. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  128. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  129. package/dist/services/actionflow/context_preflight.js +103 -6
  130. package/dist/services/actionflow/context_preflight.js.map +1 -1
  131. package/dist/services/actionflow/form_source.d.ts +2 -0
  132. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  133. package/dist/services/actionflow/form_source.js +8 -0
  134. package/dist/services/actionflow/form_source.js.map +1 -1
  135. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  136. package/dist/services/actionflow/formula_service.js +35 -19
  137. package/dist/services/actionflow/formula_service.js.map +1 -1
  138. package/dist/services/actionflow/logicflow_source.d.ts +5 -0
  139. package/dist/services/actionflow/logicflow_source.d.ts.map +1 -0
  140. package/dist/services/actionflow/logicflow_source.js +15 -0
  141. package/dist/services/actionflow/logicflow_source.js.map +1 -0
  142. package/dist/services/actionflow/preflight_service.d.ts +15 -0
  143. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  144. package/dist/services/actionflow/preflight_service.js +558 -26
  145. package/dist/services/actionflow/preflight_service.js.map +1 -1
  146. package/dist/services/actionflow/runtime_metadata.d.ts +8 -0
  147. package/dist/services/actionflow/runtime_metadata.d.ts.map +1 -1
  148. package/dist/services/actionflow/runtime_metadata.js +25 -0
  149. package/dist/services/actionflow/runtime_metadata.js.map +1 -1
  150. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  151. package/dist/services/actionflow/workflow_compiler.js +50 -10
  152. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  153. package/dist/services/actionflow/workflow_source.d.ts +2 -0
  154. package/dist/services/actionflow/workflow_source.d.ts.map +1 -1
  155. package/dist/services/actionflow/workflow_source.js +7 -0
  156. package/dist/services/actionflow/workflow_source.js.map +1 -1
  157. package/dist/services/auth-resp-condition.d.ts +7 -3
  158. package/dist/services/auth-resp-condition.d.ts.map +1 -1
  159. package/dist/services/auth-resp-condition.js +58 -63
  160. package/dist/services/auth-resp-condition.js.map +1 -1
  161. package/dist/services/browser.d.ts +5 -0
  162. package/dist/services/browser.d.ts.map +1 -1
  163. package/dist/services/browser.js +16 -4
  164. package/dist/services/browser.js.map +1 -1
  165. package/dist/services/condition-rules.d.ts +2 -30
  166. package/dist/services/condition-rules.d.ts.map +1 -1
  167. package/dist/services/condition-rules.js +3 -219
  168. package/dist/services/condition-rules.js.map +1 -1
  169. package/dist/services/designer-dataset.d.ts +45 -0
  170. package/dist/services/designer-dataset.d.ts.map +1 -0
  171. package/dist/services/designer-dataset.js +156 -0
  172. package/dist/services/designer-dataset.js.map +1 -0
  173. package/dist/services/form-association.d.ts +7 -0
  174. package/dist/services/form-association.d.ts.map +1 -1
  175. package/dist/services/form-association.js +22 -1
  176. package/dist/services/form-association.js.map +1 -1
  177. package/dist/services/form-code.d.ts +53 -0
  178. package/dist/services/form-code.d.ts.map +1 -0
  179. package/dist/services/form-code.js +370 -0
  180. package/dist/services/form-code.js.map +1 -0
  181. package/dist/services/form-create.d.ts +20 -0
  182. package/dist/services/form-create.d.ts.map +1 -1
  183. package/dist/services/form-create.js +73 -1
  184. package/dist/services/form-create.js.map +1 -1
  185. package/dist/services/form-field-build.d.ts +1 -1
  186. package/dist/services/form-field-build.d.ts.map +1 -1
  187. package/dist/services/form-field-build.js +20 -1
  188. package/dist/services/form-field-build.js.map +1 -1
  189. package/dist/services/form-field-drop.d.ts +2 -0
  190. package/dist/services/form-field-drop.d.ts.map +1 -1
  191. package/dist/services/form-field-drop.js +2 -0
  192. package/dist/services/form-field-drop.js.map +1 -1
  193. package/dist/services/form-layout-detail-insert.d.ts +58 -0
  194. package/dist/services/form-layout-detail-insert.d.ts.map +1 -0
  195. package/dist/services/form-layout-detail-insert.js +293 -0
  196. package/dist/services/form-layout-detail-insert.js.map +1 -0
  197. package/dist/services/form-layout-insert.d.ts.map +1 -1
  198. package/dist/services/form-layout-insert.js +34 -2
  199. package/dist/services/form-layout-insert.js.map +1 -1
  200. package/dist/services/form-layout-source/compile.d.ts.map +1 -1
  201. package/dist/services/form-layout-source/compile.js +11 -4
  202. package/dist/services/form-layout-source/compile.js.map +1 -1
  203. package/dist/services/form-layout-template-advanced.d.ts +330 -0
  204. package/dist/services/form-layout-template-advanced.d.ts.map +1 -0
  205. package/dist/services/form-layout-template-advanced.js +1437 -0
  206. package/dist/services/form-layout-template-advanced.js.map +1 -0
  207. package/dist/services/form-layout-template-easy.d.ts +34 -0
  208. package/dist/services/form-layout-template-easy.d.ts.map +1 -0
  209. package/dist/services/form-layout-template-easy.js +159 -0
  210. package/dist/services/form-layout-template-easy.js.map +1 -0
  211. package/dist/services/form-layout-template-flow.d.ts +23 -0
  212. package/dist/services/form-layout-template-flow.d.ts.map +1 -0
  213. package/dist/services/form-layout-template-flow.js +99 -0
  214. package/dist/services/form-layout-template-flow.js.map +1 -0
  215. package/dist/services/form-permission-archive.d.ts +23 -1
  216. package/dist/services/form-permission-archive.d.ts.map +1 -1
  217. package/dist/services/form-permission-archive.js +54 -2
  218. package/dist/services/form-permission-archive.js.map +1 -1
  219. package/dist/services/form-physical-table.d.ts +10 -0
  220. package/dist/services/form-physical-table.d.ts.map +1 -1
  221. package/dist/services/form-physical-table.js +20 -0
  222. package/dist/services/form-physical-table.js.map +1 -1
  223. package/dist/services/form-view-linkage-functions.d.ts +19 -0
  224. package/dist/services/form-view-linkage-functions.d.ts.map +1 -0
  225. package/dist/services/form-view-linkage-functions.js +90 -0
  226. package/dist/services/form-view-linkage-functions.js.map +1 -0
  227. package/dist/services/matrix-condition.d.ts +32 -1
  228. package/dist/services/matrix-condition.d.ts.map +1 -1
  229. package/dist/services/matrix-condition.js +169 -6
  230. package/dist/services/matrix-condition.js.map +1 -1
  231. package/dist/services/menu-catalog.d.ts +24 -1
  232. package/dist/services/menu-catalog.d.ts.map +1 -1
  233. package/dist/services/menu-catalog.js +49 -2
  234. package/dist/services/menu-catalog.js.map +1 -1
  235. package/dist/services/workflow-base-settings.d.ts +117 -0
  236. package/dist/services/workflow-base-settings.d.ts.map +1 -0
  237. package/dist/services/workflow-base-settings.js +504 -0
  238. package/dist/services/workflow-base-settings.js.map +1 -0
  239. package/dist/services/workflow-condition-core.d.ts +48 -0
  240. package/dist/services/workflow-condition-core.d.ts.map +1 -0
  241. package/dist/services/workflow-condition-core.js +316 -0
  242. package/dist/services/workflow-condition-core.js.map +1 -0
  243. package/dist/services/workflow-context.d.ts +10 -0
  244. package/dist/services/workflow-context.d.ts.map +1 -0
  245. package/dist/services/workflow-context.js +15 -0
  246. package/dist/services/workflow-context.js.map +1 -0
  247. package/dist/services/workflow-export.d.ts +80 -0
  248. package/dist/services/workflow-export.d.ts.map +1 -0
  249. package/dist/services/workflow-export.js +150 -0
  250. package/dist/services/workflow-export.js.map +1 -0
  251. package/dist/services/workflow-field-permission-route.d.ts +75 -0
  252. package/dist/services/workflow-field-permission-route.d.ts.map +1 -0
  253. package/dist/services/workflow-field-permission-route.js +52 -0
  254. package/dist/services/workflow-field-permission-route.js.map +1 -0
  255. package/dist/services/workflow-field-permission.d.ts +18 -0
  256. package/dist/services/workflow-field-permission.d.ts.map +1 -0
  257. package/dist/services/workflow-field-permission.js +40 -0
  258. package/dist/services/workflow-field-permission.js.map +1 -0
  259. package/dist/services/workflow-function-settings.d.ts +31 -0
  260. package/dist/services/workflow-function-settings.d.ts.map +1 -0
  261. package/dist/services/workflow-function-settings.js +191 -0
  262. package/dist/services/workflow-function-settings.js.map +1 -0
  263. package/dist/services/workflow-node-layout.d.ts +11 -10
  264. package/dist/services/workflow-node-layout.d.ts.map +1 -1
  265. package/dist/services/workflow-node-layout.js +24 -62
  266. package/dist/services/workflow-node-layout.js.map +1 -1
  267. package/dist/services/workflow-operator-batch-condition.d.ts +23 -0
  268. package/dist/services/workflow-operator-batch-condition.d.ts.map +1 -0
  269. package/dist/services/workflow-operator-batch-condition.js +56 -0
  270. package/dist/services/workflow-operator-batch-condition.js.map +1 -0
  271. package/dist/services/workflow-sign-file-settings.d.ts +16 -0
  272. package/dist/services/workflow-sign-file-settings.d.ts.map +1 -0
  273. package/dist/services/workflow-sign-file-settings.js +80 -0
  274. package/dist/services/workflow-sign-file-settings.js.map +1 -0
  275. package/dist/services/workflow-submit-confirm.d.ts +14 -0
  276. package/dist/services/workflow-submit-confirm.d.ts.map +1 -0
  277. package/dist/services/workflow-submit-confirm.js +29 -0
  278. package/dist/services/workflow-submit-confirm.js.map +1 -0
  279. package/dist/services/workflow-tab-config.d.ts +3 -3
  280. package/dist/services/workflow-tab-config.d.ts.map +1 -1
  281. package/dist/services/workflow-tab-config.js +14 -12
  282. package/dist/services/workflow-tab-config.js.map +1 -1
  283. package/dist/services/workflow-tabs-editor.d.ts +28 -0
  284. package/dist/services/workflow-tabs-editor.d.ts.map +1 -0
  285. package/dist/services/workflow-tabs-editor.js +130 -0
  286. package/dist/services/workflow-tabs-editor.js.map +1 -0
  287. package/package.json +1 -1
  288. package/skill-docs/SKILL.md +155 -154
  289. package/skill-docs/_catalog.md +106 -97
  290. package/skill-docs/actionflows/references/components/document/GetDocumentInfo.md +17 -17
  291. package/skill-docs/actionflows/references/components/logic/LogicFlowSet.md +23 -17
  292. package/skill-docs/assets/form-template/style-templates-advanced-base-example.json +1420 -0
  293. package/skill-docs/assets/form-template/style-templates-advanced-base.css +33 -0
  294. package/skill-docs/assets/form-template/style-templates-advanced-blue-crystal-example.json +1094 -0
  295. package/skill-docs/assets/form-template/style-templates-advanced-document-example.json +1251 -0
  296. package/skill-docs/assets/form-template/style-templates-advanced-grid-example.json +39 -0
  297. package/skill-docs/assets/form-template/style-templates-advanced-page-example.json +38 -0
  298. package/skill-docs/assets/form-template/style-templates-advanced-placements-example.json +30 -0
  299. package/skill-docs/assets/form-template/style-templates-advanced-standard-example.json +53 -0
  300. package/skill-docs/assets/form-template/style-templates-advanced-structure-example.json +25 -0
  301. package/skill-docs/assets/form-template/style-templates-advanced-table-example.json +1420 -0
  302. package/skill-docs/references/code-block/guide-code-block.md +141 -0
  303. package/skill-docs/references/code-block/guide-layout-css.md +107 -0
  304. package/skill-docs/references/code-block/ref-controls.md +60 -0
  305. package/skill-docs/references/code-block/ref-coverage.md +32 -0
  306. package/skill-docs/references/code-block/ref-details.md +57 -0
  307. package/skill-docs/references/code-block/ref-events-validation.md +42 -0
  308. package/skill-docs/references/code-block/ref-foundations-fields.md +56 -0
  309. package/skill-docs/references/code-block/ref-recipes.md +164 -0
  310. package/skill-docs/references/code-block/ref-troubleshooting.md +49 -0
  311. package/skill-docs/references/code-block/ref-ui-global.md +47 -0
  312. package/skill-docs/references/common/guide-plan-template.md +168 -167
  313. package/skill-docs/references/common/map.md +2 -1
  314. package/skill-docs/references/common/ref-cli-commands.md +67 -22
  315. package/skill-docs/references/ebuilder-designer/guide-designer-factory.md +8 -4
  316. package/skill-docs/references/form/form-template/style-templates-advanced-css-guide.md +167 -0
  317. package/skill-docs/references/form/form-template/style-templates-advanced.md +315 -0
  318. package/skill-docs/references/form/form-template/style-templates-easy.md +55 -0
  319. package/skill-docs/references/form/form-template/style-templates-flow.md +27 -0
  320. package/skill-docs/references/form/form-template/style-templates.md +29 -0
  321. package/skill-docs/references/form/guide-browser-definition.md +148 -0
  322. package/skill-docs/references/form/guide-create-form.md +258 -250
  323. package/skill-docs/references/form/guide-form-archive-permission.md +29 -6
  324. package/skill-docs/references/form/guide-form-formula-functions.md +354 -354
  325. package/skill-docs/references/form/guide-form-layout-incremental.md +28 -0
  326. package/skill-docs/references/form/guide-form-layout-planning.md +11 -0
  327. package/skill-docs/references/form/guide-form-layout-source.md +4 -0
  328. package/skill-docs/references/form/guide-form-linkage.md +295 -259
  329. package/skill-docs/references/form/guide-form-physical-table.md +2 -0
  330. package/skill-docs/references/form/guide-form-view.md +3 -0
  331. package/skill-docs/references/form/ref-form-fields.md +301 -293
  332. package/skill-docs/references/form/ref-list-filter-date-params.md +83 -0
  333. package/skill-docs/references/menu/system-menus.md +12 -0
  334. package/skill-docs/references/workflow/condition-core-contract.md +63 -0
  335. package/skill-docs/references/workflow/guide-base-auth-share-remind.md +126 -0
  336. package/skill-docs/references/workflow/guide-function-settings.md +55 -0
  337. package/skill-docs/references/workflow/guide-workflow-condition.md +476 -447
  338. package/skill-docs/references/workflow/guide-workflow-node-layout.md +6 -0
  339. package/skill-docs/references/workflow/guide-workflow.md +630 -527
  340. package/skill-docs/references/form/style-templates.md +0 -97
@@ -0,0 +1,316 @@
1
+ import { SYSTEM_FIELDS, OP_MAP, FAMILY_OPS } from './condition-rules.js';
2
+ const has = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
3
+ const emptyOps = new Set(['为空', '不为空', '是', '否']);
4
+ function layout(f) {
5
+ try {
6
+ return typeof f.layoutDetail === 'string' ? JSON.parse(f.layoutDetail) : f.layoutDetail || {};
7
+ }
8
+ catch {
9
+ throw Error(`字段 ${f.name || f.id} 的 layoutDetail 无效`);
10
+ }
11
+ }
12
+ export function conditionFamily(f) {
13
+ const t = String(f.fieldType || f.componentKey || layout(f).componentKey || '');
14
+ if (['DateComponent', 'DateTimeComponent', 'DateTimeSecondComponent', 'DatePicker', 'DateTimePicker', 'Date'].includes(t))
15
+ return 'Date';
16
+ if (['NumberComponent', 'Money', 'Float', 'Integer', 'Number'].includes(t))
17
+ return 'Number';
18
+ if (['Switch', 'Bool'].includes(t))
19
+ return 'Bool';
20
+ if (['Employee', 'Department', 'Subcompany', 'SubCompany', 'Role', 'Browser', 'BrowserButton', 'RelateBrowser', 'Select', 'SelectMultiple', 'RadioBox', 'CheckBox', 'Checkbox', 'PositionComponent', 'Location', 'Ebuilder', 'Eb', 'Flow', 'Workflow'].includes(t))
21
+ return 'Browser';
22
+ if (['Text', 'TextArea', 'TextComponent', 'String', 'RichText', 'Email', 'Phone', 'Mobile', 'IDCard', 'SerialNumber'].includes(t))
23
+ return 'String';
24
+ throw Error(`尚不支持条件字段类型 ${t}(${f.name || f.id}),停止保存`);
25
+ }
26
+ function keys(o, allowed) {
27
+ for (const k of Object.keys(o))
28
+ if (!allowed.includes(k))
29
+ throw Error(`未知条件属性 ${k}`);
30
+ }
31
+ function parseText(s) {
32
+ s = s.trim();
33
+ const pieces = s.split('|');
34
+ if (pieces.length > 1) {
35
+ if (pieces.some(p => !p.trim()))
36
+ throw Error('OR 子组不能包含空规则');
37
+ return { relation: 'OR', rules: pieces.map(parseText) };
38
+ }
39
+ const p = s.split(':');
40
+ let detail;
41
+ if (['任一', '所有'].includes(p.at(-1)))
42
+ detail = p.pop();
43
+ const [source, field, op] = p;
44
+ if (!['form', 'system', 'variable'].includes(source) || !field || !OP_MAP[op])
45
+ throw Error(`规则格式或操作无效: ${s}`);
46
+ const unary = emptyOps.has(op), variable = p[3] === 'field', range = op === '范围';
47
+ const count = unary ? 3 : range ? (variable ? 6 : 5) : (variable ? 5 : 4);
48
+ if (p.length !== count || (!unary && p.slice(variable ? 4 : 3).some(x => x === '')))
49
+ throw Error(`规则参数数量或值无效: ${s};多条件请分成多条规则,含冒号的值请用结构化 JSON`);
50
+ return { source: source, field, op, ...(detail ? { detail } : {}), ...(!unary ? { value: variable ? { field: p[4] } : p[3] } : {}), ...(range ? { upper: variable ? { field: p[5] } : p[4] } : {}) };
51
+ }
52
+ export function parseConditionInput(input, relation = 'AND') {
53
+ if (!['AND', 'OR'].includes(relation))
54
+ throw Error('relation 必须为 AND/OR');
55
+ if (typeof input === 'string')
56
+ return parseText(input);
57
+ if (Array.isArray(input)) {
58
+ if (!input.length)
59
+ throw Error('至少需要一条条件');
60
+ return { relation: relation, rules: input.map(x => parseConditionInput(x)) };
61
+ }
62
+ if (!input || typeof input !== 'object')
63
+ throw Error('条件必须是规则字符串或结构化对象');
64
+ if (has(input, 'rules')) {
65
+ keys(input, ['relation', 'rules']);
66
+ if (!['AND', 'OR'].includes(input.relation) || !Array.isArray(input.rules) || !input.rules.length)
67
+ throw Error('组合条件需 relation=AND|OR 和非空 rules');
68
+ return { relation: input.relation, rules: input.rules.map((r) => parseConditionInput(r)) };
69
+ }
70
+ keys(input, ['source', 'field', 'op', 'value', 'upper', 'detail']);
71
+ const r = { ...input, source: input.source || 'form' };
72
+ if (!['form', 'system', 'variable'].includes(r.source) || typeof r.field !== 'string' || !r.field || !OP_MAP[r.op])
73
+ throw Error('条件来源、字段或操作无效');
74
+ if (r.detail !== undefined && !['任一', '所有'].includes(r.detail))
75
+ throw Error('detail 必须为 任一/所有');
76
+ if (emptyOps.has(r.op)) {
77
+ if (has(r, 'value') || has(r, 'upper'))
78
+ throw Error(`${r.op} 不接受值`);
79
+ }
80
+ else if (!has(r, 'value') || r.value === null || r.value === undefined)
81
+ throw Error(`${r.op} 缺少 value`);
82
+ if (r.op === '范围') {
83
+ if (!has(r, 'upper') || r.upper === null || r.upper === undefined)
84
+ throw Error('范围缺少 upper');
85
+ }
86
+ else if (has(r, 'upper'))
87
+ throw Error('只有范围操作接受 upper');
88
+ return r;
89
+ }
90
+ export async function compileWorkflowCondition(client, base, ctx, input, relation = 'AND') {
91
+ const tree = parseConditionInput(input, relation);
92
+ const values = new Map();
93
+ let fields = [...(ctx.fields || [])];
94
+ let loaded = ctx.fields !== undefined;
95
+ const fieldKey = (f) => `${f.id}:${!!f.total}:${!!f.valueCount}:${!!f.variable}`;
96
+ async function post(path, body) {
97
+ const r = await client.post(base + path, body);
98
+ if (r?.code !== 200 || r.status === false || r.fail === true || !r.data)
99
+ throw Error(`条件查询失败 ${path}: ${r?.msg || '无有效数据'}`);
100
+ return r.data;
101
+ }
102
+ async function browseFields(searchValue = '') {
103
+ const all = [];
104
+ let current = 1;
105
+ while (true) {
106
+ const d = await post('/api/workflow/pathdef/common/browser/complete/conditionFieldBrowser', { browserMultiple: false, sourceId: ctx.sourceId, tab: 'formField', source: ctx.source, workflowId: ctx.workflowId, newly: 1, ...ctx.fieldParams, pageSize: 200, current, searchValue });
107
+ if (!Array.isArray(d.data))
108
+ throw Error('条件字段列表格式异常');
109
+ if (current > 1 && d.data.length && d.data.every((f) => all.some(x => fieldKey(x) === fieldKey(f))))
110
+ throw Error('条件字段分页没有前进');
111
+ all.push(...d.data);
112
+ if (d.total !== undefined ? all.length >= Number(d.total) : d.data.length < 200)
113
+ break;
114
+ if (!d.data.length || current++ >= 100)
115
+ throw Error('条件字段列表不完整');
116
+ }
117
+ const byId = new Map(fields.map(f => [fieldKey(f), f]));
118
+ for (const f of all)
119
+ byId.set(fieldKey(f), f);
120
+ fields = [...byId.values()];
121
+ }
122
+ async function resolveField(ref) {
123
+ if (!loaded) {
124
+ await browseFields();
125
+ loaded = true;
126
+ }
127
+ const match = () => {
128
+ const exact = fields.filter(f => String(f.id) === ref && !f.total && !f.valueCount);
129
+ if (exact.length)
130
+ return exact;
131
+ return fields.filter(f => { const ld = layout(f); return f.name === ref || (!f.total && !f.valueCount && (ld.dataKey === ref || ld.columnName === ref)) || `${f.detailName}.${f.name}` === ref; });
132
+ };
133
+ let hits = match();
134
+ if (!hits.length && ctx.fields === undefined) {
135
+ await browseFields(ref);
136
+ hits = match();
137
+ }
138
+ if (hits.length !== 1)
139
+ throw Error(`字段 ${ref} 匹配 ${hits.length} 项,请使用准确字段 ID`);
140
+ return hits[0];
141
+ }
142
+ function browserKind(r, f) {
143
+ const sys = { '发起人': 'resource', '当前操作人': 'resource', '发起人部门': 'department', '发起人分部': 'subcompany', '发起人岗位': 'position', '发起人职级': 'joblevel', '发起人直接上级': 'resource', '当前操作人直接上级': 'resource' };
144
+ if (r.source === 'system')
145
+ return sys[r.field];
146
+ const t = f.fieldType || layout(f).componentKey;
147
+ return { Employee: 'resource', Department: 'department', Subcompany: 'subcompany', SubCompany: 'subcompany', Role: 'role', PositionComponent: 'position' }[t];
148
+ }
149
+ async function browserValue(r, f, value) {
150
+ const kind = browserKind(r, f), opts = layout(f).options || f.options || [];
151
+ const list = Array.isArray(value) ? value : typeof value === 'string' ? value.split(',').map(v => v.trim()) : [value];
152
+ if (!list.length)
153
+ throw Error('浏览值不能为空');
154
+ const out = [];
155
+ for (const v of list) {
156
+ if (v && typeof v === 'object') {
157
+ keys(v, ['id', 'content', 'name']);
158
+ if (!v.id || !(v.content || v.name))
159
+ throw Error('浏览对象需 id 和 content/name');
160
+ out.push({ ...v, content: v.content || v.name });
161
+ continue;
162
+ }
163
+ const ref = String(v);
164
+ if (!ref)
165
+ throw Error('浏览值不能为空');
166
+ if (r.source === 'system' && r.field === '紧急程度') {
167
+ const id = { '普通': '1', '紧急': '2', '1': '1', '2': '2' }[ref];
168
+ if (!id)
169
+ throw Error('紧急程度只支持 普通/紧急');
170
+ out.push({ id, content: id === '1' ? '普通' : '紧急' });
171
+ continue;
172
+ }
173
+ if (opts.length) {
174
+ const hits = opts.filter((o) => [o.name, o.content, o.id, o.selectionId, o.valueKey].some(x => x !== undefined && String(x) === ref));
175
+ if (hits.length !== 1)
176
+ throw Error(`选项 ${ref} 匹配 ${hits.length} 项`);
177
+ const o = hits[0];
178
+ out.push({ id: o.valueKey ?? o.selectionId ?? o.id, content: o.name ?? o.content });
179
+ continue;
180
+ }
181
+ if (!kind)
182
+ throw Error(`字段 ${r.field} 的浏览值尚不能按名称解析,请传 {id,content} 对象`);
183
+ const cacheKey = `${kind}:${ref}`;
184
+ let hit = values.get(cacheKey);
185
+ if (!hit) {
186
+ // ID lookup uses the browser's destData contract; complete only searches names.
187
+ const byId = /^\d+$/.test(ref);
188
+ const d = byId
189
+ ? await post(`/api/workflow/pathdef/common/browser/destData/${kind}`, { selectIds: ref, browserMultiple: true, virtualType: 'All' })
190
+ : await post(`/api/workflow/pathdef/common/browser/complete/${kind}`, { browserMultiple: true, virtualType: 'All', newly: 0, searchValue: ref, pageSize: 200, current: 1 });
191
+ const rows = Array.isArray(d) ? d : d.data;
192
+ if (!Array.isArray(rows))
193
+ throw Error('浏览查询列表格式异常');
194
+ if (d.total !== undefined && Number(d.total) > rows.length)
195
+ throw Error('浏览查询结果不完整,请使用准确 ID');
196
+ const flatten = (xs) => xs.flatMap(x => [x, ...flatten(x.children || [])]);
197
+ const hits = flatten(rows).filter(x => byId ? String(x.id) === ref : (x.name === ref || x.content === ref || x.number === ref));
198
+ if (hits.length !== 1)
199
+ throw Error(`${kind} ${ref} 精确匹配 ${hits.length} 项,请指定准确对象`);
200
+ hit = hits[0];
201
+ if (hit.disabledCheck || hit.disabled || hit.isDelete)
202
+ throw Error(`${ref} 不可选择`);
203
+ values.set(cacheKey, hit);
204
+ }
205
+ out.push({ ...hit, content: hit.content || hit.name });
206
+ }
207
+ return out;
208
+ }
209
+ async function leaf(r) {
210
+ const sf = r.source === 'system' ? SYSTEM_FIELDS[r.field] : undefined;
211
+ if (r.source === 'system' && !sf)
212
+ throw Error(`未知系统字段 ${r.field}`);
213
+ const f = sf ? {} : await resolveField(r.field), family = sf?.family || conditionFamily(f);
214
+ if (['包含子部门', '不包含子部门'].includes(r.op) && !(r.source === 'system' ? r.field === '发起人部门' : (f.fieldType || layout(f).componentKey) === 'Department'))
215
+ throw Error('包含子部门/不包含子部门仅适用于部门字段');
216
+ if (!FAMILY_OPS[family]?.includes(r.op))
217
+ throw Error(`${r.field} (${family}) 不支持 ${r.op}`);
218
+ const detail = !f.total && (f.detail !== undefined ? f.detail === true : !!(f.detailName && !['主表', '变量'].includes(f.detailName)));
219
+ if (r.detail && !detail)
220
+ throw Error(`${r.field} 不是明细字段,不能指定明细量词`);
221
+ const prefix = sf && ['紧急程度', '密级'].includes(r.field) ? 'SysBrowser' : family;
222
+ const o = { selectType: sf ? '3' : '4', elementValue1Id: '', elementValue2Id: '', expressionBaseId: '', dataValueId: '', ...(sf ? { systemVariable: sf.id } : { formField: [{ ...f }] }), ...(detail ? { detailOption: r.detail === '所有' ? '2' : '1' } : {}) };
223
+ // Switch is a selectable on/off value, not the platform Bool operator family.
224
+ // Preserve the CLI's 是/否 grammar, but encode the real Switch equality contract.
225
+ if (f.fieldType === 'Switch' || layout(f).componentKey === 'Switch') {
226
+ o.SwitchCompareOptionLeft = '5';
227
+ o.SwitchValueOptionLeft = '1';
228
+ o.SwitchTextValueLeft1 = r.op === '是' ? '1' : '0';
229
+ return o;
230
+ }
231
+ async function value(v, side) {
232
+ if (v && typeof v === 'object' && !Array.isArray(v) && has(v, 'field')) {
233
+ keys(v, ['field']);
234
+ const ref = await resolveField(String(v.field));
235
+ if (conditionFamily(ref) !== family)
236
+ throw Error('比较字段类型不兼容');
237
+ o[`${prefix}ValueOption${side}`] = '2';
238
+ o[`${prefix}TextValue${side}2`] = [ref];
239
+ if (family === 'Date')
240
+ o.typeHrm = '11';
241
+ return;
242
+ }
243
+ o[`${prefix}ValueOption${side}`] = '1';
244
+ if (family === 'Number') {
245
+ if ((typeof v !== 'number' && typeof v !== 'string') || String(v).trim() === '' || !Number.isFinite(Number(v)))
246
+ throw Error(`非法数值 ${String(v)}`);
247
+ o[`${prefix}TextValue${side}1`] = Number(v);
248
+ }
249
+ else if (family === 'Browser') {
250
+ o[`${prefix}TextValue${side}1`] = await browserValue(r, f, v);
251
+ o.containType = '1';
252
+ if (browserKind(r, f) === 'resource')
253
+ o.typeHrm = '1';
254
+ }
255
+ else {
256
+ if (typeof v !== 'string')
257
+ throw Error(`${family} 值必须为字符串`);
258
+ if (family === 'Date') {
259
+ const parts = /^(\d{4})-(\d{2})-(\d{2})(?:[ T](\d{2}):(\d{2})(?::(\d{2}))?)?$/.exec(v);
260
+ if (!parts || !Number.isFinite(Date.parse(v)))
261
+ throw Error(`非法日期 ${v}`);
262
+ const [, y, m, d, h, minute, second] = parts;
263
+ const day = new Date(`${y}-${m}-${d}T00:00:00Z`);
264
+ if (day.getUTCFullYear() !== Number(y) || day.getUTCMonth() + 1 !== Number(m) || day.getUTCDate() !== Number(d) || Number(h || 0) > 23 || Number(minute || 0) > 59 || Number(second || 0) > 59)
265
+ throw Error(`非法日期 ${v}`);
266
+ }
267
+ o[`${prefix}TextValue${side}1`] = v;
268
+ }
269
+ }
270
+ if (r.op === '范围') {
271
+ o[`${prefix}CompareOptionLeft`] = '1';
272
+ o[`${prefix}CompareOptionRight`] = '3';
273
+ await value(r.value, 'Left');
274
+ await value(r.upper, 'Right');
275
+ if (family === 'Number' && typeof r.value !== 'object' && typeof r.upper !== 'object' && Number(r.value) >= Number(r.upper))
276
+ throw Error('范围下界必须小于上界');
277
+ if (family === 'Date' && typeof r.value === 'string' && typeof r.upper === 'string' && Date.parse(r.value) >= Date.parse(r.upper))
278
+ throw Error('日期范围下界必须早于上界');
279
+ }
280
+ else {
281
+ o[`${prefix}CompareOptionLeft`] = OP_MAP[r.op].code;
282
+ if (!emptyOps.has(r.op))
283
+ await value(r.value, 'Left');
284
+ }
285
+ return o;
286
+ }
287
+ async function build(t) {
288
+ if ('rules' in t) {
289
+ const childrens = [];
290
+ for (const r of t.rules)
291
+ childrens.push(await build(r));
292
+ return { relation: t.relation === 'AND' ? 1 : 2, childrens };
293
+ }
294
+ return leaf(t);
295
+ }
296
+ const built = await build(tree);
297
+ return { relation: 'rules' in tree ? built.relation : 1, childrens: 'rules' in tree ? built.childrens : [built] };
298
+ }
299
+ /** Allocate a fresh condition set, then persist. Business adapters bind only after success.
300
+ * Never delete the previously bound condition before the replacement has been saved.
301
+ * sourceId=-1 is the platform's new/unbound context; discovery still uses the real business ID.
302
+ */
303
+ export async function persistWorkflowCondition(client, base, ctx, compiled) {
304
+ const common = { ...ctx.extra, workflowId: ctx.workflowId, source: ctx.source, sourceId: '-1', conditionName: ctx.conditionName, needFormfield: true, readOnly: false };
305
+ const result = await client.post(base + '/api/workflow/pathdef/rule/condition/getConditionSet', { ...common, templateTokenId: String(Date.now()) });
306
+ if (result?.code !== 200 || result.status === false || result.data?.addRight === false || !result.data?.mapBaseId)
307
+ throw Error(`无法创建条件集合: ${result?.msg || '缺少 mapBaseId'}`);
308
+ const relation = ctx.inheritRelation ? Number(result.data.relation ?? compiled.relation) : compiled.relation;
309
+ if (![1, 2].includes(relation))
310
+ throw Error('平台返回无效条件关系');
311
+ const response = await client.post(base + '/api/workflow/pathdef/rule/condition/saveCondition', { ...result.data, ...common, mapBaseId: result.data.mapBaseId, isEdit: false, isFromRuleListPage: true, ...compiled, relation, allRuleIsEmpty: false });
312
+ if (response?.code !== 200 || !response.status || !response.data?.result || !response.data?.conditionKey)
313
+ throw Error(`保存条件失败: ${response?.data?.msg || response?.msg || '缺少 conditionKey'}`);
314
+ return { conditionKey: String(response.data.conditionKey), conditionCn: response.data.conditionCn || '', conditionId: response.data.conditionId, mapId: response.data.mapId };
315
+ }
316
+ //# sourceMappingURL=workflow-condition-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-condition-core.js","sourceRoot":"","sources":["../../src/services/workflow-condition-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type Client } from './workflow-function-management.js';
2
+ export type WorkflowFormKind = 'workflow' | 'ebuilder';
3
+ /** Existing workflows are classified exclusively by frame metadata, never by probing form endpoints. */
4
+ export declare function getWorkflowContext(client: Pick<Client, 'get'>, base: string, workflowId: string, expectedFormId?: string): Promise<{
5
+ workflowId: string;
6
+ formId: string;
7
+ relateType: "wea_form" | "wea_ebuilder";
8
+ kind: WorkflowFormKind;
9
+ }>;
10
+ //# sourceMappingURL=workflow-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-context.d.ts","sourceRoot":"","sources":["../../src/services/workflow-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAI,KAAK,MAAM,EAAC,MAAM,mCAAmC,CAAC;AACjE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,UAAU,CAAC;AAEvD,wGAAwG;AACxG,wBAAsB,kBAAkB,CAAC,MAAM,EAAC,IAAI,CAAC,MAAM,EAAC,KAAK,CAAC,EAAC,IAAI,EAAC,MAAM,EAAC,UAAU,EAAC,MAAM,EAAC,cAAc,CAAC,EAAC,MAAM;;;gBAOjE,UAAU,GAAC,cAAc;UAA+D,gBAAgB;GAC7J"}
@@ -0,0 +1,15 @@
1
+ import { id } from './workflow-function-management.js';
2
+ /** Existing workflows are classified exclusively by frame metadata, never by probing form endpoints. */
3
+ export async function getWorkflowContext(client, base, workflowId, expectedFormId) {
4
+ const r = await client.get(`${base}/api/bs/workflow/pathdef/frame/getPathFrameInfo?workflowId=${id(workflowId)}`);
5
+ if (r?.code !== 200 || r.status === false || r.fail === true || !r.data || r.data.fail === true)
6
+ throw Error('getPathFrameInfo 读取失败,停止操作');
7
+ const d = r.data;
8
+ if (!['wea_form', 'wea_ebuilder'].includes(d.relateType))
9
+ throw Error(`不支持或缺少 relateType: ${String(d.relateType)},停止操作`);
10
+ const formId = id(d.formId, 'frame.formId');
11
+ if (expectedFormId !== undefined && formId !== String(expectedFormId))
12
+ throw Error('getPathFrameInfo 的 formId 与目标表单不一致,停止操作');
13
+ return { workflowId, formId, relateType: d.relateType, kind: (d.relateType === 'wea_ebuilder' ? 'ebuilder' : 'workflow') };
14
+ }
15
+ //# sourceMappingURL=workflow-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-context.js","sourceRoot":"","sources":["../../src/services/workflow-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAa,MAAM,mCAAmC,CAAC;AAGjE,wGAAwG;AACxG,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAyB,EAAC,IAAW,EAAC,UAAiB,EAAC,cAAsB;IACtH,MAAM,CAAC,GAAC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,8DAA8D,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAChH,IAAG,CAAC,EAAE,IAAI,KAAG,GAAG,IAAE,CAAC,CAAC,MAAM,KAAG,KAAK,IAAE,CAAC,CAAC,IAAI,KAAG,IAAI,IAAE,CAAC,CAAC,CAAC,IAAI,IAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAG,IAAI;QAAC,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACzH,MAAM,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC;IACf,IAAG,CAAC,CAAC,UAAU,EAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;QAAC,MAAM,KAAK,CAAC,sBAAsB,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACtH,MAAM,MAAM,GAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAC,cAAc,CAAC,CAAC;IACzC,IAAG,cAAc,KAAG,SAAS,IAAE,MAAM,KAAG,MAAM,CAAC,cAAc,CAAC;QAAC,MAAM,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACtH,OAAO,EAAC,UAAU,EAAC,MAAM,EAAC,UAAU,EAAC,CAAC,CAAC,UAAuC,EAAC,IAAI,EAAC,CAAC,CAAC,CAAC,UAAU,KAAG,cAAc,CAAA,CAAC,CAAA,UAAU,CAAA,CAAC,CAAA,UAAU,CAAqB,EAAC,CAAC;AAChK,CAAC"}
@@ -0,0 +1,80 @@
1
+ import type { ApiClient } from '../core/client.js';
2
+ /**
3
+ * 流程导出(平台叫 packing / 迁出)。
4
+ *
5
+ * 平台前端「导出流程」是异步三步,抓包(monitor_1792655821408.txt)与实测一致:
6
+ *
7
+ * 1. `POST /api/packing/public/packing`
8
+ * `{"ietype":"workflow","exportIds":["<workflowId>"],"exportNameMap":{"<workflowId>":"<流程名>"}}`
9
+ * → `data` 直接是 taskId 字符串。
10
+ * 2. 每 2 秒 `GET /api/packing/public/packingStatus?taskId=<taskId>`
11
+ * → `data.totalStatus` 为 packing / success / fail,`data.totalProcess` 是百分比字符串。
12
+ * 打包的是流程绑定的 e-builder 应用,条目 `packingStatusList[].details[]` 是各微服务的进度。
13
+ * 3. 成功后 `data.fileObj` 给出 zip 元信息(`fileid` / `name` / `module`),
14
+ * `data.zipFileId` 与之一致;下载走 `/api/file/remotedownload/<fileId>/token/true?authModule=<module>`。
15
+ *
16
+ * 注意:打包过程可能持续 1 分钟以上(应用越大越久),调用方要自己控制轮询与超时。
17
+ */
18
+ export interface PackingPayload {
19
+ ietype: 'workflow';
20
+ exportIds: string[];
21
+ exportNameMap: Record<string, string>;
22
+ }
23
+ /** 抓包原文:ietype 固定 workflow,名称映射用于导出任务与文件名。 */
24
+ export declare function buildPackingPayload(workflowId: string, name: string): PackingPayload;
25
+ export interface PackingStep {
26
+ serviceName: string;
27
+ step: string;
28
+ status: string;
29
+ process: string;
30
+ failMsg: string;
31
+ }
32
+ export interface PackingState {
33
+ /** packing / success / fail(平台原值,可能为空) */
34
+ totalStatus: string;
35
+ /** 百分比字符串,如 "50.00%" */
36
+ totalProcess: string;
37
+ zipFileId: string;
38
+ pkgId: string;
39
+ /** 成功后的 zip 元信息;未完成时为 null */
40
+ file: Record<string, any> | null;
41
+ /** 各微服务进度明细(展平) */
42
+ steps: PackingStep[];
43
+ done: boolean;
44
+ failed: boolean;
45
+ /** 失败原因;成功或进行中为空串 */
46
+ failMessage: string;
47
+ }
48
+ /**
49
+ * 解析 packingStatus 响应。**纯函数**:平台字段名大小写/层级曾变过,
50
+ * 这里集中兜底,命令层只消费归一化后的结果。
51
+ */
52
+ export declare function parsePackingStatus(resp: any): PackingState;
53
+ /** 当前正在执行的步骤(用于进度提示;取最近 3 个去重的步骤名)。 */
54
+ export declare function packingProgressLabel(state: PackingState): string;
55
+ /** zip 下载路径。fileId 用 `fileObj.fileid`(与 zipFileId 相同),module 用 fileObj.module。 */
56
+ export declare function packingDownloadPath(fileId: string, module: string): string;
57
+ /** 去掉路径分隔符与 Windows 非法字符,避免把服务端文件名直接当本地路径。 */
58
+ export declare function sanitizeFileName(name: string, fallback?: string): string;
59
+ /**
60
+ * 从 Content-Disposition 取文件名。
61
+ * 平台真实返回:`attachment;filename="%E4%BC%9A%E8%AE%AE%E7%AE%A1%E7%90%861_1792659668744.zip"`(百分号编码)。
62
+ */
63
+ export declare function fileNameFromContentDisposition(header: string | null | undefined, fallback?: string): string;
64
+ /** 对象存储 302 的 URL 里带 `response-content-disposition`(腾讯云风格),文件名藏在那。 */
65
+ export declare function fileNameFromRedirectLocation(location: string, fallback?: string): string;
66
+ /**
67
+ * 下载打包好的 zip。
68
+ *
69
+ * 与失败数据下载同一套安全约定:先带鉴权拿 302,再**不带任何鉴权头**去对象存储,
70
+ * 不把 eteamsid 递给第三方主机。平台实测也可能直接 200 返回二进制。
71
+ */
72
+ export declare function downloadPackedFile(baseUrl: string, fileId: string, module: string, eteamsId: string): Promise<{
73
+ bytes: Buffer;
74
+ fileName: string;
75
+ }>;
76
+ /** 发起导出并返回 taskId。响应 `data` 直接是字符串。 */
77
+ export declare function startWorkflowExport(client: ApiClient, baseUrl: string, workflowId: string, name: string): Promise<string>;
78
+ /** 查询一次打包进度。 */
79
+ export declare function fetchPackingStatus(client: ApiClient, baseUrl: string, taskId: string): Promise<PackingState>;
80
+ //# sourceMappingURL=workflow-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-export.d.ts","sourceRoot":"","sources":["../../src/services/workflow-export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,8CAA8C;AAC9C,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAOpF;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACjC,mBAAmB;IACnB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,YAAY,CA8B1D;AAED,uCAAuC;AACvC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAOhE;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED,8CAA8C;AAC9C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAwB,GAAG,MAAM,CAQvF;AAaD;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,SAAK,GAAG,MAAM,CAIvG;AAED,sEAAsE;AACtE,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM,CAOpF;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAChE,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB9C;AAED,uCAAuC;AACvC,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GACnE,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,gBAAgB;AAChB,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GACjD,OAAO,CAAC,YAAY,CAAC,CAQvB"}
@@ -0,0 +1,150 @@
1
+ /** 抓包原文:ietype 固定 workflow,名称映射用于导出任务与文件名。 */
2
+ export function buildPackingPayload(workflowId, name) {
3
+ const id = String(workflowId);
4
+ return {
5
+ ietype: 'workflow',
6
+ exportIds: [id],
7
+ exportNameMap: { [id]: name },
8
+ };
9
+ }
10
+ const FAIL_STATUSES = new Set(['fail', 'failed', 'error', 'failure']);
11
+ /**
12
+ * 解析 packingStatus 响应。**纯函数**:平台字段名大小写/层级曾变过,
13
+ * 这里集中兜底,命令层只消费归一化后的结果。
14
+ */
15
+ export function parsePackingStatus(resp) {
16
+ const data = resp?.data && typeof resp.data === 'object' ? resp.data : {};
17
+ const totalStatus = String(data.totalStatus || '').trim();
18
+ const steps = [];
19
+ for (const task of Array.isArray(data.packingStatusList) ? data.packingStatusList : []) {
20
+ for (const d of Array.isArray(task?.details) ? task.details : []) {
21
+ steps.push({
22
+ serviceName: String(d?.serviceName || ''),
23
+ step: String(d?.step || ''),
24
+ status: String(d?.status || ''),
25
+ process: String(d?.process || ''),
26
+ failMsg: String(d?.failMsg || ''),
27
+ });
28
+ }
29
+ }
30
+ const file = data.fileObj && typeof data.fileObj === 'object' ? data.fileObj : null;
31
+ const failedStep = steps.find(s => s.failMsg) || steps.find(s => FAIL_STATUSES.has(s.status.toLowerCase()));
32
+ const failed = FAIL_STATUSES.has(totalStatus.toLowerCase()) || (!file && Boolean(failedStep));
33
+ const failMessage = String(failedStep?.failMsg || (failed ? (resp?.msg || '') : ''));
34
+ return {
35
+ totalStatus,
36
+ totalProcess: String(data.totalProcess || ''),
37
+ zipFileId: String(data.zipFileId || file?.fileid || ''),
38
+ pkgId: String(data.pkgId || ''),
39
+ file,
40
+ steps,
41
+ done: totalStatus.toLowerCase() === 'success' || failed,
42
+ failed,
43
+ failMessage,
44
+ };
45
+ }
46
+ /** 当前正在执行的步骤(用于进度提示;取最近 3 个去重的步骤名)。 */
47
+ export function packingProgressLabel(state) {
48
+ const running = state.steps
49
+ .filter(s => s.status.toLowerCase() === 'packing' && s.step)
50
+ .map(s => s.step);
51
+ const unique = [...new Set(running)];
52
+ const tail = unique.slice(-3).join('、');
53
+ return [state.totalProcess || state.totalStatus, tail].filter(Boolean).join(' · ');
54
+ }
55
+ /** zip 下载路径。fileId 用 `fileObj.fileid`(与 zipFileId 相同),module 用 fileObj.module。 */
56
+ export function packingDownloadPath(fileId, module) {
57
+ const mod = module || 'ebuilder';
58
+ return `/api/file/remotedownload/${encodeURIComponent(fileId)}/token/true?authModule=${encodeURIComponent(mod)}`;
59
+ }
60
+ /** 去掉路径分隔符与 Windows 非法字符,避免把服务端文件名直接当本地路径。 */
61
+ export function sanitizeFileName(name, fallback = 'workflow-export.zip') {
62
+ const base = String(name || '')
63
+ .replace(/^.*[\\/]/, '')
64
+ .replace(/[\\/:*?"<>|]/g, '_')
65
+ .replace(/[\x00-\x1f]/g, '')
66
+ .trim()
67
+ .replace(/[. ]+$/, '');
68
+ return base || fallback;
69
+ }
70
+ function decodeFileName(raw) {
71
+ const m = /filename\*=UTF-8''([^;]+)/i.exec(raw);
72
+ const plain = m ? m[1] : (/filename="?([^";]+)"?/i.exec(raw)?.[1] || '');
73
+ const value = plain.trim().replace(/^"|"$/g, '');
74
+ try {
75
+ return decodeURIComponent(value);
76
+ }
77
+ catch {
78
+ return value;
79
+ }
80
+ }
81
+ /**
82
+ * 从 Content-Disposition 取文件名。
83
+ * 平台真实返回:`attachment;filename="%E4%BC%9A%E8%AE%AE%E7%AE%A1%E7%90%861_1792659668744.zip"`(百分号编码)。
84
+ */
85
+ export function fileNameFromContentDisposition(header, fallback = '') {
86
+ if (!header)
87
+ return fallback;
88
+ const name = decodeFileName(header);
89
+ return name ? sanitizeFileName(name, fallback) : fallback;
90
+ }
91
+ /** 对象存储 302 的 URL 里带 `response-content-disposition`(腾讯云风格),文件名藏在那。 */
92
+ export function fileNameFromRedirectLocation(location, fallback = '') {
93
+ try {
94
+ const disposition = new URL(location).searchParams.get('response-content-disposition') || '';
95
+ return fileNameFromContentDisposition(disposition, fallback);
96
+ }
97
+ catch {
98
+ return fallback;
99
+ }
100
+ }
101
+ /**
102
+ * 下载打包好的 zip。
103
+ *
104
+ * 与失败数据下载同一套安全约定:先带鉴权拿 302,再**不带任何鉴权头**去对象存储,
105
+ * 不把 eteamsid 递给第三方主机。平台实测也可能直接 200 返回二进制。
106
+ */
107
+ export async function downloadPackedFile(baseUrl, fileId, module, eteamsId) {
108
+ const first = await fetch(`${baseUrl}${packingDownloadPath(fileId, module)}`, {
109
+ headers: { eteamsid: eteamsId, langtype: 'zh_CN' },
110
+ redirect: 'manual',
111
+ });
112
+ if (first.status >= 300 && first.status < 400) {
113
+ const location = first.headers.get('location') || '';
114
+ if (!location)
115
+ throw new Error(`下载跳转缺少 location(HTTP ${first.status})`);
116
+ const second = await fetch(location);
117
+ if (!second.ok)
118
+ throw new Error(`从对象存储下载失败: HTTP ${second.status}`);
119
+ return {
120
+ bytes: Buffer.from(await second.arrayBuffer()),
121
+ fileName: fileNameFromRedirectLocation(location, fileNameFromContentDisposition(first.headers.get('content-disposition'), '')),
122
+ };
123
+ }
124
+ if (!first.ok)
125
+ throw new Error(`下载导出文件失败: HTTP ${first.status}`);
126
+ return {
127
+ bytes: Buffer.from(await first.arrayBuffer()),
128
+ fileName: fileNameFromContentDisposition(first.headers.get('content-disposition'), ''),
129
+ };
130
+ }
131
+ /** 发起导出并返回 taskId。响应 `data` 直接是字符串。 */
132
+ export async function startWorkflowExport(client, baseUrl, workflowId, name) {
133
+ const res = await client.post(`${baseUrl}/api/packing/public/packing`, buildPackingPayload(workflowId, name));
134
+ if (res?.code !== 200 || res?.status === false) {
135
+ throw new Error(`发起导出失败: ${res?.msg || '未知错误'}`);
136
+ }
137
+ const taskId = typeof res.data === 'string' ? res.data : String(res.data?.taskId || '');
138
+ if (!taskId)
139
+ throw new Error('发起导出失败: 响应里没有 taskId');
140
+ return taskId;
141
+ }
142
+ /** 查询一次打包进度。 */
143
+ export async function fetchPackingStatus(client, baseUrl, taskId) {
144
+ const res = await client.get(`${baseUrl}/api/packing/public/packingStatus?taskId=${encodeURIComponent(taskId)}`);
145
+ if (res?.code !== 200 || res?.status === false) {
146
+ throw new Error(`查询打包进度失败: ${res?.msg || '未知错误'}`);
147
+ }
148
+ return parsePackingStatus(res);
149
+ }
150
+ //# sourceMappingURL=workflow-export.js.map