weaver-e10-builder 1.5.7 → 1.5.10

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 (196) hide show
  1. package/dist/commands/app.d.ts.map +1 -1
  2. package/dist/commands/app.js +259 -0
  3. package/dist/commands/app.js.map +1 -1
  4. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  5. package/dist/commands/form-add-detail-table.js +13 -2
  6. package/dist/commands/form-add-detail-table.js.map +1 -1
  7. package/dist/commands/form-button.d.ts.map +1 -1
  8. package/dist/commands/form-button.js +6 -4
  9. package/dist/commands/form-button.js.map +1 -1
  10. package/dist/commands/form-formula-linkage.d.ts.map +1 -1
  11. package/dist/commands/form-formula-linkage.js +4 -4
  12. package/dist/commands/form-formula-linkage.js.map +1 -1
  13. package/dist/commands/form-list-filter.d.ts +3 -0
  14. package/dist/commands/form-list-filter.d.ts.map +1 -1
  15. package/dist/commands/form-list-filter.js +88 -24
  16. package/dist/commands/form-list-filter.js.map +1 -1
  17. package/dist/commands/form-list-permission.d.ts.map +1 -1
  18. package/dist/commands/form-list-permission.js +2 -9
  19. package/dist/commands/form-list-permission.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-permission.d.ts.map +1 -1
  38. package/dist/commands/form-permission.js +378 -0
  39. package/dist/commands/form-permission.js.map +1 -1
  40. package/dist/commands/form-view.d.ts.map +1 -1
  41. package/dist/commands/form-view.js +31 -4
  42. package/dist/commands/form-view.js.map +1 -1
  43. package/dist/commands/matrix.d.ts.map +1 -1
  44. package/dist/commands/matrix.js +80 -42
  45. package/dist/commands/matrix.js.map +1 -1
  46. package/dist/commands/menu.d.ts +2 -2
  47. package/dist/commands/menu.d.ts.map +1 -1
  48. package/dist/commands/menu.js +46 -13
  49. package/dist/commands/menu.js.map +1 -1
  50. package/dist/commands/org.d.ts.map +1 -1
  51. package/dist/commands/org.js +61 -0
  52. package/dist/commands/org.js.map +1 -1
  53. package/dist/commands/role.d.ts.map +1 -1
  54. package/dist/commands/role.js +69 -9
  55. package/dist/commands/role.js.map +1 -1
  56. package/dist/commands/wf-form.d.ts.map +1 -1
  57. package/dist/commands/wf-form.js +5 -5
  58. package/dist/commands/wf-form.js.map +1 -1
  59. package/dist/index.js +2 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -1
  62. package/dist/services/actionflow/calendar_mapper.js +15 -10
  63. package/dist/services/actionflow/calendar_mapper.js.map +1 -1
  64. package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -1
  65. package/dist/services/actionflow/components/custom_set_form.js +9 -7
  66. package/dist/services/actionflow/components/custom_set_form.js.map +1 -1
  67. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  68. package/dist/services/actionflow/components/index.js +2 -1
  69. package/dist/services/actionflow/components/index.js.map +1 -1
  70. package/dist/services/actionflow/components/inner_mq_listener.d.ts +6 -0
  71. package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -1
  72. package/dist/services/actionflow/components/inner_mq_listener.js +50 -2
  73. package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -1
  74. package/dist/services/actionflow/components/meeting_create.js +1 -1
  75. package/dist/services/actionflow/components/meeting_create.js.map +1 -1
  76. package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
  77. package/dist/services/actionflow/components/multiple_execution.js +20 -19
  78. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  79. package/dist/services/actionflow/components/output.d.ts.map +1 -1
  80. package/dist/services/actionflow/components/output.js +3 -10
  81. package/dist/services/actionflow/components/output.js.map +1 -1
  82. package/dist/services/actionflow/components/schedule_create.js +2 -2
  83. package/dist/services/actionflow/components/schedule_create.js.map +1 -1
  84. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  85. package/dist/services/actionflow/components/workflow_actions.js +33 -16
  86. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  87. package/dist/services/actionflow/context_preflight.d.ts +3 -3
  88. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  89. package/dist/services/actionflow/context_preflight.js +85 -27
  90. package/dist/services/actionflow/context_preflight.js.map +1 -1
  91. package/dist/services/actionflow/context_provider.d.ts +7 -0
  92. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  93. package/dist/services/actionflow/context_provider.js +13 -1
  94. package/dist/services/actionflow/context_provider.js.map +1 -1
  95. package/dist/services/actionflow/custom_trigger_context.d.ts.map +1 -1
  96. package/dist/services/actionflow/custom_trigger_context.js +1 -0
  97. package/dist/services/actionflow/custom_trigger_context.js.map +1 -1
  98. package/dist/services/actionflow/formula_service.d.ts +15 -0
  99. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  100. package/dist/services/actionflow/formula_service.js +413 -64
  101. package/dist/services/actionflow/formula_service.js.map +1 -1
  102. package/dist/services/actionflow/machine_key.d.ts +13 -0
  103. package/dist/services/actionflow/machine_key.d.ts.map +1 -0
  104. package/dist/services/actionflow/machine_key.js +62 -0
  105. package/dist/services/actionflow/machine_key.js.map +1 -0
  106. package/dist/services/actionflow/param_group_dto.d.ts.map +1 -1
  107. package/dist/services/actionflow/param_group_dto.js +31 -8
  108. package/dist/services/actionflow/param_group_dto.js.map +1 -1
  109. package/dist/services/actionflow/param_type.d.ts +14 -0
  110. package/dist/services/actionflow/param_type.d.ts.map +1 -0
  111. package/dist/services/actionflow/param_type.js +69 -0
  112. package/dist/services/actionflow/param_type.js.map +1 -0
  113. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  114. package/dist/services/actionflow/preflight_service.js +68 -44
  115. package/dist/services/actionflow/preflight_service.js.map +1 -1
  116. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  117. package/dist/services/actionflow/workflow_compiler.js +65 -29
  118. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  119. package/dist/services/app-publish.d.ts +227 -0
  120. package/dist/services/app-publish.d.ts.map +1 -0
  121. package/dist/services/app-publish.js +403 -0
  122. package/dist/services/app-publish.js.map +1 -0
  123. package/dist/services/form-button-position.d.ts.map +1 -1
  124. package/dist/services/form-button-position.js +7 -1
  125. package/dist/services/form-button-position.js.map +1 -1
  126. package/dist/services/form-field-drop.d.ts.map +1 -1
  127. package/dist/services/form-field-drop.js +7 -0
  128. package/dist/services/form-field-drop.js.map +1 -1
  129. package/dist/services/form-formula-linkage.d.ts +24 -3
  130. package/dist/services/form-formula-linkage.d.ts.map +1 -1
  131. package/dist/services/form-formula-linkage.js +24 -5
  132. package/dist/services/form-formula-linkage.js.map +1 -1
  133. package/dist/services/form-list-search-group.d.ts +89 -0
  134. package/dist/services/form-list-search-group.d.ts.map +1 -0
  135. package/dist/services/form-list-search-group.js +260 -0
  136. package/dist/services/form-list-search-group.js.map +1 -0
  137. package/dist/services/form-list-search.d.ts +110 -0
  138. package/dist/services/form-list-search.d.ts.map +1 -0
  139. package/dist/services/form-list-search.js +231 -0
  140. package/dist/services/form-list-search.js.map +1 -0
  141. package/dist/services/form-list-stats.d.ts +21 -1
  142. package/dist/services/form-list-stats.d.ts.map +1 -1
  143. package/dist/services/form-list-stats.js +86 -12
  144. package/dist/services/form-list-stats.js.map +1 -1
  145. package/dist/services/form-message.d.ts +273 -0
  146. package/dist/services/form-message.d.ts.map +1 -0
  147. package/dist/services/form-message.js +575 -0
  148. package/dist/services/form-message.js.map +1 -0
  149. package/dist/services/form-permission-archive.d.ts +113 -0
  150. package/dist/services/form-permission-archive.d.ts.map +1 -0
  151. package/dist/services/form-permission-archive.js +359 -0
  152. package/dist/services/form-permission-archive.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/menu-catalog.d.ts +13 -0
  165. package/dist/services/menu-catalog.d.ts.map +1 -1
  166. package/dist/services/menu-catalog.js +24 -0
  167. package/dist/services/menu-catalog.js.map +1 -1
  168. package/dist/services/org-browser.d.ts +60 -0
  169. package/dist/services/org-browser.d.ts.map +1 -0
  170. package/dist/services/org-browser.js +62 -0
  171. package/dist/services/org-browser.js.map +1 -0
  172. package/dist/services/quick-date-range.d.ts +22 -0
  173. package/dist/services/quick-date-range.d.ts.map +1 -0
  174. package/dist/services/quick-date-range.js +134 -0
  175. package/dist/services/quick-date-range.js.map +1 -0
  176. package/dist/services/role-member.d.ts +73 -2
  177. package/dist/services/role-member.d.ts.map +1 -1
  178. package/dist/services/role-member.js +141 -9
  179. package/dist/services/role-member.js.map +1 -1
  180. package/package.json +1 -1
  181. package/skill-docs/SKILL.md +281 -278
  182. package/skill-docs/_catalog.md +5 -1
  183. package/skill-docs/actionflows/SKILL.md +3 -1
  184. package/skill-docs/actionflows/references/components/logic/Output.md +1 -1
  185. package/skill-docs/actionflows/references/components/message/InnerMQSend.md +6 -0
  186. package/skill-docs/actionflows/references/dynamic_capability_matrix.md +3 -3
  187. package/skill-docs/references/app/guide-app-publish.md +92 -0
  188. package/skill-docs/references/common/guide-plan-template.md +148 -252
  189. package/skill-docs/references/common/map.md +2 -1
  190. package/skill-docs/references/common/ref-cli-commands.md +32 -11
  191. package/skill-docs/references/form/guide-form-archive-permission.md +122 -0
  192. package/skill-docs/references/form/guide-form-message.md +57 -0
  193. package/skill-docs/references/form/guide-form-view.md +7 -2
  194. package/skill-docs/references/form/guide-formula-linkage.md +1 -1
  195. package/skill-docs/references/form/guide-list-stats.md +55 -2
  196. package/skill-docs/references/hrm/guide-matrix.md +30 -2
