weaver-e10-builder 1.0.11-beta → 1.0.12-beta

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 (175) hide show
  1. package/dist/commands/auth.d.ts.map +1 -1
  2. package/dist/commands/auth.js +13 -0
  3. package/dist/commands/auth.js.map +1 -1
  4. package/dist/commands/form-list-permission.d.ts.map +1 -1
  5. package/dist/commands/form-list-permission.js +130 -15
  6. package/dist/commands/form-list-permission.js.map +1 -1
  7. package/dist/commands/form-nlist.d.ts +22 -0
  8. package/dist/commands/form-nlist.d.ts.map +1 -0
  9. package/dist/commands/form-nlist.js +179 -0
  10. package/dist/commands/form-nlist.js.map +1 -0
  11. package/dist/commands/form-serial-mark.d.ts +0 -15
  12. package/dist/commands/form-serial-mark.d.ts.map +1 -1
  13. package/dist/commands/form-serial-mark.js +604 -137
  14. package/dist/commands/form-serial-mark.js.map +1 -1
  15. package/dist/commands/form.d.ts.map +1 -1
  16. package/dist/commands/form.js +91 -0
  17. package/dist/commands/form.js.map +1 -1
  18. package/dist/commands/skill.d.ts +3 -0
  19. package/dist/commands/skill.d.ts.map +1 -0
  20. package/dist/commands/skill.js +112 -0
  21. package/dist/commands/skill.js.map +1 -0
  22. package/dist/commands/workflow-condition.d.ts.map +1 -1
  23. package/dist/commands/workflow-condition.js +3 -1
  24. package/dist/commands/workflow-condition.js.map +1 -1
  25. package/dist/commands/workflow.d.ts.map +1 -1
  26. package/dist/commands/workflow.js +11 -7
  27. package/dist/commands/workflow.js.map +1 -1
  28. package/dist/index.js +4 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/services/condition-rules.d.ts.map +1 -1
  31. package/dist/services/condition-rules.js +3 -1
  32. package/dist/services/condition-rules.js.map +1 -1
  33. package/dist/services/form-create.d.ts.map +1 -1
  34. package/dist/services/form-create.js +4 -1
  35. package/dist/services/form-create.js.map +1 -1
  36. package/dist/services/form-nlist.d.ts +42 -0
  37. package/dist/services/form-nlist.d.ts.map +1 -0
  38. package/dist/services/form-nlist.js +332 -0
  39. package/dist/services/form-nlist.js.map +1 -0
  40. package/dist/services/skill-provision.d.ts +18 -0
  41. package/dist/services/skill-provision.d.ts.map +1 -0
  42. package/dist/services/skill-provision.js +86 -0
  43. package/dist/services/skill-provision.js.map +1 -0
  44. package/dist/services/workflow-initiator.js +3 -3
  45. package/dist/services/workflow-initiator.js.map +1 -1
  46. package/package.json +4 -2
  47. package/skill-docs/SKILL.md +348 -0
  48. package/skill-docs/actionflows/references/components/calendar/MeetingCreate.md +17 -0
  49. package/skill-docs/actionflows/references/components/calendar/ScheduleCreate.md +17 -0
  50. package/skill-docs/actionflows/references/components/document/AttachmentCopy.md +17 -0
  51. package/skill-docs/actionflows/references/components/document/AttachmentMove.md +17 -0
  52. package/skill-docs/actionflows/references/components/document/DocumentCopy.md +17 -0
  53. package/skill-docs/actionflows/references/components/document/DocumentDelete.md +17 -0
  54. package/skill-docs/actionflows/references/components/document/DocumentEdit.md +17 -0
  55. package/skill-docs/actionflows/references/components/document/DocumentMove.md +17 -0
  56. package/skill-docs/actionflows/references/components/document/DocumentPermissionChange.md +17 -0
  57. package/skill-docs/actionflows/references/components/document/DocumentRenewal.md +17 -0
  58. package/skill-docs/actionflows/references/components/document/DocumentRevert.md +17 -0
  59. package/skill-docs/actionflows/references/components/document/DocumentSave.md +17 -0
  60. package/skill-docs/actionflows/references/components/document/DocumentSubscription.md +17 -0
  61. package/skill-docs/actionflows/references/components/document/DocumentSubscriptionApprove.md +17 -0
  62. package/skill-docs/actionflows/references/components/document/DocumentSubscriptionSendBack.md +17 -0
  63. package/skill-docs/actionflows/references/components/document/DocumentSubscriptionWithdraw.md +17 -0
  64. package/skill-docs/actionflows/references/components/document/FileFolderSave.md +17 -0
  65. package/skill-docs/actionflows/references/components/document/GetAttachmentInfo.md +17 -0
  66. package/skill-docs/actionflows/references/components/document/GetDocumentInfo.md +17 -0
  67. package/skill-docs/actionflows/references/components/document/ModifyDocumentStatus.md +17 -0
  68. package/skill-docs/actionflows/references/components/document/ReplaceAttachment.md +17 -0
  69. package/skill-docs/actionflows/references/components/document/UpdatePrintNum.md +17 -0
  70. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +39 -0
  71. package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +21 -0
  72. package/skill-docs/actionflows/references/components/ebuilder/ActionEbRecover.md +17 -0
  73. package/skill-docs/actionflows/references/components/ebuilder/ActionEbSaveVersion.md +17 -0
  74. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +21 -0
  75. package/skill-docs/actionflows/references/components/ebuilder/DateTrigger.md +17 -0
  76. package/skill-docs/actionflows/references/components/ebuilder/EbGetDataById.md +17 -0
  77. package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +75 -0
  78. package/skill-docs/actionflows/references/components/ebuilder/EventFormData.md +17 -0
  79. package/skill-docs/actionflows/references/components/ebuilder/TimeBatchTrigger.md +17 -0
  80. package/skill-docs/actionflows/references/components/logic/Condition.md +23 -0
  81. package/skill-docs/actionflows/references/components/logic/LogicFlowSet.md +17 -0
  82. package/skill-docs/actionflows/references/components/logic/MultipleExecution.md +38 -0
  83. package/skill-docs/actionflows/references/components/logic/Output.md +17 -0
  84. package/skill-docs/actionflows/references/components/message/SendMessage.md +17 -0
  85. package/skill-docs/actionflows/references/components/personnel/AlterPersonStatus.md +30 -0
  86. package/skill-docs/actionflows/references/components/personnel/HrmEmployeeUpdate.md +32 -0
  87. package/skill-docs/actionflows/references/components/personnel/PersonnelOnboarding.md +34 -0
  88. package/skill-docs/actionflows/references/components/trigger/SimpleScheduler.md +17 -0
  89. package/skill-docs/actionflows/references/components/workflow/ApproveAddSign.md +17 -0
  90. package/skill-docs/actionflows/references/components/workflow/ApproveAgreeRejectApply.md +17 -0
  91. package/skill-docs/actionflows/references/components/workflow/ApproveCommit.md +17 -0
  92. package/skill-docs/actionflows/references/components/workflow/ApproveCompletelyDelete.md +17 -0
  93. package/skill-docs/actionflows/references/components/workflow/ApproveConsulTurnTodo.md +17 -0
  94. package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +17 -0
  95. package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +17 -0
  96. package/skill-docs/actionflows/references/components/workflow/ApproveDoCirculate.md +17 -0
  97. package/skill-docs/actionflows/references/components/workflow/ApproveDoForward.md +17 -0
  98. package/skill-docs/actionflows/references/components/workflow/ApproveDoTurnTodo.md +17 -0
  99. package/skill-docs/actionflows/references/components/workflow/ApproveEntrust.md +17 -0
  100. package/skill-docs/actionflows/references/components/workflow/ApproveIntervention.md +17 -0
  101. package/skill-docs/actionflows/references/components/workflow/ApproveMandatoryArchiving.md +17 -0
  102. package/skill-docs/actionflows/references/components/workflow/ApproveManualCC.md +17 -0
  103. package/skill-docs/actionflows/references/components/workflow/ApproveRefuseRejectApply.md +17 -0
  104. package/skill-docs/actionflows/references/components/workflow/ApproveRejectApply.md +17 -0
  105. package/skill-docs/actionflows/references/components/workflow/ApproveSave.md +17 -0
  106. package/skill-docs/actionflows/references/components/workflow/ApproveSendBack.md +17 -0
  107. package/skill-docs/actionflows/references/components/workflow/ApproveShareEntry.md +17 -0
  108. package/skill-docs/actionflows/references/components/workflow/ApproveTrigger.md +49 -0
  109. package/skill-docs/actionflows/references/components/workflow/ApproveWithdraw.md +17 -0
  110. package/skill-docs/actionflows/references/components/workflow/WorkFlowDocEmpowerment.md +17 -0
  111. package/skill-docs/actionflows/references/components/workflow/WorkflowToDoc.md +17 -0
  112. package/skill-docs/actionflows/references/condition_rules.md +97 -0
  113. package/skill-docs/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1046 -0
  114. package/skill-docs/actionflows/references/function_rules.md +13 -0
  115. package/skill-docs/actionflows/references/trigger_runtime_notes.md +51 -0
  116. package/skill-docs/assets/sample/.claude/settings.local.json +8 -0
  117. package/skill-docs/assets/sample/api/formApi.js +510 -0
  118. package/skill-docs/assets/sample/config/config.js +0 -0
  119. package/skill-docs/assets/sample/config/configLoad.js +0 -0
  120. package/skill-docs/assets/sample/config/configLoad_default.js +0 -0
  121. package/skill-docs/assets/sample/config/config_default.js +0 -0
  122. package/skill-docs/assets/sample/entry.js +22 -0
  123. package/skill-docs/assets/sample/eslint.config.cjs +48 -0
  124. package/skill-docs/assets/sample/memo.md +0 -0
  125. package/skill-docs/assets/sample/readme.js +8 -0
  126. package/skill-docs/references/auth/guide-auth.md +88 -0
  127. package/skill-docs/references/coding/guide-edit-backfill.md +189 -0
  128. package/skill-docs/references/coding/guide-form-crud.md +262 -0
  129. package/skill-docs/references/coding/guide-page-code.md +224 -0
  130. package/skill-docs/references/coding/guide-page-export.md +119 -0
  131. package/skill-docs/references/coding/ref-compile-rules.md +106 -0
  132. package/skill-docs/references/common/ref-cli-commands.md +286 -0
  133. package/skill-docs/references/components/@weapp-Button.md +104 -0
  134. package/skill-docs/references/components/base-Badge.md +100 -0
  135. package/skill-docs/references/components/base-Dialog.md +358 -0
  136. package/skill-docs/references/components/base-Empty.md +58 -0
  137. package/skill-docs/references/components/base-Tag.md +112 -0
  138. package/skill-docs/references/components/display-Alert.md +64 -0
  139. package/skill-docs/references/components/display-Avatar.md +150 -0
  140. package/skill-docs/references/components/display-Calendar.md +263 -0
  141. package/skill-docs/references/components/display-Carousel.md +115 -0
  142. package/skill-docs/references/components/display-Collapse.md +299 -0
  143. package/skill-docs/references/components/display-FilePreview.md +49 -0
  144. package/skill-docs/references/components/display-Icon.md +66 -0
  145. package/skill-docs/references/components/display-List.md +320 -0
  146. package/skill-docs/references/components/display-Pagination.md +41 -0
  147. package/skill-docs/references/components/display-Spin.md +34 -0
  148. package/skill-docs/references/components/display-Steps.md +89 -0
  149. package/skill-docs/references/components/display-Table.md +160 -0
  150. package/skill-docs/references/components/display-Title.md +117 -0
  151. package/skill-docs/references/components/form-Checkbox.md +161 -0
  152. package/skill-docs/references/components/form-DepartmentBrowser-api.md +52 -0
  153. package/skill-docs/references/components/form-EmployeeBrowser-api.md +51 -0
  154. package/skill-docs/references/components/form-EmployeeBrowser.md +51 -0
  155. package/skill-docs/references/components/form-Input.md +123 -0
  156. package/skill-docs/references/components/form-Radio.md +145 -0
  157. package/skill-docs/references/components/form-Select.md +191 -0
  158. package/skill-docs/references/components/form-Switch.md +46 -0
  159. package/skill-docs/references/components/form-Upload.md +53 -0
  160. package/skill-docs/references/components/generic-Echarts.md +102 -0
  161. package/skill-docs/references/form/guide-create-form.md +407 -0
  162. package/skill-docs/references/form/guide-ebuilder-filter.md +73 -0
  163. package/skill-docs/references/form/guide-ebuilder-scope.md +82 -0
  164. package/skill-docs/references/form/guide-form-data.md +48 -0
  165. package/skill-docs/references/form/guide-form-formula-functions.md +297 -0
  166. package/skill-docs/references/form/guide-form-linkage.md +185 -0
  167. package/skill-docs/references/form/guide-form-view-permission.md +38 -0
  168. package/skill-docs/references/form/guide-form-view.md +267 -0
  169. package/skill-docs/references/form/style-templates.md +44 -0
  170. package/skill-docs/references/hrm/guide-matrix.md +103 -0
  171. package/skill-docs/references/menu/system-menus.md +63 -0
  172. package/skill-docs/references/workflow/guide-workflow-action.md +168 -0
  173. package/skill-docs/references/workflow/guide-workflow-condition.md +405 -0
  174. package/skill-docs/references/workflow/guide-workflow.md +388 -0
  175. package/skill-docs/references/workflow/operator-matrix.md +74 -0
