weaver-e10-builder 1.5.6 → 1.5.9

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 (194) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +6 -0
  3. package/dist/commands/actionflow.js.map +1 -1
  4. package/dist/commands/app.d.ts.map +1 -1
  5. package/dist/commands/app.js +259 -0
  6. package/dist/commands/app.js.map +1 -1
  7. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  8. package/dist/commands/form-add-detail-table.js +13 -2
  9. package/dist/commands/form-add-detail-table.js.map +1 -1
  10. package/dist/commands/form-button.d.ts.map +1 -1
  11. package/dist/commands/form-button.js +6 -4
  12. package/dist/commands/form-button.js.map +1 -1
  13. package/dist/commands/form-formula-linkage.d.ts.map +1 -1
  14. package/dist/commands/form-formula-linkage.js +4 -4
  15. package/dist/commands/form-formula-linkage.js.map +1 -1
  16. package/dist/commands/form-list-filter.d.ts +3 -0
  17. package/dist/commands/form-list-filter.d.ts.map +1 -1
  18. package/dist/commands/form-list-filter.js +88 -24
  19. package/dist/commands/form-list-filter.js.map +1 -1
  20. package/dist/commands/form-list-search-group.d.ts.map +1 -1
  21. package/dist/commands/form-list-search-group.js +54 -64
  22. package/dist/commands/form-list-search-group.js.map +1 -1
  23. package/dist/commands/form-list-stats.d.ts.map +1 -1
  24. package/dist/commands/form-list-stats.js +29 -4
  25. package/dist/commands/form-list-stats.js.map +1 -1
  26. package/dist/commands/form-list-utils.d.ts +46 -1
  27. package/dist/commands/form-list-utils.d.ts.map +1 -1
  28. package/dist/commands/form-list-utils.js +140 -47
  29. package/dist/commands/form-list-utils.js.map +1 -1
  30. package/dist/commands/form-list.d.ts.map +1 -1
  31. package/dist/commands/form-list.js +141 -71
  32. package/dist/commands/form-list.js.map +1 -1
  33. package/dist/commands/form-message.d.ts +3 -0
  34. package/dist/commands/form-message.d.ts.map +1 -0
  35. package/dist/commands/form-message.js +341 -0
  36. package/dist/commands/form-message.js.map +1 -0
  37. package/dist/commands/form-view.d.ts.map +1 -1
  38. package/dist/commands/form-view.js +31 -4
  39. package/dist/commands/form-view.js.map +1 -1
  40. package/dist/commands/form.js +1 -1
  41. package/dist/commands/form.js.map +1 -1
  42. package/dist/commands/matrix.d.ts.map +1 -1
  43. package/dist/commands/matrix.js +80 -42
  44. package/dist/commands/matrix.js.map +1 -1
  45. package/dist/commands/org.d.ts.map +1 -1
  46. package/dist/commands/org.js +61 -0
  47. package/dist/commands/org.js.map +1 -1
  48. package/dist/commands/role.d.ts.map +1 -1
  49. package/dist/commands/role.js +69 -9
  50. package/dist/commands/role.js.map +1 -1
  51. package/dist/commands/wf-form.d.ts.map +1 -1
  52. package/dist/commands/wf-form.js +5 -5
  53. package/dist/commands/wf-form.js.map +1 -1
  54. package/dist/commands/workflow-node-validate.d.ts.map +1 -1
  55. package/dist/commands/workflow-node-validate.js +159 -15
  56. package/dist/commands/workflow-node-validate.js.map +1 -1
  57. package/dist/core/crypto.d.ts +19 -0
  58. package/dist/core/crypto.d.ts.map +1 -1
  59. package/dist/core/crypto.js +70 -35
  60. package/dist/core/crypto.js.map +1 -1
  61. package/dist/index.js +2 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  64. package/dist/services/actionflow/components/action_eb_update_compiler.js +3 -1
  65. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  66. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -1
  67. package/dist/services/actionflow/components/custom_trigger.js +2 -0
  68. package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
  69. package/dist/services/actionflow/components/event_button.d.ts.map +1 -1
  70. package/dist/services/actionflow/components/event_button.js +2 -0
  71. package/dist/services/actionflow/components/event_button.js.map +1 -1
  72. package/dist/services/actionflow/components/event_form_data.d.ts.map +1 -1
  73. package/dist/services/actionflow/components/event_form_data.js +2 -0
  74. package/dist/services/actionflow/components/event_form_data.js.map +1 -1
  75. package/dist/services/actionflow/components/form_data_builder.d.ts +23 -0
  76. package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -0
  77. package/dist/services/actionflow/components/form_data_builder.js +106 -0
  78. package/dist/services/actionflow/components/form_data_builder.js.map +1 -0
  79. package/dist/services/actionflow/components/hrm_actions.d.ts +1 -0
  80. package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
  81. package/dist/services/actionflow/components/hrm_actions.js +136 -44
  82. package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
  83. package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -1
  84. package/dist/services/actionflow/components/inner_mq_listener.js +2 -0
  85. package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -1
  86. package/dist/services/actionflow/components/webhook_trigger.d.ts.map +1 -1
  87. package/dist/services/actionflow/components/webhook_trigger.js +6 -5
  88. package/dist/services/actionflow/components/webhook_trigger.js.map +1 -1
  89. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  90. package/dist/services/actionflow/components/workflow_actions.js +6 -3
  91. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  92. package/dist/services/actionflow/context_preflight.d.ts +3 -3
  93. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  94. package/dist/services/actionflow/context_preflight.js +45 -24
  95. package/dist/services/actionflow/context_preflight.js.map +1 -1
  96. package/dist/services/actionflow/context_provider.d.ts +7 -0
  97. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  98. package/dist/services/actionflow/context_provider.js +13 -1
  99. package/dist/services/actionflow/context_provider.js.map +1 -1
  100. package/dist/services/actionflow/formula_service.d.ts +16 -1
  101. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  102. package/dist/services/actionflow/formula_service.js +414 -63
  103. package/dist/services/actionflow/formula_service.js.map +1 -1
  104. package/dist/services/actionflow/hrm_source.d.ts +2 -0
  105. package/dist/services/actionflow/hrm_source.d.ts.map +1 -1
  106. package/dist/services/actionflow/hrm_source.js +4 -0
  107. package/dist/services/actionflow/hrm_source.js.map +1 -1
  108. package/dist/services/actionflow/param_group_dto.d.ts.map +1 -1
  109. package/dist/services/actionflow/param_group_dto.js +17 -3
  110. package/dist/services/actionflow/param_group_dto.js.map +1 -1
  111. package/dist/services/actionflow/param_type.d.ts +14 -0
  112. package/dist/services/actionflow/param_type.d.ts.map +1 -0
  113. package/dist/services/actionflow/param_type.js +69 -0
  114. package/dist/services/actionflow/param_type.js.map +1 -0
  115. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  116. package/dist/services/actionflow/preflight_service.js +121 -41
  117. package/dist/services/actionflow/preflight_service.js.map +1 -1
  118. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  119. package/dist/services/actionflow/workflow_compiler.js +83 -50
  120. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  121. package/dist/services/app-publish.d.ts +227 -0
  122. package/dist/services/app-publish.d.ts.map +1 -0
  123. package/dist/services/app-publish.js +403 -0
  124. package/dist/services/app-publish.js.map +1 -0
  125. package/dist/services/form-button-position.d.ts.map +1 -1
  126. package/dist/services/form-button-position.js +7 -1
  127. package/dist/services/form-button-position.js.map +1 -1
  128. package/dist/services/form-field-drop.d.ts.map +1 -1
  129. package/dist/services/form-field-drop.js +7 -0
  130. package/dist/services/form-field-drop.js.map +1 -1
  131. package/dist/services/form-formula-linkage.d.ts +24 -3
  132. package/dist/services/form-formula-linkage.d.ts.map +1 -1
  133. package/dist/services/form-formula-linkage.js +24 -5
  134. package/dist/services/form-formula-linkage.js.map +1 -1
  135. package/dist/services/form-layout-insert.js +1 -1
  136. package/dist/services/form-layout-insert.js.map +1 -1
  137. package/dist/services/form-list-search-group.d.ts +89 -0
  138. package/dist/services/form-list-search-group.d.ts.map +1 -0
  139. package/dist/services/form-list-search-group.js +260 -0
  140. package/dist/services/form-list-search-group.js.map +1 -0
  141. package/dist/services/form-list-search.d.ts +110 -0
  142. package/dist/services/form-list-search.d.ts.map +1 -0
  143. package/dist/services/form-list-search.js +231 -0
  144. package/dist/services/form-list-search.js.map +1 -0
  145. package/dist/services/form-list-stats.d.ts +21 -1
  146. package/dist/services/form-list-stats.d.ts.map +1 -1
  147. package/dist/services/form-list-stats.js +86 -12
  148. package/dist/services/form-list-stats.js.map +1 -1
  149. package/dist/services/form-message.d.ts +273 -0
  150. package/dist/services/form-message.d.ts.map +1 -0
  151. package/dist/services/form-message.js +575 -0
  152. package/dist/services/form-message.js.map +1 -0
  153. package/dist/services/form-sub-detail.d.ts.map +1 -1
  154. package/dist/services/form-sub-detail.js +5 -1
  155. package/dist/services/form-sub-detail.js.map +1 -1
  156. package/dist/services/form-view.d.ts +34 -2
  157. package/dist/services/form-view.d.ts.map +1 -1
  158. package/dist/services/form-view.js +74 -8
  159. package/dist/services/form-view.js.map +1 -1
  160. package/dist/services/matrix-fields.d.ts +42 -0
  161. package/dist/services/matrix-fields.d.ts.map +1 -0
  162. package/dist/services/matrix-fields.js +102 -0
  163. package/dist/services/matrix-fields.js.map +1 -0
  164. package/dist/services/org-browser.d.ts +60 -0
  165. package/dist/services/org-browser.d.ts.map +1 -0
  166. package/dist/services/org-browser.js +62 -0
  167. package/dist/services/org-browser.js.map +1 -0
  168. package/dist/services/quick-date-range.d.ts +22 -0
  169. package/dist/services/quick-date-range.d.ts.map +1 -0
  170. package/dist/services/quick-date-range.js +134 -0
  171. package/dist/services/quick-date-range.js.map +1 -0
  172. package/dist/services/role-member.d.ts +73 -2
  173. package/dist/services/role-member.d.ts.map +1 -1
  174. package/dist/services/role-member.js +141 -9
  175. package/dist/services/role-member.js.map +1 -1
  176. package/package.json +1 -1
  177. package/skill-docs/SKILL.md +20 -21
  178. package/skill-docs/_catalog.md +90 -86
  179. package/skill-docs/actionflows/SKILL.md +2 -1
  180. package/skill-docs/actionflows/references/components/message/InnerMQSend.md +6 -0
  181. package/skill-docs/actionflows/references/components/personnel/HrmEmployeeUpdate.md +3 -1
  182. package/skill-docs/actionflows/references/components/personnel/PersonnelAlterType.md +38 -0
  183. package/skill-docs/actionflows/references/components/personnel/PersonnelOnboarding.md +36 -34
  184. package/skill-docs/actionflows/references/components/trigger/WebHookTrigger.md +4 -2
  185. package/skill-docs/references/app/guide-app-publish.md +92 -0
  186. package/skill-docs/references/common/guide-plan-template.md +150 -246
  187. package/skill-docs/references/common/map.md +153 -0
  188. package/skill-docs/references/common/ref-cli-commands.md +28 -8
  189. package/skill-docs/references/form/guide-form-message.md +57 -0
  190. package/skill-docs/references/form/guide-form-view.md +7 -2
  191. package/skill-docs/references/form/guide-formula-linkage.md +1 -1
  192. package/skill-docs/references/form/guide-list-stats.md +55 -2
  193. package/skill-docs/references/hrm/guide-matrix.md +30 -2
  194. package/skill-docs/references/workflow/guide-workflow.md +20 -2
