weaver-e10-builder 1.0.12-beta → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +17 -3
  3. package/dist/commands/actionflow.js.map +1 -1
  4. package/dist/commands/auth.d.ts.map +1 -1
  5. package/dist/commands/auth.js +3 -0
  6. package/dist/commands/auth.js.map +1 -1
  7. package/dist/commands/form-association-manage.d.ts +3 -0
  8. package/dist/commands/form-association-manage.d.ts.map +1 -0
  9. package/dist/commands/form-association-manage.js +76 -0
  10. package/dist/commands/form-association-manage.js.map +1 -0
  11. package/dist/commands/form-association.d.ts.map +1 -1
  12. package/dist/commands/form-association.js +29 -25
  13. package/dist/commands/form-association.js.map +1 -1
  14. package/dist/commands/form-button.d.ts.map +1 -1
  15. package/dist/commands/form-button.js +71 -159
  16. package/dist/commands/form-button.js.map +1 -1
  17. package/dist/commands/form-field-linkage.d.ts +3 -0
  18. package/dist/commands/form-field-linkage.d.ts.map +1 -0
  19. package/dist/commands/form-field-linkage.js +300 -0
  20. package/dist/commands/form-field-linkage.js.map +1 -0
  21. package/dist/commands/form-list-columns.d.ts +3 -0
  22. package/dist/commands/form-list-columns.d.ts.map +1 -0
  23. package/dist/commands/form-list-columns.js +50 -0
  24. package/dist/commands/form-list-columns.js.map +1 -0
  25. package/dist/commands/form-list-stats.d.ts +0 -8
  26. package/dist/commands/form-list-stats.d.ts.map +1 -1
  27. package/dist/commands/form-list-stats.js +41 -133
  28. package/dist/commands/form-list-stats.js.map +1 -1
  29. package/dist/commands/form-list.d.ts.map +1 -1
  30. package/dist/commands/form-list.js +2 -126
  31. package/dist/commands/form-list.js.map +1 -1
  32. package/dist/commands/form.d.ts.map +1 -1
  33. package/dist/commands/form.js +116 -2
  34. package/dist/commands/form.js.map +1 -1
  35. package/dist/commands/interface.d.ts +3 -0
  36. package/dist/commands/interface.d.ts.map +1 -0
  37. package/dist/commands/interface.js +51 -0
  38. package/dist/commands/interface.js.map +1 -0
  39. package/dist/commands/menu-permission.d.ts.map +1 -1
  40. package/dist/commands/menu-permission.js +133 -82
  41. package/dist/commands/menu-permission.js.map +1 -1
  42. package/dist/commands/skill.js +2 -2
  43. package/dist/commands/skill.js.map +1 -1
  44. package/dist/commands/update.d.ts +13 -0
  45. package/dist/commands/update.d.ts.map +1 -0
  46. package/dist/commands/update.js +101 -0
  47. package/dist/commands/update.js.map +1 -0
  48. package/dist/commands/workflow-node-empty-handle.d.ts +13 -0
  49. package/dist/commands/workflow-node-empty-handle.d.ts.map +1 -0
  50. package/dist/commands/workflow-node-empty-handle.js +137 -0
  51. package/dist/commands/workflow-node-empty-handle.js.map +1 -0
  52. package/dist/commands/workflow.d.ts.map +1 -1
  53. package/dist/commands/workflow.js +90 -18
  54. package/dist/commands/workflow.js.map +1 -1
  55. package/dist/index.js +8 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/postinstall.d.ts +2 -0
  58. package/dist/postinstall.d.ts.map +1 -0
  59. package/dist/postinstall.js +17 -0
  60. package/dist/postinstall.js.map +1 -0
  61. package/dist/services/actionflow/command_output.d.ts +4 -0
  62. package/dist/services/actionflow/command_output.d.ts.map +1 -1
  63. package/dist/services/actionflow/command_output.js +44 -0
  64. package/dist/services/actionflow/command_output.js.map +1 -1
  65. package/dist/services/actionflow/component_registry.d.ts.map +1 -1
  66. package/dist/services/actionflow/component_registry.js +5 -1
  67. package/dist/services/actionflow/component_registry.js.map +1 -1
  68. package/dist/services/actionflow/components/action_eb_add.js +1 -1
  69. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  70. package/dist/services/actionflow/components/approve_trigger.d.ts +5 -0
  71. package/dist/services/actionflow/components/approve_trigger.d.ts.map +1 -1
  72. package/dist/services/actionflow/components/approve_trigger.js +22 -1
  73. package/dist/services/actionflow/components/approve_trigger.js.map +1 -1
  74. package/dist/services/actionflow/components/approve_trigger_compiler.js +2 -2
  75. package/dist/services/actionflow/components/approve_trigger_compiler.js.map +1 -1
  76. package/dist/services/actionflow/components/custom_trigger.d.ts +9 -0
  77. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -0
  78. package/dist/services/actionflow/components/custom_trigger.js +47 -0
  79. package/dist/services/actionflow/components/custom_trigger.js.map +1 -0
  80. package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
  81. package/dist/services/actionflow/components/enquiry_form.js +29 -3
  82. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  83. package/dist/services/actionflow/components/event_button.d.ts +3 -0
  84. package/dist/services/actionflow/components/event_button.d.ts.map +1 -0
  85. package/dist/services/actionflow/components/event_button.js +32 -0
  86. package/dist/services/actionflow/components/event_button.js.map +1 -0
  87. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  88. package/dist/services/actionflow/components/index.js +10 -0
  89. package/dist/services/actionflow/components/index.js.map +1 -1
  90. package/dist/services/actionflow/components/inner_mq_listener.d.ts +3 -0
  91. package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -0
  92. package/dist/services/actionflow/components/inner_mq_listener.js +40 -0
  93. package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -0
  94. package/dist/services/actionflow/components/inner_mq_send.d.ts +5 -0
  95. package/dist/services/actionflow/components/inner_mq_send.d.ts.map +1 -0
  96. package/dist/services/actionflow/components/inner_mq_send.js +72 -0
  97. package/dist/services/actionflow/components/inner_mq_send.js.map +1 -0
  98. package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
  99. package/dist/services/actionflow/components/send_message.js +7 -4
  100. package/dist/services/actionflow/components/send_message.js.map +1 -1
  101. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  102. package/dist/services/actionflow/context_preflight.js +7 -1
  103. package/dist/services/actionflow/context_preflight.js.map +1 -1
  104. package/dist/services/actionflow/design_client.d.ts +13 -2
  105. package/dist/services/actionflow/design_client.d.ts.map +1 -1
  106. package/dist/services/actionflow/design_client.js +56 -8
  107. package/dist/services/actionflow/design_client.js.map +1 -1
  108. package/dist/services/actionflow/enrich_approve_trigger.d.ts.map +1 -1
  109. package/dist/services/actionflow/enrich_approve_trigger.js +31 -0
  110. package/dist/services/actionflow/enrich_approve_trigger.js.map +1 -1
  111. package/dist/services/actionflow/form_source.d.ts +2 -0
  112. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  113. package/dist/services/actionflow/form_source.js +5 -0
  114. package/dist/services/actionflow/form_source.js.map +1 -1
  115. package/dist/services/actionflow/formula_service.d.ts +1 -1
  116. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  117. package/dist/services/actionflow/formula_service.js +118 -12
  118. package/dist/services/actionflow/formula_service.js.map +1 -1
  119. package/dist/services/actionflow/functions_catalog.d.ts +2 -1
  120. package/dist/services/actionflow/functions_catalog.d.ts.map +1 -1
  121. package/dist/services/actionflow/functions_catalog.js +2392 -180
  122. package/dist/services/actionflow/functions_catalog.js.map +1 -1
  123. package/dist/services/actionflow/functions_source.d.ts.map +1 -1
  124. package/dist/services/actionflow/functions_source.js +3 -0
  125. package/dist/services/actionflow/functions_source.js.map +1 -1
  126. package/dist/services/actionflow/generation_service.d.ts +11 -0
  127. package/dist/services/actionflow/generation_service.d.ts.map +1 -1
  128. package/dist/services/actionflow/generation_service.js +66 -23
  129. package/dist/services/actionflow/generation_service.js.map +1 -1
  130. package/dist/services/actionflow/plan_constraints.d.ts +5 -0
  131. package/dist/services/actionflow/plan_constraints.d.ts.map +1 -0
  132. package/dist/services/actionflow/plan_constraints.js +54 -0
  133. package/dist/services/actionflow/plan_constraints.js.map +1 -0
  134. package/dist/services/actionflow/preflight_service.d.ts +3 -0
  135. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  136. package/dist/services/actionflow/preflight_service.js +152 -8
  137. package/dist/services/actionflow/preflight_service.js.map +1 -1
  138. package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
  139. package/dist/services/actionflow/readback_verifier.js +63 -2
  140. package/dist/services/actionflow/readback_verifier.js.map +1 -1
  141. package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
  142. package/dist/services/actionflow/save_workflow_draft.js +43 -2
  143. package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
  144. package/dist/services/actionflow/update_service.d.ts +41 -0
  145. package/dist/services/actionflow/update_service.d.ts.map +1 -0
  146. package/dist/services/actionflow/update_service.js +767 -0
  147. package/dist/services/actionflow/update_service.js.map +1 -0
  148. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  149. package/dist/services/actionflow/workflow_compiler.js +120 -12
  150. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  151. package/dist/services/esb-interface/document-parser.d.ts +6 -0
  152. package/dist/services/esb-interface/document-parser.d.ts.map +1 -0
  153. package/dist/services/esb-interface/document-parser.js +247 -0
  154. package/dist/services/esb-interface/document-parser.js.map +1 -0
  155. package/dist/services/esb-interface/importer.d.ts +9 -0
  156. package/dist/services/esb-interface/importer.d.ts.map +1 -0
  157. package/dist/services/esb-interface/importer.js +44 -0
  158. package/dist/services/esb-interface/importer.js.map +1 -0
  159. package/dist/services/esb-interface/postman-collection.d.ts +9 -0
  160. package/dist/services/esb-interface/postman-collection.d.ts.map +1 -0
  161. package/dist/services/esb-interface/postman-collection.js +125 -0
  162. package/dist/services/esb-interface/postman-collection.js.map +1 -0
  163. package/dist/services/esb-interface/types.d.ts +91 -0
  164. package/dist/services/esb-interface/types.d.ts.map +1 -0
  165. package/dist/services/esb-interface/types.js +2 -0
  166. package/dist/services/esb-interface/types.js.map +1 -0
  167. package/dist/services/form-association.d.ts +49 -0
  168. package/dist/services/form-association.d.ts.map +1 -0
  169. package/dist/services/form-association.js +279 -0
  170. package/dist/services/form-association.js.map +1 -0
  171. package/dist/services/form-button-position.d.ts +35 -0
  172. package/dist/services/form-button-position.d.ts.map +1 -0
  173. package/dist/services/form-button-position.js +109 -0
  174. package/dist/services/form-button-position.js.map +1 -0
  175. package/dist/services/form-list-columns.d.ts +54 -0
  176. package/dist/services/form-list-columns.d.ts.map +1 -0
  177. package/dist/services/form-list-columns.js +236 -0
  178. package/dist/services/form-list-columns.js.map +1 -0
  179. package/dist/services/form-list-stats.d.ts +44 -0
  180. package/dist/services/form-list-stats.d.ts.map +1 -0
  181. package/dist/services/form-list-stats.js +302 -0
  182. package/dist/services/form-list-stats.js.map +1 -0
  183. package/dist/services/skill-provision.d.ts +6 -1
  184. package/dist/services/skill-provision.d.ts.map +1 -1
  185. package/dist/services/skill-provision.js +12 -2
  186. package/dist/services/skill-provision.js.map +1 -1
  187. package/dist/services/update-check.d.ts +24 -0
  188. package/dist/services/update-check.d.ts.map +1 -0
  189. package/dist/services/update-check.js +108 -0
  190. package/dist/services/update-check.js.map +1 -0
  191. package/package.json +2 -1
  192. package/skill-docs/SKILL.md +29 -107
  193. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +61 -39
  194. package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -21
  195. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +23 -21
  196. package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +101 -75
  197. package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +33 -0
  198. package/skill-docs/actionflows/references/components/logic/Condition.md +23 -23
  199. package/skill-docs/actionflows/references/components/message/InnerMQSend.md +40 -0
  200. package/skill-docs/actionflows/references/components/message/SendMessage.md +2 -2
  201. package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +45 -0
  202. package/skill-docs/actionflows/references/components/trigger/InnerMQListener.md +40 -0
  203. package/skill-docs/actionflows/references/components/workflow/ApproveTrigger.md +35 -0
  204. package/skill-docs/actionflows/references/condition_rules.md +4 -2
  205. package/skill-docs/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -1046
  206. package/skill-docs/actionflows/references/trigger_runtime_notes.md +53 -51
  207. package/skill-docs/references/common/guide-plan-template.md +201 -0
  208. package/skill-docs/references/common/ref-cli-commands.md +45 -11
  209. package/skill-docs/references/form/guide-create-form.md +4 -2
  210. package/skill-docs/references/form/guide-field-linkage.md +121 -0
  211. package/skill-docs/references/form/guide-form-association.md +108 -0
  212. package/skill-docs/references/form/guide-form-button.md +54 -0
  213. package/skill-docs/references/form/guide-form-view.md +26 -9
  214. package/skill-docs/references/form/guide-list-columns.md +52 -0
  215. package/skill-docs/references/form/guide-list-stats.md +83 -0
  216. package/skill-docs/references/workflow/guide-workflow-action.md +172 -168
  217. package/skill-docs/references/workflow/guide-workflow.md +16 -2
