cloudcc-cli 2.2.5 → 2.2.7

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 (130) hide show
  1. package/.cloudcc-cache.json +38 -0
  2. package/README.md +1435 -522
  3. package/bin/cc.js +7 -2
  4. package/bin/index.js +4 -0
  5. package/java/com/cloudcc/core/BaseException.java +100 -0
  6. package/java/com/cloudcc/core/BusiException.java +43 -0
  7. package/java/com/cloudcc/core/CCService.java +3 -1
  8. package/java/com/cloudcc/core/StringUtils.java +7 -0
  9. package/java/com/cloudcc/core/TimeUtil.java +33 -0
  10. package/java/com/cloudcc/core/UserInfo.java +9 -0
  11. package/package.json +7 -1
  12. package/pom.xml +1 -1
  13. package/skill/BACKEND_CODE.md +114 -0
  14. package/skill/CLI_CHEATSHEET.md +90 -0
  15. package/skill/INSTALL_AND_BOOTSTRAP.md +59 -0
  16. package/skill/OBJECTS_AND_FIELDS.md +120 -0
  17. package/skill/REQUIREMENTS_BREAKDOWN.md +98 -0
  18. package/skill/SKILL.md +33 -0
  19. package/skill/VUE_CUSTOM_COMPONENT.md +50 -0
  20. package/src/api/backend-sdk-java.md +427 -0
  21. package/src/api/ccdk-sdk.md +1039 -0
  22. package/src/application/create.js +114 -0
  23. package/src/application/get.js +13 -0
  24. package/src/application/index.js +8 -0
  25. package/src/classes/doc.js +486 -0
  26. package/src/classes/index.js +1 -0
  27. package/src/mcp/cliRunner.js +61 -0
  28. package/src/mcp/index.js +84 -12
  29. package/src/mcp/readme.md +6 -3
  30. package/src/mcp/tools/Application Creator/handler.js +78 -0
  31. package/src/mcp/tools/Approval/handler.js +34 -151
  32. package/src/mcp/tools/Class Creator/handler.js +18 -15
  33. package/src/mcp/tools/Class Detail Retriever/handler.js +8 -9
  34. package/src/mcp/tools/Class Editor Guide/handler.js +5 -19
  35. package/src/mcp/tools/Class List Retriever/handler.js +8 -3
  36. package/src/mcp/tools/Class Publisher/handler.js +7 -9
  37. package/src/mcp/tools/Class Puller/handler.js +6 -65
  38. package/src/mcp/tools/Client Script Detail Retriever/handler.js +12 -18
  39. package/src/mcp/tools/Client Script Editor Guide/handler.js +9 -605
  40. package/src/mcp/tools/Client Script List Retriever/handler.js +30 -33
  41. package/src/mcp/tools/Client Script Publisher/handler.js +12 -11
  42. package/src/mcp/tools/Client Script Puller/handler.js +23 -30
  43. package/src/mcp/tools/CloudCC Development Overview/handler.js +11 -5
  44. package/src/mcp/tools/Component Creator/handler.js +12 -11
  45. package/src/mcp/tools/Component Detail Retriever/handler.js +12 -9
  46. package/src/mcp/tools/Component Editor Guide/handler.js +5 -22
  47. package/src/mcp/tools/Component List Retriever/handler.js +21 -18
  48. package/src/mcp/tools/Component Publisher/handler.js +25 -3
  49. package/src/mcp/tools/Component Puller/handler.js +13 -16
  50. package/src/mcp/tools/Dev Environment Creator/handler.js +5 -72
  51. package/src/mcp/tools/Dev Environment Validator/handler.js +5 -66
  52. package/src/mcp/tools/Developer Key Setup Guide/handler.js +11 -20
  53. package/src/mcp/tools/JSP Migrator/handler.js +842 -0
  54. package/src/mcp/tools/Menu Creator/handler.js +86 -0
  55. package/src/mcp/tools/Object Creator/handler.js +14 -6
  56. package/src/mcp/tools/Object Fields Creator/handler.js +9 -10
  57. package/src/mcp/tools/Object Fields Retriever/handler.js +6 -3
  58. package/src/mcp/tools/Object List Retriever/handler.js +10 -7
  59. package/src/mcp/tools/Scheduled Class Creator/handler.js +12 -16
  60. package/src/mcp/tools/Scheduled Class Detail Retriever/handler.js +7 -9
  61. package/src/mcp/tools/Scheduled Class List Retriever/handler.js +21 -23
  62. package/src/mcp/tools/Scheduled Class Publisher/handler.js +7 -9
  63. package/src/mcp/tools/Scheduled Class Puller/handler.js +6 -70
  64. package/src/mcp/tools/Trigger Creator/handler.js +12 -20
  65. package/src/mcp/tools/Trigger Detail Retriever/handler.js +7 -9
  66. package/src/mcp/tools/Trigger Editor Guide/handler.js +10 -35
  67. package/src/mcp/tools/Trigger List Retriever/handler.js +12 -4
  68. package/src/mcp/tools/Trigger Publisher/handler.js +8 -11
  69. package/src/mcp/tools/Trigger Puller/handler.js +12 -17
  70. package/src/menu/common.js +16 -0
  71. package/src/menu/create-object.js +94 -0
  72. package/src/menu/create-page.js +108 -0
  73. package/src/menu/create-script.js +108 -0
  74. package/src/menu/create-site.js +108 -0
  75. package/src/menu/create.js +54 -0
  76. package/src/menu/index.js +7 -0
  77. package/src/plugin/doc.js +801 -0
  78. package/src/plugin/index.js +1 -0
  79. package/src/plugin/pull.js +3 -0
  80. package/src/project/doc.js +378 -0
  81. package/src/project/index.js +1 -0
  82. package/src/script/doc.js +259 -0
  83. package/src/script/index.js +1 -0
  84. package/src/timer/index.js +1 -0
  85. package/src/triggers/doc.js +342 -0
  86. package/src/triggers/index.js +5 -0
  87. package/target/classes/com/cloudcc/core/BaseException.class +0 -0
  88. package/target/classes/com/cloudcc/core/BusiException.class +0 -0
  89. package/target/classes/com/cloudcc/core/CCService.class +0 -0
  90. package/target/classes/com/cloudcc/core/StringUtils.class +0 -0
  91. package/target/classes/com/cloudcc/core/TimeUtil.class +0 -0
  92. package/target/classes/com/cloudcc/core/UserInfo.class +0 -0
  93. package/template/lib/ccopenapi-0.0.4.jar +0 -0
  94. package/test/application.cli.test.js +30 -0
  95. package/test/classes.cli.test.js +121 -0
  96. package/test/fields.cli.test.js +69 -0
  97. package/test/mcp.cli.test.js +21 -0
  98. package/test/menu.cli.test.js +41 -0
  99. package/test/object.cli.test.js +64 -0
  100. package/test/plugin.cli.test.js +109 -0
  101. package/test/script.cli.test.js +101 -0
  102. package/test/timer.cli.test.js +107 -0
  103. package/test/trigger.cli.test.js +146 -0
  104. package/.vscode/settings.json +0 -3
  105. package/bin/mcp-svc.js +0 -13
  106. package/src/mcp/MCP/345/234/272/346/231/257/346/250/241/346/213/237.md +0 -8
  107. package/src/mcp/index-sse-svc.js +0 -126
  108. package/src/mcp/index-streamable-svc.js +0 -180
  109. package/src/mcp/tools/Class Detail Retriever/prompt.js +0 -37
  110. package/src/mcp/tools/Class Editor Guide/prompt.js +0 -468
  111. package/src/mcp/tools/Class Publisher/prompt.js +0 -40
  112. package/src/mcp/tools/Class Puller/prompt.js +0 -49
  113. package/src/mcp/tools/Client Script Creator/handler.js +0 -179
  114. package/src/mcp/tools/CloudCC Development Overview/prompt.js +0 -870
  115. package/src/mcp/tools/Component Editor Guide/prompt.js +0 -519
  116. package/src/mcp/tools/Component Publisher/prompt.js +0 -659
  117. package/src/mcp/tools/Dev Environment Creator/prompt.js +0 -273
  118. package/src/mcp/tools/Dev Environment Validator/prompt.js +0 -193
  119. package/src/mcp/tools/Developer Key Setup Guide/prompt.js +0 -71
  120. package/src/mcp/tools/Object Fields Retriever/prompt.js +0 -10
  121. package/src/mcp/tools/Object List Retriever/prompt.js +0 -10
  122. package/src/mcp/tools/ccdk/fetcher.js +0 -18
  123. package/src/mcp/tools/ccdk/handler.js +0 -98
  124. package/src/mcp/tools/ccdk/prompt.js +0 -453
  125. package/target/ccopenapi-0.0.3-classes.jar +0 -0
  126. package/target/ccopenapi-0.0.3.jar +0 -0
  127. package/target/maven-archiver/pom.properties +0 -3
  128. package/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +0 -18
  129. package/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +0 -19
  130. package/template/lib/ccopenapi-0.0.3.jar +0 -0
