weaver-e10-builder 1.5.5 → 1.5.7

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 (101) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +6 -0
  3. package/dist/commands/actionflow.js.map +1 -1
  4. package/dist/commands/form-layout.d.ts.map +1 -1
  5. package/dist/commands/form-layout.js +137 -0
  6. package/dist/commands/form-layout.js.map +1 -1
  7. package/dist/commands/form-serial-mark.d.ts.map +1 -1
  8. package/dist/commands/form-serial-mark.js +7 -1
  9. package/dist/commands/form-serial-mark.js.map +1 -1
  10. package/dist/commands/form-view.d.ts.map +1 -1
  11. package/dist/commands/form-view.js +11 -2
  12. package/dist/commands/form-view.js.map +1 -1
  13. package/dist/commands/form.js +1 -1
  14. package/dist/commands/form.js.map +1 -1
  15. package/dist/commands/org.d.ts +7 -4
  16. package/dist/commands/org.d.ts.map +1 -1
  17. package/dist/commands/org.js +92 -54
  18. package/dist/commands/org.js.map +1 -1
  19. package/dist/commands/workflow-node-validate.d.ts.map +1 -1
  20. package/dist/commands/workflow-node-validate.js +159 -15
  21. package/dist/commands/workflow-node-validate.js.map +1 -1
  22. package/dist/commands/workflow.d.ts.map +1 -1
  23. package/dist/commands/workflow.js +23 -5
  24. package/dist/commands/workflow.js.map +1 -1
  25. package/dist/core/crypto.d.ts +19 -0
  26. package/dist/core/crypto.d.ts.map +1 -1
  27. package/dist/core/crypto.js +70 -35
  28. package/dist/core/crypto.js.map +1 -1
  29. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  30. package/dist/services/actionflow/components/action_eb_update_compiler.js +3 -1
  31. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  32. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -1
  33. package/dist/services/actionflow/components/custom_trigger.js +2 -0
  34. package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
  35. package/dist/services/actionflow/components/event_button.d.ts.map +1 -1
  36. package/dist/services/actionflow/components/event_button.js +2 -0
  37. package/dist/services/actionflow/components/event_button.js.map +1 -1
  38. package/dist/services/actionflow/components/event_form_data.d.ts.map +1 -1
  39. package/dist/services/actionflow/components/event_form_data.js +2 -0
  40. package/dist/services/actionflow/components/event_form_data.js.map +1 -1
  41. package/dist/services/actionflow/components/form_data_builder.d.ts +23 -0
  42. package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -0
  43. package/dist/services/actionflow/components/form_data_builder.js +106 -0
  44. package/dist/services/actionflow/components/form_data_builder.js.map +1 -0
  45. package/dist/services/actionflow/components/hrm_actions.d.ts +1 -0
  46. package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
  47. package/dist/services/actionflow/components/hrm_actions.js +136 -44
  48. package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
  49. package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -1
  50. package/dist/services/actionflow/components/inner_mq_listener.js +2 -0
  51. package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -1
  52. package/dist/services/actionflow/components/webhook_trigger.d.ts.map +1 -1
  53. package/dist/services/actionflow/components/webhook_trigger.js +6 -5
  54. package/dist/services/actionflow/components/webhook_trigger.js.map +1 -1
  55. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  56. package/dist/services/actionflow/components/workflow_actions.js +6 -3
  57. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  58. package/dist/services/actionflow/formula_service.d.ts +1 -1
  59. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  60. package/dist/services/actionflow/formula_service.js +14 -7
  61. package/dist/services/actionflow/formula_service.js.map +1 -1
  62. package/dist/services/actionflow/hrm_source.d.ts +2 -0
  63. package/dist/services/actionflow/hrm_source.d.ts.map +1 -1
  64. package/dist/services/actionflow/hrm_source.js +4 -0
  65. package/dist/services/actionflow/hrm_source.js.map +1 -1
  66. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  67. package/dist/services/actionflow/preflight_service.js +62 -0
  68. package/dist/services/actionflow/preflight_service.js.map +1 -1
  69. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  70. package/dist/services/actionflow/workflow_compiler.js +19 -22
  71. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  72. package/dist/services/form-layout-copy-default.d.ts +94 -0
  73. package/dist/services/form-layout-copy-default.d.ts.map +1 -0
  74. package/dist/services/form-layout-copy-default.js +157 -0
  75. package/dist/services/form-layout-copy-default.js.map +1 -0
  76. package/dist/services/form-layout-insert.js +1 -1
  77. package/dist/services/form-layout-insert.js.map +1 -1
  78. package/dist/services/form-view-populate.d.ts +76 -0
  79. package/dist/services/form-view-populate.d.ts.map +1 -0
  80. package/dist/services/form-view-populate.js +171 -0
  81. package/dist/services/form-view-populate.js.map +1 -0
  82. package/dist/services/form-view.d.ts +4 -0
  83. package/dist/services/form-view.d.ts.map +1 -1
  84. package/dist/services/form-view.js +49 -90
  85. package/dist/services/form-view.js.map +1 -1
  86. package/dist/services/org-department.d.ts +30 -17
  87. package/dist/services/org-department.d.ts.map +1 -1
  88. package/dist/services/org-department.js +45 -65
  89. package/dist/services/org-department.js.map +1 -1
  90. package/package.json +1 -1
  91. package/skill-docs/SKILL.md +278 -282
  92. package/skill-docs/_catalog.md +87 -86
  93. package/skill-docs/actionflows/references/components/personnel/HrmEmployeeUpdate.md +3 -1
  94. package/skill-docs/actionflows/references/components/personnel/PersonnelAlterType.md +38 -0
  95. package/skill-docs/actionflows/references/components/personnel/PersonnelOnboarding.md +36 -34
  96. package/skill-docs/actionflows/references/components/trigger/WebHookTrigger.md +4 -2
  97. package/skill-docs/references/common/guide-plan-template.md +12 -4
  98. package/skill-docs/references/common/map.md +152 -0
  99. package/skill-docs/references/common/ref-cli-commands.md +8 -2
  100. package/skill-docs/references/form/guide-form-view.md +28 -0
  101. package/skill-docs/references/workflow/guide-workflow.md +20 -2
