weaver-e10-builder 1.7.0 → 1.7.2

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 (180) hide show
  1. package/assets/icon-names.txt +7438 -0
  2. package/dist/cli-register.d.ts.map +1 -1
  3. package/dist/cli-register.js +16 -3
  4. package/dist/cli-register.js.map +1 -1
  5. package/dist/commands/app-manager.d.ts +8 -0
  6. package/dist/commands/app-manager.d.ts.map +1 -0
  7. package/dist/commands/app-manager.js +330 -0
  8. package/dist/commands/app-manager.js.map +1 -0
  9. package/dist/commands/app-setting.d.ts +8 -0
  10. package/dist/commands/app-setting.d.ts.map +1 -0
  11. package/dist/commands/app-setting.js +170 -0
  12. package/dist/commands/app-setting.js.map +1 -0
  13. package/dist/commands/connector.d.ts +7 -0
  14. package/dist/commands/connector.d.ts.map +1 -0
  15. package/dist/commands/connector.js +163 -0
  16. package/dist/commands/connector.js.map +1 -0
  17. package/dist/commands/form-association-manage.d.ts.map +1 -1
  18. package/dist/commands/form-association-manage.js +57 -4
  19. package/dist/commands/form-association-manage.js.map +1 -1
  20. package/dist/commands/form-association.d.ts.map +1 -1
  21. package/dist/commands/form-association.js +4 -2
  22. package/dist/commands/form-association.js.map +1 -1
  23. package/dist/commands/form-button-actions-cmd.d.ts.map +1 -1
  24. package/dist/commands/form-button-actions-cmd.js +180 -18
  25. package/dist/commands/form-button-actions-cmd.js.map +1 -1
  26. package/dist/commands/form-button-props-cmd.d.ts.map +1 -1
  27. package/dist/commands/form-button-props-cmd.js +4 -0
  28. package/dist/commands/form-button-props-cmd.js.map +1 -1
  29. package/dist/commands/form-button.d.ts.map +1 -1
  30. package/dist/commands/form-button.js +11 -0
  31. package/dist/commands/form-button.js.map +1 -1
  32. package/dist/commands/form-permission.d.ts.map +1 -1
  33. package/dist/commands/form-permission.js +310 -84
  34. package/dist/commands/form-permission.js.map +1 -1
  35. package/dist/commands/icon.d.ts.map +1 -1
  36. package/dist/commands/icon.js +63 -1
  37. package/dist/commands/icon.js.map +1 -1
  38. package/dist/commands/menu-config.d.ts +3 -0
  39. package/dist/commands/menu-config.d.ts.map +1 -0
  40. package/dist/commands/menu-config.js +93 -0
  41. package/dist/commands/menu-config.js.map +1 -0
  42. package/dist/commands/menu-permission.d.ts.map +1 -1
  43. package/dist/commands/menu-permission.js +6 -7
  44. package/dist/commands/menu-permission.js.map +1 -1
  45. package/dist/commands/menu.d.ts.map +1 -1
  46. package/dist/commands/menu.js +2 -5
  47. package/dist/commands/menu.js.map +1 -1
  48. package/dist/services/actionflow/components/action_eb_add.js +1 -1
  49. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  50. package/dist/services/actionflow/components/date_trigger.js +1 -1
  51. package/dist/services/actionflow/components/date_trigger.js.map +1 -1
  52. package/dist/services/actionflow/components/enquiry_form.js +4 -4
  53. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  54. package/dist/services/actionflow/components/meeting_create.d.ts.map +1 -1
  55. package/dist/services/actionflow/components/meeting_create.js +2 -1
  56. package/dist/services/actionflow/components/meeting_create.js.map +1 -1
  57. package/dist/services/actionflow/components/output.d.ts.map +1 -1
  58. package/dist/services/actionflow/components/output.js +2 -0
  59. package/dist/services/actionflow/components/output.js.map +1 -1
  60. package/dist/services/actionflow/context_discovery.d.ts.map +1 -1
  61. package/dist/services/actionflow/context_discovery.js +3 -0
  62. package/dist/services/actionflow/context_discovery.js.map +1 -1
  63. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  64. package/dist/services/actionflow/context_preflight.js +0 -10
  65. package/dist/services/actionflow/context_preflight.js.map +1 -1
  66. package/dist/services/actionflow/date_trigger_field.d.ts +3 -0
  67. package/dist/services/actionflow/date_trigger_field.d.ts.map +1 -0
  68. package/dist/services/actionflow/date_trigger_field.js +23 -0
  69. package/dist/services/actionflow/date_trigger_field.js.map +1 -0
  70. package/dist/services/actionflow/form_source.d.ts +1 -1
  71. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  72. package/dist/services/actionflow/form_source.js +9 -1
  73. package/dist/services/actionflow/form_source.js.map +1 -1
  74. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  75. package/dist/services/actionflow/formula_service.js +4 -12
  76. package/dist/services/actionflow/formula_service.js.map +1 -1
  77. package/dist/services/actionflow/generation_service.d.ts.map +1 -1
  78. package/dist/services/actionflow/generation_service.js +2 -1
  79. package/dist/services/actionflow/generation_service.js.map +1 -1
  80. package/dist/services/actionflow/loop_context.d.ts.map +1 -1
  81. package/dist/services/actionflow/loop_context.js +17 -0
  82. package/dist/services/actionflow/loop_context.js.map +1 -1
  83. package/dist/services/actionflow/meeting_secret_level.d.ts +5 -0
  84. package/dist/services/actionflow/meeting_secret_level.d.ts.map +1 -0
  85. package/dist/services/actionflow/meeting_secret_level.js +49 -0
  86. package/dist/services/actionflow/meeting_secret_level.js.map +1 -0
  87. package/dist/services/actionflow/preflight_service.d.ts +2 -0
  88. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  89. package/dist/services/actionflow/preflight_service.js +212 -4
  90. package/dist/services/actionflow/preflight_service.js.map +1 -1
  91. package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
  92. package/dist/services/actionflow/readback_verifier.js +22 -0
  93. package/dist/services/actionflow/readback_verifier.js.map +1 -1
  94. package/dist/services/actionflow/runtime_metadata.d.ts +2 -1
  95. package/dist/services/actionflow/runtime_metadata.d.ts.map +1 -1
  96. package/dist/services/actionflow/runtime_metadata.js +6 -1
  97. package/dist/services/actionflow/runtime_metadata.js.map +1 -1
  98. package/dist/services/actionflow/update_service.d.ts.map +1 -1
  99. package/dist/services/actionflow/update_service.js +42 -1
  100. package/dist/services/actionflow/update_service.js.map +1 -1
  101. package/dist/services/actionflow/webhook_response_context.d.ts +7 -0
  102. package/dist/services/actionflow/webhook_response_context.d.ts.map +1 -0
  103. package/dist/services/actionflow/webhook_response_context.js +82 -0
  104. package/dist/services/actionflow/webhook_response_context.js.map +1 -0
  105. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  106. package/dist/services/actionflow/workflow_compiler.js +67 -35
  107. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  108. package/dist/services/app-manager.d.ts +128 -0
  109. package/dist/services/app-manager.d.ts.map +1 -0
  110. package/dist/services/app-manager.js +420 -0
  111. package/dist/services/app-manager.js.map +1 -0
  112. package/dist/services/app-setting.d.ts +109 -0
  113. package/dist/services/app-setting.d.ts.map +1 -0
  114. package/dist/services/app-setting.js +410 -0
  115. package/dist/services/app-setting.js.map +1 -0
  116. package/dist/services/esb-interface/connector-lock.d.ts +42 -0
  117. package/dist/services/esb-interface/connector-lock.d.ts.map +1 -0
  118. package/dist/services/esb-interface/connector-lock.js +79 -0
  119. package/dist/services/esb-interface/connector-lock.js.map +1 -0
  120. package/dist/services/esb-interface/connector-update.d.ts +34 -0
  121. package/dist/services/esb-interface/connector-update.d.ts.map +1 -0
  122. package/dist/services/esb-interface/connector-update.js +58 -0
  123. package/dist/services/esb-interface/connector-update.js.map +1 -0
  124. package/dist/services/form-association.d.ts +28 -1
  125. package/dist/services/form-association.d.ts.map +1 -1
  126. package/dist/services/form-association.js +232 -2
  127. package/dist/services/form-association.js.map +1 -1
  128. package/dist/services/form-button-action.d.ts +48 -2
  129. package/dist/services/form-button-action.d.ts.map +1 -1
  130. package/dist/services/form-button-action.js +68 -2
  131. package/dist/services/form-button-action.js.map +1 -1
  132. package/dist/services/form-field-options.d.ts +45 -0
  133. package/dist/services/form-field-options.d.ts.map +1 -0
  134. package/dist/services/form-field-options.js +179 -0
  135. package/dist/services/form-field-options.js.map +1 -0
  136. package/dist/services/form-permission-archive.d.ts +1 -0
  137. package/dist/services/form-permission-archive.d.ts.map +1 -1
  138. package/dist/services/form-permission-archive.js +3 -3
  139. package/dist/services/form-permission-archive.js.map +1 -1
  140. package/dist/services/form-permission-edit.d.ts +36 -0
  141. package/dist/services/form-permission-edit.d.ts.map +1 -1
  142. package/dist/services/form-permission-edit.js +77 -1
  143. package/dist/services/form-permission-edit.js.map +1 -1
  144. package/dist/services/icon-catalog.d.ts +60 -0
  145. package/dist/services/icon-catalog.d.ts.map +1 -0
  146. package/dist/services/icon-catalog.js +175 -0
  147. package/dist/services/icon-catalog.js.map +1 -0
  148. package/dist/services/icon-path.d.ts +2 -0
  149. package/dist/services/icon-path.d.ts.map +1 -1
  150. package/dist/services/icon-path.js +4 -0
  151. package/dist/services/icon-path.js.map +1 -1
  152. package/dist/services/menu-config.d.ts +42 -0
  153. package/dist/services/menu-config.d.ts.map +1 -0
  154. package/dist/services/menu-config.js +174 -0
  155. package/dist/services/menu-config.js.map +1 -0
  156. package/dist/services/menu-permission-config.d.ts +47 -0
  157. package/dist/services/menu-permission-config.d.ts.map +1 -0
  158. package/dist/services/menu-permission-config.js +222 -0
  159. package/dist/services/menu-permission-config.js.map +1 -0
  160. package/package.json +1 -1
  161. package/skill-docs/SKILL.md +193 -188
  162. package/skill-docs/_catalog.md +5 -1
  163. package/skill-docs/actionflows/SKILL.md +195 -193
  164. package/skill-docs/actionflows/references/components/calendar/MeetingCreate.md +2 -0
  165. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +5 -1
  166. package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +80 -80
  167. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +75 -75
  168. package/skill-docs/actionflows/references/components/ebuilder/DateTrigger.md +2 -0
  169. package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +113 -111
  170. package/skill-docs/actionflows/references/components/trigger/WebHookTrigger.md +2 -0
  171. package/skill-docs/actionflows/references/condition_rules.md +100 -100
  172. package/skill-docs/references/app/guide-app-manager.md +93 -0
  173. package/skill-docs/references/app/guide-app-settings.md +93 -0
  174. package/skill-docs/references/common/guide-install.md +2 -0
  175. package/skill-docs/references/common/ref-cli-commands.md +22 -7
  176. package/skill-docs/references/form/guide-form-association.md +36 -0
  177. package/skill-docs/references/form/guide-form-button.md +22 -1
  178. package/skill-docs/references/form/guide-form-permission.md +17 -5
  179. package/skill-docs/references/menu/guide-menu-config.md +130 -0
  180. package/skill-docs/references/menu/guide-menu-permission.md +94 -0
