weaver-e10-builder 1.6.14 → 1.6.15

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 (46) hide show
  1. package/dist/commands/role.d.ts.map +1 -1
  2. package/dist/commands/role.js +3 -2
  3. package/dist/commands/role.js.map +1 -1
  4. package/dist/services/actionflow/components/action_eb_update_compiler.js +4 -4
  5. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  6. package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -1
  7. package/dist/services/actionflow/components/form_data_builder.js +113 -2
  8. package/dist/services/actionflow/components/form_data_builder.js.map +1 -1
  9. package/dist/services/actionflow/components/multiple_execution.js +7 -7
  10. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  11. package/dist/services/actionflow/components/output.d.ts.map +1 -1
  12. package/dist/services/actionflow/components/output.js +4 -1
  13. package/dist/services/actionflow/components/output.js.map +1 -1
  14. package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
  15. package/dist/services/actionflow/components/send_message.js +2 -1
  16. package/dist/services/actionflow/components/send_message.js.map +1 -1
  17. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  18. package/dist/services/actionflow/context_preflight.js +13 -2
  19. package/dist/services/actionflow/context_preflight.js.map +1 -1
  20. package/dist/services/actionflow/filter_rules.d.ts.map +1 -1
  21. package/dist/services/actionflow/filter_rules.js +3 -2
  22. package/dist/services/actionflow/filter_rules.js.map +1 -1
  23. package/dist/services/actionflow/formula_service.d.ts +2 -0
  24. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  25. package/dist/services/actionflow/formula_service.js +15 -7
  26. package/dist/services/actionflow/formula_service.js.map +1 -1
  27. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  28. package/dist/services/actionflow/preflight_service.js +9 -2
  29. package/dist/services/actionflow/preflight_service.js.map +1 -1
  30. package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
  31. package/dist/services/actionflow/readback_verifier.js +115 -0
  32. package/dist/services/actionflow/readback_verifier.js.map +1 -1
  33. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  34. package/dist/services/actionflow/workflow_compiler.js +124 -21
  35. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  36. package/dist/services/role-function-permission.d.ts +8 -1
  37. package/dist/services/role-function-permission.d.ts.map +1 -1
  38. package/dist/services/role-function-permission.js +23 -8
  39. package/dist/services/role-function-permission.js.map +1 -1
  40. package/package.json +3 -3
  41. package/skill-docs/SKILL.md +4 -4
  42. package/skill-docs/actionflows/references/components/personnel/HrmEmployeeUpdate.md +1 -0
  43. package/skill-docs/actionflows/references/components/personnel/PersonnelOnboarding.md +1 -0
  44. package/skill-docs/actionflows/references/trigger_runtime_notes.md +1 -1
  45. package/skill-docs/references/common/ref-cli-commands.md +2 -2
  46. package/skill-docs/references/hrm/guide-role.md +4 -4
@@ -8,5 +8,12 @@ export interface RoleFunctionPermission {
8
8
  }
9
9
  export declare function flattenRolePermissions(nodes: any[]): RoleFunctionPermission[];
10
10
  export declare function readRolePermissions(client: ApiClient, base: string, roleId: string): Promise<RoleFunctionPermission[]>;
11
- export declare function setRolePermission(client: ApiClient, base: string, roleId: string, code: string, enabled: boolean): Promise<RoleFunctionPermission>;
11
+ /**
12
+ * 授予/移除一个功能权限集。
13
+ *
14
+ * `permissionSetCode` 在权限树里**不保证全局唯一**(同一租户可出现多个同名编码);
15
+ * 平台的真实身份键是 `(menuCode, permissionSetCode)`。重码时用 `menuCode` 指定目标,
16
+ * 不给则报错并列出候选,避免「静默授错项」或「结构性无法授权」。
17
+ */
18
+ export declare function setRolePermission(client: ApiClient, base: string, roleId: string, code: string, enabled: boolean, menuCode?: string): Promise<RoleFunctionPermission>;
12
19
  //# sourceMappingURL=role-function-permission.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"role-function-permission.d.ts","sourceRoot":"","sources":["../../src/services/role-function-permission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,sBAAsB,EAAE,CAY7E;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAM5H;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACrF,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAgBjE"}
