cloudcc-cli 2.3.1 → 2.3.3

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 (232) hide show
  1. package/.claude/settings.json +25 -0
  2. package/.cloudcc-cache.json +21 -4
  3. package/.cursor/skills/cloudcc-cli-dev.zip +0 -0
  4. package/.cursor/skills/cloudcc-cli-usage/SKILL.md +68 -0
  5. package/README.md +22 -0
  6. package/bin/cc.js +13 -8
  7. package/bin/index.js +9 -2
  8. package/bin/mcp.js +1 -1
  9. package/build/component-CCPlugin1774500425584.common.js +831 -0
  10. package/build/component-CCPlugin1774500425584.common.js.map +1 -0
  11. package/build/component-CCPlugin1774500425584.css +1 -0
  12. package/build/component-CCPlugin1774500425584.umd.js +874 -0
  13. package/build/component-CCPlugin1774500425584.umd.js.map +1 -0
  14. package/build/component-CCPlugin1774500425584.umd.min.js +8 -0
  15. package/build/component-CCPlugin1774500425584.umd.min.js.map +1 -0
  16. package/build/demo.html +1 -0
  17. package/{src/mcp → mcp}/tools/Class Editor Guide/handler.js +12 -4
  18. package/{src/mcp → mcp}/tools/Component Editor Guide/handler.js +15 -14
  19. package/{src/mcp → mcp}/tools/Trigger Editor Guide/handler.js +8 -2
  20. package/package.json +3 -2
  21. package/src/application/doc.js +46 -0
  22. package/src/application/docs/devguide.md +173 -0
  23. package/src/application/docs/introduction.md +81 -0
  24. package/src/application/index.js +1 -0
  25. package/src/brief/get.js +1 -1
  26. package/src/classes/create.js +6 -1
  27. package/src/classes/delete.js +7 -1
  28. package/src/classes/detail.js +8 -1
  29. package/src/classes/doc.js +49 -472
  30. package/src/classes/docs/devguide.md +541 -0
  31. package/src/classes/get.js +9 -2
  32. package/src/classes/index.js +2 -1
  33. package/src/classes/publish.js +6 -1
  34. package/src/classes/pull.js +6 -1
  35. package/src/classes/pullList.js +6 -3
  36. package/src/config/doc.js +31 -0
  37. package/src/config/docs/devguide.md +100 -0
  38. package/src/config/index.js +5 -0
  39. package/src/customPage/create.js +52 -19
  40. package/src/customPage/doc.js +46 -0
  41. package/src/customPage/docs/devguide.md +200 -0
  42. package/{.cursor/skills/cloudcc-cli-dev/docs//350/207/252/345/256/232/344/271/211/351/241/265/351/235/242.md → src/customPage/docs/introduction.md} +1 -5
  43. package/src/customPage/index.js +1 -0
  44. package/src/customSetting/create.js +9 -0
  45. package/src/customSetting/delete.js +10 -1
  46. package/src/customSetting/deleteCustomSettingField.js +43 -0
  47. package/src/customSetting/detail.js +10 -1
  48. package/src/customSetting/doc.js +22 -179
  49. package/src/customSetting/docs/devguide.md +181 -0
  50. package/src/customSetting/docs/introduction.md +3 -0
  51. package/src/customSetting/editCustomSettingField.js +34 -0
  52. package/src/customSetting/get.js +9 -0
  53. package/src/customSetting/index.js +6 -1
  54. package/src/customSetting/modify.js +30 -0
  55. package/src/customSetting/saveCustomSettingField.js +46 -0
  56. package/src/fields/doc.js +45 -0
  57. package/src/fields/docs/devguide.md +224 -0
  58. package/src/fields/docs/introduction.md +217 -0
  59. package/src/fields/index.js +1 -0
  60. package/src/globalSelectList/create.js +51 -0
  61. package/src/globalSelectList/delete.js +56 -0
  62. package/src/globalSelectList/detail.js +45 -0
  63. package/src/globalSelectList/doc.js +52 -0
  64. package/src/globalSelectList/docs/devguide.md +153 -0
  65. package/src/globalSelectList/docs/introduction.md +82 -0
  66. package/src/globalSelectList/get.js +31 -0
  67. package/src/globalSelectList/index.js +16 -0
  68. package/src/menu/create-page.js +43 -6
  69. package/src/menu/create-script.js +67 -19
  70. package/src/menu/doc.js +57 -0
  71. package/src/menu/docs/devguide.md +129 -0
  72. package/src/menu/docs/introduction.md +99 -0
  73. package/src/menu/index.js +1 -0
  74. package/src/menu/validator.js +80 -0
  75. package/src/object/doc.js +45 -0
  76. package/src/object/docs/devguide.md +112 -0
  77. package/src/object/docs/introduction.md +187 -0
  78. package/src/object/get.js +1 -23
  79. package/src/object/index.js +1 -0
  80. package/src/pagelayout/create.js +123 -0
  81. package/src/pagelayout/delete.js +57 -0
  82. package/src/pagelayout/doc.js +46 -0
  83. package/src/pagelayout/docs/devguide.md +83 -0
  84. package/src/pagelayout/docs/introduction.md +44 -0
  85. package/src/pagelayout/get.js +46 -0
  86. package/src/pagelayout/index.js +10 -0
  87. package/src/plugin/doc.js +43 -863
  88. package/src/plugin/docs/devguide.md +996 -0
  89. package/src/profile/create.js +108 -0
  90. package/src/profile/delete.js +59 -0
  91. package/src/profile/doc.js +46 -0
  92. package/src/profile/docs/devguide.md +77 -0
  93. package/src/profile/docs/introduction.md +123 -0
  94. package/src/profile/get.js +55 -0
  95. package/src/profile/index.js +14 -0
  96. package/src/project/doc.js +39 -372
  97. package/src/project/docs/devguide.md +359 -0
  98. package/src/project/docs/introduction.md +3 -0
  99. package/src/recordType/create.js +77 -0
  100. package/src/recordType/delete.js +52 -0
  101. package/src/recordType/doc.js +36 -0
  102. package/src/recordType/docs/devguide.md +160 -0
  103. package/src/recordType/docs/introduction.md +53 -0
  104. package/src/recordType/editInfo.js +39 -0
  105. package/src/recordType/editSave.js +47 -0
  106. package/src/recordType/getList.js +31 -0
  107. package/src/recordType/index.js +16 -3
  108. package/src/recordType/newInfo.js +39 -0
  109. package/src/recordType/validDelete.js +91 -0
  110. package/src/res.md +66 -0
  111. package/src/role/create.js +153 -0
  112. package/src/role/delete.js +59 -0
  113. package/src/role/doc.js +46 -0
  114. package/src/role/docs/devguide.md +81 -0
  115. package/src/role/docs/introduction.md +124 -0
  116. package/src/role/get.js +57 -0
  117. package/src/role/index.js +10 -0
  118. package/src/scheduleJob/doc.js +49 -0
  119. package/src/scheduleJob/docs/devguide.md +79 -0
  120. package/src/scheduleJob/docs/introduction.md +101 -0
  121. package/src/scheduleJob/index.js +5 -0
  122. package/src/script/delete.js +112 -0
  123. package/src/script/doc.js +31 -245
  124. package/src/script/docs/devguide.md +290 -0
  125. package/src/script/docs/introduction.md +48 -0
  126. package/src/script/index.js +1 -0
  127. package/src/staticResource/count.js +31 -10
  128. package/src/staticResource/create.js +97 -0
  129. package/src/staticResource/delete.js +30 -8
  130. package/src/staticResource/detail.js +32 -10
  131. package/src/staticResource/doc.js +21 -88
  132. package/src/staticResource/docs/devguide.md +157 -0
  133. package/src/staticResource/docs/introduction.md +3 -0
  134. package/src/staticResource/get.js +31 -8
  135. package/src/staticResource/index.js +2 -1
  136. package/src/timer/create.js +6 -1
  137. package/src/timer/delete.js +7 -1
  138. package/src/timer/detail.js +5 -5
  139. package/src/timer/doc.js +57 -0
  140. package/{.cursor/skills/cloudcc-cli-dev/docs/cloudcc/345/256/232/346/227/266/344/275/234/344/270/232.md → src/timer/docs/devguide.md} +83 -1
  141. package/src/timer/get.js +7 -1
  142. package/src/timer/index.js +3 -1
  143. package/src/timer/publish.js +6 -1
  144. package/src/timer/pull.js +6 -1
  145. package/src/timer/pullList.js +5 -3
  146. package/src/triggers/detail.js +5 -5
  147. package/src/triggers/doc.js +49 -364
  148. package/src/triggers/docs/devguide.md +442 -0
  149. package/src/triggers/get.js +7 -3
  150. package/src/triggers/index.js +1 -4
  151. package/src/triggers/pullList.js +7 -7
  152. package/src/user/create.js +50 -0
  153. package/src/user/delete.js +59 -0
  154. package/src/user/doc.js +46 -0
  155. package/src/user/docs/devguide.md +122 -0
  156. package/src/user/docs/introduction.md +124 -0
  157. package/src/user/get.js +112 -0
  158. package/src/user/index.js +12 -0
  159. package/src/user/update.js +96 -0
  160. package/src/user/view.js +60 -0
  161. package/test/classes.cli.test.js +7 -4
  162. package/test/customPage.cli.test.js +96 -0
  163. package/test/globalSelectList.cli.test.js +94 -0
  164. package/test/menu-script.cli.test.js +147 -0
  165. package/test/menu.cli.test.js +8 -1
  166. package/test/plugin.cli.test.js +5 -3
  167. package/test/timer.cli.test.js +15 -8
  168. package/test/trigger.cli.test.js +5 -3
  169. package/.cursor/skills/cloudcc-cli-dev/BACKEND_CLASS.md +0 -111
  170. package/.cursor/skills/cloudcc-cli-dev/BACKEND_SCHEDULE.md +0 -152
  171. package/.cursor/skills/cloudcc-cli-dev/BACKEND_TRIGGER.md +0 -150
  172. package/.cursor/skills/cloudcc-cli-dev/CLI_CHEATSHEET.md +0 -372
  173. package/.cursor/skills/cloudcc-cli-dev/CUSTOM-SETTING-API.md +0 -62
  174. package/.cursor/skills/cloudcc-cli-dev/INSTALL_AND_BOOTSTRAP.md +0 -62
  175. package/.cursor/skills/cloudcc-cli-dev/OBJECTS_AND_FIELDS.md +0 -214
  176. package/.cursor/skills/cloudcc-cli-dev/REQUIREMENTS_BREAKDOWN.md +0 -113
  177. package/.cursor/skills/cloudcc-cli-dev/SKILL.md +0 -66
  178. package/.cursor/skills/cloudcc-cli-dev/STATIC-RESOURCE-API.md +0 -60
  179. package/.cursor/skills/cloudcc-cli-dev/VUE_CUSTOM_COMPONENT.md +0 -151
  180. package/.cursor/skills/cloudcc-cli-dev/VUE_CUSTOM_PAGE.md +0 -216
  181. package/src/approval/approve.js +0 -105
  182. package/src/approval/get.js +0 -245
  183. package/src/approval/index.js +0 -11
  184. package/src/approval/reject.js +0 -105
  185. package/src/plugin/readme.md +0 -7
  186. /package/{src/mcp → mcp}/cliRunner.js +0 -0
  187. /package/{src/mcp → mcp}/index.js +0 -0
  188. /package/{src/mcp → mcp}/readme.md +0 -0
  189. /package/{src/mcp → mcp}/tools/Application Creator/handler.js +0 -0
  190. /package/{src/mcp → mcp}/tools/Approval/handler.js +0 -0
  191. /package/{src/mcp → mcp}/tools/Class Creator/handler.js +0 -0
  192. /package/{src/mcp → mcp}/tools/Class Detail Retriever/handler.js +0 -0
  193. /package/{src/mcp → mcp}/tools/Class List Retriever/handler.js +0 -0
  194. /package/{src/mcp → mcp}/tools/Class Publisher/handler.js +0 -0
  195. /package/{src/mcp → mcp}/tools/Class Puller/handler.js +0 -0
  196. /package/{src/mcp → mcp}/tools/Client Script Detail Retriever/handler.js +0 -0
  197. /package/{src/mcp → mcp}/tools/Client Script Editor Guide/handler.js +0 -0
  198. /package/{src/mcp → mcp}/tools/Client Script List Retriever/handler.js +0 -0
  199. /package/{src/mcp → mcp}/tools/Client Script Publisher/handler.js +0 -0
  200. /package/{src/mcp → mcp}/tools/Client Script Puller/handler.js +0 -0
  201. /package/{src/mcp → mcp}/tools/CloudCC Development Overview/handler.js +0 -0
  202. /package/{src/mcp → mcp}/tools/Component Creator/handler.js +0 -0
  203. /package/{src/mcp → mcp}/tools/Component Detail Retriever/handler.js +0 -0
  204. /package/{src/mcp → mcp}/tools/Component List Retriever/handler.js +0 -0
  205. /package/{src/mcp → mcp}/tools/Component Publisher/handler.js +0 -0
  206. /package/{src/mcp → mcp}/tools/Component Puller/handler.js +0 -0
  207. /package/{src/mcp → mcp}/tools/Dev Environment Creator/fetcher.js +0 -0
  208. /package/{src/mcp → mcp}/tools/Dev Environment Creator/handler.js +0 -0
  209. /package/{src/mcp → mcp}/tools/Dev Environment Validator/handler.js +0 -0
  210. /package/{src/mcp → mcp}/tools/Developer Key Setup Guide/fetcher.js +0 -0
  211. /package/{src/mcp → mcp}/tools/Developer Key Setup Guide/handler.js +0 -0
  212. /package/{src/mcp → mcp}/tools/JSP Migrator/handler.js +0 -0
  213. /package/{src/mcp → mcp}/tools/Menu Creator/handler.js +0 -0
  214. /package/{src/mcp → mcp}/tools/Object Creator/handler.js +0 -0
  215. /package/{src/mcp → mcp}/tools/Object Fields Creator/handler.js +0 -0
  216. /package/{src/mcp → mcp}/tools/Object Fields Retriever/handler.js +0 -0
  217. /package/{src/mcp → mcp}/tools/Object List Retriever/handler.js +0 -0
  218. /package/{src/mcp → mcp}/tools/Scheduled Class Creator/handler.js +0 -0
  219. /package/{src/mcp → mcp}/tools/Scheduled Class Detail Retriever/handler.js +0 -0
  220. /package/{src/mcp → mcp}/tools/Scheduled Class List Retriever/handler.js +0 -0
  221. /package/{src/mcp → mcp}/tools/Scheduled Class Publisher/handler.js +0 -0
  222. /package/{src/mcp → mcp}/tools/Scheduled Class Puller/handler.js +0 -0
  223. /package/{src/mcp → mcp}/tools/Trigger Creator/handler.js +0 -0
  224. /package/{src/mcp → mcp}/tools/Trigger Detail Retriever/handler.js +0 -0
  225. /package/{src/mcp → mcp}/tools/Trigger List Retriever/handler.js +0 -0
  226. /package/{src/mcp → mcp}/tools/Trigger Publisher/handler.js +0 -0
  227. /package/{src/mcp → mcp}/tools/Trigger Puller/handler.js +0 -0
  228. /package/{src/mcp → mcp}/tools/index.js +0 -0
  229. /package/{.cursor/skills/cloudcc-cli-dev/docs//350/207/252/345/256/232/344/271/211/347/261/273.md" → src/classes/docs/introduction.md} +0 -0
  230. /package/{.cursor/skills/cloudcc-cli-dev/docs/CloudCC/350/207/252/345/256/232/344/271/211/347/273/204/344/273/266/344/275/277/347/224/250/350/257/264/346/230/216.md" → src/plugin/docs/introduction.md} +0 -0
  231. /package/{.cursor/skills/cloudcc-cli-dev/docs/cloudcc/345/256/232/346/227/266/347/261/273.md" → src/timer/docs/introduction.md} +0 -0
  232. /package/{.cursor/skills/cloudcc-cli-dev/docs//350/247/246/345/217/221/345/231/250/347/261/273.md" → src/triggers/docs/introduction.md} +0 -0
@@ -0,0 +1,153 @@
1
+ # CloudCC 全局选项列表操作指南
2
+
3
+ ---
4
+
5
+ ## 1. 入口与列表页
6
+
7
+ 进入路径:`设置 → 开发者空间 → 全局选项列表值集`
8
+
9
+ 列表页展示:
10
+ - **标签**:全局选项列表的显示名称
11
+ - **描述**:可选的说明文字
12
+
13
+ 右上角操作按钮:
14
+ - **新建**:创建新的全局选项列表
15
+ - **字段依赖性**:查看引用关系
16
+ - **已删除全局值集**:查看已删除记录
17
+
18
+ ---
19
+
20
+ ## 2. 新建全局选项列表
21
+
22
+ 点击「新建」弹出表单,填写以下字段:
23
+
24
+ | 字段 | 参数名 | 是否必填 | 说明 |
25
+ |------------------|-------------------|----------|-----------------------------------------|
26
+ | 标签 | label | 是 | 显示名称,如"客户等级" |
27
+ | 名称 | name | 是 | API 名称,如"customer_level" |
28
+ | 描述 | description | 否 | 对该选项列表用途的说明 |
29
+ | 选项值列表 | ptext | 否 | 每行一个值,行之间用 `\r\n` 分隔 |
30
+ | 按字母顺序排序 | isPicklistSorted | 否 | `"1"` 表示启用,`"0"` 表示禁用 |
31
+ | 将第一个值作为默认值 | isFirstDefault | 否 | `"1"` 表示启用,`"0"` 表示禁用 |
32
+
33
+ ### CLI 调用示例
34
+
35
+ 参数使用 `encodeURI` 编码后传入(保留 `"` 和 `:` 等 JSON 必要字符):
36
+
37
+ ```bash
38
+ cc create globalSelectList . '%7B%22label%22:%22%E5%AE%A2%E6%88%B7%E7%AD%89%E7%BA%A7%22,%22name%22:%22customer_level%22,%22description%22:%22%E5%AE%A2%E6%88%B7%E7%AD%89%E7%BA%A7%E5%88%86%E7%B1%BB%22,%22ptext%22:%22%E6%99%AE%E9%80%9A%5Cr%5Cn%E9%93%B6%E7%89%8C%5Cr%5Cn%E9%87%91%E7%89%8C%22,%22isPicklistSorted%22:%220%22,%22isFirstDefault%22:%220%22%7D'
39
+ ```
40
+
41
+ 原始 JSON(`encodeURI` 编码前):
42
+
43
+ ```json
44
+ {
45
+ "label": "客户等级",
46
+ "name": "customer_level",
47
+ "description": "客户等级分类",
48
+ "ptext": "普通\r\n银牌\r\n金牌",
49
+ "isPicklistSorted": "0",
50
+ "isFirstDefault": "0"
51
+ }
52
+ ```
53
+
54
+ > **注意**:参数请使用 `encodeURI` 编码,而非 `encodeURIComponent`。`encodeURI` 不会转义 `"` 和 `:` 等 JSON 基础字符,服务端可正确解析。
55
+
56
+ ---
57
+
58
+ ## 3. 查询全局选项列表
59
+
60
+ ```bash
61
+ # 获取全部列表(默认分页 pageSize=10000)
62
+ cc get globalSelectList
63
+
64
+ # 指定项目路径
65
+ cc get globalSelectList /path/to/project
66
+ ```
67
+
68
+ 返回结果为 `globalSelectList` 数组,每条记录包含:
69
+
70
+ ```json
71
+ {
72
+ "id": "20266882A3E97ACaV8PT",
73
+ "label": "Test",
74
+ "name": "ttt",
75
+ "description": "",
76
+ "datatype": "",
77
+ "isDeleted": "0",
78
+ "createdate": 1774454400000,
79
+ "lastmodifydate": 1774454400000
80
+ }
81
+ ```
82
+
83
+ ---
84
+
85
+ ## 4. 查看详情
86
+
87
+ ```bash
88
+ cc detail globalSelectList . <id>
89
+ ```
90
+
91
+ - `<id>`:全局选项列表的 ID,可从列表接口返回值中获取
92
+
93
+ 返回结构:
94
+
95
+ ```json
96
+ {
97
+ "globalSelect": {
98
+ "id": "202652A011E5B4CAEpjg",
99
+ "label": "test2",
100
+ "name": "test2",
101
+ "description": "描述",
102
+ "isDeleted": "0",
103
+ "createdate": 1774454400000,
104
+ "lastmodifydate": 1774454400000
105
+ },
106
+ "enabledList": [
107
+ {
108
+ "id": "bba2026DF6280BEeSivr",
109
+ "codevalue": "值1",
110
+ "sortorder": "0",
111
+ "isdefaultvalue": "1",
112
+ "isactive": "1"
113
+ }
114
+ ],
115
+ "disabledList": [],
116
+ "useList": []
117
+ }
118
+ ```
119
+
120
+ | 字段 | 说明 |
121
+ |---------------|----------------------------------------|
122
+ | `globalSelect` | 全局选项列表基本信息 |
123
+ | `enabledList` | 启用中的选项值列表 |
124
+ | `disabledList` | 已禁用的选项值列表 |
125
+ | `useList` | 引用该值集的字段列表 |
126
+
127
+ ---
128
+
129
+ ## 5. 删除全局选项列表
130
+
131
+ ```bash
132
+ cc delete globalSelectList . <id>
133
+ ```
134
+
135
+ 删除逻辑分两步自动处理:
136
+ 1. **软删除**:先以 `deleteFromDisk=false` 请求,将记录标记为已删除(可在「已删除全局值集」中找回)
137
+ 2. **彻底删除**:若软删除失败(记录已处于软删除状态),自动以 `deleteFromDisk=true` 重试,从磁盘彻底删除
138
+
139
+ > **注意**:删除前请确认该选项列表没有被字段引用,或已做好引用迁移,否则可能影响现有数据。
140
+
141
+ ---
142
+
143
+ ## 6. 查看文档
144
+
145
+ ```bash
146
+ # 查看能力介绍
147
+ cc doc globalSelectList introduction
148
+
149
+ # 查看操作指南(本文)
150
+ cc doc globalSelectList devguide
151
+ ```
152
+
153
+
@@ -0,0 +1,82 @@
1
+ # CloudCC 全局选项列表能力与适用场景说明
2
+
3
+ ## 1. 文档目标
4
+
5
+ 本文用于说明 CloudCC 全局选项列表(Global Select List)在企业业务系统中的定位与价值,回答以下问题:
6
+
7
+ - 全局选项列表能干什么
8
+ - 全局选项列表的主要作用是什么
9
+ - 为什么要用全局选项列表
10
+ - 全局选项列表能解决哪些问题
11
+ - 在什么情况下、什么业务场景下使用
12
+
13
+ ---
14
+
15
+ ## 2. 什么是全局选项列表
16
+
17
+ 全局选项列表(Global Select / Picklist)是 CloudCC 平台提供的一种**跨对象共享的值集**机制。
18
+
19
+ - 定义一次,多个对象的选项列表字段可复用同一套值集
20
+ - 修改全局选项列表后,所有引用它的字段自动同步更新
21
+ - 支持排序方式(按字母序 / 输入顺序)和默认值设置
22
+
23
+ **典型内置全局选项列表**:
24
+
25
+ | 标签 | 名称 | 说明 |
26
+ |------|-----------|------------------------------|
27
+ | 省州 | province | 地址字段类型默认使用此值集 |
28
+ | 县区 | district | 地址字段类型默认使用此值集 |
29
+ | 国家 | country | 地址字段类型默认使用此值集 |
30
+ | 市 | city | 地址字段类型默认使用此值集 |
31
+
32
+ ---
33
+
34
+ ## 3. 全局选项列表能干什么
35
+
36
+ ### 3.1 跨对象值集共享
37
+
38
+ - 在多个对象的选项列表字段中引用同一个全局选项列表
39
+ - 确保所有对象使用一致的选项值,避免各对象单独维护造成的数据不一致
40
+
41
+ ### 3.2 集中维护,统一更新
42
+
43
+ - 只需在全局选项列表中增删改值,所有引用字段同步生效
44
+ - 适合频繁变动的业务分类(如产品系列、客户等级、区域划分等)
45
+
46
+ ### 3.3 字段依赖管理
47
+
48
+ - 平台提供"字段依赖性"功能:可查看哪些对象字段引用了该全局选项列表
49
+ - 删除前可通过"已删除全局值集"管理废弃的值集
50
+
51
+ ---
52
+
53
+ ## 4. 适用场景
54
+
55
+ | 业务场景 | 说明 |
56
+ |--------------------------------|----------------------------------------------|
57
+ | 多对象共享分类标签 | 如客户类型、商机阶段在多个对象中重复使用 |
58
+ | 地址相关字段默认值集 | 省州、市、县区、国家等系统内置全局选项列表 |
59
+ | 需要统一维护的下拉选项 | 产品分类、服务类型、优先级等标准化字段 |
60
+ | 减少字段维护工作量 | 一处修改、全局生效,避免逐个对象更新值集 |
61
+
62
+ ---
63
+
64
+ ## 5. 与普通选项列表字段的区别
65
+
66
+ | 对比项 | 全局选项列表 | 普通选项列表字段 |
67
+ |----------------|--------------------------|--------------------------|
68
+ | 作用范围 | 跨对象共享 | 仅限当前对象当前字段 |
69
+ | 维护位置 | 全局选项列表管理页 | 各对象字段设置页 |
70
+ | 修改影响 | 所有引用字段同步更新 | 仅影响该字段 |
71
+ | 适用场景 | 共享、标准化值集 | 特定对象私有值集 |
72
+
73
+ ---
74
+
75
+ ## 6. 入口
76
+
77
+ 进入路径:`设置 → 开发者空间 → 全局选项列表值集`
78
+
79
+ 主要操作:
80
+ - **新建**:创建新的全局选项列表
81
+ - **字段依赖性**:查看引用该值集的字段
82
+ - **已删除全局值集**:查看已删除的历史值集
@@ -0,0 +1,31 @@
1
+ const { getPackageJson } = require("../../utils/config");
2
+ const { postClass } = require("../../utils/http");
3
+
4
+ /**
5
+ * cc get globalSelectList [projectPath] [encodedCondJson]
6
+ * @param {string} projectPath
7
+ * @param {string} encodedCondJson
8
+ * @param {boolean} isMcp
9
+ */
10
+ async function get(projectPath = process.cwd(), encodedCondJson, isMcp = false) {
11
+ let body = { pageNum: "1", pageSize: "10000" };
12
+ if (encodedCondJson) {
13
+ body = { ...body, ...JSON.parse(decodeURI(encodedCondJson)) };
14
+ }
15
+ const config = await getPackageJson(projectPath);
16
+ const res = await postClass(
17
+ config.setupSvc + "/api/globalSelectSetup/queryList",
18
+ body,
19
+ config.accessToken
20
+ );
21
+ if (res && res.result) {
22
+ const list = res?.data?.globalSelectList || [];
23
+ if (!isMcp) {
24
+ console.log(JSON.stringify(list));
25
+ }
26
+ return list;
27
+ }
28
+ throw new Error("Get Global Select List Failed: " + (res?.returnInfo || res?.message || "Unknown error"));
29
+ }
30
+
31
+ module.exports = get;
@@ -0,0 +1,16 @@
1
+ const cc = {};
2
+ cc.doc = require("./doc");
3
+ cc.get = require("./get");
4
+ cc.create = require("./create");
5
+ cc.detail = require("./detail");
6
+ cc.delete = require("./delete");
7
+
8
+ function GlobalSelectList(action, argvs) {
9
+ if (action === "doc") {
10
+ cc.doc(argvs);
11
+ return;
12
+ }
13
+ cc[action](argvs[2], argvs[3], argvs[4]);
14
+ }
15
+
16
+ module.exports = GlobalSelectList;
@@ -3,6 +3,7 @@ const { getPackageJson } = require("../../utils/config");
3
3
  const briefGet = require("../brief/get");
4
4
  const chalk = require('chalk');
5
5
  const { buildCommonMenuFields } = require('./common');
6
+ const { validatePname, formatPname } = require('./validator');
6
7
 
7
8
  /**
8
9
  * 创建自定义页面菜单
@@ -15,12 +16,18 @@ async function createPageMenu(argvs) {
15
16
  // argvs: ['create', 'menu', 'page', '.', 'contract-assistant', '标签名', '菜单名称', ...]
16
17
  let path = argvs[3]; // 路径 (argvs[3])
17
18
  let pageApi = argvs[4]; // 自定义页面 pageApi,例如 contract-assistant
18
- let tabName = argvs[5]; // 标签名称
19
- let pname = argvs[6]; // 菜单名称
20
- let tabStyle = argvs[7] || "cloudtab145"; // 标签样式图标,默认 cloudtab145
21
- let mobileimg = argvs[8] || "cloudcc01"; // 移动端图标,默认 cloudcc01
22
- let cloudccservicetab = argvs[9] || "cloudccservicetab_1"; // 服务标签图标,默认 cloudccservicetab_1
23
- let mobileurl = argvs[10] || ""; // 移动端地址,默认空字符串
19
+ let tabName = argvs[5]; // 标签名称
20
+ let pname = argvs[6]; // 菜单名称
21
+ let tabStyle = argvs[7]; // 标签样式图标
22
+ let mobileimg = argvs[8]; // 移动端图标
23
+ let cloudccservicetab = argvs[9]; // 服务标签图标
24
+ let mobileurl = argvs[10]; // 移动端地址
25
+
26
+ // 设置默认值(在验证之后,确保使用正确的图标值)
27
+ tabStyle = tabStyle || "cloudtab145";
28
+ mobileimg = mobileimg || "cloudcc01";
29
+ cloudccservicetab = cloudccservicetab || "cloudccservicetab_1";
30
+ mobileurl = mobileurl || "";
24
31
 
25
32
  if (!pageApi || !tabName || !pname) {
26
33
  console.error();
@@ -29,6 +36,28 @@ async function createPageMenu(argvs) {
29
36
  console.error();
30
37
  throw new Error('缺少必需参数: pageApi、tabName 和 pname');
31
38
  }
39
+
40
+ // 验证 pname
41
+ const validation = await validatePname(pname, path, 'page');
42
+ if (!validation.valid) {
43
+ console.error();
44
+ console.error(chalk.red('Error: pname 验证失败'));
45
+ console.error(` ${validation.message}`);
46
+ console.error();
47
+ console.error('pname 规则:');
48
+ console.error(' - 只能包含字母、数字、下划线');
49
+ console.error(' - 开头必须是字母');
50
+ console.error(' - 不能包含中文');
51
+ console.error(' - 必须是唯一的');
52
+ console.error();
53
+ throw new Error(`pname 验证失败: ${validation.message}`);
54
+ }
55
+
56
+ // 防御性检查:确保 tabStyle 不是 pname 的值
57
+ if (tabStyle === pname) {
58
+ console.error(chalk.yellow(`警告: tabStyle 与 pname 相同,使用默认值 cloudtab145`));
59
+ tabStyle = "cloudtab145";
60
+ }
32
61
  const lightningPage = pageApi.endsWith("#lightning") ? pageApi : `${pageApi}#lightning`;
33
62
 
34
63
  let config = await getPackageJson(path);
@@ -82,6 +111,14 @@ async function createPageMenu(argvs) {
82
111
  console.error();
83
112
  console.error(chalk.green('Success!'));
84
113
  console.error();
114
+ console.error(chalk.cyan('菜单信息:'));
115
+ console.error(` 菜单名称: ${tabName}`);
116
+ console.error(` 类型: 自定义页面 (page)`);
117
+ console.error(` 页面API: ${pageApi}`);
118
+ console.error(` pname: ${pname}`);
119
+ console.error(` PC端图标: ${tabStyle}`);
120
+ console.error(` 移动端图标: ${mobileimg}`);
121
+ console.error();
85
122
  return result;
86
123
  } else {
87
124
  const msg = result && result.returnInfo ? result.returnInfo : 'Unknown error';
@@ -3,6 +3,7 @@ const { getPackageJson } = require("../../utils/config");
3
3
  const briefGet = require("../brief/get");
4
4
  const chalk = require('chalk');
5
5
  const { buildCommonMenuFields } = require('./common');
6
+ const { validatePname } = require('./validator');
6
7
 
7
8
  /**
8
9
  * 创建自定义脚本菜单
@@ -11,21 +12,47 @@ const { buildCommonMenuFields } = require('./common');
11
12
  */
12
13
  async function createScriptMenu(argvs) {
13
14
  try {
14
- // 命令行参数格式:cc create menu script <path> <scriptId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
15
- // argvs: ['create', 'menu', 'script', '.', 'scriptId', 'tabName', ...]
15
+ // 命令行参数格式:cc create menu script <path> <tabName> <pname> [functioncode] [tabStyle] [mobileimg] [cloudccservicetab]
16
+ // argvs: ['create', 'menu', 'script', '.', 'tabName', 'pname', 'functioncode', ...]
16
17
  let path = argvs[3]; // 路径 (argvs[3])
17
- let scriptId = argvs[4]; // 脚本ID (p1)
18
- let tabName = argvs[5]; // 标签名称
19
- let tabStyle = argvs[6] || "cloudtab145"; // 标签样式图标,默认 cloudtab145
20
- let mobileimg = argvs[7] || "cloudcc01"; // 移动端图标,默认 cloudcc01
21
- let cloudccservicetab = argvs[8] || "cloudccservicetab_1"; // 服务标签图标,默认 cloudccservicetab_1
18
+ let tabName = argvs[4]; // 标签名称(显示名称)
19
+ let pname = argvs[5]; // 自定义脚本菜单名称(系统内部标识)
20
+ let functioncode = argvs[6] || 'console.log("hello")'; // 自定义脚本内容,默认 console.log("hello")
21
+ let tabStyle = argvs[7] || "cloudtab145"; // 标签样式图标,默认 cloudtab145
22
+ let mobileimg = argvs[8] || "cloudcc01"; // 移动端图标,默认 cloudcc01
23
+ let cloudccservicetab = argvs[9] || "cloudccservicetab_1"; // 服务标签图标,默认 cloudccservicetab_1
22
24
 
23
- if (!scriptId || !tabName) {
25
+ if (!tabName || !pname) {
24
26
  console.error();
25
27
  console.error(chalk.red('Error: 缺少必需参数'));
26
- console.error('用法: cc create menu script <path> <scriptId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
28
+ console.error('用法: cc create menu script <path> <tabName> <pname> [functioncode] [tabStyle] [mobileimg] [cloudccservicetab]');
27
29
  console.error();
28
- throw new Error('缺少必需参数: scriptId 和 tabName');
30
+ console.error('参数说明:');
31
+ console.error(' path - 项目路径,"." 表示当前目录');
32
+ console.error(' tabName - 菜单/标签页显示名称(必填)');
33
+ console.error(' pname - 菜单名称(系统内部标识),由字母、数字、下划线组成,必须以字母开头(必填)');
34
+ console.error(' functioncode - 自定义脚本内容,默认 console.log("hello")');
35
+ console.error(' tabStyle - PC端标签样式图标,默认 cloudtab145');
36
+ console.error(' mobileimg - 移动端图标,默认 cloudcc01');
37
+ console.error(' cloudccservicetab - 服务标签图标,默认 cloudccservicetab_1');
38
+ console.error();
39
+ throw new Error('缺少必需参数: tabName 和 pname');
40
+ }
41
+
42
+ // 验证 pname
43
+ const validation = await validatePname(pname, path, 'script');
44
+ if (!validation.valid) {
45
+ console.error();
46
+ console.error(chalk.red('Error: pname 验证失败'));
47
+ console.error(` ${validation.message}`);
48
+ console.error();
49
+ console.error('pname 规则:');
50
+ console.error(' - 只能包含字母、数字、下划线');
51
+ console.error(' - 开头必须是字母');
52
+ console.error(' - 不能包含中文');
53
+ console.error(' - 必须是唯一的');
54
+ console.error();
55
+ throw new Error(`pname 验证失败: ${validation.message}`);
29
56
  }
30
57
 
31
58
  let config = await getPackageJson(path);
@@ -54,21 +81,37 @@ async function createScriptMenu(argvs) {
54
81
  visited_2: "1",
55
82
  allOrSome: "some",
56
83
  type: "script",
57
- p1: scriptId,
58
- p1_origin: {
59
- label: "label.import.index.script",
60
- fieldKey: "p1",
61
- field: "Select",
84
+ pname: pname,
85
+ pname_origin: {
86
+ label: "脚本名称",
87
+ fieldKey: "pname",
88
+ field: "Input",
62
89
  required: "right",
63
- hint: "label.customer.tab.step1.selectonescript",
90
+ hint: "请输入脚本名称",
64
91
  rules: [
65
92
  {
66
93
  required: true,
67
- message: "请选择脚本",
94
+ message: "请输入脚本名称",
68
95
  trigger: "blur"
69
96
  }
70
97
  ],
71
- value: scriptId
98
+ value: pname
99
+ },
100
+ functioncode: functioncode,
101
+ functioncode_origin: {
102
+ label: "脚本内容",
103
+ fieldKey: "functioncode",
104
+ field: "TextArea",
105
+ required: "right",
106
+ hint: "请输入脚本内容",
107
+ rules: [
108
+ {
109
+ required: true,
110
+ message: "请输入脚本内容",
111
+ trigger: "blur"
112
+ }
113
+ ],
114
+ value: functioncode
72
115
  },
73
116
  ...commonFields,
74
117
  profileIds: profileIds,
@@ -78,6 +121,11 @@ async function createScriptMenu(argvs) {
78
121
  console.error();
79
122
  console.error(chalk.green('Creating script menu, please wait...'));
80
123
  console.error();
124
+ console.error('菜单信息:');
125
+ console.error(` 显示名称: ${tabName}`);
126
+ console.error(` 内部标识: ${pname}`);
127
+ console.error(` 脚本内容: ${functioncode.substring(0, 50)}${functioncode.length > 50 ? '...' : ''}`);
128
+ console.error();
81
129
 
82
130
  // 发送请求到服务器
83
131
  const result = await postClass(
@@ -100,7 +148,7 @@ async function createScriptMenu(argvs) {
100
148
  }
101
149
  } catch (error) {
102
150
  console.error();
103
- console.error(chalk.red("自定义脚本菜单创建失败:"), error);
151
+ console.error(chalk.red("自定义脚本菜单创建失败:"), error.message || error);
104
152
  throw error;
105
153
  }
106
154
  }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * menu 文档入口:正文均在 `docs/` 目录。
3
+ */
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+
7
+ const DOCS_DIR = path.join(__dirname, "docs");
8
+ const CCDK_SDK = path.join(__dirname, "..", "api", "ccdk-sdk.md");
9
+
10
+ function readDocFile(basename) {
11
+ return fs.readFileSync(path.join(DOCS_DIR, `${basename}.md`), "utf8");
12
+ }
13
+
14
+ /** 介绍文档:菜单能力、类型与入口 */
15
+ function getIntroductionDoc() {
16
+ return readDocFile("introduction");
17
+ }
18
+
19
+ /** 开发指导:CLI 创建/查询/删除等;末尾拼接 CCDK SDK 速查 */
20
+ function getDevGuideDoc() {
21
+ const base = readDocFile("devguide").trimEnd();
22
+ let sdk = "";
23
+ try {
24
+ sdk = fs.readFileSync(CCDK_SDK, "utf8").trim();
25
+ } catch (e) {
26
+ sdk = "";
27
+ }
28
+ if (!sdk) {
29
+ return base;
30
+ }
31
+ return [base, "", "---", "", "## 附录:CCDK SDK 速查", "", sdk, ""].join("\n");
32
+ }
33
+
34
+ /**
35
+ * cc doc menu <introduction|devguide>
36
+ * @param {string[]} argvs [doc, type, introduction|devguide, ...]
37
+ */
38
+ function doc(argvs) {
39
+ const subType = argvs[2];
40
+ const key = String(subType || "").trim().toLowerCase();
41
+ if (!key) {
42
+ throw new Error("cc doc menu 需要子命令:introduction 或 devguide");
43
+ }
44
+ if (key === "introduction") {
45
+ const content = getIntroductionDoc();
46
+ console.log(content);
47
+ return content;
48
+ }
49
+ if (key === "devguide") {
50
+ const content = getDevGuideDoc();
51
+ console.log(content);
52
+ return content;
53
+ }
54
+ throw new Error(`doc 不支持的子命令: ${subType},请使用 introduction 或 devguide`);
55
+ }
56
+
57
+ module.exports = doc;
@@ -0,0 +1,129 @@
1
+ # CloudCC 菜单 CLI 命令说明
2
+
3
+ ## 支持的命令
4
+
5
+ | 操作 | 说明 |
6
+ |------|------|
7
+ | `create menu object` | 创建自定义对象菜单 |
8
+ | `create menu page` | 创建自定义页面菜单 |
9
+ | `create menu script` | 创建自定义脚本菜单 |
10
+ | `create menu site` | 创建站点菜单 |
11
+ | `get menu` | 查询菜单列表 |
12
+ | `delete menu` | 删除菜单 |
13
+
14
+ ## CLI 命令详解
15
+
16
+ ### 创建自定义对象菜单
17
+
18
+ ```bash
19
+ cc create menu object <path> <objectId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
20
+ ```
21
+
22
+ **参数说明:**
23
+
24
+ | 参数 | 必填 | 说明 |
25
+ |------|------|------|
26
+ | `path` | 是 | 项目路径,`.` 表示当前目录 |
27
+ | `objectId` | 是 | 自定义对象 ID |
28
+ | `tabName` | 是 | 菜单显示名称 |
29
+ | `tabStyle` | 否 | PC 端图标(默认 `cloudtab145`)|
30
+ | `mobileimg` | 否 | 移动端图标(默认 `cloudcc01`)|
31
+ | `cloudccservicetab` | 否 | 服务图标(默认 `cloudccservicetab_1`)|
32
+
33
+ **示例:**
34
+
35
+ ```bash
36
+ cc create menu object . a0F9D000000XXXXUAI "客户管理"
37
+ ```
38
+
39
+ ### 创建自定义页面菜单
40
+
41
+ ```bash
42
+ cc create menu page <path> <pageApi> <tabName> <pname> [tabStyle] [mobileimg] [cloudccservicetab] [mobileurl]
43
+ ```
44
+
45
+ **参数说明:**
46
+
47
+ | 参数 | 必填 | 说明 |
48
+ |------|------|------|
49
+ | `path` | 是 | 项目路径 |
50
+ | `pageApi` | 是 | 自定义页面 API 名称(CLI 会追加 `#lightning`)|
51
+ | `tabName` | 是 | 菜单显示名称 |
52
+ | `pname` | 是 | 菜单内部名称(建议字母开头)|
53
+ | `tabStyle` / `mobileimg` / `cloudccservicetab` | 否 | 图标参数 |
54
+ | `mobileurl` | 否 | 移动端地址 |
55
+
56
+ **示例:**
57
+
58
+ ```bash
59
+ cc create menu page . contract-assistant "合同助手" contract_menu
60
+ ```
61
+
62
+ ### 创建自定义脚本菜单
63
+
64
+ ```bash
65
+ cc create menu script <path> <tabName> <pname> [functioncode] [tabStyle] [mobileimg] [cloudccservicetab]
66
+ ```
67
+
68
+ **参数说明:**
69
+
70
+ | 参数 | 必填 | 说明 |
71
+ |------|------|------|
72
+ | `path` | 是 | 项目路径 |
73
+ | `tabName` | 是 | 菜单显示名称 |
74
+ | `pname` | 是 | 菜单内部名称 |
75
+ | `functioncode` | 否 | 脚本内容(默认示例脚本)|
76
+
77
+ **示例:**
78
+
79
+ ```bash
80
+ cc create menu script . "数据导入工具" data_import_menu "ccc.alert('Hello World');"
81
+ ```
82
+
83
+ ### 创建站点菜单
84
+
85
+ ```bash
86
+ cc create menu site <path> <siteId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
87
+ ```
88
+
89
+ **参数说明:**
90
+
91
+ | 参数 | 必填 | 说明 |
92
+ |------|------|------|
93
+ | `path` | 是 | 项目路径 |
94
+ | `siteId` | 是 | 站点 ID |
95
+ | `tabName` | 是 | 菜单显示名称 |
96
+
97
+ **示例:**
98
+
99
+ ```bash
100
+ cc create menu site . a0H9D000000XXXXUAI "合作伙伴门户"
101
+ ```
102
+
103
+ ### 查询菜单列表
104
+
105
+ ```bash
106
+ cc get menu <projectPath> [encodedCondJson]
107
+ ```
108
+
109
+ **示例:**
110
+
111
+ ```bash
112
+ # 查询所有菜单
113
+ cc get menu .
114
+
115
+ # 带查询条件
116
+ cc get menu . '%7B%22type%22%3A%22page%22%7D'
117
+ ```
118
+
119
+ ### 删除菜单
120
+
121
+ ```bash
122
+ cc delete menu <projectPath> <tabId>
123
+ ```
124
+
125
+ **示例:**
126
+
127
+ ```bash
128
+ cc delete menu . a0I9D000000XXXXUAI
129
+ ```