@@ -1,100 +1,100 @@
1
- # 条件业务规则
2
-
3
- 仅在需求包含条件、筛选或 if/else 时读取本文件。
4
-
5
- - 用户没有说明条件成立或不成立后要做什么时,不擅自补写更新、删除、通知或其他业务动作。
6
- - 条件的业务含义存在多个合理解释时,向用户确认比较含义与各结果分支的预期动作。
7
- - 条件字段、操作符、值形态的**权威规范(前端 ConditionSet 源码逆向)**见下方「二、ESB filterInput / ConditionSet 右值规范」,来源:工作区 `condition-generator-skill/`(SKILL.md 第 6 章 + references/)。
8
-
9
- ---
10
-
11
- ## 一、筛选条件(filterCondition)plan 写法
12
-
13
- - 单条件:`{"field": {"id": "<目标字段id>", "label": "<字段名>"}, "operator": "<操作符>", "right": {...}}`。`right` 是唯一对外计划字段;不要使用历史别名 `value`。
14
- - 条件组(且/或):`{"relationship": "and|or", "conditions": [ <条件1>, <条件2>, ... ]}`(编译器支持嵌套)。不接受平台输出 DTO 的 `datas` 或 `1/0`。
15
- - `right` 值形态(type):
16
- - `context`:`{"type":"context","paramKey":"<真实paramKey>","label":"<显示名>"}` —— 引用上游上下文(esbAssign.wId 自动指向当前节点)
17
- - `native` + `mode: "currentTime"|"currentDate"|"now"|"today"`:**当前时间/当前日期**。编译器自动改写为系统参数 `{time}`/`{date}`(见下节 6),`conditions.value` 非空、`type:""`,设计器点开筛选器右值区能正常回显,不会出现「右值未配置」(真机验证 2026-08-18)
18
- - `fixed`:普通固定值;字符串为 `{...}` 系统变量时自动识别为 system
19
- - `system`:系统参数 token,如 `{userid}`/`{date}`/`{time}`(由动作流编译器内置 system_params 处理)
20
- - 操作符:`eq/neq/gt/lt/gte/lte/contains/uncontains/empty/nempty`(`empty/nempty` 无右值)
21
- - 日期字段用系统值:直接 `right.value = "{date}"` 或 `{time}`(ESB 体系),无需 `{today}`(那是通用 ConditionSet 的占位符写法,ESB 编译器会归一为 system)
22
-
23
- ## 分支条件(`Condition`)
24
-
25
- 分支条件和 `filterCondition` 共用 AND/OR 业务语义,但保存协议不同,不能互相复制 DTO。
26
-
27
- - **分支位置**:`branches` 写在节点顶层或 `params.branches` 都会被受理(`component-describe Condition` 声明的就是 `params.branches`);归一化后草稿只保留顶层 `branches`。**同一节点不要两处各写一份**——读分支的实现统一走同一入口,两份写法只会让人误判哪份生效。
28
- - 计划用 `condition: { relationship: "and|or", conditions: [...] }`;叶子为 `{left, operator, right}`。顶层 `relationship` 直接作为条件树根关系;编译器不会额外套同关系 AND/OR,只有条件中明确嵌套的规则组才保留子组。
29
- - `left` 只能是当前上游组件的实时字段;`operator` 由字段类型限制,未知或不兼容时编译失败。
30
- - `right` 只用 `fixed`、`system`、`context`,或 `formula` 完整回读对象。`context` 必须写真实 `paramKey`,由运行时生成 FormulaBean;禁止把字段名作为固定值。
31
- - 保存采用 ESB `source=8`:预暂存注册来源节点 → `getConditionSet` → `saveCondition` → 以保存响应回填真实持久化 ID → 最终暂存。新建后 `getExpressionBean` 可能只返回分组骨架,不能覆盖完整 `childrens` 叶子树;`mapBaseId`、`conditionId`、`mapId` 和所有 Long ID 都保持字符串,新建条件不传本地 `conditionId`。
32
-
33
- ## 二、ESB filterInput / ConditionSet 右值规范(源自 condition-generator-skill)
34
-
35
- ESB 动作流的 `filterInput`(TimeBatchTrigger/DateTrigger/数据动作筛选)与通用 ConditionSet 筛选器**结构同源**(`isNewFilter/isParent/datas/relationship/key` + 叶子 `conditions{func,type,value,text}`)。生成条件时遵循以下规范:
36
-
37
- ### 1. 叶子条件结构
38
-
39
- ```json
40
- {
41
- "id": "<字段id>", "fieldName": "<字段英文名>",
42
- "conditions": { "func": "lt", "type": "", "value": "{time}", "text": "当前时间" }
43
- }
44
- ```
45
-
46
- `fieldType/text/objId/compType` 等元信息由编译器按真实字段补全(`buildFilterInput`),**plan 里不写**。对于关联字段,编译器必须保留平台所需的真实 `sformId`;`refObjId` 仅在该组件的正式 DTO 要求时保留,不能把它作为所有关联字段的统一必填项,也不能只写字段 ID或把表单版本 `formId` 当作关联对象身份,否则保存后设计器可能显示“字段已删除”。
47
-
48
- 其中 Workflow 字段要区分两种 ID:`formInfo.formId` 是当前目标表单的版本 ID;顶层 `sformId` 是该字段关联的流程表单对象 ID。正式回读的 Workflow DTO 使用原始数字 `fieldName`、`fieldType:"String"`、空 `module`/`originBrowserType`,`config` 只保留 `fieldId`;不能按普通 e-builder 业务字段加 `field_` 前缀,也不能把组件名 `Workflow` 当作存储类型。`refObjId` 对 Workflow 不是必填。若实时字段接口没有返回 Workflow 的关联对象,预检必须根据当前 `workflowPath.formIds` 在同一应用的表单列表中反查对象 ID,并把目标表 `getFormLayout` 返回的默认布局 ID写入 `formInfo.layoutId`。反查不到时应报错停止,不能用目标表单版本 ID兜底。
49
-
50
- ### 2. 值类型 `conditions.type` 枚举
51
-
52
- | type | 含义 | 适用 |
53
- |---|---|---|
54
- | `""` | 手动输入 / 选选项 / **系统值** | 文本/数值直接输入、选择框选选项、**日期选系统占位符** |
55
- | `"custom"` | 专用选择器 / 选择框手动输入 | 人员/部门/级联/地区/Select 手动输入;**日期 range 模式推荐**(渲染日期选择器) |
56
- | `"custombyhander"` | 手动输入(浏览器类组件) | 人员/部门/关联字段/文档/附件 |
57
- | `"formField"` | 引用本表/关联表字段值 | 所有类型(value 含 `compareFormField`,必须含 `objId`+`name` 否则回显空白) |
58
- | `"varField"` | 引用系统/流程变量 | 所有类型(value 含 `compareVarField`,`id` 必须是真实变量 id 否则回显空白) |
59
- | `"filterVal"` | 引用其他筛选组件搜索值 | 文本/数值/日期 |
60
-
61
- ### 3. 系统日期占位符(通用 ConditionSet 写法,type 为 `""`)
62
-
63
- | 占位符 | 含义 |
64
- |---|---|
65
- | `{today}` | 当前日期 |
66
- | `{yesterday}` / `{tomorrow}` | 昨天 / 明天 |
67
- | `{currweek}` / `{lastweek}` / `{nextweek}` | 本周 / 上周 / 下周 |
68
- | `{currmonth}` / `{lastmonth}` / `{nextmonth}` | 本月 / 上月 / 下月 |
69
- | `{currseason}` / `{lastseason}` / `{nextseason}` | 本季 / 上季 / 下季 |
70
- | `{curryear}` / `{lastyear}` / `{nextyear}` | 本年 / 去年 / 明年 |
71
-
72
- 自定义日期占位符(type `"custom"`,后端 `handleValue` 识别):`{year}`(本年区间)、`{year}-{month}`(当月区间)、`{date:±N}`(今天±N 天)。
73
-
74
- > **ESB 差异**:ESB 动作流的系统值 token 由编译器内置 system_params 处理(`{date}`=当前日期、`{time}`=当前时刻、`{userid}` 等);通用 ConditionSet 的 `{today}` 等占位符在 ESB filterInput 中由编译器归一(native `currentTime/currentDate/now/today` → `{time}`/`{date}`),生成时两者皆可,编译器兜底。
75
-
76
- ### 4. func 操作符
77
-
78
- | func | 含义 | 适用 |
79
- |---|---|---|
80
- | `eq`/`neq` | 等于/不等于 | 所有 |
81
- | `gt`/`lt`/`gte`/`lte` | 大于/小于/大于等于/小于等于 | 数值、日期 |
82
- | `range` | 区间(value 为 `[起始,结束]`) | 数值、日期 |
83
- | `contains`/`uncontains` | 包含/不包含 | 文本 |
84
- | `empty`/`nempty` | 为空/不为空(无右值) | 所有 |
85
-
86
- ### 5. 字段类型 × 值类型速查
87
-
88
- - 文本(String/Text/TextArea):type `""`、`formField`、`varField`、`filterVal`;无 `custombyhander`
89
- - 数值(Number/NumberComponent):type `""`(含 range)、`formField`、`varField`、`filterVal`;**无 `custombyhander`**
90
- - 日期(Date/DateComponent/DateInterval):type `""`(手动输入/系统日期)、`"custom"`(手动输入,range 推荐)、`"customDate"`(仅宿主注入回调时可用,**默认不用**)、`formField`、`varField`、`filterVal`
91
- - 选择框(Select/RadioBox/CheckBox):type `""`(选选项,value 逗号分隔)、`"custom"`(手动输入)、`formField`、`varField`
92
- - 人员(Employee)/部门(Department):type `""`(系统选项)、`"custom"`(选人/选部门)、`"custombyhander"`、`formField`、`varField`
93
-
94
- ### 6. 「当前时间」筛选的正确表达(真机验证 2026-08-18)
95
-
96
- ESB TimeBatchTrigger/DateTrigger 等定时器的 `filterCondition` 用「字段 < 当前时间」时:
97
-
98
- - plan 写:`{"field": {"id": "<日期字段id>", "label": "<字段名>"}, "operator": "lt", "right": {"type": "native", "mode": "currentTime", "label": "当前时间"}}`
99
- - 编译器把 `native currentTime/now/current_time` 改写为系统参数 `{time}`(`currentDate/today/current_date` → `{date}`),落到 system 路径
100
- - 读回后 `conditions = {"func":"lt","text":"当前时间","value":"{time}","type":"","isEsb":false}` —— value 非空,设计器点开筛选器右值区正常回显「当前时间」,**不会空**(此前直接透传 `type:"currentTime"` + `value:""` 导致点进去右值区空白,外部摘要正常)
1
+ # 条件业务规则
2
+
3
+ 仅在需求包含条件、筛选或 if/else 时读取本文件。
4
+
5
+ - 用户没有说明条件成立或不成立后要做什么时,不擅自补写更新、删除、通知或其他业务动作。
6
+ - 条件的业务含义存在多个合理解释时,向用户确认比较含义与各结果分支的预期动作。
7
+ - 条件字段、操作符、值形态的**权威规范(前端 ConditionSet 源码逆向)**见下方「二、ESB filterInput / ConditionSet 右值规范」,来源:工作区 `condition-generator-skill/`(SKILL.md 第 6 章 + references/)。
8
+
9
+ ---
10
+
11
+ ## 一、筛选条件(filterCondition)plan 写法
12
+
13
+ - 单条件:`{"field": {"id": "<目标字段id>", "label": "<字段名>"}, "operator": "<操作符>", "right": {...}}`。`right` 是唯一对外计划字段;不要使用历史别名 `value`。
14
+ - 条件组(且/或):`{"relationship": "and|or", "conditions": [ <条件1>, <条件2>, ... ]}`(编译器支持嵌套)。不接受平台输出 DTO 的 `datas` 或 `1/0`。
15
+ - `right` 值形态(type):
16
+ - `context`:`{"type":"context","paramKey":"<真实paramKey>","label":"<显示名>"}` —— 引用上游上下文(esbAssign.wId 自动指向当前节点)
17
+ - `native` + `mode: "currentTime"|"currentDate"|"now"|"today"`:**当前时间/当前日期**。编译器自动改写为系统参数 `{time}`/`{date}`(见下节 6),`conditions.value` 非空、`type:""`,设计器点开筛选器右值区能正常回显,不会出现「右值未配置」(真机验证 2026-08-18)
18
+ - `fixed`:普通固定值;字符串为 `{...}` 系统变量时自动识别为 system
19
+ - `system`:系统参数 token,如 `{userid}`/`{date}`/`{time}`(由动作流编译器内置 system_params 处理)
20
+ - 操作符:`eq/neq/gt/lt/gte/lte/contains/uncontains/empty/nempty`(`empty/nempty` 无右值)
21
+ - 日期字段用系统值:直接 `right.value = "{date}"` 或 `{time}`(ESB 体系),无需 `{today}`(那是通用 ConditionSet 的占位符写法,ESB 编译器会归一为 system)
22
+
23
+ ## 分支条件(`Condition`)
24
+
25
+ 分支条件和 `filterCondition` 共用 AND/OR 业务语义,但保存协议不同,不能互相复制 DTO。
26
+
27
+ - **分支位置**:`branches` 写在节点顶层或 `params.branches` 都会被受理(`component-describe Condition` 声明的就是 `params.branches`);归一化后草稿只保留顶层 `branches`。**同一节点不要两处各写一份**——读分支的实现统一走同一入口,两份写法只会让人误判哪份生效。
28
+ - 计划用 `condition: { relationship: "and|or", conditions: [...] }`;叶子为 `{left, operator, right}`。顶层 `relationship` 直接作为条件树根关系;编译器不会额外套同关系 AND/OR,只有条件中明确嵌套的规则组才保留子组。
29
+ - `left` 只能是当前上游组件的实时字段;`operator` 由字段类型限制,未知或不兼容时编译失败。
30
+ - `right` 只用 `fixed`、`system`、`context`,或 `formula` 完整回读对象。`context` 必须写真实 `paramKey`,由运行时生成 FormulaBean;禁止把字段名作为固定值。
31
+ - 保存采用 ESB `source=8`:预暂存注册来源节点 → `getConditionSet` → `saveCondition` → 以保存响应回填真实持久化 ID → 最终暂存。新建后 `getExpressionBean` 可能只返回分组骨架,不能覆盖完整 `childrens` 叶子树;`mapBaseId`、`conditionId`、`mapId` 和所有 Long ID 都保持字符串,新建条件不传本地 `conditionId`。
32
+
33
+ ## 二、ESB filterInput / ConditionSet 右值规范(源自 condition-generator-skill)
34
+
35
+ ESB 动作流的 `filterInput`(TimeBatchTrigger/DateTrigger/数据动作筛选)与通用 ConditionSet 筛选器**结构同源**(`isNewFilter/isParent/datas/relationship/key` + 叶子 `conditions{func,type,value,text}`)。生成条件时遵循以下规范:
36
+
37
+ ### 1. 叶子条件结构
38
+
39
+ ```json
40
+ {
41
+ "id": "<字段id>", "fieldName": "<字段英文名>",
42
+ "conditions": { "func": "lt", "type": "", "value": "{time}", "text": "当前时间" }
43
+ }
44
+ ```
45
+
46
+ `fieldType/text/objId/compType` 等元信息由编译器按真实字段补全(`buildFilterInput`),**plan 里不写**。对于关联字段,编译器必须保留平台所需的真实 `sformId`;`refObjId` 仅在该组件的正式 DTO 要求时保留,不能把它作为所有关联字段的统一必填项,也不能只写字段 ID或把表单版本 `formId` 当作关联对象身份,否则保存后设计器可能显示“字段已删除”。
47
+
48
+ 其中 Workflow 字段要区分两种 ID:`formInfo.formId` 是当前目标表单的版本 ID;顶层 `sformId` 是该字段关联的流程表单对象 ID。正式回读的 Workflow DTO 使用原始数字 `fieldName`、`fieldType:"String"`、空 `module`/`originBrowserType`,`config` 只保留 `fieldId`;不得自行拼接字段前缀,也不能把组件名 `Workflow` 当作存储类型。`refObjId` 对 Workflow 不是必填。若实时字段接口没有返回 Workflow 的关联对象,预检必须根据当前 `workflowPath.formIds` 在同一应用的表单列表中反查对象 ID,并把目标表 `getFormLayout` 返回的默认布局 ID写入 `formInfo.layoutId`。反查不到时应报错停止,不能用目标表单版本 ID兜底。
49
+
50
+ ### 2. 值类型 `conditions.type` 枚举
51
+
52
+ | type | 含义 | 适用 |
53
+ |---|---|---|
54
+ | `""` | 手动输入 / 选选项 / **系统值** | 文本/数值直接输入、选择框选选项、**日期选系统占位符** |
55
+ | `"custom"` | 专用选择器 / 选择框手动输入 | 人员/部门/级联/地区/Select 手动输入;**日期 range 模式推荐**(渲染日期选择器) |
56
+ | `"custombyhander"` | 手动输入(浏览器类组件) | 人员/部门/关联字段/文档/附件 |
57
+ | `"formField"` | 引用本表/关联表字段值 | 所有类型(value 含 `compareFormField`,必须含 `objId`+`name` 否则回显空白) |
58
+ | `"varField"` | 引用系统/流程变量 | 所有类型(value 含 `compareVarField`,`id` 必须是真实变量 id 否则回显空白) |
59
+ | `"filterVal"` | 引用其他筛选组件搜索值 | 文本/数值/日期 |
60
+
61
+ ### 3. 系统日期占位符(通用 ConditionSet 写法,type 为 `""`)
62
+
63
+ | 占位符 | 含义 |
64
+ |---|---|
65
+ | `{today}` | 当前日期 |
66
+ | `{yesterday}` / `{tomorrow}` | 昨天 / 明天 |
67
+ | `{currweek}` / `{lastweek}` / `{nextweek}` | 本周 / 上周 / 下周 |
68
+ | `{currmonth}` / `{lastmonth}` / `{nextmonth}` | 本月 / 上月 / 下月 |
69
+ | `{currseason}` / `{lastseason}` / `{nextseason}` | 本季 / 上季 / 下季 |
70
+ | `{curryear}` / `{lastyear}` / `{nextyear}` | 本年 / 去年 / 明年 |
71
+
72
+ 自定义日期占位符(type `"custom"`,后端 `handleValue` 识别):`{year}`(本年区间)、`{year}-{month}`(当月区间)、`{date:±N}`(今天±N 天)。
73
+
74
+ > **ESB 差异**:ESB 动作流的系统值 token 由编译器内置 system_params 处理(`{date}`=当前日期、`{time}`=当前时刻、`{userid}` 等);通用 ConditionSet 的 `{today}` 等占位符在 ESB filterInput 中由编译器归一(native `currentTime/currentDate/now/today` → `{time}`/`{date}`),生成时两者皆可,编译器兜底。
75
+
76
+ ### 4. func 操作符
77
+
78
+ | func | 含义 | 适用 |
79
+ |---|---|---|
80
+ | `eq`/`neq` | 等于/不等于 | 所有 |
81
+ | `gt`/`lt`/`gte`/`lte` | 大于/小于/大于等于/小于等于 | 数值、日期 |
82
+ | `range` | 区间(value 为 `[起始,结束]`) | 数值、日期 |
83
+ | `contains`/`uncontains` | 包含/不包含 | 文本 |
84
+ | `empty`/`nempty` | 为空/不为空(无右值) | 所有 |
85
+
86
+ ### 5. 字段类型 × 值类型速查
87
+
88
+ - 文本(String/Text/TextArea):type `""`、`formField`、`varField`、`filterVal`;无 `custombyhander`
89
+ - 数值(Number/NumberComponent):type `""`(含 range)、`formField`、`varField`、`filterVal`;**无 `custombyhander`**
90
+ - 日期(Date/DateComponent/DateInterval):type `""`(手动输入/系统日期)、`"custom"`(手动输入,range 推荐)、`"customDate"`(仅宿主注入回调时可用,**默认不用**)、`formField`、`varField`、`filterVal`
91
+ - 选择框(Select/RadioBox/CheckBox):type `""`(选选项,value 逗号分隔)、`"custom"`(手动输入)、`formField`、`varField`
92
+ - 人员(Employee)/部门(Department):type `""`(系统选项)、`"custom"`(选人/选部门)、`"custombyhander"`、`formField`、`varField`
93
+
94
+ ### 6. 「当前时间」筛选的正确表达(真机验证 2026-08-18)
95
+
96
+ ESB TimeBatchTrigger/DateTrigger 等定时器的 `filterCondition` 用「字段 < 当前时间」时:
97
+
98
+ - plan 写:`{"field": {"id": "<日期字段id>", "label": "<字段名>"}, "operator": "lt", "right": {"type": "native", "mode": "currentTime", "label": "当前时间"}}`
99
+ - 编译器把 `native currentTime/now/current_time` 改写为系统参数 `{time}`(`currentDate/today/current_date` → `{date}`),落到 system 路径
100
+ - 读回后 `conditions = {"func":"lt","text":"当前时间","value":"{time}","type":"","isEsb":false}` —— value 非空,设计器点开筛选器右值区正常回显「当前时间」,**不会空**(此前直接透传 `type:"currentTime"` + `value:""` 导致点进去右值区空白,外部摘要正常)
@@ -0,0 +1,93 @@
1
+ # 应用管理权限:管理对象 + 内联权限分组
2
+
3
+ 对应应用设置页「应用权限 → 应用管理权限」。它管两样东西:
4
+
5
+ 1. **管理对象**:谁能维护这个应用(管理权限名单)。
6
+ 2. **内联权限分组**:应用管理权限面板里的「添加分组」,把一组人/部门/角色/岗位/所有人
7
+ 打包成一个分组,再给这个分组勾选表单/页面/报表/流程等权限。
8
+
9
+ > ⚠️ 它**不是**左侧设置菜单里的独立「权限组」页。
10
+ > 独立权限组走 `/api/bs/ebuilder/app/permission/group/*`,是另一套系统组/自定义组、成员、
11
+ > 功能权限与数据权限;CLI 尚未提供那套命令。
12
+
13
+ ## 一、管理对象
14
+
15
+ ```bash
16
+ e10-cli app manager list <appId>
17
+ e10-cli app manager add <appId> <目标...> --type user|dept|role|position|all
18
+ e10-cli app manager remove <appId> <目标...> --type user|dept|role|position|all
19
+ ```
20
+
21
+ - 目标可写名称或 ID;人员/部门/角色/岗位同名多条会报错并要求改用 ID。
22
+ - `--type all` 时可省略目标,等价于「所有人」。
23
+ - 加/删都是**读全量 → 只增删点名对象 → 整组回写 → 回读确认**;已有对象原样保留。
24
+ - 重复添加已存在的对象直接提示「已是目标状态」,不发写请求;移除不存在的对象会报错。
25
+
26
+ 示例:
27
+
28
+ ```bash
29
+ e10-cli app manager list 1234567890123456789
30
+ e10-cli app manager add 1234567890123456789 张三 --type user
31
+ e10-cli app manager add 1234567890123456789 运营部 --type dept
32
+ e10-cli app manager remove 1234567890123456789 张三 --type user
33
+ ```
34
+
35
+ ## 二、内联权限分组
36
+
37
+ ```bash
38
+ e10-cli app manager group list <appId>
39
+ e10-cli app manager group add <appId> --name <名称> [--desc <描述>] [--group-type CUSTOM|DEVELOP|READONLY]
40
+ e10-cli app manager group update <appId> <分组id|名称> [--name] [--desc] [--group-type]
41
+ e10-cli app manager group delete <appId> <分组id|名称>
42
+ ```
43
+
44
+ 分组类型:
45
+
46
+ | 值 | 含义 |
47
+ |---|---|
48
+ | `CUSTOM` | 自定义(缺省) |
49
+ | `DEVELOP` | 开发者 |
50
+ | `READONLY` | 查看者 |
51
+
52
+ - 新建分组的「功能权限」先用全关模板落库;需要具体权限时在平台界面里勾选后保存。
53
+ - 分组名在同应用内必须唯一;同名多条时更新/删除请改用分组 id。
54
+ - 保存走 `app/setting/publish/save`,和「应用设置」同一族;命令会自动带上
55
+ `teamworkStatus`、`manageDetach`、`fieldPermissionSwitch`、`messageInfo` 等基线字段,
56
+ 避免把应用设置顺手改坏。
57
+
58
+ ## 三、分组成员
59
+
60
+ ```bash
61
+ e10-cli app manager group member list <appId> <分组id|名称>
62
+ e10-cli app manager group member add <appId> <分组id|名称> <目标...> --type user|dept|role|position|all
63
+ e10-cli app manager group member remove <appId> <分组id|名称> <目标...> --type user|dept|role|position|all
64
+ ```
65
+
66
+ 成员对象类型与管理对象一致;加/删只动目标成员,分组名称、描述、类型、功能权限配置原样保留。
67
+
68
+ ## 四、平台编码(改动时注意)
69
+
70
+ - 管理对象写接口 `editRight` 的 `rights` 是**整组替换**,每条 `targetType` 必须用
71
+ **字符串枚举**:`USER` / `DEPT` / `ROLE` / `POSITION` / `ALL`。
72
+ 传数字会被另一套枚举解析,人员可能被静默写成部门/岗位。
73
+ - 读回是数字(人员=1、部门=2、角色=10、岗位=1311、所有人=11),命令会按 `_entityType`
74
+ 优先还原成字符串再回写。
75
+ - 回写时只带 `sourceId / permissionId(view) / rightType(VIEW) / permissionType(3) /
76
+ targetType / targetId / targetName / permissionTargetType / isCustom / sourceType /
77
+ download / shareKey` 及已有的等级字段;**不要把 `browserType`、`objType`、`obj_id`
78
+ 等回显字段塞回去**,否则平台可能解析失败或写成别的对象。
79
+
80
+ ## 五、命令一览
81
+
82
+ | 命令 | 说明 |
83
+ |---|---|
84
+ | `app manager list <appId>` | 列出管理对象 |
85
+ | `app manager add <appId> <目标...> --type …` | 添加管理对象 |
86
+ | `app manager remove <appId> <目标...> --type …` | 移除管理对象 |
87
+ | `app manager group list <appId>` | 列出内联权限分组 |
88
+ | `app manager group add <appId> --name …` | 新建内联权限分组 |
89
+ | `app manager group update <appId> <分组> [--name/--desc/--group-type]` | 编辑分组 |
90
+ | `app manager group delete <appId> <分组>` | 删除分组 |
91
+ | `app manager group member list <appId> <分组>` | 列出分组成员 |
92
+ | `app manager group member add <appId> <分组> <目标...> --type …` | 添加分组成员 |
93
+ | `app manager group member remove <appId> <分组> <目标...> --type …` | 移除分组成员 |
@@ -0,0 +1,93 @@
1
+ # 应用设置:菜单展示方式 / 默认首页 / 字段权限
2
+
3
+ `app setting` 改的是**应用设置页**里的配置(`publishInfo` 层),
4
+ 不是 `app publish-info` 改的「前台已发布应用」那份 `sysMenus`,也不是 `app range` 改的
5
+ 前台使用范围。三者的存储和接口都不一样,别混用。
6
+
7
+ ## 一、命令
8
+
9
+ ```bash
10
+ # 查看
11
+ e10-cli app setting get <appId>
12
+ e10-cli app setting get <appId> --json
13
+
14
+ # 修改(只写点名项,保存后回读校验)
15
+ e10-cli app setting set <appId> \
16
+ --pc-show none \
17
+ --pc-multi-menu collapse \
18
+ --pc-home 首页 \
19
+ --mobile-show display \
20
+ --mobile-home 首页 \
21
+ --field-permission on
22
+ ```
23
+
24
+ ## 二、菜单设置
25
+
26
+ | 选项 | 平台键 | 取值 |
27
+ |---|---|---|
28
+ | `--pc-show <v>` / `--mobile-show <v>` | `navigation.pc/mobile.showType` | `display`=默认显示(1) / `hide`=隐藏(0) / `none`=不显示(-1) |
29
+ | `--pc-multi-menu <v>` / `--mobile-multi-menu <v>` | `navigation.pc/mobile.multiMenu` | `expand`=全部展开(1) / `collapse`=全部收起(2,缺省) |
30
+ | `--pc-home <page>` / `--mobile-home <page>` | `homepageId/homepageType/homepageName` | pageId 或页面名;`none` 清除 |
31
+ | `--pc-home-type <t>` / `--mobile-home-type <t>` | `homepageType` | 缺省按页面列表推断为 `PAGE`;内置页 `SHARELIST`/`FOLLOWLIST` 用 `BASE` |
32
+ | `--pc-home-name <n>` / `--mobile-home-name <n>` | `homepageName` | 缺省按页面列表推断 |
33
+ | `--pc-home-params <json>` / `--mobile-home-params <json>` | `homepageParams` | 可选,JSON |
34
+ | `--pc-home-url <url>` / `--mobile-home-url <url>` | `homepageUrl` | 一般不用给 |
35
+
36
+ 说明:
37
+
38
+ - **默认首页只在 `showType=none`(不显示)时有意义**。把菜单改回 `display`/`hide` 不会自动清掉首页;
39
+ 要清就显式传 `--pc-home none` / `--mobile-home none`。
40
+ - 页面名匹配不到或同名多条会报错并列 pageId;内置页(如 `SHARELIST`)不在页面列表里,
41
+ 需同时给 `--*-home-type BASE --*-home-name "共享给我的"`。
42
+ - 移动端 `multiMenu` 平台 UI 没有暴露,但数据模型支持;CLI 保留该选项,保存后会回读。
43
+
44
+ ## 三、字段权限
45
+
46
+ ```bash
47
+ e10-cli app setting set <appId> --field-permission on
48
+ e10-cli app setting set <appId> --field-permission off
49
+ ```
50
+
51
+ 对应 `publishInfo.fieldPermissionSwitch`(1/0)。开启后,应用下各表单的权限页才会出现
52
+ 「字段权限」入口;它**不等于** `form permission` 里的字段级授权本身。
53
+
54
+ ## 四、保存行为与坑
55
+
56
+ - 读:`GET /api/bs/ebuilder/app/setting/publish/info?appId=`。
57
+ - 写:`POST /api/bs/ebuilder/app/setting/publish/save?appId=`,**JSON body**。
58
+ - **必须走 JSON**。form-urlencoded 会回 `{"code":500,"msg":"系统错误"}`。
59
+ - `teamworkStatus` 是必填,缺了会 500。
60
+ - `manageDetach` 缺了会被平台重置成 `false`;因此即使本次不改它,命令也会带上当前值。
61
+ - `messageInfo` 必须是 **JSON 字符串**;直接发对象会 500。
62
+ - `navigation` 也是 JSON 字符串;保存前会剔除菜单里的 `createTime/creator/deleteType/tenantKey/updateTime`。
63
+ - 命令只发点名项(外加上述必须保留的基线字段),不会整份回写权限/访问范围;
64
+ 保存后回读校验:目标值必须一致,菜单、管理权限、内联权限分组、访问范围不能被顺手清掉。
65
+ - 值本来就一致时不发保存请求,直接提示「已经是目标值」。
66
+
67
+ ## 五、和相邻命令的区别
68
+
69
+ | 命令 | 改什么 | 存储 |
70
+ |---|---|---|
71
+ | `app setting` | 应用设置页:菜单展示方式 / 默认首页 / 字段权限开关 | `publishInfo`(`/app/setting/publish/*`) |
72
+ | `app publish-info` | 前台已发布应用的显示名/简称/简介/适用端/分类 | `saveCustomApplication` 的 `sysMenus` |
73
+ | `app range` | 前台已发布应用的使用范围(PC/移动端) | `appmanage/permission/table/*`,定位 `amId` |
74
+ | `menu` / `menu permission` | 菜单项本身、菜单项可见范围 | `savePublishMenu` / `permissionForm` |
75
+ | `form permission` / `page permission` / `report permission` | 单资源的权限 | 各自的权限接口 |
76
+
77
+ ## 六、示例
78
+
79
+ ```bash
80
+ # PC 端不显示菜单,默认落到「首页」页面
81
+ e10-cli app setting set <appId> --pc-show none --pc-home 首页
82
+
83
+ # 移动端不显示菜单,默认首页用内置页
84
+ e10-cli app setting set <appId> \
85
+ --mobile-show none \
86
+ --mobile-home SHARELIST --mobile-home-type BASE --mobile-home-name "共享给我的"
87
+
88
+ # 恢复 PC 菜单为默认显示,并清掉默认首页
89
+ e10-cli app setting set <appId> --pc-show display --pc-home none
90
+
91
+ # 开启字段权限
92
+ e10-cli app setting set <appId> --field-permission on
93
+ ```
@@ -32,6 +32,8 @@ npx -y skills add ./weaver-e10-builder.zip --skill -y
32
32
 