@@ -0,0 +1,1039 @@
1
+ # CloudCC 前端 SDK(cloudcc-ccdk)使用指南
2
+
3
+ > 本文档参考 CloudCC 官方「前端 SDK
4
+ > 参考」整理而成:[前端SDK参考](https://help.cloudcc.cn/product03/sdkcan-kao/)。\
5
+ > 目标:指导在自定义组件、客户端脚本等前端场景中正确安装和使用
6
+ > `$CCDK`,并按模块梳理常用 API。
7
+
8
+ ---
9
+
10
+ ## 1. 安装与全局引入
11
+
12
+ ### 1.1 PC 端(Web)
13
+
14
+ 全局可通过 `window.$CCDK` 访问各模块:
15
+
16
+ ```js
17
+ window.$CCDK.CCMessage.showMessage("Hello CloudCC");
18
+ ```
19
+
20
+ ### 1.2 App 小程序端(DCloud)
21
+
22
+ - 通过 DCloud 插件市场安装 `h5-ccdk`
23
+ - 具体用法参考官方 `h5-ccdk` 文档(此处仅关注 Web 端 `cloudcc-ccdk`)
24
+
25
+ ---
26
+
27
+ ## 2. 模块概览
28
+
29
+ 常用模块按功能大致分为:
30
+
31
+ - **加载与网络**:`CCLoad`、`CCHttp`
32
+ - **后端类调用**:`CCCommon`
33
+ - **认证与用户**:`CCToken`、`CCUser`
34
+ - **对象数据与页面导航**:`CCDetail`、`CCList`、`CCPage`
35
+ - **事件与工具**:`CCBus`、`CCCrypto`、`CCUtils`
36
+ - **日志与消息**:`CCLog`、`CCMessage`
37
+ - **OpenAPI 封装**:`CCOpenAPI`
38
+ - 其他:`CCSide`、`CCApplication`、`CCCall`、`CCRenderer`、`CCLoading`、`CCI18n`
39
+
40
+
41
+ 以下按高频使用场景做简要说明与示例。
42
+
43
+ ---
44
+
45
+ ## 3. CCLoad:加载远程 JS 资源
46
+
47
+ ### 3.1 `loadJs(src): Promise`
48
+
49
+ 在 PC 端通过 JS 动态加载远程脚本:
50
+
51
+ ```js
52
+ const p = $CCDK.CCLoad.loadJs(
53
+ "https://cdn.bootcdn.net/ajax/libs/echarts/6.0.0/echarts.common.js",
54
+ );
55
+
56
+ p.then(() => {
57
+ // 脚本加载完成
58
+ }).catch(console.error);
59
+ ```
60
+
61
+ - 仅 PC 有效(H5/小程序/APP 不支持)
62
+
63
+ **参数说明:**
64
+
65
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
66
+ | ----- | ------------ | -------- | ------ | ------ |
67
+ | `src` | 远程 JS 地址 | `string` | — | 必填 |
68
+
69
+ ### 3.2 `createLoadJsComponent()`
70
+
71
+ 创建自定义标签用来加载 JS:
72
+
73
+ ```js
74
+ $CCDK.CCLoad.createLoadJsComponent();
75
+ // 在模板中:
76
+ // <cc-load-script src="js上线地址"></cc-load-script>
77
+ ```
78
+
79
+ `<cc-load-script>` 组件属性:
80
+
81
+ | 属性 | 说明 | 类型 | 可选值 | 默认值 |
82
+ | ----- | ------------ | -------- | ------ | ------ |
83
+ | `src` | 远程 JS 地址 | `string` | — | 必填 |
84
+
85
+ ---
86
+
87
+ ## 4. CCHttp:简单网络请求
88
+
89
+ > 基于 axios 封装,默认已带上必要头信息,适合在 CloudCC
90
+ > 场景下调用外部/内部接口。
91
+
92
+ 常用方法:`get` / `post` / `put` / `patch` / `postParams`,统一返回 Promise。
93
+
94
+ ```js
95
+ const data = { name: "zhangsan" };
96
+
97
+ $CCDK.CCHttp.post("/api/demo", data)
98
+ .then((res) => {
99
+ console.log("res", res);
100
+ })
101
+ .catch((error) => {
102
+ console.log("error", error);
103
+ });
104
+ ```
105
+
106
+ 以 `get(url, data, responseType, config)` 为例,参数说明如下:
107
+
108
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
109
+ | -------------- | ------------ | -------- | ------ | ------ |
110
+ | `url` | 接口请求地址 | `string` | — | `''` |
111
+ | `data` | 查询参数 | `object` | — | `{}` |
112
+ | `responseType` | 响应类型 | `string` | — | `''` |
113
+ | `config` | axios 配置 | `object` | — | `{}` |
114
+
115
+ 其他方法参数形态类似:
116
+
117
+ - `post(url, data, responseType, config)`
118
+ - `put(url, data)` / `patch(url, data)` / `postParams(url, data)`
119
+
120
+ ---
121
+
122
+ ## 5. CCCommon:访问 CloudCC 自定义类(接口)
123
+
124
+ ### `post(className, methodName, params, config): Promise`
125
+
126
+ 用于在前端调用 CloudCC 后端自定义类,避免自己拼接 URL:
127
+
128
+ ```js
129
+ const className = "test";
130
+ const methodName = "func1";
131
+ const params = [
132
+ { argType: "java.lang.String", argValue: "hello" },
133
+ { argType: "java.lang.String", argValue: "world" },
134
+ ];
135
+ const config = { timeout: 60000 };
136
+
137
+ $CCDK.CCCommon.post(className, methodName, params, config)
138
+ .then((res) => {
139
+ const data = res.data;
140
+ console.log(data);
141
+ })
142
+ .catch((error) => {
143
+ console.error(error);
144
+ });
145
+ ```
146
+
147
+ - 仅 PC 有效
148
+
149
+ **参数说明:**
150
+
151
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
152
+ | -------------------- | ------------------------ | -------- | ------ | ------ |
153
+ | `className` | 自定义类名 | `string` | — | `''` |
154
+ | `methodName` | 自定义类中的方法名 | `string` | — | `''` |
155
+ | `params` | 方法入参列表 | `Array` | — | `[]` |
156
+ | `params[*].argType` | Java 参数类型 | `string` | — | — |
157
+ | `params[*].argValue` | 参数值 | `any` | — | — |
158
+ | `config` | 请求配置(如 `timeout`) | `object` | — | `{}` |
159
+
160
+ ---
161
+
162
+ ## 6. CCToken:令牌管理
163
+
164
+ ### 6.1 `getToken(): string`
165
+
166
+ ```js
167
+ const token = $CCDK.CCToken.getToken();
168
+ ```
169
+
170
+ **返回值:**
171
+
172
+ | 返回值 | 说明 | 类型 |
173
+ | ------- | ---------------- | -------- |
174
+ | `token` | 当前用户登录令牌 | `string` |
175
+
176
+ ### 6.2 `setToken(token): void`
177
+
178
+ ```js
179
+ $CCDK.CCToken.setToken("your-token");
180
+ ```
181
+
182
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
183
+ | ------- | -------- | -------- | ------ | ------ |
184
+ | `token` | 新的令牌 | `string` | — | 必填 |
185
+
186
+ ### 6.3 `clearToken(): void`
187
+
188
+ ```js
189
+ $CCDK.CCToken.clearToken();
190
+ ```
191
+
192
+ PC/H5/小程序均可用(APP 暂不支持)。
193
+
194
+ ---
195
+
196
+ ## 7. CCUser:当前登录用户信息
197
+
198
+ ### 7.1 `getUserInfo(keyName): object`
199
+
200
+ ```js
201
+ const userInfo = $CCDK.CCUser.getUserInfo(); // 默认 key 为 cc_user_info
202
+ ```
203
+
204
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
205
+ | --------- | ------------------------ | -------- | ------ | ---------------- |
206
+ | `keyName` | 存储用户信息的键名,可选 | `string` | — | `"cc_user_info"` |
207
+
208
+ **返回值:**
209
+
210
+ | 返回值 | 说明 | 类型 |
211
+ | ---------- | ---------------- | -------- |
212
+ | `userInfo` | 当前登录用户信息 | `object` |
213
+
214
+ ### 7.2 `setUserInfo(userInfo, domain, keyName): void`
215
+
216
+ ```js
217
+ $CCDK.CCUser.setUserInfo({ name: "zhangsan" });
218
+ ```
219
+
220
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
221
+ | ---------- | ---------------- | -------- | ------ | ---------------- |
222
+ | `userInfo` | 用户详细信息对象 | `object` | — | `{}` |
223
+ | `domain` | 域名 | `string` | — | 当前所在域名 |
224
+ | `keyName` | 存储键名 | `string` | — | `"cc_user_info"` |
225
+
226
+ ---
227
+
228
+ ## 8. CCDetail:对象详情
229
+
230
+ > 操作标准详情页数据,常配合客户端脚本/自定义组件使用。
231
+
232
+ ### 8.1 `getDetail(apiname?, detailId?): object`
233
+
234
+ ```js
235
+ // 获取当前详情页全部数据
236
+ const detail = $CCDK.CCDetail.getDetail();
237
+
238
+ // 获取当前详情页某字段的值
239
+ const field = $CCDK.CCDetail.getDetail("name");
240
+ const value = field.value;
241
+ ```
242
+
243
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
244
+ | ---------- | --------------------------------------------- | -------- | ------ | ------- |
245
+ | `apiname` | 指定字段 API 名称,不传则返回整条详情 | `string` | — | `null` |
246
+ | `detailId` | 指定详情记录 ID,不传则使用最近访问的详情记录 | `string` | — | 最新 ID |
247
+
248
+ **返回值:**
249
+
250
+ - 不传 `apiname`:返回对象详情整体结构
251
+ - 传入 `apiname`:返回该字段的包装对象(常见属性如 `value`、`label` 等)
252
+
253
+ ### 8.2 `setDetail(detail): void`
254
+
255
+ ```js
256
+ $CCDK.CCDetail.setDetail({
257
+ id: "00120231...",
258
+ detail: [/* 详情数据 */],
259
+ });
260
+ ```
261
+
262
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
263
+ | --------------- | ------------ | -------- | ------ | ------ |
264
+ | `detail` | 详情数据对象 | `object` | — | 必填 |
265
+ | `detail.id` | 详情记录 ID | `string` | — | 必填 |
266
+ | `detail.detail` | 详情字段数组 | `Array` | — | 必填 |
267
+
268
+ ### 8.3 其他常用方法
269
+
270
+ - `getDetailId()` / `setDetailId(id)`:获取/设置当前详情页 ID
271
+ - `refreshRelatedList(ids)`:刷新相关列表
272
+ - `getRelatedSelected(recordId, detailId)`:获取相关列表选中记录
273
+
274
+ ---
275
+
276
+ ## 9. CCList:对象列表页(视图页)
277
+
278
+ ### 9.1 `getSelected(): { ids: string[] }`
279
+
280
+ ```js
281
+ const { ids } = $CCDK.CCList.getSelected();
282
+ ```
283
+
284
+ **返回值:**
285
+
286
+ | 字段 | 说明 | 类型 |
287
+ | ----- | ------------------------ | ---------- |
288
+ | `ids` | 当前列表页中选中 ID 集合 | `string[]` |
289
+
290
+ ### 9.2 `getViewId()`、`getViewInfo()`
291
+
292
+ ```js
293
+ const viewId = $CCDK.CCList.getViewId();
294
+ const viewInfo = $CCDK.CCList.getViewInfo();
295
+ // 包含 ids、viewId、prefix、objid、objectApi 等
296
+ ```
297
+
298
+ `getViewId()`:
299
+
300
+ | 返回值 | 说明 | 类型 |
301
+ | -------- | ----------- | -------- |
302
+ | `viewId` | 当前视图 ID | `string` |
303
+
304
+ `getViewInfo()` 常见字段:
305
+
306
+ | 字段 | 说明 | 类型 |
307
+ | ----------- | ---------------- | -------- |
308
+ | `ids` | 当前选中 ID 集合 | `Array` |
309
+ | `viewId` | 当前视图 ID | `string` |
310
+ | `prefix` | 对象前缀 | `string` |
311
+ | `objid` | 对象 ID | `string` |
312
+ | `objectApi` | 对象 API 名称 | `string` |
313
+
314
+ ---
315
+
316
+ ## 10. CCPage:打开/关闭 CloudCC 页面
317
+
318
+ > 在组件/脚本中以「官方方式」打开列表、详情、新建、编辑、自定义页面。
319
+
320
+ ### 10.1 打开列表页 `openListPage(obj): string`
321
+
322
+ ```js
323
+ const pageId = $CCDK.CCPage.openListPage({
324
+ menuId: "aaa-223",
325
+ prefix: "001",
326
+ viewId: "ace1111",
327
+ layoutType: "list", // list / Kanban / splitscreen
328
+ });
329
+ ```
330
+
331
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
332
+ | ------------ | -------- | -------- | --------------------------------------- | -------- |
333
+ | `menuId` | 菜单 ID | `string` | — | 必填 |
334
+ | `prefix` | 对象前缀 | `string` | — | 必填 |
335
+ | `viewId` | 视图 ID | `string` | — | 必填 |
336
+ | `layoutType` | 布局类型 | `string` | `"list"` / `"Kanban"` / `"splitscreen"` | `"list"` |
337
+
338
+ **返回值:**
339
+
340
+ | 返回值 | 说明 | 类型 |
341
+ | -------- | ---------------- | -------- |
342
+ | `pageId` | 打开页面唯一标识 | `string` |
343
+
344
+ ### 10.2 打开详情页 `openDetailPage(obj, id, options): string`
345
+
346
+ ```js
347
+ const pageId = $CCDK.CCPage.openDetailPage(
348
+ {
349
+ oprateType: "DETAIL",
350
+ objectName: "客户",
351
+ objId: "account",
352
+ objectApi: "Account",
353
+ prefix: "001",
354
+ },
355
+ "00120227805836AlIEL4",
356
+ {
357
+ openPlace: "menu2",
358
+ openMode: "_self",
359
+ },
360
+ );
361
+ ```
362
+
363
+ `obj` 参数:
364
+
365
+ | 字段 | 说明 | 类型 | 可选值 | 默认值 |
366
+ | ------------ | ------------------ | -------- | ------ | --------------------- |
367
+ | `oprateType` | 页面类型 | `string` | — | 必填(如 `"DETAIL"`) |
368
+ | `objectName` | 对象名称(展示用) | `string` | — | 必填 |
369
+ | `objId` | 对象 ID | `string` | — | 必填 |
370
+ | `objectApi` | 对象 API 名称 | `string` | — | 必填 |
371
+ | `prefix` | 对象前缀 | `string` | — | 必填 |
372
+
373
+ `id` 参数:
374
+
375
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
376
+ | ---- | ------- | -------- | ------ | ------ |
377
+ | `id` | 记录 ID | `string` | — | 必填 |
378
+
379
+ `options` 常用字段(节选):
380
+
381
+ | 字段 | 说明 | 类型 | 可选值 | 默认值 |
382
+ | ----------- | -------- | -------- | ------------------------------- | --------- |
383
+ | `pageId` | 页面 ID | `string` | — | 不传 |
384
+ | `openPlace` | 打开位置 | `string` | `"tab"` / `"menu1"` / `"menu2"` | `"menu1"` |
385
+ | `openMode` | 打开方式 | `string` | `"_self"` / `"_blank"` | `"_self"` |
386
+
387
+ ### 10.3 打开新建/编辑页
388
+
389
+ - `openCreatePage(obj, options)`
390
+ - `openEditPage(obj, id, options)`
391
+
392
+ 可通过 `defalutData` 预填字段值,适用于从组件/脚本跳转并带默认值的场景。
393
+
394
+ ### 10.4 打开自定义页面 `openCustomPage(obj, options)`
395
+
396
+ ```js
397
+ const pageId = $CCDK.CCPage.openCustomPage(
398
+ { pageApi: "sayhello", data: {} },
399
+ {
400
+ openPlace: "dialog",
401
+ openMode: "_blank",
402
+ title: "菜单标题",
403
+ height: "70vh",
404
+ width: "70vw",
405
+ },
406
+ );
407
+ ```
408
+
409
+ `obj` 参数:
410
+
411
+ | 字段 | 说明 | 类型 | 可选值 | 默认值 |
412
+ | --------- | -------------------- | -------- | ------ | ------ |
413
+ | `pageApi` | 自定义页面标识 | `string` | — | 必填 |
414
+ | `data` | 初始化数据(表单等) | `object` | — | `{}` |
415
+
416
+ `options` 常用字段(节选):
417
+
418
+ | 字段 | 说明 | 类型 | 可选值 | 默认值 |
419
+ | ------------- | ----------------------------------------- | --------- | -------------------------------------------------------------- | ----------------- |
420
+ | `pageId` | 页面 ID,相同 ID 时复用页面 | `string` | — | 不传 |
421
+ | `openPlace` | 打开位置 | `string` | `"dialog"` / `"tab"` / `"floatDialog"` / `"menu1"` / `"menu2"` | `"tab"` |
422
+ | `openMode` | 打开方式 | `string` | `"_self"` / `"_blank"` | `"_blank"` |
423
+ | `title` | 弹窗标题或菜单名称 | `string` | — | `''` |
424
+ | `isIframe` | 是否以 iframe 渲染(用于缓存自定义页面) | `boolean` | `true` / `false` | `false` |
425
+ | `isShowClose` | 是否显示菜单关闭按钮 | `boolean` | `true` / `false` | `true` |
426
+ | `tabAction` | 一级/二级菜单下拉操作项配置 | `Array` | — | `[]` |
427
+ | `width` | 宽度,支持 `px` / `%` / `vw` | `string` | — | 自动 |
428
+ | `height` | 高度,支持 `px` / `vh` | `string` | — | 自动 |
429
+ | `left` | 距离屏幕左侧距离 | `string` | — | 自动 |
430
+ | `top` | 距离屏幕顶部距离 | `string` | — | 自动 |
431
+ | `right` | 距离屏幕右侧距离 | `string` | — | 自动 |
432
+ | `bottom` | 距离屏幕底部距离 | `string` | — | 自动 |
433
+ | `isShowMenu` | 是否显示菜单(menu1/menu2 下默认 `true`) | `boolean` | `true` / `false` | 视 openPlace 而定 |
434
+
435
+ **返回值:**
436
+
437
+ | 返回值 | 说明 | 类型 |
438
+ | -------- | ------------------------ | -------- |
439
+ | `pageId` | 打开的自定义页面唯一标识 | `string` |
440
+
441
+ ### 10.5 其他
442
+
443
+ - `reOpenPage(pageId, options)`:通过 pageId 重新打开/刷新页面
444
+ - `searchPage(pageId)`:查询是否存在指定页面
445
+ - `getCurrentPage()`:获取当前页面菜单数据
446
+ - `close(pageId?)`、`refresh()`:关闭/刷新页面
447
+
448
+ ---
449
+
450
+ ## 11. CCBus:前端事件总线
451
+
452
+ ### 11.1 `$emit(event, ...args)`
453
+
454
+ ```js
455
+ $CCDK.CCBus.$emit("myevent", { foo: 1 });
456
+ ```
457
+
458
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
459
+ | --------- | -------------------- | -------- | ------ | ------ |
460
+ | `event` | 事件名称(唯一标识) | `string` | — | 必填 |
461
+ | `...args` | 事件参数 | `any` | — | — |
462
+
463
+ ### 11.2 `$on(event, callback)`
464
+
465
+ ```js
466
+ $CCDK.CCBus.$on("myevent", (payload) => {
467
+ console.log("收到事件", payload);
468
+ });
469
+ ```
470
+
471
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
472
+ | ---------- | -------- | ---------- | ------ | ------ |
473
+ | `event` | 事件名称 | `string` | — | 必填 |
474
+ | `callback` | 回调函数 | `function` | — | 必填 |
475
+
476
+ ### 11.3 `$off(event)`
477
+
478
+ ```js
479
+ $CCDK.CCBus.$off("myevent");
480
+ ```
481
+
482
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
483
+ | ------- | -------- | -------- | ------ | ------ |
484
+ | `event` | 事件名称 | `string` | — | 必填 |
485
+
486
+ ---
487
+
488
+ ## 12. CCMessage:前端消息提示
489
+
490
+ ### 12.1 `showMessage(text, type, duration, showClose, center)`
491
+
492
+ ```js
493
+ $CCDK.CCMessage.showMessage("操作成功", "success", 2000);
494
+ ```
495
+
496
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
497
+ | ----------- | ------------------------------------ | --------- | ------------------------------------------------ | -------- |
498
+ | `text` | 提示文案 | `string` | — | 必填 |
499
+ | `type` | 消息类型 | `string` | `"success"` / `"warning"` / `"info"` / `"error"` | `"info"` |
500
+ | `duration` | 显示时间(毫秒),`0` 表示不自动关闭 | `number` | — | `3000` |
501
+ | `showClose` | 是否显示关闭按钮 | `boolean` | — | `false` |
502
+ | `center` | 文本是否居中 | `boolean` | — | `false` |
503
+
504
+ ### 12.2 `showConfirm(text, title, options, confirm, reject)`
505
+
506
+ ```js
507
+ $CCDK.CCMessage.showConfirm(
508
+ "确定要执行此操作吗?",
509
+ "确认提示",
510
+ { type: "warning" },
511
+ () => {/* 确认回调 */},
512
+ () => {/* 取消回调 */},
513
+ );
514
+ ```
515
+
516
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
517
+ | --------- | --------------------- | ------------------- | ------ | -------- |
518
+ | `text` | 消息正文 | `string` \| `VNode` | — | 必填 |
519
+ | `title` | 标题 | `string` | — | `"提示"` |
520
+ | `options` | 其他配置(见下表) | `object` | — | `{}` |
521
+ | `confirm` | 点击确定时的回调 | `function` | — | 必填 |
522
+ | `reject` | 点击取消/关闭时的回调 | `function` | — | 可选 |
523
+
524
+ `options` 常见字段:
525
+
526
+ | 字段 | 说明 | 类型 | 可选值 | 默认值 |
527
+ | ------------------- | ---------------------- | --------- | ------------------------------------------------ | -------------------------- |
528
+ | `type` | 消息类型 | `string` | `"success"` / `"info"` / `"warning"` / `"error"` | — |
529
+ | `showClose` | 是否显示右上角关闭按钮 | `boolean` | — | `true` |
530
+ | `showCancelButton` | 是否显示取消按钮 | `boolean` | — | `true`(confirm/prompt) |
531
+ | `showConfirmButton` | 是否显示确定按钮 | `boolean` | — | `true` |
532
+ | `cancelButtonText` | 取消按钮文本 | `string` | — | `"取消"` |
533
+ | `confirmButtonText` | 确定按钮文本 | `string` | — | `"确定"` |
534
+ | `closeOnClickModal` | 点击遮罩是否关闭 | `boolean` | — | `true`(alert 为 `false`) |
535
+ | `center` | 是否居中布局 | `boolean` | — | `false` |
536
+ | `roundButton` | 是否圆角按钮 | `boolean` | — | `false` |
537
+
538
+ ### 12.3 `showNotification(options)`
539
+
540
+ ```js
541
+ $CCDK.CCMessage.showNotification({
542
+ title: "提示",
543
+ message: "这是一条不会自动关闭的消息",
544
+ duration: 0,
545
+ });
546
+ ```
547
+
548
+ `options` 常见字段:
549
+
550
+ | 字段 | 说明 | 类型 | 可选值 | 默认值 |
551
+ | -------------------------- | ------------------------------------ | ------------------- | ----------------------------------------------------------------- | ------------- |
552
+ | `title` | 标题 | `string` | — | `''` |
553
+ | `message` | 内容 | `string` \| `VNode` | — | `''` |
554
+ | `dangerouslyUseHTMLString` | 是否将 message 作为 HTML 处理 | `boolean` | — | `false` |
555
+ | `type` | 类型 | `string` | `"success"` / `"warning"` / `"info"` / `"error"` | — |
556
+ | `duration` | 显示时间(毫秒),`0` 表示不自动关闭 | `number` | — | `4500` |
557
+ | `position` | 弹出位置 | `string` | `"top-right"` / `"top-left"` / `"bottom-right"` / `"bottom-left"` | `"top-right"` |
558
+ | `showClose` | 是否显示关闭按钮 | `boolean` | — | `true` |
559
+ | `onClose` | 关闭时回调 | `function` | — | — |
560
+ | `onClick` | 点击通知时回调 | `function` | — | — |
561
+
562
+ ---
563
+
564
+ ## 13. CCLog:日志上报
565
+
566
+ ### 13.1 `reportInfoLog(logInfo)`
567
+
568
+ ```js
569
+ const logInfo = {
570
+ infoType: "debug",
571
+ serviceName: "my app",
572
+ infoMessage: "描述信息",
573
+ };
574
+
575
+ window.$CCDK.CCLog.reportInfoLog(logInfo);
576
+ ```
577
+
578
+ `logInfo` 字段:
579
+
580
+ | 字段 | 说明 | 类型 | 可选值 | 默认值 |
581
+ | ------------- | -------- | -------- | -------------------- | -------- |
582
+ | `infoType` | 日志类型 | `string` | `"info"` / `"debug"` | `"info"` |
583
+ | `serviceName` | 服务名称 | `string` | — | 项目名称 |
584
+ | `infoMessage` | 描述信息 | `string` | — | `""` |
585
+ | `remark` | 备注 | `string` | — | `""` |
586
+
587
+ ### 13.2 `reportErrorLog(logInfo)`
588
+
589
+ ```js
590
+ const logInfo = {
591
+ serviceName: "my app",
592
+ errorMessage: "错误描述信息",
593
+ printStackTraceInfo: "堆栈信息",
594
+ };
595
+
596
+ window.$CCDK.CCLog.reportErrorLog(logInfo);
597
+ ```
598
+
599
+ `logInfo` 字段:
600
+
601
+ | 字段 | 说明 | 类型 | 可选值 | 默认值 |
602
+ | --------------------- | -------- | -------- | ------ | -------- |
603
+ | `serviceName` | 服务名称 | `string` | — | 项目名称 |
604
+ | `errorMessage` | 错误描述 | `string` | — | `""` |
605
+ | `printStackTraceInfo` | 堆栈信息 | `string` | — | `""` |
606
+ | `requestUrl` | 请求地址 | `string` | — | `""` |
607
+ | `remark` | 备注 | `string` | — | `""` |
608
+
609
+ ---
610
+
611
+ ## 14. CCOpenAPI:OpenAPI 封装(概览)
612
+
613
+ > 通过 CCDK 在前端直接调用 CloudCC OpenAPI,支持普通查询、分页查询、自定义 SQL
614
+ > 等。
615
+
616
+ 典型方法:
617
+
618
+ - `cquery` / `cqueryWithRoleRight`
619
+ - `pageQuery` / `pageQueryWithRoleRight`
620
+ - `getQueryPermisson`
621
+ - `cqlQueryWithLogInfo` / `cqlQueryWithStatic`
622
+
623
+ 示例(普通查询):
624
+
625
+ ```js
626
+ const res = await window.$CCDK.CCOpenAPI.cquery(
627
+ clientId,
628
+ secretKey,
629
+ "Contact",
630
+ "name='13213'",
631
+ "name,createdate,createbyid",
632
+ "false",
633
+ {},
634
+ );
635
+
636
+ if (res.result) {
637
+ console.log(res.data);
638
+ }
639
+ ```
640
+
641
+ ### 14.1 `cquery(clientId, secretKey, objectApiName, expressions, fields, isAddDelete, options)`
642
+
643
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
644
+ | --------------- | ------------------------------------------ | -------- | ------ | --------- |
645
+ | `clientId` | 客户端 ID | `string` | — | 必填 |
646
+ | `secretKey` | 客户端密钥 | `string` | — | 必填 |
647
+ | `objectApiName` | 对象 API 名称,如 `Contact`、`Account` | `string` | — | 必填 |
648
+ | `expressions` | 查询条件,如 `name='13213'` | `string` | — | `''` |
649
+ | `fields` | 返回字段列表,逗号分隔 | `string` | — | `''` |
650
+ | `isAddDelete` | 是否包含已删除数据(`"true"` / `"false"`) | `string` | — | `"false"` |
651
+ | `options` | 额外配置(如 `baseUrl`、`timeout`) | `object` | — | `{}` |
652
+
653
+ **返回值(通用结构):**
654
+
655
+ | 字段 | 说明 | 类型 |
656
+ | ------------ | ------------------------- | --------- |
657
+ | `result` | 是否成功 | `boolean` |
658
+ | `returnInfo` | 返回信息/错误说明 | `string` |
659
+ | `returnCode` | 返回编码(如 `"1"` 成功) | `string` |
660
+ | `data` | 业务数据(数组或对象) | `any` |
661
+
662
+ ### 14.2 `cqueryWithRoleRight(clientId, secretKey, objectApiName, expressions, isAddDelete, options)`
663
+
664
+ 与 `cquery` 相同,但会按照当前用户权限过滤:
665
+
666
+ | 参数 | 说明 | 类型 | 默认值 |
667
+ | --------------- | ------------------ | -------- | --------- |
668
+ | `clientId` | 客户端 ID | `string` | 必填 |
669
+ | `secretKey` | 客户端密钥 | `string` | 必填 |
670
+ | `objectApiName` | 对象 API 名称 | `string` | 必填 |
671
+ | `expressions` | 查询条件 | `string` | `''` |
672
+ | `isAddDelete` | 是否包含已删除数据 | `string` | `"false"` |
673
+ | `options` | 额外配置 | `object` | `{}` |
674
+
675
+ ### 14.3 `pageQuery(clientId, secretKey, objectApiName, expressions, fields, pageNUM, pageSize, options)`
676
+
677
+ | 参数 | 说明 | 类型 | 默认值 |
678
+ | --------------- | --------------------- | -------- | ------ |
679
+ | `clientId` | 客户端 ID | `string` | 必填 |
680
+ | `secretKey` | 客户端密钥 | `string` | 必填 |
681
+ | `objectApiName` | 对象 API 名称 | `string` | 必填 |
682
+ | `expressions` | 查询条件 | `string` | `''` |
683
+ | `fields` | 返回字段列表 | `string` | `''` |
684
+ | `pageNUM` | 当前页码(从 1 开始) | `number` | 必填 |
685
+ | `pageSize` | 每页条数 | `number` | 必填 |
686
+ | `options` | 额外配置 | `object` | `{}` |
687
+
688
+ 附加返回字段(分页):
689
+
690
+ | 字段 | 说明 | 类型 |
691
+ | ------------ | ------------ | --------- |
692
+ | `pageNUM` | 当前页码 | `number` |
693
+ | `pageSize` | 每页条数 | `number` |
694
+ | `totalCount` | 总记录数 | `number` |
695
+ | `pageCount` | 总页数 | `number` |
696
+ | `hasPre` | 是否有上一页 | `boolean` |
697
+ | `hasNext` | 是否有下一页 | `boolean` |
698
+
699
+ ### 14.4 其他 OpenAPI 方法(简要参数说明)
700
+
701
+ - `pageQueryWithRoleRight(clientId, secretKey, objectApiName, expressions, pageNUM, pageSize, options)`
702
+ - 同 `pageQuery`,但增加权限过滤;`options` 可包含 `fields`。
703
+ - `getQueryPermisson(clientId, secretKey, objectApiName, options)`
704
+ - `objectApiName` 可传多个对象(逗号分隔),返回每个对象的查询权限与
705
+ `shareSql`。
706
+ - `cqlQueryWithLogInfo(clientId, secretKey, objectApiName, expressions, options)`
707
+ - `expressions` 为 CQL / SQL 语句,受权限配置控制。
708
+ - `cqlQueryWithStatic(clientId, secretKey, objectApiName, expressions, nextRecordQueryId, options)`
709
+ - 支持游标式分页,`nextRecordQueryId` 为上一次调用返回的游标 ID,首次为
710
+ `undefined`。
711
+
712
+ ---
713
+
714
+ ## 15. 其他常用工具与模块(详细)
715
+
716
+ ### 15.1 CCUtils:通用工具
717
+
718
+ #### 15.1.1 获取域名 `getDomain()`
719
+
720
+ ```js
721
+ const domain = $CCDK.CCUtils.getDomain();
722
+ // 示例:返回 xx.com / xx.cn / xx.com.cn / xx.net.cn 等
723
+ ```
724
+
725
+ #### 15.1.2 获取当前页面类型 `getCurrentPageType()`
726
+
727
+ ```js
728
+ const pageType = $CCDK.CCUtils.getCurrentPageType();
729
+ // "view":视图页(列表页)
730
+ // "detail":详情页
731
+ ```
732
+
733
+ #### 15.1.3 表单 ID 相关(新建/编辑页)
734
+
735
+ 在新建/编辑页面的客户端脚本中,`obj` 参数通常包含 `formId`,也可以通过 CCUtils
736
+ 获取:
737
+
738
+ ```js
739
+ // 获取最后一次打开的表单 formId
740
+ const formId = $CCDK.CCUtils.getFormId();
741
+
742
+ // 获取当前会话内所有打开表单的 formId 集合
743
+ const allFormIds = $CCDK.CCUtils.getFormId({ type: "all" });
744
+ ```
745
+
746
+ #### 15.1.4 设置主表单字段值 `setFormFieldValue(option)`
747
+
748
+ > 在新建/编辑页上给主对象字段设置默认值或动态赋值,需结合客户端脚本(onLoad/onChange)。
749
+
750
+ ```js
751
+ // 客户端脚本中 obj.formId 由平台注入
752
+ const formId = obj.formId;
753
+ const option = {
754
+ formId,
755
+ list: [
756
+ {
757
+ fieldKey: "name", // 字段 apiname
758
+ value: "测试客户", // 字段值
759
+ },
760
+ {
761
+ fieldKey: "khmc__c",
762
+ value: "0013423dsdsds",
763
+ valueName: "客户名称", // 查找字段需要 label
764
+ },
765
+ ],
766
+ };
767
+
768
+ $CCDK.CCUtils.setFormFieldValue(option);
769
+ ```
770
+
771
+ #### 15.1.5 获取主表单字段值 `getFormFieldValue(option)`
772
+
773
+ ```js
774
+ const formId = obj.formId;
775
+ const option = {
776
+ formId,
777
+ list: [
778
+ { fieldKey: "name" },
779
+ { fieldKey: "phone" },
780
+ ],
781
+ };
782
+
783
+ const result = $CCDK.CCUtils.getFormFieldValue(option);
784
+ // 返回值包含各字段当前采集值
785
+ ```
786
+
787
+ #### 15.1.6 获取主表单字段详细信息 `getFormFieldInfo(option)`
788
+
789
+ ```js
790
+ const formId = obj.formId;
791
+ const option = {
792
+ formId,
793
+ list: [{ fieldKey: "name" }],
794
+ };
795
+
796
+ const info = $CCDK.CCUtils.getFormFieldInfo(option);
797
+ // info 中包含字段类型、label、当前值等详细信息
798
+ ```
799
+
800
+ #### 15.1.7 从记录(相关列表)数据相关
801
+
802
+ 在从记录新增行(addLine 型客户端脚本)中,`obj` 通常包含 `formId`、`relatedId`:
803
+
804
+ ```js
805
+ const { formId, relatedId } = obj;
806
+
807
+ // 获取从记录所有数据
808
+ $CCDK.CCUtils.getRelatedInfo({ formId });
809
+
810
+ // 获取指定从记录的数据
811
+ $CCDK.CCUtils.getRelatedValue({ formId, relatedId });
812
+
813
+ // 设置从记录字段值
814
+ $CCDK.CCUtils.setRelatedValue({
815
+ formId,
816
+ relatedId,
817
+ updateType: "lastLine", // "all" / "lastLine" / 指定索引
818
+ list: [
819
+ {
820
+ fieldKey: "amount__c",
821
+ value: 100,
822
+ },
823
+ ],
824
+ });
825
+ ```
826
+
827
+ #### 15.1.8 浏览器通知 `notify(options)`
828
+
829
+ ```js
830
+ // 最简单用法
831
+ $CCDK.CCUtils.notify({ title: "提示" });
832
+
833
+ // 标题 + 正文
834
+ $CCDK.CCUtils.notify({
835
+ title: "新消息",
836
+ body: "您有一条待办需要处理",
837
+ });
838
+
839
+ // 标题 + 正文 + 图标
840
+ $CCDK.CCUtils.notify({
841
+ title: "系统通知",
842
+ body: "任务已完成",
843
+ icon: "/favicon.ico",
844
+ });
845
+ ```
846
+
847
+ #### 15.1.9 标签标题闪烁 `blinkTitle(options)`
848
+
849
+ ```js
850
+ // 默认提示
851
+ $CCDK.CCUtils.blinkTitle();
852
+
853
+ // 自定义文案与间隔
854
+ $CCDK.CCUtils.blinkTitle({
855
+ message: "你有一条新消息",
856
+ interval: 800,
857
+ });
858
+ ```
859
+
860
+ ---
861
+
862
+ ### 15.2 CCCrypto:加解密
863
+
864
+ > 基于 AES(含 key、iv)的简单加解密工具,仅 PC 可用。
865
+
866
+ #### 15.2.1 加密 `encrypt(data, key, iv)`
867
+
868
+ ```js
869
+ const cipher = $CCDK.CCCrypto.encrypt(
870
+ { name: "zhangsan" },
871
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", // 32 字节密钥
872
+ 1, // 偏移量
873
+ );
874
+ ```
875
+
876
+ #### 15.2.2 解密 `decrypt(data, key, iv)`
877
+
878
+ ```js
879
+ const data = "rgTxYdmUGNelPbfoChXe5eTQqNDPxTNv..."; // 省略长密文
880
+ const result = $CCDK.CCCrypto.decrypt(
881
+ data,
882
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
883
+ 1,
884
+ );
885
+ ```
886
+
887
+ ---
888
+
889
+ ### 15.3 CCSide:侧边工具栏
890
+
891
+ > 在 PC 端打开一个挂载自定义页面的侧边栏,如「AI 助手」「工具面板」等。
892
+
893
+ #### 15.3.1 初始化 `init(options)`
894
+
895
+ ```js
896
+ $CCDK.CCSide.init({
897
+ width: "300px",
898
+ pageApi: "dht", // 对应自定义页面 API
899
+ });
900
+ ```
901
+
902
+ #### 15.3.2 打开/关闭
903
+
904
+ ```js
905
+ $CCDK.CCSide.open();
906
+ $CCDK.CCSide.close();
907
+ ```
908
+
909
+ ---
910
+
911
+ ### 15.4 CCApplication:应用信息
912
+
913
+ #### 15.4.1 获取当前应用 `getApplicaton()`
914
+
915
+ ```js
916
+ const app = $CCDK.CCApplication.getApplicaton();
917
+ // app.id:应用 id
918
+ // app.name:应用名称
919
+ // app.navigationStyle:'0' 控制台样式,'1' 标准样式
920
+ ```
921
+
922
+ > `open(appId)` 处于开发中,用于在前端打开指定应用。
923
+
924
+ ---
925
+
926
+ ### 15.5 CCCall:电话集成
927
+
928
+ > 仅 PC 端,需与 CloudCC 后台配置的电话服务商配合使用。
929
+
930
+ #### 15.5.1 初始化电话功能 `init(id, callClient)`
931
+
932
+ ```js
933
+ const callClient = {
934
+ // 点击平台手机号、电话图标时平台会回调此方法
935
+ call: (options) => {
936
+ const number = options.number; // 要外呼的号码
937
+ // 调用第三方话务 SDK 进行外呼
938
+ },
939
+ };
940
+
941
+ const client = $CCDK.CCCall.init("abc", callClient);
942
+ // "abc" 为电话服务商唯一标识,从 CloudCC 后台「沟通渠道 → 电话」配置中获取
943
+ ```
944
+
945
+ #### 15.5.2 外呼与呼叫面板
946
+
947
+ ```js
948
+ // 直接发起外呼
949
+ $CCDK.CCCall.call("abc", { number: "13800000000" });
950
+
951
+ // 打开电话面板
952
+ $CCDK.CCCall.openCallPanel("abc", { number: "13800000000" });
953
+ ```
954
+
955
+ ---
956
+
957
+ ### 15.6 CCI18n:多语言
958
+
959
+ > 在组件/页面中使用 CCDK 自带的 i18n 能力维护多语言词条。
960
+
961
+ #### 15.6.1 添加词条 `addMessages(langType, message)`
962
+
963
+ ```js
964
+ // 中文
965
+ $CCDK.CCI18n.addMessages($CCDK.CCI18n.LocalEnum.ZH, {
966
+ hello: "你好",
967
+ test: "测试",
968
+ });
969
+
970
+ // 英文
971
+ $CCDK.CCI18n.addMessages($CCDK.CCI18n.LocalEnum.EN, {
972
+ hello: "hello",
973
+ test: "test",
974
+ });
975
+ ```
976
+
977
+ #### 15.6.2 切换语言 `setLocale(langType)`
978
+
979
+ ```js
980
+ $CCDK.CCI18n.setLocale($CCDK.CCI18n.LocalEnum.ZH); // 显示中文
981
+ $CCDK.CCI18n.setLocale($CCDK.CCI18n.LocalEnum.EN); // 显示英文
982
+ ```
983
+
984
+ #### 15.6.3 获取词条 `t(key)`
985
+
986
+ ```js
987
+ // 在 JS 中
988
+ const label = $CCDK.CCI18n.t("hello");
989
+
990
+ // 在 Vue 计算属性中
991
+ computed: {
992
+ labelTest() {
993
+ return window.$CCDK.CCI18n.t("test");
994
+ }
995
+ }
996
+ ```
997
+
998
+ ---
999
+
1000
+ ### 15.7 CCLoading:加载遮罩
1001
+
1002
+ > 基于 ElementUI 的 Loading 服务,适合在组件/页面中显示「加载中」状态。
1003
+
1004
+ #### 15.7.1 开启 Loading
1005
+
1006
+ ```js
1007
+ const loadingInstance = Vue.prototype.$loading({
1008
+ target: document.body, // 或指定 DOM
1009
+ lock: true,
1010
+ text: "加载中...",
1011
+ background: "rgba(0, 0, 0, 0.3)",
1012
+ });
1013
+ ```
1014
+
1015
+ 常用配置:
1016
+
1017
+ - `target`:需要覆盖的 DOM 节点(DOM 对象或选择器字符串)
1018
+ - `fullscreen`:是否全屏
1019
+ - `lock`:是否锁定 body 滚动
1020
+ - `text`:加载文字
1021
+ - `background`:遮罩背景色
1022
+
1023
+ #### 15.7.2 关闭 Loading
1024
+
1025
+ ```js
1026
+ loadingInstance.close();
1027
+ ```
1028
+
1029
+ ---
1030
+
1031
+ ## 16. CCDK 使用 Checklist
1032
+
1033
+ - [ ] 已在入口文件正确引入 `cloudcc-ccdk/lib/ccdk.min.js`
1034
+ - [ ] 前端访问 CloudCC 后端类时统一使用 `CCCommon.post`,不手工拼接 URL
1035
+ - [ ] 在对象页面/路由跳转中优先使用 `CCPage`,避免直接硬编码链接
1036
+ - [ ] 需要访问详情/列表数据时优先使用 `CCDetail` / `CCList`
1037
+ - [ ] 日志与错误统一通过 `CCLog` 上报,消息提示通过 `CCMessage` 统一管理
1038
+ - [ ] 客户端脚本与组件中合理使用 `$CCDK`,并结合 `custom-component-dev.md` 与
1039
+ `custom-client-script.md` 中的最佳实践