@@ -0,0 +1,153 @@
1
+ # E10 智能搭建规划能力地图
2
+
3
+ 本页用于把完整实施方案转成项目 `plan.md`:识别资源归属、配置项、依赖、待确认问题与关键验收结果。规划时先读本页和[计划模板](guide-plan-template.md),执行某项配置前再读取对应专题指南。本页不提供命令参数或字段码表。
4
+
5
+ ## 使用方法与状态
6
+
7
+ 1. 逐段阅读正文、表格和图片,将每条业务要求映射到资源与配置项,记录原文来源、所属应用/表单/视图/流程、前置依赖及可观察结果。已有资源先只读盘点,再决定复用、修改或新建。
8
+ 2. 需求含完整布局样表时,按[布局规划](../form/guide-form-layout-planning.md)保留标题、分组、同排、空白与字段顺序,并同时写入字段清单和布局蓝图。每张表单创建前确认 FLOW 或 EXCEL。
9
+ 3. 规划状态区分:**待业务确认**(语义或取值有歧义)、**待环境核查**(资源、权限或环境行为未证实)、**需其他方式补充**(现有 CLI 只能完成一部分)、**已确认无法实现**(核实无可行路径)。只有最后一种写入 plan 的“无法实现的项”,原需求项保持未完成。
10
+ 4. 按资源依赖组织 plan;关键配置写明读回点和最小业务验收点。接口保存、配置读回与页面实际生效是不同层次,按风险选择必要的检查。
11
+
12
+ ## 一、资源地图:创建、复用或修改什么
13
+
14
+ | 资源 | 使用场景与解决的问题 | 依赖与 plan 要点 | 能力边界与简要验收 | 详见 |
15
+ |---|---|---|---|---|
16
+ | 环境与组织身份 | 确定搭建目标和资源所属机构 | 写目标地址、profile、机构及跨环境引用 | 远程操作前确认鉴权;验收当前环境和组织对象 | [鉴权](../auth/guide-auth.md) |
17
+ | 应用 | 承载表单、流程、菜单及页面 | 写新建/复用、主应用和跨应用归属;交付时要走**启用 → 发布到前台** | 搭建期可先不发布;默认一个主应用;验收真实 appId 与名称 | [发布](../app/guide-app-publish.md)、[计划模板](guide-plan-template.md)、[命令](ref-cli-commands.md) |
18
+ | 角色 | 表达授权主体和流程操作者 | 写角色、所属机构及成员来源 | 角色创建与成员配置分别验收 | [命令](ref-cli-commands.md) |
19
+ | EB 表单 | 持久化业务记录和默认台账 | 写应用、字段、类型、布局及关联对象 | 验收 objId/formId、字段及默认台账 | [创建表单](../form/guide-create-form.md) |
20
+ | 明细表 | 承载一对多业务行 | 写所属主表、明细字段和层级 | 二级明细另写父子行标识;验收结构及挂载 | [二级明细](../form/guide-form-sub-detail.md) |
21
+ | 虚拟表 | 展示已有来源的组合数据 | 写数据来源、主键、来源字段和展示类型映射 | 先验证稳定主键和字段兼容;验收数据展示 | [虚拟表](../form/guide-virtual-form.md) |
22
+ | 表单布局 | 控制新建/显示页面的字段排布 | 写 FLOW/EXCEL、字段顺序、分组和布局样表 | 建表前确定类型;验收实际字段与位置 | [布局规划](../form/guide-form-layout-planning.md) |
23
+ | 表单视图与台账 | 按业务场景展示、检索记录 | 写默认视图复用/改名及额外视图类型 | PC/MOBILE 分别核对;视图不等于菜单入口 | [视图](../form/guide-form-view.md) |
24
+ | EB 流程 | 应用内审批,默认流程路径 | 先有 EB 表单;写节点、出口及操作者 | 验收完整拓扑和关键条件 | [流程](../workflow/guide-workflow.md) |
25
+ | 原生工作流程 | 流程中心或明确要求原生表单的审批 | 写自建/绑定表单、固定/自由模式和 formId | 与 EB 资源 ID 分开;验收流程与绑定表单 | [流程](../workflow/guide-workflow.md) |
26
+ | 公文流程 | 原生工作流程中的公文业务 | 写公文类型及专属设置要求 | 按当前支持状态逐项核对设置 | [公文](../workflow/guide-workflow-odoc.md) |
27
+ | 权责表 | 按分支场景矩阵维护或复用审批路径 | 写随流程新建/独立复用、节点路径和变量映射 | 验收场景条件、路径与映射 | [权责表](../workflow/guide-workflow-auth-resp.md) |
28
+ | 动作流 | 跨表写入或事件自动化 | 写触发点、源/目标字段及记录定位 | 验收动作绑定与目标记录变化 | [动作流](../workflow/guide-workflow-action.md) |
29
+ | HRM 矩阵 | 按组织条件决定流程操作者 | 写条件、输出列、数据行及引用节点 | 结构和数据都需有效;验收命中结果 | [矩阵](../hrm/guide-matrix.md) |
30
+ | 报表数据集 | 汇集报表所需数据来源 | 写来源表/字段、关联关系和查询范围 | 字段需精确匹配;验收数据集字段 | [报表创建](../report/guide-report-build.md) |
31
+ | 报表 | 统计、分组和报表布局 | 写单元格、查询、共享和交付效果 | 保存与实际展示分别核对 | [报表创建](../report/guide-report-build.md) |
32
+ | 菜单 | 提供台账、流程或页面入口 | 目标资源先存在;写层级、名称与可见主体 | 验收点击目标与菜单权限 | [菜单](../menu/system-menus.md) |
33
+ | 配置式页面 | 用设计器组件搭建页面 | 写数据源、组件、布局和 PC/MOBILE 要求 | 验收两端布局与数据绑定 | [设计器](../ebuilder-designer/guide-designer.md) |
34
+ | 定制页面 | 实现标准配置之外的交互 | 写目标页面、作用范围、发布与入口 | 验收实际加载和业务交互 | [页面编码](../coding/guide-page-code.md) |
35
+ | ESB 系统接口 | 从接口文档创建对外接口定义 | 写系统池、接口清单和文档来源 | 区分接口定义与动作流 HTTP 调用;验收创建结果 | [接口导入](../esb-interface/guide-import.md) |
36
+ | 组织数据 | 维护部门、人员等基础数据 | 写机构归属、人员来源和导入范围 | 批量导入先预检;验收数据和归属 | [组织](../hrm/guide-org-employee.md) |
37
+
38
+ ## 二、功能配置地图:资源建成后还要做什么
39
+
40
+ 下表用于识别应写入 plan 的配置,不表示每个项目都要启用。具体取值和命令由专题指南确定。
41
+
42
+ ### 表单、字段与布局
43
+
44
+ | 功能配置项 | 需求场景与解决的问题 | 依赖;计划写明 | 能力边界;简要验收 | 详见 |
45
+ |---|---|---|---|---|
46
+ | 字段类型 | 选择文本、金额、日期、组织、关联等录入组件 | 表单;逐字段写主/明细位置、类型与来源 | 按对象类型选原生字段;验收读回类型 | [字段码表](../form/ref-form-fields.md) |
47
+ | 选项与默认值 | 限定可选值或预置新记录内容 | 字段;写选项、默认值及触发时机 | 选项模板与字段内选项分别记录;验收新建页面 | [字段码表](../form/ref-form-fields.md) |
48
+ | 字段多语言 | 同一字段显示中英文名称 | 字段;写中文、英文及目标 fieldId | 建字段后配置;验收两种语言读回 | [创建表单](../form/guide-create-form.md) |
49
+ | 字段显示属性 | 控制必填、只读、隐藏及独占一行 | 布局;逐字段写目标状态 | 字段定义与布局呈现分别核对 | [布局规划](../form/guide-form-layout-planning.md) |
50
+ | 布局样表 | 从完整表格提取空间排布 | 写 FLOW/EXCEL、标题、行列、同排、空白和合并 | 字段清单与布局蓝图同时保留;验收实际位置 | [布局规划](../form/guide-form-layout-planning.md) |
51
+ | 字段分组 | 将业务字段归入折叠分段 | 写分组名称、顺序及成员字段 | 需求明确时配置;验收字段归属 | [布局规划](../form/guide-form-layout-planning.md) |
52
+ | 关联字段 | 选择客户、合同、流程等原生业务对象 | 写字段子类、目标对象、单/多选 | 关联对象与通用浏览来源分别选型;验收选择范围 | [字段码表](../form/ref-form-fields.md) |
53
+ | 关联数据范围 | 限定关联字段可选记录 | 关联字段;写过滤条件与字段映射 | 区分弹窗显示列;验收可选数据 | [关联范围](../form/guide-ebuilder-scope.md) |
54
+ | 二级明细 | 父级每行挂载子级明细记录 | 主/子明细表;写父子行标识与层级 | 子表归属需按行核对 | [二级明细](../form/guide-form-sub-detail.md) |
55
+ | 字段公式 | 根据其他字段计算目标值 | 写表达式、目标字段和精度 | 验收公式读回与样例计算 | [公式](../form/guide-form-formula-functions.md) |
56
+ | 函数联动 | 字段变动或载入时赋值计算 | 写触发字段、目标字段、事件和表达式 | 与静态字段公式分开;验收触发结果 | [函数联动](../form/guide-formula-linkage.md) |
57
+ | 跨表字段带出 | 选择关联记录后回填其他字段 | 来源表、匹配字段、目标字段及映射 | 验收选记录后的实际回填 | [字段带出](../form/guide-field-linkage.md) |
58
+ | 属性显隐联动 | 条件变化时改变字段显示、只读或必填 | 写条件、目标字段及状态 | 改的是属性而非字段值;验收条件切换 | [显隐联动](../form/guide-form-linkage.md) |
59
+ | 编号规则 | 生成带日期、代字或流水的业务编号 | 写编号字段、组成段、位数与作用范围 | 表单编号与流程编号分开;验收生成值 | [编号](../form/guide-form-serial-mark.md) |
60
+ | 查重校验 | 阻止或提示重复业务数据 | 写比较字段及期望行为 | 验收重复样例的提示/阻断 | [创建表单](../form/guide-create-form.md) |
61
+ | 消息提醒 | 表单数据新建 / 修改 / 删除时通知相关人 | 写触发时机、推送渠道、标题内容、落地页与提醒对象 | 提醒对象按名单/角色/组织解析;验收规则读回与启停状态 | [消息提醒](../form/guide-form-message.md) |
62
+ | 表单权限 | 控制新建、查看、编辑和删除 | 写主体、范围和权限类型 | 授权与视图筛选分开;验收实际授权 | [命令](ref-cli-commands.md) |
63
+ | 查看布局权限 | 给不同主体分配查看布局 | 写主体及 PC 查看布局 | 验收授权与布局绑定 | [视图权限](../form/guide-form-view-permission.md) |
64
+
65
+ ### 视图、台账与交互
66
+
67
+ | 功能配置项 | 需求场景与解决的问题 | 依赖;计划写明 | 能力边界;简要验收 | 详见 |
68
+ |---|---|---|---|---|
69
+ | 默认视图名称 | 使自动生成的台账名称符合需求 | 表单;写原名称与目标名称 | 视图名称与菜单名称分别核对 | [视图](../form/guide-form-view.md) |
70
+ | 新增视图 | 建额外表格、看板、日历或其他视图 | 表单;写类型、用途和目标终端 | 新视图字段与布局需填充;验收可打开 | [视图](../form/guide-form-view.md) |
71
+ | 显示列 | 控制 PC/MOBILE 列、顺序与宽度 | 视图及字段;写终端和字段清单 | 两端分别核对 | [显示列](../form/guide-list-columns.md) |
72
+ | 列格式与单位 | 控制金额小数、千分位和单位 | 视图列;写格式与单位 | 格式与单位属于不同配置;验收展示值 | [视图](../form/guide-form-view.md) |
73
+ | 搜索与排序 | 提供普通/快捷搜索和默认顺序 | 视图字段;写搜索入口和排序优先级 | 验收列表查询与顺序 | [视图](../form/guide-form-view.md) |
74
+ | 顶部统计 | 展示总数、求和或条件统计 | 视图及数值字段;写统计函数、条件和终端 | 验收统计值与显示位置 | [统计](../form/guide-list-stats.md) |
75
+ | 视图数据条件 | 只展示符合业务条件的记录 | 视图及过滤字段;写条件与适用范围 | 筛选不代替权限;验收不同记录的展示 | [视图](../form/guide-form-view.md) |
76
+ | 普通分组 | 按字段归类台账数据 | 视图;写分组字段与展开方式 | 与上下级树形展示分开;验收分组结果 | [视图](../form/guide-form-view.md) |
77
+ | 上下级展示 | 按自关联字段显示层级 | 视图;写父级字段与展开层数 | 验收真实父子关系 | [视图](../form/guide-form-view.md) |
78
+ | 表单或视图按钮 | 打开目标视图、流程或页面 | 写位置、目标、当前行过滤与预填映射 | 行上与右上角分别规划;验收点击效果 | [按钮](../form/guide-form-button.md) |
79
+ | 行点击事件 | 点击整行后打开目标布局/页面 | 视图;写目标和打开方式 | 与按钮事件分开;验收点击行 | [视图](../form/guide-form-view.md) |
80
+ | 字段点击事件 | 点击指定列打开记录 | 列及视图;写目标、宽度和打开方式 | 与整行事件分开;验收点击列 | [视图](../form/guide-form-view.md) |
81
+ | 关联页签 | 在表单侧展示相关视图数据 | 写目标视图、布局/终端、筛选映射和权限 | 验收目标与关联过滤 | [关联页签](../form/guide-form-association.md) |
82
+
83
+ ### 流程与自动化
84
+
85
+ | 功能配置项 | 需求场景与解决的问题 | 依赖;计划写明 | 能力边界;简要验收 | 详见 |
86
+ |---|---|---|---|---|
87
+ | 节点与连线 | 表达审批顺序、分支及汇合 | 写全部节点、出口和默认路径 | 结构改完排版;验收真实拓扑 | [流程](../workflow/guide-workflow.md) |
88
+ | 节点操作者 | 确定审批人、角色、字段或矩阵来源 | 逐节点写来源与会签/竞签方式 | 节点名称不决定操作者;验收实际命中 | [流程](../workflow/guide-workflow.md) |
89
+ | 出口条件 | 根据表单或系统字段选择路径 | 写字段来源、操作符、值、AND/OR 与明细量词 | 逐条读回并核对路由 | [条件](../workflow/guide-workflow-condition.md) |
90
+ | 节点字段权限 | 不同审批节点显示或编辑不同字段 | 节点和字段;写隐藏、只读、必填等 | 验收节点布局状态 | [节点布局](../workflow/guide-workflow-node-layout.md) |
91
+ | 节点校验 | 提交时判断字段合规 | 节点和字段;写条件及提示 | 验收提交场景 | [流程](../workflow/guide-workflow.md) |
92
+ | 流程编号 | 为流程生成业务编号 | 流程;写前缀、年份、流水位数 | 与表单复杂编号分开;验收生成值 | [流程](../workflow/guide-workflow.md) |
93
+ | 权责表场景 | 将分支说明、条件与审批路径集中维护 | 权责表;逐场景写条件和节点顺序 | 验收每条场景路径 | [权责表](../workflow/guide-workflow-auth-resp.md) |
94
+ | 权责表变量映射 | 复用独立权责表时接入实际表单 | 变量及主/明细字段;逐项写对应关系 | 随流程新建直接用表单字段;复用时验收映射 | [权责表](../workflow/guide-workflow-auth-resp.md) |
95
+ | 公文设置 | 配置正文、痕迹、编号、附件和归档等要求 | 公文流程;按实际要求逐项列出 | 按各项支持状态读回核对 | [公文设置](../workflow/guide-workflow-odoc-setting.md) |
96
+ | 节点字段赋值 | 提交节点时更新本表字段 | 节点及目标字段;写赋值来源 | 与跨表动作流分开;验收字段结果 | [动作流](../workflow/guide-workflow-action.md) |
97
+ | 跨表动作流 | 新增、更新或删除其他表数据 | 写触发、源/目标映射及更新定位 | 验收目标记录变化 | [动作流](../workflow/guide-workflow-action.md) |
98
+
99
+ ### 报表、菜单与页面
100
+
101
+ | 功能配置项 | 需求场景与解决的问题 | 依赖;计划写明 | 能力边界;简要验收 | 详见 |
102
+ |---|---|---|---|---|
103
+ | 报表设计 | 根据数据集搭建报表布局和汇总 | 写字段映射、单元格及聚合方式 | 验收报表实际展示 | [报表创建](../report/guide-report-build.md) |
104
+ | 报表查询 | 提供搜索与筛选 | 报表字段;写查询条件与默认值 | 验收筛选结果 | [报表查询](../report/guide-report-query.md) |
105
+ | 报表权限 | 限定共享与查看范围 | 报表;写授权主体 | 验收权限读回及实际访问 | [报表权限](../report/report-permission-guide.md) |
106
+ | 菜单绑定 | 将视图、流程或页面加入导航 | 目标资源;写层级、名称和目标 | 菜单不创建目标资源;验收点击去向 | [菜单](../menu/system-menus.md) |
107
+ | 菜单权限 | 限定导航入口可见人群 | 菜单;写角色/部门/人员 | 与目标资源权限分别验收 | [命令](ref-cli-commands.md) |
108
+ | 配置式页面 | 使用设计器组件组织展示与交互 | 写数据源、组件、布局和终端 | 验收 PC/MOBILE 布局与数据 | [设计器](../ebuilder-designer/guide-designer.md) |
109
+ | 定制页面 | 实现标准配置之外的交互 | 写目标范围、页面代码和发布入口 | 验收实际加载与交互 | [页面编码](../coding/guide-page-code.md)、[导出发布](../coding/guide-page-export.md) |
110
+
111
+ ## 三、易混能力选择
112
+
113
+ | 需求要改变的结果 | 规划选择 |
114
+ |---|---|
115
+ | 有一张持久化的业务表 | EB 表单;以已有来源组合展示时评估虚拟表 |
116
+ | 新建业务审批 | 默认 EB 表单与应用内流程;明确要求原生工作流程或流程中心时选择原生路径;公文再加专属设置 |
117
+ | 审批路线由多组条件决定 | 普通流程用节点与出口条件;要求矩阵式分支维护或复用时规划权责表 |
118
+ | 选择其他业务对象并带出字段 | 对应原生关联字段负责选择;字段带出/函数联动负责赋值;关联页签负责侧面展示相关记录 |
119
+ | 控制记录可见范围 | 表单/视图权限;列表数据条件负责视图展示筛选 |
120
+ | 展示表单数据给用户 | 默认台账或新增视图;菜单负责导航入口;报表用于多源统计与专门报表布局 |
121
+ | 点击按钮打开关联任务或发起流程 | 视图按钮或表单按钮,逐项写目标、当前行过滤与预填映射 |
122
+ | 复杂自动写入其他表 | 动作流,写清触发、字段映射及目标记录定位;单纯本表计算选公式/联动 |
123
+ | 标准配置无法表达的页面交互 | 明确目标范围后规划配置式页面或定制页面,并单列发布和交互验收 |
124
+
125
+ ## 四、常见依赖与计划顺序
126
+
127
+ 这些是依赖关系,不替代 [计划模板](guide-plan-template.md)的三段执行规则。已有且符合要求的资源可复用,按真实 ID 解除依赖。
128
+
129
+ ```text
130
+ 环境/机构 → 主应用与角色 → 表单/字段/明细 → 布局与默认台账 → 视图/权限/按钮
131
+ 数据源与目标表单 → 关联字段/虚拟表 → 联动、筛选与关联页签
132
+ 表单字段 → 流程/节点/连线 → 操作者/条件/节点配置 → 动作流
133
+ 独立权责表变量 + 流程表单字段 → 变量映射;随流程新建权责表则直接使用表单字段
134
+ 数据集与精确字段 → 报表设计 → 查询与共享
135
+ 目标视图/流程/页面 → 菜单绑定 → 页面入口验收
136
+ ```
137
+
138
+ 流程创建后产生的 ID 若被表单或视图按钮依赖,先在 plan 标明依赖,再在流程段回填。跨表循环引用可先建立独立骨架,待两侧资源存在后补关联。流程拓扑调整后按[流程指南](../workflow/guide-workflow.md)处理布局。
139
+
140
+ ## 五、规划预检
141
+
142
+ | 检查点 | 在 plan 中如何处理 |
143
+ |---|---|
144
+ | 业务含义不清 | 写出不同解释会改变的字段、权限或路由,提出具体确认问题 |
145
+ | 文档内容冲突 | 标出原文位置和受影响配置,待用户确认后定稿 |
146
+ | 资源新建/复用不明 | 只读盘点同名资源、归属和 ID;不能唯一确定时标“待环境核查”或请用户选择 |
147
+ | 布局或字段来源缺失 | 确认 FLOW/EXCEL、样表结构、目标字段和关联来源;保留可确认内容 |
148
+ | 环境能力尚未核实 | 列最小查询/验证动作,保持“待环境核查”,不直接判为无法实现 |
149
+ | 仅能部分配置 | 分别列可完成部分与需页面/其他系统补充部分,注明责任和验收方式 |
150
+ | 已确认无法实现 | 原需求项保持 `[ ]`,在 plan 第 8 节记录原因、影响及待用户决定的处理 |
151
+ | 验收标准不足 | 给关键配置写读回字段与一个典型页面/业务结果,避免只凭保存成功销号 |
152
+
153
+ 规划结果应能回答:要建或复用哪些资源、每条需求落在哪个配置项、依赖顺序是什么、哪些信息须确认、哪些需环境核查、哪些只能部分实现,以及如何判断关键结果生效。最终清单与逐项销号使用[计划模板](guide-plan-template.md)。
@@ -42,6 +42,13 @@
42
42
  | `e10-cli app read <appId>` | 查看应用**详情**(全量配置:名称/描述/简称/范围/目录/组织/发布状态)。`--json` 输出完整对象。走 `/app/info` |