33
33
  1.1.0 起发布的 skill 是**薄指令层**:只带 SKILL.md、`_catalog.md`、actionflows 指令层和 scripts,不含深目录文档树(适配 marketplace 两级目录限制)。完整文档随配套 CLI 的 `skill-docs` 分发。
34
34
 
35
+ 薄层 zip 的**根目录另带 `INSTALL.md`**,新用户还没装 CLI、本文件(`references/common/guide-install.md`)尚未同步时,先按 `INSTALL.md` 装 CLI;装好后跑一次 `e10-cli auth status` 即可拿到本文档。
36
+
35
37
  - 每次 `e10-cli auth status` 会自动探测本机已装 skill(`~/.claude/skills`、`~/.workbuddy/skills`、`~/.codex/skills`)并同步文档;版本一致则跳过。
36
38
  - 手动刷新:`e10-cli skill sync`;可 `--target <安装根目录>` 指定其他工具目录。
37
39
  - 装完 skill 后看到 references 文档多出/更新、旧文档被清理,都是正常的同步现象,不是装错或重复安装。
@@ -62,6 +62,11 @@
62
62
  | `e10-cli app folder [--type 1/2/3]` | 查看应用目录结构(文件夹+应用树,含发布状态)。1=我管理的/2=我创建的/3=全部 |
