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,359 @@
1
+ # CloudCC Project 文档(全量)
2
+
3
+ ## 开发环境搭建
4
+
5
+ # CloudCC CRM 前后端开发环境搭建指南
6
+
7
+ > 本文档基于 CloudCC
8
+ > 官方「开发环境」文档整理而成,原文参见:[CloudCC 开发环境](https://help.cloudcc.cn/product03/kai-fa-huan-jing/)。\
9
+ > 目标:指导开发者完成本地 Node / VS Code / cloudcc-cli / MCP / 模板项目 /
10
+ > 密钥配置等端到端环境搭建。
11
+
12
+ ---
13
+
14
+ ## 1. 前置条件与总体说明
15
+
16
+ - 适用人群:CloudCC 前端组件、客户端脚本、后端类/触发器/定时器等二次开发工程师。
17
+ - 基本流程:
18
+ 1. 安装 Node 与 npm,并切换 npm 源
19
+ 2. 安装 `cloudcc-cli` 全局依赖
20
+ 3. 安装 VS Code 与 CloudCC 插件
21
+ 4. 配置本地 MCP(`cc-mcp`)
22
+ 5. 使用 CLI 创建模板项目并安装依赖
23
+ 6. 通过 CRM 获取开发者密钥、安全标记并写入 `cloudcc-cli.config.js`
24
+ 7. 视情况配置私有云与多环境参数
25
+
26
+ ---
27
+
28
+ ## 2. 安装 Node 与 npm 源配置
29
+
30
+ ### 2.1 安装 Node
31
+
32
+ - **推荐版本**:`v20.19.5`(官方示例)
33
+ - **下载地址**:
34
+ - Node 官方历史版本下载:`https://nodejs.org/download/release/v20.19.5/`
35
+ - **建议**:使用 `nvm` 等 Node 多版本管理工具切换版本,保证与 CloudCC 官方推荐版本一致。
36
+
37
+ 安装完成后,在终端中验证:
38
+
39
+ ```bash
40
+ node -v
41
+ ```
42
+
43
+ ### 2.2 切换 npm 源到阿里镜像
44
+
45
+ 为加速依赖安装,建议设置 npm 源为阿里镜像:
46
+
47
+ ```bash
48
+ npm config set registry https://registry.npmmirror.com
49
+ ```
50
+
51
+ 验证是否设置成功:
52
+
53
+ ```bash
54
+ npm config get registry
55
+ ```
56
+
57
+ 返回 `https://registry.npmmirror.com/` 即表示生效。
58
+
59
+ ---
60
+
61
+ ## 3. 安装 cloudcc-cli(全局)
62
+
63
+ ### 3.1 Windows 用户
64
+
65
+ 在命令行中执行:
66
+
67
+ ```bash
68
+ npm install -g cloudcc-cli
69
+ ```
70
+
71
+ ### 3.2 macOS 用户
72
+
73
+ 在终端中执行(需要 sudo):
74
+
75
+ ```bash
76
+ sudo npm install -g cloudcc-cli
77
+ ```
78
+
79
+ ### 3.3 验证安装
80
+
81
+ 查看全局依赖列表,确认 `cloudcc-cli` 已安装:
82
+
83
+ ```bash
84
+ npm ls -g --depth=0
85
+ ```
86
+
87
+ 在 macOS 上如需查看 sudo 下的全局包,可使用:
88
+
89
+ ```bash
90
+ sudo npm ls -g --depth=0
91
+ ```
92
+
93
+ ---
94
+
95
+ ## 4. 安装 VS Code 与 CloudCC 插件
96
+
97
+ ### 4.1 安装 VS Code
98
+
99
+ - 下载地址:`https://code.visualstudio.com/download`
100
+ - 安装完成后,用 VS Code 作为主要开发编辑器。
101
+
102
+ ### 4.2 安装 CloudCC 插件
103
+
104
+ 1. 打开 VS Code,点击左侧扩展(Extensions)图标
105
+ 2. 搜索 `CloudCC`
106
+ 3. 选择官方 CloudCC 插件并安装
107
+
108
+ > 若在 Cursor 中开发,可参考 CloudCC 帮助中心中关于「常用工具 / Cursor 安装方式」的说明:`https://help.cloudcc.cn/product03/chang-yong-gong-ju/`
109
+
110
+ ---
111
+
112
+ ## 5. 安装并配置本地 MCP(cc-mcp)
113
+
114
+ 在支持 MCP 的开发工具中(如 Cursor),需要在 MCP 配置文件中添加:
115
+
116
+ ```json
117
+ {
118
+ "mcpServers": {
119
+ "cloudcc-cli": {
120
+ "command": "cc-mcp"
121
+ }
122
+ }
123
+ }
124
+ ```
125
+
126
+ 说明:
127
+
128
+ - `cloudcc-cli`:MCP 服务器标识,用于在工具中调用 CloudCC 相关能力
129
+ - `command: "cc-mcp"`:实际执行的命令,通常由 `cloudcc-cli` 提供
130
+
131
+ ---
132
+
133
+ ## 6. 创建模板项目并本地运行
134
+
135
+ ### 6.1 使用 CLI 创建项目
136
+
137
+ 在终端中切换到你的开发目录(如 `Documents`):
138
+
139
+ ```bash
140
+ cd ~/Documents
141
+ cc create project demo1
142
+ ```
143
+
144
+ `demo1` 为示例项目名,可按需替换。
145
+
146
+ ### 6.2 安装依赖并启动
147
+
148
+ 1. 使用 VS Code 打开刚创建的项目目录
149
+ 2. 在 VS Code 中选择菜单:`终端 → 新建终端`
150
+ 3. 在项目根目录安装依赖:
151
+
152
+ ```bash
153
+ npm i
154
+ ```
155
+
156
+ 4. 依赖安装完成后启动本地开发服务器:
157
+
158
+ ```bash
159
+ npm run serve
160
+ ```
161
+
162
+ 5. 在浏览器访问:
163
+
164
+ ```text
165
+ http://localhost:8080/
166
+ ```
167
+
168
+ 看到模板页面即表示前端本地环境搭建成功。
169
+
170
+ ---
171
+
172
+ ## 7. 获取并配置开发者密钥
173
+
174
+ > 目的:将本地项目与指定 CloudCC
175
+ > 环境(Org)关联,需使用具备「开发者权限」的账号在 CRM
176
+ > 中获取密钥和安全标记,然后配置到项目根目录下的 `cloudcc-cli.config.js`。
177
+
178
+ ### 7.1 创建开发者账号
179
+
180
+ 前提:拥有系统管理员账号。
181
+
182
+ 1. 使用系统管理账号登录 CRM
183
+ 2. 点击右上角齿轮,进入后台设置
184
+ 3. 进入 `用户管理 → 新建` 创建新用户
185
+ 4. 为新用户分配**具有开发者权限**的简档:
186
+ - 路径:`管理用户 → 简档 → 对应简档 → 普通用户权限 → 代码管理`
187
+ - 确认「代码管理」权限已开启
188
+
189
+ ### 7.2 获取开发者密钥(CloudCCDev)
190
+
191
+ 1. 使用开发者账号登录 CRM
192
+ 2. 点击右上角齿轮,进入后台设置
193
+ 3. 路径:`用户及控制 → 安全性控制 → 连接的应用程序 → 新建`
194
+ 4. 填写:
195
+ - 连接的应用程序名称
196
+ - API 名称
197
+ - 联系人电子邮件
198
+ 5. 创建完成后,在详情页中找到 `CloudCC Dev`,点击后面的复制按钮,得到开发者密钥,妥善保管。
199
+
200
+ ### 7.3 获取安全标记(safetyMark)
201
+
202
+ 1. 使用同一开发者账号登录 CRM
203
+ 2. 路径:`常规 → 个人设置 → 重置我的安全标记`
204
+ 3. 点击后,安全标记会发送到用户邮箱,在邮箱中查收并记录。
205
+
206
+ ### 7.4 配置 `cloudcc-cli.config.js`
207
+
208
+ 在模板项目根目录找到并打开 `cloudcc-cli.config.js`,参考官方示例填写:
209
+
210
+ ```javascript
211
+ module.exports = {
212
+ // 当前使用的环境标记
213
+ use: "dev",
214
+
215
+ // dev 环境密钥
216
+ dev: {
217
+ safetyMark: "必填,安全标记",
218
+ CloudCCDev: "必填,开发者密钥",
219
+ username: "选填,开发者用户名,会覆盖 CloudCCDev 中的 username",
220
+ },
221
+
222
+ // prod 环境密钥
223
+ prod: {
224
+ safetyMark: "必填,安全标记",
225
+ CloudCCDev: "必填,开发者密钥",
226
+ username: "选填,开发者用户名,会覆盖 CloudCCDev 中的 username",
227
+ },
228
+ };
229
+ ```
230
+
231
+ 说明:
232
+
233
+ - `use` 决定当前连接哪个环境(如 `"dev"` / `"prod"` 等)
234
+ - 不要把真实密钥提交到 Git 仓库(应在 `.gitignore` 中忽略)
235
+
236
+ ---
237
+
238
+ ## 8. 私有云与特殊参数配置
239
+
240
+ ### 8.1 私有云标记
241
+
242
+ 在私有云场景下,需要额外增加 `version: "private"` 字段示意:
243
+
244
+ ```javascript
245
+ module.exports = {
246
+ use: "dev",
247
+ dev: {
248
+ safetyMark: "必填,安全标记",
249
+ CloudCCDev: "必填,开发者密钥",
250
+ version: "必填,private",
251
+ username: "选填,开发者用户名,会覆盖 CloudCCDev 中的 username",
252
+ },
253
+ prod: {
254
+ safetyMark: "必填,安全标记",
255
+ CloudCCDev: "必填,开发者密钥",
256
+ version: "必填, private",
257
+ username: "选填,开发者用户名,会覆盖 CloudCCDev 中的 username",
258
+ },
259
+ };
260
+ ```
261
+
262
+ ### 8.2 baseUrl 与网关前缀
263
+
264
+ 示例配置(精简自官方文档):
265
+
266
+ ```javascript
267
+ dev: {
268
+ // 服务访问地址:
269
+ // 国内默认:https://developer.apis.cloudcc.cn
270
+ // 海外默认:https://developer.apis.cloudcc.com
271
+ // 私有云:可在登录 CRM 后,右键 → 检查 → 控制台,执行 $CCDK.CCConfig.getBaseUrl()
272
+ baseUrl: "http://xxx",
273
+
274
+ // 组件进入后台后自动销毁时间(毫秒),如 10 分钟:10 * 60 * 1000
275
+ destroyTimeout: 600000,
276
+
277
+ // 开发者平台在网关配置的前缀名,注意 URL 不要以 / 结尾
278
+ devSvcDispatch: "/devconsole",
279
+
280
+ // api-service-svc 访问网关前缀地址
281
+ apiSvcPrefix: "/xxx",
282
+
283
+ // setup-svc 访问网关前缀地址
284
+ setupSvcPrefix: "/xxx"
285
+ }
286
+ ```
287
+
288
+ ---
289
+
290
+ ## 9. 多环境配置示例
291
+
292
+ `cloudcc-cli.config.js` 支持配置多个环境,通过 `use` 字段选择当前使用的环境:
293
+
294
+ ```javascript
295
+ module.exports = {
296
+ // 使用 dev 环境密钥,与 dev 环境连接
297
+ use: "dev",
298
+
299
+ // dev 环境密钥
300
+ dev: {
301
+ safetyMark: "xxx",
302
+ CloudCCDev: "xxx",
303
+ },
304
+
305
+ // prod 环境密钥
306
+ prod: {
307
+ safetyMark: "xxx",
308
+ CloudCCDev: "xxx",
309
+ },
310
+ };
311
+ ```
312
+
313
+ 建议:
314
+
315
+ - 本地调试使用 `dev` 或测试环境
316
+ - 合并上线前在 `uat` 或类似环境进行回归验证
317
+ - 生产配置应仅在 CI/CD 或受控环境中可见,避免在开发机上长期保存生产密钥
318
+
319
+ ---
320
+
321
+ ## 10. 开发工具与代码规范补充
322
+
323
+ ### 10.1 推荐开发工具组合
324
+
325
+ - 编辑器:VS Code(配合 CloudCC 扩展)
326
+ - 包管理:npm(建议配置阿里源)
327
+ - 版本控制:Git
328
+
329
+ 官方文档中的推荐插件示例:
330
+
331
+ - `ESLint`:代码规范检查
332
+ - `Vetur` / 对应 Vue 插件:Vue 语法高亮与提示
333
+ - `GitLens`:Git 历史与责任人查看
334
+ - `Live Server`:静态资源快速预览(如需)
335
+
336
+ ### 10.2 代码规范(简要)
337
+
338
+ 详细 JS/CSS/注释规范可参考官方文档「开发规范」小节,这里仅保留关键点:
339
+
340
+ - 启用 ESLint 作为基础校验
341
+ - 在项目根目录维护 `README.md`,记录每次发布版本与更新内容
342
+ - Vue 组件中使用 `scoped` 样式或统一引入的样式变量文件,避免污染全局
343
+
344
+ ---
345
+
346
+ ## 11. 小结:环境搭建 Checklist
347
+
348
+ 在实际项目中,可使用以下清单快速自检:
349
+
350
+ - [ ] 已安装 Node(推荐 v20.19.5)并通过 `node -v` 验证
351
+ - [ ] npm 源已切换到 `https://registry.npmmirror.com`
352
+ - [ ] 已全局安装 `cloudcc-cli` 并验证
353
+ - [ ] 已安装 VS Code 与 CloudCC 插件(或已按官方指引配置 Cursor)
354
+ - [ ] MCP 已配置 `cloudcc-cli → cc-mcp`
355
+ - [ ] 已通过 `cc create project` 创建模板项目并成功 `npm i` + `npm run serve`
356
+ - [ ] 已创建开发者账号并确认「代码管理」权限开启
357
+ - [ ] 已获取开发者密钥与安全标记并正确配置 `cloudcc-cli.config.js`
358
+ - [ ] 如为私有云,已配置 `version: "private"` 与正确的 `baseUrl`/网关前缀
359
+ - [ ] 多环境(dev/prod/uat 等)配置与 `use` 字段已核对无误
@@ -0,0 +1,3 @@
1
+ # CloudCC Project 介绍
2
+
3
+ cloudcc二开模版项目,用于在本地对二开代码进行管理。
@@ -0,0 +1,77 @@
1
+ const chalk = require("chalk");
2
+ const { getPackageJson } = require("../../utils/config");
3
+ const { postClass } = require("../../utils/http");
4
+ const newInfo = require("./newInfo");
5
+
6
+ /**
7
+ * cc create recordType <projectPath> <encodedBodyJson>
8
+ *
9
+ * encodedBodyJson(encodeURI 编码前):
10
+ * {
11
+ * "objid": "202646FC67ACF24D39sG",
12
+ * "name": "记录类型标签",
13
+ * "apiCode": "unique_api_name"
14
+ * }
15
+ *
16
+ * 其余参数(简档列表、页面布局等)自动从 newInfo 接口取默认值。
17
+ *
18
+ * @param {string} projectPath
19
+ * @param {string} encodedBodyJson
20
+ * @param {boolean} isMcp
21
+ */
22
+ async function create(projectPath = process.cwd(), encodedBodyJson, isMcp = false) {
23
+ if (!encodedBodyJson) {
24
+ throw new Error("Create Record Type Failed: encodedBodyJson is required");
25
+ }
26
+ const { objid, name, apiCode } = JSON.parse(decodeURI(encodedBodyJson));
27
+ if (!objid || !name || !apiCode) {
28
+ throw new Error("Create Record Type Failed: objid, name and apiCode are required");
29
+ }
30
+
31
+ // 从 newInfo 获取默认数据(简档列表、页面布局列表等)
32
+ const info = await newInfo(projectPath, objid, true);
33
+ const defaultLayoutId = info.layouts?.[0]?.id || "";
34
+ const pslist = Object.entries(info.profilemap).map(([profileid, profilename], idx) => ({
35
+ profileid,
36
+ visibleRecordtypes: info.profileRecordtypes?.[profileid] || "",
37
+ isActive: true,
38
+ isDefault: idx === 0,
39
+ layoutid: defaultLayoutId,
40
+ profile: { profilename }
41
+ }));
42
+
43
+ const body = {
44
+ objid,
45
+ obj: {
46
+ existsRectype: "",
47
+ description: "",
48
+ isenable: "",
49
+ name,
50
+ apiCode
51
+ },
52
+ existobj: "",
53
+ pslist
54
+ };
55
+
56
+ const config = await getPackageJson(projectPath);
57
+ if (!isMcp) {
58
+ console.error();
59
+ console.error(chalk.green("Creating record type, please wait..."));
60
+ console.error();
61
+ }
62
+ const res = await postClass(
63
+ config.setupSvc + "/api/recordType/saveRecordType",
64
+ body,
65
+ config.accessToken
66
+ );
67
+ if (res && res.result) {
68
+ if (!isMcp) {
69
+ console.error(chalk.green("Success! Record type created."));
70
+ console.error();
71
+ }
72
+ return res;
73
+ }
74
+ throw new Error("Create Record Type Failed: " + (res?.returnInfo || res?.message || "Unknown error"));
75
+ }
76
+
77
+ module.exports = create;
@@ -0,0 +1,52 @@
1
+ const chalk = require("chalk");
2
+ const { getPackageJson } = require("../../utils/config");
3
+ const { postClass } = require("../../utils/http");
4
+
5
+ /**
6
+ * cc delete recordType <projectPath> <encodedBodyJson>
7
+ * 删除记录类型(删除前请先调用 validDelete 获取替换目标列表)
8
+ *
9
+ * encodedBodyJson(encodeURI 编码前)示例:
10
+ * {
11
+ * "id": "2026667B898023FoKwCe", // 待删除记录类型 ID
12
+ * "objid": "202646FC67ACF24D39sG", // 对象 ID
13
+ * "replaceId": "2026A1C1DE314F24t6eZ" // 替换记录类型 ID,不替换则传空字符串 ""
14
+ * }
15
+ *
16
+ * @param {string} projectPath
17
+ * @param {string} encodedBodyJson
18
+ * @param {boolean} isMcp
19
+ */
20
+ async function remove(projectPath = process.cwd(), encodedBodyJson, isMcp = false) {
21
+ if (!encodedBodyJson) {
22
+ throw new Error("Delete Record Type Failed: encodedBodyJson is required");
23
+ }
24
+ const body = JSON.parse(decodeURI(encodedBodyJson));
25
+ if (!body.id || !body.objid) {
26
+ throw new Error("Delete Record Type Failed: id and objid are required");
27
+ }
28
+ if (!("replaceId" in body)) {
29
+ throw new Error("Delete Record Type Failed: replaceId is required (pass empty string if no replacement)");
30
+ }
31
+ const config = await getPackageJson(projectPath);
32
+ if (!isMcp) {
33
+ console.error();
34
+ console.error(chalk.green(`Deleting record type (${body.id}), please wait...`));
35
+ console.error();
36
+ }
37
+ const res = await postClass(
38
+ config.setupSvc + "/api/recordType/deleteObj",
39
+ body,
40
+ config.accessToken
41
+ );
42
+ if (res && res.result) {
43
+ if (!isMcp) {
44
+ console.error(chalk.green("Success! Record type deleted."));
45
+ console.error();
46
+ }
47
+ return res;
48
+ }
49
+ throw new Error("Delete Record Type Failed: " + (res?.returnInfo || res?.message || "Unknown error"));
50
+ }
51
+
52
+ module.exports = remove;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * recordType 文档统一入口
3
+ */
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+
7
+ const DOCS_DIR = path.join(__dirname, "docs");
8
+
9
+ function readDocFile(basename) {
10
+ return fs.readFileSync(path.join(DOCS_DIR, `${basename}.md`), "utf8");
11
+ }
12
+
13
+ /**
14
+ * cc doc recordType <introduction|devguide>
15
+ * @param {string[]} argvs [doc, type, introduction|devguide, ...]
16
+ */
17
+ function doc(argvs) {
18
+ const subType = argvs[2];
19
+ const key = String(subType || "").trim().toLowerCase();
20
+ if (!key) {
21
+ throw new Error("cc doc recordType 需要子命令:introduction 或 devguide");
22
+ }
23
+ if (key === "introduction") {
24
+ const content = readDocFile("introduction");
25
+ console.log(content);
26
+ return content;
27
+ }
28
+ if (key === "devguide") {
29
+ const content = readDocFile("devguide");
30
+ console.log(content);
31
+ return content;
32
+ }
33
+ throw new Error(`doc 不支持的子命令: ${subType},请使用 introduction 或 devguide`);
34
+ }
35
+
36
+ module.exports = doc;
@@ -0,0 +1,160 @@
1
+ # CloudCC 记录类型操作指南
2
+
3
+ ---
4
+
5
+ ## 1. 入口与列表页
6
+
7
+ 进入路径:`对象管理 → 选择对象 → 记录类型` 标签页
8
+
9
+ 列表页展示:
10
+ - **记录类型标签**:显示名称
11
+ - **描述**
12
+ - **是否启用**
13
+ - **最后修改人**
14
+
15
+ 右上角操作按钮:**新建 / 排序 / 页面布局分配**
16
+
17
+ ```bash
18
+ # 获取指定对象的记录类型列表
19
+ cc getList recordType . <objid>
20
+ ```
21
+
22
+ ---
23
+
24
+ ## 2. 新建前查询初始信息
25
+
26
+ 新建前需先获取简档列表、现有记录类型列表、页面布局列表:
27
+
28
+ ```bash
29
+ cc newInfo recordType . <objid>
30
+ ```
31
+
32
+ 返回结构:
33
+
34
+ ```json
35
+ {
36
+ "existsRectypeList": [ { "id": "", "name": "--主--" } ],
37
+ "profilemap": { "<profileId>": "简档名称" },
38
+ "layouts": [ { "id": "<layoutId>", "name": "页面布局名称" } ],
39
+ "profileRecordtypes": { "<profileId>": "" },
40
+ "slist": []
41
+ }
42
+ ```
43
+
44
+ ---
45
+
46
+ ## 3. 新建记录类型
47
+
48
+ ```bash
49
+ cc create recordType . <encodedBodyJson>
50
+ ```
51
+
52
+ 原始 JSON(`encodeURI` 编码前):
53
+
54
+ ```json
55
+ {
56
+ "objid": "202646FC67ACF24D39sG",
57
+ "name": "记录类型标签",
58
+ "apiCode": "unique_api_name"
59
+ }
60
+ ```
61
+
62
+ > 其余参数(简档列表、页面布局等)由系统自动调用 `newInfo` 接口获取并使用默认值:默认**不启用**(`isenable: ""`)、不继承现有记录类型、使用第一个页面布局、所有简档均启用且第一个简档设为默认。
63
+
64
+ | 字段 | 说明 |
65
+ |------------|-------------------------------------------------|
66
+ | `objid` | 对象 ID |
67
+ | `name` | 记录类型标签(显示名称) |
68
+ | `apiCode` | 唯一名称,创建后不可修改(对应 UI「唯一名称」) |
69
+
70
+ ---
71
+
72
+ ## 4. 编辑记录类型
73
+
74
+ **Step 1:获取回显数据**
75
+
76
+ ```bash
77
+ cc editInfo recordType . <encodedBodyJson>
78
+ # encodedBodyJson: { "id": "<recordTypeId>", "objid": "<objid>" }
79
+ ```
80
+
81
+ **Step 2:修改后保存(只可编辑以下四个字段)**
82
+
83
+ | 可编辑字段 | 字段名 |
84
+ |--------------|---------------|
85
+ | 记录类型标签 | `name` |
86
+ | 描述 | `description` |
87
+ | 唯一名称 | `apiCode` |
88
+ | 启用 | `isenable` |
89
+
90
+ ```bash
91
+ cc editSave recordType . <encodedBodyJson>
92
+ # encodedBodyJson: 将 editInfo 返回的 data 对象修改目标字段后提交
93
+ ```
94
+
95
+ ---
96
+
97
+ ## 5. 删除记录类型
98
+
99
+ **Step 1:删除前校验**(检测启用状态 + 获取可替换记录类型列表)
100
+
101
+ ```bash
102
+ cc validDelete recordType . <encodedBodyJson>
103
+ # encodedBodyJson: { "id": "<recordTypeId>", "objid": "<objid>" }
104
+ ```
105
+
106
+ > **规则**:调用此命令时会先检测记录类型是否处于启用状态:
107
+ > - 若当前为**启用**状态,命令将报错并提示先执行禁用操作,不会继续执行删除校验
108
+ > - 若当前为**禁用**状态,则正常返回可替换记录类型列表
109
+ >
110
+ > 请先调用 `cc editSave` 将 `isenable` 设为 `"false"` 完成禁用,再重新执行此命令。
111
+
112
+ 返回:
113
+
114
+ ```json
115
+ {
116
+ "obj": { "id": "2026667B898023FoKwCe", "name": "测试1" },
117
+ "recordtypes": [
118
+ { "id": "", "name": "--无--" },
119
+ { "id": "2026A1C1DE314F24t6eZ", "name": "测试2" }
120
+ ]
121
+ }
122
+ ```
123
+
124
+ **Step 2:执行删除**
125
+
126
+ ```bash
127
+ cc delete recordType . <encodedBodyJson>
128
+ # encodedBodyJson: { "id": "<recordTypeId>", "objid": "<objid>", "replaceId": "<replaceId>" }
129
+ ```
130
+
131
+ | 字段 | 说明 |
132
+ |-------------|---------------------------------------------|
133
+ | `id` | 待删除记录类型 ID |
134
+ | `objid` | 对象 ID |
135
+ | `replaceId` | 替换记录类型 ID;不替换时传空字符串 `""` |
136
+
137
+ > **注意**:删除后,原使用该记录类型的所有记录将替换为 `replaceId` 指定的记录类型。
138
+
139
+ ---
140
+
141
+ ## 6. 查看文档
142
+
143
+ ```bash
144
+ cc doc recordType introduction # 能力与适用场景说明
145
+ cc doc recordType devguide # 本操作指南
146
+ ```
147
+
148
+ ---
149
+
150
+ ## 7. API 参考
151
+
152
+ | 操作 | 接口 | 关键参数 |
153
+ |--------------|---------------------------------------|--------------------------------|
154
+ | 获取列表 | `POST /api/recordType/getRecordTypeList` | `objid` |
155
+ | 新建初始信息 | `POST /api/recordType/newRecordType` | `objid` |
156
+ | 新建保存 | `POST /api/recordType/saveRecordType` | `objid`, `obj`, `pslist` |
157
+ | 编辑回显 | `POST /api/recordType/editRecordType` | `id`, `objid` |
158
+ | 编辑保存 | `POST /api/recordType/editSave` | 完整记录类型对象 |
159
+ | 删除校验 | `POST /api/recordType/validDelete` | `id`, `objid` |
160
+ | 删除 | `POST /api/recordType/deleteObj` | `id`, `objid`, `replaceId` |