1
+ {"version":3,"file":"role-function-permission.d.ts","sourceRoot":"","sources":["../../src/services/role-function-permission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,sBAAsB,EAAE,CAY7E;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAM5H;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACrF,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAyBpF"}
@@ -21,14 +21,28 @@ export async function readRolePermissions(client, base, roleId) {
21
21
  }
22
22
  return flattenRolePermissions(res.data.data);
23
23
  }
24
- export async function setRolePermission(client, base, roleId, code, enabled) {
24
+ /**
25
+ * 授予/移除一个功能权限集。
26
+ *
27
+ * `permissionSetCode` 在权限树里**不保证全局唯一**(同一租户可出现多个同名编码);
28
+ * 平台的真实身份键是 `(menuCode, permissionSetCode)`。重码时用 `menuCode` 指定目标,
29
+ * 不给则报错并列出候选,避免「静默授错项」或「结构性无法授权」。
30
+ */
31
+ export async function setRolePermission(client, base, roleId, code, enabled, menuCode) {
25
32
  const before = await readRolePermissions(client, base, roleId);
26
- const matches = before.filter(row => row.permissionSetCode === code);
27
- if (matches.length !== 1)
28
- throw new Error(`权限集 ${code} 在当前角色权限树中未唯一匹配`);
33
+ let matches = before.filter(row => row.permissionSetCode === code);
34
+ if (menuCode)
35
+ matches = matches.filter(row => row.menuCode === menuCode);
36
+ if (matches.length !== 1) {
37
+ const where = menuCode ? `${code}(menuCode=${menuCode})` : code;
38
+ if (matches.length === 0)
39
+ throw new Error(`未找到权限集 ${where}`);
40
+ const candidates = matches.map((row) => `${row.menuCode}(${row.permissionName || '未命名'})`).join('、');
41
+ throw new Error(`权限集 ${code} 匹配到 ${matches.length} 项,无法确定是哪一个:${candidates}。请加 --menu-code 指定`);
42
+ }
29
43
  const target = matches[0];
30
44
  if (target.disabled)
31
- throw new Error(`权限集 ${code} 在当前角色权限树中被禁用`);
45
+ throw new Error(`权限集 ${code}(menuCode=${target.menuCode})在当前角色权限树中被禁用`);
32
46
  if (target.checked === enabled)
33
47
  return target;
34
48
  const item = { menuCode: target.menuCode, permissionSetCode: target.permissionSetCode, permissionName: target.permissionName };
@@ -38,9 +52,10 @@ export async function setRolePermission(client, base, roleId, code, enabled) {
38
52
  if (res?.code !== 200 || !res?.status || res?.fail)
39
53
  throw new Error(`保存角色功能权限失败:${res?.msg || '未知错误'}`);
40
54
  const after = await readRolePermissions(client, base, roleId);
41
- const saved = after.find(row => row.permissionSetCode === code);
42
- if (!saved || saved.checked !== enabled)
43
- throw new Error(`平台返回成功,但权限集 ${code} 回读不一致`);
55
+ const saved = after.find(row => row.permissionSetCode === code && row.menuCode === target.menuCode);
56
+ if (!saved || saved.checked !== enabled) {
57
+ throw new Error(`平台返回成功,但权限集 ${code}(menuCode=${target.menuCode})回读不一致`);
58
+ }
44
59
  return saved;
45
60
  }
46
61
  //# sourceMappingURL=role-function-permission.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"role-function-permission.js","sourceRoot":"","sources":["../../src/services/role-function-permission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"role-function-permission.js","sourceRoot":"","sources":["../../src/services/role-function-permission.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "weaver-e10-builder",
3
- "version": "1.6.14",
3
+ "version": "1.6.15",
4
4
  "description": "Eteams/Ebuilder CLI — 泛微 OA 命令行工具",
5
5
  "type": "module",
6
6
  "files": [
@@ -10,8 +10,8 @@
10
10
  "assets"
11
11
  ],
12
12
  "bin": {
13
- "e10-cli": "./dist/index.js",
14
- "ecodecmd": "./ecodecmd/src/index.js"
13
+ "e10-cli": "dist/index.js",
14
+ "ecodecmd": "ecodecmd/src/index.js"
15
15
  },
16
16
  "scripts": {
17
17
  "dev": "tsx src/index.ts",
@@ -2,11 +2,11 @@
2
2
  name: weaver-e10-builder
3
3
  display_name: 泛微E10智能搭建Skill
4
4
  display_name_en: E10 Builder
5
- description: 泛微E10智能搭建skill v2(通用版),辅助编写泛微Ebuilder自定义应用,对应CLI版本1.6.14
6
- description_zh: 泛微Ebuilder低代码应用智能搭建工具 v2(通用版),辅助编写自定义应用(表单/流程/列表/动作流/权限/分组/编号等),与 e10-cli 配套使用,当前对应 CLI 版本 1.6.14。
7
- description_en: E10 Ebuilder low-code app builder skill v2 (general) — helps build Weaver E10 custom apps (forms/workflows/lists/actionflows/permissions/groups/numbering) via e10-cli, currently paired with CLI 1.6.14.
5
+ description: 泛微E10智能搭建skill v2(通用版),辅助编写泛微Ebuilder自定义应用,对应CLI版本1.6.15
6
+ description_zh: 泛微Ebuilder低代码应用智能搭建工具 v2(通用版),辅助编写自定义应用(表单/流程/列表/动作流/权限/分组/编号等),与 e10-cli 配套使用,当前对应 CLI 版本 1.6.15。
7
+ description_en: E10 Ebuilder low-code app builder skill v2 (general) — helps build Weaver E10 custom apps (forms/workflows/lists/actionflows/permissions/groups/numbering) via e10-cli, currently paired with CLI 1.6.15.
8
8
  category: coding
9
- version: 1.6.14
9
+ version: 1.6.15
10
10
  author: 泛微网络科技股份有限公司
11
11
  auto: true
12
12
  ---
@@ -19,6 +19,7 @@
19
19
  - 至少提供一个待更新字段;字段、对象或必填约束无法解析时,停止生成。
20
20
  - 生成的 `setting` 统一使用通用 `EsbFormDataDto` 生成逻辑,并使用 `update_original` 模式:主表、明细表都会按实时字段定义生成完整骨架,未修改主表字段为 `{"formFieldKey":"","value":{"original":true}}`,未修改明细字段为 `{"formFieldKey":"","value":{"original":true,"assign":null}}`。
21
21
  - `setting` 统一补充 `dataDrWithCalc=false`、`deleteMainFields=[]`,每张输出的明细表带 `deleteFields=[]`;动态赋值字段、原值占位字段和 DTO 外壳都由公共生成器处理。
22
+ - 配置 `fieldAssignments.detail` 时,至少一个字段必须引用真实的来源表单明细上下文;CLI 从该字段已解析的上下文公式自动生成 `setting.detail[].basisValue`。若无法从上下文确认唯一来源明细,生成会报错,不会猜测依据值。设计器回读校验也会检查明细依据值和字段赋值。
22
23
 
23
24
  ## 语义计划形状
24
25
 
@@ -16,6 +16,7 @@
16
16
  - plan 传 `fieldAssignments`,CLI 交给通用 `EsbFormDataDto` 生成器,根据实时字段定义生成平台 `setting`;不允许手写 `setting` / `EsbFormDataDto`。
17
17
  - 编译后的 `setting` 统一使用通用 `EsbFormDataDto` 生成逻辑,并使用 `create` 模式:主表、明细表都会按实时字段定义生成完整骨架,未赋值主表字段为 `{"formFieldKey":""}`,未赋值明细字段为 `{"formFieldKey":"","value":{"assign":null}}`。
18
18
  - `setting` 统一补充 `dataDrWithCalc=false`、`deleteMainFields:[]`;每张输出的明细表带 `deleteFields:[]`。动态赋值字段和空字段都由公共生成器处理,入职组件不重复实现 DTO 保存逻辑。
19
+ - 配置 `fieldAssignments.detail` 时,至少一个字段必须引用真实的来源表单明细上下文;CLI 从该字段已解析的上下文公式自动生成 `setting.detail[].basisValue`。若无法从上下文确认唯一来源明细,生成会报错,不会猜测依据值。设计器回读校验也会检查明细依据值和字段赋值。
19
20
  - 字段可用显示名或字段 ID。当前租户出现同名字段时必须使用字段 ID。
20
21
  - Browser 字段(部门、岗位、上级等)只接受其对应选择器返回的真实对象,不能把名称或 ID 当文本填入。
21
22
  - 未提供当前租户必填字段、或字段/取值无法解析时,停止生成并报告缺项。
@@ -37,7 +37,7 @@
37
37
  `ActionEbUpdate` 等数据动作的筛选条件(filterCondition)右值走上下文引用时,条件对象里的 `esbAssign.wId` 字段**必须指向「当前节点」**(filterInput 所属的数据动作节点 id),**不能指向上游 event 节点**。
38
38
 
39
39
  - 设计器打开「动态赋值」对话框时,用 `esbAssign.wId` 在 `orginFlowDatas` 里定位当前组件;指向 event 节点 → 定位不到 → 右侧「暂无数据」(EmptyView,不可编辑/不可选)。
40
- - `value.source` / `config.comId` 仍指向 event 节点(公式来源,不变);只有 `esbAssign.wId` 单独用当前节点 id。
40
+ - `value.source` / `config.comId` 指向提供上下文的组件节点;来源是触发器时指向 event,来源是其他组件或循环上下文时指向实际来源节点。`esbAssign.wId` 指向当前节点。
41
41
  - 判断口径:读回后 `esbAssign.wId` 应等于该 ActionEbAdd/Update/Delete 节点的 `id`,不等于 `event.id`。
42
42
 
43
43
  ## 4b. 同类问题全量修复:mapping / updateId / basisValue / 明细依据值下级 / updateFieldCondition / requestName 的上下文公式也要 `esbAssign.wId`(真机验证 2026-08-18)
@@ -263,8 +263,8 @@
263
263
  | `e10-cli role update <roleId> [--name …] [--code …] [--remark …] [--parent <id>]` | 局部修改角色基础信息,保留未指定项,保存后回读;父角色必须存在且不可形成循环 |
264
264
  | `e10-cli role create <name>` | 创建角色,`--parent <id>` 指定父角色,`--code` 编码,`--remark` 备注 |
265
265
  | `e10-cli role delete <ids...>` | 删除角色(可多个) |
266
- | `e10-cli role permission list <roleId>` | 查询当前角色功能权限集的编码、名称、选中与禁用状态;权限项来自平台权限树,不使用固定码表 |
267
- | `e10-cli role permission add\|remove <roleId> <permissionSetCode>` | 按权限集编码授予/移除一项功能权限;先从权限树确认目标,再用增量 `addList/removeList` 保存并回读选中状态,不覆盖其他权限 |
266
+ | `e10-cli role permission list <roleId>` | 查询当前角色功能权限集的 `menuCode`、编码、名称、选中与禁用状态;权限项来自平台权限树,不使用固定码表。**同一编码可能对应多项**,用 `menuCode` 区分 |
267
+ | `e10-cli role permission add\|remove <roleId> <permissionSetCode> [--menu-code <menuCode>]` | 按权限集编码授予/移除一项功能权限;先从权限树确认目标,再用增量 `addList/removeList` 保存并回读选中状态,不覆盖其他权限。编码重码(如 `default`/`export`/`saveConfig`)时必须用 `--menu-code` 指定菜单;未指定且命中多项会列出候选并停止,不会误授 |
268
268
  | `e10-cli role add-member <roleId> [<名字...>] [--id <id,id>] [--type <类型>]` | 添加角色成员。**两条入口二选一**:给**名字**(可多个,各自独立搜索)或给 **`--id`**(逗号分隔,直接指定对象)。同名多条时用 `--id` —— 名字入口**精确同名优先**,同名多条、或多条命中却没有同名项,一律**报错不取首条**(取首条会静默加错人),报错里会列出候选及其 id。两条入口**最终走同一个构造器**,平台收到的东西完全一致(`--id` 不是"只发个 id",而是先按 id 把对象读回来)。`--type` 取 `resource`(人员,缺省) / `department`(部门) / `subcompany`(分部) / `position`(岗位) / `channel`(**群组**) —— 这几项正是平台 `objectTypeFilter` 白名单里**可以逐个选**的对象,白名单另三项 `all`/`external`/`allExternal` 不是逐个选的对象,本命令不支持。五类走**同一个保存端点**,靠 `objType` 选各自数组(`obj_resource` / `obj_department` / `obj_subcompany` / `obj_position` / `obj_channel`)。`--sec-min/--sec-max`、`--is-seclevel` 覆盖安全级别(**这两个值随租户配置变**,缺省 `0`/`100` + false);`--department-attribute subordinate,partTimeStaff` 给部门/分部指定是否含下级 / 含兼职。**`--level` 设「成员级别」**(总部 / 分部 / 部门,缺省**总部**;本次添加的成员共用同一档);**`--org-scope` 设「分权范围」**(成员能维护哪些机构,缺省全部机构;可选 同部门 / 同部门的下级部门 / 同部门及下级部门 / 同分部 / 同分部的下级分部 / 同分部及下级分部)。`role member-list` 的输出会带 `级别=` / `范围=` 便于核对。**增量追加**,不会冲掉已有成员。⚠ `--id` 里**有不存在的 id 会直接报错**(平台对取不到的 id 是静默丢弃的,不核对就会"报成功但少加了一个")|
269
269
  | `e10-cli role member-list <roleId>` | 列出角色成员(人员 / 部门 / 分部 / 岗位 / 群组,含成员级别与分权范围) |
270
270
  | `e10-cli role add-scope-member <roleId> --type all\|allExternal [--level 总部\|分部\|部门]` | 添加“所有人”或“全部外部联系人”成员;指定外部人员不支持 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 操作顺序
6
6
 
7
- 先用 `role list` 确认角色 ID,`role get <roleId>` 读取基础信息;修改角色基础信息后再读一次。成员先用 `role member-list <roleId>` 找**成员条目 ID**,再用 `member-get <roleId> <memberId>` 读取完整设置。成员对象 ID(人员/部门/岗位 ID)不等于成员条目 ID,修改和删除必须传后者。功能权限先 `role permission list <roleId>`,再按返回的 `permissionSetCode` 增减。
7
+ 先用 `role list` 确认角色 ID,`role get <roleId>` 读取基础信息;修改角色基础信息后再读一次。成员先用 `role member-list <roleId>` 找**成员条目 ID**,再用 `member-get <roleId> <memberId>` 读取完整设置。成员对象 ID(人员/部门/岗位 ID)不等于成员条目 ID,修改和删除必须传后者。功能权限先 `role permission list <roleId>`,再按返回的 `permissionSetCode` 增减;**同一编码在权限树里可能重复**,此时用列表里的 `menuCode` 配合 `--menu-code` 指定目标项。
8
8
 
9
9
  ```bash
10
10
  e10-cli role list
@@ -12,14 +12,14 @@ e10-cli role get <roleId>
12
12
  e10-cli role update <roleId> --name "新角色名" --remark "说明"
13
13
  e10-cli role update <roleId> --parent <父角色ID>
14
14
  e10-cli role permission list <roleId>
15
- e10-cli role permission add <roleId> <permissionSetCode>
16
- e10-cli role permission remove <roleId> <permissionSetCode>
15
+ e10-cli role permission add <roleId> <permissionSetCode> [--menu-code <menuCode>]
16
+ e10-cli role permission remove <roleId> <permissionSetCode> [--menu-code <menuCode>]
17
17
  e10-cli role member-list <roleId>
18
18
  e10-cli role member-get <roleId> <memberId>
19
19
  e10-cli role member-delete <roleId> <memberId> [更多成员条目ID...]
20
20
  ```
21
21
 
22
- `role update` 支持 `--name`、`--code`、`--remark`、`--parent`,未指定项沿用角色详情;`--parent` 只能给当前角色树中存在、且不是自身或子孙的角色 ID。`--remark ""` 清空备注。功能权限读取当前角色的权限树,`add/remove` 每次只改变一个权限集并核对选中状态,不需要、也不应手填 `menuCode` 和权限名称。禁用的权限集不能修改。
22
+ `role update` 支持 `--name`、`--code`、`--remark`、`--parent`,未指定项沿用角色详情;`--parent` 只能给当前角色树中存在、且不是自身或子孙的角色 ID。`--remark ""` 清空备注。功能权限读取当前角色的权限树,`add/remove` 每次只改变一个权限集并核对选中状态,不需要手填权限名称。**`permissionSetCode` 不保证全局唯一**:`default`、`export`、`saveConfig` 等编码可能同时挂在多个菜单下。未给 `--menu-code` 且命中多项时命令会列出候选并停止,不会误授;复制列表里的 `menuCode` 加 `--menu-code` 即可精准授权。禁用的权限集不能修改。
23
23
 
24
24
  ## 添加成员
25
25