63
63
  | `e10-cli app read <appId>` | 查看应用**详情**(全量配置:名称/描述/简称/范围/目录/组织/发布状态)。`--json` 输出完整对象。走 `/app/info` |
64
64
  | `e10-cli app edit <appId> [--name] [--desc] [--short-name]` | 编辑应用信息(至少指定一个写参数;内部先读 `/app/info` 再合并提交) |
65
+ | `e10-cli app setting get <appId>` | 查看**应用设置页**的菜单展示方式、默认首页、字段权限开关(`publishInfo` 层,不是前台发布配置) |
66
+ | `e10-cli app setting set <appId> [--pc-show display\|hide\|none] [--pc-multi-menu expand\|collapse] [--pc-home <pageId\|页面名\|none>] [--mobile-show …] [--mobile-home …] [--field-permission on\|off]` | 修改应用设置。只写点名项,保存后回读;`teamworkStatus` 必填、`manageDetach` 缺了会被重置,命令会自动带上这两个基线值。`--*-home-type/name/params/url` 需与 `--*-home` 同用;内置页用 `type=BASE` |
67
+ | `e10-cli app manager list\|add\|remove <appId> [目标...] --type user\|dept\|role\|position\|all` | 应用**管理对象**(谁能维护这个应用)。读全量 → 只增删点名对象 → 整组回写 → 回读;重复添加幂等、移除不存在报错。`--type all` 可省略目标 |
68
+ | `e10-cli app manager group list\|add\|update\|delete <appId> [分组] [--name/--desc/--group-type CUSTOM\|DEVELOP\|READONLY]` | 应用管理权限面板里的**内联权限分组**(`publishInfo.rightGroupList`)。**不是**独立「权限组」页;同名分组报错,更新/删除可传 id |
69
+ | `e10-cli app manager group member list\|add\|remove <appId> <分组> [目标...] --type …` | 内联权限分组的成员;加/删只动目标成员,分组配置原样保留 |
65
70
  | `e10-cli app delete <appId>` | 删除应用(软删除,可恢复;存在关联资源会提示先清理) |