43
43
  | `e10-cli app edit <appId> [--name] [--desc] [--short-name]` | 编辑应用信息(至少指定一个写参数;内部先读 `/app/info` 再合并提交) |
44
44
  | `e10-cli app delete <appId>` | 删除应用(软删除,可恢复;存在关联资源会提示先清理) |
45
+ | `e10-cli app enable <appId>` | 启用应用。`read` 里的 `publishEnabled`:1=已启用 / 2=已停用 / 0=从未启用 |
46
+ | `e10-cli app disable <appId>` | 停用应用。⚠ **会连带收回已发布到前台的入口** —— 不是「临时关一下、发布态还在」 |
47
+ | `e10-cli app publish <appId> [--name] [--description] [--category]` | 发布到**前台**(应用中心出现入口,地址 `/ebdapp/view/<appId>`)。需先 `enable`。`--category` 取汇报/协作/HRM/审批/数据协作/综合办公/CRM/自定义,缺省「自定义」。⚠ **每次发布生成新的前台 id**,取消后重发不沿用旧号 |
48
+ | `e10-cli app publish-info <appId> [--name] [--description] [--category]` | 改**前台那份**配置(不动应用本身的名称描述,那用 `app edit`)。需先 `publish`;不指定分类则沿用现有 |
49
+ | `e10-cli app unpublish <appId>` | 取消发布(收回前台入口)。⚠ **不可逆、无回收站**;重新发布是新入口。回读确认入口确实没了才报成功 |
50
+ | `e10-cli app lang get <appId>` | 查看应用名各语言译文 |
51
+ | `e10-cli app lang set <appId> [--zh] [--en]` | 设置应用名多语言。**简体中文那档就是应用名本身**;只给 `--en` 不会清空中文(内部先读回再整份写回)。改应用名(`app edit --name`)不动多语言配置 |
45
52
  | `e10-cli form read <objId> [--app-id <appId>] [--out <file>]` | 读取表单字段。`--app-id` 含明细表字段+Select/RadioBox/CheckBox 选项、**并标注每个字段属于哪张物理表**(`· 物理表: 表1`,JSON 里是 `formTable` 键;多物理表见 `form physical-table list`);**输出里的字段名(文本那栏 / JSON 的 `fieldName`)就是字段标题** —— 与设计器「字段管理」里看到的是同一个值,它为空就说明标题没写进去;`--out fields.json` 写 UTF-8 JSON(推荐,机器可读)。旧版 `[dir]` 参数写 memo.md,已过时 |