@@ -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>` | 列出应用下的所有表单 |
@@ -69,6 +76,7 @@
69
76
  | `e10-cli form delete <objId> <appId>` | 删除**整个表单**(不是字段;删字段用上面的 delete-field) |
70
77
  | `e10-cli form permission data add <objId> <appId> --org-type <类型> [--org-id <id>] --rights <view/edit/delete...> [--file-rights <view/download...>]` | **表单数据权限**,`1/view=查看`、`2/edit=编辑`、`3/delete=删除`,可任意组合;附件 `401/view=查看`、`402/download=下载`。固定写入 `obj_data_admin` 并按新增权限 ID 回读。授权对象支持 all/role/department/company/employee/group/post;all 的 orgId 自动为 0 |
71
78
  | `e10-cli form permission imp-exp <list\|add> <objId> <appId> ...` | **导入导出权限**(独立分类 `data_imp_exp`,⚠ 勿用 `data add` 加——共享权限只有 查看/编辑/删除 三种,导出/导入不在其中)。`list` 查看;`add --org-type <类型> [--org-id] --rights <export/import/delete-import...> [--update-import] [--export-details] [--export-attachment] [--export-field-range listShowField|all]`。`export=8`、`import=9`、`delete-import=93`(93 须与 import 同选,自动带更新导入);添加后按权限 ID 回读 `impRightList` 校验。删除同 `permission remove --right-id` |
79
+ | `e10-cli form permission archive <list\|add\|remove\|card> <objId> <appId> --workflow <workflowId>` | **流程归档权限**(归档后数据对谁可见/可改/可删,**按流程各一套**,与共享权限不同)。`add --target <general/creator/field/matrix>`:`general` 通用对象配 `--org-type`+`--org-id`;`creator` 创建人相关配 `--creator-related 0~7`;`field` 字段相关配 `--field <字段id或名>`(`--sub-form-id` 支持明细字段,未收录的字段类型需 `--org-type field_xxx` 显式指定);`matrix` 矩阵相关配 `--matrix`(真矩阵)或 `--eb-form`(e-Builder 表单)+ `--matrix-value`。权限码 `5/view` 归档查看、`6/edit` 归档编辑、`7/delete` 归档删除;归档附件另算 `501/view`、`502/download`、`503/edit`(**不是**共享权限的 401/402)。保存后按 ID 回读逐项核对;`card <workflowId> <appId> [--set 0\|1]` 读写归档卡片开关。详见 `form/guide-form-archive-permission.md` |
72
80
  | `e10-cli form permission <list\|add\|remove\|rebuild> <objId> <appId>` | 权限通用管理及兼容入口。新建权限与数据权限分开;旧 `add --right-type` 保留兼容。`list` 查看全部分类;`remove --right-id <id[,id...]>` 删除一条或多条权限;添加后提示 `isShowRebuild=2` 时执行 `rebuild` |
73
81
  | `e10-cli form list-view <objId> <appId>` | 查看台账/数据列表(获取 viewId 用于菜单配置) |
74
82
  | `e10-cli form list-columns <objId> <appId> <listId> [--add <fieldId...>] [--remove <fieldId...>] [--set @columns.json] [--terminal pc/mobile] [--pc-only]` | 查看/批量设置台账显示列。增量追加、移除或整组指定顺序/列宽/格式;整组模式与增删互斥。支持主表和明细子字段,保留已有列未指定属性、事件及数据主键;一次保存并回读核对目标列和另一终端。详见 `references/form/guide-list-columns.md` |
@@ -85,21 +93,28 @@
85
93
  | `e10-cli form add-physical-field <objId> <appId> <formTableId> <字段名> <类型> [标题]` | 往**已有的附属物理表**里加字段。机制是 `saveFormFieldNew` + jsonObj 里的 `formTableId`(**不是**批量端点)。选项与 `form add-field` 同名同义,**两者共用同一份字段构造器**。⚠ **不碰布局** —— 字段不会自动进表单布局。每次写完**回读确认**(平台对形状不认的字段会回 200 却静默不落库) |
86
94
  | `e10-cli form rename-physical-table <objId> <appId> <formTableId> --name <新名> --table-name <原表名>` | 改物理表**显示名**(同一个 `saveFormTable` 端点,带 `formTable.id` 即改名)。`--table-name` 要**原样回传** |
87
95
  | `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` 单取元数据。**自动保留移动端配置** |
96
+ | `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
97
  | `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` |