66
71
  | `e10-cli app enable <appId>` | 启用应用。`read` 里的 `publishEnabled`:1=已启用 / 2=已停用 / 0=从未启用 |
67
72
  | `e10-cli app disable <appId>` | 停用应用。⚠ **会连带收回已发布到前台的入口** —— 不是「临时关一下、发布态还在」 |
@@ -114,7 +119,7 @@
114
119
  | `e10-cli form permission create <add\|update\|show> <objId> <appId> [--right-id <id>] --org-type <类型> [--org-id <id>] [--org-name <名>] [设置项]` | **创建权限**(谁能新建记录)。通用对象支持 all/employee/department/company/role/group/post/partTime/grade/external/externalAll;`all`/`externalAll` 的 orgId 自动 0。`update` 只改点名项并整行回写;`show` 查看布局/优先级/描述/条件/同步列表。设置项见下一行 |
115
120
  | `e10-cli form permission data <add\|update\|show> <objId> <appId> [--right-id <id>] --target <general\|creator\|field\|matrix\|govern> --rights <view/edit/delete/comment...> [设置项]` | **共享权限**(查看/编辑/删除/评论;`1/2/3/4`)。`general` 通用对象(同上 11 种类型);`creator --creator-related 0~7` 创建人相关;`field --field <字段id或名>` 字段相关(`--sub-form-id` 支持明细字段);`matrix --matrix <矩阵>` 或 `--eb-form <e-Builder表单>` + `--matrix-value`/`--matrix-value-raw`/`--matrix-condition-raw`;`govern --govern-json <json>` 政务单位相关。附件 `--file-rights view/download/edit`(401/402/403)与 `--file-right-type temporary\|insert`(临时/插入赋权)。保存后按权限 ID 回读核对。详见 `form/guide-form-permission.md` |