46
53
  | `e10-cli form read <objId> --app-id <appId> --out fields.json` | 读取字段含选项(Select/RadioBox/CheckBox 自动带 options)。**含明细表字段**,配动作流/联动拿明细 fieldId 用这个 |
47
54
  | `e10-cli form list <appId>` | 列出应用下的所有表单 |
@@ -85,21 +92,28 @@
85
92
  | `e10-cli form add-physical-field <objId> <appId> <formTableId> <字段名> <类型> [标题]` | 往**已有的附属物理表**里加字段。机制是 `saveFormFieldNew` + jsonObj 里的 `formTableId`(**不是**批量端点)。选项与 `form add-field` 同名同义,**两者共用同一份字段构造器**。⚠ **不碰布局** —— 字段不会自动进表单布局。每次写完**回读确认**(平台对形状不认的字段会回 200 却静默不落库) |
86
93
  | `e10-cli form rename-physical-table <objId> <appId> <formTableId> --name <新名> --table-name <原表名>` | 改物理表**显示名**(同一个 `saveFormTable` 端点,带 `formTable.id` 即改名)。`--table-name` 要**原样回传** |
87
94
  | `e10-cli form delete-physical-table <objId> <appId> <formTableId...>` | 删除物理表(`deleteFormTable`,可一次删多张)。⚠ **表里的字段一并删除,不可逆**。表 id 用 `form physical-table list` 查 |
88
- | `e10-cli form list-search <objId> <appId> <listId> [--add <fieldId...>] [--quick <fieldId...>] [--remove <fieldId>] [--pc-only]` | 查看/配置台账**搜索条件**。`--add` 进搜索面板、`--quick` 加顶部快捷筛选(均支持多字段)、`--remove` 移除。主表字段直取 ds/fields;明细子字段自动 fallback `getFormField` 单取元数据。**自动保留移动端配置** |
95
+ | `e10-cli form list-search <objId> <appId> <listId> [--add <字段名或fieldId...>] [--quick <...>] [--remove <fieldId>] [--search-mode 高级搜索\|筛选] [--prompt <提示语>] [--show-label\|--relation\|--other-conds\|--collapse\|--manual <on\|off>] [--fixed-cols <on\|off>] [--col-count <n>] [--hide-switch\|--hide-empty <on\|off>] [--add-group <名>] [--remove-group <名或id>] [--field <fieldId> --position 平铺\|更多下拉框 --group <名或id> --show-name <名> --default <值> --default-type <档> --operator <算子> --required <on\|off> --full-match <on\|off>] [--pc-only]` | 查看/配置台账**搜索**(面板设置 + 常用/快捷搜索字段 + 搜索分组)。`--add`/`--quick` 收**字段名或 fieldId**,已在里面就重建那条,候选与算子清单取自台账配置自己的字段表(**含系统字段**)。面板开关用 `on\|off` 传,**不传=保持原值**。⚠ `--hide-empty` 是反键(勾上 = 报文取 `"0"`)。字段的**默认条件关系**缺省取该字段算子清单第一项(不再写死 `like` —— 浏览框/选项各有各的清单)。搜索分组是**纯前端**的,`--add-group` 直接建、不调接口;`--remove-group` 会把引用它的字段置空。**自动保留移动端配置** |
89
96
  | `e10-cli form list-sort <objId> <appId> <listId> [--field <fieldId...>] [--order ASC\|DESC] [--clear] [--pc-only]` | 查看/配置台账**排序**。`--field` 支持多个(按传入顺序多级排序,`--order` 对所有字段生效)、`--clear` 清除。**自动保留移动端配置** |
90
- | `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` |
97
+ | `e10-cli form list-stats <objId> <appId> <listId> [--add <json或@文件>] [--remove <statId>] [--enable <statIds>] [--disable <statIds>] [--position <位置>] [--manual-load <on\|off>] [--filter-data <on\|off>] [--pc-only]` | 主表/明细顶部统计,sum/count/avg/max/min、条件及格式;明细 count 支持 `{ "type":"count", "subFormId":"..." }`;`enable:false` 建出来即停用,`--enable` / `--disable`(逗号分隔 id)改已有项。面板三项:`--position top\|topSimple\|topRight`(顶部显示 / 顶部简约显示 / 右上角显示,也收中文标签)、`--manual-load` 手动加载统计值、`--filter-data` 点击统计结果过滤列表数据 —— 三态 `on\|off`,**不传=不动**。统计条件里的日期区间可用快捷档 `quick`。保存后回读、保护移动端;平台可能共享两端统计,输出 mobileStatistics。详见 `references/form/guide-list-stats.md` |
91
98
  | `e10-cli form list-stats detail <objId> <appId> <listId> <subFormId> [--fields <fieldId...>] [--name-prefix <文本>] [--pc-only]` | 为明细数值字段批量生成 sum 和一项子表 count;重复运行复用同名同配置项 |
92
- | `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(明文条件树,非独立接口)。**自动保留移动端配置** |
99
+ | `e10-cli form list-filter <objId> <appId> <listId> [--add '<json或@文件>'] [--replace '<json或@文件>'] [--remove <fieldId>] [--relation <and\|or>] [--clear] [--pc-only]` | 查看/配置**视图数据条件**(台账只显示满足条件的数据)。`--add` 是**叠加**(往现有条件上加,不整体覆盖),`--replace` 才整体覆盖。**支持 OR 与嵌套条件组**:条目里有 `conditions` 数组就是一层组,带 `relation: "and"\|"or"`,可任意嵌套 —— `'{"conditions":[{"relation":"or","conditions":[A,B]},C]}'` 就是 `A OR (B AND C)` 那类;`--relation` 设**顶层**关系(整层,不给=沿用现有)。`--remove <fieldId>` 按字段摘(该字段的**所有**条件都摘,组被摘空整组拿掉;只摘一条用 `--replace`)。条件写法:`{"fieldId":"...","func":"eq","value":"研发valueKey","text":"研发"}`(func: eq 等于 / notEq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / between 介于 / isNull 为空 / isNotNull 不为空,单选 Select 用 eq;value 填选项 valueKey、text 填显示名)。**日期区间的快捷档**:`{"fieldId":"创建时间id","quick":"今年"}` 代替 `func`/`value`,16 档(今天/昨天/明天/本周/上一周/下一周/本月/上一月/下一月/本季/上一季/下一季/今年/上半年/下半年/去年,或英文别名 `thisYear` / `lastWeek` …;周从**周一**起算)。⚠ 与设计器一样落成**静态**起止日期,不是运行期动态。`--clear` 清空。走 saveNListConfig config.filter(明文条件树,非独立接口),保存后回读核对条数。**自动保留移动端配置** |
93
100
  | `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 都写)。**自动保留移动端配置** |