@@ -0,0 +1,267 @@
1
+ # 表单视图:新建与验收
2
+
3
+ 表单创建后已有默认台账;只有用户明确需要额外视图时才创建。表格视图是 `nListView` 数据列表,和普通 `formView` 是两条不同链路。
4
+
5
+ ## 需求判别
6
+
7
+ - “新建表单” → `form create --fields`。
8
+ - “在已有表单下新增表格视图” → `form table-view create`;命令必须同时保存显示列并回读。
9
+ - “在已有表单下新增表单视图” → `form view create --type formView`,随后必须 `form view populate`;不得新建另一张表单。
10
+
11
+ ## 命令
12
+
13
+ ```bash
14
+ # 查询表单下全部视图
15
+ e10-cli form view list <objId> <appId>
16
+
17
+ # 创建可用表格视图;默认放入全部已有字段
18
+ e10-cli form table-view create <objId> <appId> "审批数据表格" --pc-only
19
+
20
+ # 创建看板视图(默认 PC + FLOW 布局)
21
+ e10-cli form view create <objId> <appId> "按状态看板" --type kanbanView
22
+
23
+ # 新增表单视图——流式布局(FLOW)
24
+ e10-cli form view create <objId> <appId> "新增-流式视图" --type formView --layout-type FLOW
25
+
26
+ # 新增表单视图——表格式布局(EXCEL)
27
+ e10-cli form view create <objId> <appId> "新增-EXCEL视图" --type formView --layout-type EXCEL
28
+
29
+ # 第 2 步:把已有字段按目标布局类型填入新建 formView(流式/EXCEL 各自生成对应组件)
30
+ e10-cli form view populate <objId> <appId> <viewId>
31
+
32
+ # 创建移动端日历视图
33
+ e10-cli form view create <objId> <appId> "交付日历" \
34
+ --type calendarView --terminal MOBILE --layout-type FLOW
35
+ ```
36
+
37
+ **给已有表单加表单视图是两步闭环**(缺一不可):
38
+ 1. `form view create --type formView --layout-type FLOW|EXCEL` —— 建一个**空**的 formView 实体,`--layout-type` 决定流式(FLOW)还是表格式(EXCEL)。同一张表单可同时存在多个 formView,布局类型可不同(如一张表既加流式视图又加 EXCEL 视图)。
39
+ 2. `form view populate <objId> <appId> <viewId>` —— 把已有字段按目标布局类型填进去。流式视图生成流式组件、EXCEL 视图生成表格定位,**不得把 EXCEL 定位直接复制到 FLOW 视图**。
40
+
41
+ `form view populate` 以原表单 `formId` 读取字段,以新视图 `viewId` 作为 `layoutMultiId` 读取目标布局,再按目标的 FLOW/EXCEL 类型重新生成字段组件并独立回读。不得把视图的 `versionId` 或 `pageLayoutId` 当成 `formId`。
42
+
43
+ 看板、日历、思维导图目前只确认创建实体和视图列表回读,尚不能据此宣称设计器已有可用组件。
44
+
45
+ 普通 `form view create --type` 只接受:
46
+
47
+ - `formView`:详情视图
48
+ - `kanbanView`:看板视图
49
+ - `calendarView`:日历视图
50
+ - `mindMapView`:思维导图视图
51
+ - `multiView`:多维表格视图(无 layoutType/terminalType,带 `extConfig:{listVersion:5}`)。**数据维度**:缺省主表(`subFormId:""/subFormMain:false`);明细表维度用 `--detail <明细名>`(按名解析明细 subFormId)或 `--sub-form-id <明细subFormId>`(直传),传值即 `subFormId:<明细subFormId>/subFormMain:true`。明细子表名/subFormId 用 `dataset/v1/getFields` detailFields 查(真 subFormId 在 `fields[].subFormId`,非 `dt.id`)。**多维表格显示列**复用台账同一套 `saveNListConfig/getNListConfig`,直接用 `form list-columns <objId> <appId> <multiView的viewId> --add <fieldId>` 加列。
52
+
53
+ `tableView`/`nListView` 不得传给普通视图命令。真实表格视图固定使用 `form table-view create`。
54
+
55
+ ## 表格视图固定闭环
56
+
57
+ ```bash
58
+ # 1. 确认目标表单和同名列表不存在
59
+ e10-cli form list <appId>
60
+ e10-cli form list-view <objId> <appId>
61
+
62
+ # 2. 创建 nListView、写入全部业务显示列和隐藏数据主键、独立回读
63
+ e10-cli --json form table-view create <objId> <appId> "<表格视图名>" --pc-only
64
+
65
+ # 3. 再次独立查询表单下列表
66
+ e10-cli --json form list-view <objId> <appId>
67
+ ```
68
+
69
+ 命令先用 `viewType=nListView` 创建,再以新 `listId` 读取 PC 配置;业务列必须取自 `/api/ebuilder/common/ds/fields` 的完整字段对象,不能只拼字段 ID。保存时保留服务端配置和隐藏主键 `id=5`,最后回读 `tableField` 和列表实体。已有同名视图时停止,不盲目重建。
70
+
71
+ `--pc-only` 只用于已确认本次验收为 PC 的场景。未指定时,命令必须取得真实 MOBILE 配置,禁止用 PC 配置推导移动端。
72
+
73
+ 服务器通过必须同时满足:
74
+
75
+ - 创建后按返回 `listId` 找到同名列表。
76
+ - `persisted=true`。
77
+ - `visibleFieldCount` 等于目标业务字段数。
78
+ - `tableFieldCount` 还包含隐藏主键。
79
+ - 再查 `form list-view` 仍能按相同 ID 和名称找到。
80
+
81
+ 前端无数据时可以没有数据行,但必须看见业务字段列头;否则仍是空壳,不能验收。
82
+
83
+ ## 表格视图展示样式
84
+
85
+ ```bash
86
+ e10-cli --json form table-view style <objId> <appId> <listId> <style>
87
+ ```
88
+
89
+ `style` 使用前台语义,不直接让使用者猜内部 `mode`:
90
+
91
+ | style | 前台展示样式 | mode |
92
+ |---|---|---|
93
+ | `table` | 表格式 | `1` |
94
+ | `list` | 列表式 | `2` |
95
+ | `left-diagram` | 左图式 | `3` |
96
+ | `horizontal-list` | 横向列表式 | `4` |
97
+ | `above` | 上图式 | `5` |
98
+ | `grid` | 网格列表式 | `7` |
99
+ | `editable` | 可编辑表格(编辑态) | `11` |
100
+
101
+ 可编辑表格内部还有数据态 `8` 和只读态 `9`;用户要求“改成可编辑表格”时必须使用编辑态 `11`,不得把只读态 `9` 当成完成。
102
+
103
+ 命令先确认 `listId` 属于目标 `objId`,分别读取完整 PC/MOBILE 配置,只修改 PC 顶层 `mode`,保存后重新读取 PC 配置。移动端配置必须原样保留;读取不到时,只有明确 `--pc-only` 才允许继续。
104
+
105
+ 前端验收:重新进入“基础设置 → 展示样式”仍显示“可编辑表格”,并且列表进入可编辑状态。
106
+
107
+ ## 常用搜索显示方式
108
+
109
+ ```bash
110
+ # PC 常用搜索显示为高级搜索;filter 表示筛选
111
+ e10-cli --json form table-view search-style <objId> <appId> <listId> advanced
112
+ ```
113
+
114
+ 显示方式固定为 `advanced → commonSearchType="0"`、`filter → commonSearchType="1"`,不得直接猜内部值。
115
+
116
+ 命令先确认 `listId` 属于目标表单,完整保留 PC 其他配置和真实 MOBILE 配置,保存后重新读取目标属性。前端验收:“常用搜索 → 基础信息 → 显示方式”能正常打开,且刷新后仍为目标方式;若配置页异常,接口回读成功也不能验收。
117
+
118
+ ## 常用搜索字段
119
+
120
+ ```bash
121
+ e10-cli --json form table-view search-field add <objId> <appId> <listId> <fieldId>
122
+
123
+ # 按前端字段设置面板配置搜索项
124
+ e10-cli --json form table-view search-field configure \
125
+ <objId> <appId> <listId> <fieldId> \
126
+ --display-name "单据名称" \
127
+ --default-value "111" \
128
+ --required 0 \
129
+ --full-match 0 \
130
+ --condition like
131
+ ```
132
+
133
+ 命令必须从当前数据源接口取得完整字段模型,按前端最终保存结构生成搜索项:字段 `id` 与独立的 18 位 `filterId` 不得混用,字段自身 `multiSelect` 原样保留,搜索默认配置单独写入 `listFilterDefaultSets`。保存时完整保留 PC 其他配置和真实 MOBILE 配置,再独立回读字段及条件关系。
134
+
135
+ 具体配置固定映射:
136
+
137
+ - `--default-value`:固定默认值,写为 `defaultType="1"` 与 `startValue`;`--clear-default` 清除。`Select` 字段可传选项名称或选项 ID,CLI 必须从当前数据源解析为唯一真实 ID,并保留完整选项对象供前端回显。
138
+ - `--required 0|1`:条件是否必填,写为字段级 `required`。
139
+ - `--full-match 0|1`:搜索内容是否完整匹配,写入 `listFilterDefaultSets.searchContentFullMatches`。
140
+ - `--condition like|eq|...`:必须来自该字段实际允许的条件,同时更新字段层与默认设置层。
141
+ - `--display-name`:更新搜索项 `showName`;不得覆盖原字段名和字段 ID。
142
+
143
+ 前端验收:打开“搜索配置”不报异常,目标字段出现在常用搜索字段中;刷新列表后可使用该字段发起搜索。只通过接口回读不能验收。
144
+
145
+ ## 台账显示列/搜索/排序/统计/视图数据条件/行事件/启用分组/视图权限/分类搜索(list-columns / list-search / list-sort / list-stats / list-filter / list-event / list-group / list-permission / list-search-group)
146
+
147
+ 直接改默认台账(nListView)的显示列、搜索条件、排序、顶部统计、视图数据条件。listId 取 `form list-view` 返回的列表视图 ID。这些命令都只改 PC 端,**保存时先读回真实移动端 mConfig 原样回传,不会清空移动端**(`saveNListConfig` 一次请求里 `config`→PC 端、`mConfig`→移动端,两端列集合/uid 各自独立)。只有明确目标只使用 PC、移动端配置确实不存在时,才加 `--pc-only`。
148
+
149
+ ```bash
150
+ # 查看当前显示列
151
+ e10-cli form list-columns <objId> <appId> <listId>
152
+
153
+ # 追加字段到显示列 / 移除字段
154
+ e10-cli form list-columns <objId> <appId> <listId> --add <fieldId>
155
+ e10-cli form list-columns <objId> <appId> <listId> --remove <fieldId>
156
+
157
+ # 列显示格式:千分位/小数位(Number/Money 列,走列对象 format/decimalLength)
158
+ e10-cli form list-format <objId> <appId> <listId> <fieldId> --thousandths --decimal 2
159
+ e10-cli form list-format <objId> <appId> <listId> <fieldId> --no-thousandths
160
+ # 列显示单位:后缀/前缀(走列 showTrans.ruleConfig,与千分位是两套机制)
161
+ e10-cli form list-unit <objId> <appId> <listId> <fieldId> "(元)"
162
+
163
+ # 配置搜索:--add 进搜索面板,--quick 加顶部快捷筛选(均支持多字段)
164
+ e10-cli form list-search <objId> <appId> <listId> --add <fieldId1> <fieldId2>
165
+ e10-cli form list-search <objId> <appId> <listId> --quick <fieldId1> <fieldId2>
166
+ # 主表字段直接从 ds/fields 解析;明细子字段经 getFormField 单取元数据(ds/fields 合并不展开)
167
+
168
+ # 配置排序 / 清除(--field 支持多个,按传入顺序多级排序;--order 对所有字段生效)
169
+ e10-cli form list-sort <objId> <appId> <listId> --field <fieldId1> <fieldId2> --order ASC
170
+ e10-cli form list-sort <objId> <appId> <listId> --clear
171
+
172
+ # 顶部统计:type=sum 求和 / count 计数 / avg 平均 / max 最大 / min 最小
173
+ # 可选:thousandths=true 千分位 / decimalPlaces="2" 小数位 / unit="万" 单位(unitType=tenThousand)
174
+ e10-cli form list-stats <objId> <appId> <listId> --add '{"fieldId":"...","type":"sum","name":"合同总金额","thousandths":true,"decimalPlaces":"2","unit":"万"}'
175
+
176
+ # 条件统计:conditions 数组构造明文条件树填 rootdata(发明文保存成功、读回也是明文,无需 LZW 编码)
177
+ # func: eq 等于 / neq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / range 区间 / isNull 为空 / isNotNull 不为空
178
+ # 单选 Select 用 eq;notEq/between 为兼容别名自动归一为 neq/range;range 的 value 用数组 [起,止];value 填选项 valueKey、text 填显示名;多条件默认 AND
179
+ e10-cli form list-stats <objId> <appId> <listId> --add '{"fieldId":"金额fieldId","type":"sum","name":"研发合同额","thousandths":true,"unit":"万","conditions":[{"fieldId":"项目类型fieldId","func":"eq","value":"研发valueKey","text":"研发"}]}'
180
+ e10-cli form list-stats <objId> <appId> <listId> --remove <statId> # 平台 statisticsList 是 upsert 语义,删除靠标 operation:DELETE(splice 不删)
181
+
182
+ # 视图数据条件:台账只显示满足条件的数据(走 saveNListConfig config.filter,明文条件树,非独立接口——
183
+ # conditionEditor/saveOrUpdate 表单级不挂视图、saveBaseinfo 带 conditionData 都是错误端点)
184
+ # func 取值同条件统计(eq 等于 / neq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / range 区间 / isNull 为空 / isNotNull 不为空,单选 Select 用 eq);value 填选项 valueKey,text 填显示名;多条件默认 AND
185
+ e10-cli form list-filter <objId> <appId> <listId> --add '{"conditions":[{"fieldId":"项目类型fieldId","func":"eq","value":"研发valueKey","text":"研发"}]}'
186
+ e10-cli form list-filter <objId> <appId> <listId> --clear
187
+
188
+ # 行事件:点击行数据 NewPage 打开(走 saveNListConfig config.eventGroup,明文 JSON,config+mConfig 都要写)
189
+ # --add-page 选页面:pageId 缺省 "1/<objId>"(表单新建布局),"0/<objId>"=显示布局
190
+ # 打开方式 openMode(linkInfo.openMode 权威,page.openMode 恒 4):
191
+ # 当前页面=4 / 新窗口=0 / 弹出窗口=5 / 右侧滑出=1(缺省) / 右侧推出=7
192
+ # 弹出/滑出/推出 带弹窗宽高(--modal-width/--modal-height,缺省 50%);滑出/推出 额外带 winSizeNew(--win-size,缺省 100%)
193
+ # --add-field 选字段(URL取自行内字段值,urlFieldText/Type自动补)
194
+ e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageName":"新建数据"}'
195
+ e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageId":"0/<objId>","pageName":"显示布局","openMode":"当前页面"}'
196
+ e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageName":"弹窗详情","openMode":"弹出窗口"}' --modal-width 80%
197
+ e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageName":"侧滑详情","openMode":"右侧推出"}' --win-size 60%
198
+ e10-cli form list-event <objId> <appId> <listId> --add-field '{"urlFieldId":"字段id"}'
199
+ e10-cli form list-event <objId> <appId> <listId> --clear
200
+
201
+ # 字段事件(列点击 list-click,区别于行事件 list-event):点某列数据打开该行显示布局(带数据 ID)
202
+ # 打开方式 --open-mode:当前页面/新窗口/弹出窗口/右侧滑出(缺省)/右侧推出;滑出/推出 --win-size 设宽度(缺省 800px,可 50%)
203
+ e10-cli form list-click <objId> <appId> <listId> <fieldId> --open-mode 右侧推出 --win-size 50%
204
+ e10-cli form list-click <objId> <appId> <listId> <fieldId> --target <目标表单objId> --open-mode 弹出窗口
205
+ e10-cli form list-click <objId> <appId> <listId> <fieldId> --clear
206
+
207
+ # 启用分组:台账按某字段分组聚合显示(走 saveNListConfig config.enableGroup 对象 {enable,groupField,groupSize})
208
+ # saveNListConfig 持久化成功,不走 designer/layout/save LZW。group-field 用完整字段对象(自动从 ds/fields 取)
209
+ e10-cli form list-group <objId> <appId> <listId> --enable --group-field <分组字段fieldId> --group-size 100
210
+ e10-cli form list-group <objId> <appId> <listId> --disable # 禁用但保留 groupField/groupSize(仅 enable=false)
211
+
212
+ # 台账视图权限(查阅/查看权限):谁能查看这个台账(走 list/permission/save + getList,专用端点,full-replace 语义 omit即删)
213
+ # selectedType: all(所有人) / user(人员,带--name) / role(角色,--name 缺省自动查) / matrix(矩阵,用 --add-raw 传整对象)
214
+ e10-cli form list-permission <objId> <appId> <listId> --add-all
215
+ e10-cli form list-permission <objId> <appId> <listId> --add-user <userId> --name <人员名>
216
+ e10-cli form list-permission <objId> <appId> <listId> --add-role <roleId> # --name 缺省自动从角色树查名
217
+ e10-cli form list-permission <objId> <appId> <listId> --add-role <roleId> --share-level 2 # 加同一角色另一个共享级别
218
+ e10-cli form list-permission <objId> <appId> <listId> --add-role <roleId> --seclevel 30-80 # 安全级别范围
219
+ e10-cli form list-permission <objId> <appId> <listId> --add-raw '{"selectedType":"matrix","name":"...","dataid":"矩阵id",...}'
220
+ e10-cli form list-permission <objId> <appId> <listId> --remove <权限id>
221
+ e10-cli form list-permission <objId> <appId> <listId> --clear
222
+
223
+ # 每条授权对象的两个可配维度(抓包坐实,mulinquan 2026-09-02):
224
+ # 安全级别 = levelScope.minShowlevel/maxShowlevel(字符串范围,--seclevel <min>-<max>,如 0-100 / 30-80;role 缺省 0-100、all 缺省空)
225
+ # 共享级别 = roleLevel(实测: 总部=1 分部=2 全部=3)。同一角色可按不同共享级别各存一条(同 role 两条 roleLevel 1/2 并存)→ 去重键含 roleLevel
226
+ # 幂等:目标(含 roleLevel)已存在时跳过保存,打印「无变化」
227
+
228
+ # 分类搜索:按选项字段分类筛选(走 saveNListConfig config.searchConditions.groupFilters)
229
+ # 仅主表选项类字段(Select/RadioBox/CheckBox),不支持明细字段(产品边界)
230
+ e10-cli form list-search-group <objId> <appId> <listId> --add <选项字段fieldId>
231
+ e10-cli form list-search-group <objId> <appId> <listId> --remove <fieldId>
232
+ e10-cli form list-search-group <objId> <appId> <listId> --clear
233
+ ```
234
+
235
+ 字段 ID 来自 `form read <objId> --app-id <appId>` 或 `form list-columns` 当前列(系统列如 `2`创建者/`3`创建时间/`5`数据ID 也可增删)。保存成功后命令打印 `移动端配置: 保持原样` 即确认移动端未被触碰。
236
+
237
+ ## formView 固定闭环
238
+
239
+ ```bash
240
+ # 1. 确认目标表单与现有视图
241
+ e10-cli form list <appId>
242
+ e10-cli form view list <objId> <appId>
243
+
244
+ # 2. 创建视图并从输出取得 viewId
245
+ e10-cli --json form view create <objId> <appId> "<视图名>" --type formView
246
+
247
+ # 3. 填充已有字段并独立回读
248
+ e10-cli --json form view populate <objId> <appId> <viewId>
249
+ ```
250
+
251
+ `populate` 只有同时满足以下条件才算服务器验证通过:
252
+
253
+ - `success=true`
254
+ - `componentCount > 0`
255
+ - `fieldComponentCount > 0`
256
+ - 重复执行返回 `alreadyPopulated=true`
257
+
258
+ 服务器验证通过后仍需用户确认前端不是空画布、字段名称和特殊配置正确。
259
+
260
+ ## 执行与验收
261
+
262
+ 1. 计划中写明表单 objId、视图名称、类型和终端;用户确认后再写入。
263
+ 2. CLI 先调用 `createView`,再查询该表单的完整视图列表;创建响应本身不是验收。`formView` 随后调用 `populate`:`原 formId + viewId(layoutMultiId)` 读取目标布局,保留目标页面元数据,按目标布局类型重建已有字段组件并保存。
264
+ 3. 回读以返回的 viewId 优先;服务端未返回 ID 时,才按名称、类型和终端唯一匹配。多个候选视图时停止并让用户确认。
265
+ 4. `populate` 回读组件数量和字段 ID;用户再确认新视图设计页出现表单既有字段,而非只有“未分组”的空画布。
266
+
267
+ 服务器成功和独立回读成功但尚未前端确认时,只能标记为“待前端确认”。
@@ -0,0 +1,44 @@
1
+ # 表单布局样式模板
2
+
3
+ > `form layout init --style-template <名|id>` 用这些模板初始化布局。模板列表基本不变,以下为内置 PC/EXCEL 模板(共 20 个)。
4
+
5
+ | styleTemplateId | 模板名 | 说明 |
6
+ |---|---|---|
7
+ | `700000000000000007` | 标准版 | 默认推荐,字段可编辑 |
8
+ | `700000000000000008` | 表格版 | **注意:生成的 comps 默认只读** |
9
+ | `700000000000000009` | 紧凑版 | |
10
+ | `700000000000000010` | 轻便版 | |
11
+ | `830421425497325568` | 靛青线条 | |
12
+ | `830662158415355904` | 简约深蓝 | |
13
+ | `830714355284320256` | 极简淡蓝 | |
14
+ | `830718787623460864` | 现代简约 | |
15
+ | `830722618751066113` | 商务淡蓝 | |
16
+ | `830743788745531393` | 极简白 | |
17
+ | `830749075757998081` | 极简灰 | |
18
+ | `830751622581329920` | 清新蓝绿 | |
19
+ | `830764108161785857` | 淡蓝水晶 | |
20
+ | `830765800429674496` | 银光浅灰 | |
21
+ | `831747419499700225` | 暗夜流光 | |
22
+ | `831759140499447809` | 公文样式 | |
23
+ | `831897833480421377` | 淡雅丁香 | |
24
+ | `917557790734188546` | 商务蓝 | |
25
+ | `933871446777094145` | 碧海蓝天 | |
26
+ | `1000599952745676801` | 青蓝冰水 | |
27
+
28
+ ## 用法
29
+
30
+ ```bash
31
+ # 用模板名(推荐,好记)
32
+ e10-cli form layout init <objId> <appId> --style-template 标准版
33
+
34
+ # 或用 id
35
+ e10-cli form layout init <objId> <appId> --style-template 700000000000000007
36
+
37
+ # 指定视图 + 只读/必填
38
+ e10-cli form layout init <objId> <appId> --view-id <viewId> --style-template 紧凑版 --read-only
39
+ ```
40
+
41
+ ## 注意
42
+
43
+ - 模板只影响**布局样式**(间距/边框/配色),不影响字段的 readOnly/required(这俩由 `--read-only`/`--required` 或 fields.json 控制)。
44
+ - `表格版`(008)历史问题:生成的 comps 默认 readOnly=true。`form layout init` 会显式按 `--read-only`(默认 false 可编辑)覆盖,所以即使用 008 也能可编辑。
@@ -0,0 +1,103 @@
1
+ # HRM 条件矩阵指南
2
+
3
+ > 矩阵 = 「条件维度(行)→ 值维度(列)」的映射查询表。例如:部门 + 费用类型 → 审批人。用于流程中的矩阵对应操作者类型。
4
+
5
+ ## 命令参考
6
+
7
+ ### 矩阵管理
8
+
9
+ | 命令 | 说明 |
10
+ |------|------|
11
+ | `e10-cli matrix create <name>` | 新建矩阵。`--type 0=分部/1=部门/2=自定义` `--desc` `--org-id` |
12
+ | `e10-cli matrix update <id>` | 更新矩阵。`--name` `--desc` `--type` |
13
+ | `e10-cli matrix list` | 查询矩阵列表。`--name` `--enable-status` `--org-id` |
14
+ | `e10-cli matrix config <id>` | 查看矩阵配置(条件字段 + 值字段) |
15
+ | `e10-cli matrix config-edit <id>` | 编辑配置。`--condition` `--value` 或 `--config` 一次性提交 |
16
+ | `e10-cli matrix enable <id>` | 启用矩阵 |
17
+ | `e10-cli matrix disable <id>` | 停用矩阵 |
18
+ | `e10-cli matrix delete <ids...>` | 删除矩阵 |
19
+
20
+ ### 矩阵数据维护
21
+
22
+ | 命令 | 说明 |
23
+ |------|------|
24
+ | `e10-cli matrix data list <matrixId>` | 分页查询矩阵数据行。`--condition` `--value` 过滤 |
25
+ | `e10-cli matrix data save <matrixId> --rows @file` | 保存数据行(新增/修改)。简写: `[{"字段configId":["实体ID"]}]` |
26
+ | `e10-cli matrix data delete <matrixId> <ids...>` | 删除数据行 |
27
+ | `e10-cli matrix data template <matrixId>` | 下载导入模板(Excel) |
28
+ | `e10-cli matrix data import <matrixId> <file>` | 从 Excel 导入。`--mode add/cover` |
29
+
30
+ ---
31
+
32
+ ## 典型工作流
33
+
34
+ ```bash
35
+ # 1. 创建矩阵
36
+ e10-cli matrix create "审批人映射表" --type 2 --desc "部门→审批人"
37
+
38
+ # 2. 查 ID
39
+ e10-cli matrix list --name "审批人"
40
+
41
+ # 3. 配字段(条件=部门,值=审批人)—— 注意:首次配置可能需在 UI 操作
42
+ e10-cli matrix config-edit <matrixId> \
43
+ --condition '[{"type":"department","name":"所属部门"}]' \
44
+ --value '[{"type":"resource","name":"审批人","singleType":1}]'
45
+
46
+ # 4. 启用
47
+ e10-cli matrix enable <matrixId>
48
+
49
+ # 5. 填数据
50
+ echo '[{"<条件configId>":["<部门ID>"],"<值configId>":["<人员ID>"]}]' > rows.json
51
+ e10-cli matrix data save <matrixId> --rows @rows.json
52
+
53
+ # 6. 查数据
54
+ e10-cli matrix data list <matrixId>
55
+
56
+ # 7. 在流程中使用矩阵
57
+ e10-cli workflow set-operator <wf> <nodeId> --type matrix \
58
+ --matrix-id <matrixId> --value-config-id <值configId> \
59
+ --matrix-rule "<条件configId>:1:1:1"
60
+ ```
61
+
62
+ ---
63
+
64
+ ## 字段类型枚举
65
+
66
+ | 中文 | API 值 |
67
+ |------|--------|
68
+ | 人员 | `resource` |
69
+ | 部门 | `department` |
70
+ | 分部 | `subcompany` |
71
+ | 岗位 | `position` |
72
+ | 客户 | `customer` |
73
+ | 项目 | `project` |
74
+ | 数据源 | `datasource` |
75
+
76
+ ## config-edit 参数
77
+
78
+ ```json
79
+ {
80
+ "id": "<矩阵ID>",
81
+ "conditionConfigList": [
82
+ { "type": "department", "name": "显示名", "sort": 1 }
83
+ ],
84
+ "valueConfigList": [
85
+ { "type": "resource", "name": "显示名", "singleType": 1, "sort": 1 }
86
+ ],
87
+ "conditionDelList": [],
88
+ "valueDelList": []
89
+ }
90
+ ```
91
+
92
+ > `singleType`: 0=多选, 1=单选。条件字段不传,值字段必传。
93
+
94
+ ## data save 简写格式
95
+
96
+ ```json
97
+ [
98
+ {"<条件configId>": ["<实体ID>"], "<值configId>": ["<实体ID>"]}
99
+ ]
100
+ ```
101
+
102
+ CLI 自动查 config 判断 `conditionAble` 标记并展开为完整格式。
103
+
@@ -0,0 +1,63 @@
1
+ # 系统内置菜单 URL 参考
2
+
3
+ 通过 `savePublishMenu` API 挂载系统内置页面到应用菜单。menuUrl 格式固定,禁止瞎编。
4
+
5
+ > **暂不支持 H5/移动端菜单**。移动端是独立体系(不同 URL + 不同 pageId),目前尚未整理完整,禁止 AI 自行编造。
6
+
7
+ ---
8
+
9
+ ## PC 端菜单
10
+
11
+ ### 工作流页面 (pageType: WORKFLOW)
12
+
13
+ | 菜单名 | pageId | menuUrl |
14
+ |--------|--------|---------|
15
+ | 待办流程 | todo | `/sp/ebdfpage/workflow/{appId}_todo` |
16
+ | 已办流程 | done | `/sp/ebdfpage/workflow/{appId}_done` |
17
+ | 我提交的流程 | mine | `/sp/ebdfpage/workflow/{appId}_mine` |
18
+ | 共享给我的流程 | share | `/sp/ebdfpage/workflow/{appId}_share` |
19
+ | 下属的待办流程 | subordinates | `/sp/ebdfpage/workflow/{appId}_subordinates` |
20
+ | 全部流程 | all | `/sp/ebdfpage/workflow/{appId}_all` |
21
+ | 草稿流程 | draft | `/sp/ebdfpage/workflow/{appId}_draft` |
22
+ | 流程监控 | monitor | `/sp/ebdfpage/workflow/{appId}_monitor` |
23
+
24
+ ### 独立页面(不跟 appId)
25
+
26
+ | 菜单名 | pageId | menuUrl |
27
+ |--------|--------|---------|
28
+ | 提交申请 | newflow | `/sp/ebdfpage/ebflowpage/create/` |
29
+
30
+ ### 其他系统页面
31
+
32
+ | 菜单名 | pageId | pageType | menuUrl |
33
+ |--------|--------|----------|---------|
34
+ | 我的关注 | followList | BASE | `/sp/ebdfpage/followlist/{appId}` |
35
+ | 共享给我的 | shareList | BASE | `/sp/ebdfpage/sharelist/{appId}` |
36
+
37
+ ---
38
+
39
+ ## 用法
40
+
41
+ ```json
42
+ {
43
+ "content": "待办流程",
44
+ "menuType": "1",
45
+ "page": {
46
+ "pageId": "todo",
47
+ "pageName": "待办流程",
48
+ "pageType": "WORKFLOW",
49
+ "appid": "{appId}"
50
+ },
51
+ "menuUrl": "/sp/ebdfpage/workflow/{appId}_todo",
52
+ "shareMap": [{
53
+ "id": "0",
54
+ "content": "所有人",
55
+ "permissionId": "sys_view",
56
+ "targetType": 11,
57
+ "sourceType": 1,
58
+ "objIdList": ["所有人"]
59
+ }]
60
+ }
61
+ ```
62
+
63
+ > **只有包含工作流的应用**才能挂载工作流系统页面。表单台账会自动挂入菜单,无需手动操作。
@@ -0,0 +1,168 @@
1
+ # 流程动作流指南
2
+
3
+ > 流程基础(建流程、节点、连线、审批人)见 `workflow/guide-workflow.md`,分支条件见 `workflow/guide-workflow-condition.md`。本指南专讲**节点提交事件**和**跨表单动作流**(本表数据 → 目标表 新增/更新/删除 记录)。
4
+ >
5
+ > **动作流「生成」一律走 native `e10-cli actionflow generate`**(语义 plan → 编译 → preflight → 保存并启用 → 正式回读,event 节点 `ApproveTrigger` 自带流程节点触发绑定 `workflowPath`+`triggerTiming`+`approveNode`,不走 pathdef/addaction)。详见 `actionflows/SKILL.md` + `e10-cli actionflow component-describe <type>`。`e10-cli workflow action` 仅作动作流**管理**(`list-node`/`clear-node` 查清节点绑定、`delete`/`disable`/`batch-delete` 禁用删除动作流 app)。
6
+
7
+ ## 节点提交事件(字段更新)
8
+
9
+ 节点提交/到达时自动更新本表单字段值(actionType=0),如「审批状态置为审批中」。
10
+
11
+ > CLI 接受简化 JSON,内部自动构造 `saveAddActionList` 正确 payload(`targetValue`/`firstValue:"custom"`/`customValue`/`actionType:0`/`triggerType:"pre"` 等)。也支持直接传完整 `data:[]` 结构(高级用法)——**传入的 `data:[]` 行会自动归一化**,把 `action list-node` 的读回结果原样回传是安全的。
12
+ >
13
+ > **合并语义**:写入前先读回节点已有动作并归一化,再追加新动作写回——不覆盖已有动作。可与节点上的 type2 动作流安全混用同一节点。若节点已被写坏(读动作恒 500),CLI 会明确提示用 `delete-node` 删节点重建(API 无法修复)。
14
+ >
15
+ > **fieldId 会校验**:简化 JSON 的 `fieldId` 必须是流程表单里真实存在的字段,CLI 写入前反查表单字段校验,无效会报错并列出可用字段。**切勿用占位 fieldId**(如 `"1"`)——无效 fieldId 会被服务端存成空字段映射,之后任何合并写回都会把节点写坏(读恒 500,只能 delete-node 重建)。
16
+
17
+ **命令**:
18
+ ```bash
19
+ e10-cli workflow save-action @action.json
20
+ ```
21
+ > **只接 JSON 一个参数**:`workflowId` / `nodeId` 写在 JSON 内部,不是位置参数。写成 `save-action <wf> <node> @file` 会报错。
22
+
23
+ ### action.json 格式(常量赋值)
24
+
25
+ ```json
26
+ {
27
+ "workflowId": "1296243932023734272",
28
+ "nodeId": "1296243932023734278",
29
+ "nodeName": "上级审批",
30
+ "fieldId": "1296243579896791071",
31
+ "fieldName": "审批状态",
32
+ "value": "1296243644242280449"
33
+ }
34
+ ```
35
+
36
+ | 字段 | 必填 | 说明 |
37
+ |------|------|------|
38
+ | workflowId | 是 | 流程 ID |
39
+ | nodeId | 是 | 节点 ID(即 `objId`) |
40
+ | nodeName | 否 | 节点显示名(默认"节点") |
41
+ | fieldId | 是 | 要更新的目标字段 fieldId |
42
+ | fieldName | 否 | 字段显示名(用于 `actionName` 展示) |
43
+ | value | 是 | 常量值。Text/Number 字段用实际值;Select 用 option 的 valueKey |
44
+ | trigger | 否 | 触发时机,默认 `"pre"`(到达节点时);`leave` 离开 / `back-arrive` 退回到达 |
45
+
46
+ ---
47
+
48
+ ## 跨表单动作流(本表数据 → 目标表 新增/更新/删除 记录)
49
+
50
+ 跨表单动作流的**生成**统一走 `e10-cli actionflow generate`:写一份语义 plan(`event` + `actions`),CLI 编译、preflight、保存并启用、正式回读,返回设计器链接。组件参数、映射、条件的权威是 `e10-cli actionflow component-describe <type>`,参考 `actionflows/references/components/` 下对应组件 md。下面是平台机制要点,写 plan 时按此组织。
51
+
52
+ ### 平台机制要点
53
+
54
+ **目标表字段映射**:plan 的 `mapping` 是 `{源字段 paramKey: 目标字段 ID}`。目标字段 ID 支持 `+`/`-` 前缀做加减运算(赋值不加前缀、`+`累加、`-`扣减)。源字段用本次 `actionflow workflow-context-fields` 返回的原始 `paramKey`,不写死 `FormData.*`/`ApprovalData.*` 路径(编译器自动判定)。
55
+
56
+ **明细表映射(明细→明细)**:`ActionEbAdd` 的 `insert`/`batchInsert` 支持源明细表逐行写入目标明细表。同一目标明细表的映射须来自同一张源明细表(作为该表「依据值」basisValue)。明细目标字段不支持 `+`/`-` 前缀。**明细 update/delete**(含 basisValue/rowId 行匹配/updateAdd、requestId 定位)走 `ActionEbUpdate`/`ActionEbDelete` 契约的 `filterCondition`(动态右值引用 requestId),`component-describe ActionEbUpdate` 看 detail + requestId 定位参数。
57
+
58
+ **更新定位方式**:`ActionEbUpdate` 的 `opType`:`id`(按数据ID更新,配 EBuilder 关联字段其值=目标记录数据ID)/ `updateData`+`filterInput`(按「目标字段=源字段值」匹配,推荐)/ `fieldUpdate`(按字段匹配,保存后右侧条件会被清空,不可用)。匹配字段不要选 `*_name`/「名称」显示字段(标签文本非真值)。
59
+
60
+ **常量值**:plan 里目标字段可用固定值(constants)而非映射字段;公式计算(加减乘除多字段)用 `formula`。mapping/constants/formula 可混合。详见 `component-describe ActionEbAdd/ActionEbUpdate`。
61
+
62
+ ---
63
+
64
+ ## 流程数据写入台账(数据来源落点)
65
+
66
+ **场景**:流程发起时写入目标台账、归档/退回时更新/删除台账记录(如"流程数据写入项目台账",发起写入、归档更新、退回删除)。
67
+
68
+ **核心前提:目标台账必须建「数据来源」Flow 字段**(浏览-流程,`--sform-id` 指向流程绑定的表单 objId)。它存的是**流程实例 ID(requestId)**——add 时写入它,update/delete 靠它定位是哪次流程创建的记录,点击还能跳回流程。
69
+
70
+ ```bash
71
+ # 台账建「数据来源」Flow 字段(只读,来源=项目立项流程)
72
+ e10-cli form add-field <台账objId> <appId> "数据来源" Flow --sform-id <流程表单objId>
73
+ ```
74
+
75
+ **① add(发起写入)**:plan 里把流程实例 ID(requestId 系统变量)写进台账「数据来源」字段,其余字段按 mapping 映射。
76
+
77
+ **② update/delete(归档更新/退回删除)**:定位条件"**台账.数据来源 = 当前流程 requestId**"。`filterCondition` 动态右值引用 requestId,编译器自动判定为 `ApprovalData` 流程数据——`paramKey` 必须用本次 `actionflow workflow-context-fields` 返回的原始键,不要写死路径。示例 plan 结构:
78
+
79
+ ```json
80
+ {
81
+ "event": {"type":"ApproveTrigger","params":{"workflowPath":{"id":"<流程id>"},"triggerTiming":"workflow_completed"}},
82
+ "actions":[
83
+ {"type":"ActionEbUpdate","params":{
84
+ "targetForm":{"groupId":"<appId>","id":"<台账objId>"},
85
+ "person":{"id":"<人员id>","name":"<姓名>"},
86
+ "opType":"updateData",
87
+ "filterCondition":{"field":{"id":"<台账数据来源字段ID>","label":"<数据来源字段名>"},"operator":"eq","right":{"type":"context","paramKey":"<workflow-context-fields 返回的流程ID paramKey>","label":"流程ID"}},
88
+ "mapping":{"<源paramKey>":"<目标字段ID>"}
89
+ }}
90
+ ]
91
+ }
92
+ ```
93
+
94
+ > `filterCondition` 格式**以 `actionflows/references/condition_rules.md` 为准**:`field` 必须为 `{id,label}` 对象、`operator` 用英文操作符(`eq/neq/gt/lt/gte/lte/contains/uncontains/empty/nempty`,`empty/nempty` 无右值)、右值键必须为 `right`。`value` 别名、`=`、裸字符串 `field`、数组根节点和 `relationship:"1|0"` 都会在编译前被拒绝。需求含条件/筛选时先翻 condition_rules.md 再下笔。
95
+
96
+ > 也可直接给 `actionflow generate` 下自然语言 plan("流程归档时按数据来源更新台账,项目状态置为立项"),由组件契约承载。`generate` 默认保存并启用设计(saveDesign saveAndStart=true,正式生效),返回 appId + 设计器链接,event 节点已含流程节点触发绑定。仅 `mode:"stash"` 时走暂存(需设计器手动发布)。
97
+
98
+ **③ add 回写 dataId(源表存台账记录 ID)**:若后续 update/delete 想用"源表字段 = 台账 dataId"定位,`actionflow workflow-context-fields` 提供"回写数据ID对应字段"候选查询。
99
+
100
+ ---
101
+
102
+ ## 关联 EBuilder 更新目标表数据(跨表更新)
103
+
104
+ **场景**:表A(带流程)通过 EBuilder 关联字段指向表B,流程到节点时动作流更新表B的目标记录字段。
105
+
106
+ **机制**:表A 的 EBuilder 关联字段的值 = 表B 记录的数据ID。plan 里 `ActionEbUpdate` 的 `opType=id`(按数据ID更新)+ `filterCondition` 用表A的 EBuilder 关联字段 → 直接用关联值定位表B记录,无需字段值匹配。
107
+
108
+ ### 建两张表
109
+
110
+ 表B「客户台账表」(被更新):客户名称(Text)、最后拜访日期(Date)、累计拜访金额(Money)
111
+ ```json
112
+ [
113
+ {"componentKey":"Text","fieldName":"客户名称"},
114
+ {"componentKey":"Date","fieldName":"最后拜访日期"},
115
+ {"componentKey":"Money","fieldName":"累计拜访金额"}
116
+ ]
117
+ ```
118
+
119
+ 表A「拜访登记表」(带流程):拜访日期(Date)、拜访金额(Money)、客户关联(EBuilder→表B)
120
+ ```json
121
+ [
122
+ {"componentKey":"Date","fieldName":"拜访日期"},
123
+ {"componentKey":"Money","fieldName":"拜访金额"},
124
+ {"componentKey":"EBuilder","fieldName":"客户关联","sformId":"<表B objId>","dataTitle":"客户名称"}
125
+ ]
126
+ ```
127
+ > EBuilder 字段:`sformId`=目标表 objId,`dataTitle`=目标表显示字段(填字段名或 fieldId,CLI 自动解析)。
128
+
129
+ 写 plan 时 mapping 目标ID 不加前缀=**直接赋值**(源值原样写入);加 `+`=累加,`-`=扣减。直接赋值时按目标字段类型(日期/金额/文本等)自动匹配。
130
+
131
+ ---
132
+
133
+ ## 条件性动作流(同一节点按条件走不同动作)
134
+
135
+ 一个节点可挂**多个动作流,各自带触发条件**——提交时只有条件命中的动作才执行。典型场景「合同变更」:变更类型=续期 → 插入台账;变更/终止 → 更新+插入。
136
+
137
+ 在 plan 里用 `Condition` 组件(逻辑分支)表达条件,或多个 `ActionEb*` 配 `filterCondition`。条件规则语法见 `actionflows/references/condition_rules.md`。`actionflow component-describe Condition` 看条件组件契约。
138
+
139
+ > **验证**:`e10-cli workflow action list-node <wf> <node>` 会标注 `⚠️条件` 的动作为带规则动作。条件内容在流程设计器节点 → 提交事件 → 动作的规则图标里查看。
140
+
141
+ ---
142
+
143
+ ## 动作流管理
144
+
145
+ 生成(`actionflow generate`)之后的查/清/删/禁用:
146
+
147
+ ```bash
148
+ e10-cli workflow action list-node <wf> <node> # 列节点绑定的动作(type0 常量赋值 + type2 动作流)
149
+ e10-cli workflow action clear-node <wf> <node> # 清空节点动作绑定(deleteAddAction,不删动作流实体)
150
+ e10-cli workflow action disable <appId> <name> # 禁用动作流(禁用后可删除)
151
+ e10-cli workflow action delete <appId> <name> # 删除动作流(自动先禁用再 batchAddRecycle)
152
+ e10-cli workflow action batch-delete @list.json # 批量删除(每项 {id,name})
153
+ ```
154
+
155
+ > **clear-node vs delete**:`clear-node` 只解绑节点(动作流实体仍在);`delete` 删动作流 app(节点残留悬空引用,前端显示「被删除」,平台无按动作流反查节点接口,逐个 `clear-node` 清理)。
156
+ >
157
+ > **list-node 显示**:`type0 常量赋值`(本表字段赋值,`save-action` 写的)/ `type2 动作流`(`actionflow generate` 生成的,带 appId)。
158
+
159
+ ---
160
+
161
+ ## 角色管理
162
+
163
+ ```bash
164
+ e10-cli role list # 查看角色树
165
+ e10-cli role create <name> --parent <id> --code <code> --remark <text>
166
+ e10-cli role delete <ids...> # 删除角色(可多个)
167
+ e10-cli role add-member <roleId> <keyword> # 搜索人员添加到角色
168
+ ```