@@ -99,10 +99,13 @@
99
99
  | `e10-cli form view list <objId> <appId> [--with-comps]` | 列出表单全部视图。`--with-comps` 额外拉每个视图布局 comps 数、标出空视图(NList 数据视图会显示「读取失败」,正常) |
100
100
  | `e10-cli form view rename <objId> <appId> <viewId> <新名称>` | 修改已有默认台账(nListView)的名称,保留原视图 ID 和配置,并在保存后回读确认。需求名称与默认名称不一致时统一用此命令,不新建重复视图 |
101
101
  | `e10-cli form view create <objId> <appId> <视图名> [--type formView\|kanbanView\|calendarView\|mindMapView\|multiView] [--terminal PC\|MOBILE] [--layout-type FLOW\|EXCEL] [--detail <明细名>] [--sub-form-id <明细subFormId>]` | 给**已有表单**添加视图。`formView` 创建后是空布局,需续跑 `form view populate` 填字段;`kanbanView`/`calendarView`/`mindMapView`/`multiView` 建视图实体。**multiView 数据维度**:缺省主表;明细表维度用 `--detail <明细名>`(按名解析)或 `--sub-form-id <明细subFormId>`(直传),传值即明细维度(`subFormMain:true`)。**台账(NList)视图**用 `form table-view create`,不在此命令 |
102
- | `e10-cli form view populate <objId> <appId> <viewId>` | 把已有字段按布局类型填入新增的 formView(视图为空时用这个填充) |
102
+ | `e10-cli form view populate <objId> <appId> <viewId>` | 把已有字段按布局类型填入 formView。视图为空则整份填;**视图已有字段时只补缺**——只补视图里还没有的字段,已有组件的排版与属性一个不动(重跑幂等)。表单新增字段后要让它出现在某个视图里,也走这条 |
103
103
  | `e10-cli form native <子命令>` | **原生表单引擎**(formdatareport/biaoge,非 Ebuilder;只有 formId、无 objId、无 appId)的命令组:`create <名称>` 建表、`read <formId>` 读字段、`add-field` / `add-detail-table` / `init` / `field-group`,以及 `list [--keyword]`(存活表单,名称模糊搜)、`trash`(回收站)、`delete <formId...>`(停用→检查→删除,进回收站,删后回读确认)。**注意与 EB 表单不通用**:URL 前缀 `/api/formdatareport/...`、body module `biaoge` 或 `formdatareport` 视接口而定 |