94
101
  | `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)。**自动保留移动端配置** |
95
102
  | `e10-cli form list-hierarchy <objId> <appId> <listId> [--enable --parent-field <名称或fieldId> [--expand-level N]] [--disable] [--pc-only]` | 查看/配置**上下级树形展示**。上级字段必须是主表中单选、关联当前表单自身的 EBuilder 字段(常见名称“上级类型”);与普通 `list-group` 分组聚合不是同一能力。走 `saveNListConfig config.superiorField`,保存后独立回读并自动保留移动端配置 |
96
103
  | `e10-cli form list-permission <objId> <appId> <listId> [--add-all] [--add-user <userId> --name <name>] [--add-role <roleId> [--name <name>]] [--add-matrix <矩阵id> --name <name>] [--share-level <n>] [--seclevel <min>-<max>] [--add-raw '<json>'] [--remove <id>] [--remove-all] [--clear]` | 查看/配置**台账视图权限**(谁能查看这个台账)。`--add-all` 所有人(自动把空 dataid 与 0 视为同一主体,避免重复)、`--add-user` 人员、`--add-role` 角色、`--add-matrix` 矩阵。`--remove <id>` 删除指定权限;`--remove-all` 删除全部“所有人”,与 `--add-all` 同用可清理重复后只保留一条;`--clear` 清空全部。保存走 `list/permission/save` 全量覆盖并回读。另支持共享级别和安全级别范围 |
97
- | `e10-cli form list-search-group <objId> <appId> <listId> [--add <fieldId>] [--remove <fieldId>] [--clear] [--pc-only]` | 查看/配置**分类搜索**(按选项字段分类筛选)。`--add <选项字段fieldId>`(须已在显示列)、`--remove <fieldId>`、`--clear`。走 saveNListConfig config.searchConditions.groupFilters(视图级明文)。**仅主表选项类字段 Select/RadioBox/CheckBox,不支持明细字段(产品边界,传明细报错)**。listGroupSets 留空由平台运行时生成 |
104
+ | `e10-cli form list-search-group <objId> <appId> <listId> [--add <字段名或fieldId>] [--position 0\|1] [--option-order default\|field] [--no-show-count] [--date-granularity <列表>] [--options <列表>] [--default-options <列表>] [--remove <fieldId>] [--clear] [--pc-only]` | 查看/配置**分类搜索**(台账顶部/下拉的分类筛选)。`--add` 收**字段名或 fieldId**,已在里面则按本次参数**重建那条**(改配置走它)。支持四类:**选项类**(Select/RadioBox/CheckBox)、**浏览框类**(Ebuilder/Browser/Employee/Department)、**日期类**(DateComponent)、**系统字段**(创建者/数据ID 这类)。`--position` 1=顶部(缺省)/0=下拉样式;`--option-order` 浏览框的选项排序(default 默认排序 / field 按字段属性设置);`--no-show-count` 关掉统计数字;`--date-granularity` 日期粒度(全年/半年/季度/月,缺省全要);`--options` / `--default-options` 控制选项类**哪些选项出现 / 哪些默认选中**。**仅主表字段,不支持明细(产品边界,传明细报错)**。走 saveNListConfig `config.searchConditions.groupFilters`(视图级明文) |
98
105
  | `e10-cli form nlist apply <objId> <appId> <listId> <template>` | 配置**列表式视图**(台账)的显示列:模板是二维数组(行 → 列),列项可绑表单字段(`fieldId`)或做**自定义文本**列(不给 `fieldId`、给 `html`,里面用 `{{字段名}}` 插入表单字段)。自动读移动端槽位一并写入。`show` 查看当前配置。⚠ 仅对列表式(NList)生效,表格式用 `form table-view`。详见 `form/guide-list-custom-text.md` |
99
106
  | `e10-cli form view list <objId> <appId> [--with-comps]` | 列出表单全部视图。`--with-comps` 额外拉每个视图布局 comps 数、标出空视图(NList 数据视图会显示「读取失败」,正常) |
100
- | `e10-cli form view rename <objId> <appId> <viewId> <新名称>` | 修改已有默认台账(nListView)的名称,保留原视图 ID 和配置,并在保存后回读确认。需求名称与默认名称不一致时统一用此命令,不新建重复视图 |
107
+ | `e10-cli form view rename <objId> <appId> <viewId> <新名称>` | 修改视图名称并回读。**表单视图与台账各走一条接口**(台账走 `viewlist/buttonEvent` 的编辑动作,其余视图走 `layout/rename`),命令按类型自动选。保留原视图 ID 和配置。需求名称与默认名称不一致时统一用此命令,不新建重复视图 |
108
+ | `e10-cli form view delete <objId> <appId> <viewId>` | 删除视图(表单视图 / 台账 / 看板等,按类型自动选接口)。⚠ **不可逆、无回收站**。先回读定位目标,删完**再回读确认确实没了**才算成功 |
101
109
  | `e10-cli form view create <objId> <appId> <视图名> [--type formView\|kanbanView\|calendarView\|mindMapView\|multiView] [--terminal PC\|MOBILE] [--layout-type FLOW\|EXCEL] [--detail <明细名>] [--sub-form-id <明细subFormId>]` | 给**已有表单**添加视图。`formView` 创建后是空布局,需续跑 `form view populate` 填字段;`kanbanView`/`calendarView`/`mindMapView`/`multiView` 建视图实体。**multiView 数据维度**:缺省主表;明细表维度用 `--detail <明细名>`(按名解析)或 `--sub-form-id <明细subFormId>`(直传),传值即明细维度(`subFormMain:true`)。**台账(NList)视图**用 `form table-view create`,不在此命令 |
102
110
  | `e10-cli form view populate <objId> <appId> <viewId>` | 把已有字段按布局类型填入 formView。视图为空则整份填;**视图已有字段时只补缺**——只补视图里还没有的字段,已有组件的排版与属性一个不动(重跑幂等)。表单新增字段后要让它出现在某个视图里,也走这条 |
111
+ | `e10-cli form message list <appId> [--obj-id <objId>] [--keyword <kw>] [--page-size <n>] [--page-index <n>]` | 列出**消息提醒**(表单数据变动时提醒人)。不传 `--obj-id` 列出整个应用的;传了**在本地按表单收口**(平台那条过滤参数不生效)。详见 `references/form/guide-form-message.md` |
112
+ | `e10-cli form message get <appId> <triggerId> [--obj-id <objId>]` | 查看单条消息提醒,含**推送渠道**与提醒对象。渠道不在列表与详情返回里,命令额外读一次补上 |
113
+ | `e10-cli form message add <appId> <objId> --name <名称> [--type <类型>] [--channels <渠道>] [--title <标题>] [--content <内容>] [--pc-link <url>] [--mobile-link <url>] [--rule <spec>...] [--rule-json <json>...] [--disabled]` | 新建消息提醒。`--type` 新建/修改/删除(逗号分隔)或 `all`,缺省 `all`;`--channels` im/cloud-bridge/email/sms 或 `all`,**缺省只发 im**;`--rule` 写 `<类型>:<名字>` 或 `<类型>:<ID>,name=<名字>`,类型 user/dept/role/company(同名多条报错并列候选) |
114
+ | `e10-cli form message edit <appId> <triggerId> [...]` | 修改消息提醒(读→合并→回写,**没传的项保持原值**)。`--rule` 传了整份替换提醒对象、`--clear-rules` 清空、`--enable`/`--disable` 改启停。保存后回读确认 |
115
+ | `e10-cli form message delete <appId> <triggerId> [--obj-id <objId>]` | 删除消息提醒(不可逆) |
116
+ | `e10-cli form message enable \| disable <appId> <triggerId> [--obj-id <objId>]` | 启用 / 停用消息提醒。停用后不再推,配置保留 |
103
117
  | `e10-cli form native <子命令>` | **原生表单引擎**(formdatareport/biaoge,非 Ebuilder;只有 formId、无 objId、无 appId)的命令组:`create <名称>` 建表、`read <formId>` 读字段、`add-field` / `add-detail-table` / `init` / `field-group`,以及 `list [--keyword]`(存活表单,名称模糊搜)、`trash`(回收站)、`delete <formId...>`(停用→检查→删除,进回收站,删后回读确认)。**注意与 EB 表单不通用**:URL 前缀 `/api/formdatareport/...`、body module `biaoge` 或 `formdatareport` 视接口而定 |
104
118
  | `e10-cli form layout read <objId> [--view-id <id>]` | 读表单布局结构(comps 坐标/只读)。不传 `--view-id` 读默认布局,传则读指定视图 |
105
119
  | `e10-cli form layout init <objId> [--style-template <名\|id>] [--view-id <id>] [--read-only] [--required] [--disable-edit] [--single-row]` | 初始化/重建表单布局(initLayout):**换样式模板** + 覆盖字段 readOnly/required/disableEdit/singleRow(不传这些开关则**保留字段已有设置**)。**⚠ 样式模板流式与表格式是两套**,同名不同 id,按表单实际布局类型实时查(传错套会直接报错并列出可用项;**平台对跨套 id 不报错、只会静默忽略,表现为"命令成功但样式没变"**)。缺省:流式=标准版、表格式=表格版。完整模板表见 `form/style-templates.md`。**建表时不能指定样式,只能建完再用本命令换** |
@@ -168,10 +182,12 @@
168
182
  | `e10-cli role list` | 列出所有角色(树形结构,含层级关系) |
169
183
  | `e10-cli role create <name>` | 创建角色,`--parent <id>` 指定父角色,`--code` 编码,`--remark` 备注 |
170
184
  | `e10-cli role delete <ids...>` | 删除角色(可多个) |
171
- | `e10-cli role add-member <roleId> <名字...> [--type <类型>]` | 添加角色成员,**可一次给多个名字**(各自独立搜索)。`--type` 取 `resource`(人员,缺省) / `department`(部门) / `subcompany`(分部) / `position`(岗位) / `channel`(渠道) —— 这几项正是平台 `objectTypeFilter` 白名单里**可以逐个选**的对象,白名单另三项 `all`/`external`/`allExternal` 不是逐个选的对象,本命令不支持。五类走**同一个保存端点**,靠 `objType` 选各自数组(`obj_resource` / `obj_department` / `obj_subcompany` / `obj_position` / `obj_channel`)。搜索**精确同名优先**;同名多条、或多条命中却没有同名项,一律**报错不取首条**(取首条会静默加错人)。`--sec-min/--sec-max`、`--is-seclevel` 覆盖安全级别(**这两个值随租户配置变**,缺省 `0`/`100` + false);`--department-attribute subordinate,partTimeStaff` 给部门/分部指定是否含下级 / 含兼职。**增量追加**,不会冲掉已有成员 |
172
- | `e10-cli role member-list <roleId>` | 列出角色成员(人员 / 部门 / 分部 / 岗位 / 渠道,含成员级别与分权范围) |
185
+ | `e10-cli role add-member <roleId> [<名字...>] [--id <id,id>] [--type <类型>]` | 添加角色成员。**两条入口二选一**:给**名字**(可多个,各自独立搜索)或给 **`--id`**(逗号分隔,直接指定对象)。同名多条时用 `--id` —— 名字入口**精确同名优先**,同名多条、或多条命中却没有同名项,一律**报错不取首条**(取首条会静默加错人),报错里会列出候选及其 id。两条入口**最终走同一个构造器**,平台收到的东西完全一致(`--id` 不是"只发个 id",而是先按 id 把对象读回来)。`--type` 取 `resource`(人员,缺省) / `department`(部门) / `subcompany`(分部) / `position`(岗位) / `channel`(**群组**) —— 这几项正是平台 `objectTypeFilter` 白名单里**可以逐个选**的对象,白名单另三项 `all`/`external`/`allExternal` 不是逐个选的对象,本命令不支持。五类走**同一个保存端点**,靠 `objType` 选各自数组(`obj_resource` / `obj_department` / `obj_subcompany` / `obj_position` / `obj_channel`)。`--sec-min/--sec-max`、`--is-seclevel` 覆盖安全级别(**这两个值随租户配置变**,缺省 `0`/`100` + false);`--department-attribute subordinate,partTimeStaff` 给部门/分部指定是否含下级 / 含兼职。**`--level` 设「成员级别」**(总部 / 分部 / 部门,缺省**总部**;本次添加的成员共用同一档);**`--org-scope` 设「分权范围」**(成员能维护哪些机构,缺省全部机构;可选 同部门 / 同部门的下级部门 / 同部门及下级部门 / 同分部 / 同分部的下级分部 / 同分部及下级分部)。`role member-list` 的输出会带 `级别=` / `范围=` 便于核对。**增量追加**,不会冲掉已有成员。⚠ `--id` 里**有不存在的 id 会直接报错**(平台对取不到的 id 是静默丢弃的,不核对就会"报成功但少加了一个")|
186
+ | `e10-cli role member-list <roleId>` | 列出角色成员(人员 / 部门 / 分部 / 岗位 / 群组,含成员级别与分权范围) |
173
187
  | `e10-cli org department create <name> [--code <编号>] [--parent <父部门id>] [--subcompany <分部id>]` | 新建部门。**两步**:`organization/getForm?flag=department` 取保存模板(含平台**现生成**的 targetId)→ `organization/saveForm` 落组织树(扁平报文,背后的表单记录平台会自己补)。`--parent` 不传即顶层部门,挂在当前用户的分部下(分部自动解析,可用 `--subcompany` 覆盖)。⚠ 模板里 `parent` 是数组、`subcompany` 是对象数组,命令内部转成 id 字符串 —— **别拿模板直接发** |
188
+ | `e10-cli org department list [--name <关键词>] [--page <n>] [--page-size <n>]` | 列出部门(不传 `--name` 就是全部),带分页与总数。**用来拿 id 给别的命令当入参**(例如 `role add-member --id`)。走 `browser/data/department` —— ⚠ **这个端点的本相是「列表」不是「搜索」**:空搜索即返回全部并带 `current` / `total` 分页,`--name` 只是在它上面加一层名字过滤。输出第二列是全路径(如「营销部 / 前端逻辑编排 / 维森集团」),层级直接看得到 |
174
189
  | `e10-cli org subcompany create <name> --parent <上级分部id> [--code <编号>]` | 新建**分部**(机构;部门挂在它下面)。与建部门**同一套接口、同一个报文**,只差 `getForm` 的 `flag` 与报文的 `type`。⚠ **必须给 `--parent`**(分部总得挂在某个分部下)。⚠ 「上级部门」与「所属分部」**至少填一个**,两者各填其中一半:建**部门**填「所属分部」、建**分部**填「上级分部」 |
190
+ | `e10-cli org subcompany list [--name <关键词>] [--page <n>] [--page-size <n>]` | 列出**分部**(不传 `--name` 就是全部)。与 `org department list` 同一套(走 `browser/data/subcompany`)。**建分部要的「上级分部 id」、角色成员要的分部 id 都从这里拿** —— 此前没有任何读分部的入口,只能去页面上抄 |
175
191
  | `e10-cli org subcompany delete <id> [--parent <上级分部id>]` | 删除分部(平台同一个 `department/delete` 端点)。删除前会从组织树读该节点的 `count` 做**预警**(下面还有人时平台不允许删),但**不阻断** —— 最终以平台为准。⚠ 与部门删除一样是**软删** |
176
192
  | `e10-cli org department edit <id> [--name] [--code] [--parent] [--disporder]` | 编辑部门:改名 / 改编号 / **移动父级** / 改排序。是「**读现状 → 改 → 写回**」:`organization/getForm?id=` 读回这个部门的**完整当前状态**(含 tenantKey / creator / datarank / createTime 等,全部原样回传,别自己造),改完再 `organization/saveForm`。⚠ 编辑报文与新建**形状不同**(认 `id`,没有 `targetId`/`formdata`/`recordId`,`advanceForm:false`),不能共用构造函数。命令会自动**回读确认**改名生效,静默失败会报错 |
177
193
  | `e10-cli org department delete <id> [--parent <父部门id>] [--subcompany <机构id>]` | 删除部门。`--parent` 是该部门的**父**(顶层部门的父就是机构 id),不传按当前机构的上下文解析。⚠ 删除是**软删**(`isDelete: true`),删完用 `getForm?id=` 仍能读出来 —— 判存在与否要看 `isDelete` 字段,别看接口有没有返回 |
@@ -239,6 +255,7 @@
239
255
  | `e10-cli workflow numbering reserve <wf> <count> [--prefix]` | 预留编号。**流程编号=REQUEST_NO 系统字段**:eb表单绑流程后编号走本命令(不要用 `form serial-mark` 表单编号,那对流程表无效) |
240
256
  | `e10-cli workflow node validate <wf> <nodeId> --rule "主题字段 操作 值字段或字面值"` | 节点提交校验(智能审批规则,提交时拦截)。值可以是**字段**(字段 vs 字段)或**字面值**(字段 vs 常量);主题字段支持**跨表**——用「明细表名.字段名」定位明细字段做主子表校验:`"请假时长 小于 4"`、`"行程明细.行程开始时间 等于 出差开始日期"`(明细字段=主表字段)。**操作符**:大于 / 大于等于 / 小于 / 小于等于 / 等于 / 不等于 / **为空 / 不为空**(后两个无需值,如 `"备注 不为空"`)。**明细量词**:明细字段的主题末尾可写 `:任一`(任一行,缺省)或 `:所有`(所有行),如 `"货品明细.货品名称:所有 不为空"`;主表字段写量词会报错。`--name` 规则名;`--disable` 关闭;`--view` 查看 |
241
257
  | `e10-cli workflow node menu <wf> <nodeId>` | 查看/切换节点操作菜单。`--toggle <menuId>` 切换启用状态 |
258
+ | `e10-cli workflow node validate <wf> <nodeId> --rules-json @file.json` | 组合条件(AND/OR 嵌套、数值上下限、系统字段);`--pass-tip`/`--fail-tip` 设置提示语,`--on-fail 禁止提交|仅做提醒` 设置不合规处理,`--relation AND|OR` 设置节点多规则关系。完整格式见节点校验指南。 |
242
259
  | `e10-cli workflow node layout list <wf> [--terminal PC\|MOBILE]` | 列出该工作流表单的布局,以及每套被哪些节点引用 |
243
260
  | `e10-cli workflow node layout get <wf> <nodeId>` | 查看某节点挂的是哪套布局(空 = 跟随表单默认) |
244
261
  | `e10-cli workflow node layout bind <wf> <nodeId> --layout-id <id>` | 把节点挂到某套布局。**自动从原来那套摘掉**(一个节点同时只属于一套布局);幂等 |
@@ -470,7 +487,7 @@ e10-cli report py preagg --report-id <id> [--app-id <id>]
470
487
  |------|------|
471
488
  | `e10-cli matrix list [--name <关键词>] [--enable-status 0\|1] [--org-id <id>]` | 查询矩阵列表(**含停用矩阵**,带状态;`--out` 写 JSON 文件) |
472
489
  | `e10-cli matrix create <name> [选项]` | 新建矩阵(**新建即为启用**,要停用再跑 `matrix disable`)。所属机构的字段名由**分权状态**决定,CLI 自动判断并在缺省时用当前机构兜底,分权租户无需手写机构 |
473
- | `e10-cli matrix config <id>` / `config-edit <id>` | 查看 / 编辑矩阵配置(条件字段 + 值字段)。**`config-edit` 的 `--condition` 可省略**,省略则沿用现有条件列(部门/分部矩阵的条件列是平台建矩阵时自动给的,不该手写;已有列要带 `id`,不带会被当成新列去取号);保存后按列 id 回读比对 |
490
+ | `e10-cli matrix config <id>` / `config-edit <id>` | 查看 / 编辑矩阵配置(条件字段 + 值字段)。**`config-edit` 的 `--condition` 可省略**,省略则沿用现有条件列(部门/分部矩阵的条件列是平台建矩阵时自动给的,不该手写;已有列要带 `id`,不带会被当成新列去取号);保存后按列 id 回读比对。列的 `type` 只有 **7 档**:人员/部门/分部/岗位/客户/项目/自定义浏览框(`resource`/`department`/`subcompany`/`position`/`customer`/`project`/`customBrowser`)。**自定义浏览框列**用 `"browser":"<浏览框名>"` 指名,CLI 查回富对象再发;沿用老列时按读回的 `configDetailDto.dataId` 反查重发(这个列读写形状不同,写回读形状会被平台拒) |
474
491
  | `e10-cli matrix enable <id>` / `disable <id>` | 启用 / 停用(停用后数据只读) |
475
492
  | `e10-cli matrix update <id>` / `delete <ids...>` | 更新基本信息(名称/描述/同步方式)/ 删除(级联删配置、数据、维护者) |
476
493
  | `e10-cli matrix data` | 矩阵数据维护(映射行)。`data save` 简写为 `[{rowId?, "<列configId>": ["<实体ID>"]}]`:**带 `rowId` 改那一行、不带为新增**(行 id 用 `data list` 拿;同步型矩阵的行 id 就是部门 id)。改行只给要改的列即可,CLI 自动补全其余列并回读比对 |
@@ -537,7 +554,10 @@ e10-cli role add-member <roleId> 张三 李四 # 人员
537
554
  e10-cli role add-member <roleId> 营销三组 --type department # 部门
538
555
  e10-cli role add-member <roleId> 总经理 --type position # 岗位
539
556
  e10-cli role add-member <roleId> 华东分部 --type subcompany # 分部
557
+ e10-cli role add-member <roleId> 项目协作群 --type channel # 群组
558
+ e10-cli role add-member <roleId> --id <id,id> --type department # 同名多条时按 ID 加
540
559
  e10-cli role member-list <roleId> # 读回成员
560
+ e10-cli org subcompany list # 查分部 id(建分部/加成员都要)
541
561
 
542
562
  # 6. 创建流程
543
563
  e10-cli workflow create <appId> <formObjId> 会议室审批
@@ -0,0 +1,57 @@
1
+ # 消息提醒(表单数据提醒)
2
+
3
+ 表单数据发生**新建 / 修改 / 删除**时,按配置把消息推给指定的人。位置在 **表单模型 → 消息提醒 → 表单数据提醒**(同一页面还有个「动作流提醒」页签,是另一条链路)。
4
+
5
+ 一条提醒由这几样组成:**触发时机 + 推送渠道 + 标题内容 + 落地页 + 提醒对象**,整体可**启用 / 停用**。
6
+
7
+ ## 命令
8
+
9
+ | 命令 | 用途 |
10
+ |---|---|
11
+ | `form message list <appId> [--obj-id <objId>] [--keyword <kw>]` | 列出提醒。不传 `--obj-id` 就是把整个应用的列出来 |
12
+ | `form message get <appId> <triggerId>` | 看单条,含**推送渠道**与提醒对象 |
13
+ | `form message add <appId> <objId> --name <名称>` | 新建 |
14
+ | `form message edit <appId> <triggerId> [...]` | 修改,没传的项保持原值 |
15
+ | `form message delete <appId> <triggerId>` | 删除(不可逆) |
16
+ | `form message enable \| disable <appId> <triggerId>` | 启用 / 停用 |
17
+
18
+ `get` / `edit` / `delete` / `enable` / `disable` 的 `--obj-id` 可以省 —— 不传会自动反查这条提醒挂在哪张表单上。
19
+
20
+ ### `add` / `edit` 的选项
21
+
22
+ | 选项 | 说明 |
23
+ |---|---|
24
+ | `--type <类型>` | 触发时机:`新建` / `修改` / `删除`,逗号分隔,也可以写 `all`。缺省 `all` |
25
+ | `--channels <渠道>` | 推送渠道:`im`(站内)/ `cloud-bridge`(云桥)/ `email`(邮件)/ `sms`(短信),逗号分隔,也可以写 `all`。**缺省只发 `im`** —— 不会替你打开短信 |
26
+ | `--title` / `--content` | 提醒标题与内容。纯文本会自动包成富文本;不传时标题取提醒名称、内容按触发时机生成一句话(如「数据新建、修改了」) |
27
+ | `--pc-link` / `--mobile-link` | 点开提醒后的落地页,缺省是这条记录的表单卡片页 |
28
+ | `--rule <spec>` | 提醒对象,可重复(写法见下) |
29
+ | `--rule-json '<json>'` | 提醒对象原始报文,逃生口 |
30
+ | `--disabled` | 建成即停用(`edit` 用 `--enable` / `--disable`) |
31
+
32
+ ## 提醒对象怎么写
33
+
34
+ 四类:`user` 人员、`dept` 部门、`role` 角色、`company` 分部。
35
+
36
+ 写法是 `<类型>:<值>[,name=<显示名>][,extra=0|1]`:
37
+
38
+ - **`<类型>:<名字>`** —— 工具按名字去查。**同名多条会报错并列出候选(带 ID)**,不会替你挑一条,免得配错人还看不出来。
39
+ - **`<类型>:<ID>,name=<名字>`** —— 名字有歧义、或手上只有 ID 时用这个:`<值>` 直接当 ID 用,不查。
40
+
41
+ `extra` 是组织范围上的附加项 —— 页面上部门 / 分部的提醒对象显示成「营销部:本部门含兼职人员」就是它。部门 / 分部缺省开、人员 / 角色缺省关,需要时显式覆盖。
42
+
43
+ ```
44
+ form message add <appId> <objId> --name 有新数据了 \
45
+ --type 新建 --channels im,email \
46
+ --rule user:任来仪 \
47
+ --rule dept:营销部 \
48
+ --rule role:会议管理员
49
+ ```
50
+
51
+ ## 几个容易踩的点
52
+
53
+ - **列表是应用级的**:这条接口按应用列,`--obj-id` 是命令在**本地按表单收口**(平台不认那个过滤参数,传了也照回全应用)。
54
+ - **渠道勾选要单条看**:列表和详情返回里都不带渠道,`form message get` 会额外读一次补上。
55
+ - **停用不等于删除**:`disable` 只是不再推,配置留着;`delete` 才是真的没了。
56
+ - **修改是整份保存**:`edit` 先读回现有配置再合并你改的项,**没传的项不会被清空**。提醒对象默认保持原样,要整份替换就传 `--rule`,要清空传 `--clear-rules`。
57
+ - **提醒名称**就是列表里显示的那个名字,建的时候起的 `--name` 别随手写。
@@ -13,7 +13,8 @@
13
13
 
14
14
  1. 用 `form list-view <objId> <appId>` 查询已有列表,确认目标属于当前表单且用途符合需求,记录实际名称和 listId。存在多个候选时核对数据范围、权限和展示配置,不仅凭名称或第一条记录选择。
15
15
  2. 普通列表需求直接在该 listId 上配置显示列、筛选、排序、统计和事件;需要整组配置显示列时用 `form list-columns <objId> <appId> <listId> --set @columns.json`。`table-view ensure` 只用于空列补齐,不负责视图选择或重命名。
16
- 3. 默认视图名称由平台随表单生成,不应机械沿用或统一去掉末尾“表”字。需求明确给出视图名称且与默认名称不一致时,使用 `form view rename` 修改已有默认台账并保留 ID;不要新建同用途视图代替改名。表单名、视图名和菜单名分别处理。例如表单“客户类型表”的视图要求为“客户类型”时,应把默认台账改名为“客户类型”,不能写成“同客户类型”。
16
+ 3. 默认视图名称由平台随表单生成,不应机械沿用或统一去掉末尾“表”字。需求明确给出视图名称且与默认名称不一致时,使用 `form view rename` 修改已有视图并保留 ID;不要新建同用途视图代替改名。表单名、视图名和菜单名分别处理。例如表单“客户类型表”的视图要求为“客户类型”时,应把默认台账改名为“客户类型”,不能写成“同客户类型”。
17
+ 多出来的视图用 `form view delete` 删掉(**不可逆、无回收站**),命令会在删完回读确认确实没了。
17
18
  4. 只有明确需要“我的客户”“重点客户”等额外独立视图,或不同展示类型时,才进入新增流程。已有重复视图需先核对菜单、关联页签等引用及配置,不能自动删除。
18
19
 
19
20
  例如:已建“客户信息表”,方案中的“客户信息视图”可由其默认台账满足,plan 标记“复用默认台账”,填写实际 listId 即可。
@@ -248,8 +249,12 @@ e10-cli form list-stats <objId> <appId> <listId> --remove <statId> # 平台 st
248
249
 
249
250
  # 视图数据条件:台账只显示满足条件的数据(走 saveNListConfig config.filter,明文条件树,非独立接口——
250
251
  # conditionEditor/saveOrUpdate 表单级不挂视图、saveBaseinfo 带 conditionData 都是错误端点)
251
- # func 取值同条件统计(eq 等于 / neq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / range 区间 / isNull 为空 / isNotNull 不为空,单选 Select 用 eq);value 填选项 valueKey,text 填显示名;多条件默认 AND
252
+ # func 取值同条件统计(eq 等于 / neq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / range 区间 / isNull 为空 / isNotNull 不为空,单选 Select 用 eq);value 填选项 valueKey,text 填显示名
253
+ # --add 是**叠加**(往现有条件上加);要整体覆盖用 --replace。--relation 设顶层关系(不给=沿用现有)
252
254
  e10-cli form list-filter <objId> <appId> <listId> --add '{"conditions":[{"fieldId":"项目类型fieldId","func":"eq","value":"研发valueKey","text":"研发"}]}'
255
+ # 嵌套条件组:条目里有 conditions 数组就是一层组(带 relation),可任意嵌套 → A OR (B AND C)
256
+ e10-cli form list-filter <objId> <appId> <listId> --replace '{"conditions":[{"fieldId":"Aid","func":"eq","value":"x"},{"relation":"and","conditions":[{"fieldId":"Bid","func":"eq","value":"y"},{"fieldId":"Cid","func":"gt","value":0}]}]}' --relation or
257
+ e10-cli form list-filter <objId> <appId> <listId> --remove 项目类型fieldId # 按字段摘(该字段所有条件都摘;组摘空整组拿掉)
253
258
  e10-cli form list-filter <objId> <appId> <listId> --clear
254
259
 
255
260
  # 行事件:点击行数据 NewPage 打开(走 saveNListConfig config.eventGroup,明文 JSON,config+mConfig 都要写)
@@ -195,7 +195,7 @@ wf-form formula-linkage delete <formId> --workflow-id <id> <linkageIds...>
195
195
  | 位置参数 | `<appId> <objId>` | **`<formId>`** + `--workflow-id` |
196
196
  | 联动端点 | `/api/ebuilder/form/form/linkage` | `/api/ebuilder/flow/form/linkage`(**不带 `?apid=`**) |
197
197
  | `module` | `ebuilderform` | **`ebuildercard`** |
198
- | 定位入参 | `customParam: {appId, objId}` | **顶层 `refId` = workflowId**;`customParam: {scene:'workflow'}` |
198
+ | 定位入参 | `customParam: {appId, objId}`(读、存都发) | **顶层 `refId` = workflowId**;`customParam: {scene:'workflow'}` **只在读的时候发,保存报文里没有这个键** |
199
199
  | 公式参数里的 `appId` | 有 | **没有这个键** |
200
200
  | 不可作赋值目标的系统字段 | 21 项 | **30 项**(模块字段桶是 32 —— 差的两个见下) |
201
201
  | 触发事件 | 10 个(字段组 5 + 表单组 5) | **17 个**(多一组「流程」事件) |
@@ -1,6 +1,6 @@
1
1
  # 顶部统计:主表与明细
2
2
 
3
- `form list-stats` 配置已有台账视图的顶部统计。支持 sum/count/avg/max/min,以及千分位、小数位、万/亿单位、条件统计。来源表单 `objId`、应用 `appId`、目标视图 `listId` 与明细子表 `subFormId` 是不同 ID。
3
+ `form list-stats` 配置已有台账视图的统计。支持 sum/count/avg/max/min,以及千分位、小数位、万/亿单位、条件统计;还能配**每条统计项的启用状态**与**统计面板三项**(显示位置 / 手动加载统计值 / 点击统计结果过滤列表数据)。来源表单 `objId`、应用 `appId`、目标视图 `listId` 与明细子表 `subFormId` 是不同 ID。
4
4
 
5
5
  ## 查询及单项配置
6
6
 
@@ -67,13 +67,66 @@ e10-cli form list-stats detail <objId> <appId> <listId> <subFormId> --fields <
67
67
 
68
68
  重复运行时,已有同名同配置项会复用并返回 `unchanged/reused`,不会重复新增;同名不同配置则报错,应先查询并明确移除旧项。批量操作同样可以使用 `--pc-only`。
69
69
 
70
+ ## 启用状态
71
+
72
+ 每条统计项**单独**有启用状态。建的时候可以直接建成停用:
73
+
74
+ ```json
75
+ { "fieldId": "1310832033224278033", "type": "sum", "name": "备用金额", "enable": false }
76
+ ```
77
+
78
+ 改**已有**项的启用状态用 `--enable` / `--disable`(逗号分隔统计项 ID):
79
+
80
+ ```bash
81
+ e10-cli form list-stats <objId> <appId> <listId> --disable 1310832033224278099
82
+ e10-cli form list-stats <objId> <appId> <listId> --enable 1310832033224278099
83
+ ```
84
+
85
+ ⚠ `--add` 遇到**同名同配置**已存在的项会复用,**不会**顺带改它的启用状态 —— 要改就用 `--enable` / `--disable`。已经是目标状态时跳过、不算改动(重复执行返回 `unchanged`)。
86
+
87
+ ## 面板三项
88
+
89
+ 显示位置、手动加载统计值、点击统计结果过滤列表数据是**每视图一份**的统计面板设置:
90
+
91
+ ```bash
92
+ # 显示位置:顶部显示 / 顶部简约显示 / 右上角显示(也收中文标签)
93
+ e10-cli form list-stats <objId> <appId> <listId> --position topRight
94
+ # 手动加载统计值(开了就不进视图自动跑)
95
+ e10-cli form list-stats <objId> <appId> <listId> --manual-load on
96
+ # 点击统计结果过滤列表数据
97
+ e10-cli form list-stats <objId> <appId> <listId> --filter-data on
98
+ ```
99
+
100
+ 三项都是**三态**:`on|off`,**不传就是保持原值**,不会把没提到的开关覆盖掉。位置三档的取值 `top` / `topSimple` / `topRight` 对应界面上的「顶部显示 / 顶部简约显示 / 右上角显示」。
101
+
102
+ ⚠ **别被报文骗了**:设计器保存请求里带的 `statisticsPositionSpan` 是**陈旧值** —— 切到「顶部简约显示」或「右上角显示」时,请求体里仍然发「顶部显示」。但服务端读回来会**按 `position` 重算**成对应文案(`topSimple` → 顶部简约显示、`topRight` → 右上角显示)。命令两边都写死,发出去的报文自洽,并在回读时同时核对位置与文案。
103
+
104
+ ⚠ 面板三项只写 PC 侧,**不动移动端配置**。统计随 `listId` 共享,平台会把它同步到移动端读回;正因为如此,移动端一致性校验会把这四个面板键和 `statisticsList` 一起排除(它们的变化是共享造成的,不是「移动端其它配置被冲掉」)。
105
+
106
+ ## 条件里的日期快捷档
107
+
108
+ 统计条件的日期字段选「区间」时,可以直接用设计器那排快捷(今天 / 本周 / 今年 …,共 16 档)代替起止日期:
109
+
110
+ ```json
111
+ {
112
+ "fieldId": "1310832033224278033",
113
+ "type": "sum",
114
+ "name": "今年付款额",
115
+ "conditions": [{ "fieldId": "<创建时间fieldId>", "quick": "今年" }]
116
+ }
117
+ ```
118
+
119
+ `quick` 与 `func` / `value` / `valueField` **互斥**(快捷档本身已经决定了区间)。口径与设计器一致:起点为首日 `00:00:00`、终点为末日 `23:59:59`,**周从周一起算**。
120
+
121
+ ⚠ 与设计器行为相同,落下来是**静态**起止日期(不是运行期动态刷新),每次执行按当时日期重算。中文标签在部分终端经命令行传参会遇到编码问题,此时可用英文别名(`thisYear` / `thisMonth` / `lastWeek` …)或 `--add @文件`。
122
+
70
123
  ## 保存与移动端
71
124
 
72
125
  - 保留 PC 完整配置,仅更新 `listStatistics`;删除用 `operation: DELETE`,不能只从数组移除。
73
126
  - 读取真实移动端配置作为 `mConfig` 原样回传。默认移动端读取失败就停止;仅明确不使用移动端时加 `--pc-only`。
74
127
  - 保存后校验新增项、原有项、删除结果及移动端配置。`verified: true` 表示配置回读一致,不等于已经核对实际统计数值。
75
128
  - **维森测试93当前平台按 listId 共享 PC/MOBILE 统计项。** 当保存前后两端统计集合均对应一致时,返回 `mobileStatistics: "shared"`;改统计会同时影响两端。移动端独有统计丢失或其他配置变化仍报错。不要承诺共享环境下“只改 PC 统计”。
76
- - 比较移动端配置时,仅排除已实证每次读取会重建的按钮事件临时 ID;业务按钮 ID、动作内容、列配置等仍核对。`mobilePreserved` 表示移动端其余配置及独立统计得到保护。
129
+ - 比较移动端配置时,仅排除已实证每次读取会重建的按钮事件临时 ID,以及**随 `listId` 共享的统计项与统计面板键**(`statisticsList` / `statisticsPosition` / `statisticsPositionSpan` / `statisticsManualLoad` / `enableStatisticsFilterData`);业务按钮 ID、动作内容、列配置等仍核对。`mobilePreserved` 表示移动端其余配置及独立统计得到保护。
77
130
  - 如果提示“已保存,但回读不一致”,先查询统计和移动端状态,不直接重试新增。
78
131
 
79
132
  ## 计划与验收
@@ -167,6 +167,8 @@ e10-cli matrix config <matrixId>
167
167
 
168
168
  ## 字段类型枚举
169
169
 
170
+ 设计器「字段维护」里就这 **7 档**:
171
+
170
172
  | 中文 | API 值 |
171
173
  |------|--------|
172
174
  | 人员 | `resource` |
@@ -175,7 +177,32 @@ e10-cli matrix config <matrixId>
175
177
  | 岗位 | `position` |
176
178
  | 客户 | `customer` |
177
179
  | 项目 | `project` |
178
- | 数据源 | `datasource` |
180
+ | 自定义浏览框 | `customBrowser` |
181
+
182
+ ## 自定义浏览框列
183
+
184
+ 条件列和值列都可以是**自定义浏览框**。它的读写形状**不一样**,这点最容易踩:
185
+
186
+ | | 形状 |
187
+ |---|---|
188
+ | **写**(要发的) | `customBrowser:<浏览框富对象>` + `singleType` |
189
+ | **读**(回来的) | `browserModule` + `browserType` + `configDetailDto{dataId,singleType}` + `showConfig` |
190
+
191
+ 平台**只认写的那个形状**:把读回来的三个键原样发回去,会被回「**自定义浏览框参数异常**」。所以:
192
+
193
+ - **新建**一列时用浏览框**名字**指名即可,CLI 会去查回富对象:
194
+ ```json
195
+ { "type": "自定义浏览框", "name": "这里是显示名字", "browser": "测试自定义浏览框", "singleType": 0 }
196
+ ```
197
+ `browser` 也收完整对象(想直接贴 bean 就用 `customBrowser`)。名字**精确匹配**,同名多条或查不到都会报错并列候选。
198
+ - **沿用**老列(省略 `--condition`)时,CLI 会按读回里的 `configDetailDto.dataId` **把富对象反查回来再发** —— 不需要你补;也不要手写 `browserType` / `configDetailDto`,发了会被拒。
199
+ - `singleType`:`0` 多选 / `1` 单选(列底下那个「单选」勾选框)。自定义浏览框列默认 `0`。
200
+
201
+ ```bash
202
+ e10-cli matrix config-edit <矩阵ID> \
203
+ --condition '[{"type":"部门","name":"所属门店"},{"type":"自定义浏览框","name":"合同","browser":"测试自定义浏览框"}]' \
204
+ --value '[{"type":"人员","name":"门店经理","singleType":1}]'
205
+ ```
179
206
 
180
207
  ## config-edit 参数
181
208
 
@@ -194,7 +221,8 @@ e10-cli matrix config <matrixId>
194
221
  }
195
222
  ```
