weaver-e10-builder 1.5.7 → 1.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/commands/app.d.ts.map +1 -1
  2. package/dist/commands/app.js +259 -0
  3. package/dist/commands/app.js.map +1 -1
  4. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  5. package/dist/commands/form-add-detail-table.js +13 -2
  6. package/dist/commands/form-add-detail-table.js.map +1 -1
  7. package/dist/commands/form-button.d.ts.map +1 -1
  8. package/dist/commands/form-button.js +6 -4
  9. package/dist/commands/form-button.js.map +1 -1
  10. package/dist/commands/form-formula-linkage.d.ts.map +1 -1
  11. package/dist/commands/form-formula-linkage.js +4 -4
  12. package/dist/commands/form-formula-linkage.js.map +1 -1
  13. package/dist/commands/form-list-filter.d.ts +3 -0
  14. package/dist/commands/form-list-filter.d.ts.map +1 -1
  15. package/dist/commands/form-list-filter.js +88 -24
  16. package/dist/commands/form-list-filter.js.map +1 -1
  17. package/dist/commands/form-list-search-group.d.ts.map +1 -1
  18. package/dist/commands/form-list-search-group.js +54 -64
  19. package/dist/commands/form-list-search-group.js.map +1 -1
  20. package/dist/commands/form-list-stats.d.ts.map +1 -1
  21. package/dist/commands/form-list-stats.js +29 -4
  22. package/dist/commands/form-list-stats.js.map +1 -1
  23. package/dist/commands/form-list-utils.d.ts +46 -1
  24. package/dist/commands/form-list-utils.d.ts.map +1 -1
  25. package/dist/commands/form-list-utils.js +140 -47
  26. package/dist/commands/form-list-utils.js.map +1 -1
  27. package/dist/commands/form-list.d.ts.map +1 -1
  28. package/dist/commands/form-list.js +141 -71
  29. package/dist/commands/form-list.js.map +1 -1
  30. package/dist/commands/form-message.d.ts +3 -0
  31. package/dist/commands/form-message.d.ts.map +1 -0
  32. package/dist/commands/form-message.js +341 -0
  33. package/dist/commands/form-message.js.map +1 -0
  34. package/dist/commands/form-view.d.ts.map +1 -1
  35. package/dist/commands/form-view.js +31 -4
  36. package/dist/commands/form-view.js.map +1 -1
  37. package/dist/commands/matrix.d.ts.map +1 -1
  38. package/dist/commands/matrix.js +80 -42
  39. package/dist/commands/matrix.js.map +1 -1
  40. package/dist/commands/org.d.ts.map +1 -1
  41. package/dist/commands/org.js +61 -0
  42. package/dist/commands/org.js.map +1 -1
  43. package/dist/commands/role.d.ts.map +1 -1
  44. package/dist/commands/role.js +69 -9
  45. package/dist/commands/role.js.map +1 -1
  46. package/dist/commands/wf-form.d.ts.map +1 -1
  47. package/dist/commands/wf-form.js +5 -5
  48. package/dist/commands/wf-form.js.map +1 -1
  49. package/dist/index.js +2 -0
  50. package/dist/index.js.map +1 -1
  51. package/dist/services/actionflow/context_preflight.d.ts +3 -3
  52. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  53. package/dist/services/actionflow/context_preflight.js +45 -24
  54. package/dist/services/actionflow/context_preflight.js.map +1 -1
  55. package/dist/services/actionflow/context_provider.d.ts +7 -0
  56. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  57. package/dist/services/actionflow/context_provider.js +13 -1
  58. package/dist/services/actionflow/context_provider.js.map +1 -1
  59. package/dist/services/actionflow/formula_service.d.ts +15 -0
  60. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  61. package/dist/services/actionflow/formula_service.js +401 -57
  62. package/dist/services/actionflow/formula_service.js.map +1 -1
  63. package/dist/services/actionflow/param_group_dto.d.ts.map +1 -1
  64. package/dist/services/actionflow/param_group_dto.js +17 -3
  65. package/dist/services/actionflow/param_group_dto.js.map +1 -1
  66. package/dist/services/actionflow/param_type.d.ts +14 -0
  67. package/dist/services/actionflow/param_type.d.ts.map +1 -0
  68. package/dist/services/actionflow/param_type.js +69 -0
  69. package/dist/services/actionflow/param_type.js.map +1 -0
  70. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  71. package/dist/services/actionflow/preflight_service.js +59 -41
  72. package/dist/services/actionflow/preflight_service.js.map +1 -1
  73. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  74. package/dist/services/actionflow/workflow_compiler.js +65 -29
  75. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  76. package/dist/services/app-publish.d.ts +227 -0
  77. package/dist/services/app-publish.d.ts.map +1 -0
  78. package/dist/services/app-publish.js +403 -0
  79. package/dist/services/app-publish.js.map +1 -0
  80. package/dist/services/form-button-position.d.ts.map +1 -1
  81. package/dist/services/form-button-position.js +7 -1
  82. package/dist/services/form-button-position.js.map +1 -1
  83. package/dist/services/form-field-drop.d.ts.map +1 -1
  84. package/dist/services/form-field-drop.js +7 -0
  85. package/dist/services/form-field-drop.js.map +1 -1
  86. package/dist/services/form-formula-linkage.d.ts +24 -3
  87. package/dist/services/form-formula-linkage.d.ts.map +1 -1
  88. package/dist/services/form-formula-linkage.js +24 -5
  89. package/dist/services/form-formula-linkage.js.map +1 -1
  90. package/dist/services/form-list-search-group.d.ts +89 -0
  91. package/dist/services/form-list-search-group.d.ts.map +1 -0
  92. package/dist/services/form-list-search-group.js +260 -0
  93. package/dist/services/form-list-search-group.js.map +1 -0
  94. package/dist/services/form-list-search.d.ts +110 -0
  95. package/dist/services/form-list-search.d.ts.map +1 -0
  96. package/dist/services/form-list-search.js +231 -0
  97. package/dist/services/form-list-search.js.map +1 -0
  98. package/dist/services/form-list-stats.d.ts +21 -1
  99. package/dist/services/form-list-stats.d.ts.map +1 -1
  100. package/dist/services/form-list-stats.js +86 -12
  101. package/dist/services/form-list-stats.js.map +1 -1
  102. package/dist/services/form-message.d.ts +273 -0
  103. package/dist/services/form-message.d.ts.map +1 -0
  104. package/dist/services/form-message.js +575 -0
  105. package/dist/services/form-message.js.map +1 -0
  106. package/dist/services/form-sub-detail.d.ts.map +1 -1
  107. package/dist/services/form-sub-detail.js +5 -1
  108. package/dist/services/form-sub-detail.js.map +1 -1
  109. package/dist/services/form-view.d.ts +34 -2
  110. package/dist/services/form-view.d.ts.map +1 -1
  111. package/dist/services/form-view.js +74 -8
  112. package/dist/services/form-view.js.map +1 -1
  113. package/dist/services/matrix-fields.d.ts +42 -0
  114. package/dist/services/matrix-fields.d.ts.map +1 -0
  115. package/dist/services/matrix-fields.js +102 -0
  116. package/dist/services/matrix-fields.js.map +1 -0
  117. package/dist/services/org-browser.d.ts +60 -0
  118. package/dist/services/org-browser.d.ts.map +1 -0
  119. package/dist/services/org-browser.js +62 -0
  120. package/dist/services/org-browser.js.map +1 -0
  121. package/dist/services/quick-date-range.d.ts +22 -0
  122. package/dist/services/quick-date-range.d.ts.map +1 -0
  123. package/dist/services/quick-date-range.js +134 -0
  124. package/dist/services/quick-date-range.js.map +1 -0
  125. package/dist/services/role-member.d.ts +73 -2
  126. package/dist/services/role-member.d.ts.map +1 -1
  127. package/dist/services/role-member.js +141 -9
  128. package/dist/services/role-member.js.map +1 -1
  129. package/package.json +1 -1
  130. package/skill-docs/SKILL.md +281 -278
  131. package/skill-docs/_catalog.md +3 -0
  132. package/skill-docs/actionflows/SKILL.md +2 -1
  133. package/skill-docs/actionflows/references/components/message/InnerMQSend.md +6 -0
  134. package/skill-docs/references/app/guide-app-publish.md +92 -0
  135. package/skill-docs/references/common/guide-plan-template.md +148 -252
  136. package/skill-docs/references/common/map.md +2 -1
  137. package/skill-docs/references/common/ref-cli-commands.md +27 -8
  138. package/skill-docs/references/form/guide-form-message.md +57 -0
  139. package/skill-docs/references/form/guide-form-view.md +7 -2
  140. package/skill-docs/references/form/guide-formula-linkage.md +1 -1
  141. package/skill-docs/references/form/guide-list-stats.md +55 -2
  142. package/skill-docs/references/hrm/guide-matrix.md +30 -2