116
121
  | 权限通用设置(`create` / `data` 的 `add\|update`) | `--layout` / `--edit-layout` / `--mobile-layout` / `--mobile-edit-layout`(关联 PC、编辑、移动、移动编辑布局)、`--same-layout on\|off`(PC 移动统一布局)、`--layout-order <n>`(优先级,0 最高)、`--desc <文本>` / `--desc-label-id`(权限描述)、`--condition <json\|@file>` / `--clear-condition`(权限条件,写入前按平台算法压缩)、`--org-virtual-type`(组织维度)、`--contain-extra on\|off`(含兼职人员)、`--min-seclevel` / `--max-seclevel`(安全级别 0~100)、`--exclude-obj <json\|@file>`(排除项)、`--sync-forms <objId...>`(同步至其他表单,整体替换)。修改只改点名项;未点名的布局、条件、同步列表原样保留 |
117
- | `e10-cli form permission imp-exp <list\|add\|update\|show> <objId> <appId> [--right-id <id>] ...` | **导入导出权限**(独立分类 `data_imp_exp`,⚠ 勿用 `data add` 加——共享权限只有 查看/编辑/删除 三种,导出/导入不在其中)。`list` 查看;`add/update --org-type <类型> [--org-id] --rights <export/import/delete-import...> [--update-import] [--export-details] [--export-attachment] [--export-field-range listShowField\|allField]`;`show` 查看单条。`export=8`、`import=9`、`delete-import=93`(93 须与 import 同选,自动带更新导入);授权对象与共享权限同一套 11 种通用对象(含兼职岗位/职级/外部联系人/所有外部联系人)。保存后按权限 ID 回读 `impRightList` 校验;修改只改点名项。删除同 `permission remove --right-id`。不支持权限描述/更新导入校验数据编辑权限/导入关联布局/优先级/同步至其他表单 |
122
+ | `e10-cli form permission imp-exp <list\|add\|update\|show> <objId> <appId> [--right-id <id>] ...` | **导入导出权限**(独立分类,⚠ 勿用 `data add` 加——共享权限只有 查看/编辑/删除 三种,导出/导入不在其中)。`list` 查看;`add/update` 支持两类授权对象:`--target general`(默认,`codeType=data_imp_exp`)+ `--org-type <类型> [--org-id]`,或 `--target matrix`(`codeType=data_imp_exp_matrix`)+ `--matrix <矩阵id或名称>` / `--eb-form <表单id或名称>`、`--matrix-value <取值字段...>`(或 `--matrix-value-raw` / `--matrix-condition-raw`);`--rights <export/import/delete-import...> [--update-import] [--export-details] [--export-attachment] [--export-field-range listShowField\|allField]`;`show` 查看单条。`export=8`、`import=9`、`delete-import=93`(93 须与 import 同选,自动带更新导入);通用对象与共享权限同一套 11 种对象(含兼职岗位/职级/外部联系人/所有外部联系人)。保存后按权限 ID 回读 `impRightList` 校验(矩阵两键按语义比对);修改只改点名项,并原样保留已有的权限描述/导入关联布局(`rightDesc`/`layoutId` 等,防止被更新报文清空)。删除同 `permission remove --right-id`。不支持配置权限描述/更新导入校验数据编辑权限/导入关联布局/优先级/同步至其他表单 |
118
123
  | `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`(e-Builder 表单按名取它自己的人员字段/创建者,人员字段 valueType=resource),另可加**矩阵条件**(e-Builder 表单的条件列自动取该表单主表字段) `--matrix-condition '<json>'`(可重复 / `@文件` 给数组;右值三选一 `value` 固定值 / `field` 引本表单字段 / `fieldRef` 直给字段描述符)+ `--matrix-condition-relation and\|or`。权限码 `5/view` 归档查看、`6/edit` 归档编辑、`7/delete` 归档删除(**归档查看是系统默认必选,界面不可取消;`--rights` 没传 view 会自动并入**);归档附件另算 `501/view`、`502/download`、`503/edit`(**不是**共享权限的 401/402;**归档附件查看 501 同属系统必选,不给 `--file-rights` 也会带上**)。保存后按 ID 回读逐项核对;`card <workflowId> <appId> [--set 0\|1]` 读写归档卡片开关。详见 `form/guide-form-archive-permission.md` |
119
124
  | `e10-cli form permission <list\|add\|remove\|rebuild> <objId> <appId>` | 权限通用管理及兼容入口。新建权限与数据权限分开;旧 `add --right-type` 保留兼容。`list` 查看全部分类;`remove --right-id <id[,id...]>` 删除一条或多条权限;添加后提示 `isShowRebuild=2` 时执行 `rebuild` |
120
125
  | `e10-cli form list-view <objId> <appId>` | 查看台账/数据列表(获取 viewId 用于菜单配置) |
@@ -208,10 +213,10 @@
208
213
  | 命令 | 说明 |
209
214
  |------|------|
210
215
  | `e10-cli form button list <objId> <appId>` | 列出所有按钮 |
211
- | `e10-cli form button add <objId> <appId> <name> [--url <url>\|--open-view <视图>\|--open-layout <表单>\|--start-workflow <流程>] [--layout-type 新建\|编辑\|显示] [--map "目标字段:来源字段"...] [--target-app <appId>] --view <来源视图> --position <位置...>` | 添加通用打开页面按钮。支持固定 URL、平台视图、表单布局及流程快捷入口。`--map` 把当前行的来源字段传出去,可多项,但**两种动作的写法不同**:视图/布局/流程动作写 `"目标字段:来源字段"`,**URL 动作写 `"参数名:来源字段"`**(参数名会成为目标 URL 的查询键)。⚠ **URL 动作的页面类型缺省 `LINK`**(平台设计器对 URL 路径用的就是这个;`CUSTOMPAGE` 是「自定义页面」,`pageId` 要页面 id,装 URL 路径点不开)。⚠ **平台不认 URL 里的 `{字段}` 占位符**,传参只能用 `--map`。当前行映射只允许行上/行末下拉;右上按钮无单行上下文。目标名称不唯一时使用 ID,保存后回读动作和映射。建按钮时还可一次带上基础属性:`--tips` / `--desc` / `--icon`(配 `--icon-color` / `--icon-bg` / `--icon-display`)/ `--only-icon` / `--no-log` / `--log-message` / `--data-filter` |
212
- | `e10-cli form button set <objId> <appId> <buttonId> [--name <名称>] [--tips <文本>] [--desc <文本>] [--icon <图标名> --icon-color <色值> --icon-bg <色值> --icon-display <line\|fill>] [--icon-none] [--only-icon\|--no-only-icon] [--log\|--no-log] [--log-message <文本>] [--add\|--replace\|--remove\|--relation\|--clear-filter] [--disable-condition\|--clear-disable-condition] [--dry-run]` | 改按钮基础属性:名称 / 提示内容 / 备注 / 图标 / 点击日志 / 数据过滤 / 禁用条件。**已有的动作与权限原样保留**。数据过滤的 `--add/--replace/--remove/--relation` 与 `form list-filter` 同名同义;启用时开关自动置 1,`--clear-filter` 置回 0。详见 `references/form/guide-form-button.md` |
216
+ | `e10-cli form button add <objId> <appId> <name> [--url <url>\|--open-view <视图>\|--open-layout <表单>\|--start-workflow <流程>] [--layout-type 新建\|编辑\|显示] [--map "目标字段:来源字段"...] [--target-app <appId>] --view <来源视图> --position <位置...>` | 添加通用打开页面按钮。支持固定 URL、平台视图、表单布局及流程快捷入口。`--map` 把当前行的来源字段传出去,可多项,但**两种动作的写法不同**:视图/布局/流程动作写 `"目标字段:来源字段"`,**URL 动作写 `"参数名:来源字段"`**(参数名会成为目标 URL 的查询键)。⚠ **URL 动作的页面类型缺省 `LINK`**(平台设计器对 URL 路径用的就是这个;`CUSTOMPAGE` 是「自定义页面」,`pageId` 要页面 id,装 URL 路径点不开)。⚠ **平台不认 URL 里的 `{字段}` 占位符**,传参只能用 `--map`。当前行映射只允许行上/行末下拉;右上按钮无单行上下文。目标名称不唯一时使用 ID,保存后回读动作和映射。建按钮时还可一次带上基础属性:`--tips` / `--desc` / `--icon`(配 `--icon-color` / `--icon-bg` / `--icon-display`)/ `--only-icon` / `--no-log` / `--log-message` / `--data-filter`。`--icon` 写前校验平台图标名,错名报错并给近似候选;确认是目录未覆盖的自定义图标时加 `--force-icon` |
217
+ | `e10-cli form button set <objId> <appId> <buttonId> [--name <名称>] [--tips <文本>] [--desc <文本>] [--icon <图标名> --icon-color <色值> --icon-bg <色值> --icon-display <line\|fill>] [--force-icon] [--icon-none] [--only-icon\|--no-only-icon] [--log\|--no-log] [--log-message <文本>] [--add\|--replace\|--remove\|--relation\|--clear-filter] [--disable-condition\|--clear-disable-condition] [--dry-run]` | 改按钮基础属性:名称 / 提示内容 / 备注 / 图标 / 点击日志 / 数据过滤 / 禁用条件。**已有的动作与权限原样保留**。`--icon` 写前校验平台图标名,错名报错并给近似候选(`--force-icon` 跳过)。数据过滤的 `--add/--replace/--remove/--relation` 与 `form list-filter` 同名同义;启用时开关自动置 1,`--clear-filter` 置回 0。详见 `references/form/guide-form-button.md` |
213
218
  | `e10-cli form button permission <objId> <appId> <buttonId> [--add-all\|--add-company <名或ID>\|--add-department <名或ID>\|--add-people <名或ID>] [--contain-extra] [--remove <序号\|id>] [--clear]` | 配置按钮权限(**哪些人能看见并点击这个按钮**,与表单共享权限是两套),不带选项时列出。授权对象支持 全体 / 分部 / 部门 / 人员;主体可写名称或 ID,名称需精确同名(撞名报错并列候选)。`--contain-extra` 含下级。保存后按集合回读核对(平台会重排顺序) |