196
223
 
197
- - `singleType`: 0=多选, 1=单选。值字段必传,条件字段可省(省了沿用现有的)。条件列在平台上**本身是必填的**,空着下发会被拒(「请至少维护一个条件字段」)。
224
+ - `singleType`: 0=多选, 1=单选。值字段必传,条件字段可省(省了沿用现有的)。条件列在平台上**本身是必填的**,空着下发会被拒(「请至少维护一个条件字段」)。自定义浏览框列默认 0。
225
+ - **自定义浏览框列**用 `"browser":"<浏览框名>"` 指名即可(CLI 查回富对象再发),详见上面「自定义浏览框列」一节。写 `browserType` / `configDetailDto` 这类**读回形状**会被平台拒。
198
226
  - **已有的列要带 `id`**(从 `matrix config` 拿);不带 `id` 的会被当成新列去 `addField` 取号,**等于多建一列**。不带 id 但与现有列重名时 CLI 会告警。
199
227
  - **列 id 必须属于该矩阵**。传了别的矩阵的列 id,平台只回一句「系统内部错误」(NPE),CLI 会抢先报错并点名是哪一列。
200
228
  - ⚠ **保存是「按 id 合并」,不是整表替换**:没传的列**不会**被删(删列要走 `--value-del`)。所以「加一列」只传那一列就够了,不必把现有列全列一遍。