104
104
  | `e10-cli form layout read <objId> [--view-id <id>]` | 读表单布局结构(comps 坐标/只读)。不传 `--view-id` 读默认布局,传则读指定视图 |
105
105
  | `e10-cli form layout init <objId> [--style-template <名\|id>] [--view-id <id>] [--read-only] [--required] [--disable-edit] [--single-row]` | 初始化/重建表单布局(initLayout):**换样式模板** + 覆盖字段 readOnly/required/disableEdit/singleRow(不传这些开关则**保留字段已有设置**)。**⚠ 样式模板流式与表格式是两套**,同名不同 id,按表单实际布局类型实时查(传错套会直接报错并列出可用项;**平台对跨套 id 不报错、只会静默忽略,表现为"命令成功但样式没变"**)。缺省:流式=标准版、表格式=表格版。完整模板表见 `form/style-templates.md`。**建表时不能指定样式,只能建完再用本命令换** |
106
+ | `e10-cli form layout copy <objId> <appId> --from <源布局ID> [--name <新名>] [--describe <文本>]` | 复制一套已有布局(设计器里的「复制」)。**响应体不含新布局 ID**(平台只回一句「复制成功!」),命令靠**复制前后各回读一次视图列表**反查并把新 ID 报出来。`--name` 缺省沿用源布局名;布局类型自动跟随源(表格式复制出来仍是表格式)。**复制出来的不是默认布局**,要设为默认续跑 `form layout set-default` |
107
+ | `e10-cli form layout set-default <objId> <appId> <布局ID> [--for all\|add\|view\|edit]` | 把某套布局设为默认(设计器右键「设为默认布局」)。⚠ `--for` 是**用途档位**、不是布局类型:`all` 全部布局 / `add` 新建布局 / `view` 显示布局 / `edit` 编辑布局(也收中文说法,缺省 `all`)。**一套布局同时只承担一个档位** —— 换档位会把旧档位摘掉;「新建/显示/编辑各用一套」是靠**三套不同布局各占一档**。设完回读 `defaultType` 确认;只有 `all` 才会让视图的 `default` 变 `true` |
108
+ | `e10-cli form layout delete <objId> <appId> <布局ID>` | 删除一套布局(设计器的「删除」)。⚠ **不可逆**。删完**回读确认列表里确实没了**才算成功;该布局原先占的用途档位会一并打印。删掉正占着 `all` 的那套会怎样**未验证**,慎用 |
106
109
  | `e10-cli form group <objId> <appId> --groups '{"基本信息":["字段名/fieldId",...]}'` | 给**已建好的 eb 表**加字段分组(折叠容器)。建组 saveFieldGroup → 分配 updateFormFieldGroup → initLayout generateCollapse 渲染。`--groups` 可 `@文件`;`--required` 同时设分组内字段必填;同名分组复用不重复建(去重)。建表时一次性带分组用 `form create` 的 fields.json `group` 属性 |
107
110
  | `e10-cli form data add <objId> <appId> <json>` | 写入表单数据(`@` 开头为 JSON 文件路径)。JSON key 可用 fieldId 或字段名;Select/RadioBox 值填选项名(自动解析 valueKey)或 valueKey、CheckBox/SelectMultiple 用数组、TextArea 直接值、Employee/Department 用 ID。详见 `form/guide-form-data.md` |
108
111
  | `e10-cli form data list <objId> [--page <n>] [--size <n>]` | 查询表单数据(**只含主表**)。`--page` 页码(缺省1)、`--size` 每页条数(缺省1000;不传 pageInfo 平台默认卡 10) |
@@ -167,7 +170,9 @@
167
170
  | `e10-cli role delete <ids...>` | 删除角色(可多个) |