214
- | `e10-cli form button action <objId> <appId> <buttonId> [--add-url <url>\|--add-view <视图>\|--add-layout <表单>\|--add-start-workflow <流程>\|--add-confirm ...\|--add-js --code <源码\|@文件>\|--add-edit-field "字段:值"...\|--add-logic <逻辑流>] [--remove <序号\|id>] [--clear]` | 管按钮动作,**一个按钮可挂多个**;不带选项时列出。追加顺序固定为 打开页面 → 确认框 → JavaScript → 编辑字段值 → 触发逻辑流。`--add-edit-field` 只支持赋固定值,同字段后写覆盖先写。`--add-logic` 只绑现有逻辑流(按名称精确匹配),`--logic-ecode-id` 可指定 `ecodeId`。改动作时权限原样保留。详见 `references/form/guide-form-button.md` |
219
+ | `e10-cli form button action <objId> <appId> <buttonId> [--add-url <url>\|--add-view <视图>\|--add-layout <表单>\|--add-start-workflow <流程>\|--add-confirm ...\|--add-js --code <源码\|@文件>\|--add-edit-field "字段:值"...\|--add-reply\|--add-view-logs [--log-types 1,2,3,4]\|--add-close-page\|--add-scan-upload\|--add-logic <逻辑流>] [--execute-selected] [--remove <序号\|id>] [--clear]` | 管按钮动作,**一个按钮可挂多个**;不带选项时列出。追加顺序固定为 打开页面 → 确认框 → JavaScript → 编辑字段值 → 评论和日志 → 查看日志 → 关闭页面 → 扫描上传 → 触发逻辑流。`--log-types` 为查看日志的记录类型(1查阅/2操作/3表单修改/4打印,可写数字或中文名,缺省全部)。`--add-edit-field` 只支持赋固定值,同字段后写覆盖先写;**选项字段可写选项名或 valueKey,命令会同时写入 `content` 与 valueKey**(写错/写不到选项会报错),多选支持 `"A,B"` 或 JSON 数组。`--execute-selected` 把本次新增/合并的动作设为「按勾选数据执行」(`executeSelectedDatas=1`,打开页面动作不适用)。`--add-logic` 只绑现有逻辑流(按名称精确匹配),`--logic-ecode-id` 可指定 `ecodeId`。改动作时权限原样保留。详见 `references/form/guide-form-button.md` |
215
220
  | `e10-cli form button action-set <objId> <appId> <buttonId> [--open-view ...\|--open-layout ...\|--start-workflow ...] [--map ...]` | **已废弃**,改用 `form button action`(等价 `--clear` + 一个 `--add-*`)。更新已有自定义按钮的单一 `openpage` 动作,保留按钮位置和权限 |
216
221
  | `e10-cli form button toggle <objId> <appId> <buttonId>` | 启用/禁用按钮 |
217
222
  | `e10-cli form button position <objId> <appId> <buttonId> [--view <视图...> --position <位置...>] [--show-position <json或@文件>] [--replace]` | 设置已有按钮位置并回读验证。默认合并、保留未指定页面;`--replace` 全量替换。视图支持 ID/唯一名称/新建/编辑/显示;多台账不能省略具体视图。系统按钮适用,保留动作权限及返回的日志/提示配置。详见 `references/form/guide-form-button.md` |
@@ -219,8 +224,11 @@
219
224
  | `e10-cli form association list/get <objId> <appId> [associationId]` | 查询关联页签列表或详情;get 必须传 associationId,详情含目标视图、筛选映射和权限 |
220
225
  | `e10-cli form association views <objId> <appId> [--target-app <id>]` | 查询可绑定视图及所属表单 |
221
226
  | `e10-cli form association fields <objId> <appId> --view <viewId> [--target-app <id>]` | 查询来源表单字段和目标视图字段 |
222
- | `e10-cli form association create <objId> <appId> <name> --view <viewId> --permissions <json或@文件> [--layouts 显示 编辑] [--terminals PC MOBILE] [--mappings <json或@文件>]` | 创建关联页签;默认仅显示布局、PC+MOBILE、启用。权限必须显式提供,筛选映射为 [{targetField,sourceField}] |
223
- | `e10-cli form association update <objId> <appId> <associationId> [--name <名>] [--view <viewId>] [--layouts 显示 新建 编辑] [--terminals PC MOBILE] [--enabled true/false] [--mappings <json或@文件>]` | 保留未指定配置;布局和终端为集合替换;显示=0,新建=1,编辑=2,none 关闭全部布局。仅启停走独立接口并回读;多动作时传 --action |
227
+ | `e10-cli form association create <objId> <appId> <name> --view <viewId> --permissions <json或@文件> [--layouts 显示 编辑] [--terminals PC MOBILE] [--order <n>] [--selected true/false] [--group <id/name/none>] [--mappings <json或@文件>]` | 创建关联页签;默认仅显示布局、PC+MOBILE、启用。权限必须显式提供,筛选映射为 [{targetField,sourceField}]。`--selected true` 会把其它页签改为未选中;`--group` 按 ID 或唯一名称绑定分组 |
228
+ | `e10-cli form association update <objId> <appId> <associationId> [--name <名>] [--view <viewId>] [--layouts 显示 新建 编辑] [--terminals PC MOBILE] [--enabled true/false] [--order <n>] [--selected true/false] [--group <id/name/none>] [--permissions <json或@文件>] [--mappings <json或@文件>]` | 保留未指定配置;布局和终端为集合替换;显示=0,新建=1,编辑=2,none 关闭全部布局。仅启停走独立接口并回读;多动作时传 --action。`--permissions` 为整组替换 |
229
+ | `e10-cli form association reorder <objId> <appId> <id...>` | 按给定顺序整体重排全部关联页签(必须给本表单全部 ID);走 updateOrderV2 并回读顺序 |
230
+ | `e10-cli form association group list/add/update/delete <objId> <appId> ...` | 关联页签分组增删改查。`add <名称> [--order n]`、`update <分组ID或名称> [--name] [--order]`、`delete <分组ID或名称>`;保存为整组回写,删除分组不会删除组内页签 |
231
+ | `e10-cli form association set-seclevel <objId> <appId> <associationId> --perm <序号或类型> --seclevel <min>-<max>` | 修改某条关联权限的安全级别 `levelScope`(0~100,如 30-100),读整行回写并回读 |
224
232
  | `e10-cli form association delete <objId> <appId> <associationId>` | 删除关联页签,参数可为 ID 或**唯一**名称(同名多条报错并列 ID);删前确认归属、删后回读确认消失。不可撤销、无回收站;只想临时下线用 `update --enabled false` |
225
233
  | `e10-cli form association set-filter <objId> <appId> <associationId> --mappings <json或@文件> [--action <id>]` | 替换目标视图动作的数据筛选字段映射,区别于权限条件 |
226
234
  | `e10-cli form association clear-filter <objId> <appId> <associationId> [--action <id>]` | 清空指定视图动作的数据筛选映射 |
@@ -592,7 +600,8 @@ e10-cli report py preagg --report-id <id> [--app-id <id>]
592
600
  | 命令 | 说明 |
593
601
  |------|------|
594
602
  | `e10-cli user search <keyword> [count]` | 模糊搜索员工(返回 ID/姓名/部门/手机) |
595
- | `e10-cli icon search <keyword...>` | 搜索 Ebuilder 图标(4999 个,支持多关键词) |
603
+ | `e10-cli icon search <keyword...>` | 搜索 Ebuilder 图标(7438 个,按名称/中文名,多关键词需同时命中) |
604
+ | `e10-cli icon check <图标名>` | 校验图标名是否存在;不存在时给近似候选(只读本地图标目录,不访问平台) |
596
605
 
597
606
  ---
598
607
 
@@ -780,3 +789,9 @@ e10-cli workflow action list-node <wf> <nodeId>
780
789
  事件顺序动作与递归条件:`designer event set --config @sequence.json` 使用 `{actions:[...]}` 或 `{nativeActions:[...]}`;`designer event action add/update/remove/enable/order`、`branch add/update/remove/enable/order` 支持按 ID 和 `--parent` 编辑;候选用 `event fields/targets` 查询。见 [事件指南](../ebuilder-designer/events/guide-events.md)。