@@ -22,6 +22,8 @@
22
22
  | 布局样式模板、换配色、form layout init | `references/form/style-templates.md`(流式/表格式两套,同名不同 id) |
23
23
  | 已有表单加字段、改必填/只读、布局被重建、add-field --reinit、别动别人的表、布局组件、associatedId、字段标题取不到 | `references/form/guide-form-layout-incremental.md` |
24
24
  | 表单复杂编号、serial-mark、流水号、代字 | `references/form/guide-form-serial-mark.md` |
25
+ | 分类搜索、分类筛选、list-search-group、选项配置、日期粒度、选项排序 | `references/common/ref-cli-commands.md` |
26
+ | 表单消息提醒、数据变动提醒、form message、提醒对象、推送渠道、IM提醒 | `references/form/guide-form-message.md` |
25
27
  | 表单数据读写、form data、写入数据、查询数据、删除数据 | `references/form/guide-form-data.md` |
26
28
  | 列表自定义文本列、富文本列、列里插入字段、form nlist、列表式视图 | `references/form/guide-list-custom-text.md` |
27
29
  | 流程、审批、workflow、提交流程、flowpage、预填、URL传参、节点、操作者、审批人、连线 | `references/workflow/guide-workflow.md` |
@@ -50,6 +52,7 @@
50
52
  | 用户意图关键词 | 加载文档 |
51
53
  |---------------|---------|
52
54
  | CLI、命令、打包、build、import、创建应用、创建表单、菜单、project、form create、app create、matrix | `references/common/ref-cli-commands.md` |
55
+ | 应用发布、启用应用、停用应用、发布到前台、取消发布、应用发布信息、前台入口、应用名多语言、app enable/disable/publish/unpublish/publish-info、app lang | `references/app/guide-app-publish.md` |
53
56
  | 完整实施方案、规划能力地图、资源依赖、需求映射、plan 前预检 | `references/common/map.md`,随后使用 `references/common/guide-plan-template.md` |
54
57
  | 接口文档导入、Postman、系统接口、连接器接口、createSystemInterfaceByAi、接口批量创建 | `references/esb-interface/guide-import.md` |
55
58
  | 系统菜单、内置菜单、挂系统页面到菜单、menuUrl、pageType、工作流菜单、独立页面菜单、菜单改名、menu rename、重命名菜单、找不到菜单 | `references/menu/system-menus.md` |
@@ -58,7 +58,8 @@ description: "将业务需求编译为 Weaver ESB 动作流,或读取已有动
58
58
  9.1. 每个参数先分为“动态公式属性”“动态人员属性”“固定平台资源属性”三类:上下文、系统变量、变量、常量、函数/公式必须保留为 FormulaBean;动态人员必须使用真实人员字段上下文或系统变量,不得把引用里的 `id` 当人员 Browser ID 查询;工作流、文档目录、按钮、规则等平台资源只有在其组件契约明确提供动态引用时才允许动态化。生成前必须记录本次组件/属性的判定,生成后按属性检查回读结果;具体映射和验证状态见 `references/dynamic_capability_matrix.md`。
59
59
  10. 自定义事件和内置 MQ 的参数必须按对应平台组件说明提供原生参数对象;`CustomTrigger.customData`、`InnerMQListener.receiveParams`、`InnerMQSend.sendParams` 不能用猜测的字段替代。若验证要求“输入参数里有字段”,必须在生成前提供至少一行真实原生参数;`tables:[]`、`tableList:[]` 或省略 `receiveParams` 只能表示无输入参数,不能作为有参数的占位。`InnerMQListener` 与 `InnerMQSend` 是动作流级互斥组件,同一计划(包括条件/循环嵌套)同时出现时,CLI 在任何平台写接口前直接报错。
60
60
  11. 根触发节点的 `event.attr.icon` 必须使用平台真实图标:`CustomTrigger` 为 `Icon-N-Triggerrul`,`InnerMQListener` 为 `Icon-built-in-mq-listening-mcolor`;组件目录里的动作图标不能覆盖根触发器图标。保存后回读必须同时检查触发器图标、已声明输入参数的数量和查询字段,不能仅凭 `valid=true` / `saved=true` 判定配置正确。
61
- 12. `InnerMQSend.sendParams.tableData` 必须遵循“参数类型决定数据类型候选”的平台规则:普通非数组标量通常只有“属性”一个选项,不应伪造可下拉状态;数组或 `json/xml/xml_string` 结构化参数才按真实候选设置 `dataType`,结构化参数的下级用 `parentId` 表达,并保留父子约束。具体规则见 `references/components/message/InnerMQSend.md`。
61
+ 12. 仅在生成 `ParamMappingBean`、`ParamSettingBean`(及其同形态的参数分组 DTO)的 `tableData[].paramType` 时,按后端 `com.weaver.esb.base.enums.ParamType` 归一化:无法匹配枚举值回退为文本 `string`;数字类型统一为整数 `int`;长整型统一为文本 `string`。这条规则不适用于普通 `FormulaBean`、表单字段上下文、循环上下文或 `CustSetFormDto`。`paramType=json` 或 `arrs=true` 时 `dataType` 强制为节点 `node`,不能保留/生成属性 `attribute`;其他普通标量默认使用属性,结构化参数的下级用 `parentId` 表达,并保留父子约束。具体规则见 `references/components/message/InnerMQSend.md`。
62
+ 12.1. 所有组件的动态字段最终都必须生成合法的 `FormulaBean`,统一按以下五类来源处理:①普通组件上下文只能使用该组件 `getComponentContext` 返回的字段元数据;②循环体字段使用前端循环上下文拼出的 `CycleParams`,并保留循环数据源的真实来源;③`EsbFormDataDto` 的依据值下级按表单设置组件的 `basisValue`、`parentName`、`paramName` 和数组层级规则生成;④`ParamMappingBean`/`ParamSettingBean` 的依据值下级按参数设置组件的相对 `paramKey` 和 `basisParamKey` 规则生成;⑤`CustSetFormDto` 的依据值下级沿用表单设置组件规则。不能按字段名、paramKey 尾段、组件默认根或临时 ID 凭空补造 `frontId`、`parentName`、`paramKey`、`newParentName`;缺少真实上下文时应在预检阶段报错。
62
63
 
63
64
  ### 4. 生成与逐场景反馈
64
65
 
@@ -32,6 +32,8 @@
32
32
 
33
33
  ### 参数类型与数据类型联动
34
34
 
35
+ CLI 生成 `ParamMappingBean`、`ParamSettingBean` 及其分组 DTO 的 `tableData` 时才归一化参数类型:依据后端 `ParamType` 枚举匹配;数字类型统一写 `int`,长整型写 `string`,无法匹配写 `string`。普通 `FormulaBean`、表单字段上下文、循环上下文和 `CustSetFormDto` 不使用这套归一化。如果 `paramType` 为 `json` 或字段开启 `arrs`,`dataType` 强制写为 `node`;普通非数组标量默认写为 `attribute`。
36
+
35
37
  `tableData` 中每一行的 `paramType` 决定 `dataType` 的合法候选和是否允许继续加下级,不能只把 `dataType` 当成一个任意字符串填写:
36
38
 
37
39
  - 普通标量(如 `string`、`int`、`boolean` 等)且 `arrs:false` 时,合法数据类型只有“属性”;平台因此不会显示数据类型下拉,这是正常行为。
@@ -41,4 +43,8 @@
41
43
 
42
44
  因此,需求只要求一个数据类型时不要伪造下拉;需求需要多种数据类型或下级节点时,必须按真实参数类型构造 `tableData` 层级。
43
45
 
46
+ ### FormulaBean 动态来源的统一规则
47
+
48
+ 上述参数类型规则只作用于参数 DTO;所有组件的动态字段生成 `FormulaBean` 时,还必须统一遵循五类来源:普通组件上下文取对应 `getComponentContext` 的真实字段;循环体取前端拼出的 `CycleParams` 并保留列表来源;`EsbFormDataDto`、`ParamMappingBean`/`ParamSettingBean`、`CustSetFormDto` 的依据值下级分别使用各自前端的 basisValue/相对 paramKey/parentName 规则。真实字段的 `frontId`、`paramKey`、`parentName`、`newParentName` 不可由字段名或路径尾段猜测,预检无法取得时直接失败。
49
+
44
50
  `InnerMQSend` 与触发器 `InnerMQListener` 不能同时出现在一个动作流中,包括条件和循环内部;CLI 会在创建或更新前拒绝该计划。