168
171
  | `e10-cli role add-member <roleId> <名字...> [--type <类型>]` | 添加角色成员,**可一次给多个名字**(各自独立搜索)。`--type` 取 `resource`(人员,缺省) / `department`(部门) / `subcompany`(分部) / `position`(岗位) / `channel`(渠道) —— 这几项正是平台 `objectTypeFilter` 白名单里**可以逐个选**的对象,白名单另三项 `all`/`external`/`allExternal` 不是逐个选的对象,本命令不支持。五类走**同一个保存端点**,靠 `objType` 选各自数组(`obj_resource` / `obj_department` / `obj_subcompany` / `obj_position` / `obj_channel`)。搜索**精确同名优先**;同名多条、或多条命中却没有同名项,一律**报错不取首条**(取首条会静默加错人)。`--sec-min/--sec-max`、`--is-seclevel` 覆盖安全级别(**这两个值随租户配置变**,缺省 `0`/`100` + false);`--department-attribute subordinate,partTimeStaff` 给部门/分部指定是否含下级 / 含兼职。**增量追加**,不会冲掉已有成员 |
169
172
  | `e10-cli role member-list <roleId>` | 列出角色成员(人员 / 部门 / 分部 / 岗位 / 渠道,含成员级别与分权范围) |
170
- | `e10-cli org department create <name> [--code <编号>] [--parent <父部门id>] [--subcompany <机构id>]` | 新建部门。**四步链**:`organization/getForm` 取保存模板(含平台**现生成**的 targetId)→ `form/core/getFormLayout` 取布局 id → `form/core/saveFormData` 落数据并回吐 recordId → `organization/saveForm` 落组织树。`--parent` 不传即顶层部门,挂在当前用户机构下(机构自动解析,可用 `--subcompany` 覆盖)。⚠ 模板里 `parent` 是数组、`subcompany` 是对象数组,命令内部转成平台要的字符串形状 —— **别拿模板直接发** |
173
+ | `e10-cli org department create <name> [--code <编号>] [--parent <父部门id>] [--subcompany <分部id>]` | 新建部门。**两步**:`organization/getForm?flag=department` 取保存模板(含平台**现生成**的 targetId)→ `organization/saveForm` 落组织树(扁平报文,背后的表单记录平台会自己补)。`--parent` 不传即顶层部门,挂在当前用户的分部下(分部自动解析,可用 `--subcompany` 覆盖)。⚠ 模板里 `parent` 是数组、`subcompany` 是对象数组,命令内部转成 id 字符串 —— **别拿模板直接发** |
174
+ | `e10-cli org subcompany create <name> --parent <上级分部id> [--code <编号>]` | 新建**分部**(机构;部门挂在它下面)。与建部门**同一套接口、同一个报文**,只差 `getForm` 的 `flag` 与报文的 `type`。⚠ **必须给 `--parent`**(分部总得挂在某个分部下)。⚠ 「上级部门」与「所属分部」**至少填一个**,两者各填其中一半:建**部门**填「所属分部」、建**分部**填「上级分部」 |
175
+ | `e10-cli org subcompany delete <id> [--parent <上级分部id>]` | 删除分部(平台同一个 `department/delete` 端点)。删除前会从组织树读该节点的 `count` 做**预警**(下面还有人时平台不允许删),但**不阻断** —— 最终以平台为准。⚠ 与部门删除一样是**软删** |
171
176
  | `e10-cli org department edit <id> [--name] [--code] [--parent] [--disporder]` | 编辑部门:改名 / 改编号 / **移动父级** / 改排序。是「**读现状 → 改 → 写回**」:`organization/getForm?id=` 读回这个部门的**完整当前状态**(含 tenantKey / creator / datarank / createTime 等,全部原样回传,别自己造),改完再 `organization/saveForm`。⚠ 编辑报文与新建**形状不同**(认 `id`,没有 `targetId`/`formdata`/`recordId`,`advanceForm:false`),不能共用构造函数。命令会自动**回读确认**改名生效,静默失败会报错 |
172
177
  | `e10-cli org department delete <id> [--parent <父部门id>] [--subcompany <机构id>]` | 删除部门。`--parent` 是该部门的**父**(顶层部门的父就是机构 id),不传按当前机构的上下文解析。⚠ 删除是**软删**(`isDelete: true`),删完用 `getForm?id=` 仍能读出来 —— 判存在与否要看 `isDelete` 字段,别看接口有没有返回 |
173
178
  | `e10-cli org employee template [--out <路径>]` | 导出人员导入模板(xlsx)。**模板是随包发的资源**(含富文本表头和「注意事项」工作表),直接复制,不用代码重建 |
@@ -234,6 +239,7 @@
234
239
  | `e10-cli workflow numbering reserve <wf> <count> [--prefix]` | 预留编号。**流程编号=REQUEST_NO 系统字段**:eb表单绑流程后编号走本命令(不要用 `form serial-mark` 表单编号,那对流程表无效) |
