weaver-e10-builder 1.1.2 → 1.1.5

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 (191) hide show
  1. package/dist/commands/auth.d.ts.map +1 -1
  2. package/dist/commands/auth.js +2 -0
  3. package/dist/commands/auth.js.map +1 -1
  4. package/dist/commands/check.d.ts.map +1 -1
  5. package/dist/commands/check.js +48 -15
  6. package/dist/commands/check.js.map +1 -1
  7. package/dist/commands/designer-common.d.ts +56 -0
  8. package/dist/commands/designer-common.d.ts.map +1 -0
  9. package/dist/commands/designer-common.js +165 -0
  10. package/dist/commands/designer-common.js.map +1 -0
  11. package/dist/commands/designer-setters.d.ts +13 -0
  12. package/dist/commands/designer-setters.d.ts.map +1 -0
  13. package/dist/commands/designer-setters.js +593 -0
  14. package/dist/commands/designer-setters.js.map +1 -0
  15. package/dist/commands/designer.d.ts +17 -0
  16. package/dist/commands/designer.d.ts.map +1 -0
  17. package/dist/commands/designer.js +448 -0
  18. package/dist/commands/designer.js.map +1 -0
  19. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  20. package/dist/commands/form-add-detail-table.js +59 -0
  21. package/dist/commands/form-add-detail-table.js.map +1 -1
  22. package/dist/commands/form-association.d.ts.map +1 -1
  23. package/dist/commands/form-association.js +3 -2
  24. package/dist/commands/form-association.js.map +1 -1
  25. package/dist/commands/form-button.d.ts.map +1 -1
  26. package/dist/commands/form-button.js +86 -1
  27. package/dist/commands/form-button.js.map +1 -1
  28. package/dist/commands/form-data.d.ts.map +1 -1
  29. package/dist/commands/form-data.js +13 -1
  30. package/dist/commands/form-data.js.map +1 -1
  31. package/dist/commands/form-ebuilder-scope.js +3 -3
  32. package/dist/commands/form-ebuilder-scope.js.map +1 -1
  33. package/dist/commands/form-formula.js +4 -4
  34. package/dist/commands/form-formula.js.map +1 -1
  35. package/dist/commands/form-list-click.d.ts.map +1 -1
  36. package/dist/commands/form-list-click.js +30 -2
  37. package/dist/commands/form-list-click.js.map +1 -1
  38. package/dist/commands/form-list-filter.js +1 -1
  39. package/dist/commands/form-list-filter.js.map +1 -1
  40. package/dist/commands/form-list-hierarchy.d.ts +3 -0
  41. package/dist/commands/form-list-hierarchy.d.ts.map +1 -0
  42. package/dist/commands/form-list-hierarchy.js +133 -0
  43. package/dist/commands/form-list-hierarchy.js.map +1 -0
  44. package/dist/commands/form-list-permission.d.ts.map +1 -1
  45. package/dist/commands/form-list-permission.js +17 -3
  46. package/dist/commands/form-list-permission.js.map +1 -1
  47. package/dist/commands/form-list.d.ts.map +1 -1
  48. package/dist/commands/form-list.js +2 -0
  49. package/dist/commands/form-list.js.map +1 -1
  50. package/dist/commands/form-nlist.d.ts.map +1 -1
  51. package/dist/commands/form-nlist.js +47 -15
  52. package/dist/commands/form-nlist.js.map +1 -1
  53. package/dist/commands/form-option-template.d.ts +3 -0
  54. package/dist/commands/form-option-template.d.ts.map +1 -0
  55. package/dist/commands/form-option-template.js +291 -0
  56. package/dist/commands/form-option-template.js.map +1 -0
  57. package/dist/commands/form-permission.d.ts.map +1 -1
  58. package/dist/commands/form-permission.js +214 -2
  59. package/dist/commands/form-permission.js.map +1 -1
  60. package/dist/commands/form-view.d.ts.map +1 -1
  61. package/dist/commands/form-view.js +23 -1
  62. package/dist/commands/form-view.js.map +1 -1
  63. package/dist/commands/form.d.ts.map +1 -1
  64. package/dist/commands/form.js +259 -59
  65. package/dist/commands/form.js.map +1 -1
  66. package/dist/commands/icon.d.ts.map +1 -1
  67. package/dist/commands/icon.js +9 -13
  68. package/dist/commands/icon.js.map +1 -1
  69. package/dist/commands/menu-permission.d.ts.map +1 -1
  70. package/dist/commands/menu-permission.js +19 -12
  71. package/dist/commands/menu-permission.js.map +1 -1
  72. package/dist/commands/page.d.ts +14 -0
  73. package/dist/commands/page.d.ts.map +1 -0
  74. package/dist/commands/page.js +175 -0
  75. package/dist/commands/page.js.map +1 -0
  76. package/dist/commands/update.d.ts.map +1 -1
  77. package/dist/commands/update.js +29 -21
  78. package/dist/commands/update.js.map +1 -1
  79. package/dist/commands/wf-form.js +1 -1
  80. package/dist/commands/wf-form.js.map +1 -1
  81. package/dist/commands/workflow-condition.js +9 -8
  82. package/dist/commands/workflow-condition.js.map +1 -1
  83. package/dist/commands/workflow-node-overtime.d.ts.map +1 -1
  84. package/dist/commands/workflow-node-overtime.js +16 -8
  85. package/dist/commands/workflow-node-overtime.js.map +1 -1
  86. package/dist/commands/workflow-node.d.ts.map +1 -1
  87. package/dist/commands/workflow-node.js +35 -5
  88. package/dist/commands/workflow-node.js.map +1 -1
  89. package/dist/commands/workflow-numbering.d.ts.map +1 -1
  90. package/dist/commands/workflow-numbering.js +63 -30
  91. package/dist/commands/workflow-numbering.js.map +1 -1
  92. package/dist/commands/workflow-operator-sign.d.ts.map +1 -1
  93. package/dist/commands/workflow-operator-sign.js +2 -1
  94. package/dist/commands/workflow-operator-sign.js.map +1 -1
  95. package/dist/commands/workflow.d.ts.map +1 -1
  96. package/dist/commands/workflow.js +78 -38
  97. package/dist/commands/workflow.js.map +1 -1
  98. package/dist/core/client.d.ts +9 -0
  99. package/dist/core/client.d.ts.map +1 -1
  100. package/dist/core/client.js +16 -1
  101. package/dist/core/client.js.map +1 -1
  102. package/dist/index.js +6 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  105. package/dist/services/actionflow/preflight_service.js +40 -17
  106. package/dist/services/actionflow/preflight_service.js.map +1 -1
  107. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  108. package/dist/services/actionflow/workflow_compiler.js +4 -2
  109. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  110. package/dist/services/form-button-action.d.ts +17 -0
  111. package/dist/services/form-button-action.d.ts.map +1 -0
  112. package/dist/services/form-button-action.js +111 -0
  113. package/dist/services/form-button-action.js.map +1 -0
  114. package/dist/services/form-create.d.ts +15 -1
  115. package/dist/services/form-create.d.ts.map +1 -1
  116. package/dist/services/form-create.js +40 -5
  117. package/dist/services/form-create.js.map +1 -1
  118. package/dist/services/form-list-stats.d.ts.map +1 -1
  119. package/dist/services/form-list-stats.js +29 -6
  120. package/dist/services/form-list-stats.js.map +1 -1
  121. package/dist/services/form-nlist.d.ts +8 -2
  122. package/dist/services/form-nlist.d.ts.map +1 -1
  123. package/dist/services/form-nlist.js +32 -7
  124. package/dist/services/form-nlist.js.map +1 -1
  125. package/dist/services/form-sub-detail.d.ts +36 -0
  126. package/dist/services/form-sub-detail.d.ts.map +1 -0
  127. package/dist/services/form-sub-detail.js +132 -0
  128. package/dist/services/form-sub-detail.js.map +1 -0
  129. package/dist/services/form-view.d.ts +6 -0
  130. package/dist/services/form-view.d.ts.map +1 -1
  131. package/dist/services/form-view.js +24 -0
  132. package/dist/services/form-view.js.map +1 -1
  133. package/dist/services/skill-provision.d.ts +9 -2
  134. package/dist/services/skill-provision.d.ts.map +1 -1
  135. package/dist/services/skill-provision.js +26 -1
  136. package/dist/services/skill-provision.js.map +1 -1
  137. package/dist/services/update-check.d.ts +11 -4
  138. package/dist/services/update-check.d.ts.map +1 -1
  139. package/dist/services/update-check.js +77 -23
  140. package/dist/services/update-check.js.map +1 -1
  141. package/dist/services/workflow-operator.d.ts +9 -0
  142. package/dist/services/workflow-operator.d.ts.map +1 -1
  143. package/dist/services/workflow-operator.js +33 -0
  144. package/dist/services/workflow-operator.js.map +1 -1
  145. package/package.json +1 -1
  146. package/skill-docs/SKILL.md +28 -46
  147. package/skill-docs/assets/factory/chart-dimensions.json +536 -0
  148. package/skill-docs/assets/factory/example-btn-progress-collapse-configured.json +2515 -0
  149. package/skill-docs/assets/factory/example-configured-2.json +13805 -0
  150. package/skill-docs/assets/factory/example-configured.json +6735 -0
  151. package/skill-docs/assets/factory/factory-bar-stack.json +326 -0
  152. package/skill-docs/assets/factory/factory-bar.json +222 -0
  153. package/skill-docs/assets/factory/factory-bubble.json +322 -0
  154. package/skill-docs/assets/factory/factory-calendar.json +325 -0
  155. package/skill-docs/assets/factory/factory-circular.json +320 -0
  156. package/skill-docs/assets/factory/factory-collapse-panel.json +132 -0
  157. package/skill-docs/assets/factory/factory-comment.json +388 -0
  158. package/skill-docs/assets/factory/factory-count-down.json +198 -0
  159. package/skill-docs/assets/factory/factory-digital-panel.json +108 -0
  160. package/skill-docs/assets/factory/factory-eb-button.json +150 -0
  161. package/skill-docs/assets/factory/factory-fast-create.json +62 -0
  162. package/skill-docs/assets/factory/factory-gauge.json +312 -0
  163. package/skill-docs/assets/factory/factory-h-bar-stack.json +328 -0
  164. package/skill-docs/assets/factory/factory-h-bar.json +326 -0
  165. package/skill-docs/assets/factory/factory-line.json +212 -0
  166. package/skill-docs/assets/factory/factory-nav-bar.json +167 -0
  167. package/skill-docs/assets/factory/factory-nav-menu.json +144 -0
  168. package/skill-docs/assets/factory/factory-nav-panel.json +338 -0
  169. package/skill-docs/assets/factory/factory-new-tab.json +163 -0
  170. package/skill-docs/assets/factory/factory-nightingale.json +312 -0
  171. package/skill-docs/assets/factory/factory-nlist.json +112 -0
  172. package/skill-docs/assets/factory/factory-page-header.json +171 -0
  173. package/skill-docs/assets/factory/factory-picture.json +169 -0
  174. package/skill-docs/assets/factory/factory-pie.json +212 -0
  175. package/skill-docs/assets/factory/factory-progress-chart.json +162 -0
  176. package/skill-docs/assets/factory/factory-search-global.json +104 -0
  177. package/skill-docs/assets/factory/factory-slide.json +164 -0
  178. package/skill-docs/assets/factory/factory-treemap.json +322 -0
  179. package/skill-docs/assets/icons.db +0 -0
  180. package/skill-docs/references/coding/guide-page-code.md +21 -1
  181. package/skill-docs/references/coding/ref-compile-rules.md +24 -0
  182. package/skill-docs/references/common/guide-plan-template.md +219 -201
  183. package/skill-docs/references/common/ref-cli-commands.md +366 -320
  184. package/skill-docs/references/ebuilder-designer/guide-designer-components.md +110 -0
  185. package/skill-docs/references/ebuilder-designer/guide-designer-factory.md +460 -0
  186. package/skill-docs/references/ebuilder-designer/guide-designer-version.md +111 -0
  187. package/skill-docs/references/ebuilder-designer/guide-designer.md +287 -0
  188. package/skill-docs/references/form/guide-create-form.md +464 -409
  189. package/skill-docs/references/form/guide-form-button.md +82 -54
  190. package/skill-docs/references/form/guide-form-view.md +299 -284
  191. package/skill-docs/references/workflow/guide-workflow.md +59 -0