@@ -0,0 +1,92 @@
1
+ # 应用发布:启用 → 发布到前台 → 改发布信息 → 取消发布
2
+
3
+ 应用建出来只是「壳」。要让成员真正在前台用上,还要走**启用**和**发布到前台**两步;
4
+ 应用名还可以按语言给不同显示。
5
+
6
+ ## 一、四个动作与先后关系
7
+
8
+ | 命令 | 作用 | 前置 |
9
+ |---|---|---|
10
+ | `app enable <appId>` | 启用应用 | — |
11
+ | `app publish <appId>` | 发布到前台(应用中心里出现入口) | 先 `enable` |
12
+ | `app publish-info <appId>` | 改前台的显示名 / 简介 / 分类 | 先 `publish` |
13
+ | `app unpublish <appId>` | 取消发布(收回前台入口) | 先 `publish` |
14
+
15
+ `app read <appId>` 里的 `publishEnabled`:`1` 已启用、`2` 已停用、`0` 从未启用。
16
+
17
+ > ⚠️ **停用会连带收回已发布状态。** 前台那句「应用暂未启用,启用后才可以发布给成员使用」
18
+ > 说的就是这个 —— 别把 `app disable` 当成「临时关一下、发布态还在」。
19
+
20
+ ## 二、发布
21
+
22
+ ```bash
23
+ e10-cli app enable <appId>
24
+ e10-cli app publish <appId> --name "会议室管理" --description "预约与审批" --category 综合办公
25
+ ```
26
+
27
+ - `--name` 不给就用应用名;`--description` 不给就用应用描述。
28
+ - `--category` 是**应用中心里的分类**:汇报 / 协作 / HRM / 审批 / 数据协作 / 综合办公 / CRM / 自定义。
29
+ 不指定则落**自定义**。
30
+ - 发布后前台入口的地址形如 `/ebdapp/view/<appId>`。
31
+
32
+ > ⚠️ **每次发布都会生成一个新的前台 id**,取消后重新发布**不会**沿用旧号。
33
+ > 别把这个 id 当稳定标识存下来,要用的时候现查(`app publish-info` 会报出来)。
34
+
35
+ ## 三、改发布信息
36
+
37
+ `app publish-info` 改的是**前台那份配置**(显示名 / 简介 / 分类),
38
+ **不动应用本身的名称与描述** —— 后者用 `app edit`。
39
+
40
+ ```bash
41
+ e10-cli app publish-info <appId> --name "新的前台名"
42
+ e10-cli app publish-info <appId> --description "改后的简介"
43
+ e10-cli app publish-info <appId> --category CRM
44
+ ```
45
+
46
+ 三个参数至少给一个;不给分类就**沿用现有的**,不会被打回「自定义」。
47
+
48
+ ## 四、取消发布
49
+
50
+ ```bash
51
+ e10-cli app unpublish <appId>
52
+ ```
53
+
54
+ > ⚠️ **不可逆**,也没有回收站。移除后前台入口消失,成员看不到;
55
+ > 重新发布会是一个**新入口**。命令会回读确认入口确实没了才报成功,
56
+ > 重复执行只会提示「未发布到前台,无需取消」。
57
+
58
+ ## 五、应用名多语言
59
+
60
+ 应用名可以按语言给不同显示。
61
+
62
+ ```bash
63
+ e10-cli app lang get <appId> # 看各语言当前值
64
+ e10-cli app lang set <appId> --en "Meeting Room"
65
+ e10-cli app lang set <appId> --zh "会议室管理" --en "Meeting Room"
66
+ ```
67
+
68
+ - **简体中文那档就是应用名本身。** 只给 `--en` 时,命令会先把现有各语言读回来再整份写回,
69
+ **不会**出现「只改英文、中文被清空」。
70
+ - 简体中文缺省沿用应用当前名称,可以用 `--zh` 显式覆盖。
71
+ - 已经建过多语言标签时是**原地更新**,不会堆积一堆标签。
72
+ - 单独改应用名(`app edit --name`)**不动**多语言配置,两者互不干扰。
73
+
74
+ ## 六、命令一览
75
+
76
+ | 命令 | 说明 |
77
+ |---|---|
78
+ | `e10-cli app enable <appId>` | 启用应用 |
79
+ | `e10-cli app disable <appId>` | 停用应用(**会收回已发布状态**) |
80
+ | `e10-cli app publish <appId> [--name] [--description] [--category]` | 发布到前台 |
81
+ | `e10-cli app publish-info <appId> [--name] [--description] [--category]` | 改发布信息 |
82
+ | `e10-cli app unpublish <appId>` | 取消发布 |
83
+ | `e10-cli app lang get <appId>` | 查看应用名多语言 |
84
+ | `e10-cli app lang set <appId> [--zh] [--en]` | 设置应用名多语言 |
85
+
86
+ 以上命令都支持全局 `--json`。
87
+
88
+ ## 关联
89
+
90
+ - 应用本身的增删改查(`create` / `list` / `folder` / `read` / `edit` / `delete`):
91
+ [`ref-cli-commands.md`](../common/ref-cli-commands.md) 的 app 段
92
+ - 前台入口的可见范围(谁能看到这个应用):`menu` / `menu-permission` 那套
@@ -1,268 +1,164 @@
1
- # 搭建计划模板(plan.md 强制格式)
1
+ # 搭建计划模板(按依赖与功能批次执行)
2
2
 
3
- > 这是 `plan.md` 的**强制模板**。写 plan.md 必须照此格式逐项梳理资源与规则,**禁止自创格式、禁止预勾 `[x]`**。
4
- > `[ ]` = 待办;执行阶段做完一项、验证通过,才改 `[x]` 并填实际 ID。无法实现的项保持 `[ ]` 并列入第 8 节,不能宣称全部完成。
3
+ 使用本模板生成项目 `plan.md` 时,先读[规划能力地图](map.md)识别资源、配置和依赖;需要明确具体规则或能力边界时读对应专题指南,再填写实际涉及的条目。执行某项前仍须读取该项指南。
5
4
 
6
- ## 使用方法
5
+ 规划阶段全部保持 `[ ]`。第一阶段先完成全部表单的字段、明细和布局,再以**功能项为外层、所有适用表单/视图为内层**组织配置:例如先完成所有表单的关联浏览数据范围,再处理所有表单的公式;视图也按显示列、搜索、排序等功能逐批覆盖。每进入一个功能项先读对应指南,确认方法、参数和边界;同一连续批次已读过的无需重复读取。每个对象及独立规则分别列项、核对、回填和销号;暂不能完成的保留 `[ ]` 并注明原因、已完成部分及所需条件,继续处理其他项目,不因步骤繁琐而省略。整个功能批次的覆盖对象处理完后进入下一批次,真实依赖优先于批次顺序。每段完成后停下让用户确认,确认后进入下一段。仅单步修改或查询不套用三段流程。
7
6
 
8
- 1. 阅读需求,先参考[规划能力地图](map.md)梳理资源、配置、依赖及待确认事项;需要明确具体规则或能力边界时,继续阅读地图指向的细节文档。
9
- 2. 复制下方「plan.md 骨架」到工作区 `plan.md`,按需求逐项填实(应用/表单/流程/出口条件清单/菜单/页面/必做项)
10
- 3. 规划阶段全部留 `[ ]`,拿给用户确认(此阶段不调 e10-cli 写命令,可 list/read 查现状)
11
- 4. 用户确认后逐项执行,每做完一项、验证通过,改 `[x]` 并填 ID——完成一条打勾一条
12
- 5. **执行每项前,先按 SKILL.md 决策树读对应 `references` 指南**——命令的完整参数/边界/坑/示例都在指南里,认真阅读再动手,不要凭印象直接调命令
7
+ ## plan.md 参考骨架
13
8
 
14
- 需求中确认无法实现的内容,以及执行中发现无法完成的内容,统一记录在第 8 节;原配置项保留 `[ ]`,不得用替代配置冒充完成。记录原因、影响和可行的后续处理,交由用户决定。
15
-
16
- 流程明确使用权责表时,在对应流程下列明搭建方式、新建或复用的权责表、变量与字段映射,以及各分支的场景说明、条件、经过节点和顺序;详细配置读取 `references/workflow/guide-workflow-auth-resp.md`。
17
-
18
- ---
19
-
20
- ## plan.md 骨架
9
+ 复制本节到项目工作区的 `plan.md`,只保留需求涉及的资源和功能;每条业务要求都有明确归属、来源、依赖和可观察结果。同类功能可连续执行,但不能把多条独立要求合成一个销号项。
21
10
 