98
+ | `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
99
  | `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(明文条件树,非独立接口)。**自动保留移动端配置** |
100
+ | `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
101
  | `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
102
  | `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
103
  | `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
104
  | `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 留空由平台运行时生成 |
105
+ | `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
106
  | `e10-cli form nlist apply <objId> <appId> <listId> <template>` | 配置**列表式视图**(台账)的显示列:模板是二维数组(行 → 列),列项可绑表单字段(`fieldId`)或做**自定义文本**列(不给 `fieldId`、给 `html`,里面用 `{{字段名}}` 插入表单字段)。自动读移动端槽位一并写入。`show` 查看当前配置。⚠ 仅对列表式(NList)生效,表格式用 `form table-view`。详见 `form/guide-list-custom-text.md` |
99
107
  | `e10-cli form view list <objId> <appId> [--with-comps]` | 列出表单全部视图。`--with-comps` 额外拉每个视图布局 comps 数、标出空视图(NList 数据视图会显示「读取失败」,正常) |
100
- | `e10-cli form view rename <objId> <appId> <viewId> <新名称>` | 修改已有默认台账(nListView)的名称,保留原视图 ID 和配置,并在保存后回读确认。需求名称与默认名称不一致时统一用此命令,不新建重复视图 |
108
+ | `e10-cli form view rename <objId> <appId> <viewId> <新名称>` | 修改视图名称并回读。**表单视图与台账各走一条接口**(台账走 `viewlist/buttonEvent` 的编辑动作,其余视图走 `layout/rename`),命令按类型自动选。保留原视图 ID 和配置。需求名称与默认名称不一致时统一用此命令,不新建重复视图 |
109
+ | `e10-cli form view delete <objId> <appId> <viewId>` | 删除视图(表单视图 / 台账 / 看板等,按类型自动选接口)。⚠ **不可逆、无回收站**。先回读定位目标,删完**再回读确认确实没了**才算成功 |
101
110
  | `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
111
  | `e10-cli form view populate <objId> <appId> <viewId>` | 把已有字段按布局类型填入 formView。视图为空则整份填;**视图已有字段时只补缺**——只补视图里还没有的字段,已有组件的排版与属性一个不动(重跑幂等)。表单新增字段后要让它出现在某个视图里,也走这条 |
112
+ | `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` |
113
+ | `e10-cli form message get <appId> <triggerId> [--obj-id <objId>]` | 查看单条消息提醒,含**推送渠道**与提醒对象。渠道不在列表与详情返回里,命令额外读一次补上 |
114
+ | `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(同名多条报错并列候选) |
115
+ | `e10-cli form message edit <appId> <triggerId> [...]` | 修改消息提醒(读→合并→回写,**没传的项保持原值**)。`--rule` 传了整份替换提醒对象、`--clear-rules` 清空、`--enable`/`--disable` 改启停。保存后回读确认 |
116
+ | `e10-cli form message delete <appId> <triggerId> [--obj-id <objId>]` | 删除消息提醒(不可逆) |
117
+ | `e10-cli form message enable \| disable <appId> <triggerId> [--obj-id <objId>]` | 启用 / 停用消息提醒。停用后不再推,配置保留 |
103
118
  | `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
119
  | `e10-cli form layout read <objId> [--view-id <id>]` | 读表单布局结构(comps 坐标/只读)。不传 `--view-id` 读默认布局,传则读指定视图 |
105
120
  | `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 +183,12 @@
