cloudcc-cli 2.3.4 → 2.3.6

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 (244) hide show
  1. package/.claude/settings.json +22 -1
  2. package/.cursor/skills/cloudcc-cli-dev/SKILL.md +175 -0
  3. package/.cursor/skills/cloudcc-dev-skill/SKILL.md +71 -0
  4. package/README.md +81 -6
  5. package/bin/cc.js +106 -28
  6. package/bin/index.js +54 -55
  7. package/mcp/cliRunner.js +11 -4
  8. package/mcp/index.js +12 -2
  9. package/mcp/tools/Application Creator/handler.js +1 -1
  10. package/mcp/tools/Approval/handler.js +3 -3
  11. package/mcp/tools/Class Creator/handler.js +2 -2
  12. package/mcp/tools/Class Detail Retriever/handler.js +1 -1
  13. package/mcp/tools/Class Editor Guide/handler.js +1 -1
  14. package/mcp/tools/Class List Retriever/handler.js +1 -1
  15. package/mcp/tools/Class Publisher/handler.js +1 -1
  16. package/mcp/tools/Class Puller/handler.js +1 -1
  17. package/mcp/tools/Client Script Detail Retriever/handler.js +1 -1
  18. package/mcp/tools/Client Script Editor Guide/handler.js +1 -1
  19. package/mcp/tools/Client Script List Retriever/handler.js +1 -1
  20. package/mcp/tools/Client Script Publisher/handler.js +1 -1
  21. package/mcp/tools/Client Script Puller/handler.js +2 -2
  22. package/mcp/tools/CloudCC Development Overview/handler.js +2 -2
  23. package/mcp/tools/Component Creator/handler.js +1 -1
  24. package/mcp/tools/Component Detail Retriever/handler.js +1 -1
  25. package/mcp/tools/Component Editor Guide/handler.js +1 -1
  26. package/mcp/tools/Component List Retriever/handler.js +1 -1
  27. package/mcp/tools/Component Publisher/handler.js +2 -2
  28. package/mcp/tools/Component Puller/handler.js +1 -1
  29. package/mcp/tools/Dev Environment Creator/handler.js +1 -1
  30. package/mcp/tools/Dev Environment Validator/handler.js +1 -1
  31. package/mcp/tools/Developer Key Setup Guide/handler.js +1 -1
  32. package/mcp/tools/JSP Migrator/handler.js +46 -0
  33. package/mcp/tools/Menu Creator/handler.js +1 -1
  34. package/mcp/tools/Object Creator/handler.js +2 -2
  35. package/mcp/tools/Object Fields Creator/handler.js +1 -1
  36. package/mcp/tools/Object Fields Retriever/handler.js +1 -1
  37. package/mcp/tools/Object List Retriever/handler.js +1 -1
  38. package/mcp/tools/Scheduled Class Creator/handler.js +1 -1
  39. package/mcp/tools/Scheduled Class Detail Retriever/handler.js +1 -1
  40. package/mcp/tools/Scheduled Class List Retriever/handler.js +1 -1
  41. package/mcp/tools/Scheduled Class Publisher/handler.js +1 -1
  42. package/mcp/tools/Scheduled Class Puller/handler.js +1 -1
  43. package/mcp/tools/Trigger Creator/handler.js +1 -1
  44. package/mcp/tools/Trigger Detail Retriever/handler.js +1 -1
  45. package/mcp/tools/Trigger Editor Guide/handler.js +1 -1
  46. package/mcp/tools/Trigger List Retriever/handler.js +1 -1
  47. package/mcp/tools/Trigger Publisher/handler.js +1 -1
  48. package/mcp/tools/Trigger Puller/handler.js +1 -1
  49. package/package.json +3 -3
  50. package/src/application/create.js +2 -2
  51. package/src/application/delete.js +2 -2
  52. package/src/application/doc.js +2 -2
  53. package/src/application/docs/devguide.md +25 -25
  54. package/src/application/docs/introduction.md +2 -2
  55. package/src/button/create.js +169 -0
  56. package/src/button/delete.js +35 -0
  57. package/src/button/doc.js +36 -0
  58. package/src/button/docs/devguide.md +133 -0
  59. package/src/button/docs/introduction.md +60 -0
  60. package/src/button/get.js +60 -0
  61. package/src/button/index.js +20 -0
  62. package/src/classes/create.js +1 -1
  63. package/src/classes/delete.js +1 -1
  64. package/src/classes/detail.js +1 -1
  65. package/src/classes/doc.js +2 -2
  66. package/src/classes/docs/devguide.md +21 -21
  67. package/src/classes/docs/introduction.md +0 -20
  68. package/src/classes/get.js +1 -1
  69. package/src/classes/publish.js +1 -1
  70. package/src/classes/pull.js +1 -1
  71. package/src/classes/pullList.js +1 -1
  72. package/src/config/doc.js +2 -2
  73. package/src/config/docs/devguide.md +15 -15
  74. package/src/customPage/create.js +2 -2
  75. package/src/customPage/delete.js +2 -2
  76. package/src/customPage/doc.js +2 -2
  77. package/src/customPage/docs/devguide.md +27 -27
  78. package/src/customPage/get.js +1 -1
  79. package/src/customSetting/create.js +1 -1
  80. package/src/customSetting/delete.js +1 -1
  81. package/src/customSetting/deleteCustomSettingField.js +1 -1
  82. package/src/customSetting/detail.js +1 -1
  83. package/src/customSetting/docs/devguide.md +9 -9
  84. package/src/customSetting/editCustomSettingField.js +1 -1
  85. package/src/customSetting/get.js +1 -1
  86. package/src/customSetting/modify.js +1 -1
  87. package/src/customSetting/saveCustomSettingField.js +1 -1
  88. package/src/fields/delete.js +2 -2
  89. package/src/fields/docs/devguide.md +14 -14
  90. package/src/fields/docs/introduction.md +3 -3
  91. package/src/globalSelectList/create.js +1 -1
  92. package/src/globalSelectList/delete.js +1 -1
  93. package/src/globalSelectList/detail.js +1 -1
  94. package/src/globalSelectList/doc.js +2 -2
  95. package/src/globalSelectList/docs/devguide.md +7 -7
  96. package/src/globalSelectList/get.js +1 -1
  97. package/src/identityProvider/create.js +78 -0
  98. package/src/identityProvider/delete.js +61 -0
  99. package/src/identityProvider/doc.js +46 -0
  100. package/src/identityProvider/docs/devguide.md +107 -0
  101. package/src/identityProvider/docs/introduction.md +31 -0
  102. package/src/identityProvider/download.js +105 -0
  103. package/src/identityProvider/get.js +70 -0
  104. package/src/identityProvider/index.js +12 -0
  105. package/src/menu/create-object.js +2 -2
  106. package/src/menu/create-page.js +2 -2
  107. package/src/menu/create-script.js +2 -2
  108. package/src/menu/create-site.js +2 -2
  109. package/src/menu/create.js +11 -11
  110. package/src/menu/delete.js +2 -2
  111. package/src/menu/doc.js +2 -2
  112. package/src/menu/docs/devguide.md +13 -13
  113. package/src/menu/docs/introduction.md +3 -3
  114. package/src/menu/get.js +1 -1
  115. package/src/object/create.js +2 -2
  116. package/src/object/delete.js +2 -2
  117. package/src/object/docs/devguide.md +11 -11
  118. package/src/pagelayout/create.js +6 -6
  119. package/src/pagelayout/delete.js +4 -4
  120. package/src/pagelayout/doc.js +2 -2
  121. package/src/pagelayout/docs/devguide.md +9 -9
  122. package/src/pagelayout/docs/introduction.md +1 -1
  123. package/src/pagelayout/get.js +4 -4
  124. package/src/permission/add.js +164 -0
  125. package/src/permission/assign.js +84 -0
  126. package/src/permission/docs/devguide.md +238 -0
  127. package/src/permission/docs/introduction.md +200 -0
  128. package/src/permission/get.js +107 -0
  129. package/src/permission/index.js +10 -0
  130. package/src/permission/remove.js +145 -0
  131. package/src/plugin/delete.js +2 -2
  132. package/src/plugin/doc.js +2 -2
  133. package/src/plugin/docs/devguide.md +29 -29
  134. package/src/profile/create.js +5 -5
  135. package/src/profile/delete.js +2 -2
  136. package/src/profile/doc.js +2 -2
  137. package/src/profile/docs/devguide.md +8 -8
  138. package/src/profile/docs/introduction.md +12 -12
  139. package/src/profile/get.js +1 -1
  140. package/src/project/docs/devguide.md +9 -8
  141. package/src/recordType/create.js +1 -1
  142. package/src/recordType/delete.js +1 -1
  143. package/src/recordType/doc.js +2 -2
  144. package/src/recordType/docs/devguide.md +10 -10
  145. package/src/recordType/editInfo.js +1 -1
  146. package/src/recordType/editSave.js +1 -1
  147. package/src/recordType/getList.js +1 -1
  148. package/src/recordType/newInfo.js +1 -1
  149. package/src/recordType/validDelete.js +1 -1
  150. package/src/res.md +1 -1
  151. package/src/role/create.js +6 -6
  152. package/src/role/delete.js +2 -2
  153. package/src/role/doc.js +2 -2
  154. package/src/role/docs/devguide.md +9 -9
  155. package/src/role/docs/introduction.md +13 -13
  156. package/src/role/get.js +1 -1
  157. package/src/scheduleJob/doc.js +1 -1
  158. package/src/scheduleJob/docs/devguide.md +6 -6
  159. package/src/scheduleJob/docs/introduction.md +6 -6
  160. package/src/script/docs/devguide.md +18 -18
  161. package/src/singleSignOn/delete.js +61 -0
  162. package/src/singleSignOn/doc.js +46 -0
  163. package/src/singleSignOn/docs/devguide.md +61 -0
  164. package/src/singleSignOn/docs/introduction.md +3 -0
  165. package/src/singleSignOn/get.js +70 -0
  166. package/src/singleSignOn/index.js +10 -0
  167. package/src/staticResource/count.js +1 -1
  168. package/src/staticResource/create.js +1 -1
  169. package/src/staticResource/delete.js +1 -1
  170. package/src/staticResource/detail.js +1 -1
  171. package/src/staticResource/docs/devguide.md +11 -11
  172. package/src/staticResource/docs/introduction.md +44 -1
  173. package/src/staticResource/get.js +1 -1
  174. package/src/timer/create.js +1 -1
  175. package/src/timer/delete.js +1 -1
  176. package/src/timer/detail.js +1 -1
  177. package/src/timer/doc.js +2 -2
  178. package/src/timer/docs/devguide.md +19 -19
  179. package/src/timer/get.js +1 -1
  180. package/src/timer/publish.js +1 -1
  181. package/src/timer/pull.js +1 -1
  182. package/src/timer/pullList.js +1 -1
  183. package/src/triggers/detail.js +1 -1
  184. package/src/triggers/doc.js +2 -2
  185. package/src/triggers/docs/devguide.md +23 -23
  186. package/src/triggers/get.js +1 -1
  187. package/src/triggers/pullList.js +1 -1
  188. package/src/user/create.js +2 -2
  189. package/src/user/delete.js +2 -2
  190. package/src/user/doc.js +2 -2
  191. package/src/user/docs/devguide.md +13 -13
  192. package/src/user/docs/introduction.md +12 -12
  193. package/src/user/get.js +1 -1
  194. package/src/user/update.js +3 -3
  195. package/src/user/view.js +2 -2
  196. package/src/validationRule/create.js +7 -7
  197. package/src/validationRule/delete.js +2 -2
  198. package/src/validationRule/doc.js +2 -2
  199. package/src/validationRule/docs/devguide.md +7 -7
  200. package/src/validationRule/docs/introduction.md +11 -11
  201. package/src/validationRule/get.js +1 -1
  202. package/src/version/actionHelp.js +25 -0
  203. package/src/version/docs.js +26 -0
  204. package/src/version/doctor.js +25 -0
  205. package/src/version/get.js +1 -1
  206. package/src/version/help.js +48 -0
  207. package/src/version/index.js +9 -2
  208. package/src/version/initHelp.js +13 -0
  209. package/src/version/listModuleCommands.js +241 -0
  210. package/src/version/stats.js +44 -0
  211. package/src/version/uninstall.js +30 -0
  212. package/src/version/update.js +13 -0
  213. package/test/application.cli.test.js +1 -1
  214. package/test/classes.cli.test.js +1 -1
  215. package/test/customSetting.cli.test.js +1 -1
  216. package/test/fields.cli.test.js +2 -2
  217. package/test/globalSelectList.cli.test.js +1 -1
  218. package/test/menu-script.cli.test.js +1 -1
  219. package/test/menu.cli.test.js +1 -1
  220. package/test/object.cli.test.js +1 -1
  221. package/test/plugin.cli.test.js +1 -1
  222. package/test/scheduleJob.cli.test.js +1 -1
  223. package/test/script.cli.test.js +1 -1
  224. package/test/staticResource.cli.test.js +1 -1
  225. package/test/timer.cli.test.js +1 -1
  226. package/test/trigger.cli.test.js +1 -1
  227. package/utils/checkVersion.js +27 -2
  228. package/utils/commandStats.js +94 -0
  229. package/utils/formatReleaseNotes.js +312 -0
  230. package/utils/readmeReleases.js +69 -0
  231. package/.cloudcc-cache.json +0 -54
  232. package/.cursor/skills/cloudcc-cli-dev.zip +0 -0
  233. package/.cursor/skills/cloudcc-dev-usage/SKILL.md +0 -68
  234. package/build/component-cc-cc-dd.common.js +0 -831
  235. package/build/component-cc-cc-dd.common.js.map +0 -1
  236. package/build/component-cc-cc-dd.css +0 -1
  237. package/build/component-cc-cc-dd.umd.js +0 -874
  238. package/build/component-cc-cc-dd.umd.js.map +0 -1
  239. package/build/component-cc-cc-dd.umd.min.js +0 -8
  240. package/build/component-cc-cc-dd.umd.min.js.map +0 -1
  241. package/build/demo.html +0 -1
  242. package/plugins/cc-cc-dd/cc-cc-dd.vue +0 -32
  243. package/plugins/cc-cc-dd/components/HelloWorld.vue +0 -11
  244. package/plugins/cc-cc-dd/config.json +0 -6