22
11
  ```md
23
12
  ## 搭建计划
24
13
 
25
- > ⚠️ `[ ]` 是待办,不是"已规划"。规划阶段全部留 `[ ]`;执行阶段做完一项、验证通过,才改 `[x]` 并填 ID。**完成一条打勾一条**,无法实现的项保持 `[ ]` 并列入第 8 节,**禁止预勾 `[x]`**(=谎报完成)。勿依赖平台默认值——平台默认值≠方案要求。
26
- > **来源标注**:每张表/每个流程/每个节点用分组头声明(名称+ID 占位),其下 `[ ]` 项的来源即该分组;跨表的项内联标「来源: <表单/流程>」。
27
-
28
- ### 0. 环境
29
- - [ ] 鉴权 `e10-cli auth status`(profile 切换 `auth profile use` / 新环境 `auth set --eteamsid --base-url`)
30
-
31
- ### 1. 应用
32
- - [ ] <应用名> | `app create` | ID: 待创建
33
- > 默认一份完整业务方案落在一个主应用;需求明确指定已有应用、跨应用资源或独立业务边界时,按实际范围处理,并标明每项资源归属。
34
-
35
- ### 2. 角色(来源: 全应用)
36
- - [ ] <角色名> | `role create` + `role add-member <roleId> <keyword>` | 方案要求的每个角色都要建,不会自动有
37
-
38
- ---
39
-
40
- ### 3. 表单(每张表一组,逐张复制此分组)
41
-
42
- #### ▼ 表单:<表单名A> | objId: 待创建
43
-
44
- ##### 3.1 字段定义(按[新建 EBuilder 表单](../form/guide-create-form.md)整理,建表时通过 `form create --fields` 一次创建)
45
- - [ ] <表单名> | ID: 待创建
46
- 类型: 普通 EB 表单 / 虚拟表(虚拟表按[虚拟表创建与维护](../form/guide-virtual-form.md)记录来源和字段映射)
47
- 布局: FLOW(流式)/ EXCEL(表格,缺省)
48
- 字段:
49
- 1. 名称(Text, 必填)
50
- 2. 金额(Money, precision=2, 只读)
51
- 3. 备注(TextArea, 独占一行)
52
- 4. 客户名称(Text, group=基本信息, 必填)
53
- 5. 联系电话(Phone, group=基本信息)
54
- 6. 明细表(DetailTable, formFields:[...])
55
- 7. 关联客户(EBuilder, sformId+dataTitle)
56
- 8. 关联流程(Flow, sformId=<流程绑定的表单objId>) ← sformId 指向哪个流程表单,浏览时就只选该表单绑定的流程数据,创建时自动绑定
57
- - 选项/编号/默认值/精度/百分比/maxLen 建表时写全;单位无独立属性,**写进字段名**如 `工时单价(元)`
58
- - **布局与显示属性**:方案文档明确要求的必填(`required`)、只读(`readOnly`)、隐藏(`hidden`)、独占一行(`singleRow`)、分组(`group`)、字段顺序——全部标在字段清单里,建表时 fields.json 一并带上,勿留建后补。方案未提到的用默认(EXCEL 两列、不分组、不必填)
59
- - **日期区间**:字段本身包含起止含义时优先规划为 `DateRange`;明确分列或需独立参与公式、联动时再拆成两个日期字段
60
- - **字段多语言**:需求写成 `中文/English` 时,字段清单保留两种名称并注明“多语言”;创建时字段名只用中文,建成取得 fieldId 后执行 `form field-lang set --zh <中文> --en <English>`,不可把斜杠名称原样落库
61
- - 公式/值带出可 inline:`formula` / `relateFrom`
62
- - **Flow 字段**:`sformId` 是流程表单 objId(不是 workflowId),建表时写进 fields.json 即自动绑定——关联到哪个流程表单就只能选该范围的流程数据,无需单独配数据范围
63
- - **二级明细**:逐条列出“父明细 → 子明细”、父级行标识、子级文本行标识和是否默认展开;执行时先读取父明细的可选子明细,再按[二级明细表配置](../form/guide-form-sub-detail.md)创建并回读。
64
- > **新建表单**时把字段一次规划全、随建表写进 `fields.json`,别先建空表再一个个补——补字段要重排布局,容易漏掉布局属性。
65
- > 这句只针对「新建」。`add-field` / `edit-field` **是维护已有表的正常命令**,不是补救手段:
66
- > - 给**已经存在**的表加字段 → `form add-field`
67
- > - 改已有字段的类型 / 标题 / 必填 / 长度 / 描述 → `form edit-field`(**支持改类型**,走读-改-写,不用删字段重建,显示名 / 列名 / 位置都保留)
68
-
69
- 虚拟表补充清单(普通 EB 表单删除本段):
70
- - [ ] 数据源定位 | 来源类别: EB 表单 / 系统业务表 / 数据加工 | 名称/ID: <来源>
71
- - [ ] 数据源预检 | 稳定 ID 校验通过
72
- - [ ] 字段映射 | <来源字段(dataKey/sourceFieldType)> → <虚拟表字段及兼容展示类型>
73
- - [ ] 虚拟表创建 | `form virtual create` | objId/formId: 待回填
74
-
75
- ##### 3.1.1 表单布局蓝图(按[表单布局规划](../form/guide-form-layout-planning.md)识别;需求提供完整布局样表时必填,否则标“— 未提供,使用默认布局”)
76
- - [ ] 布局类型:EXCEL / FLOW
77
- - [ ] 来源:<需求文档章节或表格标题>
78
- - [ ] 物理列结构:<如 4 列:标签|字段|标签|字段>
14
+ > `[ ]` 为未完成;写入且按该项风险完成必要核验后,才改 `[x]` 并填写真实 ID 或结果。尚待后续资源的项保留 `[ ]` 并写明依赖。
15
+ > 来源可用需求文档章节、表格或图片标题。已有资源先只读盘点,记明复用/修改/新建及实际 ID。
16
+
17
+ ### 0. 环境与范围
18
+ - 目标环境/profile:<名称与地址>;所属机构:<名称/ID>;主应用:<名称/ID>
19
+ - 跨应用资源与范围:<无/资源及归属>
20
+ - 待业务确认:<歧义及其影响;无则“无”>
21
+ - 待环境核查:<资源或环境行为;无则“无”>
22
+
23
+ ### 1. 资源清单与依赖
24
+
25
+ | 资源 | 决策与归属 | 来源及用途 | 前置依赖 | 实际 ID/结果 |
26
+ |---|---|---|---|---|
27
+ | 应用 <名称> | 新建/复用;机构 <名称> | <来源> | 环境 | 待回填 appId |
28
+ | 角色 <名称> | 新建/复用 | <来源、成员类型与范围> | 机构 | 待回填 roleId |
29
+ | 矩阵 <名称> | 新建/复用 | <来源、条件列/值列/行数据> | 机构、人员/部门 | 待回填 matrixId |
30
+ | 表单 <名称> | EB/虚拟/原生流程表单;新建/复用;应用 <名称> | <来源、用途> | 应用、数据源 | 待回填 objId/formId |
31
+ | 视图 <名称> | 默认台账改名/复用/新增;PC/MOBILE | <来源、用途> | 所属表单 | 待回填 listId/viewId |
32
+ | 流程 <名称> | EB/原生;普通/公文;固定/自由;新建/复用 | <来源、业务流转> | 表单、角色/矩阵 | 待回填 workflowId |
33
+ | 权责表 <名称> | 随流程新建/独立复用 | <来源、分支场景> | 流程/变量 | 待回填 authRespId |
34
+ | 报表/数据集 <名称> | 新建/复用 | <来源、统计目标> | 来源字段 | 待回填 ID |
35
+ | 菜单/页面 <名称> | 新建/复用 | <来源、入口及目标> | 视图/流程/页面 | 待回填 ID |
36
+
37
+ > 角色和矩阵先用 `role list`、`matrix list` 只读盘点同名资源及归属、成员或数据行,记录候选 ID,并与用户逐项确认复用还是新建。复用但需补成员或数据行的,在对应功能批次单独列项;没有矩阵需求则不创建。
38
+
39
+ #### 1.1 表单字段与布局蓝图(每张表单各一份)
40
+
41
+ ##### 表单:<名称>;资源决策:<新建/复用>;objId/formId:<待回填>;来源:<章节>
42
+ - 布局:FLOW/EXCEL;已有表单改造时记录现有布局及保留要求。
43
+ - 字段清单:逐字段写主表/明细表、名称、componentKey、选项、默认值、长度/精度、关联目标、公式及明确的必填/只读/隐藏/独占一行/分组。字段名含中英文时分别记录。
44
+ - 明细表:<名称、字段、层级>;二级明细逐条记录父明细→子明细、父子行标识及默认展开要求。
45
+ - 虚拟表:<来源类别与资源ID、稳定主键、来源字段→展示类型映射>。
46
+ - 关联依赖:<字段→目标表/流程及 ID 待回填位置>。
47
+ - 布局样表来源:<章节/图片/表格;无则“未提供,使用约定布局”>。
79
48
 
80
49
  | 行 | 类型 | 左侧单元 | 右侧单元 | 跨列/占位 | 原文属性与说明 |
81
50
  |---|---|---|---|---|---|
82
- | 1 | 标题 | <表单标题> | — | 跨全部列 | |
83
- | 2 | 字段 | <标签> → [<字段名>] | 空 | 右侧留空 | 只读 |
84
- | 3 | 分组 | <分组名> | — | 跨全部列 | |
85
- | 4 | 字段 | <标签> → [<字段名>] | <标签> → [<字段名>] | 双字段 | 必填;只读 |
86
-
87
- > 逐行记录标题、分组、字段同排关系、字段先后、空白占位和可确认的跨列信息;合并范围暂时无法确认时标为“待确认”。
88
- > 将蓝图中的必填、只读、公式、校验和联动同步写入字段定义或 3.2 表单级配置。
89
- > 执行时根据蓝图组织 `fields.json`,使用 EXCEL 布局完成创建和初始化;创建后读取实际布局并按需求调整局部位置或显示属性。
90
-
91
- ##### 3.2 表单级配置(来源: 本表单 <表单名A>;建表后逐项配齐,缺一项这张表不算完成)
92
- - [ ] 字段名称多语言 | `form field-lang set <objId> <appId> <fieldId> --zh <中文> --en <English>`(仅需求明确提供多语言名称时列出;先建中文字段再设置)
93
- - [ ] 复杂编号 | `form serial-mark set <objId> <appId> <fieldId> --segments @json`(纯建模表:fixed/year/serial/field/system/date+代字;⚠ 绑流程表无效→走 `workflow numbering`)
94
- - [ ] 值带出(关联表) | `form relate <appId> <objId> <目标字段> --from <Employee/Department源字段>`(换申请人→填邮箱/工号/部门;HRM属性带出,简单单源)
95
- - [ ] 值带出(跨表/多跳) | `form field-linkage add <appId> <objId> --trigger <触发字段> --target <目标字段> --hops "<源表objId:带出字段,源表objId:带出字段,...>"`(跨表查询带出,支持多跳链式中转;Text 字段必须多跳到名称表取名称不能直接赋 ID)
96
- - [ ] 本表字段自动计算(函数联动) | `form formula-linkage add <appId> <objId> --event changeField --trigger <触发字段> --target <目标字段> --expression "VALUE({主表.数量})*VALUE({主表.单价})"`(本表字段间的公式赋值;表达式只给右侧。系统模块字段如 `{主表.当前日期}` 可作来源/触发,但不可作目标)
97
- - [ ] 关联显示列 | `form ebuilder-columns <objId> <appId> <fieldId> [字段名...]`(先不带参数看业务字段候选清单,去系统字段)
98
- - [ ] 关联数据范围 | `form ebuilder-scope set <objId> <appId> <fieldId> --rules '[...]'`(如客户状态=启用才可选)
99
- - [ ] 字段公式 | `form formula set --expression "DAYS({主表.开始},{主表.结束})" --target <fieldId>`(或 fields.json inline)
100
- - [ ] 查重校验 | `form validate add <objId> <appId> <字段名...>`(项目名称重名/工时日期重复)
101
- - [ ] 显隐联动 | `form linkage add <appId> <objId> <名> --config @json`(prop: hide/show/edit/readonly/required/hideLine)
102
- - [ ] 字段分组 | `form group <objId> <appId> --groups '{"基本信息":[...]}'`(建表时已用 group 则跳过)
103
- - [ ] 表单权限 | `form permission add <objId> <appId> --org-type <all/role/dept/...> --right-type <0/1/2/3>`(勿默认所有人)
104
- - [ ] 表单页按钮 | 名称/位置/来源页面/打开目标/字段映射 | `form button add`(固定URL、视图、布局或流程;[指南](../form/guide-form-button.md))
105
-
106
- ##### 3.3 台账/视图配置(来源: 本表单 <表单名A> 的台账;无需求标「— 无」)
107
- - [ ] 显示列批量设置 | `form list-columns <objId> <appId> <listId> --set @columns.json`([指南](../form/guide-list-columns.md))
108
- - [ ] 列单位 | `form list-unit <objId> <appId> <listId> <fieldId> "(元)"`
109
- - [ ] 列格式 | `form list-format <objId> <appId> <listId> <fieldId> [--thousandths] [--decimal <n>]`
110
- - [ ] 字段事件(列点击跳转) | `form list-click <objId> <appId> <listId> <fieldId> [--target <objId>]`
111
- - [ ] 搜索条件 | `form list-search <objId> <appId> <listId> [--add <f>] [--quick <f>]`
112
- - [ ] 排序 | `form list-sort <objId> <appId> <listId> [--field <f>] [--order ASC|DESC]`
113
- - [ ] 顶部统计(主表/明细) | `form list-stats <objId> <appId> <listId> --add @json`([指南](../form/guide-list-stats.md))
114
- - [ ] 视图数据条件 | `form list-filter <objId> <appId> <listId> --add '{"conditions":[...]}'`
115
- - [ ] 关联页签及目标视图 | `form association create <objId> <appId> <名> --view <viewId> --permissions @json`([指南](../form/guide-form-association.md))
116
- - [ ] 关联页签布局与终端 | `form association update <objId> <appId> <associationId> --layouts 显示 --terminals PC MOBILE`([指南](../form/guide-form-association.md))
117
- - [ ] 关联页签数据筛选 | `form association set-filter <objId> <appId> <associationId> --mappings @json`([指南](../form/guide-form-association.md))
118
- - [ ] 视图按钮 | 名称: <按钮名> | 来源视图: <名称/listId> | 位置: <行上/行末下拉/右上/右上下拉> | 动作: <打开视图/布局/流程/URL及目标ID> | 映射: <目标字段 ← 当前行来源字段;无则“无”> | `form button add` / `form button action-set`([指南](../form/guide-form-button.md))
119
- - [ ] 行事件(整行点击) | `form list-event <objId> <appId> <listId> --add-page '{...}'`
120
- - [ ] 视图启用分组 | `form list-group <objId> <appId> <listId> --enable --group-field <fieldId>`([指南](../form/guide-form-view.md))
121
- - [ ] 上下级树形展示 | `form list-hierarchy <objId> <appId> <listId> --enable --parent-field <自关联字段名或ID> --expand-level <层级>`(如根据“上级类型”展示;不同于普通字段分组,[指南](../form/guide-form-view.md))
122
- - [ ] 主表合并行 | `form list-merge <objId> <appId> <listId>`
123
- - [ ] 台账视图权限 | `form list-permission <objId> <appId> <listId> [--add-all|--add-user <id> --name <n>]`
124
- - [ ] 分类搜索 | `form list-search-group <objId> <appId> <listId> [--add <选项fieldId>]`
125
- - [ ] 自定义视图 | `form view create <objId> <appId> <名> --type kanbanView|calendarView|mindMapView|multiView` + `form view populate`
126
- - [ ] 表格视图 | 默认复用台账,记录实际名称/listId;额外新建才用 `form table-view create <objId> <appId> <名>`([指南](../form/guide-form-view.md))
127
- > 表单自带台账(搜索/筛选/导出/批量)。本节只列有需求的项;无需求标「— 无」
128
-
129
- #### ▼ 表单:<表单名B> | objId: 待创建
130
- (同上 3.1/3.2/3.3 复制)
131
-
132
- ---
133
-
134
- ### 4. 流程(每个流程一组,逐个复制此分组)
135
-
136
- #### ▼ 流程:<流程名A> | workflowId: 待创建
137
-
138
- - 流程体系:EB / 原生工作流程
139
- - 原生类型:普通 / 公文(EB 流程填“—”)
140
- - 流转模式:固定 / 自由
141
- - 表单来源:EB 表单 / 自建原生表单 / 已有原生 formId
142
-
143
- ##### 4.1 创建
144
- - [ ] 创建 | `workflow create <appId> <formObjId> <名>`(默认不加菜单;确认需要发起入口时 `--menu` 加)
145
- > 原生工作流程改用 `workflow create-workflow`;公文类型增加 `--odoc`。布局类型在表单来源后注明。
146
- > ⚠️ **流程级必做**:① 流程编号(`workflow numbering`);② 出口名称(`workflow link-rename`,改业务人话);③ 出口条件清单(见 4.3,先列全表再逐条创建,勿凭印象跳步)
147
-
148
- ##### 4.2 节点与连线(来源: 本流程 <流程名A>;每节点一行)
149
- > ⚠️ 操作者按需求语义用对应 `--type`(role/dept/position/superior/initiator/form/matrix/free/all),**禁止兜底成具体人员顶替**;名称解析不到先停下确认。
150
- - [ ] 节点1 | 操作者: 创建人
151
- - [ ] 节点2 | 操作者: 区域经理+部门领导(竞签) ← 「A或B审批」=一节点多人+竞签/非会签,不拆节点
152
- - [ ] 节点3 | 条件: <字段>=<值> 才走到,否则跳过/直达<节点>
153
- - [ ] 节点4 | 操作者: 角色X | 动作流: → <目标表>(add/update/delete, 映射: 源→目标)
154
- - [ ] 连线 | `workflow add-links <wf> @links.json`(`reject`/`default` 逐条给;默认出口同源节点自动让位)
155
- - [ ] 结构改完补排版 | `workflow auto-layout <wf>`(**加/删节点、加/删连线之后必跑**;建流程时自动跑过的那一次不算)
156
-
157
- ###### 权责表设计(搭建方式为权责表时填写,替代普通节点与连线清单)
158
- - [ ] 权责表来源 | 默认流程内新建;仅多重嵌套或明确复用时选择复用已有 | 权责表:<名称> | authRespId:待回填
159
- - [ ] 首尾设置 | 发起:<类型及操作者> | 结束:<类型及操作者>
160
- - [ ] 中间节点 | <节点名称、类型、操作者>
161
- - [ ] 分支路径 | <场景说明> | 条件:<条件> | 路径:<节点及顺序>
162
- - [ ] 嵌套权责表 | <适用分支> | 引用:<权责表及版本> | 顺序:<序号>
163
- - [ ] 条件字段来源 | 系统字段 / 当前流程表单字段 / 独立权责表变量
164
- - [ ] 变量映射 | <独立权责表变量(主表/明细)> → <当前流程实际表单字段(主表/明细)> / 随流程新建无需映射
165
- > 权责表方式流程的节点、分支条件和流转路径统一在权责表设计中维护;复用独立权责表时逐项列出变量映射。
166
- > 一般权责表流程使用 `auth-resp-flow create --new-table`,条件直接引用流程表单字段;多重嵌套或跨流程共享同一权责规则时,才规划独立权责表、嵌套引用及 `--reuse-table` 变量映射。
167
-
168
- ##### 4.3 出口条件清单(来源: 本流程 <流程名A>;必填,动手前逐条列出,防遗漏)
169
- 段② 执行到条件时,先按此表列出所有连线的完整条件,逐条确认后再 `workflow condition add`:
170
-
171
- | 来源节点 | 目标节点 | 连线名 | 条件 | 来源 | 操作 | 值/右字段 | 明细量词 | 备注 |
172
- |---|---|---|---|---|---|---|---|---|
173
- | 发起 | 初审 | 部门初审 | 所属部门=财务部 | form:所属部门 | 等于 | 财务部 | — | |
174
- | 发起 | 初审 | 部门初审 | 报销金额5k~10k | form:报销金额 | 范围 | 5000:10000 | — | 数值范围 |
175
- | 发起 | 初审 | 部门初审 | 发起时间≥报销日期 | system:发起时间 | 大于等于 | field:报销日期 | — | 变量模式 |
176
- | 发起 | 初审 | 部门初审 | 报销类型∈{差旅,住宿} | form:报销类型 | 属于 | 差旅费,住宿费 | 任一 | 与下行OR |
177
- | 发起 | 初审 | 部门初审 | 同上OR组 | form:发票编号 | 包含 | FP | 任一 | 接上行OR |
178
-
179
- 要点:每行一条原子条件,OR 组拆多行备注"与下行OR";操作列 等于/大于/小于/范围/属于/包含/为空/不为空/field(变量模式);值列字面值直接写、`field:`前缀引用另一字段;明细量词 任一(任一行)/所有(所有行)/—(主表);创建完 `workflow condition list <wf>` 回读核对总数一致
180
-
181
- - [ ] 出口名 | `workflow link-rename <wf> <linkId> <业务人话>`(分支连线尤其要改)
182
-
183
- ##### 4.4 节点级配置(每个审批节点一组,逐个复制)
184
- ###### ▶ 节点:<节点名> | nodeId: 待创建
185
- - [ ] 操作者 | `workflow set-operator <wf> <node> [keyword] --type <user/role/dept/position/all/free/superior/initiator/prev-node/form/matrix> --sign-order <会签/竞签/依次/抄送>`(`--append` 多组叠加)
186
- - [ ] 提交校验 | `workflow node validate <wf> <node> --rule "字段 操作 值"`(跨表用"明细表名.字段",如 `行程明细.开始时间 等于 出差开始日期`)
187
- - [ ] 签字意见必填 | `workflow node sign <wf> <node> --select "退回"`(退回等操作类型必填意见)
188
- - [ ] 节点菜单 | `workflow node menu <wf> <node> --toggle <menuId>`
189
- - [ ] 退回设置 | `workflow node reject <wf> <node>`
190
- - [ ] 超时处理 | `workflow node timeout <wf> <node>`
191
- - [ ] 字段权限 | `workflow node field-permission set <wf> <node> --hide <字段...>`
192
-
193
- ##### 4.5 流程级设置(来源: 本流程 <流程名A>)
194
- - [ ] 公文设置 | 公文类型、正文、节点、附件、归档、签章、编号及 AI 等配置 | `workflow odoc setting set`(原生类型为公文时按实际需求填写)
195
- - [ ] 流程编号 | `workflow numbering set <wf> --prefix LC --serial 4 --no-year`(REQUEST_NO,绑流程表必走)
196
- - [ ] 流程标题 | `workflow setting title <wf> --rule "发起人|提交日期|客户名称"`(标题=流程名+系统字段则跳过)
197
- - [ ] 提交确认 | `workflow setting submit <wf>`
198
- - [ ] 签字意见 | `workflow setting sign <wf>`
199
- - [ ] 评论 | `workflow setting comment <wf> --enable`
200
- - [ ] 批量操作 | `workflow setting batch <wf>`
201
- - [ ] 自动处理 | `workflow setting auto <wf>`
202
- - [ ] 其他 | `workflow setting other <wf>`
203
- - [ ] 存档 | `workflow advanced doc <wf>`
204
- - [ ] 定时触发 | `workflow advanced schedule <wf>` + `schedule-range <wf>`(人员范围)
205
- - [ ] 消息提醒 | `workflow message create`(IM 提醒动作流)
206
-
207
- ##### 4.6 动作流(跨表写入/自动化)
208
- - [ ] 动作流生成 | `actionflow generate '{"planFile":"@plan.json",...}'`(来源: 本流程触发 → 目标: <目标表单>)
209
- - [ ] 节点字段赋值 | `workflow save-action @action.json`(来源: 本流程 <节点名>)
210
- - [ ] 数据来源落点 | 目标台账建 Flow 字段 `form add-field <目标台账objId> <app> "数据来源" Flow --sform-id <本流程表单objId>`(来源: 本流程 → 落点: <目标台账表单名>),add 时 `--sysvar` 写 requestId,**update/delete 也靠它定位**
211
-
212
- #### ▼ 流程:<流程名B> | workflowId: 待创建
213
- (同上 4.1-4.6 复制)
214
-
215
- ---
216
-
217
- ### 5. 菜单(来源: 应用)
218
- - [ ] 台账菜单 | 建表时需要入口则使用 `form create --menu`;未生成入口时用 `menu add-table <appId> <objId>` 补加(默认台账视图存在不等于菜单入口存在)
219
- - [ ] 发起菜单 | `menu add-start <appId> <formObjId>`(来源: <流程名>绑定的表单;workflow create 已自动加)
220
- - [ ] 自定义菜单 | `menu add <名> <path> <appId>`(LINK,ecode 页面)
221
- - [ ] 菜单权限 | `menu permission`(岗位/角色/部门/人员可见)
222
-
223
- ### 6. 页面(定制)
224
- - [ ] 无定制 | 标「### 页面(无需,表单自带台账)」
225
- - [ ] 定制页面 | Ecode `project create/import` + 页面编码(图表/跨表聚合/特殊交互)
226
-
227
- ### 7. 矩阵(HRM,按需)
228
- - [ ] <矩阵名> | `matrix create` + `config-edit` + `enable` + `data`(来源: 被 <流程名> 的 `set-operator --type matrix` 引用)
229
-
230
- ### 8. 无法实现的项(无则填写“无”)
231
-
232
- | 来源与原需求 | 无法实现的原因 | 影响范围 | 后续处理或待确认事项 |
51
+ | 1 | 标题 | <标题> | — | 跨全部列 | <来源> |
52
+ | 2 | 字段 | <标签>→[字段] | <标签>→[字段] | <同排/留空> | <必填/只读等> |
53
+ | 3 | 分组 | <分组名> | — | 跨全部列 | <顺序> |
54
+
55
+ > 样表有标题、分组、空白、字段同排或跨列时逐行保留,并与字段清单互相核对。缺少的合并范围标待确认。建新表时按蓝图准备 fields.json,按所选布局创建并初始化;公式、联动、校验等后续配置在功能批次单列。
56
+
57
+ #### 1.2 视图与流程设计依据
58
+ - 每张视图:所属表单、默认/新增、视图类型、终端、名称、数据范围及需要的显示列/交互要求。
59
+ - 每个流程:表单来源、节点、操作者及签署方式、全部连线、默认出口、逐条条件、节点显示属性和动作流落点。普通流程和权责表流程分别按对应指南列出;权责表逐场景写说明、条件、经过节点及顺序,独立复用时写变量→主/明细字段映射。
60
+
61
+ ### 2. 第一阶段:应用、表单与视图
62
+
63
+ #### 2.1 资源与字段布局批次
64
+ - [ ] 应用 <名称> | 新建/复用 | appId:待回填 | 核验:<名称与归属>
65
+ - [ ] 角色 <名称> | roleId:待回填 | 核验:<角色及成员;成员可另列项>
66
+ - [ ] 表单 <名称> 的字段、明细及布局 | objId/formId:待回填 | 来源:1.1 <名称> | 核验:字段、布局及默认台账
67
+ - [ ] 表单 <名称> 的字段、明细及布局 | objId/formId:待回填 | 来源:1.1 <名称> | 核验:字段、布局及默认台账
68
+
69
+ > 先按跨表引用关系建立必要的表单骨架,再补关联目标;不为了凑齐所有表单而破坏实际依赖。新建 EB 表单尽量用 `form create --fields` 一次写入字段与布局属性。依赖流程 ID 的关联字段记录占位,流程建成后回填。
70
+
71
+ #### 2.2 表单级功能批次(一个功能项覆盖全部相关表单)
72
+
73
+ > 写实际 plan 时,按 `##### 功能批次:<功能名>|覆盖表单:<A、B、...>` 分组;组内为每张表单的每条规则分别列 `[ ]`。例如“关联浏览数据范围”涉及客户表、合同表,就在同一批次下列两条,逐条配置并销号,再进入“字段公式”等下一批次。下列每行是应按需求展开的功能项示例,不代表只配置一张表单。
74
+
75
+ ##### 功能批次:关联浏览数据范围|覆盖表单:<客户表、合同表>
76
+ - [ ] 客户表 / 关联客户字段 | 条件:<规则> | 核验:可选记录
77
+ - [ ] 合同表 / 关联项目字段 | 条件:<规则> | 核验:可选记录
78
+
79
+ ##### 功能批次:<从下列功能项选择一类>|覆盖表单:<逐一列出>
80
+
81
+ > 按需求复制此标题,每个标题只放同一功能的待办项,并把覆盖表单逐一展开;下列条目是可选的填写样式。
82
+ - [ ] 关联字段及目标绑定 | 表单/字段:<名称> | 目标:<资源/ID> | 核验:选择范围
83
+ - [ ] 关联浏览显示列 | 表单/字段:<名称> | 列:<字段及顺序> | 核验:弹窗显示
84
+ - [ ] 二级明细关系 | 父表/子表:<名称> | 行标识:<字段> | 核验:逐父行归属
85
+ - [ ] 字段多语言 | 表单/字段:<名称> | 中文/英文:<名称> | 核验:两种名称
86
+ - [ ] 字段公式 | 表单/目标字段:<名称> | 表达式:<公式> | 核验:读回与样例值
87
+ - [ ] 字段带出或函数联动 | 表单/规则:<名称> | 触发/来源/目标/表达式:<内容> | 核验:触发结果
88
+ - [ ] 属性显隐联动 | 表单/规则:<名称> | 条件/目标/状态:<内容> | 核验:条件切换
89
+ - [ ] 查重校验 | 表单/字段:<名称> | 行为:<提示/阻断> | 核验:重复样例
90
+ - [ ] 编号规则 | 表单/字段:<名称> | 组成与位数:<内容> | 核验:生成值
91
+ - [ ] 表单权限 | 表单/主体:<名称> | 新建/查看/编辑/删除范围:<内容> | 核验:授权结果
92
+ - [ ] 表单页按钮 | 表单/页面/位置:<名称> | 目标与字段映射:<内容> | 核验:点击结果
93
+
94
+ > 每个功能批次先核对覆盖表单清单,再逐表配置;同一表单有多条独立规则时继续拆行。建表时已配置并核验的分组、必填、只读、默认值等写在 2.1 的表单项结果中,不重复执行。
95
+
96
+ #### 2.3 视图资源批次
97
+ - [ ] 默认台账 <原名> 复用/改名为 <目标名> | 表单:<名称> | listId:待回填 | 核验:名称与类型
98
+ - [ ] 新增视图 <名称> | 表单:<名称> | 类型/终端:<内容> | listId/viewId:待回填 | 核验:可打开且已填充
99
+
100
+ #### 2.4 视图功能批次(一个功能项覆盖全部相关视图)
101
+
102
+ > 沿用 2.2 的结构:`##### 功能批次:<功能名>|覆盖视图:<视图A、视图B、...>`。例如“显示列”先列全部需配置的 PC/MOBILE 视图,每张视图及终端单独列项并完成;再处理搜索、排序等下一批次。以下为需要按需求展开的功能项示例。
103
+ - [ ] 显示列 | 视图/终端:<名称/PC或MOBILE> | 字段/顺序/宽度:<内容> | 核验:列表显示
104
+ - [ ] 列格式或单位 | 视图/字段:<名称> | 格式/单位:<内容> | 核验:展示值
105
+ - [ ] 搜索与排序 | 视图:<名称> | 字段、入口与优先级:<内容> | 核验:查询及顺序
106
+ - [ ] 筛选与顶部统计 | 视图:<名称> | 条件/函数:<内容> | 核验:记录及统计值
107
+ - [ ] 普通分组或上下级 | 视图:<名称> | 分组/父级字段:<内容> | 核验:分组或层级
108
+ - [ ] 视图权限 | 视图/主体:<名称> | 查看/操作范围:<内容> | 核验:权限读回
109
+ - [ ] 行上或右上按钮 | 视图/位置:<名称> | 目标/当前行过滤/预填:<内容> | 核验:点击结果
110
+ - [ ] 行点击或字段点击 | 视图/字段:<名称> | 打开目标和方式:<内容> | 核验:点击结果
111
+ - [ ] 关联页签 | 表单/页签/目标视图:<名称> | 权限/布局/终端/筛选映射:<内容> | 核验:相关数据
112
+
113
+ > 搜索、排序、筛选和统计若各有独立业务要求,分别建立功能批次和待办项。依赖第二阶段流程 ID 的按钮、流程关联字段等保留 `[ ]` 并注明依赖,在第二阶段回填后销号。第一阶段完成后请用户确认,再进入第二阶段。
114
+
115
+ ### 3. 第二阶段:流程与自动化
116
+
117
+ #### 3.1 矩阵、权责表及流程资源
118
+ - [ ] 矩阵 <名称> | 条件列/值列/行×列数据:<内容> | matrixId:待回填 | 核验:列、行和值
119
+ - [ ] 流程 <名称> | EB/原生/公文,固定/自由,表单来源:<内容> | workflowId:待回填 | 核验:绑定表单
120
+ - [ ] 本流程全部节点 | 节点名称、类型及顺序:<内容> | 核验:节点 ID 与清单一致
121
+ - [ ] 本流程全部连线 | 源节点→目标节点、连线名称及默认出口:<内容> | 核验:完整拓扑
122
+ - [ ] 本流程出口条件 <源节点→目标节点> | 字段来源、操作、值、AND/OR、明细量词:<内容> | 每条条件复制一项;核验:分支路由
123
+ - [ ] 本流程节点操作者 <节点名> | 角色/矩阵/字段等来源及签署方式:<内容> | 每个节点复制一项;核验:人员范围
124
+ - [ ] 本流程结构排版与核对 | 节点、连线、默认出口、条件及操作者:<内容> | 核验:流程图及配置读回
125
+ - [ ] 权责表 <名称> | 随流程新建/独立复用 | authRespId:待回填 | 核验:场景与节点路径
126
+
127
+ > 每个流程各复制一组“流程→节点→连线→条件→操作者→结构核对”,逐条流程完成核心流转;独立条件和操作者仍分别列项、分别销号。权责表流程的分支与经过节点按权责表指南在本流程下展开。实际配置按依赖进行,后续若有完整配置命令,可由同一组计划条目核对结果。
128
+
129
+ #### 3.2 流程附加设置与功能批次
130
+ - [ ] 节点字段权限或布局 | 流程/节点:<名称> | 字段/显示状态:<内容> | 核验:节点页面
131
+ - [ ] 节点校验、退回、超时、菜单或其他行为 | 流程/节点:<名称> | 逐项写明:<内容> | 核验:配置读回
132
+ - [ ] 流程编号、标题、提醒或流程级设置 | 流程:<名称> | 逐项写明:<内容> | 核验:配置读回
133
+ - [ ] 公文专属设置 | 流程:<名称> | 按实际需求列出:<内容> | 核验:对应设置读回
134
+ - [ ] 权责表场景/变量映射 | 权责表:<名称> | 场景条件、路径或变量→字段:<内容> | 核验:路径与映射
135
+ - [ ] 动作流/节点字段赋值 | 触发流程/节点:<名称> | 目标、字段映射及定位:<内容> | 核验:绑定与结果
136
+ - [ ] 回填第一阶段的流程依赖 | 表单字段/视图按钮:<名称> | workflowId/formId:<实际值> | 核验:选择或打开结果
137
+
138
+ > 核心流转按 3.1 逐流程完成;本节的附加设置可按功能批次处理,但每条独立规则或动作流仍分别列项。第二阶段完成后请用户确认,再进入第三阶段。
139
+
140
+ ### 4. 第三阶段:报表、菜单与页面
141
+ - [ ] 报表数据集 <名称> | 来源、字段、关联:<内容> | datasetId:待回填 | 核验:数据集字段
142
+ - [ ] 报表 <名称> | 布局、查询及共享:<内容> | reportId:待回填 | 核验:展示与授权
143
+ - [ ] 菜单 <名称> | 层级、目标资源及权限:<内容> | menuId:待回填 | 核验:入口与可见范围
144
+ - [ ] 配置式或定制页面 <名称> | 终端、组件/交互、绑定资源:<内容> | pageId:待回填 | 核验:页面加载与业务结果
145
+
146
+ ### 5. 待确认、需补充及无法实现
147
+ | 来源与原需求 | 状态 | 原因或缺失信息 | 影响与后续处理 |
233
148
  |---|---|---|---|