168
183
  | `e10-cli role list` | 列出所有角色(树形结构,含层级关系) |
169
184
  | `e10-cli role create <name>` | 创建角色,`--parent <id>` 指定父角色,`--code` 编码,`--remark` 备注 |
170
185
  | `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>` | 列出角色成员(人员 / 部门 / 分部 / 岗位 / 渠道,含成员级别与分权范围) |
186
+ | `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 是静默丢弃的,不核对就会"报成功但少加了一个")|
187
+ | `e10-cli role member-list <roleId>` | 列出角色成员(人员 / 部门 / 分部 / 岗位 / 群组,含成员级别与分权范围) |
173
188
  | `e10-cli org department create <name> [--code <编号>] [--parent <父部门id>] [--subcompany <分部id>]` | 新建部门。**两步**:`organization/getForm?flag=department` 取保存模板(含平台**现生成**的 targetId)→ `organization/saveForm` 落组织树(扁平报文,背后的表单记录平台会自己补)。`--parent` 不传即顶层部门,挂在当前用户的分部下(分部自动解析,可用 `--subcompany` 覆盖)。⚠ 模板里 `parent` 是数组、`subcompany` 是对象数组,命令内部转成 id 字符串 —— **别拿模板直接发** |
189
+ | `e10-cli org department list [--name <关键词>] [--page <n>] [--page-size <n>]` | 列出部门(不传 `--name` 就是全部),带分页与总数。**用来拿 id 给别的命令当入参**(例如 `role add-member --id`)。走 `browser/data/department` —— ⚠ **这个端点的本相是「列表」不是「搜索」**:空搜索即返回全部并带 `current` / `total` 分页,`--name` 只是在它上面加一层名字过滤。输出第二列是全路径(如「营销部 / 前端逻辑编排 / 维森集团」),层级直接看得到 |
174
190
  | `e10-cli org subcompany create <name> --parent <上级分部id> [--code <编号>]` | 新建**分部**(机构;部门挂在它下面)。与建部门**同一套接口、同一个报文**,只差 `getForm` 的 `flag` 与报文的 `type`。⚠ **必须给 `--parent`**(分部总得挂在某个分部下)。⚠ 「上级部门」与「所属分部」**至少填一个**,两者各填其中一半:建**部门**填「所属分部」、建**分部**填「上级分部」 |
191
+ | `e10-cli org subcompany list [--name <关键词>] [--page <n>] [--page-size <n>]` | 列出**分部**(不传 `--name` 就是全部)。与 `org department list` 同一套(走 `browser/data/subcompany`)。**建分部要的「上级分部 id」、角色成员要的分部 id 都从这里拿** —— 此前没有任何读分部的入口,只能去页面上抄 |
175
192
  | `e10-cli org subcompany delete <id> [--parent <上级分部id>]` | 删除分部(平台同一个 `department/delete` 端点)。删除前会从组织树读该节点的 `count` 做**预警**(下面还有人时平台不允许删),但**不阻断** —— 最终以平台为准。⚠ 与部门删除一样是**软删** |
176
193
  | `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