235
240
  | `e10-cli workflow node validate <wf> <nodeId> --rule "主题字段 操作 值字段或字面值"` | 节点提交校验(智能审批规则,提交时拦截)。值可以是**字段**(字段 vs 字段)或**字面值**(字段 vs 常量);主题字段支持**跨表**——用「明细表名.字段名」定位明细字段做主子表校验:`"请假时长 小于 4"`、`"行程明细.行程开始时间 等于 出差开始日期"`(明细字段=主表字段)。**操作符**:大于 / 大于等于 / 小于 / 小于等于 / 等于 / 不等于 / **为空 / 不为空**(后两个无需值,如 `"备注 不为空"`)。**明细量词**:明细字段的主题末尾可写 `:任一`(任一行,缺省)或 `:所有`(所有行),如 `"货品明细.货品名称:所有 不为空"`;主表字段写量词会报错。`--name` 规则名;`--disable` 关闭;`--view` 查看 |
236
241
  | `e10-cli workflow node menu <wf> <nodeId>` | 查看/切换节点操作菜单。`--toggle <menuId>` 切换启用状态 |
242
+ | `e10-cli workflow node validate <wf> <nodeId> --rules-json @file.json` | 组合条件(AND/OR 嵌套、数值上下限、系统字段);`--pass-tip`/`--fail-tip` 设置提示语,`--on-fail 禁止提交|仅做提醒` 设置不合规处理,`--relation AND|OR` 设置节点多规则关系。完整格式见节点校验指南。 |
237
243
  | `e10-cli workflow node layout list <wf> [--terminal PC\|MOBILE]` | 列出该工作流表单的布局,以及每套被哪些节点引用 |
238
244
  | `e10-cli workflow node layout get <wf> <nodeId>` | 查看某节点挂的是哪套布局(空 = 跟随表单默认) |
239
245
  | `e10-cli workflow node layout bind <wf> <nodeId> --layout-id <id>` | 把节点挂到某套布局。**自动从原来那套摘掉**(一个节点同时只属于一套布局);幂等 |
@@ -53,6 +53,34 @@ e10-cli form view create <objId> <appId> "交付日历" \
53
53
 
54
54
  `form view populate` 以原表单 `formId` 读取字段,以新视图 `viewId` 作为 `layoutMultiId` 读取目标布局,再按目标的 FLOW/EXCEL 类型重新生成字段组件并独立回读。不得把视图的 `versionId` 或 `pageLayoutId` 当成 `formId`。
55
55
 
56
+ **视图里已经有字段时,`populate` 是「只补缺」**:只把后来新增、视图里还没有的字段补进去,
57
+ **已有组件的排版与属性一个不动**(重跑幂等,已齐就只回一句「已有完整字段布局」)。
58
+ 所以「表单加了字段、要让它出现在某个视图里」也走这条 —— 不必删视图重建。
59
+
60
+ ## 复制 / 设默认 / 删除一套布局
61
+
62
+ 设计器里视图卡片右键的三个动作,各有对应命令(都在 `form layout` 组下,不是 `form view`):
63
+
64
+ ```bash
65
+ # 复制(复制出来的不是默认布局)
66
+ e10-cli form layout copy <objId> <appId> --from <源布局ID> [--name <新名>]
67
+
68
+ # 设为默认
69
+ e10-cli form layout set-default <objId> <appId> <布局ID> [--for all|add|view|edit]
70
+
71
+ # 删除(⚠ 不可逆)
72
+ e10-cli form layout delete <objId> <appId> <布局ID>
73
+ ```
74
+
75
+ - **复制**:`--from` 传的是**视图 ID**(`form view list` 能查到)。平台**不回新布局 ID**,
76
+ 命令靠自己复制前后各读一次列表反查,报出来的 `layoutId=` 就是新的那套。`--name` 缺省沿用源布局名。
77
+ - **设默认的 `--for` 是「用途档位」,不是 FLOW/EXCEL 那个布局类型**:`all` 全部布局 /
78
+ `add` 新建布局 / `view` 显示布局 / `edit` 编辑布局,缺省 `all`(也收中文说法)。
79
+ **一套布局同时只承担一个档位** —— 把同一套从 `add` 改成 `view`,`add` 就没了;
80
+ 「新建用一套、显示用另一套」是靠**三套不同布局各占一档**。只有 `all` 会让视图的 `default` 变 `true`。
81
+ - **删除**:`layoutId` 传视图 ID。删完**回读确认列表里确实没了**才算成功(平台会「返回成功但没删掉」)。
82
+ 这套布局原先占着某个档位的话,命令会一并打出来。⚠ **不可逆**;删掉正占着 `all` 的那套会怎样**未验证**,慎用。
83
+
56
84
  看板、日历、思维导图目前只确认创建实体和视图列表回读,尚不能据此宣称设计器已有可用组件。