@@ -220,16 +220,34 @@ e10-cli workflow node sign <wf> <node> --select "退回,加签" # 指定操
220
220
 
221
221
  > 「退回时意见必填」= `--select 退回`(如:上级审核节点退回时要求填写意见)。操作类型以该节点可选范围为准(不同节点类型可操作类型不同)。
222
222
 
223
- ### 节点提交校验(智能审批规则,字段 vs 字段)
223
+ ### 节点提交校验
224
224
 
225
225
  ```bash
226
226
  e10-cli workflow node validate <workflowId> <nodeId> --view # 查看校验状态
227
227
  e10-cli workflow node validate <wf> <node> --name "一致性校验" \
228
228
  --rule "行程明细.行程开始时间 等于 出差开始日期" # 设置校验:行程开始时间=出差开始日期
229
+ e10-cli workflow node validate <wf> <node> --name "报销人校验" --rule "报销人 不为空" \
230
+ --pass-tip "报销人已填写" --fail-tip "请选择报销人" --on-fail 禁止提交
231
+ e10-cli workflow node validate <wf> <node> --name "多条件组合" \
232
+ --rules-json @node-check.json --on-fail 仅做提醒
229
233
  e10-cli workflow node validate <wf> <node> --disable # 关闭校验
230
234
  ```