194
  | `e10-cli org department delete <id> [--parent <父部门id>] [--subcompany <机构id>]` | 删除部门。`--parent` 是该部门的**父**(顶层部门的父就是机构 id),不传按当前机构的上下文解析。⚠ 删除是**软删**(`isDelete: true`),删完用 `getForm?id=` 仍能读出来 —— 判存在与否要看 `isDelete` 字段,别看接口有没有返回 |
@@ -344,9 +361,10 @@
344
361
  |------|------|
345
362
  | `e10-cli menu list <appId>` | 列出当前Ebuilder应用下的菜单。**递归展开嵌套菜单**(如「设置 → 个人设置 → 个人菜单设置」),列表即全量 —— 在这里没找到就是真没有,不必再怀疑被折叠 |
346
363
  | `e10-cli menu rename <appId> <菜单ID或名称> <新名>` | 重命名已有菜单(含嵌套菜单)。名称在应用内重复时必须改用 ID,命令会列出候选让你选。平台系统菜单(回收站/设置等)不能改 |
347
- | `e10-cli menu add <name> <path> <appId>` | 将页面加入左侧导航(LINK 类型,URL path)。ecode 页面 path 如 `/sp/custom/ecode/project-list`。**表单台账/流程发起菜单用下面两条专用命令**(VIEWPORT/LAYOUT 类型,非 URL)。**建完会回读确认**并报出菜单 ID;回读不到就报错退出,不谎报成功 |
348
- | `e10-cli menu add-table <appId> <objId> [name]` | 给表单加**台账菜单**(VIEWPORT,指向数据列表页)。`form create --menu` 才自动加(默认不加),此处用于事后补加。**建完回读确认** |
349
- | `e10-cli menu add-start <appId> <formObjId> [name]` | 给流程绑定的表单加**发起菜单**(LAYOUT,指向表单新建页,点开触发流程)。`workflow create --menu` 才自动加(默认不加)。**建完回读确认** |
364
+ | `e10-cli menu add <name> <path> <appId> [--parent <父菜单ID或名称>]` | 将页面加入左侧导航(LINK 类型,URL path)。ecode 页面 path 如 `/sp/custom/ecode/project-list`。**表单台账/流程发起菜单用下面两条专用命令**(VIEWPORT/LAYOUT 类型,非 URL)。`--parent` 挂到父菜单下做子菜单(缺省 `0`=顶级)。**建完会回读确认**并报出菜单 ID;回读不到就报错退出,不谎报成功 |
365
+ | `e10-cli menu add-table <appId> <objId> [name] [--parent <父菜单ID或名称>]` | 给表单加**台账菜单**(VIEWPORT,指向数据列表页)。`form create --menu` 才自动加(默认不加),此处用于事后补加。**`--parent` 挂到某个父菜单下做子菜单**(缺省 `0`=顶级;既收菜单 ID 也收名称,同名多条会报错并列 ID)。**建完回读确认**,并**核对层级** —— 只确认菜单存在不够,`pid` 没生效时菜单照样建出来、只是跑到顶级 |
366
+ | `e10-cli menu add-start <appId> <formObjId> [name] [--parent <父菜单ID或名称>]` | 给流程绑定的表单加**发起菜单**(LAYOUT,指向表单新建页,点开触发流程)。`workflow create --menu` 才自动加(默认不加)。`--parent` 同上(子菜单)。**建完回读确认**并核对层级 |
367
+ | ↳ 搭「父菜单 + 子菜单」 | 设计器里的二级菜单 = 先建父菜单(`menu add` 建 LINK,或已有菜单),再把台账/发起菜单用 `--parent <父菜单>` 挂上去。父菜单 ID 从 `menu list` 拿(输出就是完整菜单树) |
350
368
  | `e10-cli menu permission list <appId> <menuId>` | 列菜单可见范围授权(**默认所有人**;无输出=全可见) |