@@ -1,51 +1,53 @@
1
- # 触发器运行时注意事项(真机验证)
2
-
3
- 本文沉淀验收 1(11 场景)真机验证得到的、与平台接口客观行为相关的经验,宿主 agent 生成 `semantic_plan` 时必须遵守。这些事实与实现语言无关(Python/Node 版同源)。
4
-
5
- ## 1. 「数据ID」paramKey 格式因触发器而异(最关键)
6
-
7
- 「按数据ID更新/引用当前数据」场景中,数据ID 字段的 paramKey **不是统一的 `{formId}.id`**,三种触发器各不相同:
8
-
9
- | 触发器 | 数据ID 的 paramKey | 说明 |
10
- |---|---|---|
11
- | `TimeBatchTrigger` | `{formId}.id` | 例:`1300502645411717121.id` |
12
- | `DateTrigger` | `dataResponse.id` | 前缀是 `dataResponse.`,不是表单 id |
13
- | `EventFormData` | `{formId}.5` | **数据ID 是数字 `5`,不是 `.id`!** 极易踩坑 |
14
-
15
- 生成 plan 时,`mapping` 源侧引用「数据ID」必须按上表写真实 paramKey,否则 preflight 的源字段校验会报「源字段 paramKey 未在真实上下文中找到」。
16
-
17
- > 最稳妥的做法:先跑 `workflow-context-fields` 查该触发器在当前数据源下的真实上下文,从返回里确认「数据ID」的精确 paramKey,再写入 plan,不要凭记忆猜格式。
18
-
19
- ## 2. queryFields 需包含系统字段
20
-
21
- 定时/批量/日期触发器的 `queryFields` 全选时,除了业务字段,还必须包含**平台系统字段**(数据ID / 标题 / 创建者 / 创建时间 等 9 个)。否则 `getComponentContext` 返回的上下文中**缺少「数据ID」**,导致「按数据ID更新」引用失败。
22
-
23
- 系统字段的 `id` 是英文字符串(`id`/`name`/`creator`/`createTime`/`lastUpdateTime`/`lastUpdater`/`dataStatus`/`myTag`/`publicTag`),`content` 是中文名。宿主 agent 侧无需手动列全,但需知晓:**数据ID 属于系统字段,不随业务字段自动出现**。
24
-
25
- ## 3. 动态人员引用用 `context`,不要用 `{userid}`
26
-
27
- 触发器/新建流程等节点的 `operator`(操作人)需要动态引用某字段值时,用**上下文引用**而非系统变量:
28
-
29
- ```json
30
- {"type": "context", "paramKey": "<formId>.<人员字段id>", "label": "<字段名>"}
31
- ```
32
-
33
- `{userid}` 这类系统变量在 `resolveFixedPeople` 阶段会被当作「固定人员」去查浏览器解析,失败即拦截报错。动态人员一律走 context 引用。
34
-
35
- ## 4. filterCondition 的 `esbAssign.wId` 必须指向「当前节点」(真机验证 2026-08-18)
36
-
37
- `ActionEbUpdate` 等数据动作的筛选条件(filterCondition)右值走上下文引用时,条件对象里的 `esbAssign.wId` 字段**必须指向「当前节点」**(filterInput 所属的数据动作节点 id),**不能指向上游 event 节点**。
38
-
39
- - 设计器打开「动态赋值」对话框时,用 `esbAssign.wId` 在 `orginFlowDatas` 里定位当前组件;指向 event 节点 → 定位不到 → 右侧「暂无数据」(EmptyView,不可编辑/不可选)。
40
- - `value.source` / `config.comId` 仍指向 event 节点(公式来源,不变);只有 `esbAssign.wId` 单独用当前节点 id。
41
- - 判断口径:读回后 `esbAssign.wId` 应等于该 ActionEbAdd/Update/Delete 节点的 `id`,不等于 `event.id`。
42
-
43
- ## 4b. 同类问题全量修复:mapping / updateId / basisValue / 明细依据值下级 / updateFieldCondition / requestName 的上下文公式也要 `esbAssign.wId`(真机验证 2026-08-18)
44
-
45
- 第 4 节最初只修了 `filterCondition`(`buildFilterInput` 路径)。验收 1 重跑时发现:**ActionEbAdd/Update 的字段映射(mapping)、按数据 ID 更新的 `updateId`、批量新增依据值 `basisValueFormula`/`setting.bassisValue`、明细映射的 type=10 依据值下级、`updateFieldCondition` 的 assign、ApproveCreate 的 `requestName`** —— 这些位置的上下文公式(type 3/8/10)**同样必须带 `esbAssign.wId` 指向当前数据动作节点**,否则设计器打开「动态赋值」会把该条显示为「【组件名(已删除)】」(组件未删除,只是 wId 缺失导致前端定位不到当前组件)。
46
-
47
- - 修复(2026-08-18):`formula_service.ts` 新增 `attachEsbAssign(bean, meta, fallbackSource)`,在 `buildSettingEntry` 的 context 分支(含提前 return 的 assignFlatEsbChild 子表路径)与统一 return 前、`workflow_compiler.ts` 的 `_updateId`/`_basisValueFormula`/`handleBasisValue`/`requestName`、`action_eb_update_compiler.ts` 的 `buildUpdateFieldCondition` 处统一调用。wId 取值顺序与 filterInput 一致:`meta._upstream_node_id`(convertNode 设的当前节点 id)→ 公式 `source` → `meta._upstream_w_id` → 时间戳前缀。
48
- - 固定值(type=1)不加 esbAssign(设计器 fixvalue 不需要定位当前组件)。
49
- - 真机回归:验收 1 全 12 场景 readBack 通过;抽查 S1(basisValue+主表映射+type10 下级)/S2(filterInput+主表映射+明细 type10)/S10(updateId)/S11(ApproveCreate formData)/S12(updateId+累加 mapping)—— 所有 esbAssign.wId == 当前数据动作节点 id,无一处指向 event。
50
- - 新增/维护组件时,凡生成上下文公式的地方都要过一遍 `attachEsbAssign`;`actionflows/references/components/` 下各组件契约 md 与 SKILL.md「esbAssign.wId」条目已同步。
51
-
1
+ # 触发器运行时注意事项(真机验证)
2
+
3
+ 本文沉淀验收 1(11 场景)真机验证得到的、与平台接口客观行为相关的经验,宿主 agent 生成 `semantic_plan` 时必须遵守。这些事实与实现语言无关(Python/Node 版同源)。
4
+
5
+ ## 1. 「数据ID」paramKey 格式因触发器而异(最关键)
6
+
7
+ 「按数据ID更新/引用当前数据」场景中,数据ID 字段的 paramKey **不是统一的 `{formId}.id`**,三种触发器各不相同:
8
+
9
+ | 触发器 | 数据ID 的 paramKey | 说明 |
10
+ |---|---|---|
11
+ | `TimeBatchTrigger` | `{formId}.id` | 例:`1300502645411717121.id` |
12
+ | `DateTrigger` | `dataResponse.id` | 前缀是 `dataResponse.`,不是表单 id |
13
+ | `EventFormData` | `{formId}.5` | **数据ID 是数字 `5`,不是 `.id`!** 极易踩坑 |
14
+
15
+ 生成 plan 时,`mapping` 源侧引用「数据ID」必须按上表写真实 paramKey,否则 preflight 的源字段校验会报「源字段 paramKey 未在真实上下文中找到」。
16
+
17
+ > 最稳妥的做法:先跑 `workflow-context-fields` 查该触发器在当前数据源下的真实上下文,从返回里确认「数据ID」的精确 paramKey,再写入 plan,不要凭记忆猜格式。
18
+
19
+ ## 2. queryFields 需包含系统字段
20
+
21
+ 定时/批量/日期触发器的 `queryFields` 全选时,除了业务字段,还必须包含**平台系统字段**(数据ID / 标题 / 创建者 / 创建时间 等 9 个)。否则 `getComponentContext` 返回的上下文中**缺少「数据ID」**,导致「按数据ID更新」引用失败。
22
+
23
+ 系统字段的 `id` 是英文字符串(`id`/`name`/`creator`/`createTime`/`lastUpdateTime`/`lastUpdater`/`dataStatus`/`myTag`/`publicTag`),`content` 是中文名。宿主 agent 侧无需手动列全,但需知晓:**数据ID 属于系统字段,不随业务字段自动出现**。
24
+
25
+ ## 3. 动态人员引用用 `context`,不要用 `{userid}`
26
+
27
+ 触发器/新建流程等节点的 `operator`(操作人)需要动态引用某字段值时,用**上下文引用**而非系统变量:
28
+
29
+ ```json
30
+ {"type": "context", "paramKey": "<formId>.<人员字段id>", "label": "<字段名>"}
31
+ ```
32
+
33
+ `{userid}` 这类系统变量在 `resolveFixedPeople` 阶段会被当作「固定人员」去查浏览器解析,失败即拦截报错。动态人员一律走 context 引用。
34
+
35
+ ## 4. filterCondition 的 `esbAssign.wId` 必须指向「当前节点」(真机验证 2026-08-18)
36
+
37
+ `ActionEbUpdate` 等数据动作的筛选条件(filterCondition)右值走上下文引用时,条件对象里的 `esbAssign.wId` 字段**必须指向「当前节点」**(filterInput 所属的数据动作节点 id),**不能指向上游 event 节点**。
38
+
39
+ - 设计器打开「动态赋值」对话框时,用 `esbAssign.wId` 在 `orginFlowDatas` 里定位当前组件;指向 event 节点 → 定位不到 → 右侧「暂无数据」(EmptyView,不可编辑/不可选)。
40
+ - `value.source` / `config.comId` 仍指向 event 节点(公式来源,不变);只有 `esbAssign.wId` 单独用当前节点 id。
41
+ - 判断口径:读回后 `esbAssign.wId` 应等于该 ActionEbAdd/Update/Delete 节点的 `id`,不等于 `event.id`。
42
+
43
+ ## 4b. 同类问题全量修复:mapping / updateId / basisValue / 明细依据值下级 / updateFieldCondition / requestName 的上下文公式也要 `esbAssign.wId`(真机验证 2026-08-18)
44
+
45
+ 第 4 节最初只修了 `filterCondition`(`buildFilterInput` 路径)。验收 1 重跑时发现:**ActionEbAdd/Update 的字段映射(mapping)、按数据 ID 更新的 `updateId`、批量新增依据值 `basisValueFormula`/`setting.bassisValue`、明细映射的 type=10 依据值下级、`updateFieldCondition` 的 assign、ApproveCreate 的 `requestName`** —— 这些位置的上下文公式(type 3/8/10)**同样必须带 `esbAssign.wId` 指向当前数据动作节点**,否则设计器打开「动态赋值」会把该条显示为「【组件名(已删除)】」(组件未删除,只是 wId 缺失导致前端定位不到当前组件)。
46
+
47
+ - 修复(2026-08-18):`formula_service.ts` 新增 `attachEsbAssign(bean, meta, fallbackSource)`,在 `buildSettingEntry` 的 context 分支(含提前 return 的 assignFlatEsbChild 子表路径)与统一 return 前、`workflow_compiler.ts` 的 `_updateId`/`_basisValueFormula`/`handleBasisValue`/`requestName`、`action_eb_update_compiler.ts` 的 `buildUpdateFieldCondition` 处统一调用。wId 取值顺序与 filterInput 一致:`meta._upstream_node_id`(convertNode 设的当前节点 id)→ 公式 `source` → `meta._upstream_w_id` → 时间戳前缀。
48
+ - 固定值(type=1)不加 esbAssign(设计器 fixvalue 不需要定位当前组件)。
49
+ - 真机回归:验收 1 全 12 场景 readBack 通过;抽查 S1(basisValue+主表映射+type10 下级)/S2(filterInput+主表映射+明细 type10)/S10(updateId)/S11(ApproveCreate formData)/S12(updateId+累加 mapping)—— 所有 esbAssign.wId == 当前数据动作节点 id,无一处指向 event。
50
+ - 新增/维护组件时,凡生成上下文公式的地方都要过一遍 `attachEsbAssign`;`references/components/` 下各组件契约 md 与 SKILL.md「esbAssign.wId」条目已同步。
51
+ - 关联字段的身份元数据是另一条独立约束:筛选字段必须保留真实 `sformId`;`refObjId` 只在对应平台 DTO 要求时保留,不能把它当作所有关联字段的统一必填项。`esbAssign.wId` 正确只能保证动态右值能定位当前动作节点;缺少 `sformId` 仍会让设计器把左侧仍存在的字段显示成“已删除”。
52
+ - Workflow 左值还必须带目标表默认布局 `formInfo.layoutId`。`formInfo.formId` 只能填目标表版本 ID,顶层 `sformId` 要填 `workflowPath.formIds` 对应的流程表单对象 ID;Workflow 使用原始数字 `fieldName`、`fieldType:"String"`、空 `module`/`originBrowserType`,不能加 `field_` 前缀或把 `Workflow` 当存储类型。不能把目标表版本 ID当作关联对象;反查不到真实对象时停止生成并报错。
53
+
@@ -0,0 +1,201 @@
1
+ # 搭建计划模板(plan.md 强制格式)
2
+
3
+ > 这是 `plan.md` 的**强制模板**。写 plan.md 必须照此格式逐项梳理资源与规则,**禁止自创格式、禁止预勾 `[x]`**。
4
+ > `[ ]` = 待办;执行阶段做完一项、验证通过,才改 `[x]` 并填实际 ID。全部 `[x]` 才算完工。
5
+
6
+ ## 使用方法
7
+
8
+ 1. 复制下方「plan.md 骨架」到工作区 `plan.md`
9
+ 2. 按需求逐项填实(应用/表单/流程/出口条件清单/菜单/页面/必做项)
10
+ 3. 规划阶段全部留 `[ ]`,拿给用户确认(此阶段不调 e10-cli 写命令,可 list/read 查现状)
11
+ 4. 用户确认后逐项执行,每做完一项、验证通过,改 `[x]` 并填 ID——完成一条打勾一条
12
+ 5. **执行每项前,先按 SKILL.md 决策树读对应 `references` 指南**——命令的完整参数/边界/坑/示例都在指南里,认真阅读再动手,不要凭印象直接调命令
13
+
14
+ ---
15
+
16
+ ## plan.md 骨架
17
+
18
+ ```md
19
+ ## 搭建计划
20
+
21
+ > ⚠️ `[ ]` 是待办,不是"已规划"。规划阶段全部留 `[ ]`;执行阶段做完一项、验证通过,才改 `[x]` 并填 ID。**完成一条打勾一条**,全部 `[x]` 才算完工。**禁止预勾 `[x]`**(=谎报完成)。勿依赖平台默认值——平台默认值≠方案要求。
22
+ > **来源标注**:每张表/每个流程/每个节点用分组头声明(名称+ID 占位),其下 `[ ]` 项的来源即该分组;跨表的项内联标「来源: <表单/流程>」。
23
+
24
+ ### 0. 环境
25
+ - [ ] 鉴权 `e10-cli auth status`(profile 切换 `auth profile use` / 新环境 `auth set --eteamsid --base-url`)
26
+
27
+ ### 1. 应用
28
+ - [ ] <应用名> | `app create` | ID: 待创建
29
+ > 一份需求只建这一个应用,所有表单/流程/菜单都在它下面。不要按功能点拆应用;确需多应用(分属不同业务系统)先跟用户确认。
30
+
31
+ ### 2. 角色(来源: 全应用)
32
+ - [ ] <角色名> | `role create` + `role add-member <roleId> <keyword>` | 方案要求的每个角色都要建,不会自动有
33
+
34
+ ---
35
+
36
+ ### 3. 表单(每张表一组,逐张复制此分组)
37
+
38
+ #### ▼ 表单:<表单名A> | objId: 待创建
39
+
40
+ ##### 3.1 字段定义(建表时一次性,`form create --fields` --layout FLOW|EXCEL)
41
+ - [ ] <表单名> | ID: 待创建
42
+ 布局: FLOW(流式)/ EXCEL(表格,缺省)
43
+ 字段:
44
+ 1. 名称(Text, 必填)
45
+ 2. 金额(Money, precision=2, 只读)
46
+ 3. 备注(TextArea, 独占一行)
47
+ 4. 客户名称(Text, group=基本信息, 必填)
48
+ 5. 联系电话(Phone, group=基本信息)
49
+ 6. 明细表(DetailTable, formFields:[...])
50
+ 7. 关联客户(EBuilder, sformId+dataTitle)
51
+ 8. 关联流程(Flow, sformId=<流程绑定的表单objId>) ← sformId 指向哪个流程表单,浏览时就只选该表单绑定的流程数据,创建时自动绑定
52
+ - 选项/编号/默认值/精度/百分比/maxLen 建表时写全;单位无独立属性,**写进字段名**如 `工时单价(元)`
53
+ - **布局与显示属性**:方案文档明确要求的必填(`required`)、只读(`readOnly`)、隐藏(`hidden`)、独占一行(`singleRow`)、分组(`group`)、字段顺序——全部标在字段清单里,建表时 fields.json 一并带上,勿留建后补。方案未提到的用默认(EXCEL 两列、不分组、不必填)
54
+ - 公式/值带出可 inline:`formula` / `relateFrom`
55
+ - **Flow 字段**:`sformId` 是流程表单 objId(不是 workflowId),建表时写进 fields.json 即自动绑定——关联到哪个流程表单就只能选该范围的流程数据,无需单独配数据范围
56
+ > 不要先建空表再 add-field——add-field/edit-field 只是**罕见补救手段**
57
+
58
+ ##### 3.2 表单级配置(来源: 本表单 <表单名A>;建表后逐项配齐,缺一项这张表不算完成)
59
+ - [ ] 复杂编号 | `form serial-mark set <objId> <appId> <fieldId> --segments @json`(纯建模表:fixed/year/serial/field/system/date+代字;⚠ 绑流程表无效→走 `workflow numbering`)
60
+ - [ ] 值带出(关联表) | `form relate <appId> <objId> <目标字段> --from <Employee/Department源字段>`(换申请人→填邮箱/工号/部门;HRM属性带出,简单单源)
61
+ - [ ] 值带出(跨表/多跳) | `form field-linkage add <appId> <objId> --trigger <触发字段> --target <目标字段> --hops "<源表objId:带出字段,源表objId:带出字段,...>"`(跨表查询带出,支持多跳链式中转;Text 字段必须多跳到名称表取名称不能直接赋 ID)
62
+ - [ ] 关联显示列 | `form ebuilder-columns <objId> <appId> <fieldId> [字段名...]`(先不带参数看业务字段候选清单,去系统字段)
63
+ - [ ] 关联数据范围 | `form ebuilder-scope set <objId> <appId> <fieldId> --rules '[...]'`(如客户状态=启用才可选)
64
+ - [ ] 字段公式 | `form formula set --expression "DAYS({主表.开始},{主表.结束})" --target <fieldId>`(或 fields.json inline)
65
+ - [ ] 查重校验 | `form validate add <objId> <appId> <字段名...>`(项目名称重名/工时日期重复)
66
+ - [ ] 显隐联动 | `form linkage add <appId> <objId> <名> --config @json`(prop: hide/show/edit/readonly/required/hideLine)
67
+ - [ ] 字段分组 | `form group <objId> <appId> --groups '{"基本信息":[...]}'`(建表时已用 group 则跳过)
68
+ - [ ] 表单权限 | `form permission add <objId> <appId> --org-type <all/role/dept/...> --right-type <0/1/2/3>`(勿默认所有人)
69
+ - [ ] 表单按钮 | `form button add <objId> <appId> <名> --url <url> --open-type <1/2/3>`
70
+
71
+ ##### 3.3 台账/视图配置(来源: 本表单 <表单名A> 的台账;无需求标「— 无」)
72
+ - [ ] 显示列批量设置 | `form list-columns <objId> <appId> <listId> --set @columns.json`([指南](../form/guide-list-columns.md))
73
+ - [ ] 列单位 | `form list-unit <objId> <appId> <listId> <fieldId> "(元)"`
74
+ - [ ] 列格式 | `form list-format <objId> <appId> <listId> <fieldId> [--thousandths] [--decimal <n>]`
75
+ - [ ] 字段事件(列点击跳转) | `form list-click <objId> <appId> <listId> <fieldId> [--target <objId>]`
76
+ - [ ] 搜索条件 | `form list-search <objId> <appId> <listId> [--add <f>] [--quick <f>]`
77
+ - [ ] 排序 | `form list-sort <objId> <appId> <listId> [--field <f>] [--order ASC|DESC]`
78
+ - [ ] 顶部统计(主表/明细) | `form list-stats <objId> <appId> <listId> --add @json`([指南](../form/guide-list-stats.md))
79
+ - [ ] 视图数据条件 | `form list-filter <objId> <appId> <listId> --add '{"conditions":[...]}'`
80
+ - [ ] 关联页签及目标视图 | `form association create <objId> <appId> <名> --view <viewId> --permissions @json`([指南](../form/guide-form-association.md))
81
+ - [ ] 关联页签布局与终端 | `form association update <objId> <appId> <associationId> --layouts 显示 --terminals PC MOBILE`([指南](../form/guide-form-association.md))
82
+ - [ ] 关联页签数据筛选 | `form association set-filter <objId> <appId> <associationId> --mappings @json`([指南](../form/guide-form-association.md))
83
+ - [ ] 视图按钮显示位置 | `form button position <objId> <appId> <buttonId> --view <listId> --position 行上`([指南](../form/guide-form-button.md))
84
+ - [ ] 行事件(整行点击) | `form list-event <objId> <appId> <listId> --add-page '{...}'`
85
+ - [ ] 视图启用分组 | `form list-group <objId> <appId> <listId> --enable --group-field <fieldId>`([指南](../form/guide-form-view.md))
86
+ - [ ] 主表合并行 | `form list-merge <objId> <appId> <listId>`
87
+ - [ ] 台账视图权限 | `form list-permission <objId> <appId> <listId> [--add-all|--add-user <id> --name <n>]`
88
+ - [ ] 分类搜索 | `form list-search-group <objId> <appId> <listId> [--add <选项fieldId>]`
89
+ - [ ] 自定义视图 | `form view create <objId> <appId> <名> --type kanbanView|calendarView|mindMapView|multiView` + `form view populate`
90
+ - [ ] 表格视图 | 默认复用台账,记录实际名称/listId;额外新建才用 `form table-view create <objId> <appId> <名>`([指南](../form/guide-form-view.md))
91
+ > 表单自带台账(搜索/筛选/导出/批量)。本节只列有需求的项;无需求标「— 无」
92
+
93
+ #### ▼ 表单:<表单名B> | objId: 待创建
94
+ (同上 3.1/3.2/3.3 复制)
95
+
96
+ ---
97
+
98
+ ### 4. 流程(每个流程一组,逐个复制此分组)
99
+
100
+ #### ▼ 流程:<流程名A> | workflowId: 待创建
101
+
102
+ ##### 4.1 创建
103
+ - [ ] 创建 | `workflow create <appId> <formObjId> <名>`(默认不加菜单;确认需要发起入口时 `--menu` 加)
104
+ > ⚠️ **流程级必做**:① 流程编号(`workflow numbering`);② 出口名称(`workflow link-rename`,改业务人话);③ 出口条件清单(见 4.3,先列全表再逐条创建,勿凭印象跳步)
105
+
106
+ ##### 4.2 节点与连线(来源: 本流程 <流程名A>;每节点一行)
107
+ > ⚠️ 操作者按需求语义用对应 `--type`(role/dept/position/superior/initiator/form/matrix/free/all),**禁止兜底成具体人员顶替**;名称解析不到先停下确认。
108
+ - [ ] 节点1 | 操作者: 创建人
109
+ - [ ] 节点2 | 操作者: 区域经理+部门领导(竞签) ← 「A或B审批」=一节点多人+竞签/非会签,不拆节点
110
+ - [ ] 节点3 | 条件: <字段>=<值> 才走到,否则跳过/直达<节点>
111
+ - [ ] 节点4 | 操作者: 角色X | 动作流: → <目标表>(add/update/delete, 映射: 源→目标)
112
+ - [ ] 连线 | `workflow add-link/add-links <wf> <from> <to> <label>` [--reject 退回] [--default 默认]
113
+
114
+ ##### 4.3 出口条件清单(来源: 本流程 <流程名A>;必填,动手前逐条列出,防遗漏)
115
+ 段② 执行到条件时,先按此表列出所有连线的完整条件,逐条确认后再 `workflow condition add`:
116
+
117
+ | 来源节点 | 目标节点 | 连线名 | 条件 | 来源 | 操作 | 值/右字段 | 明细量词 | 备注 |
118
+ |---|---|---|---|---|---|---|---|---|
119
+ | 发起 | 初审 | 部门初审 | 所属部门=财务部 | form:所属部门 | 等于 | 财务部 | — | |
120
+ | 发起 | 初审 | 部门初审 | 报销金额5k~10k | form:报销金额 | 范围 | 5000:10000 | — | 数值范围 |
121
+ | 发起 | 初审 | 部门初审 | 发起时间≥报销日期 | system:发起时间 | 大于等于 | field:报销日期 | — | 变量模式 |
122
+ | 发起 | 初审 | 部门初审 | 报销类型∈{差旅,住宿} | form:报销类型 | 属于 | 差旅费,住宿费 | 任一 | 与下行OR |
123
+ | 发起 | 初审 | 部门初审 | 同上OR组 | form:发票编号 | 包含 | FP | 任一 | 接上行OR |
124
+
125
+ 要点:每行一条原子条件,OR 组拆多行备注"与下行OR";操作列 等于/大于/小于/范围/属于/包含/为空/不为空/field(变量模式);值列字面值直接写、`field:`前缀引用另一字段;明细量词 任一(任一行)/所有(所有行)/—(主表);创建完 `workflow condition list <wf>` 回读核对总数一致
126
+
127
+ - [ ] 出口名 | `workflow link-rename <wf> <linkId> <业务人话>`(分支连线尤其要改)
128
+
129
+ ##### 4.4 节点级配置(每个审批节点一组,逐个复制)
130
+ ###### ▶ 节点:<节点名> | nodeId: 待创建
131
+ - [ ] 操作者 | `workflow set-operator <wf> <node> [keyword] --type <user/role/dept/position/all/free/superior/initiator/prev-node/form/matrix> --sign-order <会签/竞签/依次/抄送>`(`--append` 多组叠加)
132
+ - [ ] 提交校验 | `workflow node validate <wf> <node> --rule "字段 操作 值"`(跨表用"明细表名.字段",如 `行程明细.开始时间 等于 出差开始日期`)
133
+ - [ ] 签字意见必填 | `workflow node sign <wf> <node> --select "退回"`(退回等操作类型必填意见)
134
+ - [ ] 节点菜单 | `workflow node menu <wf> <node> --toggle <menuId>`
135
+ - [ ] 退回设置 | `workflow node reject <wf> <node>`
136
+ - [ ] 超时处理 | `workflow node timeout <wf> <node>`
137
+ - [ ] 字段权限 | `workflow node field-permission set <wf> <node> --hide <字段...>`
138
+
139
+ ##### 4.5 流程级设置(来源: 本流程 <流程名A>)
140
+ - [ ] 流程编号 | `workflow numbering set <wf> --prefix LC --serial 4 --no-year`(REQUEST_NO,绑流程表必走)
141
+ - [ ] 流程标题 | `workflow setting title <wf> --rule "发起人|提交日期|客户名称"`(标题=流程名+系统字段则跳过)
142
+ - [ ] 提交确认 | `workflow setting submit <wf>`
143
+ - [ ] 签字意见 | `workflow setting sign <wf>`
144
+ - [ ] 评论 | `workflow setting comment <wf> --enable`
145
+ - [ ] 批量操作 | `workflow setting batch <wf>`
146
+ - [ ] 自动处理 | `workflow setting auto <wf>`
147
+ - [ ] 其他 | `workflow setting other <wf>`
148
+ - [ ] 存档 | `workflow advanced doc <wf>`
149
+ - [ ] 定时触发 | `workflow advanced schedule <wf>` + `schedule-range <wf>`(人员范围)
150
+ - [ ] 消息提醒 | `workflow message create`(IM 提醒动作流)
151
+
152
+ ##### 4.6 动作流(跨表写入/自动化)
153
+ - [ ] 动作流生成 | `actionflow generate '{"planFile":"@plan.json",...}'`(来源: 本流程触发 → 目标: <目标表单>)
154
+ - [ ] 节点字段赋值 | `workflow save-action @action.json`(来源: 本流程 <节点名>)
155
+ - [ ] 数据来源落点 | 目标台账建 Flow 字段 `form add-field <目标台账objId> <app> "数据来源" Flow --sform-id <本流程表单objId>`(来源: 本流程 → 落点: <目标台账表单名>),add 时 `--sysvar` 写 requestId,**update/delete 也靠它定位**
156
+
157
+ #### ▼ 流程:<流程名B> | workflowId: 待创建
158
+ (同上 4.1-4.6 复制)
159
+
160
+ ---
161
+
162
+ ### 5. 菜单(来源: 应用)
163
+ - [ ] 台账菜单 | `menu add-table <appId> <objId>`(来源: <表单名>;form create 已自动加,补加用此)
164
+ - [ ] 发起菜单 | `menu add-start <appId> <formObjId>`(来源: <流程名>绑定的表单;workflow create 已自动加)
165
+ - [ ] 自定义菜单 | `menu add <名> <path> <appId>`(LINK,ecode 页面)
166
+ - [ ] 菜单权限 | `menu permission`(岗位/角色/部门/人员可见)
167
+
168
+ ### 6. 页面(定制)
169
+ - [ ] 无定制 | 标「### 页面(无需,表单自带台账)」
170
+ - [ ] 定制页面 | Ecode `project create/import` + 页面编码(图表/跨表聚合/特殊交互)
171
+
172
+ ### 7. 矩阵(HRM,按需)
173
+ - [ ] <矩阵名> | `matrix create` + `config-edit` + `enable` + `data`(来源: 被 <流程名> 的 `set-operator --type matrix` 引用)
174
+
175
+ ## 执行分段(最多三段,每段完成停下来让用户确认,确认后才进下一段)
176
+ - 段① 应用+角色+全部表单(建表 + 3.2 表内项配齐,**缺一项这张表不算完成**)→ 确认字段设计 → 段② 流程(先列出口条件清单→逐条 `condition add`→`condition list` 回读核对)→ 确认流程 → 段③ 菜单+页面
177
+ - 简单单步需求(改字段、查数据)不分段,直接执行
178
+ > **表单是流程的地基**:流程绑定表单、条件/动作流/操作者都引用字段,字段设计错了流程全返工——表单段必须确认后再进流程
179
+
180
+ ## 规则备忘
181
+ - **执行前读指南**:每个命令的完整参数/边界/示例在对应 `references` 文档(SKILL.md 决策树按关键词路由),动手前先读,勿凭印象调命令出错
182
+ - Plan 阶段不调 e10-cli 写命令(可 list/read 查现状);必须写 plan.md 落地,不要只在对话里列方案
183
+ - 应用数量:默认全需求只建 1 个应用,不按功能点拆;确需多应用先跟用户确认
184
+ - 流程按节点逐行,操作者含签署方式/条件/动作流挂节点;**「A 或 B 审批」= 一节点多人 + 竞签/非会签,不拆节点**
185
+ - 台账页面不用写,表单自带台账(搜索/筛选/导出/批量)
186
+ - 表单字段一次性建好(`form create --fields`),singleRow/group 建表时定,勿留建后补
187
+ ```
188
+
189
+ ---
190
+
191
+ ## 来源标注方式
192
+
193
+ | 配置项类型 | 来源标注方式 |
194
+ |----------|------------|
195
+ | 表单级配置(3.2/3.3) | 分组头 `▼ 表单:<表单名A> | objId: 待创建`,其下项来源=该表单 |
196
+ | 流程级配置(4.2/4.3/4.5) | 分组头 `▼ 流程:<流程名A> | workflowId: 待创建`,其下项来源=该流程 |
197
+ | 节点级配置(4.4) | 子分组头 `▶ 节点:<节点名> | nodeId: 待创建`,其下项来源=该节点 |
198
+ | 跨表项(动作流落点) | 内联标 `来源: 本流程 → 落点: <目标台账表单名>` |
199
+ | 菜单/矩阵 | 内联标 `来源: <表单名>` / `被 <流程名> 引用` |
200
+
201
+ 多张表/多个流程时,复制对应 `▼` 分组(每张表/每个流程一组),来源即分组头声明。每个 `[ ]` 都能看清属于哪个表单/流程/节点,不会把 A 表的配置错配到 B 表。
@@ -44,17 +44,17 @@
44
44
  | `e10-cli form read <objId> [--app-id <appId>] [--out <file>]` | 读取表单字段。`--app-id` 含明细表字段+Select/RadioBox/CheckBox 选项;`--out fields.json` 写 UTF-8 JSON(推荐,机器可读)。旧版 `[dir]` 参数写 memo.md,已过时 |