231
235
 
232
- > **规则语法**:`--rule "主题字段 操作 值字段"`。主题字段用「**明细表名.字段名**」可定位明细字段,操作支持 等于/不等于/大于/大于等于/小于/小于等于,值字段为比较引用的另一字段(字段 vs 字段,非字面值)。重复执行是**更新**同一条规则;对已配置节点会复用原 conformanceId。校验不通过默认**阻止提交**(FORBID_SUBMIT)。
236
+ `--rule` 支持字段对字段、字段对常量及 `为空`/`不为空`;明细字段可加 `:任一`/`:所有`。同一规则内多条 `--rule` 为 AND;同名重新执行仅替换同名规则,其他规则保留。节点多规则关系用 `--relation AND|OR`,不合规处理用 `--on-fail 禁止提交|仅做提醒`(平台码值分别为 1、2)。`--pass-tip`/`--fail-tip` 设置每条规则的合规/不合规提示语,可用普通文字或平台字段标签、字段值占位符。`--pass-popup on|off`/`--fail-popup on|off` 控制节点级结果显示。用 `--view` 回读。
237
+
238
+ 组合条件使用 `--rules-json '<JSON>'` 或 `--rules-json @node-check.json`;组含 `relation`(AND/OR)和 `rules`,叶子含 `source`(form/system)、`field`、`op`、`value`,明细可加 `detail`(任一/所有),数值上限可加 `upperOp`、`upperValue`:
239
+
240
+ ```json
241
+ {"relation":"AND","rules":[
242
+ {"field":"费用明细.发票金额","detail":"任一","op":"大于","value":1,"upperOp":"小于等于","upperValue":100},
243
+ {"relation":"OR","rules":[
244
+ {"source":"system","field":"发起人分部","op":"属于","value":"泛微北京"},
245
+ {"source":"system","field":"发起人","op":"属于","value":"卢顾萱"}
246
+ ]}
247
+ ]}
248
+ ```
249
+
250
+ 组织或人员重名时,`value` 使用浏览器返回的 `{ "id": "...", "content": "..." }` 指定对象。按解析条件、保存规则和提示语、保存不合规处理、启用节点校验的顺序执行。
233
251
 
234
252
  **表单相关人员**(`--type form`)从指定表单的 Employee 字段动态获取审批人,支持筛选条件:
235
253