351
369
  | `e10-cli menu permission add <appId> <menuId> <目标> --type role\|dept\|user\|all` | 给菜单授权。默认语义:**加角色/人/部门后自动撤「所有人」→ 只有授权对象可见**;`--keep-all` 保留所有人;`--type all` 恢复"所有人可见" |
352
370
  | `e10-cli menu permission remove <appId> <menuId> <目标> --type role\|dept\|user\|all` | 撤销菜单授权(撤销所有人用 `--type all`) |
@@ -471,7 +489,7 @@ e10-cli report py preagg --report-id <id> [--app-id <id>]
471
489
  |------|------|
472
490
  | `e10-cli matrix list [--name <关键词>] [--enable-status 0\|1] [--org-id <id>]` | 查询矩阵列表(**含停用矩阵**,带状态;`--out` 写 JSON 文件) |
473
491
  | `e10-cli matrix create <name> [选项]` | 新建矩阵(**新建即为启用**,要停用再跑 `matrix disable`)。所属机构的字段名由**分权状态**决定,CLI 自动判断并在缺省时用当前机构兜底,分权租户无需手写机构 |
474
- | `e10-cli matrix config <id>` / `config-edit <id>` | 查看 / 编辑矩阵配置(条件字段 + 值字段)。**`config-edit` 的 `--condition` 可省略**,省略则沿用现有条件列(部门/分部矩阵的条件列是平台建矩阵时自动给的,不该手写;已有列要带 `id`,不带会被当成新列去取号);保存后按列 id 回读比对 |
492
+ | `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` 反查重发(这个列读写形状不同,写回读形状会被平台拒) |
475
493
  | `e10-cli matrix enable <id>` / `disable <id>` | 启用 / 停用(停用后数据只读) |
476
494
  | `e10-cli matrix update <id>` / `delete <ids...>` | 更新基本信息(名称/描述/同步方式)/ 删除(级联删配置、数据、维护者) |
