weaver-e10-builder 1.5.12 → 1.5.14

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 (333) 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-common.d.ts.map +1 -1
  5. package/dist/commands/designer-common.js +91 -0
  6. package/dist/commands/designer-common.js.map +1 -1
  7. package/dist/commands/designer-setters.d.ts.map +1 -1
  8. package/dist/commands/designer-setters.js +148 -47
  9. package/dist/commands/designer-setters.js.map +1 -1
  10. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  11. package/dist/commands/form-add-detail-table.js +150 -8
  12. package/dist/commands/form-add-detail-table.js.map +1 -1
  13. package/dist/commands/form-browser-definition.d.ts +14 -0
  14. package/dist/commands/form-browser-definition.d.ts.map +1 -0
  15. package/dist/commands/form-browser-definition.js +493 -0
  16. package/dist/commands/form-browser-definition.js.map +1 -0
  17. package/dist/commands/form-code.d.ts +5 -0
  18. package/dist/commands/form-code.d.ts.map +1 -0
  19. package/dist/commands/form-code.js +276 -0
  20. package/dist/commands/form-code.js.map +1 -0
  21. package/dist/commands/form-engine-linkage.d.ts +3 -0
  22. package/dist/commands/form-engine-linkage.d.ts.map +1 -0
  23. package/dist/commands/form-engine-linkage.js +199 -0
  24. package/dist/commands/form-engine-linkage.js.map +1 -0
  25. package/dist/commands/form-formula.d.ts.map +1 -1
  26. package/dist/commands/form-formula.js +11 -6
  27. package/dist/commands/form-formula.js.map +1 -1
  28. package/dist/commands/form-layout-template-advanced.d.ts +3 -0
  29. package/dist/commands/form-layout-template-advanced.d.ts.map +1 -0
  30. package/dist/commands/form-layout-template-advanced.js +115 -0
  31. package/dist/commands/form-layout-template-advanced.js.map +1 -0
  32. package/dist/commands/form-layout-template-easy.d.ts +3 -0
  33. package/dist/commands/form-layout-template-easy.d.ts.map +1 -0
  34. package/dist/commands/form-layout-template-easy.js +59 -0
  35. package/dist/commands/form-layout-template-easy.js.map +1 -0
  36. package/dist/commands/form-layout.d.ts.map +1 -1
  37. package/dist/commands/form-layout.js +77 -0
  38. package/dist/commands/form-layout.js.map +1 -1
  39. package/dist/commands/form-list-filter.js +1 -1
  40. package/dist/commands/form-list-filter.js.map +1 -1
  41. package/dist/commands/form-list-utils.d.ts +5 -0
  42. package/dist/commands/form-list-utils.d.ts.map +1 -1
  43. package/dist/commands/form-list-utils.js +23 -3
  44. package/dist/commands/form-list-utils.js.map +1 -1
  45. package/dist/commands/form-permission.d.ts.map +1 -1
  46. package/dist/commands/form-permission.js +55 -19
  47. package/dist/commands/form-permission.js.map +1 -1
  48. package/dist/commands/form-physical-table.d.ts.map +1 -1
  49. package/dist/commands/form-physical-table.js +8 -2
  50. package/dist/commands/form-physical-table.js.map +1 -1
  51. package/dist/commands/form.d.ts.map +1 -1
  52. package/dist/commands/form.js +476 -30
  53. package/dist/commands/form.js.map +1 -1
  54. package/dist/commands/menu.d.ts +68 -2
  55. package/dist/commands/menu.d.ts.map +1 -1
  56. package/dist/commands/menu.js +186 -41
  57. package/dist/commands/menu.js.map +1 -1
  58. package/dist/commands/page.d.ts.map +1 -1
  59. package/dist/commands/page.js +29 -6
  60. package/dist/commands/page.js.map +1 -1
  61. package/dist/commands/special.d.ts.map +1 -1
  62. package/dist/commands/special.js +3 -2
  63. package/dist/commands/special.js.map +1 -1
  64. package/dist/commands/wf-form.d.ts.map +1 -1
  65. package/dist/commands/wf-form.js +76 -31
  66. package/dist/commands/wf-form.js.map +1 -1
  67. package/dist/commands/workflow-auth-resp.js +2 -2
  68. package/dist/commands/workflow-auth-resp.js.map +1 -1
  69. package/dist/commands/workflow-base-settings.d.ts +3 -0
  70. package/dist/commands/workflow-base-settings.d.ts.map +1 -0
  71. package/dist/commands/workflow-base-settings.js +73 -0
  72. package/dist/commands/workflow-base-settings.js.map +1 -0
  73. package/dist/commands/workflow-condition.d.ts.map +1 -1
  74. package/dist/commands/workflow-condition.js +59 -450
  75. package/dist/commands/workflow-condition.js.map +1 -1
  76. package/dist/commands/workflow-export.d.ts +9 -0
  77. package/dist/commands/workflow-export.d.ts.map +1 -0
  78. package/dist/commands/workflow-export.js +121 -0
  79. package/dist/commands/workflow-export.js.map +1 -0
  80. package/dist/commands/workflow-node.d.ts.map +1 -1
  81. package/dist/commands/workflow-node.js +28 -53
  82. package/dist/commands/workflow-node.js.map +1 -1
  83. package/dist/commands/workflow-operator-batch.d.ts +3 -0
  84. package/dist/commands/workflow-operator-batch.d.ts.map +1 -0
  85. package/dist/commands/workflow-operator-batch.js +35 -0
  86. package/dist/commands/workflow-operator-batch.js.map +1 -0
  87. package/dist/commands/workflow-subprocess.d.ts.map +1 -1
  88. package/dist/commands/workflow-subprocess.js +21 -33
  89. package/dist/commands/workflow-subprocess.js.map +1 -1
  90. package/dist/commands/workflow.d.ts.map +1 -1
  91. package/dist/commands/workflow.js +36 -37
  92. package/dist/commands/workflow.js.map +1 -1
  93. package/dist/index.js +18 -1
  94. package/dist/index.js.map +1 -1
  95. package/dist/services/actionflow/browser_source.d.ts +9 -0
  96. package/dist/services/actionflow/browser_source.d.ts.map +1 -0
  97. package/dist/services/actionflow/browser_source.js +12 -0
  98. package/dist/services/actionflow/browser_source.js.map +1 -0
  99. package/dist/services/actionflow/components/date_trigger.js +1 -1
  100. package/dist/services/actionflow/components/date_trigger.js.map +1 -1
  101. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  102. package/dist/services/actionflow/components/document_actions.js +178 -25
  103. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  104. package/dist/services/actionflow/components/enquiry_form.js +1 -1
  105. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  106. package/dist/services/actionflow/components/logic_flow_set.d.ts.map +1 -1
  107. package/dist/services/actionflow/components/logic_flow_set.js +80 -8
  108. package/dist/services/actionflow/components/logic_flow_set.js.map +1 -1
  109. package/dist/services/actionflow/components/meeting_create.d.ts.map +1 -1
  110. package/dist/services/actionflow/components/meeting_create.js +1 -0
  111. package/dist/services/actionflow/components/meeting_create.js.map +1 -1
  112. package/dist/services/actionflow/components/schedule_create.d.ts.map +1 -1
  113. package/dist/services/actionflow/components/schedule_create.js +2 -0
  114. package/dist/services/actionflow/components/schedule_create.js.map +1 -1
  115. package/dist/services/actionflow/components/time_batch_trigger.js +1 -1
  116. package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -1
  117. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  118. package/dist/services/actionflow/components/workflow_actions.js +6 -2
  119. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  120. package/dist/services/actionflow/context_preflight.d.ts +5 -0
  121. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  122. package/dist/services/actionflow/context_preflight.js +186 -35
  123. package/dist/services/actionflow/context_preflight.js.map +1 -1
  124. package/dist/services/actionflow/filter_rules.d.ts.map +1 -1
  125. package/dist/services/actionflow/filter_rules.js +9 -8
  126. package/dist/services/actionflow/filter_rules.js.map +1 -1
  127. package/dist/services/actionflow/form_source.d.ts +2 -0
  128. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  129. package/dist/services/actionflow/form_source.js +8 -0
  130. package/dist/services/actionflow/form_source.js.map +1 -1
  131. package/dist/services/actionflow/formula_service.d.ts +2 -1
  132. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  133. package/dist/services/actionflow/formula_service.js +69 -34
  134. package/dist/services/actionflow/formula_service.js.map +1 -1
  135. package/dist/services/actionflow/logicflow_source.d.ts +5 -0
  136. package/dist/services/actionflow/logicflow_source.d.ts.map +1 -0
  137. package/dist/services/actionflow/logicflow_source.js +15 -0
  138. package/dist/services/actionflow/logicflow_source.js.map +1 -0
  139. package/dist/services/actionflow/preflight_service.d.ts +15 -0
  140. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  141. package/dist/services/actionflow/preflight_service.js +561 -29
  142. package/dist/services/actionflow/preflight_service.js.map +1 -1
  143. package/dist/services/actionflow/runtime_metadata.d.ts +8 -0
  144. package/dist/services/actionflow/runtime_metadata.d.ts.map +1 -1
  145. package/dist/services/actionflow/runtime_metadata.js +25 -0
  146. package/dist/services/actionflow/runtime_metadata.js.map +1 -1
  147. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  148. package/dist/services/actionflow/workflow_compiler.js +75 -23
  149. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  150. package/dist/services/actionflow/workflow_source.d.ts +2 -0
  151. package/dist/services/actionflow/workflow_source.d.ts.map +1 -1
  152. package/dist/services/actionflow/workflow_source.js +7 -0
  153. package/dist/services/actionflow/workflow_source.js.map +1 -1
  154. package/dist/services/auth-resp-condition.d.ts +7 -3
  155. package/dist/services/auth-resp-condition.d.ts.map +1 -1
  156. package/dist/services/auth-resp-condition.js +58 -63
  157. package/dist/services/auth-resp-condition.js.map +1 -1
  158. package/dist/services/browser.d.ts +5 -0
  159. package/dist/services/browser.d.ts.map +1 -1
  160. package/dist/services/browser.js +16 -4
  161. package/dist/services/browser.js.map +1 -1
  162. package/dist/services/condition-rules.d.ts +2 -30
  163. package/dist/services/condition-rules.d.ts.map +1 -1
  164. package/dist/services/condition-rules.js +3 -219
  165. package/dist/services/condition-rules.js.map +1 -1
  166. package/dist/services/designer-dataset.d.ts +45 -0
  167. package/dist/services/designer-dataset.d.ts.map +1 -0
  168. package/dist/services/designer-dataset.js +156 -0
  169. package/dist/services/designer-dataset.js.map +1 -0
  170. package/dist/services/form-association.d.ts +7 -0
  171. package/dist/services/form-association.d.ts.map +1 -1
  172. package/dist/services/form-association.js +22 -1
  173. package/dist/services/form-association.js.map +1 -1
  174. package/dist/services/form-code.d.ts +53 -0
  175. package/dist/services/form-code.d.ts.map +1 -0
  176. package/dist/services/form-code.js +370 -0
  177. package/dist/services/form-code.js.map +1 -0
  178. package/dist/services/form-create.d.ts +20 -0
  179. package/dist/services/form-create.d.ts.map +1 -1
  180. package/dist/services/form-create.js +73 -1
  181. package/dist/services/form-create.js.map +1 -1
  182. package/dist/services/form-field-build.d.ts +1 -1
  183. package/dist/services/form-field-build.d.ts.map +1 -1
  184. package/dist/services/form-field-build.js +20 -1
  185. package/dist/services/form-field-build.js.map +1 -1
  186. package/dist/services/form-field-drop.d.ts +2 -0
  187. package/dist/services/form-field-drop.d.ts.map +1 -1
  188. package/dist/services/form-field-drop.js +2 -0
  189. package/dist/services/form-field-drop.js.map +1 -1
  190. package/dist/services/form-layout-detail-insert.d.ts +58 -0
  191. package/dist/services/form-layout-detail-insert.d.ts.map +1 -0
  192. package/dist/services/form-layout-detail-insert.js +293 -0
  193. package/dist/services/form-layout-detail-insert.js.map +1 -0
  194. package/dist/services/form-layout-insert.d.ts.map +1 -1
  195. package/dist/services/form-layout-insert.js +34 -2
  196. package/dist/services/form-layout-insert.js.map +1 -1
  197. package/dist/services/form-layout-source/compile.d.ts.map +1 -1
  198. package/dist/services/form-layout-source/compile.js +11 -4
  199. package/dist/services/form-layout-source/compile.js.map +1 -1
  200. package/dist/services/form-layout-template-advanced.d.ts +330 -0
  201. package/dist/services/form-layout-template-advanced.d.ts.map +1 -0
  202. package/dist/services/form-layout-template-advanced.js +1437 -0
  203. package/dist/services/form-layout-template-advanced.js.map +1 -0
  204. package/dist/services/form-layout-template-easy.d.ts +34 -0
  205. package/dist/services/form-layout-template-easy.d.ts.map +1 -0
  206. package/dist/services/form-layout-template-easy.js +159 -0
  207. package/dist/services/form-layout-template-easy.js.map +1 -0
  208. package/dist/services/form-layout-template-flow.d.ts +23 -0
  209. package/dist/services/form-layout-template-flow.d.ts.map +1 -0
  210. package/dist/services/form-layout-template-flow.js +99 -0
  211. package/dist/services/form-layout-template-flow.js.map +1 -0
  212. package/dist/services/form-linkage-condition.d.ts +15 -0
  213. package/dist/services/form-linkage-condition.d.ts.map +1 -1
  214. package/dist/services/form-linkage-condition.js +19 -10
  215. package/dist/services/form-linkage-condition.js.map +1 -1
  216. package/dist/services/form-permission-archive.d.ts +23 -1
  217. package/dist/services/form-permission-archive.d.ts.map +1 -1
  218. package/dist/services/form-permission-archive.js +54 -2
  219. package/dist/services/form-permission-archive.js.map +1 -1
  220. package/dist/services/form-physical-table.d.ts +10 -0
  221. package/dist/services/form-physical-table.d.ts.map +1 -1
  222. package/dist/services/form-physical-table.js +20 -0
  223. package/dist/services/form-physical-table.js.map +1 -1
  224. package/dist/services/form-sub-detail.d.ts +25 -0
  225. package/dist/services/form-sub-detail.d.ts.map +1 -1
  226. package/dist/services/form-sub-detail.js +64 -0
  227. package/dist/services/form-sub-detail.js.map +1 -1
  228. package/dist/services/form-view-linkage-functions.d.ts +19 -0
  229. package/dist/services/form-view-linkage-functions.d.ts.map +1 -0
  230. package/dist/services/form-view-linkage-functions.js +90 -0
  231. package/dist/services/form-view-linkage-functions.js.map +1 -0
  232. package/dist/services/matrix-condition.d.ts +32 -1
  233. package/dist/services/matrix-condition.d.ts.map +1 -1
  234. package/dist/services/matrix-condition.js +169 -6
  235. package/dist/services/matrix-condition.js.map +1 -1
  236. package/dist/services/menu-catalog.d.ts +24 -1
  237. package/dist/services/menu-catalog.d.ts.map +1 -1
  238. package/dist/services/menu-catalog.js +49 -2
  239. package/dist/services/menu-catalog.js.map +1 -1
  240. package/dist/services/workflow-base-settings.d.ts +117 -0
  241. package/dist/services/workflow-base-settings.d.ts.map +1 -0
  242. package/dist/services/workflow-base-settings.js +504 -0
  243. package/dist/services/workflow-base-settings.js.map +1 -0
  244. package/dist/services/workflow-condition-core.d.ts +48 -0
  245. package/dist/services/workflow-condition-core.d.ts.map +1 -0
  246. package/dist/services/workflow-condition-core.js +316 -0
  247. package/dist/services/workflow-condition-core.js.map +1 -0
  248. package/dist/services/workflow-context.d.ts +10 -0
  249. package/dist/services/workflow-context.d.ts.map +1 -0
  250. package/dist/services/workflow-context.js +15 -0
  251. package/dist/services/workflow-context.js.map +1 -0
  252. package/dist/services/workflow-export.d.ts +80 -0
  253. package/dist/services/workflow-export.d.ts.map +1 -0
  254. package/dist/services/workflow-export.js +150 -0
  255. package/dist/services/workflow-export.js.map +1 -0
  256. package/dist/services/workflow-field-permission-route.d.ts +75 -0
  257. package/dist/services/workflow-field-permission-route.d.ts.map +1 -0
  258. package/dist/services/workflow-field-permission-route.js +52 -0
  259. package/dist/services/workflow-field-permission-route.js.map +1 -0
  260. package/dist/services/workflow-field-permission.d.ts +18 -0
  261. package/dist/services/workflow-field-permission.d.ts.map +1 -0
  262. package/dist/services/workflow-field-permission.js +40 -0
  263. package/dist/services/workflow-field-permission.js.map +1 -0
  264. package/dist/services/workflow-node-layout.d.ts +11 -10
  265. package/dist/services/workflow-node-layout.d.ts.map +1 -1
  266. package/dist/services/workflow-node-layout.js +24 -62
  267. package/dist/services/workflow-node-layout.js.map +1 -1
  268. package/dist/services/workflow-operator-batch-condition.d.ts +23 -0
  269. package/dist/services/workflow-operator-batch-condition.d.ts.map +1 -0
  270. package/dist/services/workflow-operator-batch-condition.js +56 -0
  271. package/dist/services/workflow-operator-batch-condition.js.map +1 -0
  272. package/dist/services/workflow-operator.d.ts +12 -5
  273. package/dist/services/workflow-operator.d.ts.map +1 -1
  274. package/dist/services/workflow-operator.js +41 -16
  275. package/dist/services/workflow-operator.js.map +1 -1
  276. package/package.json +1 -1
  277. package/skill-docs/SKILL.md +155 -290
  278. package/skill-docs/_catalog.md +12 -3
  279. package/skill-docs/actionflows/references/components/document/GetDocumentInfo.md +17 -17
  280. package/skill-docs/actionflows/references/components/logic/LogicFlowSet.md +23 -17
  281. package/skill-docs/assets/form-template/style-templates-advanced-base-example.json +1420 -0
  282. package/skill-docs/assets/form-template/style-templates-advanced-base.css +33 -0
  283. package/skill-docs/assets/form-template/style-templates-advanced-blue-crystal-example.json +1094 -0
  284. package/skill-docs/assets/form-template/style-templates-advanced-document-example.json +1251 -0
  285. package/skill-docs/assets/form-template/style-templates-advanced-grid-example.json +39 -0
  286. package/skill-docs/assets/form-template/style-templates-advanced-page-example.json +38 -0
  287. package/skill-docs/assets/form-template/style-templates-advanced-placements-example.json +30 -0
  288. package/skill-docs/assets/form-template/style-templates-advanced-standard-example.json +53 -0
  289. package/skill-docs/assets/form-template/style-templates-advanced-structure-example.json +25 -0
  290. package/skill-docs/assets/form-template/style-templates-advanced-table-example.json +1420 -0
  291. package/skill-docs/references/code-block/guide-code-block.md +141 -0
  292. package/skill-docs/references/code-block/guide-layout-css.md +107 -0
  293. package/skill-docs/references/code-block/ref-controls.md +60 -0
  294. package/skill-docs/references/code-block/ref-coverage.md +32 -0
  295. package/skill-docs/references/code-block/ref-details.md +57 -0
  296. package/skill-docs/references/code-block/ref-events-validation.md +42 -0
  297. package/skill-docs/references/code-block/ref-foundations-fields.md +56 -0
  298. package/skill-docs/references/code-block/ref-recipes.md +164 -0
  299. package/skill-docs/references/code-block/ref-troubleshooting.md +49 -0
  300. package/skill-docs/references/code-block/ref-ui-global.md +47 -0
  301. package/skill-docs/references/coding/guide-page-code.md +2 -0
  302. package/skill-docs/references/coding/ref-compile-rules.md +2 -0
  303. package/skill-docs/references/common/capability-boundaries.md +15 -0
  304. package/skill-docs/references/common/guide-install.md +44 -0
  305. package/skill-docs/references/common/guide-plan-template.md +2 -1
  306. package/skill-docs/references/common/map.md +11 -1
  307. package/skill-docs/references/common/ref-cli-commands.md +689 -648
  308. package/skill-docs/references/ebuilder-designer/guide-designer-factory.md +8 -4
  309. package/skill-docs/references/form/form-template/style-templates-advanced-css-guide.md +167 -0
  310. package/skill-docs/references/form/form-template/style-templates-advanced.md +315 -0
  311. package/skill-docs/references/form/form-template/style-templates-easy.md +55 -0
  312. package/skill-docs/references/form/form-template/style-templates-flow.md +27 -0
  313. package/skill-docs/references/form/form-template/style-templates.md +29 -0
  314. package/skill-docs/references/form/guide-browser-definition.md +148 -0
  315. package/skill-docs/references/form/guide-create-form.md +258 -250
  316. package/skill-docs/references/form/guide-field-linkage.md +56 -14
  317. package/skill-docs/references/form/guide-form-archive-permission.md +29 -6
  318. package/skill-docs/references/form/guide-form-formula-functions.md +11 -0
  319. package/skill-docs/references/form/guide-form-layout-incremental.md +28 -0
  320. package/skill-docs/references/form/guide-form-layout-planning.md +11 -0
  321. package/skill-docs/references/form/guide-form-layout-source.md +4 -0
  322. package/skill-docs/references/form/guide-form-linkage.md +295 -269
  323. package/skill-docs/references/form/guide-form-physical-table.md +2 -0
  324. package/skill-docs/references/form/guide-form-view.md +3 -0
  325. package/skill-docs/references/form/ref-form-fields.md +301 -293
  326. package/skill-docs/references/form/ref-list-filter-date-params.md +83 -0
  327. package/skill-docs/references/menu/system-menus.md +12 -0
  328. package/skill-docs/references/workflow/condition-core-contract.md +63 -0
  329. package/skill-docs/references/workflow/guide-base-auth-share-remind.md +126 -0
  330. package/skill-docs/references/workflow/guide-workflow-condition.md +476 -447
  331. package/skill-docs/references/workflow/guide-workflow-node-layout.md +6 -0
  332. package/skill-docs/references/workflow/guide-workflow.md +29 -3
  333. package/skill-docs/references/form/style-templates.md +0 -97