57
85
 
58
86
  普通 `form view create --type` 只接受:
@@ -220,16 +220,34 @@ e10-cli workflow node sign <wf> <node> --select "退回,加签" # 指定操
220
220
 
221
221
  > 「退回时意见必填」= `--select 退回`(如:上级审核节点退回时要求填写意见)。操作类型以该节点可选范围为准(不同节点类型可操作类型不同)。
222
222
 
223
- ### 节点提交校验(智能审批规则,字段 vs 字段)
223
+ ### 节点提交校验
224
224
 
225
225
  ```bash
226
226
  e10-cli workflow node validate <workflowId> <nodeId> --view # 查看校验状态
227
227
  e10-cli workflow node validate <wf> <node> --name "一致性校验" \
228
228
  --rule "行程明细.行程开始时间 等于 出差开始日期" # 设置校验:行程开始时间=出差开始日期
229
+ e10-cli workflow node validate <wf> <node> --name "报销人校验" --rule "报销人 不为空" \
230
+ --pass-tip "报销人已填写" --fail-tip "请选择报销人" --on-fail 禁止提交
231
+ e10-cli workflow node validate <wf> <node> --name "多条件组合" \
232
+ --rules-json @node-check.json --on-fail 仅做提醒
229
233
  e10-cli workflow node validate <wf> <node> --disable # 关闭校验
230
234
  ```
231
235
 
232
- > **规则语法**:`--rule "主题字段 操作 值字段"`。主题字段用「**明细表名.字段名**」可定位明细字段,操作支持 等于/不等于/大于/大于等于/小于/小于等于,值字段为比较引用的另一字段(字段 vs 字段,非字面值)。重复执行是**更新**同一条规则;对已配置节点会复用原 conformanceId。校验不通过默认**阻止提交**(FORBID_SUBMIT)。
236
+ `--rule` 支持字段对字段、字段对常量及 `为空`/`不为空`;明细字段可加 `:任一`/`:所有`。同一规则内多条 `--rule` 为 AND;同名重新执行仅替换同名规则,其他规则保留。节点多规则关系用 `--relation AND|OR`,不合规处理用 `--on-fail 禁止提交|仅做提醒`(平台码值分别为 1、2)。`--pass-tip`/`--fail-tip` 设置每条规则的合规/不合规提示语,可用普通文字或平台字段标签、字段值占位符。`--pass-popup on|off`/`--fail-popup on|off` 控制节点级结果显示。用 `--view` 回读。
237
+
238
+ 组合条件使用 `--rules-json '<JSON>'` 或 `--rules-json @node-check.json`;组含 `relation`(AND/OR)和 `rules`,叶子含 `source`(form/system)、`field`、`op`、`value`,明细可加 `detail`(任一/所有),数值上限可加 `upperOp`、`upperValue`:
239
+
240
+ ```json
241
+ {"relation":"AND","rules":[
242
+ {"field":"费用明细.发票金额","detail":"任一","op":"大于","value":1,"upperOp":"小于等于","upperValue":100},
243
+ {"relation":"OR","rules":[
244
+ {"source":"system","field":"发起人分部","op":"属于","value":"泛微北京"},
245
+ {"source":"system","field":"发起人","op":"属于","value":"卢顾萱"}
246
+ ]}
247
+ ]}
248
+ ```
249
+
250
+ 组织或人员重名时,`value` 使用浏览器返回的 `{ "id": "...", "content": "..." }` 指定对象。按解析条件、保存规则和提示语、保存不合规处理、启用节点校验的顺序执行。
233
251
 
234
252
  **表单相关人员**(`--type form`)从指定表单的 Employee 字段动态获取审批人,支持筛选条件:
235
253