45
45
  | `e10-cli form read <objId> --app-id <appId> --out fields.json` | 读取字段含选项(Select/RadioBox/CheckBox 自动带 options)。**含明细表字段**,配动作流/联动拿明细 fieldId 用这个 |
46
46
  | `e10-cli form list <appId>` | 列出应用下的所有表单 |
47
- | `e10-cli form create <appId> <name> <dir> --fields @<json文件>` | 创建表单。`--fields` **必填**。支持 DetailTable(嵌套formFields)、EBuilder(sformId+dataTitle)、relateFrom(联动)。fields.json 字段可带 `"required":true`/`"readOnly":true` 直标(写进布局 comps)。**建表后自动加台账菜单**(VIEWPORT),`--no-menu` 关闭 |
47
+ | `e10-cli form create <appId> <name> <dir> --fields @<json文件>` | 创建表单。`--fields` **必填**。支持 DetailTable(嵌套formFields)、EBuilder(sformId+dataTitle)、relateFrom(联动)。fields.json 字段可带 `"required":true`/`"readOnly":true` 直标(写进布局 comps)。**默认不加菜单**,要入口传 `--menu`(台账菜单 VIEWPORT);漏加 `e10-cli menu add-table <appId> <objId>` 补 |
48
48
  | `e10-cli form add-field <objId> <appId> <name> <type> [title]` | 添加字段。`<type>`=componentKey(Text/Select/Employee/Money/DetailTable 等同 form create);`[title]` 字段显示名,不传同 name。Select 类型需单独 `field-options` 配选项。**`--sub-form-id <明细表subFormId>` 在明细表里加字段**(自动重新布局)。Number 类型:**`--percent` 百分比显示**(numberType=percentage,缺省 1 位小数)、**`--default <值>` 默认值**(如 `--default 1000` 工时单价默认 1000)、`--precision <n>` 精度。**EBuilder/Flow 类型**:`--sform-id <目标表单objId>`(EBuilder 表关联 / Flow 浏览-流程字段,数据来源=浏览流程)。EBuilder 字段**自动配关联浏览弹窗显示列**(=目标表全部业务字段,去系统字段)。**`--multiple` 多选**(人员/部门/EBuilder/Browser 默认单选;**下拉 Select --multiple → SelectMultiple 类型**)。**`--max-len <n>` 文本最大长度**(Text 缺省 100、TextArea 缺省 4000)。**`--single-row` 独占一行显示** |