@@ -1,447 +1,476 @@
1
- # 流程分支条件指南
2
-
3
- > 流程基础(建流程、节点、连线、审批人)见 `workflow/guide-workflow.md`。本指南专讲**分支/出口条件**:金额>1万走高级审批、合同类型=采购走快速通道这类路由。
4
-
5
- ## 添加分支条件(简化语法,推荐)
6
-
7
- **一行命令搞定**,自动校验字段类型、自动生成 API payload、自动绑定到连线:
8
-
9
- 命令中的 `<sourceId>` 是要绑定条件的**连线 ID(linkId)**,`<nodeId>` 是该连线的**来源节点 ID(srcNodeId)**,不是目标节点 ID。可先执行 `workflow nodes <wf> --json` 或 `workflow link-list <wf>`,从同一条连线中取得这两个值。
10
-
11
- > **AND / OR 规则写在「同一次调用」里**:要组合多条规则,一次 `add` 传多个 `--rule` + `--relation AND|OR`,例如
12
- > `--rule "form:金额:大于:1000" --rule "system:流程标题:包含:合同" --relation AND`。
13
- >
14
- > **对同一连线重复 `add` 是「替换」,不是叠加**:第二次 `add` 会先删掉该连线旧条件再重建。这是刻意的——若允许跨调用叠加,极易产生 `(金额≥100万) AND (金额<100万)` 这类永远不成立的矛盾条件。因此**想给已有条件补一条规则,必须在新的 `add` 里把旧规则连同新规则一起写全**,不能靠再跑一次叠上去。
15
- >
16
- > **同源节点多分支**:一条连线只绑一个条件。要分多个分支,先给每个分支各建一条连线(`add-link`),再分别对每条连线 `add`。
17
-
18
- ### 基础示例
19
-
20
- ```bash
21
- # 系统字段条件
22
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "条件名称" \
23
- --rule "system:流程标题:包含:关键词"
24
-
25
- # 数值范围条件
26
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "金额过万" \
27
- --rule "system:流程超时(时):范围:1:72"
28
-
29
- # 日期范围条件
30
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "今年发起" \
31
- --rule "system:发起时间:范围:2026-01-01:2026-12-31"
32
-
33
- # 为空/不为空
34
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "无部门" \
35
- --rule "system:发起人部门:为空"
36
-
37
- # 多规则 AND/OR 组合
38
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "复合条件" \
39
- --rule "system:流程标题:包含:报销" \
40
- --rule "system:流程超时(时):大于:24" \
41
- --relation AND
42
-
43
- # 表单字段条件(字段ID / 名称 / dataKey 均可匹配)
44
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "表单字段" \
45
- --rule "form:<字段ID>:大于:1000" # 按 fieldId
46
- --rule "form:申请金额:大于:1000" # 按字段名
47
- --rule "form:je_2831:大于:1000" # 按 dataKey(原生流程表单 fieldId 会变,用 dataKey 最稳)
48
- ```
49
-
50
- ### 选项类字段(Select/CheckBox/RadioBox):用"属于"或"包含"
51
-
52
- 选项类字段归 Browser 族,用 `属于`(= `包含`,code 9)匹配任一选项:
53
-
54
- ```bash
55
- # 合同类型=采购类(单个选项)
56
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "采购类合同" \
57
- --rule "form:合同类型:属于:采购类"
58
-
59
- # 报销类型∈{差旅费,住宿费}(多个选项,逗号分隔)
60
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "差旅住宿报销" \
61
- --rule "form:报销类型:属于:差旅费,住宿费"
62
-
63
- # 也可以直接用"包含"(等价)
64
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "招待费报销" \
65
- --rule "form:报销类型:包含:招待费"
66
-
67
- # 不包含/不属于
68
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "非采购类" \
69
- --rule "form:合同类型:不属于:采购类"
70
- ```
71
-
72
- > `属于` 和 `包含` 是**别名**,底层都是 code 9("包含或属于"),由平台显示语义。对 Select/CheckBox/RadioBox 选项字段,建议用 `属于`;对文本/人员字段用 `包含`。
73
-
74
- ### 人员/部门字段
75
-
76
- 人员/部门字段值走浏览器解析,用逗号分隔多值:
77
-
78
- ```bash
79
- # 报销人=闫宇或吴鹏(人员多选)
80
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "闫宇或吴鹏报销" \
81
- --rule "form:报销人:等于:闫宇,吴鹏"
82
-
83
- # 所属部门=财务部
84
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "财务部报销" \
85
- --rule "form:所属部门:等于:财务部"
86
-
87
- # 部门不含子部门
88
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "本部门" \
89
- --rule "form:所属部门:等于:财务部:不包含子部门"
90
- ```
91
-
92
- ### 字段 vs 字段比较(变量模式)
93
-
94
- 用 `field` 关键字表示值来自另一个字段,而非字面值:
95
-
96
- ```bash
97
- # 发起时间 ≥ 报销日期(系统字段 vs 表单字段)
98
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "先报销后发起" \
99
- --rule "system:发起时间:大于等于:field:报销日期"
100
-
101
- # 发票日期 < 报销日期(表单字段 vs 表单字段)
102
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "发票早于报销日期" \
103
- --rule "form:发票日期:小于:field:报销日期"
104
-
105
- # 数值字段 vs 字段
106
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "超标" \
107
- --rule "form:实际金额:大于:field:预算金额"
108
- ```
109
-
110
- > **语法**:`来源:左字段:操作:field:右字段`。`field` 是固定关键字,表示右边是字段引用不是字面值。支持 `system` 和 `form` 两种来源,适用范围:`大于`/`小于`/`等于`/`不等于`/`大于等于`/`小于等于`。
111
-
112
- ### 明细字段条件
113
-
114
- 末尾量词 `:任一`(任一行满足,**缺省**) / `:所有`(所有行满足):
115
-
116
- > **量词只对明细字段生效**:它决定"明细任一行 / 所有行"的语义,只有左字段属于明细表时才会写入配置。**写在主表字段上会被忽略且不报错**——主表字段直接省略量词。明细字段省略量词时按"任一行"处理。
117
-
118
- ```bash
119
- # 明细任一行金额>1万
120
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "明细金额过万" \
121
- --rule "form:明细金额:大于:10000:任一"
122
-
123
- # 明细所有行数量都在 1~100
124
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "明细数量范围" \
125
- --rule "form:明细数量:范围:1:100:所有"
126
-
127
- # 明细字段 vs 字段(发票日期 < 报销日期)
128
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "明细发票日期" \
129
- --rule "form:发票日期:小于:field:报销日期:任一"
130
- ```
131
-
132
- 明细量与主表条件组合(同一次调用内,多条 `--rule` 默认 AND):
133
-
134
- ```bash
135
- # 所属部门=财务部 AND 明细任一行金额>1万
136
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "财务部大额明细" \
137
- --rule "form:所属部门:等于:财务部" \
138
- --rule "form:明细金额:大于:10000:任一"
139
-
140
- # 明细所有行数量都在 1~100 AND (发起时间≥报销日期)
141
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "明细数量且时间" \
142
- --rule "form:明细数量:范围:1:100:所有" \
143
- --rule "system:发起时间:大于等于:field:报销日期"
144
- ```
145
-
146
- > 需要"明细任一行满足 A **或** 任一行满足 B"时,用 `|` 把两条明细规则串在同一条 `--rule` 里(见下方 OR 分组),两条各带各的量词。
147
-
148
- ### OR 分组:用 `|` 分隔子规则
149
-
150
- 同一条 `--rule` 内用 `|` 分隔表示 OR 关系:
151
-
152
- ```bash
153
- # 报销类型∈{差旅费,住宿费} OR 发票编号含 FP(两个都是主表字段,不带量词)
154
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "差旅住宿或含FP发票" \
155
- --rule "form:报销类型:属于:差旅费,住宿费|form:发票编号:包含:FP"
156
-
157
- # 报销金额>10000 OR 紧急程度=紧急
158
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "大额或紧急" \
159
- --rule "form:报销金额:大于:10000" \
160
- --rule "system:紧急程度:等于:紧急"
161
- ```
162
-
163
- > 单条 `--rule` 内用 `|` 分隔的子规则是 OR 关系;多条 `--rule` 之间默认 AND 关系(`--relation OR` 可改)。
164
-
165
- ### 完整复杂条件示例
166
-
167
- ```bash
168
- # 报销初审→财务部专项复核:
169
- # AND条件:所属部门=财务部, 报销金额5k~10k, 发起时间≥报销日期,
170
- # OR条件:报销类型∈{差旅费,住宿费} OR 发票编号含 FP
171
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "财务部复核" \
172
- --rule "form:所属部门:等于:财务部" \
173
- --rule "form:报销金额:范围:5000:10000" \
174
- --rule "system:发起时间:大于等于:field:报销日期" \
175
- --rule "form:报销类型:属于:差旅费,住宿费|form:发票编号:包含:FP"
176
- ```
177
-
178
- ### 平台边界:不支持"前缀匹配"
179
-
180
- 出口条件**没有「以…开头 / 开头包含」运算符**。文本字段可用的比较符就是:等于、不等于、包含、不包含、为空、不为空——其中 **「包含」是全串包含**,`FP` 出现在编号任意位置都算命中,不限定开头。
181
-
182
- 写前缀操作会被当场拒绝,不会静默存错:
183
-
184
- ```bash
185
- e10-cli workflow condition add <wf> <sourceId> <nodeId> "FP发票" --rule "form:发票编号:开头包含:FP"
186
- # ❌ 字段 "发票编号" (类型=String) 不支持操作 "开头包含",可选: 等于, 不等于, 包含, 不包含, 为空, 不为空
187
- ```
188
-
189
- 要表达"编号以 FP 开头",按下列顺序选,**不要**把「包含」当「开头」用:
190
-
191
- 1. **编号规则本身前缀唯一**——同前缀不会出现在其他类别里,直接用「包含」,语义等价;
192
- 2. **取值有限**——用「属于」逐项枚举,如 `属于:FP001,FP002,FP003`;
193
- 3. **确实要严格前缀语义**——不在出口条件解决:改用节点提交校验(`workflow node validate`)或表单/编号规则层约束;
194
- 4. **都不行**——走平台需求,不要在方案里承诺出口条件支持前缀。
195
-
196
- > **判据以协议为准**:可用关系符的唯一权威来源是 `POST /api/workflow/pathdef/rule/condition/getRuleDesignCondition` 的当次响应(`otherItems` / `browserCompareOptions`),历史编码矩阵只作参考。协议里没有的语义,**直接判定不支持,不要用相近编码替代**——这条是平台接口文档的明确要求("关系符不含目标语义 → 不生成该叶子,不用相近编码替代")。
197
- >
198
- > 同理,`结尾包含`、正则匹配在这个域也不存在。
199
-
200
- ## 添加分支条件(原始 JSON,完整控制)
201
-
202
- 需要 4 步操作:
203
- ```bash
204
- # 1. 生成新连线 ID
205
- e10-cli workflow generate-link-id <workflowId> # → newLinkId
206
-
207
- # 2. 获取当前流程图 XML,在 XML 中添加新的 <mxCell edge="1"> 后保存
208
- e10-cli workflow save-layout <workflowId> @修改后的xml文件
209
-
210
- # 3. 保存条件规则(CLI 自动生成节点 ID,只需写条件逻辑)
211
- e10-cli workflow save-condition @条件.json --app-id <appId> # → conditionKey
212
-
213
- # 4. 绑定条件到连线
214
- e10-cli workflow set-link-condition-key <wf> <linkId> <key> <nodeId>
215
- ```
216
-
217
- > `--app-id` 用于自动生成唯一 ID。省略时透传原始 JSON(需自己填好所有 ID)。
218
-
219
- ## 条件 JSON 格式
220
-
221
- `childrens` 是**递归树结构**,叶子条件用 `selectType` 判断,分组条件用 `relation` + `childrens` 组合。**CLI 只自动生成 ID**(`expressionId`/`expressionBaseId`/`dataValueId`/`elementValue*Id`),其余字段必须按以下格式手写。
222
-
223
- **完整结构**:
224
- ```json
225
- {
226
- "source": 2,
227
- "sourceId": "连线ID",
228
- "workflowId": "流程ID",
229
- "conditionName": "条件名称",
230
- "linkName": "连线名称",
231
- "needFormfield": true,
232
- "readOnly": false,
233
- "mapBaseId": "表单ID",
234
- "isEdit": false,
235
- "isFromRuleListPage": true,
236
- "relation": 1,
237
- "childrens": [/* 叶子或分组 */]
238
- }
239
- ```
240
-
241
- ---
242
-
243
- ### 两种节点类型
244
-
245
- **叶子条件** — 有 `selectType`,无 `childrens`:
246
-
247
- **分组条件** — 有 `relation` + `childrens`,无 `selectType`:
248
-
249
- ```json
250
- { "relation": 1, "childrens": [/* 嵌套的叶子或分组 */] }
251
- ```
252
-
253
- > `selectType` 是数字 3 或 4。`relation`: 1=AND, 2=OR。
254
-
255
- ---
256
-
257
- ### 叶子条件:字段前缀由 fieldType 决定
258
-
259
- > **关键**:每组字段有 `{前缀}CompareOptionLeft`、`{前缀}ValueOptionLeft`、`{前缀}TextValueLeft1` 三件套。
260
-
261
- **Text / Textarea → `String*` 前缀**:
262
-
263
- ```json
264
- {
265
- "selectType": 4,
266
- "formField": [{ "supportContainType": false, "total": false, "name": "字段名", "id": "fieldId", "fieldType": "Text", "groupKey": "Text" }],
267
- "StringValueOptionLeft": 1,
268
- "StringCompareOptionLeft": 5,
269
- "StringTextValueLeft1": "要匹配的值",
270
- "valueType": "0"
271
- }
272
- ```
273
-
274
- **Number / Money / Int → `Number*` 前缀**:
275
-
276
- ```json
277
- {
278
- "selectType": 4,
279
- "formField": [{ "supportContainType": false, "total": false, "name": "金额", "id": "fieldId", "fieldType": "Money", "groupKey": "Money" }],
280
- "NumberValueOptionLeft": 1,
281
- "NumberCompareOptionLeft": 1,
282
- "NumberTextValueLeft1": "50000",
283
- "valueType": "1"
284
- }
285
- ```
286
-
287
- **Select / RadioBox / CheckBox → `Browser*` 前缀**:
288
-
289
- ```json
290
- {
291
- "selectType": 4,
292
- "formField": [{ "supportContainType": false, "total": false, "name": "字段名", "id": "fieldId", "fieldType": "Select", "groupKey": "Select" }],
293
- "BrowserCompareOptionLeft": "9",
294
- "BrowserValueOptionLeft": "1",
295
- "BrowserTextValueLeft1": [{ "id": "选项valueKey", "content": "选项名" }],
296
- "valueType": "0"
297
- }
298
- ```
299
-
300
- **Date / DateTime → `Date*` 前缀**:
301
-
302
- ```json
303
- {
304
- "selectType": 4,
305
- "formField": [{ "supportContainType": false, "total": false, "name": "日期", "id": "fieldId", "fieldType": "Date", "groupKey": "Date" }],
306
- "DateValueOptionLeft": 1,
307
- "DateCompareOptionLeft": 1,
308
- "DateTextValueLeft1": "2026-07-23",
309
- "valueType": "0"
310
- }
311
- ```
312
-
313
- **系统变量-字符串**(selectType=3, systemVariable="-1" 等):
314
-
315
- ```json
316
- {
317
- "selectType": 3,
318
- "systemVariable": "-1",
319
- "StringValueOptionLeft": 1,
320
- "StringCompareOptionLeft": 5,
321
- "StringTextValueLeft1": "值",
322
- "valueType": "0"
323
- }
324
- ```
325
-
326
- **系统变量-日期**(selectType=3, systemVariable="-3" 等):
327
-
328
- ```json
329
- {
330
- "selectType": 3,
331
- "systemVariable": "-3",
332
- "DateValueOptionLeft": 1,
333
- "DateCompareOptionLeft": 1,
334
- "DateTextValueLeft1": "2026-07-23",
335
- "valueType": "0"
336
- }
337
- ```
338
-
339
- ---
340
-
341
- ### formField 字段映射
342
-
343
- `formField` 需要**完整字段元数据**(不是精简格式)。直接从 `form read --app-id <appId> --out fields.json` 输出的字段对象中取,保留所有字段。
344
-
345
- `formField` 至少包含:`id`(fieldId)、`name`(fieldName)、`fieldType`、`detail`、`detailName`、`total`、`formId`、`sourceModule`、`layoutDetail`、`selectDataSource`、`groupKey`、`supportContainType`、`newFormDesigner`、`variable`、`valueCount`、`dataTemplateId`、`detailTableId`。
346
-
347
- > **不要精简**:碰到 `selectType: "4"` 就把 `form read` 返回的字段对象全量塞进 `formField` 数组。紧凑格式在 mulinquan 碰巧能过但不完整,eteams 直接拒绝。
348
-
349
- ---
350
-
351
- ## 查看已有条件
352
-
353
- ```bash
354
- # 列出工作流下所有连线绑定的条件(连线名 + 条件名 + 表达式 + mapId)
355
- e10-cli workflow condition list <workflowId> [--name <关键词>]
356
- # 查看单个条件详情(含中文表达式),id 可用 conditionKey / mapId / conditionId
357
- e10-cli workflow condition get <workflowId> <id>
358
- # 删除条件(自动解绑连线),id 同 get
359
- e10-cli workflow condition delete <workflowId> <id> [--link-id <linkId>]
360
- ```
361
-
362
- > **getConditionList 是「按连线」查询**:请求体需回传 getConditionSet 的完整上下文
363
- > (`sourceId`=连线 + `conditionName`=sourceName + `linkName` + `mapBaseId`/`conditionKey`
364
- > + `exitConditionMapBrowserInfo`/`conditionMapBrowserBean`),只传简化参数会返回空列表。
365
- > 删除时 `deleteConditions.mapIds` 需传 **mapId**(getConditionList 记录里的 mapId),不是 conditionKey。
366
-
367
- ---
368
-
369
- ### 前缀速查表
370
-
371
- | 字段类型 | selectType | 前缀 | CompareOption 类型 | valueType |
372
- |---------|-----------|------|--------------------|-----------|
373
- | Text / Textarea | 4 | `String` | number | `"0"` |
374
- | Number / Money / Int | 4 | `Number` | number | `"1"` |
375
- | Select / RadioBox / CheckBox | 4 | `Browser` | **string** | `"0"` |
376
- | Date / DateTime | 4 | `Date` | number | `"0"` |
377
- | 系统变量-字符串 | 3 | `String` | number | `"0"` |
378
- | 系统变量-日期 | 3 | `Date` | number | `"0"` |
379
- | 系统变量-下拉 | 3 | `SysBrowser` | — | `"0"` |
380
-
381
- ---
382
-
383
- ### 比较符(CompareOption)
384
-
385
- | 值 | 含义 |
386
- |---|------|
387
- | 1 | 大于 |
388
- | 2 | 大于等于 |
389
- | 3 | 小于 |
390
- | 4 | 小于等于 |
391
- | 5 | 等于 |
392
- | 6 | 不等于 |
393
- | 9 | 包含(文本/人员/部门)/ 属于(发起人/下拉) |
394
- | 10 | 不包含 / 不属于 |
395
- | 13 | 为空 |
396
- | 14 | 不为空 |
397
-
398
- > **易错**:`1` 是「大于」**不是**「大于等于」——`≥` 要用 `2`,`<` 用 `3`,`≤` 用 `4`。
399
- > Number/Date 字段用 1/2/3/4/5/6(数值、日期比较);Text 用 5/6/9/10(等于/不等于/包含/不包含);Select/Browser 用 9/10(属于/不属于)。完整矩阵见 operator-matrix.md。
400
-
401
- ---
402
-
403
- ### 树结构示例
404
-
405
- `合同子类型=采购类 AND 合同总金额≤50000`:
406
-
407
- ```json
408
- {
409
- "source": 2,
410
- "sourceId": "1294902940272197632",
411
- "workflowId": "1294602764921430016",
412
- "conditionName": "采购类5w快速通道",
413
- "linkName": "采购类5w快速通道",
414
- "needFormfield": true,
415
- "readOnly": false,
416
- "mapBaseId": "1294601519433310236",
417
- "isEdit": false,
418
- "isFromRuleListPage": true,
419
- "relation": 1,
420
- "childrens": [
421
- {
422
- "selectType": 4,
423
- "formField": [{"supportContainType":false,"total":false,"name":"合同子类型","id":"1294601519433310217","fieldType":"Select","groupKey":"Select"}],
424
- "BrowserCompareOptionLeft": "9",
425
- "BrowserValueOptionLeft": "1",
426
- "BrowserTextValueLeft1": [{"id":"1294601523677945864","content":"采购类"}],
427
- "valueType": "0"
428
- },
429
- {
430
- "selectType": 4,
431
- "formField": [{"supportContainType":false,"total":false,"name":"合同总金额","id":"1294601519433310221","fieldType":"Money","groupKey":"Money"}],
432
- "NumberCompareOptionLeft": 4,
433
- "NumberValueOptionLeft": 1,
434
- "NumberTextValueLeft1": "50000",
435
- "valueType": "1"
436
- }
437
- ]
438
- }
439
- ```
440
-
441
- > `expressionId`/`expressionBaseId`/`dataValueId`/`elementValue*Id` 省略,CLI 自动生成。
442
-
443
- ---
444
-
445
- ## 参考
446
-
447
- - [字段类型与关系符编码矩阵](operator-matrix.md) — 数字编码、字段类型矩阵、系统字段清单
1
+ # 流程分支条件指南
2
+
3
+ > 流程基础(建流程、节点、连线、审批人)见 `workflow/guide-workflow.md`。本指南专讲**分支/出口条件**:金额>1万走高级审批、合同类型=采购走快速通道这类路由。
4
+
5
+ ## 添加分支条件(简化语法,推荐)
6
+
7
+ **一行命令搞定**,自动校验字段类型、自动生成 API payload、自动绑定到连线:
8
+
9
+ 命令中的 `<sourceId>` 是要绑定条件的**连线 ID(linkId)**,`<nodeId>` 是该连线的**来源节点 ID(srcNodeId)**,不是目标节点 ID。可先执行 `workflow nodes <wf> --json` 或 `workflow link-list <wf>`,从同一条连线中取得这两个值。
10
+
11
+ > **AND / OR 规则写在「同一次调用」里**:要组合多条规则,一次 `add` 传多个 `--rule` + `--relation AND|OR`,例如
12
+ > `--rule "form:金额:大于:1000" --rule "system:流程标题:包含:合同" --relation AND`。
13
+ >
14
+ > **对同一连线重复 `add` 是「替换」,不是叠加**:第二次 `add` 会先保存新的条件集合,成功后再绑定到连线;保存或绑定失败不会先删掉旧条件。旧条件不自动删除,以免影响其他引用。这是刻意的——若允许跨调用叠加,极易产生 `(金额≥100万) AND (金额<100万)` 这类永远不成立的矛盾条件。因此**想给已有条件补一条规则,必须在新的 `add` 里把旧规则连同新规则一起写全**,不能靠再跑一次叠上去。
15
+ >
16
+ > **同源节点多分支**:一条连线只绑一个条件。要分多个分支,先给每个分支各建一条连线(`add-link`),再分别对每条连线 `add`。
17
+
18
+ ### 基础示例
19
+
20
+ ```bash
21
+ # 系统字段条件
22
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "条件名称" \
23
+ --rule "system:流程标题:包含:关键词"
24
+
25
+ # 数值范围条件
26
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "金额过万" \
27
+ --rule "system:流程超时(时):范围:1:72"
28
+
29
+ # 日期范围条件
30
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "今年发起" \
31
+ --rule "system:发起时间:范围:2026-01-01:2026-12-31"
32
+
33
+ # 为空/不为空
34
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "无部门" \
35
+ --rule "system:发起人部门:为空"
36
+
37
+ # 多规则 AND/OR 组合
38
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "复合条件" \
39
+ --rule "system:流程标题:包含:报销" \
40
+ --rule "system:流程超时(时):大于:24" \
41
+ --relation AND
42
+
43
+ # 表单字段条件(字段ID / 名称 / dataKey 均可匹配)
44
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "表单字段" \
45
+ --rule "form:<字段ID>:大于:1000" # 按 fieldId
46
+ --rule "form:申请金额:大于:1000" # 按字段名
47
+ --rule "form:je_2831:大于:1000" # 按 dataKey(原生流程表单 fieldId 会变,用 dataKey 最稳)
48
+ ```
49
+
50
+ ### 选项类字段(Select/CheckBox/RadioBox):用"属于"或"包含"
51
+
52
+ 选项类字段归 Browser 族,用 `属于`(= `包含`,code 9)匹配任一选项:
53
+
54
+ ```bash
55
+ # 合同类型=采购类(单个选项)
56
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "采购类合同" \
57
+ --rule "form:合同类型:属于:采购类"
58
+
59
+ # 报销类型∈{差旅费,住宿费}(多个选项,逗号分隔)
60
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "差旅住宿报销" \
61
+ --rule "form:报销类型:属于:差旅费,住宿费"
62
+
63
+ # 也可以直接用"包含"(等价)
64
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "招待费报销" \
65
+ --rule "form:报销类型:包含:招待费"
66
+
67
+ # 不包含/不属于
68
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "非采购类" \
69
+ --rule "form:合同类型:不属于:采购类"
70
+ ```
71
+
72
+ > `属于` 和 `包含` 是**别名**,底层都是 code 9("包含或属于"),由平台显示语义。对 Select/CheckBox/RadioBox 选项字段,建议用 `属于`;对文本/人员字段用 `包含`。
73
+
74
+ ### 人员/部门字段
75
+
76
+ 人员/部门字段值走浏览器解析,用逗号分隔多值:
77
+
78
+ ```bash
79
+ # 报销人=闫宇或吴鹏(人员多选)
80
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "闫宇或吴鹏报销" \
81
+ --rule "form:报销人:等于:闫宇,吴鹏"
82
+
83
+ # 所属部门=财务部
84
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "财务部报销" \
85
+ --rule "form:所属部门:等于:财务部"
86
+
87
+ # 部门不含子部门
88
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "本部门" \
89
+ --rule "form:所属部门:等于:财务部:不包含子部门"
90
+ ```
91
+
92
+ ### 字段 vs 字段比较(变量模式)
93
+
94
+ 用 `field` 关键字表示值来自另一个字段,而非字面值:
95
+
96
+ ```bash
97
+ # 发起时间 ≥ 报销日期(系统字段 vs 表单字段)
98
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "先报销后发起" \
99
+ --rule "system:发起时间:大于等于:field:报销日期"
100
+
101
+ # 发票日期 < 报销日期(表单字段 vs 表单字段)
102
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "发票早于报销日期" \
103
+ --rule "form:发票日期:小于:field:报销日期"
104
+
105
+ # 数值字段 vs 字段
106
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "超标" \
107
+ --rule "form:实际金额:大于:field:预算金额"
108
+ ```
109
+
110
+ > **语法**:`来源:左字段:操作:field:右字段`。`field` 是固定关键字,表示右边是字段引用不是字面值。支持 `system` 和 `form` 两种来源,适用范围:`大于`/`小于`/`等于`/`不等于`/`大于等于`/`小于等于`。
111
+
112
+ ### 明细字段条件
113
+
114
+ 末尾量词 `:任一`(任一行满足,**缺省**) / `:所有`(所有行满足):
115
+
116
+ > **量词只对明细字段生效**:它决定"明细任一行 / 所有行"的语义,只有左字段属于明细表时才会写入配置。**写在主表字段上会被忽略且不报错**——主表字段直接省略量词。明细字段省略量词时按"任一行"处理。
117
+
118
+ ```bash
119
+ # 明细任一行金额>1万
120
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "明细金额过万" \
121
+ --rule "form:明细金额:大于:10000:任一"
122
+
123
+ # 明细所有行数量都在 1~100
124
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "明细数量范围" \
125
+ --rule "form:明细数量:范围:1:100:所有"
126
+
127
+ # 明细字段 vs 字段(发票日期 < 报销日期)
128
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "明细发票日期" \
129
+ --rule "form:发票日期:小于:field:报销日期:任一"
130
+ ```
131
+
132
+ 明细量与主表条件组合(同一次调用内,多条 `--rule` 默认 AND):
133
+
134
+ ```bash
135
+ # 所属部门=财务部 AND 明细任一行金额>1万
136
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "财务部大额明细" \
137
+ --rule "form:所属部门:等于:财务部" \
138
+ --rule "form:明细金额:大于:10000:任一"
139
+
140
+ # 明细所有行数量都在 1~100 AND (发起时间≥报销日期)
141
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "明细数量且时间" \
142
+ --rule "form:明细数量:范围:1:100:所有" \
143
+ --rule "system:发起时间:大于等于:field:报销日期"
144
+ ```
145
+
146
+ > 需要"明细任一行满足 A **或** 任一行满足 B"时,用 `|` 把两条明细规则串在同一条 `--rule` 里(见下方 OR 分组),两条各带各的量词。
147
+
148
+ ### OR 分组:用 `|` 分隔子规则
149
+
150
+ 同一条 `--rule` 内用 `|` 分隔表示 OR 关系:
151
+
152
+ ```bash
153
+ # 报销类型∈{差旅费,住宿费} OR 发票编号含 FP(两个都是主表字段,不带量词)
154
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "差旅住宿或含FP发票" \
155
+ --rule "form:报销类型:属于:差旅费,住宿费|form:发票编号:包含:FP"
156
+
157
+ # 报销金额>10000 OR 紧急程度=紧急
158
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "大额或紧急" \
159
+ --rule "form:报销金额:大于:10000" \
160
+ --rule "system:紧急程度:等于:紧急"
161
+ ```
162
+
163
+ > 单条 `--rule` 内用 `|` 分隔的子规则是 OR 关系;多条 `--rule` 之间默认 AND 关系(`--relation OR` 可改)。
164
+
165
+ ### 完整复杂条件示例
166
+
167
+ ```bash
168
+ # 报销初审→财务部专项复核:
169
+ # AND条件:所属部门=财务部, 报销金额5k~10k, 发起时间≥报销日期,
170
+ # OR条件:报销类型∈{差旅费,住宿费} OR 发票编号含 FP
171
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "财务部复核" \
172
+ --rule "form:所属部门:等于:财务部" \
173
+ --rule "form:报销金额:范围:5000:10000" \
174
+ --rule "system:发起时间:大于等于:field:报销日期" \
175
+ --rule "form:报销类型:属于:差旅费,住宿费|form:发票编号:包含:FP"
176
+ ```
177
+
178
+ ### 平台边界:不支持"前缀匹配"
179
+
180
+ 出口条件**没有「以…开头 / 开头包含」运算符**。文本字段可用的比较符就是:等于、不等于、包含、不包含、为空、不为空——其中 **「包含」是全串包含**,`FP` 出现在编号任意位置都算命中,不限定开头。
181
+
182
+ 写前缀操作会被当场拒绝,不会静默存错:
183
+
184
+ ```bash
185
+ e10-cli workflow condition add <wf> <sourceId> <nodeId> "FP发票" --rule "form:发票编号:开头包含:FP"
186
+ # ❌ 字段 "发票编号" (类型=String) 不支持操作 "开头包含",可选: 等于, 不等于, 包含, 不包含, 为空, 不为空
187
+ ```
188
+
189
+ 要表达"编号以 FP 开头",按下列顺序选,**不要**把「包含」当「开头」用:
190
+
191
+ 1. **编号规则本身前缀唯一**——同前缀不会出现在其他类别里,直接用「包含」,语义等价;
192
+ 2. **取值有限**——用「属于」逐项枚举,如 `属于:FP001,FP002,FP003`;
193
+ 3. **确实要严格前缀语义**——不在出口条件解决:改用节点提交校验(`workflow node validate`)或表单/编号规则层约束;
194
+ 4. **都不行**——走平台需求,不要在方案里承诺出口条件支持前缀。
195
+
196
+ > **判据以协议为准**:可用关系符的唯一权威来源是 `POST /api/workflow/pathdef/rule/condition/getRuleDesignCondition` 的当次响应(`otherItems` / `browserCompareOptions`),历史编码矩阵只作参考。协议里没有的语义,**直接判定不支持,不要用相近编码替代**——这条是平台接口文档的明确要求("关系符不含目标语义 → 不生成该叶子,不用相近编码替代")。
197
+ >
198
+ > 同理,`结尾包含`、正则匹配在这个域也不存在。
199
+
200
+ ## 添加分支条件(原始 JSON,完整控制)
201
+
202
+ 需要 4 步操作:
203
+ ```bash
204
+ # 1. 生成新连线 ID
205
+ e10-cli workflow generate-link-id <workflowId> # → newLinkId
206
+
207
+ # 2. 获取当前流程图 XML,在 XML 中添加新的 <mxCell edge="1"> 后保存
208
+ e10-cli workflow save-layout <workflowId> @修改后的xml文件
209
+
210
+ # 3. 保存条件规则(CLI 自动生成节点 ID,只需写条件逻辑)
211
+ e10-cli workflow save-condition @条件.json --app-id <appId> # → conditionKey
212
+
213
+ # 4. 绑定条件到连线
214
+ e10-cli workflow set-link-condition-key <wf> <linkId> <key> <nodeId>
215
+ ```
216
+
217
+ > `--app-id` 用于自动生成唯一 ID。省略时透传原始 JSON(需自己填好所有 ID)。
218
+
219
+ ## 条件 JSON 格式
220
+
221
+ `childrens` 是**递归树结构**,叶子条件用 `selectType` 判断,分组条件用 `relation` + `childrens` 组合。**CLI 只自动生成 ID**(`expressionId`/`expressionBaseId`/`dataValueId`/`elementValue*Id`),其余字段必须按以下格式手写。
222
+
223
+ **完整结构**:
224
+ ```json
225
+ {
226
+ "source": 2,
227
+ "sourceId": "连线ID",
228
+ "workflowId": "流程ID",
229
+ "conditionName": "条件名称",
230
+ "linkName": "连线名称",
231
+ "needFormfield": true,
232
+ "readOnly": false,
233
+ "mapBaseId": "表单ID",
234
+ "isEdit": false,
235
+ "isFromRuleListPage": true,
236
+ "relation": 1,
237
+ "childrens": [/* 叶子或分组 */]
238
+ }
239
+ ```
240
+
241
+ ---
242
+
243
+ ### 两种节点类型
244
+
245
+ **叶子条件** — 有 `selectType`,无 `childrens`:
246
+
247
+ **分组条件** — 有 `relation` + `childrens`,无 `selectType`:
248
+
249
+ ```json
250
+ { "relation": 1, "childrens": [/* 嵌套的叶子或分组 */] }
251
+ ```
252
+
253
+ > `selectType` 是数字 3 或 4。`relation`: 1=AND, 2=OR。
254
+
255
+ ---
256
+
257
+ ### 叶子条件:字段前缀由 fieldType 决定
258
+
259
+ > **关键**:每组字段有 `{前缀}CompareOptionLeft`、`{前缀}ValueOptionLeft`、`{前缀}TextValueLeft1` 三件套。
260
+
261
+ **Text / Textarea → `String*` 前缀**:
262
+
263
+ ```json
264
+ {
265
+ "selectType": 4,
266
+ "formField": [{ "supportContainType": false, "total": false, "name": "字段名", "id": "fieldId", "fieldType": "Text", "groupKey": "Text" }],
267
+ "StringValueOptionLeft": 1,
268
+ "StringCompareOptionLeft": 5,
269
+ "StringTextValueLeft1": "要匹配的值",
270
+ "valueType": "0"
271
+ }
272
+ ```
273
+
274
+ **Number / Money / Int → `Number*` 前缀**:
275
+
276
+ ```json
277
+ {
278
+ "selectType": 4,
279
+ "formField": [{ "supportContainType": false, "total": false, "name": "金额", "id": "fieldId", "fieldType": "Money", "groupKey": "Money" }],
280
+ "NumberValueOptionLeft": 1,
281
+ "NumberCompareOptionLeft": 1,
282
+ "NumberTextValueLeft1": "50000",
283
+ "valueType": "1"
284
+ }
285
+ ```
286
+
287
+ **Select / RadioBox / CheckBox → `Browser*` 前缀**:
288
+
289
+ ```json
290
+ {
291
+ "selectType": 4,
292
+ "formField": [{ "supportContainType": false, "total": false, "name": "字段名", "id": "fieldId", "fieldType": "Select", "groupKey": "Select" }],
293
+ "BrowserCompareOptionLeft": "9",
294
+ "BrowserValueOptionLeft": "1",
295
+ "BrowserTextValueLeft1": [{ "id": "选项valueKey", "content": "选项名" }],
296
+ "valueType": "0"
297
+ }
298
+ ```
299
+
300
+ **Date / DateTime → `Date*` 前缀**:
301
+
302
+ ```json
303
+ {
304
+ "selectType": 4,
305
+ "formField": [{ "supportContainType": false, "total": false, "name": "日期", "id": "fieldId", "fieldType": "Date", "groupKey": "Date" }],
306
+ "DateValueOptionLeft": 1,
307
+ "DateCompareOptionLeft": 1,
308
+ "DateTextValueLeft1": "2026-07-23",
309
+ "valueType": "0"
310
+ }
311
+ ```
312
+
313
+ **系统变量-字符串**(selectType=3, systemVariable="-1" 等):
314
+
315
+ ```json
316
+ {
317
+ "selectType": 3,
318
+ "systemVariable": "-1",
319
+ "StringValueOptionLeft": 1,
320
+ "StringCompareOptionLeft": 5,
321
+ "StringTextValueLeft1": "值",
322
+ "valueType": "0"
323
+ }
324
+ ```
325
+
326
+ **系统变量-日期**(selectType=3, systemVariable="-3" 等):
327
+
328
+ ```json
329
+ {
330
+ "selectType": 3,
331
+ "systemVariable": "-3",
332
+ "DateValueOptionLeft": 1,
333
+ "DateCompareOptionLeft": 1,
334
+ "DateTextValueLeft1": "2026-07-23",
335
+ "valueType": "0"
336
+ }
337
+ ```
338
+
339
+ ---
340
+
341
+ ### formField 字段映射
342
+
343
+ `formField` 需要**完整字段元数据**(不是精简格式)。直接从 `form read --app-id <appId> --out fields.json` 输出的字段对象中取,保留所有字段。
344
+
345
+ `formField` 至少包含:`id`(fieldId)、`name`(fieldName)、`fieldType`、`detail`、`detailName`、`total`、`formId`、`sourceModule`、`layoutDetail`、`selectDataSource`、`groupKey`、`supportContainType`、`newFormDesigner`、`variable`、`valueCount`、`dataTemplateId`、`detailTableId`。
346
+
347
+ > **不要精简**:碰到 `selectType: "4"` 就把 `form read` 返回的字段对象全量塞进 `formField` 数组。紧凑格式在 mulinquan 碰巧能过但不完整,eteams 直接拒绝。
348
+
349
+ ---
350
+
351
+ ## 查看已有条件
352
+
353
+ ```bash
354
+ # 列出工作流下所有连线绑定的条件(连线名 + 条件名 + 表达式 + mapId)
355
+ e10-cli workflow condition list <workflowId> [--name <关键词>]
356
+ # 查看单个条件详情(含中文表达式),id 可用 conditionKey / mapId / conditionId
357
+ e10-cli workflow condition get <workflowId> <id>
358
+ # 删除条件(自动解绑连线),id 同 get
359
+ e10-cli workflow condition delete <workflowId> <id> [--link-id <linkId>]
360
+ ```
361
+
362
+ > **getConditionList 是「按连线」查询**:请求体需回传 getConditionSet 的完整上下文
363
+ > (`sourceId`=连线 + `conditionName`=sourceName + `linkName` + `mapBaseId`/`conditionKey`
364
+ > + `exitConditionMapBrowserInfo`/`conditionMapBrowserBean`),只传简化参数会返回空列表。
365
+ > 删除时 `deleteConditions.mapIds` 需传 **mapId**(getConditionList 记录里的 mapId),不是 conditionKey。
366
+
367
+ ---
368
+
369
+ ### 前缀速查表
370
+
371
+ | 字段类型 | selectType | 前缀 | CompareOption 类型 | valueType |
372
+ |---------|-----------|------|--------------------|-----------|
373
+ | Text / Textarea | 4 | `String` | number | `"0"` |
374
+ | Number / Money / Int | 4 | `Number` | number | `"1"` |
375
+ | Select / RadioBox / CheckBox | 4 | `Browser` | **string** | `"0"` |
376
+ | Date / DateTime | 4 | `Date` | number | `"0"` |
377
+ | 系统变量-字符串 | 3 | `String` | number | `"0"` |
378
+ | 系统变量-日期 | 3 | `Date` | number | `"0"` |
379
+ | 系统变量-下拉 | 3 | `SysBrowser` | — | `"0"` |
380
+
381
+ ---
382
+
383
+ ### 比较符(CompareOption)
384
+
385
+ | 值 | 含义 |
386
+ |---|------|
387
+ | 1 | 大于 |
388
+ | 2 | 大于等于 |
389
+ | 3 | 小于 |
390
+ | 4 | 小于等于 |
391
+ | 5 | 等于 |
392
+ | 6 | 不等于 |
393
+ | 9 | 包含(文本/人员/部门)/ 属于(发起人/下拉) |
394
+ | 10 | 不包含 / 不属于 |
395
+ | 13 | 为空 |
396
+ | 14 | 不为空 |
397
+
398
+ > **易错**:`1` 是「大于」**不是**「大于等于」——`≥` 要用 `2`,`<` 用 `3`,`≤` 用 `4`。
399
+ > Number/Date 字段用 1/2/3/4/5/6(数值、日期比较);Text 用 5/6/9/10(等于/不等于/包含/不包含);Select/Browser 用 9/10(属于/不属于)。完整矩阵见 operator-matrix.md。
400
+
401
+ ---
402
+
403
+ ### 树结构示例
404
+
405
+ `合同子类型=采购类 AND 合同总金额≤50000`:
406
+
407
+ ```json
408
+ {
409
+ "source": 2,
410
+ "sourceId": "1294902940272197632",
411
+ "workflowId": "1294602764921430016",
412
+ "conditionName": "采购类5w快速通道",
413
+ "linkName": "采购类5w快速通道",
414
+ "needFormfield": true,
415
+ "readOnly": false,
416
+ "mapBaseId": "1294601519433310236",
417
+ "isEdit": false,
418
+ "isFromRuleListPage": true,
419
+ "relation": 1,
420
+ "childrens": [
421
+ {
422
+ "selectType": 4,
423
+ "formField": [{"supportContainType":false,"total":false,"name":"合同子类型","id":"1294601519433310217","fieldType":"Select","groupKey":"Select"}],
424
+ "BrowserCompareOptionLeft": "9",
425
+ "BrowserValueOptionLeft": "1",
426
+ "BrowserTextValueLeft1": [{"id":"1294601523677945864","content":"采购类"}],
427
+ "valueType": "0"
428
+ },
429
+ {
430
+ "selectType": 4,
431
+ "formField": [{"supportContainType":false,"total":false,"name":"合同总金额","id":"1294601519433310221","fieldType":"Money","groupKey":"Money"}],
432
+ "NumberCompareOptionLeft": 4,
433
+ "NumberValueOptionLeft": 1,
434
+ "NumberTextValueLeft1": "50000",
435
+ "valueType": "1"
436
+ }
437
+ ]
438
+ }
439
+ ```
440
+
441
+ > `expressionId`/`expressionBaseId`/`dataValueId`/`elementValue*Id` 省略,CLI 自动生成。
442
+
443
+ ---
444
+
445
+ ## 参考
446
+
447
+ - [字段类型与关系符编码矩阵](operator-matrix.md) — 数字编码、字段类型矩阵、系统字段清单
448
+
449
+
450
+ ## 公共条件核心(出口、操作者批次、共享、子流程、权责表)
451
+
452
+ 上述五个场景使用同一编译器,不会因规则复杂而跳转调用另一个 CLI。编译返回条件树,业务适配层分别按 source=2/3/24/7 及权责表场景保存、绑定;矩阵规则和节点字段校验不在此范围。
453
+
454
+ ```bash
455
+ # 只解析,不写入
456
+ e10-cli workflow condition add <wf> <linkId> <srcNodeId> 测试 --rule "form:金额:范围:10000:100000" --preview
457
+ # 保存后回读完整条件树
458
+ e10-cli workflow condition get <wf> <conditionKey> --tree --json
459
+ # 读取本环境条件编辑器契约
460
+ e10-cli workflow condition schema <wf> <linkId> --source 2
461
+ # 与操作者类型无关;只改指定批次条件,保留其余配置
462
+ e10-cli workflow operator-batch list <wf> <nodeId>
463
+ e10-cli workflow operator-batch set-condition <wf> <nodeId> <groupId> <operatorSetId> --rule "form:金额:范围:10000:100000"
464
+ ```
465
+
466
+ 出口、批次、子流程 `set-condition` 均支持 `--rules-json @条件.json`,与 `--rule` 互斥;也支持 `--preview`。共享用 `condition.rules`,权责表用 `branches[].condition.rules`。结构化叶子为 `{source:"form",field:"金额",op:"范围",value:10000,upper:100000}`;组合为 `{relation:"AND",rules:[叶子或子组]}`。权责表原有 `operator`、`detail:any/all` 拼写仍兼容。
467
+
468
+ - 范围不包含两端;含边界请用两条比较。`大于:10000:小于:100000` 会报错,不再静默丢弃上界。
469
+ - 名称匹配必须唯一;浏览值支持准确 ID,或结构化 `{id:"ID",content:"名称"}`,不取第一条模糊结果。
470
+ - 明细合计与明细字段可能共享 ID;普通 ID 指字段本身,合计请用“字段名(合计)”。
471
+ - 普通权责表变量尊重 `detail=false`,不因 detailName=变量而增加明细量词。
472
+ - Switch 的“是/否”转为平台 Switch 等于 1/0;真正 Bool 使用 23/24。
473
+ - 已移除无人调用的旧 `buildConditionChildrens`/`saveWorkflowCondition` 及仅保存描述的 `--batch-condition`。
474
+ - `workflow save-condition` 仍是有效的原始平台 JSON 高级入口,保留兼容;它不解析上述规则字符串。建议常规配置使用公共条件命令,原始 JSON 路径不属于本次统一语法。
475
+
476
+ 详见 [公共条件契约及验证](condition-core-contract.md)。