@@ -13,7 +13,7 @@
13
13
  ### 查询页面布局列表
14
14
 
15
15
  ```bash
16
- cc get pagelayout <projectPath> <prefix>
16
+ cloudcc get pagelayout <projectPath> <prefix>
17
17
  ```
18
18
 
19
19
  **参数说明:**
@@ -27,16 +27,16 @@ cc get pagelayout <projectPath> <prefix>
27
27
 
28
28
  ```bash
29
29
  # 查询对象 b25 的页面布局列表
30
- cc get pagelayout . b25
30
+ cloudcc get pagelayout . b25
31
31
 
32
32
  # 查询客户对象(001)的页面布局列表
33
- cc get pagelayout . 001
33
+ cloudcc get pagelayout . 001
34
34
  ```
35
35
 
36
36
  ### 创建页面布局
37
37
 
38
38
  ```bash
39
- cc create pagelayout <projectPath> <objId> <layoutName> [sourceLayoutId] [isCloneDynamic]
39
+ cloudcc create pagelayout <projectPath> <objId> <layoutName> [sourceLayoutId] [isCloneDynamic]
40
40
  ```
41
41
 
42
42
  **参数说明:**
@@ -53,19 +53,19 @@ cc create pagelayout <projectPath> <objId> <layoutName> [sourceLayoutId] [isClon
53
53
 
54
54
  ```bash
55
55
  # 创建页面布局(自动使用默认布局作为模板)
56
- cc create pagelayout . 20267D1465464C5OB6m5 "课程表2"
56
+ cloudcc create pagelayout . 20267D1465464C5OB6m5 "课程表2"
57
57
 
58
58
  # 指定源布局 ID 进行复制
59
- cc create pagelayout . 20267D1465464C5OB6m5 "课程表2" add20261DA7347CZPAUz
59
+ cloudcc create pagelayout . 20267D1465464C5OB6m5 "课程表2" add20261DA7347CZPAUz
60
60
 
61
61
  # 不复制动态布局规则
62
- cc create pagelayout . 20267D1465464C5OB6m5 "课程表2" add20261DA7347CZPAUz false
62
+ cloudcc create pagelayout . 20267D1465464C5OB6m5 "课程表2" add20261DA7347CZPAUz false
63
63
  ```
64
64
 
65
65
  ### 删除页面布局
66
66
 
67
67
  ```bash
68
- cc delete pagelayout <projectPath> <layoutId>
68
+ cloudcc delete pagelayout <projectPath> <layoutId>
69
69
  ```
70
70
 
71
71
  **参数说明:**
@@ -79,5 +79,5 @@ cc delete pagelayout <projectPath> <layoutId>
79
79
 
80
80
  ```bash
81
81
  # 删除指定页面布局
82
- cc delete pagelayout . add202610BD89F09XyGT
82
+ cloudcc delete pagelayout . add202610BD89F09XyGT
83
83
  ```
@@ -40,5 +40,5 @@
40
40
  查看开发指南了解具体 CLI 命令:
41
41
 
42
42
  ```bash
43
- cc doc pagelayout devguide
43
+ cloudcc doc pagelayout devguide
44
44
  ```
@@ -4,7 +4,7 @@ const chalk = require("chalk");
4
4
 
5
5
  /**
6
6
  * 查询页面布局列表
7
- * 用法:cc get pagelayout <projectPath> <prefix>
7
+ * 用法:cloudcc get pagelayout <projectPath> <prefix>
8
8
  */
9
9
  async function get(argvs, isMcp = false) {
10
10
  const projectPath = argvs[2] || process.cwd();
@@ -13,10 +13,10 @@ async function get(argvs, isMcp = false) {
13
13
  if (!prefix) {
14
14
  console.error();
15
15
  console.error(chalk.red("Error: 缺少对象前缀"));
16
- console.error("用法: cc get pagelayout <projectPath> <prefix>");
16
+ console.error("用法: cloudcc get pagelayout <projectPath> <prefix>");
17
17
  console.error("示例:");
18
- console.error(" cc get pagelayout . 001");
19
- console.error(" cc get pagelayout . b25");
18
+ console.error(" cloudcc get pagelayout . 001");
19
+ console.error(" cloudcc get pagelayout . b25");
20
20
  console.error();
21
21
  throw new Error("缺少必需参数: prefix");
22
22
  }
@@ -0,0 +1,164 @@
1
+ const chalk = require('chalk');
2
+ const { postClass } = require("../../utils/http");
3
+ const { getPackageJson } = require("../../utils/config");
4
+ const inquirer = require('inquirer');
5
+
6
+ /**
7
+ * 获取用户视图ID
8
+ * @param {Object} config - 项目配置
9
+ * @returns {Promise<string>} 视图ID
10
+ */
11
+ async function getUserViewId(config) {
12
+ const res = await postClass(
13
+ config.setupSvc + "/api/usermange/queryUser",
14
+ {},
15
+ config.accessToken
16
+ );
17
+
18
+ if (res && res.result && res.data) {
19
+ // 优先使用返回的 viewId
20
+ if (res.data.viewId) {
21
+ return res.data.viewId;
22
+ }
23
+ // 否则使用 viewList 中的第一个
24
+ if (Array.isArray(res.data.viewList) && res.data.viewList.length > 0) {
25
+ return res.data.viewList[0].id;
26
+ }
27
+ }
28
+
29
+ throw new Error("未找到用户视图");
30
+ }
31
+
32
+ /**
33
+ * 查询可选用户列表
34
+ * @param {Object} config - 项目配置
35
+ * @param {string} viewId - 视图ID
36
+ * @param {string} keyword - 搜索关键词
37
+ * @returns {Promise<Array>} 用户列表
38
+ */
39
+ async function queryUserList(config, viewId, keyword = '') {
40
+ const res = await postClass(
41
+ config.setupSvc + "/api/usermange/queryUserList",
42
+ {
43
+ start: 0,
44
+ limit: 10000,
45
+ viewId: viewId,
46
+ keyword: keyword,
47
+ notisusering: "true"
48
+ },
49
+ config.accessToken
50
+ );
51
+
52
+ if (res && res.result && res.data) {
53
+ return res.data.list || [];
54
+ }
55
+
56
+ throw new Error("查询用户列表失败");
57
+ }
58
+
59
+ /**
60
+ * 添加权限集分配用户
61
+ * 用法:cloudcc add permission <projectPath> <permsetId> [userIds...]
62
+ * 如果不指定 userIds,会进入交互式选择
63
+ * @param {Array} argvs - 命令行参数数组
64
+ * @param {boolean} isMcp - 是否为MCP模式
65
+ * @returns {Promise<Object>} 添加结果
66
+ */
67
+ async function add(argvs, isMcp = false) {
68
+ try {
69
+ const projectPath = argvs[2] || process.cwd();
70
+ const permsetId = argvs[3];
71
+ // 从第4个参数开始是用户ID
72
+ let userIds = argvs.slice(4);
73
+
74
+ if (!permsetId) {
75
+ console.error();
76
+ console.error(chalk.red('Error: 缺少权限集ID'));
77
+ console.error('用法: cloudcc add permission <path> <permsetId> [userId1] [userId2] ...');
78
+ console.error('示例:');
79
+ console.error(' cloudcc add permission . "cac20258F0E4ABBnTxwi" # 交互式选择用户');
80
+ console.error(' cloudcc add permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT" # 直接指定用户ID');
81
+ console.error();
82
+ throw new Error('缺少必需参数: permsetId');
83
+ }
84
+
85
+ const config = await getPackageJson(projectPath);
86
+
87
+ // 如果没有指定用户ID,进入交互式选择
88
+ if (userIds.length === 0) {
89
+ console.log();
90
+ console.log(chalk.blue('正在获取用户列表...'));
91
+
92
+ const viewId = await getUserViewId(config);
93
+ const userList = await queryUserList(config, viewId);
94
+
95
+ if (userList.length === 0) {
96
+ console.log(chalk.yellow("没有可用的用户"));
97
+ return { success: false, message: "没有可用的用户" };
98
+ }
99
+
100
+ // 交互式选择用户
101
+ const choices = userList.map(user => ({
102
+ name: `${user.name || '未命名'} (${user.loginname || ''}) - ${user.id}`,
103
+ value: user.id,
104
+ short: user.name || user.id
105
+ }));
106
+
107
+ const { selectedUsers } = await inquirer.prompt([
108
+ {
109
+ type: 'checkbox',
110
+ name: 'selectedUsers',
111
+ message: '请选择要分配的用户(使用空格键选择,回车确认):',
112
+ choices: choices,
113
+ validate: (input) => input.length > 0 || '请至少选择一个用户'
114
+ }
115
+ ]);
116
+
117
+ userIds = selectedUsers;
118
+ }
119
+
120
+ if (userIds.length === 0) {
121
+ console.log(chalk.yellow("未选择任何用户"));
122
+ return { success: false, message: "未选择任何用户" };
123
+ }
124
+
125
+ console.log();
126
+ console.log(chalk.blue(`正在为权限集 ${permsetId} 分配 ${userIds.length} 个用户...`));
127
+
128
+ const res = await postClass(
129
+ config.setupSvc + "/api/permissionGroup/addUsersetup",
130
+ {
131
+ id: permsetId,
132
+ ids: userIds.join(',')
133
+ },
134
+ config.accessToken
135
+ );
136
+
137
+ if (res && res.result) {
138
+ if (!isMcp) {
139
+ console.log();
140
+ console.log(chalk.green('✓ 用户分配成功'));
141
+ console.log(` 权限集ID: ${permsetId}`);
142
+ console.log(` 分配用户数: ${userIds.length}`);
143
+ console.log();
144
+ }
145
+ return {
146
+ success: true,
147
+ permsetId: permsetId,
148
+ userCount: userIds.length,
149
+ userIds: userIds
150
+ };
151
+ }
152
+
153
+ const msg = res && (res.returnInfo || res.message) ? (res.returnInfo || res.message) : "Unknown error";
154
+ throw new Error("分配用户失败: " + msg);
155
+
156
+ } catch (error) {
157
+ if (!isMcp) {
158
+ console.error(chalk.red("Error: " + error.message));
159
+ }
160
+ throw error;
161
+ }
162
+ }
163
+
164
+ module.exports = add;
@@ -0,0 +1,84 @@
1
+ const chalk = require('chalk');
2
+ const { postClass } = require("../../utils/http");
3
+ const { getPackageJson } = require("../../utils/config");
4
+
5
+ /**
6
+ * 获取权限集已分配的用户列表
7
+ * 用法:cloudcc assign permission <projectPath> <permsetId>
8
+ * @param {Array} argvs - 命令行参数数组
9
+ * @param {boolean} isMcp - 是否为MCP模式
10
+ * @returns {Promise<Object>} 包含用户列表和权限集信息的对象
11
+ */
12
+ async function assign(argvs, isMcp = false) {
13
+ try {
14
+ const projectPath = argvs[2] || process.cwd();
15
+ const permsetId = argvs[3];
16
+
17
+ if (!permsetId) {
18
+ console.error();
19
+ console.error(chalk.red('Error: 缺少权限集ID'));
20
+ console.error('用法: cloudcc assign permission <path> <permsetId>');
21
+ console.error('示例:');
22
+ console.error(' cloudcc assign permission . "cac20258F0E4ABBnTxwi"');
23
+ console.error();
24
+ throw new Error('缺少必需参数: permsetId');
25
+ }
26
+
27
+ const config = await getPackageJson(projectPath);
28
+
29
+ const res = await postClass(
30
+ config.setupSvc + "/api/permissionGroup/queryUserlistBypermsetsid",
31
+ { id: permsetId },
32
+ config.accessToken
33
+ );
34
+
35
+ if (res && res.result && res.data) {
36
+ const userList = res.data.userlist || [];
37
+ const permsets = res.data.permsets || {};
38
+ const permsetName = permsets.values?.name || permsetId;
39
+
40
+ if (!isMcp) {
41
+ console.log();
42
+ console.log(chalk.green(`权限集: ${permsetName}`));
43
+ console.log(chalk.green(`ID: ${permsetId}`));
44
+ console.log();
45
+
46
+ if (userList.length === 0) {
47
+ console.log(chalk.yellow("该权限集尚未分配给任何用户"));
48
+ } else {
49
+ console.log(chalk.green(`已分配 ${userList.length} 个用户:`));
50
+ console.log();
51
+
52
+ // 表格形式输出
53
+ const idWidth = Math.max(20, ...userList.map(item => item.id?.length || 0));
54
+ const nameWidth = Math.max(8, ...userList.map(item => item.name?.length || 0));
55
+ const loginWidth = Math.max(20, ...userList.map(item => item.loginname?.length || 0));
56
+
57
+ console.log(chalk.cyan(` ${'用户ID'.padEnd(idWidth)} ${'姓名'.padEnd(nameWidth)} ${'登录名'.padEnd(loginWidth)} 简档 角色`));
58
+ console.log(chalk.cyan(` ${'-'.repeat(idWidth)} ${'-'.repeat(nameWidth)} ${'-'.repeat(loginWidth)} ---------------- ----------------`));
59
+
60
+ userList.forEach(item => {
61
+ console.log(` ${(item.id || '').padEnd(idWidth)} ${(item.name || '').padEnd(nameWidth)} ${(item.loginname || '').padEnd(loginWidth)} ${(item.profilename || '').padEnd(16)} ${item.rolename || ''}`);
62
+ });
63
+ console.log();
64
+ }
65
+ }
66
+
67
+ return {
68
+ userList: userList,
69
+ permsets: permsets
70
+ };
71
+ }
72
+
73
+ const msg = res && (res.returnInfo || res.message) ? (res.returnInfo || res.message) : "Unknown error";
74
+ throw new Error("获取权限集用户列表失败: " + msg);
75
+
76
+ } catch (error) {
77
+ if (!isMcp) {
78
+ console.error(chalk.red("Error: " + error.message));
79
+ }
80
+ throw error;
81
+ }
82
+ }
83
+
84
+ module.exports = assign;
@@ -0,0 +1,238 @@
1
+ # CloudCC 权限集 CLI 命令说明
2
+
3
+ 命令格式为 **`cloudcc <动作> permission …`**(动作即下表「操作」列)。
4
+
5
+ ## 支持的命令
6
+
7
+ | 操作 | 说明 |
8
+ |------|------|
9
+ | `get` | 查询权限集列表 |
10
+ | `assign` | 查看权限集已分配的用户 |
11
+ | `add` | 为权限集添加分配用户 |
12
+ | `remove` | 从权限集移除分配用户 |
13
+
14
+ ## CLI 命令详解
15
+
16
+ ### 查询权限集列表
17
+
18
+ ```bash
19
+ cloudcc get permission <path> [viewId] [page] [pageSize] [searchKeyWord]
20
+ ```
21
+
22
+ **参数说明:**
23
+
24
+ | 参数 | 必填 | 说明 |
25
+ |------|------|------|
26
+ | `path` | 否 | 项目路径,`.` 表示当前目录,默认为当前目录 |
27
+ | `viewId` | 否 | 视图ID,不传则自动获取 |
28
+ | `page` | 否 | 页码,默认为 1 |
29
+ | `pageSize` | 否 | 每页数量,默认为 100000 |
30
+ | `searchKeyWord` | 否 | 搜索关键词 |
31
+
32
+ **示例:**
33
+
34
+ ```bash
35
+ # 获取所有权限集列表
36
+ cloudcc get permission .
37
+
38
+ # 使用指定视图获取权限集
39
+ cloudcc get permission . "00000000000000000000"
40
+
41
+ # 搜索权限集
42
+ cloudcc get permission . "" 1 100 "测试"
43
+ ```
44
+
45
+ **输出示例:**
46
+
47
+ ```
48
+ 找到 17 个权限集:
49
+
50
+ ID 名称 许可证 系统管理员
51
+ -------------------- --------------- ---------------- ----------
52
+ aabbudgeting2024ACgL 利润云标准权限集 Budgeting 是
53
+ cac202530FE035CHCFGi cloudcc222 CloudCC 用户 否
54
+ cac2025F039C6A5DQGrt TestMFA22 CloudCC 用户 否
55
+ cac20258F0E4ABBnTxwi 古语云 CloudCC 用户 否
56
+ ...
57
+ ```
58
+
59
+ ### 查看已分配用户
60
+
61
+ ```bash
62
+ cloudcc assign permission <path> <permsetId>
63
+ ```
64
+
65
+ **参数说明:**
66
+
67
+ | 参数 | 必填 | 说明 |
68
+ |------|------|------|
69
+ | `path` | 否 | 项目路径,`.` 表示当前目录,默认为当前目录 |
70
+ | `permsetId` | 是 | 权限集ID |
71
+
72
+ **示例:**
73
+
74
+ ```bash
75
+ # 查看指定权限集的已分配用户
76
+ cloudcc assign permission . "cac20258F0E4ABBnTxwi"
77
+ ```
78
+
79
+ **输出示例:**
80
+
81
+ ```
82
+ 权限集: 古语云
83
+ ID: cac20258F0E4ABBnTxwi
84
+
85
+ 已分配 6 个用户:
86
+
87
+ 用户ID 姓名 登录名 简档 角色
88
+ -------------------- -------- -------------------- ---------------- ----------------
89
+ 00520263DB1540FTPmXK 我重新注册 421865903teet@qq.com Cloudcc Partner 简档 青青草原艾艾合作伙伴用户
90
+ 005202652FF2FA8dltk1 auto行 autoTest@cloudcc.com 系统管理员 测试
91
+ ...
92
+ ```
93
+
94
+ ### 添加分配用户
95
+
96
+ ```bash
97
+ cloudcc add permission <path> <permsetId> [userIds...]
98
+ ```
99
+
100
+ **参数说明:**
101
+
102
+ | 参数 | 必填 | 说明 |
103
+ |------|------|------|
104
+ | `path` | 否 | 项目路径,`.` 表示当前目录,默认为当前目录 |
105
+ | `permsetId` | 是 | 权限集ID |
106
+ | `userIds` | 否 | 要分配的用户ID列表,不传则进入交互式选择 |
107
+
108
+ **示例:**
109
+
110
+ ```bash
111
+ # 交互式选择用户进行分配
112
+ cloudcc add permission . "cac20258F0E4ABBnTxwi"
113
+
114
+ # 直接指定单个用户ID进行分配
115
+ cloudcc add permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT"
116
+
117
+ # 直接指定多个用户ID进行分配(用空格分隔)
118
+ cloudcc add permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT" "0052026C0A60504jNcbV"
119
+ ```
120
+
121
+ **交互式选择模式:**
122
+
123
+ ```
124
+ 正在获取用户列表...
125
+
126
+ ? 请选择要分配的用户(使用空格键选择,回车确认):
127
+ ❯◯ 张三 (zhangsan@example.com) - 00520260C00C6FEfsMnT
128
+ ◯ 李四 (lisi@example.com) - 0052026C0A60504jNcbV
129
+ ◯ 王五 (wangwu@example.com) - 0052026D0A60504jNcbW
130
+ (Move up and down to reveal more choices)
131
+
132
+ 正在为权限集 cac20258F0E4ABBnTxwi 分配 2 个用户...
133
+
134
+ ✓ 用户分配成功
135
+ 权限集ID: cac20258F0E4ABBnTxwi
136
+ 分配用户数: 2
137
+ ```
138
+
139
+ ### 移除分配用户
140
+
141
+ ```bash
142
+ cloudcc remove permission <path> <permsetId> [userIds...]
143
+ ```
144
+
145
+ **参数说明:**
146
+
147
+ | 参数 | 必填 | 说明 |
148
+ |------|------|------|
149
+ | `path` | 否 | 项目路径,`.` 表示当前目录,默认为当前目录 |
150
+ | `permsetId` | 是 | 权限集ID |
151
+ | `userIds` | 否 | 要移除的用户ID列表,不传则进入交互式选择 |
152
+
153
+ **示例:**
154
+
155
+ ```bash
156
+ # 交互式选择用户进行移除
157
+ cloudcc remove permission . "cac20258F0E4ABBnTxwi"
158
+
159
+ # 直接指定单个用户ID进行移除
160
+ cloudcc remove permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT"
161
+
162
+ # 直接指定多个用户ID进行移除(用空格分隔)
163
+ cloudcc remove permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT" "0052026C0A60504jNcbV"
164
+ ```
165
+
166
+ **交互式选择模式:**
167
+
168
+ ```
169
+ 正在获取已分配用户列表...
170
+
171
+ ? 请选择要删除的用户(使用空格键选择,回车确认):
172
+ ❯◯ 张三 (zhangsan@example.com) - 00520260C00C6FEfsMnT
173
+ ◯ 李四 (lisi@example.com) - 0052026C0A60504jNcbV
174
+ (Move up and down to reveal more choices)
175
+
176
+ ? 确定要从权限集中移除 2 个用户吗? (y/N) y
177
+
178
+ 正在从权限集 cac20258F0E4ABBnTxwi 移除 2 个用户...
179
+
180
+ ✓ 用户移除成功
181
+ 权限集ID: cac20258F0E4ABBnTxwi
182
+ 移除用户数: 2
183
+ ```
184
+
185
+ ## 完整使用流程示例
186
+
187
+ ```bash
188
+ # 1. 查看所有权限集
189
+ cloudcc get permission .
190
+
191
+ # 2. 查看某个权限集的已分配用户
192
+ cloudcc assign permission . "cac20258F0E4ABBnTxwi"
193
+
194
+ # 3. 为权限集添加用户(交互式选择)
195
+ cloudcc add permission . "cac20258F0E4ABBnTxwi"
196
+
197
+ # 4. 再次查看已分配用户,确认添加成功
198
+ cloudcc assign permission . "cac20258F0E4ABBnTxwi"
199
+
200
+ # 5. 移除某些用户(交互式选择)
201
+ cloudcc remove permission . "cac20258F0E4ABBnTxwi"
202
+ ```
203
+
204
+ ## 数据字段说明
205
+
206
+ ### 权限集对象字段
207
+
208
+ | 字段名 | 类型 | 说明 |
209
+ |--------|------|------|
210
+ | `id` | string | 权限集唯一标识 |
211
+ | `name` | string | 权限集名称 |
212
+ | `licence` | string | 许可证类型 |
213
+ | `sysadmin` | string | 是否为系统管理员权限("1"表示是,"0"表示否) |
214
+
215
+ ### 用户对象字段
216
+
217
+ | 字段名 | 类型 | 说明 |
218
+ |--------|------|------|
219
+ | `id` | string | 用户唯一标识 |
220
+ | `name` | string | 用户姓名 |
221
+ | `loginname` | string | 登录名(邮箱) |
222
+ | `profilename` | string | 简档名称 |
223
+ | `profileid` | string | 简档ID |
224
+ | `rolename` | string | 角色名称 |
225
+ | `roleid` | string | 角色ID |
226
+ | `alias` | string | 别名 |
227
+
228
+ ## 相关 API 接口
229
+
230
+ | 接口 | 说明 |
231
+ |------|------|
232
+ | `POST /api/permissionGroup/queryPermsetsList` | 获取权限集视图列表 |
233
+ | `POST /api/permissionGroup/listAJAX` | 查询权限集列表 |
234
+ | `POST /api/permissionGroup/queryUserlistBypermsetsid` | 查询权限集已分配用户 |
235
+ | `POST /api/permissionGroup/addUsersetup` | 为权限集添加用户 |
236
+ | `POST /api/permissionGroup/deleteUsersetup` | 从权限集移除用户 |
237
+ | `POST /api/usermange/queryUser` | 获取用户视图 |
238
+ | `POST /api/usermange/queryUserList` | 查询用户列表 |