477
495
  | `e10-cli matrix data` | 矩阵数据维护(映射行)。`data save` 简写为 `[{rowId?, "<列configId>": ["<实体ID>"]}]`:**带 `rowId` 改那一行、不带为新增**(行 id 用 `data list` 拿;同步型矩阵的行 id 就是部门 id)。改行只给要改的列即可,CLI 自动补全其余列并回读比对 |
@@ -538,7 +556,10 @@ e10-cli role add-member <roleId> 张三 李四 # 人员
538
556
  e10-cli role add-member <roleId> 营销三组 --type department # 部门
539
557
  e10-cli role add-member <roleId> 总经理 --type position # 岗位
540
558
  e10-cli role add-member <roleId> 华东分部 --type subcompany # 分部
559
+ e10-cli role add-member <roleId> 项目协作群 --type channel # 群组
560
+ e10-cli role add-member <roleId> --id <id,id> --type department # 同名多条时按 ID 加
541
561
  e10-cli role member-list <roleId> # 读回成员
562
+ e10-cli org subcompany list # 查分部 id(建分部/加成员都要)
542
563
 
543
564
  # 6. 创建流程
544
565
  e10-cli workflow create <appId> <formObjId> 会议室审批
@@ -0,0 +1,122 @@
1
+ # 流程归档权限
2
+
3
+ 「流程归档权限」管的是**某个流程归档之后**,它的数据对谁可见、可改、可删。它和表单的共享权限是两套:
4
+ 共享权限按表单配一次,归档权限**按流程各配一套**(同一张表单的不同流程可以不一样),并且多一档「归档附件」权限。
5
+
6
+ ## 命令
7
+
8
+ ```bash
9
+ # 查看某个流程的归档权限
10
+ e10-cli form permission archive list <objId> <appId> --workflow <workflowId>
11
+
12
+ # 通用对象:给某个部门开「归档查看」
13
+ e10-cli form permission archive add <objId> <appId> --workflow <workflowId> \
14
+ --target general --org-type department --org-id <deptId> --rights view --file-rights view download
15
+
16
+ # 创建人相关:创建人本人及本部门可查看/编辑
17
+ e10-cli form permission archive add <objId> <appId> --workflow <workflowId> \
18
+ --target creator --creator-related 0 --rights view edit
19
+
20
+ # 字段相关:以表单里的「负责人」字段取值决定权限
21
+ e10-cli form permission archive add <objId> <appId> --workflow <workflowId> \
22
+ --target field --field 负责人 --rights view edit delete
23
+
24
+ # 矩阵相关(真矩阵)
25
+ e10-cli form permission archive add <objId> <appId> --workflow <workflowId> \
26
+ --target matrix --matrix 门店经理矩阵 --rights view
27
+
28
+ # 矩阵相关(e-Builder 表单当矩阵用)
29
+ e10-cli form permission archive add <objId> <appId> --workflow <workflowId> \
30
+ --target matrix --eb-form <表单名或id> --matrix-value 创建者 --rights view
31
+
32
+ # 删除(按 list 里的权限 ID)
33
+ e10-cli form permission archive remove <objId> <appId> --right-id <id[,id...]>
34
+
35
+ # 归档卡片开关
36
+ e10-cli form permission archive card <workflowId> <appId>
37
+ e10-cli form permission archive card <workflowId> <appId> --set 1
38
+ ```
39
+
40
+ ## 四类授权对象
41
+
42
+ 同一个端点上靠 `codeType` + `orgType` 区分四类,命令层用 `--target` 选择:
43
+
44
+ | `--target` | 类别 | `codeType` | `orgType` | 主体怎么给 |
45
+ |---|---|---|---|---|
46
+ | `general` | 通用对象 | `obj_data_admin` | `employee` / `department` / `company` / `role` / `group` / `all` … | `--org-type` + `--org-id`(`all` 自动 0) |
47
+ | `creator` | 创建人相关 | `obj_data_creator` | `creatorRelated` | `--creator-related` 0~7 |
48
+ | `field` | 字段相关 | `obj_data` | `field_<字段类型>` | `--field <字段 id 或名称>` |
49
+ | `matrix` | 矩阵相关 | `matrix` / `ebuilder_form` | 同 `codeType` | `--matrix`(真矩阵)或 `--eb-form` |
50
+
51
+ `--target` 也接受中文名(`通用对象` / `创建人相关` / `字段相关` / `矩阵相关`)。
52
+
53
+ ### 创建人相关的 0~7
54
+
55
+ `0` 本人、本部门、本分部;`1` 直接上级、本部门及所有下级部门、本分部及所有下级分部;`2` 本分部、本部门及所有上级部门、本分部及所有上级分部;
56
+ `3` 本部门、所有下级部门、所有下级分部;`4` 所有上级、所有上级部门、所有上级分部;`5` 本岗位;`6` 直接下属;`7` 上级部门。
57
+
58
+ ### 字段相关的字段类型
59
+
60
+ `--field` 既可给字段 id,也可给字段名(重名会报错,改用 id)。字段属于明细表时补 `--sub-form-id`。
61
+
62
+ `orgType` 由字段的组件类型推出,目前覆盖:
63
+
64
+ | 组件类型 | `orgType` | 回显名 |
65
+ |---|---|---|
66
+ | `Employee` | `field_employee` | 人员字段 |
67
+ | `Department` | `field_department` | 部门字段 |
68
+ | `SubCompany` | `field_company` | 分部字段 |
69
+ | `Post` | `field_post` | 岗位字段 |
70
+ | `EBuilder` | `field_ebuilder` | 关联ebuilder字段 |
71
+
72
+ 其余字段类型(人员范围选择、人力资源条件、人员组织多选等)不在自动推断表里 —— 组件类型名与 `field_*` 后缀不是一一对应,
73
+ 猜错会**静默授错对象**,所以命令会报错而不是替你选。这类请用 `--org-type field_xxx` 显式指定:
74
+
75
+ `field_employee_condition`(人员范围选择字段)、`field_employee_share_condition`(人力资源条件字段)、`field_employee_organization`(人员组织多选)。
76
+
77
+ ### 矩阵相关的「取值字段」
78
+
79
+ 取值字段决定**用矩阵里的哪一列**去匹配当前用户,必需,且取值来源分两种:
80
+
81
+ - **真矩阵**(`--matrix`):值字段自动取该矩阵的值字段配置;也可用 `--matrix-value 名称` 指定其中几个。
82
+ - **e-Builder 表单**(`--eb-form`):取值字段是**系统值**体系,不是矩阵的值字段配置。
83
+ 目前只有「创建者」可直接用名称指定;其余取值请用 `--matrix-value <id>:<名称>:<valueType>` 明写,
84
+ 或用 `--matrix-value-raw '<JSON 数组>'` 整体透传(数组元素形状以设计器实际请求为准)。
85
+
86
+ 矩阵下面的「条件」这一层暂未开放,固定为空。
87
+
88
+ ## 权限码
89
+
90
+ 归档权限 `--rights`(可组合,逗号或空格分隔,也可用编号):
91
+
92
+ | 编号 | 别名 | 含义 |
93
+ |---|---|---|
94
+ | 5 | `view` / `read` | 归档查看 |
95
+ | 6 | `edit` / `update` | 归档编辑 |
96
+ | 7 | `delete` | 归档删除 |
97
+
98
+ 归档附件权限 `--file-rights`(与上面的查看/编辑/删除**互相独立**,是另一处勾选):
99
+
100
+ | 编号 | 别名 | 含义 |
101
+ |---|---|---|
102
+ | 501 | `view` / `read` | 归档附件查看 |
103
+ | 502 | `download` | 归档附件下载 |
104
+ | 503 | `edit` | 归档附件编辑 |
105
+
106
+ > 归档附件用的是 `501/502/503`,**不是**共享权限的 `401/402/403`,两套别混。
107
+
108
+ `--file-rights` 不给就不发生成附件权限键,该行只有数据权限。
109
+
110
+ ## 幂等与回读
111
+
112
+ - 添加前先查一遍:同一个授权对象 + 同一权限组合已存在时直接跳过并报「已存在」,不会重复创建。
113
+ - 保存后按新增 ID 回读,逐项核对 `codeType` / `orgType` / `rightType` / `fileRight` / 创建人关系 / 取值字段映射;
114
+ `rightType` 与 `fileRight` 按**集合**比对(平台保留提交时的顺序,但顺序不承载语义)。
115
+ - 回读的 `orgTypeName` 会和该类别的预期名称对照(如 `field_employee` 对应「人员字段」)。对不上直接报错 ——
116
+ 那意味着授权对象写错了,不能静默放过。
117
+ - 字段相关这类计算型授权,平台会回 `isShowRebuild=2`,此时按提示执行
118
+ `e10-cli form permission rebuild <objId> <appId> <权限ID>`。
119
+
120
+ ## 归档卡片
121
+
122
+ 每个流程还有一个「归档卡片」开关(`0` 关 / `1` 开)。不带 `--set` 时只读;带 `--set` 时先写再回读,以回读值为准。
@@ -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`)。所以「加一列」只传那一列就够了,不必把现有列全列一遍。