cloudcc-cli 2.3.4 → 2.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +22 -1
- package/.cursor/skills/cloudcc-cli-dev/SKILL.md +175 -0
- package/.cursor/skills/cloudcc-dev-skill/SKILL.md +71 -0
- package/README.md +81 -6
- package/bin/cc.js +106 -28
- package/bin/index.js +54 -55
- package/mcp/cliRunner.js +11 -4
- package/mcp/index.js +12 -2
- package/mcp/tools/Application Creator/handler.js +1 -1
- package/mcp/tools/Approval/handler.js +3 -3
- package/mcp/tools/Class Creator/handler.js +2 -2
- package/mcp/tools/Class Detail Retriever/handler.js +1 -1
- package/mcp/tools/Class Editor Guide/handler.js +1 -1
- package/mcp/tools/Class List Retriever/handler.js +1 -1
- package/mcp/tools/Class Publisher/handler.js +1 -1
- package/mcp/tools/Class Puller/handler.js +1 -1
- package/mcp/tools/Client Script Detail Retriever/handler.js +1 -1
- package/mcp/tools/Client Script Editor Guide/handler.js +1 -1
- package/mcp/tools/Client Script List Retriever/handler.js +1 -1
- package/mcp/tools/Client Script Publisher/handler.js +1 -1
- package/mcp/tools/Client Script Puller/handler.js +2 -2
- package/mcp/tools/CloudCC Development Overview/handler.js +2 -2
- package/mcp/tools/Component Creator/handler.js +1 -1
- package/mcp/tools/Component Detail Retriever/handler.js +1 -1
- package/mcp/tools/Component Editor Guide/handler.js +1 -1
- package/mcp/tools/Component List Retriever/handler.js +1 -1
- package/mcp/tools/Component Publisher/handler.js +2 -2
- package/mcp/tools/Component Puller/handler.js +1 -1
- package/mcp/tools/Dev Environment Creator/handler.js +1 -1
- package/mcp/tools/Dev Environment Validator/handler.js +1 -1
- package/mcp/tools/Developer Key Setup Guide/handler.js +1 -1
- package/mcp/tools/JSP Migrator/handler.js +46 -0
- package/mcp/tools/Menu Creator/handler.js +1 -1
- package/mcp/tools/Object Creator/handler.js +2 -2
- package/mcp/tools/Object Fields Creator/handler.js +1 -1
- package/mcp/tools/Object Fields Retriever/handler.js +1 -1
- package/mcp/tools/Object List Retriever/handler.js +1 -1
- package/mcp/tools/Scheduled Class Creator/handler.js +1 -1
- package/mcp/tools/Scheduled Class Detail Retriever/handler.js +1 -1
- package/mcp/tools/Scheduled Class List Retriever/handler.js +1 -1
- package/mcp/tools/Scheduled Class Publisher/handler.js +1 -1
- package/mcp/tools/Scheduled Class Puller/handler.js +1 -1
- package/mcp/tools/Trigger Creator/handler.js +1 -1
- package/mcp/tools/Trigger Detail Retriever/handler.js +1 -1
- package/mcp/tools/Trigger Editor Guide/handler.js +1 -1
- package/mcp/tools/Trigger List Retriever/handler.js +1 -1
- package/mcp/tools/Trigger Publisher/handler.js +1 -1
- package/mcp/tools/Trigger Puller/handler.js +1 -1
- package/package.json +3 -3
- package/src/application/create.js +2 -2
- package/src/application/delete.js +2 -2
- package/src/application/doc.js +2 -2
- package/src/application/docs/devguide.md +25 -25
- package/src/application/docs/introduction.md +2 -2
- package/src/button/create.js +169 -0
- package/src/button/delete.js +35 -0
- package/src/button/doc.js +36 -0
- package/src/button/docs/devguide.md +133 -0
- package/src/button/docs/introduction.md +60 -0
- package/src/button/get.js +60 -0
- package/src/button/index.js +20 -0
- package/src/classes/create.js +1 -1
- package/src/classes/delete.js +1 -1
- package/src/classes/detail.js +1 -1
- package/src/classes/doc.js +2 -2
- package/src/classes/docs/devguide.md +21 -21
- package/src/classes/docs/introduction.md +0 -20
- package/src/classes/get.js +1 -1
- package/src/classes/publish.js +1 -1
- package/src/classes/pull.js +1 -1
- package/src/classes/pullList.js +1 -1
- package/src/config/doc.js +2 -2
- package/src/config/docs/devguide.md +15 -15
- package/src/customPage/create.js +2 -2
- package/src/customPage/delete.js +2 -2
- package/src/customPage/doc.js +2 -2
- package/src/customPage/docs/devguide.md +27 -27
- package/src/customPage/get.js +1 -1
- package/src/customSetting/create.js +1 -1
- package/src/customSetting/delete.js +1 -1
- package/src/customSetting/deleteCustomSettingField.js +1 -1
- package/src/customSetting/detail.js +1 -1
- package/src/customSetting/docs/devguide.md +9 -9
- package/src/customSetting/editCustomSettingField.js +1 -1
- package/src/customSetting/get.js +1 -1
- package/src/customSetting/modify.js +1 -1
- package/src/customSetting/saveCustomSettingField.js +1 -1
- package/src/fields/delete.js +2 -2
- package/src/fields/docs/devguide.md +14 -14
- package/src/fields/docs/introduction.md +3 -3
- package/src/globalSelectList/create.js +1 -1
- package/src/globalSelectList/delete.js +1 -1
- package/src/globalSelectList/detail.js +1 -1
- package/src/globalSelectList/doc.js +2 -2
- package/src/globalSelectList/docs/devguide.md +7 -7
- package/src/globalSelectList/get.js +1 -1
- package/src/identityProvider/create.js +78 -0
- package/src/identityProvider/delete.js +61 -0
- package/src/identityProvider/doc.js +46 -0
- package/src/identityProvider/docs/devguide.md +107 -0
- package/src/identityProvider/docs/introduction.md +31 -0
- package/src/identityProvider/download.js +105 -0
- package/src/identityProvider/get.js +70 -0
- package/src/identityProvider/index.js +12 -0
- package/src/menu/create-object.js +2 -2
- package/src/menu/create-page.js +2 -2
- package/src/menu/create-script.js +2 -2
- package/src/menu/create-site.js +2 -2
- package/src/menu/create.js +11 -11
- package/src/menu/delete.js +2 -2
- package/src/menu/doc.js +2 -2
- package/src/menu/docs/devguide.md +13 -13
- package/src/menu/docs/introduction.md +3 -3
- package/src/menu/get.js +1 -1
- package/src/object/create.js +2 -2
- package/src/object/delete.js +2 -2
- package/src/object/docs/devguide.md +11 -11
- package/src/pagelayout/create.js +6 -6
- package/src/pagelayout/delete.js +4 -4
- package/src/pagelayout/doc.js +2 -2
- package/src/pagelayout/docs/devguide.md +9 -9
- package/src/pagelayout/docs/introduction.md +1 -1
- package/src/pagelayout/get.js +4 -4
- package/src/permission/add.js +164 -0
- package/src/permission/assign.js +84 -0
- package/src/permission/docs/devguide.md +238 -0
- package/src/permission/docs/introduction.md +200 -0
- package/src/permission/get.js +107 -0
- package/src/permission/index.js +10 -0
- package/src/permission/remove.js +145 -0
- package/src/plugin/delete.js +2 -2
- package/src/plugin/doc.js +2 -2
- package/src/plugin/docs/devguide.md +29 -29
- package/src/profile/create.js +5 -5
- package/src/profile/delete.js +2 -2
- package/src/profile/doc.js +2 -2
- package/src/profile/docs/devguide.md +8 -8
- package/src/profile/docs/introduction.md +12 -12
- package/src/profile/get.js +1 -1
- package/src/project/docs/devguide.md +9 -8
- package/src/recordType/create.js +1 -1
- package/src/recordType/delete.js +1 -1
- package/src/recordType/doc.js +2 -2
- package/src/recordType/docs/devguide.md +10 -10
- package/src/recordType/editInfo.js +1 -1
- package/src/recordType/editSave.js +1 -1
- package/src/recordType/getList.js +1 -1
- package/src/recordType/newInfo.js +1 -1
- package/src/recordType/validDelete.js +1 -1
- package/src/res.md +1 -1
- package/src/role/create.js +6 -6
- package/src/role/delete.js +2 -2
- package/src/role/doc.js +2 -2
- package/src/role/docs/devguide.md +9 -9
- package/src/role/docs/introduction.md +13 -13
- package/src/role/get.js +1 -1
- package/src/scheduleJob/doc.js +1 -1
- package/src/scheduleJob/docs/devguide.md +6 -6
- package/src/scheduleJob/docs/introduction.md +6 -6
- package/src/script/docs/devguide.md +18 -18
- package/src/singleSignOn/delete.js +61 -0
- package/src/singleSignOn/doc.js +46 -0
- package/src/singleSignOn/docs/devguide.md +61 -0
- package/src/singleSignOn/docs/introduction.md +3 -0
- package/src/singleSignOn/get.js +70 -0
- package/src/singleSignOn/index.js +10 -0
- package/src/staticResource/count.js +1 -1
- package/src/staticResource/create.js +1 -1
- package/src/staticResource/delete.js +1 -1
- package/src/staticResource/detail.js +1 -1
- package/src/staticResource/docs/devguide.md +11 -11
- package/src/staticResource/docs/introduction.md +44 -1
- package/src/staticResource/get.js +1 -1
- package/src/timer/create.js +1 -1
- package/src/timer/delete.js +1 -1
- package/src/timer/detail.js +1 -1
- package/src/timer/doc.js +2 -2
- package/src/timer/docs/devguide.md +19 -19
- package/src/timer/get.js +1 -1
- package/src/timer/publish.js +1 -1
- package/src/timer/pull.js +1 -1
- package/src/timer/pullList.js +1 -1
- package/src/triggers/detail.js +1 -1
- package/src/triggers/doc.js +2 -2
- package/src/triggers/docs/devguide.md +23 -23
- package/src/triggers/get.js +1 -1
- package/src/triggers/pullList.js +1 -1
- package/src/user/create.js +2 -2
- package/src/user/delete.js +2 -2
- package/src/user/doc.js +2 -2
- package/src/user/docs/devguide.md +13 -13
- package/src/user/docs/introduction.md +12 -12
- package/src/user/get.js +1 -1
- package/src/user/update.js +3 -3
- package/src/user/view.js +2 -2
- package/src/validationRule/create.js +7 -7
- package/src/validationRule/delete.js +2 -2
- package/src/validationRule/doc.js +2 -2
- package/src/validationRule/docs/devguide.md +7 -7
- package/src/validationRule/docs/introduction.md +11 -11
- package/src/validationRule/get.js +1 -1
- package/src/version/actionHelp.js +25 -0
- package/src/version/docs.js +26 -0
- package/src/version/doctor.js +25 -0
- package/src/version/get.js +1 -1
- package/src/version/help.js +48 -0
- package/src/version/index.js +9 -2
- package/src/version/initHelp.js +13 -0
- package/src/version/listModuleCommands.js +241 -0
- package/src/version/stats.js +44 -0
- package/src/version/uninstall.js +30 -0
- package/src/version/update.js +13 -0
- package/test/application.cli.test.js +1 -1
- package/test/classes.cli.test.js +1 -1
- package/test/customSetting.cli.test.js +1 -1
- package/test/fields.cli.test.js +2 -2
- package/test/globalSelectList.cli.test.js +1 -1
- package/test/menu-script.cli.test.js +1 -1
- package/test/menu.cli.test.js +1 -1
- package/test/object.cli.test.js +1 -1
- package/test/plugin.cli.test.js +1 -1
- package/test/scheduleJob.cli.test.js +1 -1
- package/test/script.cli.test.js +1 -1
- package/test/staticResource.cli.test.js +1 -1
- package/test/timer.cli.test.js +1 -1
- package/test/trigger.cli.test.js +1 -1
- package/utils/checkVersion.js +27 -2
- package/utils/commandStats.js +94 -0
- package/utils/formatReleaseNotes.js +312 -0
- package/utils/readmeReleases.js +69 -0
- package/.cloudcc-cache.json +0 -54
- package/.cursor/skills/cloudcc-cli-dev.zip +0 -0
- package/.cursor/skills/cloudcc-dev-usage/SKILL.md +0 -68
- package/build/component-cc-cc-dd.common.js +0 -831
- package/build/component-cc-cc-dd.common.js.map +0 -1
- package/build/component-cc-cc-dd.css +0 -1
- package/build/component-cc-cc-dd.umd.js +0 -874
- package/build/component-cc-cc-dd.umd.js.map +0 -1
- package/build/component-cc-cc-dd.umd.min.js +0 -8
- package/build/component-cc-cc-dd.umd.min.js.map +0 -1
- package/build/demo.html +0 -1
- package/plugins/cc-cc-dd/cc-cc-dd.vue +0 -32
- package/plugins/cc-cc-dd/components/HelloWorld.vue +0 -11
- package/plugins/cc-cc-dd/config.json +0 -6
|
@@ -10,7 +10,7 @@ const chalk = require('chalk')
|
|
|
10
10
|
*/
|
|
11
11
|
async function create(argvs) {
|
|
12
12
|
try {
|
|
13
|
-
// 命令行参数格式:
|
|
13
|
+
// 命令行参数格式:cloudcc create application <path> <p1> <p2> [duel1]
|
|
14
14
|
// argvs: ['application', 'create', path, p1, p2, duel1]
|
|
15
15
|
let path = argvs[2];
|
|
16
16
|
let p1 = argvs[3]; // 应用名称
|
|
@@ -21,7 +21,7 @@ async function create(argvs) {
|
|
|
21
21
|
if (!p1 || !p2) {
|
|
22
22
|
console.error();
|
|
23
23
|
console.error(chalk.red('Error: 缺少必需参数'));
|
|
24
|
-
console.error('用法:
|
|
24
|
+
console.error('用法: cloudcc create application <path> <p1> <p2> [duel1]');
|
|
25
25
|
console.error(' path: 项目路径');
|
|
26
26
|
console.error(' p1: 应用名称');
|
|
27
27
|
console.error(' p2: 应用代码');
|
|
@@ -4,7 +4,7 @@ const { getPackageJson } = require("../../utils/config");
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* 删除应用(Application)
|
|
7
|
-
* 用法:
|
|
7
|
+
* 用法:cloudcc delete application <projectPath> <appId>
|
|
8
8
|
*/
|
|
9
9
|
async function remove(argvs) {
|
|
10
10
|
try {
|
|
@@ -14,7 +14,7 @@ async function remove(argvs) {
|
|
|
14
14
|
if (!appId) {
|
|
15
15
|
console.error();
|
|
16
16
|
console.error(chalk.red("Error: 缺少应用 ID"));
|
|
17
|
-
console.error(chalk.yellow("用法:
|
|
17
|
+
console.error(chalk.yellow("用法: cloudcc delete application <projectPath> <appId>"));
|
|
18
18
|
console.error();
|
|
19
19
|
throw new Error("缺少必需参数: appId");
|
|
20
20
|
}
|
package/src/application/doc.js
CHANGED
|
@@ -21,14 +21,14 @@ function getDevGuideDoc() {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* cloudcc doc application <introduction|devguide>
|
|
25
25
|
* @param {string[]} argvs [doc, type, introduction|devguide, ...]
|
|
26
26
|
*/
|
|
27
27
|
function doc(argvs) {
|
|
28
28
|
const subType = argvs[2];
|
|
29
29
|
const key = String(subType || "").trim().toLowerCase();
|
|
30
30
|
if (!key) {
|
|
31
|
-
throw new Error("
|
|
31
|
+
throw new Error("cloudcc doc application 需要子命令:introduction 或 devguide");
|
|
32
32
|
}
|
|
33
33
|
if (key === "introduction") {
|
|
34
34
|
const content = getIntroductionDoc();
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
`application` 模块用于通过 CLI 管理 CloudCC 应用,当前提供:
|
|
6
6
|
|
|
7
|
-
- 创建应用:`
|
|
8
|
-
- 查询应用:`
|
|
9
|
-
- 删除应用:`
|
|
10
|
-
- 文档查看:`
|
|
7
|
+
- 创建应用:`cloudcc create application ...`
|
|
8
|
+
- 查询应用:`cloudcc get application ...`
|
|
9
|
+
- 删除应用:`cloudcc delete application ...`
|
|
10
|
+
- 文档查看:`cloudcc doc application introduction|devguide`
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
执行命令前请确认:
|
|
17
17
|
|
|
18
|
-
- 已完成 `
|
|
18
|
+
- 已完成 `cloudcc doc project devguide` 的环境初始化
|
|
19
19
|
- 项目根目录存在可用配置,且包含 `accessToken`
|
|
20
20
|
- 已准备应用名称、应用代码
|
|
21
21
|
- 若需自定义菜单挂载,已准备菜单 ID 列表
|
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
## 3. 命令总览(以代码实现为准)
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
cloudcc create application <path> <p1> <p2> [duel1]
|
|
29
|
+
cloudcc get application <projectPath> [encodedCondJson]
|
|
30
|
+
cloudcc delete application <projectPath> <appId>
|
|
31
|
+
cloudcc doc application <introduction|devguide>
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
参数约定:
|
|
@@ -45,7 +45,7 @@ cc doc application <introduction|devguide>
|
|
|
45
45
|
## 4. 创建应用
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
|
|
48
|
+
cloudcc create application <path> <p1> <p2> [duel1]
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
### 4.1 参数说明
|
|
@@ -65,10 +65,10 @@ cc create application <path> <p1> <p2> [duel1]
|
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
67
|
# 使用默认菜单 ID
|
|
68
|
-
|
|
68
|
+
cloudcc create application . "销售工作台" sales_workbench
|
|
69
69
|
|
|
70
70
|
# 指定菜单 ID(可多个)
|
|
71
|
-
|
|
71
|
+
cloudcc create application . "销售工作台" sales_workbench "acf000001,a0I9D000000XXXXUAI"
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
### 4.4 常见报错
|
|
@@ -77,7 +77,7 @@ cc create application . "销售工作台" sales_workbench "acf000001,a0I9D000000
|
|
|
77
77
|
|
|
78
78
|
```text
|
|
79
79
|
Error: 缺少必需参数
|
|
80
|
-
用法:
|
|
80
|
+
用法: cloudcc create application <path> <p1> <p2> [duel1]
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
- 角色列表获取失败(依赖 `brief/get`):
|
|
@@ -91,7 +91,7 @@ Error: 缺少必需参数
|
|
|
91
91
|
## 5. 查询应用
|
|
92
92
|
|
|
93
93
|
```bash
|
|
94
|
-
|
|
94
|
+
cloudcc get application <projectPath> [encodedCondJson]
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
说明:
|
|
@@ -103,10 +103,10 @@ cc get application <projectPath> [encodedCondJson]
|
|
|
103
103
|
|
|
104
104
|
```bash
|
|
105
105
|
# 查询全部应用
|
|
106
|
-
|
|
106
|
+
cloudcc get application .
|
|
107
107
|
|
|
108
108
|
# 按条件查询(示例)
|
|
109
|
-
|
|
109
|
+
cloudcc get application . '%7B%22appType%22%3A%22app%22%7D'
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
若条件 JSON 无法解析,会报错:
|
|
@@ -120,7 +120,7 @@ Get Application List Failed: encodedCondJson 解析失败,请传 encodeURI(JSO
|
|
|
120
120
|
## 6. 删除应用
|
|
121
121
|
|
|
122
122
|
```bash
|
|
123
|
-
|
|
123
|
+
cloudcc delete application <projectPath> <appId>
|
|
124
124
|
```
|
|
125
125
|
|
|
126
126
|
参数说明:
|
|
@@ -131,14 +131,14 @@ cc delete application <projectPath> <appId>
|
|
|
131
131
|
示例:
|
|
132
132
|
|
|
133
133
|
```bash
|
|
134
|
-
|
|
134
|
+
cloudcc delete application . a0L9D000000XXXXUAI
|
|
135
135
|
```
|
|
136
136
|
|
|
137
137
|
缺少 `appId` 时会报错:
|
|
138
138
|
|
|
139
139
|
```text
|
|
140
140
|
Error: 缺少应用 ID
|
|
141
|
-
用法:
|
|
141
|
+
用法: cloudcc delete application <projectPath> <appId>
|
|
142
142
|
```
|
|
143
143
|
|
|
144
144
|
---
|
|
@@ -146,8 +146,8 @@ Error: 缺少应用 ID
|
|
|
146
146
|
## 7. 文档命令
|
|
147
147
|
|
|
148
148
|
```bash
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
cloudcc doc application introduction
|
|
150
|
+
cloudcc doc application devguide
|
|
151
151
|
```
|
|
152
152
|
|
|
153
153
|
仅支持 `introduction` 与 `devguide`,其他子命令会抛错。
|
|
@@ -158,16 +158,16 @@ cc doc application devguide
|
|
|
158
158
|
|
|
159
159
|
```bash
|
|
160
160
|
# 1) 先查现有应用,避免重名
|
|
161
|
-
|
|
161
|
+
cloudcc get application .
|
|
162
162
|
|
|
163
163
|
# 2) 创建应用
|
|
164
|
-
|
|
164
|
+
cloudcc create application . "销售工作台" sales_workbench
|
|
165
165
|
|
|
166
166
|
# 3) 再次查询确认已创建
|
|
167
|
-
|
|
167
|
+
cloudcc get application .
|
|
168
168
|
|
|
169
169
|
# 4) 如需回滚,按 appId 删除
|
|
170
|
-
|
|
170
|
+
cloudcc delete application . <appId>
|
|
171
171
|
```
|
|
172
172
|
|
|
173
173
|
---
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 自定义按钮 - 新建
|
|
3
|
+
* API: POST {setupSvc}/api/buttonlink/saveButton
|
|
4
|
+
* CLI: cloudcc create button <projectPath> <objid> <label> [name] [btnType] [event]
|
|
5
|
+
*
|
|
6
|
+
* 参数说明:
|
|
7
|
+
* - projectPath : 项目根目录
|
|
8
|
+
* - objid : 对象 ID
|
|
9
|
+
* - label : 按钮标签(必填)
|
|
10
|
+
* - name : 按钮 API 名称(可选,默认同 label)
|
|
11
|
+
* - btnType : 显示类型,detailBtn(详情页面按钮,默认)| listBtn(列表按钮)
|
|
12
|
+
* - event : 按钮类型,template(默认)| lightning-script | lightning-url | url
|
|
13
|
+
*
|
|
14
|
+
* 各类型默认值:
|
|
15
|
+
* - template / lightning-script : functionCode = "alert('hello world')"
|
|
16
|
+
* - lightning-script : h5FunctionCode = "alert('hello world')"
|
|
17
|
+
* - lightning-url / url : functionCode = "www.cloudcc.com"
|
|
18
|
+
* - lightning-url : mobileurl 自动选取自定义页面组件列表第一项
|
|
19
|
+
*/
|
|
20
|
+
const chalk = require("chalk");
|
|
21
|
+
const axios = require("axios");
|
|
22
|
+
const https = require("https");
|
|
23
|
+
const http = require("http");
|
|
24
|
+
const { getPackageJson } = require("../../utils/config");
|
|
25
|
+
const { postClass } = require("../../utils/http");
|
|
26
|
+
|
|
27
|
+
// 用户侧 event 名称 -> API 实际 event 值
|
|
28
|
+
const EVENT_MAP = {
|
|
29
|
+
"template": "lightning",
|
|
30
|
+
"lightning-script": "lightning-script",
|
|
31
|
+
"lightning-url": "lightning-url",
|
|
32
|
+
"url": "URL"
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const httpsAgent = new https.Agent({ rejectUnauthorized: false });
|
|
36
|
+
const httpAgent = new http.Agent({ rejectUnauthorized: false });
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 从 devconsole-svc 获取自定义页面组件列表,返回首个页面对象
|
|
40
|
+
* @param {string} setupSvc 配置中的 setupSvc 地址
|
|
41
|
+
* @param {string} accessToken
|
|
42
|
+
*/
|
|
43
|
+
async function fetchFirstCustomPage(setupSvc, accessToken) {
|
|
44
|
+
// 从 setupSvc 移除末尾服务路径,拼 devconsole 路径
|
|
45
|
+
// 例:https://xxx/ccdomaingateway/setup → https://xxx/ccdomaingateway/devconsole/...
|
|
46
|
+
const base = setupSvc.replace(/\/[^/]+$/, "");
|
|
47
|
+
const url = base + "/devconsole/custom/pc/1.0/post/pageCustomPage";
|
|
48
|
+
const res = await axios({
|
|
49
|
+
url,
|
|
50
|
+
method: "post",
|
|
51
|
+
httpsAgent,
|
|
52
|
+
httpAgent,
|
|
53
|
+
timeout: 60000,
|
|
54
|
+
headers: { "Content-Type": "application/json; charset=utf-8" },
|
|
55
|
+
data: {
|
|
56
|
+
head: {
|
|
57
|
+
appType: "lightning-setup",
|
|
58
|
+
appVersion: "0.0.1",
|
|
59
|
+
accessToken,
|
|
60
|
+
source: "lightning-setup",
|
|
61
|
+
version: "public"
|
|
62
|
+
},
|
|
63
|
+
body: {
|
|
64
|
+
pageNo: 1,
|
|
65
|
+
pageSize: 2000000,
|
|
66
|
+
condition: { pageLabel: "", dtBegin: "", dtEnd: "" }
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const list = res.data && res.data.data && res.data.data.list;
|
|
71
|
+
return Array.isArray(list) && list.length > 0 ? list[0] : null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* 新建自定义按钮
|
|
76
|
+
* @param {string} projectPath
|
|
77
|
+
* @param {string} objid 对象 ID
|
|
78
|
+
* @param {string} label 按钮标签
|
|
79
|
+
* @param {string} name 按钮 API 名称(可选)
|
|
80
|
+
* @param {string} btnType detailBtn | listBtn(默认 detailBtn)
|
|
81
|
+
* @param {string} eventType template | lightning-script | lightning-url | url(默认 template)
|
|
82
|
+
*/
|
|
83
|
+
async function create(projectPath = process.cwd(), objid, label, name, btnType = "detailBtn", eventType = "template") {
|
|
84
|
+
if (!objid) throw new Error("Create Button Failed: objid is required");
|
|
85
|
+
if (!label) throw new Error("Create Button Failed: label is required");
|
|
86
|
+
|
|
87
|
+
const resolvedName = name || label;
|
|
88
|
+
const resolvedBtnType = btnType || "detailBtn";
|
|
89
|
+
const resolvedEvent = eventType || "template";
|
|
90
|
+
|
|
91
|
+
const apiEvent = EVENT_MAP[resolvedEvent];
|
|
92
|
+
if (!apiEvent) {
|
|
93
|
+
throw new Error(
|
|
94
|
+
`Create Button Failed: unknown event type "${resolvedEvent}". ` +
|
|
95
|
+
`Must be one of: template, lightning-script, lightning-url, url`
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const config = await getPackageJson(projectPath);
|
|
100
|
+
|
|
101
|
+
console.error();
|
|
102
|
+
console.error(chalk.green("Creating custom button, please wait..."));
|
|
103
|
+
console.error();
|
|
104
|
+
|
|
105
|
+
// 构建按钮 VO 基础结构
|
|
106
|
+
const tpSysButtonVO = {
|
|
107
|
+
label,
|
|
108
|
+
name: resolvedName,
|
|
109
|
+
btnType: resolvedBtnType,
|
|
110
|
+
event: apiEvent,
|
|
111
|
+
behavior: "self",
|
|
112
|
+
menubar: true,
|
|
113
|
+
functionCode: "",
|
|
114
|
+
remark: "",
|
|
115
|
+
mobileurl: "",
|
|
116
|
+
h5FunctionCode: "",
|
|
117
|
+
category: "CustomButton",
|
|
118
|
+
custompageId: "",
|
|
119
|
+
iscustom: "",
|
|
120
|
+
visible: "1"
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// 按类型填充默认值
|
|
124
|
+
if (resolvedEvent === "template") {
|
|
125
|
+
// PC 端 JavaScript 代码
|
|
126
|
+
tpSysButtonVO.functionCode = "alert('hello world')";
|
|
127
|
+
} else if (resolvedEvent === "lightning-script") {
|
|
128
|
+
// PC + 移动端均支持
|
|
129
|
+
tpSysButtonVO.functionCode = "alert('hello world')";
|
|
130
|
+
tpSysButtonVO.h5FunctionCode = "alert('hello world')";
|
|
131
|
+
} else if (resolvedEvent === "lightning-url") {
|
|
132
|
+
// PC 端 URL 地址
|
|
133
|
+
tpSysButtonVO.functionCode = "www.cloudcc.com";
|
|
134
|
+
// 移动端:自动取自定义页面组件列表第一项
|
|
135
|
+
try {
|
|
136
|
+
const firstPage = await fetchFirstCustomPage(config.setupSvc, config.accessToken);
|
|
137
|
+
if (firstPage) {
|
|
138
|
+
tpSysButtonVO.mobileurl = `__UNI__110007E/#/pages/index/index?pageApi=${firstPage.pageApi}`;
|
|
139
|
+
tpSysButtonVO.custompageId = firstPage.id;
|
|
140
|
+
console.error(chalk.cyan(`Using custom page: ${firstPage.pageLabel} (pageApi: ${firstPage.pageApi})`));
|
|
141
|
+
} else {
|
|
142
|
+
console.error(chalk.yellow("Warning: No custom page found, mobileurl will be empty."));
|
|
143
|
+
}
|
|
144
|
+
} catch (e) {
|
|
145
|
+
console.error(chalk.yellow(`Warning: Could not fetch custom page list: ${e.message}`));
|
|
146
|
+
}
|
|
147
|
+
} else if (resolvedEvent === "url") {
|
|
148
|
+
// PC 端 URL(仅 PC 支持)
|
|
149
|
+
tpSysButtonVO.functionCode = "www.cloudcc.com";
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const body = { objid, tpSysButtonVO };
|
|
153
|
+
|
|
154
|
+
const res = await postClass(
|
|
155
|
+
config.setupSvc + "/api/buttonlink/saveButton",
|
|
156
|
+
body,
|
|
157
|
+
config.accessToken
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
if (res && res.result) {
|
|
161
|
+
console.error(chalk.green(`Success! Custom button "${label}" created.`));
|
|
162
|
+
console.error();
|
|
163
|
+
return res;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
throw new Error("Create Button Failed: " + (res?.returnInfo || res?.message || "Unknown error"));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
module.exports = create;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 自定义按钮 - 删除
|
|
3
|
+
* API: POST {setupSvc}/api/buttonlink/deleteButton
|
|
4
|
+
* CLI: cloudcc delete button <projectPath> <id>
|
|
5
|
+
*
|
|
6
|
+
* 参数说明:
|
|
7
|
+
* - projectPath : 项目根目录
|
|
8
|
+
* - id : 自定义按钮 ID
|
|
9
|
+
*/
|
|
10
|
+
const chalk = require("chalk");
|
|
11
|
+
const { getPackageJson } = require("../../utils/config");
|
|
12
|
+
const { postClass } = require("../../utils/http");
|
|
13
|
+
|
|
14
|
+
async function remove(projectPath = process.cwd(), id) {
|
|
15
|
+
if (!id) {
|
|
16
|
+
throw new Error("Delete Button Failed: id is required");
|
|
17
|
+
}
|
|
18
|
+
const config = await getPackageJson(projectPath);
|
|
19
|
+
console.error();
|
|
20
|
+
console.error(chalk.green(`Deleting button (${id}), please wait...`));
|
|
21
|
+
console.error();
|
|
22
|
+
const res = await postClass(
|
|
23
|
+
config.setupSvc + "/api/buttonlink/deleteButton",
|
|
24
|
+
{ id },
|
|
25
|
+
config.accessToken
|
|
26
|
+
);
|
|
27
|
+
if (res && res.result) {
|
|
28
|
+
console.error(chalk.green("Success! Button deleted."));
|
|
29
|
+
console.error();
|
|
30
|
+
return res;
|
|
31
|
+
}
|
|
32
|
+
throw new Error("Delete Button Failed: " + (res?.returnInfo || res?.message || "Unknown error"));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = remove;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* button 文档统一入口
|
|
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
|
+
* cloudcc doc button <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("cloudcc doc button 需要子命令: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,133 @@
|
|
|
1
|
+
# CloudCC 按钮与链接操作指南
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 1. 入口与列表页
|
|
6
|
+
|
|
7
|
+
进入路径:`对象管理 → 选择对象 → 按钮和链接` 标签页
|
|
8
|
+
|
|
9
|
+
列表页分为两个 Tab:
|
|
10
|
+
- **标准按钮和链接**:系统内置,不可删除
|
|
11
|
+
- **自定义按钮和链接**:开发者自定义
|
|
12
|
+
|
|
13
|
+
列表展示字段:标签 / 名称 / 显示类型
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 2. 查询按钮列表
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
cloudcc get button . <prefix>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- `<prefix>`:对象的 prefix,可从对象管理页或对象 API 名称前缀获取(如 `a75`)
|
|
24
|
+
|
|
25
|
+
返回结构:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"objname": "玫瑰花不带刺",
|
|
30
|
+
"objid": "202646FC67ACF24D39sG",
|
|
31
|
+
"standbutton": [
|
|
32
|
+
{
|
|
33
|
+
"id": "adc20262A1F4957UmT0l",
|
|
34
|
+
"label": "提交待审批",
|
|
35
|
+
"name": "Submit",
|
|
36
|
+
"btnType": "detailBtn",
|
|
37
|
+
"category": "StandardButton",
|
|
38
|
+
"event": "URL",
|
|
39
|
+
"behavior": "self",
|
|
40
|
+
"url": null,
|
|
41
|
+
"functionCode": null,
|
|
42
|
+
"mobileurl": ""
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"custbutton": []
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
| 字段 | 说明 |
|
|
50
|
+
|---------------|---------------------------------------------|
|
|
51
|
+
| `standbutton` | 标准按钮列表 |
|
|
52
|
+
| `custbutton` | 自定义按钮列表 |
|
|
53
|
+
| `btnType` | `detailBtn` 详情页按钮 / `listBtn` 列表按钮 |
|
|
54
|
+
| `category` | `StandardButton` 标准 / `CustomButton` 自定义 |
|
|
55
|
+
| `event` | `URL` 跳转 / `JavaScript` 执行脚本 |
|
|
56
|
+
| `behavior` | 打开方式:`self` 当前页 / `newWindow` 新窗口 |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 3. 新建自定义按钮
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
cloudcc create button . <objid> <label> [name] [btnType] [event]
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
| 参数 | 必填 | 说明 |
|
|
67
|
+
|-------------|------|-----------------------------------------------------------------------------|
|
|
68
|
+
| `objid` | ✅ | 所属对象 ID |
|
|
69
|
+
| `label` | ✅ | 按钮标签(显示名称) |
|
|
70
|
+
| `name` | ❌ | 按钮 API 名称,默认同 `label` |
|
|
71
|
+
| `btnType` | ❌ | 显示类型:`detailBtn`(详情页按钮,默认)/ `listBtn`(列表按钮) |
|
|
72
|
+
| `event` | ❌ | 按钮类型,见下表,默认 `template` |
|
|
73
|
+
|
|
74
|
+
### 按钮类型(event)
|
|
75
|
+
|
|
76
|
+
| 取值 | 平台支持 | 说明 |
|
|
77
|
+
|-------------------|------------------|-----------------------------------------------------------|
|
|
78
|
+
| `template` | 仅 PC | PC 端 JavaScript 代码,默认代码 `alert('hello world')` |
|
|
79
|
+
| `lightning-script`| PC + 移动端 | PC 和移动端各需要 JS 代码,默认均为 `alert('hello world')` |
|
|
80
|
+
| `lightning-url` | PC + 移动端 | PC 端填 URL,移动端自动选取自定义页面组件列表第一项 |
|
|
81
|
+
| `url` | 仅 PC | PC 端 URL 地址,默认 `www.cloudcc.com` |
|
|
82
|
+
|
|
83
|
+
### 示例
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# 新建 template 类型按钮(默认)
|
|
87
|
+
cloudcc create button . 202646FC67ACF24D39sG "我的按钮"
|
|
88
|
+
|
|
89
|
+
# 指定名称和显示类型
|
|
90
|
+
cloudcc create button . 202646FC67ACF24D39sG "我的按钮" myBtn detailBtn
|
|
91
|
+
|
|
92
|
+
# lightning-script 类型,列表按钮
|
|
93
|
+
cloudcc create button . 202646FC67ACF24D39sG "脚本按钮" scriptBtn listBtn lightning-script
|
|
94
|
+
|
|
95
|
+
# lightning-url 类型(移动端自动取第一个自定义页面组件)
|
|
96
|
+
cloudcc create button . 202646FC67ACF24D39sG "跳转按钮" urlBtn detailBtn lightning-url
|
|
97
|
+
|
|
98
|
+
# url 类型
|
|
99
|
+
cloudcc create button . 202646FC67ACF24D39sG "外链按钮" linkBtn detailBtn url
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
> **注意:** 各类型代码/URL 默认值仅供快速创建使用,创建后请在页面上编辑替换为实际内容。
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 4. 删除自定义按钮
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
cloudcc delete button . <id>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
| 参数 | 必填 | 说明 |
|
|
113
|
+
|-------|------|--------------------|
|
|
114
|
+
| `id` | ✅ | 自定义按钮 ID |
|
|
115
|
+
|
|
116
|
+
> **注意:** 仅支持删除自定义按钮,标准按钮不可删除。
|
|
117
|
+
|
|
118
|
+
### 示例
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
cloudcc delete button . adc202642BBED6BFlu6D
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 5. 查看文档
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
cloudcc doc button introduction # 能力与适用场景说明
|
|
130
|
+
cloudcc doc button devguide # 本操作指南
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# CloudCC 按钮与链接能力说明
|
|
2
|
+
|
|
3
|
+
## 1. 什么是按钮与链接
|
|
4
|
+
|
|
5
|
+
按钮和链接有助于将 CloudCC 数据与外部 URL、应用程序、公司内部网或其他后端办公系统集成在一起。
|
|
6
|
+
|
|
7
|
+
按钮可以显示在以下位置:
|
|
8
|
+
- **详细信息页**:记录详情页面上的操作按钮
|
|
9
|
+
- **相关列表**:对象关联子列表区域的操作按钮
|
|
10
|
+
- **列表视图**:搜索/列表布局中的批量操作按钮
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 2. 按钮分类
|
|
15
|
+
|
|
16
|
+
### 2.1 标准按钮(Standard Button)
|
|
17
|
+
|
|
18
|
+
系统内置的标准操作按钮,不可删除,可控制显示/隐藏。
|
|
19
|
+
|
|
20
|
+
| 标签 | 名称 | 显示类型 |
|
|
21
|
+
|------------|----------------|-----------------|
|
|
22
|
+
| 提交待审批 | Submit | 详细信息页按钮 |
|
|
23
|
+
| 编辑 | Edit | 详细信息页按钮 |
|
|
24
|
+
| 新建 | New | 列表按钮 |
|
|
25
|
+
| 批量转移 | Batch Transfer | 列表按钮 |
|
|
26
|
+
| 删除 | Delete | 详细信息页按钮 |
|
|
27
|
+
| 批量新增 | Batch Added | 列表按钮 |
|
|
28
|
+
| 复制 | Clone | 详细信息页按钮 |
|
|
29
|
+
| 共享 | Share | 详细信息页按钮 |
|
|
30
|
+
| 批量删除 | Batch Delete | 列表按钮 |
|
|
31
|
+
| 批量编辑 | Batch Editor | 列表按钮 |
|
|
32
|
+
| 合并 | Merge | 列表按钮 |
|
|
33
|
+
|
|
34
|
+
### 2.2 自定义按钮(Custom Button)
|
|
35
|
+
|
|
36
|
+
开发者自定义的按钮或链接,支持配置跳转 URL、执行脚本、调用自定义类等行为。
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 3. 按钮类型(btnType)
|
|
41
|
+
|
|
42
|
+
| 值 | 说明 |
|
|
43
|
+
|-------------|----------------|
|
|
44
|
+
| `detailBtn` | 详细信息页按钮 |
|
|
45
|
+
| `listBtn` | 列表按钮 |
|
|
46
|
+
|
|
47
|
+
## 4. 按钮行为(event)
|
|
48
|
+
|
|
49
|
+
| 值 | 说明 |
|
|
50
|
+
|---------------|------------------------|
|
|
51
|
+
| `URL` | 跳转到指定 URL |
|
|
52
|
+
| `JavaScript` | 执行 JavaScript 代码 |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 5. 如何将按钮添加到页面
|
|
57
|
+
|
|
58
|
+
- **详细信息页**:编辑页面布局,将按钮拖入布局
|
|
59
|
+
- **相关列表**:在页面布局中找到相关列表,编辑其属性
|
|
60
|
+
- **列表视图**:在"搜索布局"中编辑列表视图布局
|