234
- | <表单/流程/页面及具体要求> | <已核实的平台或 CLI 能力限制> | <缺失的业务效果> | <可行替代方案或需要补充的能力;需用户决定时注明> |
235
-
236
- ## 执行分段(最多三段,每段完成停下来让用户确认,确认后才进下一段)
237
- 以确认后的 `plan.md` 为执行清单,按资源依赖顺序逐项读取相关指南并完成配置;完成并核验一项,就立即勾选对应项并回填实际 ID 或结果。每段结束前检查本段应完成项是否全部销号,依赖后续资源的项目保留 `[ ]` 并注明依赖,不得提前勾选。
238
-
239
- - **段①:应用、角色、表单与视图。** 完成应用、角色、全部表单和表单布局,并配齐字段属性、关联、公式、联动、校验、权限、默认台账、新增视图、显示列、搜索排序、筛选统计、分组、上下级、按钮和关联页签等表单及视图相关配置。依赖流程 ID 的配置在 plan 中列明,待段②创建流程后回填。
240
- - **段②:流程与自动化。** 完成流程创建、节点连线、操作者、出口条件、节点配置、流程级设置、矩阵和动作流,并回填段①中依赖流程 ID 的表单字段、表单按钮和视图按钮。完成后**补跑一次 `workflow auto-layout`**,再确认流程结构及关键条件。
241
- - **段③:菜单与页面。** 完成台账、流程发起和自定义菜单,配置菜单权限,并按需求创建配置式页面或定制页面,绑定真实资源 ID 后完成保存、发布和整体收尾。
242
- - 简单单步需求(改字段、查数据)不分段,直接执行
243
- > **表单是流程的地基**:流程绑定表单、条件/动作流/操作者都引用字段,字段设计错了流程全返工——表单段必须确认后再进流程
244
-
245
- ## 规则备忘
246
- - **改完流程结构要补排版**:`workflow auto-layout <wf>` 只在 `create`/`create-workflow` 建流程时自动跑过一次,**之后一律不会顺带重跑**(add-node/add-link/delete-node/delete-link 都不跑)。所以 4.2 的最后一项别省 —— 加完分支线不补,图上就留着交叉。两个边界:① 它是**整图重排**,人在浏览器里拖过的坐标会被覆盖;② **不保证消除交叉**,跨层连线仍可能穿过中间层节点,跑完看一眼流程图,有交叉手工调。
247
- - **执行前读指南**:每个命令的完整参数/边界/示例在对应 `references` 文档(SKILL.md 决策树按关键词路由),动手前先读,勿凭印象调命令出错
248
- - Plan 阶段不调 e10-cli 写命令(可 list/read 查现状);必须写 plan.md 落地,不要只在对话里列方案
249
- - 应用数量:默认全需求只建 1 个应用,不按功能点拆;确需多应用先跟用户确认
250
- - 流程按节点逐行,操作者含签署方式/条件/动作流挂节点;**「A 或 B 审批」= 一节点多人 + 竞签/非会签,不拆节点**
251
- - 台账页面不用写,表单自带台账(搜索/筛选/导出/批量)
252
- - 表单字段一次性建好(`form create --fields`);需求明确的 singleRow/group 建表时写入,字段参数按 `references/form/ref-form-fields.md` 确定
253
- - 需求提供完整布局样表时,字段清单和“表单布局蓝图”必须同时存在:前者定义字段,后者保留空间结构;字段覆盖数、同排关系、分组顺序和原文说明应逐项对应
254
- ```
149
+ | <章节及要求> | 待业务确认/待环境核查/需其他方式补充/已确认无法实现 | <内容> | <内容> |
255
150
 
256
- ---
151
+ > 已确认无法实现的原需求项保持 `[ ]`,不得以替代配置冒充完成;在此说明原因和影响,交由用户决定。其他状态继续保留相应待办与依赖。
257
152
 
258
- ## 来源标注方式
153
+ ### 6. 阶段验收与交付资源
154
+ - 第一阶段:全部应建表单的字段、明细、布局和默认台账已核对;表单级与视图级需求逐项销号,后续流程依赖已标注。
155
+ - 第二阶段:流程结构、关键条件、操作者及动作流已核对;第一阶段的流程依赖项已回填。
156
+ - 第三阶段:报表、菜单和页面入口已核对;交付时列出应用→表单→视图、流程、矩阵、报表、页面的真实 ID 与未完成项。
157
+ ```
259
158
 