@@ -1,284 +1,299 @@
1
- # 表单视图:新建与验收
2
-
3
- 表单创建后已有默认台账;只有用户明确需要额外视图时才创建。表格视图是 `nListView` 数据列表,和普通 `formView` 是两条不同链路。
4
-
5
- ## 需求判别
6
-
7
- - “新建表单” → `form create --fields`。
8
- - “客户信息表需要一个客户信息视图”等普通列表需求 → 先查询并复用该表单默认台账;“客户信息表”和“客户信息”的名称差异不构成额外新建理由。
9
- - “在已有表单下明确新增一个额外表格视图” → `form table-view create`;命令必须同时保存显示列并回读。
10
- - “在已有表单下新增表单视图” → `form view create --type formView`,随后必须 `form view populate`;不得新建另一张表单。
11
-
12
- ## 默认台账复用
13
-
14
- 1. 用 `form list-view <objId> <appId>` 查询已有列表,确认目标属于当前表单且用途符合需求,记录实际名称和 listId。存在多个候选时核对数据范围、权限和展示配置,不仅凭名称或第一条记录选择。
15
- 2. 普通列表需求直接在该 listId 上配置显示列、筛选、排序、统计和事件;需要整组配置显示列时用 `form list-columns <objId> <appId> <listId> --set @columns.json`。`table-view ensure` 只用于空列补齐,不负责视图选择或重命名。
16
- 3. 默认保留平台生成的名称,不统一去掉末尾“表”字。用户明确要求名称对齐时应改已有视图名称并保留 ID;目前 CLI 未提供视图重命名命令,不能用新建同用途视图代替改名。表单名、视图名和菜单名分别处理。
17
- 4. 只有明确需要“我的客户”“重点客户”等额外独立视图,或不同展示类型时,才进入新增流程。已有重复视图需先核对菜单、关联页签等引用及配置,不能自动删除。
18
-
19
- 例如:已建“客户信息表”,方案中的“客户信息视图”可由其默认台账满足,plan 标记“复用默认台账”,填写实际 listId 即可。
20
-
21
- ## 命令
22
-
23
- ```bash
24
- # 查询表单下全部视图
25
- e10-cli form view list <objId> <appId>
26
-
27
- # 创建可用表格视图;默认放入全部已有字段
28
- e10-cli form table-view create <objId> <appId> "审批数据表格" --pc-only
29
-
30
- # 创建看板视图(默认 PC + FLOW 布局)
31
- e10-cli form view create <objId> <appId> "按状态看板" --type kanbanView
32
-
33
- # 新增表单视图——流式布局(FLOW)
34
- e10-cli form view create <objId> <appId> "新增-流式视图" --type formView --layout-type FLOW
35
-
36
- # 新增表单视图——表格式布局(EXCEL)
37
- e10-cli form view create <objId> <appId> "新增-EXCEL视图" --type formView --layout-type EXCEL
38
-
39
- # 第 2 步:把已有字段按目标布局类型填入新建 formView(流式/EXCEL 各自生成对应组件)
40
- e10-cli form view populate <objId> <appId> <viewId>
41
-
42
- # 创建移动端日历视图
43
- e10-cli form view create <objId> <appId> "交付日历" \
44
- --type calendarView --terminal MOBILE --layout-type FLOW
45
- ```
46
-
47
- **给已有表单加表单视图是两步闭环**(缺一不可):
48
- 1. `form view create --type formView --layout-type FLOW|EXCEL` —— 建一个**空**的 formView 实体,`--layout-type` 决定流式(FLOW)还是表格式(EXCEL)。同一张表单可同时存在多个 formView,布局类型可不同(如一张表既加流式视图又加 EXCEL 视图)。
49
- 2. `form view populate <objId> <appId> <viewId>` —— 把已有字段按目标布局类型填进去。流式视图生成流式组件、EXCEL 视图生成表格定位,**不得把 EXCEL 定位直接复制到 FLOW 视图**。
50
-
51
- `form view populate` 以原表单 `formId` 读取字段,以新视图 `viewId` 作为 `layoutMultiId` 读取目标布局,再按目标的 FLOW/EXCEL 类型重新生成字段组件并独立回读。不得把视图的 `versionId` 或 `pageLayoutId` 当成 `formId`。
52
-
53
- 看板、日历、思维导图目前只确认创建实体和视图列表回读,尚不能据此宣称设计器已有可用组件。
54
-
55
- 普通 `form view create --type` 只接受:
56
-
57
- - `formView`:详情视图
58
- - `kanbanView`:看板视图
59
- - `calendarView`:日历视图
60
- - `mindMapView`:思维导图视图
61
- - `multiView`:多维表格视图(无 layoutType/terminalType,带 `extConfig:{listVersion:5}`)。**数据维度**:缺省主表(`subFormId:""/subFormMain:false`);明细表维度用 `--detail <明细名>`(按名解析明细 subFormId)或 `--sub-form-id <明细subFormId>`(直传),传值即 `subFormId:<明细subFormId>/subFormMain:true`。明细子表名/subFormId 用 `dataset/v1/getFields` detailFields 查(真 subFormId 在 `fields[].subFormId`,非 `dt.id`)。**多维表格显示列**复用台账同一套 `saveNListConfig/getNListConfig`,直接用 `form list-columns <objId> <appId> <multiView的viewId> --add <fieldId>` 加列。
62
-
63
- `tableView`/`nListView` 不得传给普通视图命令。真实表格视图固定使用 `form table-view create`。
64
-
65
- ## 额外表格视图新建闭环
66
-
67
- ```bash
68
- # 1. 已确认需要额外独立视图,再查询目标表单和已有列表
69
- e10-cli form list <appId>
70
- e10-cli form list-view <objId> <appId>
71
-
72
- # 2. 创建 nListView、写入全部业务显示列和隐藏数据主键、独立回读
73
- e10-cli --json form table-view create <objId> <appId> "<表格视图名>" --pc-only
74
-
75
- # 3. 再次独立查询表单下列表
76
- e10-cli --json form list-view <objId> <appId>
77
- ```
78
-
79
- 命令先用 `viewType=nListView` 创建,再以新 `listId` 读取 PC 配置;业务列必须取自 `/api/ebuilder/common/ds/fields` 的完整字段对象,不能只拼字段 ID。保存时保留服务端配置和隐藏主键 `id=5`,最后回读 `tableField` 和列表实体。命令只拦截完全同名的视图,不识别简称或业务用途;执行前必须完成复用判断,不能因名称未完全匹配就新建。已有同名视图时停止,不盲目重建。
80
-
81
- `--pc-only` 只用于已确认本次验收为 PC 的场景。未指定时,命令必须取得真实 MOBILE 配置,禁止用 PC 配置推导移动端。
82
-
83
- 服务器通过必须同时满足:
84
-
85
- - 创建后按返回 `listId` 找到同名列表。
86
- - `persisted=true`。
87
- - `visibleFieldCount` 等于目标业务字段数。
88
- - `tableFieldCount` 还包含隐藏主键。
89
- - 再查 `form list-view` 仍能按相同 ID 和名称找到。
90
-
91
- 前端无数据时可以没有数据行,但必须看见业务字段列头;否则仍是空壳,不能验收。
92
-
93
- ## 表格视图展示样式
94
-
95
- ```bash
96
- e10-cli --json form table-view style <objId> <appId> <listId> <style>
97
- ```
98
-
99
- `style` 使用前台语义,不直接让使用者猜内部 `mode`:
100
-
101
- | style | 前台展示样式 | mode |
102
- |---|---|---|
103
- | `table` | 表格式 | `1` |
104
- | `list` | 列表式 | `2` |
105
- | `left-diagram` | 左图式 | `3` |
106
- | `horizontal-list` | 横向列表式 | `4` |
107
- | `above` | 上图式 | `5` |
108
- | `grid` | 网格列表式 | `7` |
109
- | `editable` | 可编辑表格(编辑态) | `11` |
110
-
111
- 可编辑表格内部还有数据态 `8` 和只读态 `9`;用户要求“改成可编辑表格”时必须使用编辑态 `11`,不得把只读态 `9` 当成完成。
112
-
113
- 命令先确认 `listId` 属于目标 `objId`,分别读取完整 PC/MOBILE 配置,只修改 PC 顶层 `mode`,保存后重新读取 PC 配置。移动端配置必须原样保留;读取不到时,只有明确 `--pc-only` 才允许继续。
114
-
115
- 前端验收:重新进入“基础设置 → 展示样式”仍显示“可编辑表格”,并且列表进入可编辑状态。
116
-
117
- ## 常用搜索显示方式
118
-
119
- ```bash
120
- # PC 常用搜索显示为高级搜索;filter 表示筛选
121
- e10-cli --json form table-view search-style <objId> <appId> <listId> advanced
122
- ```
123
-
124
- 显示方式固定为 `advanced → commonSearchType="0"`、`filter → commonSearchType="1"`,不得直接猜内部值。
125
-
126
- 命令先确认 `listId` 属于目标表单,完整保留 PC 其他配置和真实 MOBILE 配置,保存后重新读取目标属性。前端验收:“常用搜索 → 基础信息 → 显示方式”能正常打开,且刷新后仍为目标方式;若配置页异常,接口回读成功也不能验收。
127
-
128
- ## 常用搜索字段
129
-
130
- ```bash
131
- e10-cli --json form table-view search-field add <objId> <appId> <listId> <fieldId>
132
-
133
- # 按前端字段设置面板配置搜索项
134
- e10-cli --json form table-view search-field configure \
135
- <objId> <appId> <listId> <fieldId> \
136
- --display-name "单据名称" \
137
- --default-value "111" \
138
- --required 0 \
139
- --full-match 0 \
140
- --condition like
141
- ```
142
-
143
- 命令必须从当前数据源接口取得完整字段模型,按前端最终保存结构生成搜索项:字段 `id` 与独立的 18 位 `filterId` 不得混用,字段自身 `multiSelect` 原样保留,搜索默认配置单独写入 `listFilterDefaultSets`。保存时完整保留 PC 其他配置和真实 MOBILE 配置,再独立回读字段及条件关系。
144
-
145
- 具体配置固定映射:
146
-
147
- - `--default-value`:固定默认值,写为 `defaultType="1"` 与 `startValue`;`--clear-default` 清除。`Select` 字段可传选项名称或选项 ID,CLI 必须从当前数据源解析为唯一真实 ID,并保留完整选项对象供前端回显。
148
- - `--required 0|1`:条件是否必填,写为字段级 `required`。
149
- - `--full-match 0|1`:搜索内容是否完整匹配,写入 `listFilterDefaultSets.searchContentFullMatches`。
150
- - `--condition like|eq|...`:必须来自该字段实际允许的条件,同时更新字段层与默认设置层。
151
- - `--display-name`:更新搜索项 `showName`;不得覆盖原字段名和字段 ID。
152
-
153
- 前端验收:打开“搜索配置”不报异常,目标字段出现在常用搜索字段中;刷新列表后可使用该字段发起搜索。只通过接口回读不能验收。
154
-
155
- ## 台账显示列/搜索/排序/统计/视图数据条件/行事件/启用分组/视图权限/分类搜索(list-columns / list-search / list-sort / list-stats / list-filter / list-event / list-group / list-permission / list-search-group)
156
-
157
- 直接改默认台账(nListView)的显示列、搜索条件、排序、顶部统计、视图数据条件。listId 取 `form list-view` 返回的列表视图 ID。默认改 PC 端;`list-columns --terminal mobile` 可改移动端显示列。**保存时先读回真实移动端 mConfig 原样回传,不会清空移动端**(`saveNListConfig` 一次请求里 `config`→PC 端、`mConfig`→移动端,两端列集合/uid 各自独立)。只有明确目标只使用 PC、移动端配置确实不存在时,才加 `--pc-only`。
158
-
159
- ```bash
160
- # 查看当前显示列
161
- e10-cli form list-columns <objId> <appId> <listId>
162
-
163
- # 批量追加字段到显示列 / 移除字段
164
- e10-cli form list-columns <objId> <appId> <listId> --add <fieldId1> <fieldId2>
165
- e10-cli form list-columns <objId> <appId> <listId> --remove <fieldId1> <fieldId2>
166
-
167
- # 按文件完整设置业务列顺序、宽度和格式(未列入的业务列会移除)
168
- e10-cli form list-columns <objId> <appId> <listId> --set @columns.json --json
169
- # 详见 references/form/guide-list-columns.md
170
-
171
- # 列显示格式:千分位/小数位(Number/Money 列,走列对象 format/decimalLength)
172
- e10-cli form list-format <objId> <appId> <listId> <fieldId> --thousandths --decimal 2
173
- e10-cli form list-format <objId> <appId> <listId> <fieldId> --no-thousandths
174
- # 列显示单位:后缀/前缀(走列 showTrans.ruleConfig,与千分位是两套机制)
175
- e10-cli form list-unit <objId> <appId> <listId> <fieldId> "(元)"
176
-
177
- # 配置搜索:--add 进搜索面板,--quick 加顶部快捷筛选(均支持多字段)
178
- e10-cli form list-search <objId> <appId> <listId> --add <fieldId1> <fieldId2>
179
- e10-cli form list-search <objId> <appId> <listId> --quick <fieldId1> <fieldId2>
180
- # 主表字段直接从 ds/fields 解析;明细子字段经 getFormField 单取元数据(ds/fields 合并不展开)
181
-
182
- # 配置排序 / 清除(--field 支持多个,按传入顺序多级排序;--order 对所有字段生效)
183
- e10-cli form list-sort <objId> <appId> <listId> --field <fieldId1> <fieldId2> --order ASC
184
- e10-cli form list-sort <objId> <appId> <listId> --clear
185
-
186
- # 主表/明细统计完整指南:references/form/guide-list-stats.md
187
- # 明细 count 支持只填 type/subFormId;批量入口:form list-stats detail
188
- # PC/MOBILE 可能共享统计项;以保存后的 mobileStatistics 为准,不能承诺只影响 PC
189
- # 顶部统计:type=sum 求和 / count 计数 / avg 平均 / max 最大 / min 最小
190
- # 可选:thousandths=true 千分位 / decimalPlaces="2" 小数位 / unit="万" 单位(unitType=tenThousand)
191
- e10-cli form list-stats <objId> <appId> <listId> --add '{"fieldId":"...","type":"sum","name":"合同总金额","thousandths":true,"decimalPlaces":"2","unit":"万"}'
192
-
193
- # 条件统计:conditions 数组构造明文条件树填 rootdata(发明文保存成功、读回也是明文,无需 LZW 编码)
194
- # func: eq 等于 / neq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / range 区间 / isNull 为空 / isNotNull 不为空
195
- # 单选 Select 用 eq;notEq/between 为兼容别名自动归一为 neq/range;range 的 value 用数组 [起,止];value 填选项 valueKey、text 填显示名;多条件默认 AND
196
- e10-cli form list-stats <objId> <appId> <listId> --add '{"fieldId":"金额fieldId","type":"sum","name":"研发合同额","thousandths":true,"unit":"万","conditions":[{"fieldId":"项目类型fieldId","func":"eq","value":"研发valueKey","text":"研发"}]}'
197
- e10-cli form list-stats <objId> <appId> <listId> --remove <statId> # 平台 statisticsList 是 upsert 语义,删除靠标 operation:DELETE(splice 不删)
198
-
199
- # 视图数据条件:台账只显示满足条件的数据(走 saveNListConfig config.filter,明文条件树,非独立接口——
200
- # conditionEditor/saveOrUpdate 表单级不挂视图、saveBaseinfo 带 conditionData 都是错误端点)
201
- # func 取值同条件统计(eq 等于 / neq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / range 区间 / isNull 为空 / isNotNull 不为空,单选 Select 用 eq);value 填选项 valueKey,text 填显示名;多条件默认 AND
202
- e10-cli form list-filter <objId> <appId> <listId> --add '{"conditions":[{"fieldId":"项目类型fieldId","func":"eq","value":"研发valueKey","text":"研发"}]}'
203
- e10-cli form list-filter <objId> <appId> <listId> --clear
204
-
205
- # 行事件:点击行数据 NewPage 打开(走 saveNListConfig config.eventGroup,明文 JSON,config+mConfig 都要写)
206
- # --add-page 选页面:pageId 缺省 "1/<objId>"(表单新建布局),"0/<objId>"=显示布局
207
- # 打开方式 openMode(linkInfo.openMode 权威,page.openMode 恒 4):
208
- # 当前页面=4 / 新窗口=0 / 弹出窗口=5 / 右侧滑出=1(缺省) / 右侧推出=7
209
- # 弹出/滑出/推出 带弹窗宽高(--modal-width/--modal-height,缺省 50%);滑出/推出 额外带 winSizeNew(--win-size,缺省 100%)
210
- # --add-field 选字段(URL取自行内字段值,urlFieldText/Type自动补)
211
- e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageName":"新建数据"}'
212
- e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageId":"0/<objId>","pageName":"显示布局","openMode":"当前页面"}'
213
- e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageName":"弹窗详情","openMode":"弹出窗口"}' --modal-width 80%
214
- e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageName":"侧滑详情","openMode":"右侧推出"}' --win-size 60%
215
- e10-cli form list-event <objId> <appId> <listId> --add-field '{"urlFieldId":"字段id"}'
216
- e10-cli form list-event <objId> <appId> <listId> --clear
217
-
218
- # 字段事件(列点击 list-click,区别于行事件 list-event):点某列数据打开该行显示布局(带数据 ID)
219
- # 打开方式 --open-mode:当前页面/新窗口/弹出窗口/右侧滑出(缺省)/右侧推出;滑出/推出 --win-size 设宽度(缺省 800px,可 50%)
220
- e10-cli form list-click <objId> <appId> <listId> <fieldId> --open-mode 右侧推出 --win-size 50%
221
- e10-cli form list-click <objId> <appId> <listId> <fieldId> --target <目标表单objId> --open-mode 弹出窗口
222
- e10-cli form list-click <objId> <appId> <listId> <fieldId> --clear
223
-
224
- # 启用分组:台账按某字段分组聚合显示(走 saveNListConfig config.enableGroup 对象 {enable,groupField,groupSize})
225
- # saveNListConfig 持久化成功,不走 designer/layout/save LZW。group-field 用完整字段对象(自动从 ds/fields 取)
226
- e10-cli form list-group <objId> <appId> <listId> --enable --group-field <分组字段fieldId> --group-size 100
227
- e10-cli form list-group <objId> <appId> <listId> --disable # 禁用但保留 groupField/groupSize(仅 enable=false)
228
-
229
- # 台账视图权限(查阅/查看权限):谁能查看这个台账(走 list/permission/save + getList,专用端点,full-replace 语义 omit即删)
230
- # selectedType: all(所有人) / user(人员,带--name) / role(角色,--name 缺省自动查) / matrix(矩阵,用 --add-raw 传整对象)
231
- e10-cli form list-permission <objId> <appId> <listId> --add-all
232
- e10-cli form list-permission <objId> <appId> <listId> --add-user <userId> --name <人员名>
233
- e10-cli form list-permission <objId> <appId> <listId> --add-role <roleId> # --name 缺省自动从角色树查名
234
- e10-cli form list-permission <objId> <appId> <listId> --add-role <roleId> --share-level 2 # 加同一角色另一个共享级别
235
- e10-cli form list-permission <objId> <appId> <listId> --add-role <roleId> --seclevel 30-80 # 安全级别范围
236
- e10-cli form list-permission <objId> <appId> <listId> --add-raw '{"selectedType":"matrix","name":"...","dataid":"矩阵id",...}'
237
- e10-cli form list-permission <objId> <appId> <listId> --remove <权限id>
238
- e10-cli form list-permission <objId> <appId> <listId> --clear
239
-
240
- # 每条授权对象的两个可配维度(抓包坐实,mulinquan 2026-09-02):
241
- # 安全级别 = levelScope.minShowlevel/maxShowlevel(字符串范围,--seclevel <min>-<max>,如 0-100 / 30-80;role 缺省 0-100、all 缺省空)
242
- # 共享级别 = roleLevel(实测: 总部=1 分部=2 全部=3)。同一角色可按不同共享级别各存一条(同 role 两条 roleLevel 1/2 并存)→ 去重键含 roleLevel
243
- # 幂等:目标(含 roleLevel)已存在时跳过保存,打印「无变化」
244
-
245
- # 分类搜索:按选项字段分类筛选(走 saveNListConfig config.searchConditions.groupFilters)
246
- # 仅主表选项类字段(Select/RadioBox/CheckBox),不支持明细字段(产品边界)
247
- e10-cli form list-search-group <objId> <appId> <listId> --add <选项字段fieldId>
248
- e10-cli form list-search-group <objId> <appId> <listId> --remove <fieldId>
249
- e10-cli form list-search-group <objId> <appId> <listId> --clear
250
- ```
251
-
252
- 字段 ID 来自 `form read <objId> --app-id <appId>` 或 `form list-columns` 当前列(系统列如 `2`创建者/`3`创建时间也可增删;`5`数据ID主键自动保留,禁止移除)。显示列命令保存后回读校验,`otherTerminalPreserved:true` 表示另一终端配置核对一致。
253
-
254
- ## formView 固定闭环
255
-
256
- ```bash
257
- # 1. 确认目标表单与现有视图
258
- e10-cli form list <appId>
259
- e10-cli form view list <objId> <appId>
260
-
261
- # 2. 创建视图并从输出取得 viewId
262
- e10-cli --json form view create <objId> <appId> "<视图名>" --type formView
263
-
264
- # 3. 填充已有字段并独立回读
265
- e10-cli --json form view populate <objId> <appId> <viewId>
266
- ```
267
-
268
- `populate` 只有同时满足以下条件才算服务器验证通过:
269
-
270
- - `success=true`
271
- - `componentCount > 0`
272
- - `fieldComponentCount > 0`
273
- - 重复执行返回 `alreadyPopulated=true`
274
-
275
- 服务器验证通过后仍需用户确认前端不是空画布、字段名称和特殊配置正确。
276
-
277
- ## 执行与验收
278
-
279
- 1. 计划中写明表单 objId、视图名称、类型和终端;用户确认后再写入。
280
- 2. CLI 先调用 `createView`,再查询该表单的完整视图列表;创建响应本身不是验收。`formView` 随后调用 `populate`:`原 formId + viewId(layoutMultiId)` 读取目标布局,保留目标页面元数据,按目标布局类型重建已有字段组件并保存。
281
- 3. 回读以返回的 viewId 优先;服务端未返回 ID 时,才按名称、类型和终端唯一匹配。多个候选视图时停止并让用户确认。
282
- 4. `populate` 回读组件数量和字段 ID;用户再确认新视图设计页出现表单既有字段,而非只有“未分组”的空画布。
283
-
284
- 服务器成功和独立回读成功但尚未前端确认时,只能标记为“待前端确认”。
1
+ # 表单视图:新建与验收
2
+
3
+ 表单创建后已有默认台账;只有用户明确需要额外视图时才创建。表格视图是 `nListView` 数据列表,和普通 `formView` 是两条不同链路。
4
+
5
+ ## 需求判别
6
+
7
+ - “新建表单” → `form create --fields`。
8
+ - “客户信息表需要一个客户信息视图”等普通列表需求 → 先查询并复用该表单默认台账;“客户信息表”和“客户信息”的名称差异不构成额外新建理由。
9
+ - “在已有表单下明确新增一个额外表格视图” → `form table-view create`;命令必须同时保存显示列并回读。
10
+ - “在已有表单下新增表单视图” → `form view create --type formView`,随后必须 `form view populate`;不得新建另一张表单。
11
+
12
+ ## 默认台账复用
13
+
14
+ 1. 用 `form list-view <objId> <appId>` 查询已有列表,确认目标属于当前表单且用途符合需求,记录实际名称和 listId。存在多个候选时核对数据范围、权限和展示配置,不仅凭名称或第一条记录选择。
15
+ 2. 普通列表需求直接在该 listId 上配置显示列、筛选、排序、统计和事件;需要整组配置显示列时用 `form list-columns <objId> <appId> <listId> --set @columns.json`。`table-view ensure` 只用于空列补齐,不负责视图选择或重命名。
16
+ 3. 默认视图名称由平台随表单生成,不应机械沿用或统一去掉末尾“表”字。需求明确给出视图名称且与默认名称不一致时,使用 `form view rename` 修改已有默认台账并保留 ID;不要新建同用途视图代替改名。表单名、视图名和菜单名分别处理。例如表单“客户类型表”的视图要求为“客户类型”时,应把默认台账改名为“客户类型”,不能写成“同客户类型”。
17
+ 4. 只有明确需要“我的客户”“重点客户”等额外独立视图,或不同展示类型时,才进入新增流程。已有重复视图需先核对菜单、关联页签等引用及配置,不能自动删除。
18
+
19
+ 例如:已建“客户信息表”,方案中的“客户信息视图”可由其默认台账满足,plan 标记“复用默认台账”,填写实际 listId 即可。
20
+
21
+ ## 命令
22
+
23
+ ```bash
24
+ # 查询表单下全部视图
25
+ e10-cli form view list <objId> <appId>
26
+
27
+ # 修改已有默认台账名称(viewId 从上一条命令取得)
28
+ e10-cli form view rename <objId> <appId> <viewId> "客户类型"
29
+
30
+ # 创建可用表格视图;默认放入全部已有字段
31
+ e10-cli form table-view create <objId> <appId> "审批数据表格" --pc-only
32
+
33
+ # 创建看板视图(默认 PC + FLOW 布局)
34
+ e10-cli form view create <objId> <appId> "按状态看板" --type kanbanView
35
+
36
+ # 新增表单视图——流式布局(FLOW)
37
+ e10-cli form view create <objId> <appId> "新增-流式视图" --type formView --layout-type FLOW
38
+
39
+ # 新增表单视图——表格式布局(EXCEL)
40
+ e10-cli form view create <objId> <appId> "新增-EXCEL视图" --type formView --layout-type EXCEL
41
+
42
+ # 第 2 步:把已有字段按目标布局类型填入新建 formView(流式/EXCEL 各自生成对应组件)
43
+ e10-cli form view populate <objId> <appId> <viewId>
44
+
45
+ # 创建移动端日历视图
46
+ e10-cli form view create <objId> <appId> "交付日历" \
47
+ --type calendarView --terminal MOBILE --layout-type FLOW
48
+ ```
49
+
50
+ **给已有表单加表单视图是两步闭环**(缺一不可):
51
+ 1. `form view create --type formView --layout-type FLOW|EXCEL` —— 建一个**空**的 formView 实体,`--layout-type` 决定流式(FLOW)还是表格式(EXCEL)。同一张表单可同时存在多个 formView,布局类型可不同(如一张表既加流式视图又加 EXCEL 视图)。
52
+ 2. `form view populate <objId> <appId> <viewId>` —— 把已有字段按目标布局类型填进去。流式视图生成流式组件、EXCEL 视图生成表格定位,**不得把 EXCEL 定位直接复制到 FLOW 视图**。
53
+
54
+ `form view populate` 以原表单 `formId` 读取字段,以新视图 `viewId` 作为 `layoutMultiId` 读取目标布局,再按目标的 FLOW/EXCEL 类型重新生成字段组件并独立回读。不得把视图的 `versionId` 或 `pageLayoutId` 当成 `formId`。
55
+
56
+ 看板、日历、思维导图目前只确认创建实体和视图列表回读,尚不能据此宣称设计器已有可用组件。
57
+
58
+ 普通 `form view create --type` 只接受:
59
+
60
+ - `formView`:详情视图
61
+ - `kanbanView`:看板视图
62
+ - `calendarView`:日历视图
63
+ - `mindMapView`:思维导图视图
64
+ - `multiView`:多维表格视图(无 layoutType/terminalType,带 `extConfig:{listVersion:5}`)。**数据维度**:缺省主表(`subFormId:""/subFormMain:false`);明细表维度用 `--detail <明细名>`(按名解析明细 subFormId)或 `--sub-form-id <明细subFormId>`(直传),传值即 `subFormId:<明细subFormId>/subFormMain:true`。明细子表名/subFormId 用 `dataset/v1/getFields` detailFields 查(真 subFormId 在 `fields[].subFormId`,非 `dt.id`)。**多维表格显示列**复用台账同一套 `saveNListConfig/getNListConfig`,直接用 `form list-columns <objId> <appId> <multiView的viewId> --add <fieldId>` 加列。
65
+
66
+ `tableView`/`nListView` 不得传给普通视图命令。真实表格视图固定使用 `form table-view create`。
67
+
68
+ ## 额外表格视图新建闭环
69
+
70
+ ```bash
71
+ # 1. 已确认需要额外独立视图,再查询目标表单和已有列表
72
+ e10-cli form list <appId>
73
+ e10-cli form list-view <objId> <appId>
74
+
75
+ # 2. 创建 nListView、写入全部业务显示列和隐藏数据主键、独立回读
76
+ e10-cli --json form table-view create <objId> <appId> "<表格视图名>" --pc-only
77
+
78
+ # 3. 再次独立查询表单下列表
79
+ e10-cli --json form list-view <objId> <appId>
80
+ ```
81
+
82
+ 命令先用 `viewType=nListView` 创建,再以新 `listId` 读取 PC 配置;业务列必须取自 `/api/ebuilder/common/ds/fields` 的完整字段对象,不能只拼字段 ID。保存时保留服务端配置和隐藏主键 `id=5`,最后回读 `tableField` 和列表实体。命令只拦截完全同名的视图,不识别简称或业务用途;执行前必须完成复用判断,不能因名称未完全匹配就新建。已有同名视图时停止,不盲目重建。
83
+
84
+ `--pc-only` 只用于已确认本次验收为 PC 的场景。未指定时,命令必须取得真实 MOBILE 配置,禁止用 PC 配置推导移动端。
85
+
86
+ 服务器通过必须同时满足:
87
+
88
+ - 创建后按返回 `listId` 找到同名列表。
89
+ - `persisted=true`。
90
+ - `visibleFieldCount` 等于目标业务字段数。
91
+ - `tableFieldCount` 还包含隐藏主键。
92
+ - 再查 `form list-view` 仍能按相同 ID 和名称找到。
93
+
94
+ 前端无数据时可以没有数据行,但必须看见业务字段列头;否则仍是空壳,不能验收。
95
+
96
+ ## 表格视图展示样式
97
+
98
+ ```bash
99
+ e10-cli --json form table-view style <objId> <appId> <listId> <style>
100
+ ```
101
+
102
+ `style` 使用前台语义,不直接让使用者猜内部 `mode`:
103
+
104
+ | style | 前台展示样式 | mode |
105
+ |---|---|---|
106
+ | `table` | 表格式 | `1` |
107
+ | `list` | 列表式 | `2` |
108
+ | `left-diagram` | 左图式 | `3` |
109
+ | `horizontal-list` | 横向列表式 | `4` |
110
+ | `above` | 上图式 | `5` |
111
+ | `grid` | 网格列表式 | `7` |
112
+ | `editable` | 可编辑表格(编辑态) | `11` |
113
+
114
+ 可编辑表格内部还有数据态 `8` 和只读态 `9`;用户要求“改成可编辑表格”时必须使用编辑态 `11`,不得把只读态 `9` 当成完成。
115
+
116
+ 命令先确认 `listId` 属于目标 `objId`,分别读取完整 PC/MOBILE 配置,只修改 PC 顶层 `mode`,保存后重新读取 PC 配置。移动端配置必须原样保留;读取不到时,只有明确 `--pc-only` 才允许继续。
117
+
118
+ 前端验收:重新进入“基础设置 → 展示样式”仍显示“可编辑表格”,并且列表进入可编辑状态。
119
+
120
+ ## 常用搜索显示方式
121
+
122
+ ```bash
123
+ # PC 常用搜索显示为高级搜索;filter 表示筛选
124
+ e10-cli --json form table-view search-style <objId> <appId> <listId> advanced
125
+ ```
126
+
127
+ 显示方式固定为 `advanced → commonSearchType="0"`、`filter → commonSearchType="1"`,不得直接猜内部值。
128
+
129
+ 命令先确认 `listId` 属于目标表单,完整保留 PC 其他配置和真实 MOBILE 配置,保存后重新读取目标属性。前端验收:“常用搜索 → 基础信息 → 显示方式”能正常打开,且刷新后仍为目标方式;若配置页异常,接口回读成功也不能验收。
130
+
131
+ ## 常用搜索字段
132
+
133
+ ```bash
134
+ e10-cli --json form table-view search-field add <objId> <appId> <listId> <fieldId>
135
+
136
+ # 按前端字段设置面板配置搜索项
137
+ e10-cli --json form table-view search-field configure \
138
+ <objId> <appId> <listId> <fieldId> \
139
+ --display-name "单据名称" \
140
+ --default-value "111" \
141
+ --required 0 \
142
+ --full-match 0 \
143
+ --condition like
144
+ ```
145
+
146
+ 命令必须从当前数据源接口取得完整字段模型,按前端最终保存结构生成搜索项:字段 `id` 与独立的 18 位 `filterId` 不得混用,字段自身 `multiSelect` 原样保留,搜索默认配置单独写入 `listFilterDefaultSets`。保存时完整保留 PC 其他配置和真实 MOBILE 配置,再独立回读字段及条件关系。
147
+
148
+ 具体配置固定映射:
149
+
150
+ - `--default-value`:固定默认值,写为 `defaultType="1"` 与 `startValue`;`--clear-default` 清除。`Select` 字段可传选项名称或选项 ID,CLI 必须从当前数据源解析为唯一真实 ID,并保留完整选项对象供前端回显。
151
+ - `--required 0|1`:条件是否必填,写为字段级 `required`。
152
+ - `--full-match 0|1`:搜索内容是否完整匹配,写入 `listFilterDefaultSets.searchContentFullMatches`。
153
+ - `--condition like|eq|...`:必须来自该字段实际允许的条件,同时更新字段层与默认设置层。
154
+ - `--display-name`:更新搜索项 `showName`;不得覆盖原字段名和字段 ID。
155
+
156
+ 前端验收:打开“搜索配置”不报异常,目标字段出现在常用搜索字段中;刷新列表后可使用该字段发起搜索。只通过接口回读不能验收。
157
+
158
+ ## 台账显示列/搜索/排序/统计/视图数据条件/行事件/分组/上下级/视图权限/分类搜索
159
+
160
+ 直接改默认台账(nListView)的显示列、搜索条件、排序、顶部统计、视图数据条件。listId 取 `form list-view` 返回的列表视图 ID。默认改 PC 端;`list-columns --terminal mobile` 可改移动端显示列。**保存时先读回真实移动端 mConfig 原样回传,不会清空移动端**(`saveNListConfig` 一次请求里 `config`→PC 端、`mConfig`→移动端,两端列集合/uid 各自独立)。只有明确目标只使用 PC、移动端配置确实不存在时,才加 `--pc-only`。
161
+
162
+ ```bash
163
+ # 查看当前显示列
164
+ e10-cli form list-columns <objId> <appId> <listId>
165
+
166
+ # 批量追加字段到显示列 / 移除字段
167
+ e10-cli form list-columns <objId> <appId> <listId> --add <fieldId1> <fieldId2>
168
+ e10-cli form list-columns <objId> <appId> <listId> --remove <fieldId1> <fieldId2>
169
+
170
+ # 按文件完整设置业务列顺序、宽度和格式(未列入的业务列会移除)
171
+ e10-cli form list-columns <objId> <appId> <listId> --set @columns.json --json
172
+ # 详见 references/form/guide-list-columns.md
173
+
174
+ # 列显示格式:千分位/小数位(Number/Money 列,走列对象 format/decimalLength)
175
+ e10-cli form list-format <objId> <appId> <listId> <fieldId> --thousandths --decimal 2
176
+ e10-cli form list-format <objId> <appId> <listId> <fieldId> --no-thousandths
177
+ # 列显示单位:后缀/前缀(走列 showTrans.ruleConfig,与千分位是两套机制)
178
+ e10-cli form list-unit <objId> <appId> <listId> <fieldId> "(元)"
179
+
180
+ # 配置搜索:--add 进搜索面板,--quick 加顶部快捷筛选(均支持多字段)
181
+ e10-cli form list-search <objId> <appId> <listId> --add <fieldId1> <fieldId2>
182
+ e10-cli form list-search <objId> <appId> <listId> --quick <fieldId1> <fieldId2>
183
+ # 主表字段直接从 ds/fields 解析;明细子字段经 getFormField 单取元数据(ds/fields 合并不展开)
184
+
185
+ # 配置排序 / 清除(--field 支持多个,按传入顺序多级排序;--order 对所有字段生效)
186
+ e10-cli form list-sort <objId> <appId> <listId> --field <fieldId1> <fieldId2> --order ASC
187
+ e10-cli form list-sort <objId> <appId> <listId> --clear
188
+
189
+ # 主表/明细统计完整指南:references/form/guide-list-stats.md
190
+ # 明细 count 支持只填 type/subFormId;批量入口:form list-stats detail
191
+ # PC/MOBILE 可能共享统计项;以保存后的 mobileStatistics 为准,不能承诺只影响 PC
192
+ # 顶部统计:type=sum 求和 / count 计数 / avg 平均 / max 最大 / min 最小
193
+ # 可选:thousandths=true 千分位 / decimalPlaces="2" 小数位 / unit="万" 单位(unitType=tenThousand)
194
+ e10-cli form list-stats <objId> <appId> <listId> --add '{"fieldId":"...","type":"sum","name":"合同总金额","thousandths":true,"decimalPlaces":"2","unit":"万"}'
195
+
196
+ # 条件统计:conditions 数组构造明文条件树填 rootdata(发明文保存成功、读回也是明文,无需 LZW 编码)
197
+ # func: eq 等于 / neq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / range 区间 / isNull 为空 / isNotNull 不为空
198
+ # 单选 Select 用 eq;notEq/between 为兼容别名自动归一为 neq/range;range 的 value 用数组 [起,止];value 填选项 valueKey、text 填显示名;多条件默认 AND
199
+ e10-cli form list-stats <objId> <appId> <listId> --add '{"fieldId":"金额fieldId","type":"sum","name":"研发合同额","thousandths":true,"unit":"万","conditions":[{"fieldId":"项目类型fieldId","func":"eq","value":"研发valueKey","text":"研发"}]}'
200
+ e10-cli form list-stats <objId> <appId> <listId> --remove <statId> # 平台 statisticsList 是 upsert 语义,删除靠标 operation:DELETE(splice 不删)
201
+
202
+ # 视图数据条件:台账只显示满足条件的数据(走 saveNListConfig config.filter,明文条件树,非独立接口——
203
+ # conditionEditor/saveOrUpdate 表单级不挂视图、saveBaseinfo 带 conditionData 都是错误端点)
204
+ # func 取值同条件统计(eq 等于 / neq 不等于 / in 属于 / notIn 不属于 / like 包含 / notLike 不包含 / gt 大于 / lt 小于 / range 区间 / isNull 为空 / isNotNull 不为空,单选 Select 用 eq);value 填选项 valueKey,text 填显示名;多条件默认 AND
205
+ e10-cli form list-filter <objId> <appId> <listId> --add '{"conditions":[{"fieldId":"项目类型fieldId","func":"eq","value":"研发valueKey","text":"研发"}]}'
206
+ e10-cli form list-filter <objId> <appId> <listId> --clear
207
+
208
+ # 行事件:点击行数据 NewPage 打开(走 saveNListConfig config.eventGroup,明文 JSON,config+mConfig 都要写)
209
+ # --add-page 选页面:pageId 缺省 "1/<objId>"(表单新建布局),"0/<objId>"=显示布局
210
+ # 打开方式 openMode(linkInfo.openMode 权威,page.openMode 恒 4):
211
+ # 当前页面=4 / 新窗口=0 / 弹出窗口=5 / 右侧滑出=1(缺省) / 右侧推出=7
212
+ # 弹出/滑出/推出 带弹窗宽高(--modal-width/--modal-height,缺省 50%);滑出/推出 额外带 winSizeNew(--win-size,缺省 100%)
213
+ # --add-field 选字段(URL取自行内字段值,urlFieldText/Type自动补)
214
+ e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageName":"新建数据"}'
215
+ e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageId":"0/<objId>","pageName":"显示布局","openMode":"当前页面"}'
216
+ e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageName":"弹窗详情","openMode":"弹出窗口"}' --modal-width 80%
217
+ e10-cli form list-event <objId> <appId> <listId> --add-page '{"pageName":"侧滑详情","openMode":"右侧推出"}' --win-size 60%
218
+ e10-cli form list-event <objId> <appId> <listId> --add-field '{"urlFieldId":"字段id"}'
219
+ e10-cli form list-event <objId> <appId> <listId> --clear
220
+
221
+ # 字段事件(列点击 list-click,区别于行事件 list-event):点某列数据打开该行显示布局(带数据 ID)
222
+ # 打开方式 --open-mode:当前页面/新窗口/弹出窗口/右侧滑出(缺省)/右侧推出;滑出/推出 --win-size 设宽度(缺省 800px)。具体数值按需求填写:百分比使用 `%`(如 `45%`、`60%`),像素使用 `px`(如 `640px`、`900px`),两种单位不可混用或省略;百分比范围为 0%~100%。
223
+ e10-cli form list-click <objId> <appId> <listId> <fieldId> --open-mode 右侧推出 --win-size 50%
224
+ e10-cli form list-click <objId> <appId> <listId> <fieldId> --open-mode 右侧推出 --win-size 800px
225
+ e10-cli form list-click <objId> <appId> <listId> <fieldId> --target <目标表单objId> --open-mode 弹出窗口
226
+ e10-cli form list-click <objId> <appId> <listId> <fieldId> --clear
227
+
228
+ # 启用分组:台账按某字段分组聚合显示(走 saveNListConfig config.enableGroup 对象 {enable,groupField,groupSize})
229
+ # saveNListConfig 持久化成功,不走 designer/layout/save LZW。group-field 用完整字段对象(自动从 ds/fields 取)
230
+ e10-cli form list-group <objId> <appId> <listId> --enable --group-field <分组字段fieldId> --group-size 100
231
+ e10-cli form list-group <objId> <appId> <listId> --disable # 禁用但保留 groupField/groupSize(仅 enable=false)
232
+
233
+ # 上下级树形展示:根据“上级类型”等自关联字段展示父子层级(走 config.superiorField)
234
+ # parent-field 支持字段名称或 ID;必须是主表、单选、关联当前表单自身的 EBuilder 字段
235
+ e10-cli form list-hierarchy <objId> <appId> <listId> --enable --parent-field "上级类型" --expand-level 2
236
+ e10-cli form list-hierarchy <objId> <appId> <listId> --disable # 关闭但保留字段及展开设置
237
+
238
+ # 台账视图权限(查阅/查看权限):谁能查看这个台账(走 list/permission/save + getList,专用端点,full-replace 语义 omit即删)
239
+ # selectedType: all(所有人) / user(人员,带--name) / role(角色,--name 缺省自动查) / matrix(矩阵,用 --add-raw 传整对象)
240
+ e10-cli form list-permission <objId> <appId> <listId> --add-all
241
+ e10-cli form list-permission <objId> <appId> <listId> --add-user <userId> --name <人员名>
242
+ e10-cli form list-permission <objId> <appId> <listId> --add-role <roleId> # --name 缺省自动从角色树查名
243
+ e10-cli form list-permission <objId> <appId> <listId> --add-role <roleId> --share-level 2 # 加同一角色另一个共享级别
244
+ e10-cli form list-permission <objId> <appId> <listId> --add-role <roleId> --seclevel 30-80 # 安全级别范围
245
+ e10-cli form list-permission <objId> <appId> <listId> --add-raw '{"selectedType":"matrix","name":"...","dataid":"矩阵id",...}'
246
+ e10-cli form list-permission <objId> <appId> <listId> --remove <权限id>
247
+ e10-cli form list-permission <objId> <appId> <listId> --clear
248
+
249
+ # 删除指定权限;清理重复“所有人”后保留唯一一条
250
+ e10-cli form list-permission <objId> <appId> <listId> --remove <permissionId>
251
+ e10-cli form list-permission <objId> <appId> <listId> --remove-all --add-all
252
+
253
+ # 每条授权对象的两个可配维度(抓包坐实,mulinquan 2026-09-02):
254
+ # 安全级别 = levelScope.minShowlevel/maxShowlevel(字符串范围,--seclevel <min>-<max>,如 0-100 / 30-80;role 缺省 0-100、all 缺省空)
255
+ # 共享级别 = roleLevel(实测: 总部=1 分部=2 全部=3)。同一角色可按不同共享级别各存一条(同 role 两条 roleLevel 1/2 并存)→ 去重键含 roleLevel
256
+ # 幂等:目标(含 roleLevel)已存在时跳过保存,打印「无变化」
257
+
258
+ # 分类搜索:按选项字段分类筛选(走 saveNListConfig config.searchConditions.groupFilters)
259
+ # 仅主表选项类字段(Select/RadioBox/CheckBox),不支持明细字段(产品边界)
260
+ e10-cli form list-search-group <objId> <appId> <listId> --add <选项字段fieldId>
261
+ e10-cli form list-search-group <objId> <appId> <listId> --remove <fieldId>
262
+ e10-cli form list-search-group <objId> <appId> <listId> --clear
263
+ ```
264
+
265
+ `list-hierarchy` 与 `list-group` 不可混为一谈:前者按自关联字段建立父子树,后者按普通字段聚合分组。需求出现“上下级”“父级”“树形”“根据上级类型展示”时使用 `list-hierarchy`。字段名不要求固定为“上级类型”,但字段关系必须满足自关联单选。
266
+
267
+ 字段 ID 来自 `form read <objId> --app-id <appId>` 或 `form list-columns` 当前列(系统列如 `2`创建者/`3`创建时间也可增删;`5`数据ID主键自动保留,禁止移除)。显示列命令保存后回读校验,`otherTerminalPreserved:true` 表示另一终端配置核对一致。
268
+
269
+ ## formView 固定闭环
270
+
271
+ ```bash
272
+ # 1. 确认目标表单与现有视图
273
+ e10-cli form list <appId>
274
+ e10-cli form view list <objId> <appId>
275
+
276
+ # 2. 创建视图并从输出取得 viewId
277
+ e10-cli --json form view create <objId> <appId> "<视图名>" --type formView
278
+
279
+ # 3. 填充已有字段并独立回读
280
+ e10-cli --json form view populate <objId> <appId> <viewId>
281
+ ```
282
+
283
+ `populate` 只有同时满足以下条件才算服务器验证通过:
284
+
285
+ - `success=true`
286
+ - `componentCount > 0`
287
+ - `fieldComponentCount > 0`
288
+ - 重复执行返回 `alreadyPopulated=true`
289
+
290
+ 服务器验证通过后仍需用户确认前端不是空画布、字段名称和特殊配置正确。
291
+
292
+ ## 执行与验收
293
+
294
+ 1. 计划中写明表单 objId、视图名称、类型和终端;用户确认后再写入。
295
+ 2. CLI 先调用 `createView`,再查询该表单的完整视图列表;创建响应本身不是验收。`formView` 随后调用 `populate`:`原 formId + viewId(layoutMultiId)` 读取目标布局,保留目标页面元数据,按目标布局类型重建已有字段组件并保存。
296
+ 3. 回读以返回的 viewId 优先;服务端未返回 ID 时,才按名称、类型和终端唯一匹配。多个候选视图时停止并让用户确认。
297
+ 4. `populate` 回读组件数量和字段 ID;用户再确认新视图设计页出现表单既有字段,而非只有“未分组”的空画布。
298
+
299
+ 服务器成功和独立回读成功但尚未前端确认时,只能标记为“待前端确认”。