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
package/src/script/doc.js CHANGED
@@ -1,259 +1,45 @@
1
- /**
2
- * script 文档统一入口(全量一次性输出)
3
- */
4
1
  const fs = require("fs");
5
2
  const path = require("path");
6
3
 
7
- function generateFullMarkdownDoc() {
8
- const lines = [
9
- "# CloudCC 客户端脚本开发指南",
10
- "",
11
- "> 本文档参考 CloudCC 官方「客户端脚本」文档整理而成:[客户端脚本](https://help.cloudcc.cn/product03/ke-hu-duan-jiao-ben/)。 ",
12
- "> 目标:指导开发者在不同页面(列表、新建/编辑、详情、全局)特定时机运行 JavaScript,基于 CCDK 能力实现字段控制、布局调整等前端增强。",
13
- "",
14
- "---",
15
- "",
16
- "## 1. 概念与入口",
17
- "",
18
- "### 1.1 什么是客户端脚本",
19
- "",
20
- "- 客户端脚本是在 **浏览器端**、特定页面和时机执行的一段 JavaScript。 ",
21
- "- 依托 `$CCDK` 提供的桥接能力,可以:",
22
- " - 显示提示信息",
23
- " - 控制字段显隐 / 只读",
24
- " - 调整页面 DOM 结构",
25
- " - 在保存前/后执行校验或自定义逻辑",
26
- "",
27
- "### 1.2 进入客户端脚本设置页面",
28
- "",
29
- "1. 登录 CloudCC 系统 ",
30
- "2. 点击右上角头像,选择「开发者平台」(仅管理员简档可见) ",
31
- "3. 左侧菜单:`扩展 → 客户端脚本`",
32
- "",
33
- "---",
34
- "",
35
- "## 2. 创建第一个客户端脚本",
36
- "",
37
- "### 2.1 新建脚本",
38
- "",
39
- "1. 在「客户端脚本」列表页,点击右上角「新建」 ",
40
- "2. 填写基本信息(名称、适用对象/页面/事件等),进入代码编辑页面 ",
41
- "3. 在代码输入区输入示例代码:",
42
- "",
43
- "```javascript",
44
- "$CCDK.CCMessage.showMessage('hello cloudCC');",
45
- "```",
46
- "",
47
- "4. 点击右上角「保存」",
48
- "",
49
- "### 2.2 回到前台查看效果",
50
- "",
51
- "例如: ",
52
- "- 配置为在「客户详情页 onLoad」执行 ",
53
- "- 返回前台 → 打开客户菜单 → 进入任意一条客户详情 ",
54
- "- 页面加载完成后,会看到 `hello cloudCC` 提示信息",
55
- "",
56
- "---",
57
- "",
58
- "## 3. 利用 devid 精确控制页面元素",
59
- "",
60
- "> 为方便控制页面元素,平台在关键 DOM 节点上添加了 `devid` 自定义属性,并使用特定业务 ID 绑定。可通过 F12 查看并用于脚本选择器。",
61
- "",
62
- "### 3.1 示例:禁用编辑页的「分级」字段",
63
- "",
64
- "#### 第一步:查看 devid",
65
- "",
66
- "1. 按 `F12` 打开浏览器开发者工具 ",
67
- "2. 切换到「元素」(Elements) 面板 ",
68
- "3. 使用元素选择器选中「分级」字段对应 DOM ",
69
- "4. 在右侧/标签属性中查找并复制该元素的 `devid` 值备用",
70
- "",
71
- "#### 第二步:创建客户端脚本",
72
- "",
73
- "在客户端脚本中,根据 `devid` 操作 DOM:",
74
- "",
75
- "```javascript",
76
- "// 方式一:通过动态插入样式禁用点击",
77
- "let style = document.createElement('style');",
78
- "style.type = 'text/css';",
79
- "style.innerHTML = '[devid=\"ffe201100003855g6Ipz\"]{pointer-events:none}';",
80
- "document.getElementsByTagName('head').item(0).appendChild(style);",
81
- "",
82
- "// 方式二:直接隐藏某个元素",
83
- "let dd = document.querySelector('div[devid=\"ffe201100003428r65pk\"]');",
84
- "if (dd) {",
85
- " dd.style.display = \"none\";",
86
- "}",
87
- "```",
88
- "",
89
- "保存后回到前台,进入对应页面查看效果。",
90
- "",
91
- "### 3.2 示例:隐藏详情页某个字段",
92
- "",
93
- "同样通过 `devid` 精确定位字段,再注入样式:",
94
- "",
95
- "```javascript",
96
- "// 隐藏并不占用空间",
97
- "let style = document.createElement('style');",
98
- "style.type = 'text/css';",
99
- "style.innerHTML = '[devid=\"ffe20220523account01\"]{display:none !important}';",
100
- "document.getElementsByTagName('head').item(0).appendChild(style);",
101
- "```",
102
- "",
103
- "```javascript",
104
- "// 隐藏但保留空间",
105
- "let style = document.createElement('style');",
106
- "style.type = 'text/css';",
107
- "style.innerHTML = '[devid=\"ffe20220523account01\"]{visibility:hidden !important}';",
108
- "document.getElementsByTagName('head').item(0).appendChild(style);",
109
- "```",
110
- "",
111
- "### 3.3 示例:移动页面元素到其他位置",
112
- "",
113
- "```javascript",
114
- "// 获取要移动的节点",
115
- "const moveNode = document.querySelector('[devid=\"aee2024EFBBA5EEfs1Ta\"]');",
116
- "// 目标节点",
117
- "const targetNode = document.querySelector('[devid=\"adf2024D33E03DA6xzBj\"]');",
118
- "// 目标节点的父节点",
119
- "const targetParentNode = targetNode.parentNode;",
120
- "",
121
- "// 将需要移动的节点插入到目标节点前面",
122
- "if (moveNode && targetNode && targetParentNode) {",
123
- " targetParentNode.insertBefore(moveNode, targetNode);",
124
- "}",
125
- "```",
126
- "",
127
- "**注意**:DOM 可能尚未渲染完成,可结合定时器或 `MutationObserver` 等机制等待节点出现。",
128
- "",
129
- "---",
130
- "",
131
- "## 4. 页面类型与脚本事件映射",
132
- "",
133
- "> 系统页面大致分为「全局、列表、新建/编辑、详情」等类型,每种页面支持不同事件,脚本在对应时机执行。",
134
- "",
135
- "以下是官方提供的主要事件(简化说明):",
136
- "",
137
- "### 4.1 全局类型",
138
- "",
139
- "- **onCreate**",
140
- " - 适用:PC / HS",
141
- " - 函数签名:`function test($CCDK, obj = {})`",
142
- " - 说明:项目启动时触发(业务页面代码尚未执行)",
143
- "",
144
- "- **onLoad**",
145
- " - 适用:PC / HS",
146
- " - 场景:全局 UI 首次展示后",
147
- "",
148
- "- **onDestroy**",
149
- " - 适用:PC / HS",
150
- " - 场景:关闭 Tab / 更改流程等导致当前应用关闭时",
151
- "",
152
- "### 4.2 视图页(列表页面)",
153
- "",
154
- "事件函数统一形如:`function test($CCDK, obj = {})`",
155
- "",
156
- "- **onCreated**",
157
- " - 时机:进入视图页,但 DOM 还未创建 ",
158
- "- **onLoad**",
159
- " - 时机:首次进入,或点击搜索刷新列表数据后 ",
160
- "- **onDestroy**",
161
- " - 时机:离开列表页(如进入详情页等)",
162
- "",
163
- "### 4.3 新建/编辑页",
164
- "",
165
- "同样使用 `function test($CCDK, obj = {})`:",
166
- "",
167
- "- **onCreated**",
168
- " - 时机:进入新建/编辑页面,但 DOM 尚未创建 ",
169
- "- **onLoad**",
170
- " - 时机:详情数据加载完成、页面渲染结束 ",
171
- "- **onDestroy**",
172
- " - 时机:离开新建/编辑页面 ",
173
- "- **beforeSave**",
174
- " - 参数:`obj.detailData` 为 key-value 形式的详情数据,**可以在这里修改** ",
175
- " - 时机:点击保存按钮时触发,适合做前端校验与补充字段赋值 ",
176
- "- **afterSave**",
177
- " - 时机:保存接口请求完成后触发 ",
178
- "- **onChange**",
179
- " - 时机:编辑某个字段、光标失焦,且 value 有变化时触发",
180
- "",
181
- "### 4.4 详情页",
182
- "",
183
- "- **onLoad**",
184
- " - 适用:PC / HS ",
185
- " - 时机:获取详情基础数据并完成 DOM 渲染后触发 ",
186
- "",
187
- "---",
188
- "",
189
- "## 5. 实战建议与注意事项",
190
- "",
191
- "### 5.1 DOM 渲染时机",
192
- "",
193
- "- 部分页面在脚本执行时 DOM 可能尚未完全渲染,建议:",
194
- " - 使用 `setTimeout` / 轮询检查目标节点是否存在 ",
195
- " - 或配合 `MutationObserver` 监听 DOM 变化后再操作 ",
196
- "",
197
- "### 5.2 与 CCDK 的配合",
198
- "",
199
- "- `$CCDK` 提供了多种能力,如:",
200
- " - `CCMessage`:消息提示 ",
201
- " - `CCLoad`:脚本/样式加载 ",
202
- " - 其他与对象/类交互的桥接能力 ",
203
- "- 客户端脚本中应优先调用 `$CCDK` 而非自行拼接接口。",
204
- "",
205
- "### 5.3 与自定义组件的边界",
206
- "",
207
- "- 客户端脚本更适合:",
208
- " - 简单的字段控制",
209
- " - 小范围布局微调",
210
- " - 轻量交互增强 ",
211
- "- 更复杂的 UI、交互与业务逻辑推荐用「自定义组件」实现(详见 `custom-component-dev.md`)。",
212
- "",
213
- "---",
214
- "",
215
- "## 6. 客户端脚本开发 Checklist",
216
- "",
217
- "- [ ] 已在「开发者平台 → 客户端脚本」正确选择对象、页面类型与事件(onLoad / beforeSave 等) ",
218
- "- [ ] 使用 `$CCDK` 能力而非手工拼接接口或直接依赖不稳定的全局变量 ",
219
- "- [ ] 所有 DOM 操作都考虑了渲染时机,避免因节点不存在而报错 ",
220
- "- [ ] 通过 `devid` 精确定位关键元素,避免依赖脆弱的层级或 class 选择器 ",
221
- "- [ ] 对性能敏感操作(如定时器、频繁 DOM 查询)做了节流或销毁处理 ",
222
- "- [ ] 已区分客户端脚本与自定义组件的职责,将复杂 UI / 交互放到组件中实现 ",
223
- "- [ ] 在目标环境中完整测试:列表 / 新建 / 编辑 / 详情等场景,确认无脚本错误和布局异常 ",
224
- "",
225
- ];
4
+ const DOCS_DIR = path.join(__dirname, "docs");
5
+ const INTRODUCTION = path.join(DOCS_DIR, "introduction.md");
6
+ const DEVGUIDE = path.join(DOCS_DIR, "devguide.md");
226
7
 
227
- const base = lines.join("\n");
228
- const ccdkPath = path.join(__dirname, "..", "api", "ccdk-sdk.md");
229
- let ccdkContent = "";
8
+ function readDocOrFallback(filePath, fallback) {
230
9
  try {
231
- ccdkContent = fs.readFileSync(ccdkPath, "utf8");
10
+ return fs.readFileSync(filePath, "utf8").trim();
232
11
  } catch (e) {
233
- ccdkContent = `# CloudCC 前端 SDK(cloudcc-ccdk)使用指南\n\n(未找到文件:${ccdkPath})\n`;
12
+ return fallback;
234
13
  }
14
+ }
235
15
 
236
- return [
237
- base,
238
- "",
239
- "---",
240
- "",
241
- "## 附录:CCDK SDK 速查",
242
- "",
243
- "> 来源:`src/api/ccdk-sdk.md`",
244
- "",
245
- ccdkContent.trim(),
246
- "",
247
- ].join("\n");
16
+ function getIntroductionDoc() {
17
+ return readDocOrFallback(
18
+ INTRODUCTION,
19
+ `# CloudCC 客户端脚本介绍\n\n(未找到文件:${INTRODUCTION})\n`
20
+ );
248
21
  }
249
22
 
250
- function doc() {
251
- const content = generateFullMarkdownDoc();
252
- console.log(content);
253
- return content;
23
+ function getDevGuideDoc() {
24
+ return readDocOrFallback(
25
+ DEVGUIDE,
26
+ `# CloudCC 客户端脚本开发指南\n\n(未找到文件:${DEVGUIDE})\n`
27
+ );
254
28
  }
255
29
 
256
- // 兼容旧调用方:仍提供同名入口(但都返回全量文档)
257
- doc.getEditGuide = doc;
30
+ function doc(argvs = []) {
31
+ const subType = String(argvs[2] || "").trim().toLowerCase();
32
+ if (!subType || subType === "devguide") {
33
+ const content = getDevGuideDoc();
34
+ console.log(content);
35
+ return content;
36
+ }
37
+ if (subType === "introduction") {
38
+ const content = getIntroductionDoc();
39
+ console.log(content);
40
+ return content;
41
+ }
42
+ throw new Error(`doc 不支持的子命令: ${argvs[2]},请使用 introduction 或 devguide`);
43
+ }
258
44
 
259
45
  module.exports = doc;
@@ -0,0 +1,290 @@
1
+ # CloudCC Script 文档(全量)
2
+
3
+ ## 客户端脚本(Script)操作指南
4
+
5
+ 直接查看:`cc doc script`
6
+
7
+ ---
8
+
9
+ ## 1. 常见操作
10
+
11
+ - 查询客户端脚本列表
12
+ - 查看客户端脚本详情
13
+ - 新建客户端脚本(生成本地目录与模板)
14
+ - 发布客户端脚本到环境(保存/更新线上脚本)
15
+ - 从环境拉取脚本内容到本地(覆盖本地脚本文件)
16
+ - 删除客户端脚本
17
+
18
+ ---
19
+
20
+ ## 2. 常用 CLI 命令
21
+
22
+ ### 1) 查看客户端脚本文档
23
+
24
+ 命令:
25
+
26
+ ```bash
27
+ cc doc script
28
+ ```
29
+
30
+ 说明:输出客户端脚本文档,并自动附带本文件内容。
31
+
32
+ ---
33
+
34
+ ### 2) 查询客户端脚本列表
35
+
36
+ 命令:
37
+
38
+ ```bash
39
+ cc get script <encodedCondJson> <projectPath>
40
+ ```
41
+
42
+ 参数说明:
43
+
44
+ | 参数名称 | 类型 | 是否必须 | 默认值 | 备注 |
45
+ | :--- | :--- | :--- | :--- | :--- |
46
+ | encodedCondJson | string | 视场景 | — | `encodeURI(JSON.stringify(body))` |
47
+ | projectPath | string | 非必须 | 当前目录 | 项目根目录 |
48
+
49
+ 请求体(decoded 后)字段(与页面抓包一致):
50
+
51
+ | 参数名称 | 类型 | 是否必须 | 默认值 | 备注 |
52
+ | :--- | :--- | :--- | :--- | :--- |
53
+ | pageSize | number | 非必须 | `50` | 每页条数 |
54
+ | pageNo | number | 非必须 | `1` | 页码(从 1 开始) |
55
+ | condition | object | 非必须 | `{}` | 查询条件 |
56
+ | condition.scriptName | string | 非必须 | `""` | 脚本名称筛选 |
57
+ | condition.pageLabel | string | 非必须 | `""` | 页面标签筛选 |
58
+ | condition.objName | string | 非必须 | `""` | 对象名称筛选 |
59
+
60
+ 输出:简化列表(每条包含 `name` / `id` / `apiname`)。
61
+
62
+ ---
63
+
64
+ ### 3) 查看客户端脚本详情
65
+
66
+ 命令(两种用法):
67
+
68
+ ```bash
69
+ # 1) 按本地脚本路径查看(不依赖线上)
70
+ cc detail script <objName/scriptName>
71
+
72
+ # 2) 按线上脚本 id 查看
73
+ cc detail script "" <scriptId> <projectPath>
74
+ ```
75
+
76
+ 说明:
77
+
78
+ - 传 `objName/scriptName`:读取本地 `script/<objName>/<scriptName>/config.json` 和脚本文件。
79
+ - 传 `scriptId`:调用线上接口查询并返回详情。
80
+
81
+ ---
82
+
83
+ ### 4) 新建客户端脚本(本地生成)
84
+
85
+ 命令:
86
+
87
+ ```bash
88
+ cc create script <encodedBodyJson>
89
+ ```
90
+
91
+ 参数说明:
92
+
93
+ | 参数名称 | 类型 | 是否必须 | 默认值 | 备注 |
94
+ | :--- | :--- | :--- | :--- | :--- |
95
+ | encodedBodyJson | string | 必须 | — | `encodeURI(JSON.stringify(body))` |
96
+
97
+ 请求体(decoded 后)常用字段(会写入 `config.json`):
98
+
99
+ | 参数名称 | 类型 | 是否必须 | 默认值 | 备注 |
100
+ | :--- | :--- | :--- | :--- | :--- |
101
+ | objName | string | 必须 | — | 对象 API 名称(目录名) |
102
+ | scriptName | string | 必须 | — | 脚本名称(目录名 + 文件名) |
103
+ | pageId / eventType / event / fieldId / usageScenario | string | 非必须 | `""` | 作为脚本配置元数据 |
104
+
105
+ 生成目录结构:
106
+
107
+ - `script/<objName>/<scriptName>/<scriptName>.js`
108
+ - `script/<objName>/<scriptName>/config.json`
109
+
110
+ ---
111
+
112
+ ### 5) 发布客户端脚本(保存到线上)
113
+
114
+ 命令:
115
+
116
+ ```bash
117
+ cc publish script <objName/scriptName>
118
+ ```
119
+
120
+ 说明:
121
+
122
+ - 读取本地 `script/<objName>/<scriptName>/<scriptName>.js` 与 `config.json`
123
+ - 只会发布 `function main($CCDK, obj) { ... }` 的函数体内容(会校验 main 函数存在)
124
+ - 首次发布成功后,会把返回的 `id` 写回 `config.json`,用于后续更新/拉取/删除
125
+
126
+ ---
127
+
128
+ ### 6) 拉取客户端脚本(用线上内容覆盖本地)
129
+
130
+ 命令:
131
+
132
+ ```bash
133
+ cc pull script <objName/scriptName>
134
+ ```
135
+
136
+ 说明:要求本地 `config.json` 内已存在 `id`(先发布一次)。
137
+
138
+ ---
139
+
140
+ ### 7) 拉取线上脚本到本地(按 id 拉取并生成目录)
141
+
142
+ 命令:
143
+
144
+ ```bash
145
+ cc pullList script <scriptId> <projectPath>
146
+ ```
147
+
148
+ 说明:会在 `<projectPath>/script/<objName>/<scriptName>/` 下生成 `config.json` 与脚本文件。
149
+
150
+ ---
151
+
152
+ ### 8) 删除客户端脚本
153
+
154
+ 命令(两种用法):
155
+
156
+ ```bash
157
+ # 1) 直接按 scriptId 删除
158
+ cc delete script <scriptId> <projectPath>
159
+
160
+ # 2) 按 "objName/scriptName" 删除(会先查询解析出 id,再删除)
161
+ cc delete script <objName/scriptName> <projectPath>
162
+ ```
163
+
164
+ ---
165
+
166
+ ## 3. 示例
167
+
168
+ ### 查询客户端脚本列表(默认条件)
169
+
170
+ ```bash
171
+ cc get script "$(node -e "console.log(encodeURI(JSON.stringify({pageSize:50,pageNo:1,condition:{scriptName:'',pageLabel:'',objName:''}})))")" .
172
+ ```
173
+
174
+ ### 按脚本名筛选(例如:test)
175
+
176
+ ```bash
177
+ cc get script "$(node -e "console.log(encodeURI(JSON.stringify({pageSize:50,pageNo:1,condition:{scriptName:'test',pageLabel:'',objName:''}})))")" .
178
+ ```
179
+
180
+ ### 新建脚本(本地)
181
+
182
+ ```bash
183
+ cc create script "$(node -e "console.log(encodeURI(JSON.stringify({objName:'contact',scriptName:'hello_script'})))")"
184
+ ```
185
+
186
+ ### 发布脚本(上线)
187
+
188
+ ```bash
189
+ cc publish script contact/hello_script
190
+ ```
191
+
192
+ ### 拉取脚本(从线上覆盖本地)
193
+
194
+ ```bash
195
+ cc pull script contact/hello_script
196
+ ```
197
+
198
+ ### 删除脚本(按 id)
199
+
200
+ ```bash
201
+ cc delete script <scriptId> .
202
+ ```
203
+
204
+ ---
205
+
206
+ ## 4. Checklist
207
+
208
+ - [ ] 已在正确项目目录执行命令(或显式传入 `projectPath`)
209
+ - [ ] `cc get script` 的条件已按 `encodeURI(JSON.stringify(...))` 传入
210
+ - [ ] 发布前脚本文件包含 `function main($CCDK, obj) { ... }`
211
+ - [ ] 首次发布后确认 `config.json` 已写入 `id`
212
+ - [ ] 拉取/删除前确认目标 `id` 正确(避免误删)
213
+
214
+ ---
215
+
216
+ ## 5. 进阶示例
217
+
218
+ ### 5.1 快速入门示例
219
+
220
+ #### 进入客户端脚本设置页面
221
+
222
+ 1. 登录 CloudCC 系统
223
+ 2. 点击右上角头像,选择「开发者平台」(仅管理员简档可见)
224
+ 3. 左侧菜单:`扩展 -> 客户端脚本`
225
+
226
+ #### 新建并执行第一个脚本
227
+
228
+ 在代码输入区输入:
229
+
230
+ ```javascript
231
+ $CCDK.CCMessage.showMessage("hello cloudCC");
232
+ ```
233
+
234
+ 保存后进入对应页面(如详情页 `onLoad`),可看到提示信息。
235
+
236
+ ### 5.2 基于 devid 控制页面元素
237
+
238
+ > 可通过浏览器开发者工具(F12)查看页面元素上的 `devid`,再在脚本中精确定位。
239
+
240
+ #### 禁用编辑页字段
241
+
242
+ ```javascript
243
+ let style = document.createElement("style");
244
+ style.type = "text/css";
245
+ style.innerHTML = '[devid="ffe201100003855g6Ipz"]{pointer-events:none}';
246
+ document.getElementsByTagName("head").item(0).appendChild(style);
247
+ ```
248
+
249
+ #### 隐藏详情页字段(不占位)
250
+
251
+ ```javascript
252
+ let style = document.createElement("style");
253
+ style.type = "text/css";
254
+ style.innerHTML = '[devid="ffe20220523account01"]{display:none !important}';
255
+ document.getElementsByTagName("head").item(0).appendChild(style);
256
+ ```
257
+
258
+ #### 隐藏详情页字段(保留占位)
259
+
260
+ ```javascript
261
+ let style = document.createElement("style");
262
+ style.type = "text/css";
263
+ style.innerHTML = '[devid="ffe20220523account01"]{visibility:hidden !important}';
264
+ document.getElementsByTagName("head").item(0).appendChild(style);
265
+ ```
266
+
267
+ #### 移动页面元素位置
268
+
269
+ ```javascript
270
+ const moveNode = document.querySelector('[devid="aee2024EFBBA5EEfs1Ta"]');
271
+ const targetNode = document.querySelector('[devid="adf2024D33E03DA6xzBj"]');
272
+ const targetParentNode = targetNode && targetNode.parentNode;
273
+
274
+ if (moveNode && targetNode && targetParentNode) {
275
+ targetParentNode.insertBefore(moveNode, targetNode);
276
+ }
277
+ ```
278
+
279
+ ### 5.3 事件选择建议
280
+
281
+ - 全局脚本:适合应用启动、销毁等全局行为
282
+ - 列表页脚本:适合列表加载后增强
283
+ - 新建/编辑页脚本:适合 `beforeSave` 校验与赋值
284
+ - 详情页脚本:适合详情渲染后字段展示控制
285
+
286
+ ### 5.4 使用注意事项
287
+
288
+ - DOM 可能未渲染完成,建议结合 `setTimeout` 或 `MutationObserver`
289
+ - 优先使用 `$CCDK` 能力,不建议直接拼接接口调用
290
+ - 对频繁执行逻辑做好性能控制,避免页面卡顿
@@ -0,0 +1,48 @@
1
+ # CloudCC 客户端脚本介绍
2
+
3
+ 客户端脚本是在 CloudCC
4
+ 前端页面(如列表页、新建/编辑页、详情页、全局页面)特定事件时机执行的一段
5
+ JavaScript。它依托 `$CCDK`
6
+ 的桥接能力,在不改造核心系统代码的前提下,快速实现页面行为和交互的业务化定制。
7
+
8
+ ## 能干什么
9
+
10
+ - 在页面加载、字段变更、保存前后等时机执行自定义逻辑
11
+ - 控制字段显隐、只读、禁用、默认值与展示顺序
12
+ - 基于页面元素 `devid` 做精确的 DOM 调整(隐藏、移动、样式优化等)
13
+ - 增加消息提示、前端校验、轻量自动化处理
14
+ - 对不同页面类型配置不同脚本,实现同对象的差异化行为
15
+
16
+ ## 主要作用
17
+
18
+ - 让业务规则更贴近一线使用场景,而不是被标准页面能力限制
19
+ - 用小成本实现高频、细粒度的前端需求调整
20
+ - 缩短需求交付周期,降低“等待版本发版”带来的响应延迟
21
+
22
+ ## 为什么要用
23
+
24
+ - 标准配置无法覆盖所有业务细节,尤其是页面行为层面的动态需求
25
+ - 某些需求只在特定页面、特定角色、特定时机触发,客户端脚本更灵活
26
+ - 相比重型开发方式(完整自定义组件/页面),客户端脚本更轻量、迭代更快
27
+
28
+ ## 能解决哪些问题
29
+
30
+ - 保存前做字段联动与数据校验,减少脏数据入库
31
+ - 详情页按业务需要隐藏敏感信息或弱化无关字段
32
+ - 编辑页限制关键字段误操作(禁用或只读)
33
+ - 按流程阶段动态调整页面交互,减少用户操作路径和学习成本
34
+ - 对标准页面做局部增强,而不影响系统其他模块
35
+
36
+ ## 在什么情况下使用
37
+
38
+ - 需求是“前端页面行为增强”,且改动范围集中在单页或少量页面
39
+ - 需要快速上线验证,后续可能持续迭代优化
40
+ - 需要利用页面事件(如 `onLoad`、`beforeSave`、`onChange`)挂载业务逻辑
41
+ - 希望复用 CloudCC 现有页面能力,不希望引入过重改造
42
+
43
+ ## 典型业务场景
44
+
45
+ - 销售管理:编辑客户时按客户等级控制字段可编辑范围
46
+ - 服务管理:详情页按服务阶段动态显示关键指标字段
47
+ - 线索管理:保存前自动补齐或校验必填业务字段
48
+ - 渠道管理:列表页加载后增加提示与辅助标识,帮助快速筛选和处理
@@ -5,6 +5,7 @@ cc.pull = require("./pull")
5
5
  cc.get = require("./get")
6
6
  cc.pullList = require("./pullList")
7
7
  cc.detail = require("./detail")
8
+ cc.delete = require("./delete")
8
9
  cc.doc = require("./doc")
9
10
  function main(action, argvs) {
10
11
  cc[action](argvs)