260
- | 配置项类型 | 来源标注方式 |
261
- |----------|------------|
262
- | 表单级配置(3.2/3.3) | 分组头 `▼ 表单:<表单名A> | objId: 待创建`,其下项来源=该表单 |
263
- | 流程级配置(4.2/4.3/4.5) | 分组头 `▼ 流程:<流程名A> | workflowId: 待创建`,其下项来源=该流程 |
264
- | 节点级配置(4.4) | 子分组头 `▶ 节点:<节点名> | nodeId: 待创建`,其下项来源=该节点 |
265
- | 跨表项(动作流落点) | 内联标 `来源: 本流程 → 落点: <目标台账表单名>` |
266
- | 菜单/矩阵 | 内联标 `来源: <表单名>` / `被 <流程名> 引用` |
159
+ ## 使用边界
267
160
 
268
- 多张表/多个流程时,复制对应 `▼` 分组(每张表/每个流程一组),来源即分组头声明。每个 `[ ]` 都能看清属于哪个表单/流程/节点,不会把 A 表的配置错配到 B 表。
161
+ - 资源清单负责保存“建什么、复用什么、谁依赖谁”,功能批次负责“具体配置什么”;两处用资源名称或实际 ID 对应,不重复创建同一资源。
162
+ - 字段和布局蓝图仍逐表保存,防止按功能批次执行时遗失字段顺序、分组和表格空间结构。
163
+ - 功能批次只规定同类操作的优先处理顺序。出现跨表循环、流程 ID、目标页面等依赖时,按真实依赖先建立资源,再回到相应条目完成配置。
164
+ - 最小核验与业务风险相称;仅在用户要求时进行实际环境测试。计划销号仍以配置完成及必要的结果核对为准。