781
790
 
782
791
  普通页面管理:`page rename <pageId> --name ... [--apply]`、`page copy <pageId> --name ... [--group-id id] [--apply]`、`page transfer <pageId> --app-id ... [--apply]`;`page groups/transfer-targets --app-id ...` 查询候选。`page delete <pageIds...>` 保留默认直接执行方式,`--preview` 只预览。详见 [普通页面管理](../ebuilder-designer/guide-page-management.md)。
792
+
793
+ ### 菜单目标与目录转换
794
+
795
+ 使用 `menu get <appId> <menuId>` 读取完整详情,`menu targets --kind apps|menu|layouts|types|workflow|report` 查询目标;`menu link set <appId> <menuId> --config @file --apply` 修改目标或目录转链接,`menu link clear <appId> <menuId> --apply` 清空转目录。两项写入默认预览,PC/移动端由 `--terminal pc|mobile` 区分。功能、结构和本入口码表见 [菜单地址与目录配置](../menu/guide-menu-config.md)。
796
+
797
+ 菜单属性使用 `menu configure <appId> <menuId> --config @file --apply`,图标使用 `menu icons`,显示条件候选使用 `menu condition-candidates`。菜单权限使用 `menu permission schema/get/browse` 查询,`menu permission entry add/replace/remove` 按授权行维护,默认预览。详见 [菜单配置](../menu/guide-menu-config.md) 与 [菜单权限](../menu/guide-menu-permission.md)。
@@ -63,15 +63,51 @@ e10-cli form association create <objId> <appId> "全部合同" --view <viewId> -
63
63
  | `--layouts none` | 三种布局均不显示 |
64
64
  | `--terminals PC MOBILE` | 两端适用;可只传其中一个 |
65
65
  | `--enabled true/false` | 启用或停用页签 |
66
+ | `--order <n>` | 显示顺序(1 起);新建不传时平台自动追加到末尾 |
67
+ | `--selected true/false` | 是否默认选中该页签;`true` 时平台会把本表单其它页签改为未选中 |
68
+ | `--group <id/name/none>` | 关联分组;`none` 移出分组 |
69
+ | `--permissions <json/@file>` | 关联权限数组,整组替换(`update` 也可用;不支持用空数组清空) |
66
70
 
67
71
  ```bash
68
72
  e10-cli form association update <objId> <appId> <associationId> --layouts 显示
69
73
  e10-cli form association update <objId> <appId> <associationId> --name "相关合同" --terminals PC --enabled true
70
74
  e10-cli form association update <objId> <appId> <associationId> --view <newViewId> --mappings @association-mappings.json
75
+ e10-cli form association update <objId> <appId> <associationId> --order 2 --selected true
76
+ e10-cli form association update <objId> <appId> <associationId> --group "客户信息"
71
77
  ```
72
78
 
73
79
  `update` 保留未指定属性以及原动作、权限条件和提示。布局、终端参数表示替换对应集合。修改绑定视图且已有映射时必须显式提供新映射(`[]` 可清空),避免原目标表字段被用于新视图。
74
80
 
81
+ ### 调整页签顺序
82
+
83
+ 单个页签可直接 `update --order <n>`。需要整体重排时,必须给出本表单**全部**关联页签 ID,按目标显示顺序排列:
84
+
85
+ ```bash
86
+ e10-cli form association reorder <objId> <appId> <id1> <id2> <id3>
87
+ ```
88
+
89
+ 命令走 `association/updateOrderV2`,平台按传入顺序写成 1..N,保存后回读排序;只给部分 ID 会直接报错,避免未传页签的 order 冲突。
90
+
91
+ ### 页签分组
92
+
93
+ ```bash
94
+ e10-cli form association group list <objId> <appId>
95
+ e10-cli form association group add <objId> <appId> "客户信息" [--order 1]
96
+ e10-cli form association group update <objId> <appId> <分组ID或名称> [--name "新名称"] [--order 2]
97
+ e10-cli form association group delete <objId> <appId> <分组ID或名称>
98
+ ```
99
+
100
+ 平台分组保存是**整组回写**:命令会先读现有分组,再增/改/删目标项并把完整列表提交;未提交的分组会被平台删除,所以不要手工拼 `groups`。分组的 `showOrder` 由提交列表顺序重新计算;`--order` 就是列表中的位置(1 起)。删除分组不会删除组内页签,页签会变成未分组。
101
+
102
+ ### 权限安全级别
103
+
104
+ ```bash
105
+ e10-cli form association set-seclevel <objId> <appId> <associationId> \
106
+ --perm <1-based序号|selectedType> --seclevel 30-100
107
+ ```
108
+
109
+ `--seclevel` 写入该权限的 `levelScope.minShowlevel/maxShowlevel`(0~100,最小值不能大于最大值),走读整行 → 改目标权限 → `saveOrUpdate` → 回读。也可以用 `update --permissions @file` 整组替换权限数组,文件里的 `levelScope` 按同样格式写。
110
+
75
111
  仅启用或停用页签时,`update --enabled true|false` 使用 `updateIsOpenById` 独立接口并通过列表回读状态,不整包保存关联配置。
76
112
 
77
113
  ## 删除关联页签
@@ -94,6 +94,18 @@ e10-cli form button set <objId> <appId> <buttonId> --log --log-message "提交
94
94
 
95
95
  `--icon-display` 取 `line`(描边)或 `fill`(填充);只改颜色/描边时按钮必须已有图标。
96
96
 
97
+ ### 图标名校验
98
+
99
+ 平台对不存在的图标名**不报错**,只会在运行时渲染成空白 —— 按钮看起来像“没样式”,排查时很难发现是名字写错。`form button add|set --icon` 现在写前按平台图标目录校验:
100
+
101
+ ```bash
102
+ e10-cli icon check Icon-N-Delete # ❌ 不存在,并给出 Icon-N-Deleted 等近似候选
103
+ e10-cli icon check Icon-N-Deleted # ✅ 已存在(已删除)
104
+ e10-cli icon search 删除 # 按名称/中文名搜索(7438 个)
105
+ ```
106
+
107
+ 错名会直接停止保存;确认目标环境确实有该图标(目录未覆盖的自定义图标)时可加 `--force-icon` 跳过校验。图片地址(`/…`、`http(s)://…`、`data:…`)不参与图标名校验。
108
+
97
109
  ### 数据过滤
98
110
 
99
111
  按钮的「数据过滤」决定**列表里哪些行**受该按钮影响,条件语法与 `form list-filter` **完全一致**:
@@ -147,13 +159,22 @@ e10-cli form button action <objId> <appId> <buttonId> --clear # 清空自定
147
159
  | 确认框 | `--add-confirm --confirm-title <标题> --confirm-content <正文> [--confirm-true <文案>] [--confirm-false <文案>]` |
148
160
  | JavaScript | `--add-js --code <源码\|@文件>` |
149
161
  | 编辑字段值 | `--add-edit-field "字段:值"`(可多个;字段写 fieldId 或字段标题) |
162
+ | 评论和日志 | `--add-reply` |
163
+ | 查看日志 | `--add-view-logs [--log-types 1,2,3,4]` |
164
+ | 关闭页面 | `--add-close-page` |
165
+ | 扫描上传 | `--add-scan-upload` |
150
166
  | 触发逻辑流 | `--add-logic <逻辑流名或ID> [--logic-ecode-id <id>]` |
151
167
 
152
168
  `--open-type` 管打开方式:`1` 弹窗 / `2` 当前页 / `3` 新窗口。
153
169
 
170
+ `--execute-selected` 把本次新增/合并的动作设为「按勾选数据执行」(`executeSelectedDatas=1`),用于批量按钮;「打开页面」动作不适用。它只作用于本次新增的动作,不改按钮上已有的老动作。
171
+
172
+ `--log-types` 对应查看日志的记录类型:`1` 查阅情况 / `2` 操作日志 / `3` 表单修改日志 / `4` 打印日志;可写数字或中文名,缺省全部四种。
173
+
154
174
  ### 使用说明与边界
155
175
 
156
- - **编辑字段值**本轮只支持「赋固定值」。同一次命令里多次 `--add-edit-field` 会并进同一条动作(按字段去重,同字段后写的覆盖先写的);按钮上已有该动作时会并入它,不会多出一条。
176
+ - **编辑字段值**本轮只支持「赋固定值」。同一次命令里多次 `--add-edit-field` 会并进同一条动作(按字段去重,同字段后写的覆盖先写的);按钮上已有该动作时会并入它,不会多出一条,且保留该动作原有的执行方式/日志等设置。
177
+ - **选项字段(Select / RadioBox / CheckBox)**的值可以写选项名,也可以写 valueKey;命令会读字段选项并同时写入 `content` 与 `value`(valueKey)。只写选项名不写 valueKey 时平台不报错,但运行时是空值,因此解析不到选项会直接报错并列出可选值。多选字段支持 `"A,B"` 或 JSON 数组 `'["A","B"]'`;选项名本身带逗号时用 JSON 数组。
157
178
  - **触发逻辑流**只做绑定,**不生成**逻辑流。按名称解析要求精确同名,撞名报错并列出候选。`ecodeId` 可用 `--logic-ecode-id` 指定;不给时沿用该按钮上已有的绑定值,都没有则留空。
158
179
  - **JavaScript** 源码建议用 `--code @文件` 传入,避免命令行转义把脚本弄坏。
159
180
  - `action-set` 是早期只支持单一打开页面动作的命令,**已标记废弃**,等价于 `action --clear --add-view …`;仍可用,但新需求请用 `form button action`。