49
49
  | `e10-cli form edit-field <objId> <appId> <fieldId>` | 编辑字段属性。`--title`/`--required`/`--no-required`/`--sform-id`(改EBuilder关联)/`--relate-from`(值带出)/**`--multiple`/`--no-multiple`**(人员/部门/EBuilder/Browser 多选切换) |
50
- | `e10-cli form serial-mark <objId> <appId> <fieldId> --prefix "XM-" [--year] [--serial 3] [--sep "-"] [--clear]` | **表单编号**(纯建模表):文本字段上配编码段(固定内容+年+分隔符+流水号),生成如 `XM-2026-001`。`--year` 年份;`--serial` 流水位数(seqAlone=1 补零);`--sep` 年→流水分隔符(默认"-");`--clear` 解除。被编码字段平台自动只读。**⚠ 仅对未绑流程的纯建模表有效——eb表单绑流程后表单编号字段在流程提交时不生效,编号改走流程编号(`workflow numbering`,落到 REQUEST_NO 系统字段)** |
50
+ | `e10-cli form serial-mark set <objId> <appId> <fieldId> --segments @<json>` | **表单编号**(纯建模表):用 JSON 数组组合任意编号规则,数组顺序即拼接顺序。段类型 `fixed`/`year`/`serial`/`field`/`system`/`date`;field 段可 inline `shortName` 代字映射。子命令组:`set`(配置,--segments) / `add-segment`(增量追加段) / `short-name`(代字 list/set) / `read`(查看) / `fields`(查可绑定字段) / `clear`(解除)。被编码字段平台自动只读。**⚠ 仅对未绑流程的纯建模表有效——eb表单绑流程后表单编号字段在流程提交时不生效,编号改走流程编号(`workflow numbering`,落到 REQUEST_NO 系统字段)** |
51
51
  | `e10-cli form field-options <objId> <appId> <fieldId> --options @<json> [--default <key>]` | 设选项/默认值。options.json: `[{"name":"选项名","valueKey":"可选"}]`;`--default` 用平台生成的长 valueKey(`form read --app-id` 获取),不是 name |
52
52
  | `e10-cli form linkage add <appId> <objId> <name> --config @<json>` | 添加字段显隐联动规则 |
53
53
  | `e10-cli form relate <appId> <objId> <目标字段> --from <源字段>` | **HRM 值带出联动**:源字段为表内 Employee(人员)或 Department(部门)类型,换源自动填目标字段(换申请人→填邮箱/工号/部门;换所属部门→填部门编号/上级部门)。`--key` 从平台清单校验(默认 Employee=department、Department=name),`--title` 指定显示名(默认属性中文名)。详见 `form/guide-form-linkage.md` |
54
54
  | `e10-cli form delete <objId> <appId>` | 删除表单 |
55
55
  | `e10-cli form permission <list\|add\|remove\|rebuild> <objId> <appId>` | **表单数据权限**(谁能创建/查看/编辑/删除该表单数据)。`add --org-type <all/role/department/company/employee/group/post> --org-id <id> [--right-type 0创建/1查看/2编辑/3删除/5归档查看/6归档编辑/7归档删除] [--creator-related 0本人/1上级/5本岗位]`;all 类型 org-id 自动 0;添加后若提示 isShowRebuild=2 用 `rebuild` 重构。`list` 查看、`remove <id>` 删 |
56
56
  | `e10-cli form list-view <objId> <appId>` | 查看台账/数据列表(获取 viewId 用于菜单配置) |
57
- | `e10-cli form list-columns <objId> <appId> <listId> [--add <fieldId>] [--remove <fieldId>] [--pc-only]` | 查看/调整台账**显示列**。不加参数列出当前列;`--add` 追加字段列(主表字段直取;**明细子字段** ds/fields 不展开,自动 fallback `getFormField` 按 fieldId 取元数据,设 mainField:false)、`--remove` 移除。listId 用 `list-view` 的列表视图 ID。**保存时自动保留移动端配置**(`--pc-only` 目标明确只用 PC 时才允许移动端配置缺失) |
57
+ | `e10-cli form list-columns <objId> <appId> <listId> [--add <fieldId...>] [--remove <fieldId...>] [--set @columns.json] [--terminal pc/mobile] [--pc-only]` | 查看/批量设置台账显示列。增量追加、移除或整组指定顺序/列宽/格式;整组模式与增删互斥。支持主表和明细子字段,保留已有列未指定属性、事件及数据主键;一次保存并回读核对目标列和另一终端。详见 `references/form/guide-list-columns.md` |
58
58
  | `e10-cli form list-unit <objId> <appId> <listId> <fieldId> <后缀> [--prefix <前缀>] [--clear] [--pc-only]` | 设置台账列显示**单位**(后缀/前缀)。平台无字段级单位属性,靠列表列配置 `showTrans.ruleConfig.suffix/prefix` 实现。如 `form list-unit ... <fieldId> "(元)"` 让列显示单位;`--clear` 清除 |
59
59
  | `e10-cli form list-format <objId> <appId> <listId> <fieldId> [--thousandths] [--no-thousandths] [--decimal <n>] [--clear] [--pc-only]` | 查看/设置台账列**千分位/小数位**(Number/Money 列)。不加参数显示当前;`--thousandths` 开千分位(列 `format:"THOUSANDS"`)、`--no-thousandths` 关、`--decimal <n>` 小数位数(`decimalLength`)、`--clear` 清除恢复默认。与 `list-unit`(单位,走 `showTrans`)是两套不同机制。**自动保留移动端配置** |
60
60
  | `e10-cli form list-click <objId> <appId> <listId> <fieldId> [--target <formObjId>] [--open-mode <模式>] [--win-size <尺寸>] [--clear] [--pc-only]` | 设置台账列**点击跳转**(字段事件,eventGroup/NewPage):点该列数据跳目标表单视图(带该行数据 ID)。缺省跳本表单;`--target` 跳别的表单;`--open-mode` 打开方式:当前页面/新窗口/弹出窗口/右侧滑出(缺省)/右侧推出;`--win-size` 滑出/推出的宽度(缺省 800px,可传 % 如 50%);`--clear` 移除。区别于行事件 `list-event`(点整行) |
@@ -63,7 +63,8 @@
63
63
  | `e10-cli form validate list <objId> <appId>` | 查看表单**查重规则**(字段重复校验,多字段 AND)。`add <objId> <appId> <字段名...> [--help 提示] [--remind]` 新增(缺省禁止提交 NOSUBMISSION,`--remind` 仅提醒);`delete <objId> <appId> <ruleId>` 删除。项目名称重名/工时日期重复不允许 |
64
64
  | `e10-cli form list-search <objId> <appId> <listId> [--add <fieldId...>] [--quick <fieldId...>] [--remove <fieldId>] [--pc-only]` | 查看/配置台账**搜索条件**。`--add` 进搜索面板、`--quick` 加顶部快捷筛选(均支持多字段)、`--remove` 移除。主表字段直取 ds/fields;明细子字段自动 fallback `getFormField` 单取元数据。**自动保留移动端配置** |
65
65
  | `e10-cli form list-sort <objId> <appId> <listId> [--field <fieldId...>] [--order ASC\|DESC] [--clear] [--pc-only]` | 查看/配置台账**排序**。`--field` 支持多个(按传入顺序多级排序,`--order` 对所有字段生效)、`--clear` 清除。**自动保留移动端配置** |
66
- | `e10-cli form list-stats <objId> <appId> <listId> [--add '<json>'] [--remove <statId>] [--pc-only]` | 查看/配置台账**顶部统计**。`--add '{"fieldId":"...","type":"sum","name":"合计","thousandths":true,"decimalPlaces":"2","unit":"万","conditions":[{"fieldId":"项目类型fieldId","func":"eq","value":"研发valueKey","text":"研发"}]}'`(type: sum/count/avg/max/min;可选 thousandths 千分位 / decimalPlaces 小数位 / unit 单位万=tenThousand;**conditions 条件统计**:构造明文条件树填 rootdata,func eq 等于 / neq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / range 区间 / isNull 为空 / isNotNull 不为空(notEq/between 为兼容别名,自动归一为 neq/range;range 的 value 用数组 [起,止]),单选 Select 用 eq,value 填选项 valueKey、text 填显示名,多条件默认 AND)、`--remove` 移除(平台 upsert 语义,靠标 operation:DELETE)。**自动保留移动端配置** |
66
+ | `e10-cli form list-stats <objId> <appId> <listId> [--add <json或@文件>] [--remove <statId>] [--pc-only]` | 主表/明细顶部统计,sum/count/avg/max/min、条件及格式;明细 count 支持 `{ "type":"count", "subFormId":"..." }`。保存后回读、保护移动端;平台可能共享两端统计,输出 mobileStatistics。详见 `references/form/guide-list-stats.md` |
67
+ | `e10-cli form list-stats detail <objId> <appId> <listId> <subFormId> [--fields <fieldId...>] [--name-prefix <文本>] [--pc-only]` | 为明细数值字段批量生成 sum 和一项子表 count;重复运行复用同名同配置项 |
67
68
  | `e10-cli form list-filter <objId> <appId> <listId> [--add '<json>'] [--clear] [--pc-only]` | 查看/配置**视图数据条件**(台账只显示满足条件的数据)。`--add '{"conditions":[{"fieldId":"...","func":"eq","value":"研发valueKey","text":"研发"}]}'`(func: eq 等于 / notEq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / between 介于 / isNull 为空 / isNotNull 不为空,单选 Select 用 eq;value 填选项 valueKey、text 填显示名;多条件默认 AND)、`--clear` 清空。走 saveNListConfig config.filter(明文条件树,非独立接口)。**自动保留移动端配置** |
68
69
  | `e10-cli form list-event <objId> <appId> <listId> [--add-page '<json>'] [--add-field '<json>'] [--open-mode <模式>] [--modal-width <pct>] [--modal-height <pct>] [--win-size <pct>] [--clear] [--pc-only]` | 查看/配置**行事件**(点击行数据 NewPage 打开表单布局)。`--add-page '{"pageId":"1/<objId>","pageName":"新建数据","openMode":"右侧滑出"}'` 选页面方式(pageId 缺省 `1/<objId>` 新建布局,`0/<objId>`=显示布局)、`--add-field '{"urlFieldId":"字段id"}'` 选字段方式(URL取自行内字段值,urlFieldText/Type自动补)、`--clear` 清空。**打开方式** `--open-mode`(或在 JSON 里写 `openMode`):当前页面/新窗口/弹出窗口/右侧滑出(缺省)/右侧推出;弹出/滑出/推出 用 `--modal-width`/`--modal-height`(缺省 50%),滑出/推出 用 `--win-size`(缺省 100%)。走 saveNListConfig config.eventGroup(明文 JSON,config+mConfig 都写)。**自动保留移动端配置** |
69
70
  | `e10-cli form list-group <objId> <appId> <listId> [--enable --group-field <fieldId> [--group-size N]] [--disable] [--pc-only]` | 查看/配置**启用分组**(台账按某字段分组聚合显示)。`--enable --group-field <分组字段id> [--group-size N 默认100]` 启用/换分组字段、`--disable` 禁用(保留 groupField/groupSize 仅 enable=false)。走 saveNListConfig config.enableGroup(对象,持久化,不走 layout/save LZW)。**自动保留移动端配置** |
@@ -83,15 +84,31 @@
83
84
  | 命令 | 说明 |
84
85
  |------|------|
85
86
  | `e10-cli form button list <objId> <appId>` | 列出所有按钮 |
86
- | `e10-cli form button add <objId> <appId> <name> --url <url> --open-type <1\|2\|3> [--position <位置...>] [--view <视图...>]` | 添加自定义按钮(open-type: 1=弹窗,2=新页面,3=当前页)。`--position` 显示位置可多个:右上/右上下拉/行上/行末下拉(缺省右上);`--view` 显示视图可多个:台账/新建/编辑/显示(缺省台账)。走 `button/showPosition` 的 `<listId>_table`/`add_form`/`edit_form`/`show_form` key |
87
+ | `e10-cli form button add <objId> <appId> <name> --url <url> --open-type <1\|2\|3> [--position <位置...>] [--view <视图...>]` | 添加自定义按钮(open-type: 1=弹窗,2=新页面,3=当前页)。`--position` 显示位置可多个:右上/右上下拉/行上/行末下拉(缺省右上);`--view` 显示视图可多个:视图 ID/唯一名称/新建/编辑/显示(仅一个台账时可省略为台账)。走 `button/showPosition` 的 `<listId>_table`/`add_form`/`edit_form`/`show_form` key |
87
88
  | `e10-cli form button toggle <objId> <appId> <buttonId>` | 启用/禁用按钮 |
88
- | `e10-cli form button position <objId> <appId> <buttonId> [--position <位置...>] [--view <视图...>] [--show-position '<json>']` | 修改**已有按钮**的显示位置/视图(走 `button/saveOrUpdate` 全量,自动读回并保留原动作/权限)。`--position` × `--view` 同 add;`--show-position` 传原始 JSON(如 `'{"<listId>_table":["lineEnd"]}'`)支持每视图不同位置。位置值:右上 rightTop / 右上下拉 rightTopDropDown / 行上 lineEnd / 行末下拉 LineEndDropDown |
89
+ | `e10-cli form button position <objId> <appId> <buttonId> [--view <视图...> --position <位置...>] [--show-position <json或@文件>] [--replace]` | 设置已有按钮位置并回读验证。默认合并、保留未指定页面;`--replace` 全量替换。视图支持 ID/唯一名称/新建/编辑/显示;多台账不能省略具体视图。系统按钮适用,保留动作权限及返回的日志/提示配置。详见 `references/form/guide-form-button.md` |
90
+ | `e10-cli form button views <objId> <appId> <buttonId>` | 读取该按钮可选视图及当前 showPosition,配置前先查询 |
91
+ | `e10-cli form association list/get <objId> <appId> [associationId]` | 查询关联页签列表或详情;get 必须传 associationId,详情含目标视图、筛选映射和权限 |
92
+ | `e10-cli form association views <objId> <appId> [--target-app <id>]` | 查询可绑定视图及所属表单 |
93
+ | `e10-cli form association fields <objId> <appId> --view <viewId> [--target-app <id>]` | 查询来源表单字段和目标视图字段 |
94
+ | `e10-cli form association create <objId> <appId> <name> --view <viewId> --permissions <json或@文件> [--layouts 显示 编辑] [--terminals PC MOBILE] [--mappings <json或@文件>]` | 创建关联页签;默认仅显示布局、PC+MOBILE、启用。权限必须显式提供,筛选映射为 [{targetField,sourceField}] |
95
+ | `e10-cli form association update <objId> <appId> <associationId> [--name <名>] [--view <viewId>] [--layouts 显示 编辑] [--terminals PC MOBILE] [--enabled true/false] [--mappings <json或@文件>]` | 保留未指定配置;布局和终端为集合替换;显示=0,编辑=2,none 关闭全部布局。多动作时传 --action |
96
+ | `e10-cli form association set-filter <objId> <appId> <associationId> --mappings <json或@文件> [--action <id>]` | 替换目标视图动作的数据筛选字段映射,区别于权限条件 |
97
+ | `e10-cli form association clear-filter <objId> <appId> <associationId> [--action <id>]` | 清空指定视图动作的数据筛选映射 |
98
+ | `e10-cli form association set-condition <objId> <appId> <associationId> --perm <序号或类型> --rules <json或@文件> [--logic and/or]` | 设置页签权限条件,来源表单字段;与关联目标视图数据筛选独立 |
99
+ | `e10-cli form association clear-condition <objId> <appId> <associationId> --perm <序号或类型>` | 清空指定权限条件;完整指南见 references/form/guide-form-association.md |
89
100
  | `e10-cli form button info <objId> <appId> <buttonId>` | 查看按钮详情 |
90
101
  | `e10-cli form button sort <objId> <appId> <sourceId> <targetId>` | 调整按钮排序 |
91
102
  | `e10-cli form button delete <objId> <appId> <buttonId>` | 删除按钮 |
92
103
 
93
104
  > **除非用户明确要求,否则不要往表单写入任何数据。** 表单创建完成后只需确认字段正确即可,不要自动插入测试数据。
94
105
 
106
+ | `e10-cli form field-linkage list <appId> <objId>` | 字段联动(跨表带出赋值):列出联动 |
107
+ | `e10-cli form field-linkage read <appId> <objId> <id>` | 回读单条(inFields/outFields) |
108
+ | `e10-cli form field-linkage fields <appId> <formId>` | 查源表可带出字段 |
109
+ | `e10-cli form field-linkage delete <appId> <objId> <ids...>` | 删除(批量) |
110
+ | `e10-cli form field-linkage add <appId> <objId> --trigger <字段名> --target <字段名> --hops "<objId:字段名,...>"` | 新增。`--hops` 多跳链式(单跳用 `--source-form/--query-field`)。**Text 字段必须多跳取名称**。详见 `form/guide-field-linkage.md` |
111
+
95
112
  > **创建表单流程**:
96
113
  > 1. 读取 `references/form/guide-create-form.md` 了解字段类型和参数格式
97
114
  > 2. 与用户确认所有字段名和字段类型
@@ -114,7 +131,7 @@
114
131
 
115
132
  | 命令 | 说明 |
116
133
  |------|------|
117
- | `e10-cli workflow create <appId> <formObjId> <name> [desc]` | 创建流程,自动设置所有人可发起。**建流程后自动加发起菜单**(LAYOUT,指向表单新建页 `/sp/ebdfpage/card/1/<formObjId>/0`,点开即触发流程),`--no-menu` 关闭 |
134
+ | `e10-cli workflow create <appId> <formObjId> <name> [desc]` | 创建流程,自动设置所有人可发起。**默认不加菜单**,要入口传 `--menu`(发起菜单 LAYOUT,指向表单新建页 `/sp/ebdfpage/card/1/<formObjId>/0`,点开即触发流程);漏加 `e10-cli menu add-start <appId> <formObjId>` 补 |
118
135
  | `e10-cli workflow create-workflow <name>` | **非默认路径**。仅当用户明确强调「用流程表单 / 工作流程 / 流程中心建流程、不在应用下」时才用;默认走上一条 `workflow create`(eb 应用内)。关联流程表单:不传 `--form-id` 自建(`relateForm=0`,服务端建表回吐 `data.formId`)/ `--form-id <已有>` 绑定(`relateForm=1`)。`--workflow-type`(默认 -1=其它)、`--sub-company <机构>`(团队必传)、`--belong-type <0个人/1团队>`(默认 1)、`--table-name`、`--desc`、`--is-free`、`--layout <FLOW流式(默认)/EXCEL表格式>`(自建模式下 EXCEL 走 formmanage/saveForm 建表后绑定,对齐 eb 表 `form create --layout EXCEL`;建表后不可切换)。不带 source/messageParams |
119
136
  | `e10-cli wf-form read <formId>` | **流程表单管理(非默认路径)**。读流程表单字段(getConfig)。`<formId>` 由 `workflow create-workflow` 回吐。与 eb 表 `form read` 对齐,走 `/api/workflow/core/form/...`(module=workflow、customParam={}、无 apid) |
120
137
  | `e10-cli wf-form add-field <formId> <字段名> <类型> [标题]` | 给流程表单加字段。类型:Text/TextArea/Number/Money/Date/DateTime/Select/Employee/Department/Browser。`--sub-form-id <明细subFormId>` 明细字段;`--multiple` 多选;`--precision`/`--percent`/`--default`(Number/Money);`--format`(日期精度)。formTableId 省略 |
@@ -153,6 +170,8 @@
153
170
  | `e10-cli workflow node field-permission get <wf> <nodeId>` | 查看节点字段权限(各字段 显示/隐藏)。表单字段在节点上可见与否 |
154
171
  | `e10-cli workflow node field-permission set <wf> <nodeId> --hide <字段...>` | 设置节点字段显示/隐藏。`--hide 字段名/ID` 隐藏、`--show` 显示;可多个,已设权限则更新、未设则新建 |
155
172
  | `e10-cli workflow node sign <wf> <nodeId>` | 节点签字意见必填(退回时必填意见等)。缺省查看;`--all-required` 全部必填、`--none-required` 全部不必填、`--select "退回,加签"` 指定操作类型必填(按 mustInputDto=2 + 选中操作类型 id)。`getSignConfigForm` 枚举操作类型 |
173
+ | `e10-cli workflow node empty-handle get <wf> <nodeId>` | 查看节点**流程异常处理**(无可处理人时怎么办) |
174
+ | `e10-cli workflow node empty-handle set <wf> <nodeId> --handle-way <1-5>` | 设置节点流程异常处理:1=指定人员(`--person 名称/ID`) / 2=用户指定 / 3=发起人 / 4=自动流转下一节点 / 5=提交指定节点(`--assign-node <节点ID>`);`--off` 关闭;`--sync` 同步所有节点 |
156
175
  | `e10-cli workflow setting title <wf>` | 流程标题规则(发起后标题按规则生成,如"发起人-提交日期-客户名称"→真实数据)。缺省列出可用变量(发起人/部门/日期/表单字段);`--rule "发起人\|提交日期\|客户名称"` 竖线分隔字段名设置;`--sep <分隔符>` 默认 `-`;`--disable` 关闭自动生成(标题回退流程名+系统默认)。占位符 `$code$`,平台发起时替换为真实值 |
157
176
  | `e10-cli workflow setting submit <wf>` | 提交确认设置。`--confirm`/`--node-range`/`--show-way` |
158
177
  | `e10-cli workflow setting sign <wf>` | 签字意见设置。`--show-order`/`--inform-range` |
@@ -175,7 +194,8 @@
175
194
  | `e10-cli workflow condition delete <wf> <id> [--link-id <linkId>] [--node-id <nodeId>]` | 删除条件(删定义 + 解绑连线)。`<id>` 同 get |
176
195
  | `e10-cli workflow set-link-condition-key <wf> <link> <key> <node>` | 绑定条件 Key 到连线 |
177
196
  | `e10-cli workflow save-action @jsonfile` | 加节点提交动作(常量赋值)。**只接 JSON 一个参数**,`workflowId`/`nodeId` 写在 JSON 内部(不是位置参数)。JSON 格式见 `workflow/guide-workflow-action.md` |
178
- | `e10-cli actionflow generate '{"planFile":"@plan.json","appName":"AI-名称"}'` | **动作流生成**(语义 plan → 编译 → preflight → 保存并启用 → 正式回读,返回设计器链接)。`planFile` 必须以 `@` 引用文件(`@plan.json` 或 `@绝对路径`),CLI 强制要求 `@` 前缀。event 节点 `ApproveTrigger` 自带流程节点触发绑定(`workflowPath`+`triggerTiming`+`approveNode`/`approveLink`),不走 pathdef/addaction,无需单独绑节点。默认保存并启用;`{"mode":"stash",...}` 显式暂存。组件契约/参数/映射/条件的权威是 `e10-cli actionflow component-describe <type>`,详见 `actionflows/SKILL.md`。覆盖 ActionEb 全系列/Approve/Document/Hrm/触发器/消息/会议日程/逻辑 20+ 组件 |
197
+ | `e10-cli actionflow generate '{"planFile":"@plan.json","appName":"AI-名称"}'` | **动作流生成**(语义 plan → 编译 → preflight → 保存并启用 → 正式回读,返回设计器链接)。`planFile` 必须以 `@` 引用文件(`@plan.json` 或 `@绝对路径`),CLI 强制要求 `@` 前缀。event 节点 `ApproveTrigger` 自带流程节点触发绑定(`workflowPath`+`triggerTiming`+`approveNode`/`approveLink`),不走 pathdef/addaction,无需单独绑节点。默认保存并启用;`{"mode":"stash",...}` 显式暂存。组件契约/参数/映射/条件的权威是 `e10-cli actionflow component-describe <type>`,详见 `actionflows/SKILL.md`。覆盖 ActionEb 全系列/Approve/Document/Hrm/触发器(含 CustomTrigger、InnerMQListener)/消息(含 InnerMQSend)/会议日程/逻辑 20+ 组件;InnerMQListener 与 InnerMQSend 同流互斥 |
198
+ | `e10-cli actionflow update '@update-plan.json'` | **已有动作流保留式修改**(精确 appId → 读正式设计 → 备份 → 按原节点 ID 显式 operations → saveDesign(saveNewVersion=true) → 正式回读)。**不可改 event 触发器**(触发类型/表单/时机/参数变了就新建);未声明内容保留。触发类型含按钮触发、自定义触发、内置 MQ 监听/发送 |
179
199
  | `e10-cli workflow action list-node <wf> <nodeId> [--trigger-type all\|link]` | 列出节点绑定的动作(getAddActionDataList)。显示每条的动作类型/appId/触发时机,type0 还带字段=值 |
180
200
  | `e10-cli workflow action clear-node <wf> <nodeId> [--trigger-type all\|link]` | **清空节点所有动作绑定**(deleteAddAction + delList)。清理重复 add/已删实体残留的悬空绑定;动作流实体另用 `action delete` 清 |
181
201
  | `e10-cli workflow action disable <appId> <name>` | 禁用动作流(禁用后才能删除) |
@@ -201,8 +221,11 @@
201
221
  |------|------|
202
222
  | `e10-cli menu list <appId>` | 列出当前Ebuilder应用下的菜单 |
203
223
  | `e10-cli menu add <name> <path> <appId>` | 将页面加入左侧导航(LINK 类型,URL path)。ecode 页面 path 如 `/sp/custom/ecode/project-list`。**表单台账/流程发起菜单用下面两条专用命令**(VIEWPORT/LAYOUT 类型,非 URL) |
204
- | `e10-cli menu add-table <appId> <objId> [name]` | 给表单加**台账菜单**(VIEWPORT,指向数据列表页)。`form create` 已自动加,此命令用于事后补加 |
205
- | `e10-cli menu add-start <appId> <formObjId> [name]` | 给流程绑定的表单加**发起菜单**(LAYOUT,指向表单新建页,点开触发流程)。`workflow create` 已自动加,此命令用于事后补加 |
224
+ | `e10-cli menu add-table <appId> <objId> [name]` | 给表单加**台账菜单**(VIEWPORT,指向数据列表页)。`form create --menu` 才自动加(默认不加),此处用于事后补加 |
225
+ | `e10-cli menu add-start <appId> <formObjId> [name]` | 给流程绑定的表单加**发起菜单**(LAYOUT,指向表单新建页,点开触发流程)。`workflow create --menu` 才自动加(默认不加) |
226
+ | `e10-cli menu permission list <appId> <menuId>` | 列菜单可见范围授权(**默认所有人**;无输出=全可见) |
227
+ | `e10-cli menu permission add <appId> <menuId> <目标> --type role\|dept\|user\|all` | 给菜单授权。默认语义:**加角色/人/部门后自动撤「所有人」→ 只有授权对象可见**;`--keep-all` 保留所有人;`--type all` 恢复"所有人可见" |
228
+ | `e10-cli menu permission remove <appId> <menuId> <目标> --type role\|dept\|user\|all` | 撤销菜单授权(撤销所有人用 `--type all`) |
206
229
  | `e10-cli menu delete <menuId> <appId>` | 删除菜单项 |
207
230
 
208
231
  ---
@@ -216,6 +239,17 @@
216
239
 
217
240
  ---
218
241
 
242
+ ## 版本更新(只提醒,升级需确认)
243
+
244
+ | 命令 | 说明 |
245
+ |------|------|
246
+ | `e10-cli update check` | 强制连网查一次(忽略 24h 缓存),显示 当前/最新/结论。`--on`/`--off` 开关注册 |
247
+ | `e10-cli update apply [--yes]` | 升级到最新(打印将执行的 `npm install -g weaver-e10-builder@<最新>` 并询问确认;加 `--yes` 跳过确认)。仅在线可用,内网走离线 tgz |
248
+
249
+ > **自动提醒**:每次 `e10-cli auth status` 末尾静默检查(每 24h 最多连网一次;离线/内网自动跳过不打扰)。检测到新版本只打一行 `💡 有新版本…`,**不自动安装**。
250
+
251
+ ---
252
+
219
253
  ## 代码检查
220
254
 
221
255
  | 命令 | 说明 |
@@ -267,7 +301,7 @@ e10-cli workflow set-link-condition-key <wf> <linkId> <key> <nodeId>
267
301
  # 9. 添加菜单
268
302
  e10-cli menu add 会议室预订 /sp/custom/ecode/meeting/list <appId>
269
303
 
270
- # 10. 配置动作流(新增/更新/删除)—— 统一走 actionflow generate(语义 plan)
304
+ # 10. 配置动作流(新建/修改)—— 新建走 generate,已有流修改走 update
271
305
  # 先查目标表字段 + 流程上下文 paramKey
272
306
  e10-cli actionflow form-fields '{"tableId":"<targetTableId>","appId":"<targetAppId>"}'
273
307
  e10-cli actionflow workflow-context-fields '{"workflowId":"<wf>"}'
@@ -2,13 +2,15 @@
2
2
 
3
3
  通过 `e10-cli form create` 创建表单。
4
4
 
5
+ 建表自带默认台账;方案要求同一表单的普通列表时,查询 `form list-view <objId> <appId>` 并复用,名称略有差异也不另建。默认保留名称,记录实际 listId,详见[视图指南](guide-form-view.md)。
6
+
5
7
  > **重要**:字段定义一次性写全(含选项、默认值等)。不要先建空表再逐个 `add-field` —— add-field 只用于罕见补救。
6
8
 
7
9
  ## 基本用法
8
10
 
9
11
  ```bash
10
12
  e10-cli form create {应用ID} "表单名" --fields @fields.json
11
- # 建表后自动加「台账菜单」(VIEWPORT,指向数据列表页);加 --no-menu 可跳过
13
+ # 默认不加菜单;要入口传 --menu(台账菜单 VIEWPORT,指向数据列表页)。漏加可用 `e10-cli menu add-table <appId> <objId>` 补
12
14
  ```
13
15
 
14
16
  不传 `--fields` 时使用默认字段:名称(Text)、数量(Number)、日期(Date)、状态(Select)。
@@ -156,7 +158,7 @@ e10-cli form create {应用ID} "表单名" --fields @fields.json
156
158
  | DateRange | 日期区间 |
157
159
  | Time | 时间 |
158
160
  | EBuilder | 关联 EB 表单(见下节) |
159
- | Flow | **浏览-流程**(关联流程,如"数据来源"来自项目立项流程;`--sform-id` 为目标流程绑定的表单 objId,点击自动跳流程) |
161
+ | Flow | **浏览-流程**(关联流程,如"数据来源"来自项目立项流程;`--sform-id` 为目标流程绑定的表单 objId,点击自动跳流程)。**form create 的 fields.json 直接写 `"sformId":"<流程表单objId>"` 即可**(建表后 CLI 自动绑 sformId/relateExt,与 EBuilder 同机制);add-field 用 `--sform-id`。⚠ sformId 必须是**流程绑定的表单 objId**(不是 workflowId),即"仅允许关联某流程"=Flow 字段 + sformId 指向该流程的表单 |
160
162
 
161
163
  正常情况下,人相关的 都是用Employee
162
164
  Time 的格式固定为 HH:mm:ss 如 17:00:00