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
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
const chalk = require("chalk");
|
|
2
|
+
const fs = require("fs");
|
|
3
|
+
const path = require("path");
|
|
4
|
+
const axios = require("axios");
|
|
5
|
+
const https = require("https");
|
|
6
|
+
const { getPackageJson } = require("../../utils/config");
|
|
7
|
+
const { postClass } = require("../../utils/http");
|
|
8
|
+
|
|
9
|
+
const httpsAgent = new https.Agent({
|
|
10
|
+
rejectUnauthorized: false,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 下载身份提供商证书
|
|
15
|
+
* 接口: /LoginHistory/getExportReportURL 获取下载链接,然后下载文件
|
|
16
|
+
* 用法:cloudcc download identityProvider <projectPath> [savePath]
|
|
17
|
+
*/
|
|
18
|
+
async function download(argvs) {
|
|
19
|
+
try {
|
|
20
|
+
const projectPath = argvs[2] || process.cwd();
|
|
21
|
+
const savePath = argvs[3] || process.cwd();
|
|
22
|
+
|
|
23
|
+
const config = await getPackageJson(projectPath);
|
|
24
|
+
if (!config || !config.accessToken) {
|
|
25
|
+
console.error();
|
|
26
|
+
console.error(chalk.red("Error: 配置未找到或 accessToken 缺失"));
|
|
27
|
+
console.error();
|
|
28
|
+
throw new Error("配置未找到或 accessToken 缺失");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
console.error();
|
|
32
|
+
console.error(chalk.green("Downloading certificate, please wait..."));
|
|
33
|
+
console.error();
|
|
34
|
+
|
|
35
|
+
// 确保证书保存目录存在
|
|
36
|
+
if (!fs.existsSync(savePath)) {
|
|
37
|
+
fs.mkdirSync(savePath, { recursive: true });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 第一步:调用接口获取下载 URL
|
|
41
|
+
const result = await postClass(
|
|
42
|
+
config.setupSvc + "/api/LoginHistory/getExportReportURL",
|
|
43
|
+
{},
|
|
44
|
+
config.accessToken
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
if (result && result.result && result.data) {
|
|
48
|
+
const downloadUrl = result.data;
|
|
49
|
+
|
|
50
|
+
console.error(chalk.gray(`Got download URL: ${downloadUrl}`));
|
|
51
|
+
console.error(chalk.gray(`Downloading file...`));
|
|
52
|
+
console.error();
|
|
53
|
+
|
|
54
|
+
// 第二步:根据返回的 URL 下载文件
|
|
55
|
+
const response = await axios({
|
|
56
|
+
method: 'get',
|
|
57
|
+
url: downloadUrl,
|
|
58
|
+
httpsAgent: httpsAgent,
|
|
59
|
+
responseType: 'arraybuffer',
|
|
60
|
+
timeout: 120000
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// 尝试从响应头获取文件名
|
|
64
|
+
let filename = "identity-provider.crt";
|
|
65
|
+
const contentDisposition = response.headers['content-disposition'];
|
|
66
|
+
if (contentDisposition) {
|
|
67
|
+
const match = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
|
|
68
|
+
if (match && match[1]) {
|
|
69
|
+
filename = match[1].replace(/['"]/g, '');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// 如果 URL 中包含文件名,也尝试从中提取
|
|
74
|
+
const urlPath = new URL(downloadUrl).pathname;
|
|
75
|
+
const urlFilename = urlPath.split('/').pop();
|
|
76
|
+
if (urlFilename && urlFilename.includes('.')) {
|
|
77
|
+
filename = urlFilename;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const filePath = path.join(savePath, filename);
|
|
81
|
+
fs.writeFileSync(filePath, response.data);
|
|
82
|
+
|
|
83
|
+
console.error();
|
|
84
|
+
console.error(chalk.green("Success! Certificate downloaded."));
|
|
85
|
+
console.error(chalk.gray(`Saved to: ${filePath}`));
|
|
86
|
+
console.error();
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
result: true,
|
|
90
|
+
filePath: filePath,
|
|
91
|
+
filename: filename,
|
|
92
|
+
downloadUrl: downloadUrl
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const msg = result && (result.returnInfo || result.message) ? (result.returnInfo || result.message) : "Unknown error";
|
|
97
|
+
throw new Error("Get download URL failed: " + msg);
|
|
98
|
+
} catch (error) {
|
|
99
|
+
console.error();
|
|
100
|
+
console.error(chalk.red("证书下载失败:"), error.message || error);
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
module.exports = download;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
const { postClass } = require("../../utils/http");
|
|
2
|
+
const { getPackageJson } = require("../../utils/config");
|
|
3
|
+
const chalk = require("chalk");
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 查询身份提供商列表
|
|
7
|
+
* 接口: /samlSp/queryList
|
|
8
|
+
* 用法:cloudcc get identityProvider <projectPath> [encodedCondJson]
|
|
9
|
+
*/
|
|
10
|
+
async function get(argvs, isMcp = false) {
|
|
11
|
+
const projectPath = argvs[2] || process.cwd();
|
|
12
|
+
const condArg = argvs[3];
|
|
13
|
+
|
|
14
|
+
let body = {};
|
|
15
|
+
if (condArg) {
|
|
16
|
+
try {
|
|
17
|
+
body = JSON.parse(decodeURI(condArg));
|
|
18
|
+
} catch (e) {
|
|
19
|
+
try {
|
|
20
|
+
body = JSON.parse(condArg);
|
|
21
|
+
} catch (e2) {
|
|
22
|
+
throw new Error("Get IdentityProvider Failed: encodedCondJson 解析失败,请传 encodeURI(JSON.stringify(...))");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const config = await getPackageJson(projectPath);
|
|
28
|
+
|
|
29
|
+
const res = await postClass(
|
|
30
|
+
config.setupSvc + "/api/samlSp/queryList",
|
|
31
|
+
{
|
|
32
|
+
start: 0,
|
|
33
|
+
limit: 30,
|
|
34
|
+
keyword: "",
|
|
35
|
+
...body
|
|
36
|
+
},
|
|
37
|
+
config.accessToken
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
if (res && res.result) {
|
|
41
|
+
const data = res.data;
|
|
42
|
+
let rawList = [];
|
|
43
|
+
if (Array.isArray(data)) {
|
|
44
|
+
rawList = data;
|
|
45
|
+
} else if (data && Array.isArray(data.list)) {
|
|
46
|
+
rawList = data.list;
|
|
47
|
+
} else if (data && Array.isArray(data.data)) {
|
|
48
|
+
rawList = data.data;
|
|
49
|
+
} else if (data && typeof data === "object") {
|
|
50
|
+
rawList = Object.keys(data)
|
|
51
|
+
.filter((key) => /list$/i.test(key) && Array.isArray(data[key]))
|
|
52
|
+
.flatMap((key) =>
|
|
53
|
+
data[key].map((item) => ({
|
|
54
|
+
...item,
|
|
55
|
+
__group: key
|
|
56
|
+
}))
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (!isMcp) {
|
|
61
|
+
console.log(JSON.stringify(rawList, null, 2));
|
|
62
|
+
}
|
|
63
|
+
return rawList;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const msg = res && (res.returnInfo || res.message) ? (res.returnInfo || res.message) : "Unknown error";
|
|
67
|
+
throw new Error("Get IdentityProvider Failed: " + msg);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
module.exports = get;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const cc = {}
|
|
2
|
+
cc.create = require("./create")
|
|
3
|
+
cc.delete = require("./delete")
|
|
4
|
+
cc.get = require("./get")
|
|
5
|
+
cc.download = require("./download")
|
|
6
|
+
cc.doc = require("./doc")
|
|
7
|
+
|
|
8
|
+
function main(action, argvs) {
|
|
9
|
+
cc[action](argvs)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
module.exports = main;
|
|
@@ -12,7 +12,7 @@ const { buildCommonMenuFields } = require('./common');
|
|
|
12
12
|
*/
|
|
13
13
|
async function createObjectMenu(argvs) {
|
|
14
14
|
try {
|
|
15
|
-
// 命令行参数格式:
|
|
15
|
+
// 命令行参数格式:cloudcc create menu object <path> <objectId> <tabName>
|
|
16
16
|
// argvs: ['create', 'menu', 'object', '.', 'objectId', 'tabName', ...]
|
|
17
17
|
let path = argvs[3]; // 路径 (argvs[3])
|
|
18
18
|
let objectId = argvs[4]; // 对象ID (p1)
|
|
@@ -24,7 +24,7 @@ async function createObjectMenu(argvs) {
|
|
|
24
24
|
if (!objectId || !tabName) {
|
|
25
25
|
console.error();
|
|
26
26
|
console.error(chalk.red('Error: 缺少必需参数'));
|
|
27
|
-
console.error('用法:
|
|
27
|
+
console.error('用法: cloudcc create menu object <path> <objectId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
28
28
|
console.error();
|
|
29
29
|
throw new Error('缺少必需参数: objectId 和 tabName');
|
|
30
30
|
}
|
package/src/menu/create-page.js
CHANGED
|
@@ -12,7 +12,7 @@ const { validatePname, formatPname } = require('./validator');
|
|
|
12
12
|
*/
|
|
13
13
|
async function createPageMenu(argvs) {
|
|
14
14
|
try {
|
|
15
|
-
// 命令行参数格式:
|
|
15
|
+
// 命令行参数格式:cloudcc create menu page <path> <pageApi> <tabName> <pname> [tabStyle] [mobileimg] [cloudccservicetab] [mobileurl]
|
|
16
16
|
// argvs: ['create', 'menu', 'page', '.', 'contract-assistant', '标签名', '菜单名称', ...]
|
|
17
17
|
let path = argvs[3]; // 路径 (argvs[3])
|
|
18
18
|
let pageApi = argvs[4]; // 自定义页面 pageApi,例如 contract-assistant
|
|
@@ -32,7 +32,7 @@ async function createPageMenu(argvs) {
|
|
|
32
32
|
if (!pageApi || !tabName || !pname) {
|
|
33
33
|
console.error();
|
|
34
34
|
console.error(chalk.red('Error: 缺少必需参数'));
|
|
35
|
-
console.error('用法:
|
|
35
|
+
console.error('用法: cloudcc create menu page <path> <pageApi> <tabName> <pname> [tabStyle] [mobileimg] [cloudccservicetab] [mobileurl]');
|
|
36
36
|
console.error();
|
|
37
37
|
throw new Error('缺少必需参数: pageApi、tabName 和 pname');
|
|
38
38
|
}
|
|
@@ -12,7 +12,7 @@ const { validatePname } = require('./validator');
|
|
|
12
12
|
*/
|
|
13
13
|
async function createScriptMenu(argvs) {
|
|
14
14
|
try {
|
|
15
|
-
// 命令行参数格式:
|
|
15
|
+
// 命令行参数格式:cloudcc create menu script <path> <tabName> <pname> [functioncode] [tabStyle] [mobileimg] [cloudccservicetab]
|
|
16
16
|
// argvs: ['create', 'menu', 'script', '.', 'tabName', 'pname', 'functioncode', ...]
|
|
17
17
|
let path = argvs[3]; // 路径 (argvs[3])
|
|
18
18
|
let tabName = argvs[4]; // 标签名称(显示名称)
|
|
@@ -25,7 +25,7 @@ async function createScriptMenu(argvs) {
|
|
|
25
25
|
if (!tabName || !pname) {
|
|
26
26
|
console.error();
|
|
27
27
|
console.error(chalk.red('Error: 缺少必需参数'));
|
|
28
|
-
console.error('用法:
|
|
28
|
+
console.error('用法: cloudcc create menu script <path> <tabName> <pname> [functioncode] [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
29
29
|
console.error();
|
|
30
30
|
console.error('参数说明:');
|
|
31
31
|
console.error(' path - 项目路径,"." 表示当前目录');
|
package/src/menu/create-site.js
CHANGED
|
@@ -11,7 +11,7 @@ const { buildCommonMenuFields } = require('./common');
|
|
|
11
11
|
*/
|
|
12
12
|
async function createSiteMenu(argvs) {
|
|
13
13
|
try {
|
|
14
|
-
// 命令行参数格式:
|
|
14
|
+
// 命令行参数格式:cloudcc create menu site <path> <siteId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
15
15
|
// argvs: ['create', 'menu', 'site', '.', 'siteId', 'tabName', ...]
|
|
16
16
|
let path = argvs[3]; // 路径 (argvs[3])
|
|
17
17
|
let siteId = argvs[4]; // 站点ID (p1)
|
|
@@ -23,7 +23,7 @@ async function createSiteMenu(argvs) {
|
|
|
23
23
|
if (!siteId || !tabName) {
|
|
24
24
|
console.error();
|
|
25
25
|
console.error(chalk.red('Error: 缺少必需参数'));
|
|
26
|
-
console.error('用法:
|
|
26
|
+
console.error('用法: cloudcc create menu site <path> <siteId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
27
27
|
console.error();
|
|
28
28
|
throw new Error('缺少必需参数: siteId 和 tabName');
|
|
29
29
|
}
|
package/src/menu/create.js
CHANGED
|
@@ -8,14 +8,14 @@ const createSiteMenu = require('./create-site');
|
|
|
8
8
|
* 创建自定义菜单(标签页)
|
|
9
9
|
* 支持类型:object(自定义对象)、page(自定义页面)、script(自定义脚本)、site(站点)
|
|
10
10
|
* 命令格式:
|
|
11
|
-
* - object/script/site:
|
|
12
|
-
* - page:
|
|
11
|
+
* - object/script/site: cloudcc create menu <type> <path> <resourceId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
12
|
+
* - page: cloudcc create menu page <path> <pageApi> <tabName> <pname> [tabStyle] [mobileimg] [cloudccservicetab] [mobileurl]
|
|
13
13
|
* @param {Array} argvs - 命令行参数数组
|
|
14
14
|
* @returns {Promise<Object>} 创建结果
|
|
15
15
|
*/
|
|
16
16
|
async function create(argvs) {
|
|
17
17
|
try {
|
|
18
|
-
// 命令行参数格式:
|
|
18
|
+
// 命令行参数格式:cloudcc create menu <type> <path> <resourceId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
19
19
|
// argvs: ['create', 'menu', 'object', '.', 'resourceId', 'tabName', ...]
|
|
20
20
|
// type: object, page, script, site
|
|
21
21
|
let menuType = argvs[2]; // 菜单类型 (argvs[2])
|
|
@@ -27,15 +27,15 @@ async function create(argvs) {
|
|
|
27
27
|
console.error(chalk.red('Error: 无效的菜单类型'));
|
|
28
28
|
console.error(`支持的菜单类型: ${validTypes.join(', ')}`);
|
|
29
29
|
console.error('用法:');
|
|
30
|
-
console.error('
|
|
31
|
-
console.error('
|
|
32
|
-
console.error('
|
|
33
|
-
console.error('
|
|
30
|
+
console.error(' cloudcc create menu object <path> <objectId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
31
|
+
console.error(' cloudcc create menu page <path> <pageApi> <tabName> <pname> [tabStyle] [mobileimg] [cloudccservicetab] [mobileurl]');
|
|
32
|
+
console.error(' cloudcc create menu script <path> <scriptId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
33
|
+
console.error(' cloudcc create menu site <path> <siteId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
34
34
|
console.error('示例:');
|
|
35
|
-
console.error('
|
|
36
|
-
console.error('
|
|
37
|
-
console.error('
|
|
38
|
-
console.error('
|
|
35
|
+
console.error(' cloudcc create menu object . <objectId> "我的对象菜单"');
|
|
36
|
+
console.error(' cloudcc create menu page . contract-assistant "我的页面标签" my_page_menu');
|
|
37
|
+
console.error(' cloudcc create menu script . <scriptId> "我的脚本菜单"');
|
|
38
|
+
console.error(' cloudcc create menu site . <siteId> "我的站点菜单"');
|
|
39
39
|
console.error();
|
|
40
40
|
throw new Error(`无效的菜单类型: ${menuType}`);
|
|
41
41
|
}
|
package/src/menu/delete.js
CHANGED
|
@@ -4,7 +4,7 @@ const { getPackageJson } = require("../../utils/config");
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* 删除自定义菜单(标签页)
|
|
7
|
-
* 用法:
|
|
7
|
+
* 用法:cloudcc delete menu <projectPath> <tabId>
|
|
8
8
|
*/
|
|
9
9
|
async function remove(argvs) {
|
|
10
10
|
try {
|
|
@@ -14,7 +14,7 @@ async function remove(argvs) {
|
|
|
14
14
|
if (!tabId) {
|
|
15
15
|
console.error();
|
|
16
16
|
console.error(chalk.red("Error: 缺少菜单 ID"));
|
|
17
|
-
console.error(chalk.yellow("用法:
|
|
17
|
+
console.error(chalk.yellow("用法: cloudcc delete menu <projectPath> <tabId>"));
|
|
18
18
|
console.error();
|
|
19
19
|
throw new Error("缺少必需参数: tabId");
|
|
20
20
|
}
|
package/src/menu/doc.js
CHANGED
|
@@ -32,14 +32,14 @@ function getDevGuideDoc() {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* cloudcc doc menu <introduction|devguide>
|
|
36
36
|
* @param {string[]} argvs [doc, type, introduction|devguide, ...]
|
|
37
37
|
*/
|
|
38
38
|
function doc(argvs) {
|
|
39
39
|
const subType = argvs[2];
|
|
40
40
|
const key = String(subType || "").trim().toLowerCase();
|
|
41
41
|
if (!key) {
|
|
42
|
-
throw new Error("
|
|
42
|
+
throw new Error("cloudcc doc menu 需要子命令:introduction 或 devguide");
|
|
43
43
|
}
|
|
44
44
|
if (key === "introduction") {
|
|
45
45
|
const content = getIntroductionDoc();
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
### 创建自定义对象菜单
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
|
|
19
|
+
cloudcc create menu object <path> <objectId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
**参数说明:**
|
|
@@ -33,13 +33,13 @@ cc create menu object <path> <objectId> <tabName> [tabStyle] [mobileimg] [cloudc
|
|
|
33
33
|
**示例:**
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
|
|
36
|
+
cloudcc create menu object . a0F9D000000XXXXUAI "客户管理"
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
### 创建自定义页面菜单
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
|
|
42
|
+
cloudcc create menu page <path> <pageApi> <tabName> <pname> [tabStyle] [mobileimg] [cloudccservicetab] [mobileurl]
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
**参数说明:**
|
|
@@ -56,13 +56,13 @@ cc create menu page <path> <pageApi> <tabName> <pname> [tabStyle] [mobileimg] [c
|
|
|
56
56
|
**示例:**
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
|
-
|
|
59
|
+
cloudcc create menu page . contract-assistant "合同助手" contract_menu
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
### 创建自定义脚本菜单
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
|
-
|
|
65
|
+
cloudcc create menu script <path> <tabName> <pname> [functioncode] [tabStyle] [mobileimg] [cloudccservicetab]
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
**参数说明:**
|
|
@@ -77,13 +77,13 @@ cc create menu script <path> <tabName> <pname> [functioncode] [tabStyle] [mobile
|
|
|
77
77
|
**示例:**
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
|
-
|
|
80
|
+
cloudcc create menu script . "数据导入工具" data_import_menu "ccc.alert('Hello World');"
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
### 创建站点菜单
|
|
84
84
|
|
|
85
85
|
```bash
|
|
86
|
-
|
|
86
|
+
cloudcc create menu site <path> <siteId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
**参数说明:**
|
|
@@ -97,33 +97,33 @@ cc create menu site <path> <siteId> <tabName> [tabStyle] [mobileimg] [cloudccser
|
|
|
97
97
|
**示例:**
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
|
-
|
|
100
|
+
cloudcc create menu site . a0H9D000000XXXXUAI "合作伙伴门户"
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
### 查询菜单列表
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
|
-
|
|
106
|
+
cloudcc get menu <projectPath> [encodedCondJson]
|
|
107
107
|
```
|
|
108
108
|
|
|
109
109
|
**示例:**
|
|
110
110
|
|
|
111
111
|
```bash
|
|
112
112
|
# 查询所有菜单
|
|
113
|
-
|
|
113
|
+
cloudcc get menu .
|
|
114
114
|
|
|
115
115
|
# 带查询条件
|
|
116
|
-
|
|
116
|
+
cloudcc get menu . '%7B%22type%22%3A%22page%22%7D'
|
|
117
117
|
```
|
|
118
118
|
|
|
119
119
|
### 删除菜单
|
|
120
120
|
|
|
121
121
|
```bash
|
|
122
|
-
|
|
122
|
+
cloudcc delete menu <projectPath> <tabId>
|
|
123
123
|
```
|
|
124
124
|
|
|
125
125
|
**示例:**
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
|
-
|
|
128
|
+
cloudcc delete menu . a0I9D000000XXXXUAI
|
|
129
129
|
```
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
5. 选择要加入的应用程序(决定菜单出现在哪个应用)
|
|
45
45
|
6. 保存并验证显示效果
|
|
46
46
|
|
|
47
|
-
在 `cloudcc-cli` 中,你主要通过 `
|
|
47
|
+
在 `cloudcc-cli` 中,你主要通过 `cloudcc create menu ...` 完成第 2-3
|
|
48
48
|
步;权限与应用归属建议在创建后补充核验。
|
|
49
49
|
|
|
50
50
|
---
|
|
@@ -94,6 +94,6 @@
|
|
|
94
94
|
## 9. 相关文档与命令
|
|
95
95
|
|
|
96
96
|
```bash
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
cloudcc doc menu introduction
|
|
98
|
+
cloudcc doc menu devguide
|
|
99
99
|
```
|
package/src/menu/get.js
CHANGED
|
@@ -3,7 +3,7 @@ const { getPackageJson } = require("../../utils/config");
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* 查询自定义菜单(标签页)列表
|
|
6
|
-
* 用法:
|
|
6
|
+
* 用法:cloudcc get menu <projectPath> [encodedCondJson]
|
|
7
7
|
*/
|
|
8
8
|
async function get(argvs, isMcp = false) {
|
|
9
9
|
const projectPath = argvs[2] || process.cwd();
|
package/src/object/create.js
CHANGED
|
@@ -20,8 +20,8 @@ async function create(argvs) {
|
|
|
20
20
|
try {
|
|
21
21
|
let path = argvs[2];
|
|
22
22
|
// 兼容两种调用方式:
|
|
23
|
-
// 1)
|
|
24
|
-
// 2)
|
|
23
|
+
// 1) cloudcc object create <path> <nameLabel> <label>
|
|
24
|
+
// 2) cloudcc object create <path> <label> (此时自动生成 nameLabel)
|
|
25
25
|
let label = argvs[3];
|
|
26
26
|
let nameLabel = argvs[4];
|
|
27
27
|
if (nameLabel == undefined) {
|
package/src/object/delete.js
CHANGED
|
@@ -4,7 +4,7 @@ const { getPackageJson } = require("../../utils/config");
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* 删除自定义对象
|
|
7
|
-
* 用法:
|
|
7
|
+
* 用法:cloudcc delete object <projectPath> <objid>
|
|
8
8
|
*/
|
|
9
9
|
async function remove(argvs) {
|
|
10
10
|
const projectPath = argvs[2] || process.cwd();
|
|
@@ -13,7 +13,7 @@ async function remove(argvs) {
|
|
|
13
13
|
if (!objid) {
|
|
14
14
|
console.error();
|
|
15
15
|
console.error(chalk.red("Error: objid is required"));
|
|
16
|
-
console.error(chalk.yellow("Usage:
|
|
16
|
+
console.error(chalk.yellow("Usage: cloudcc delete object <projectPath> <objid>"));
|
|
17
17
|
console.error();
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
可通过以下命令读取文档:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
cloudcc doc object introduction
|
|
11
|
+
cloudcc doc object devguide
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
---
|
|
@@ -16,9 +16,9 @@ cc doc object devguide
|
|
|
16
16
|
## 2. 当前支持的命令
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
cloudcc get object <projectPath> [type]
|
|
20
|
+
cloudcc create object <projectPath> <label> [nameLabel]
|
|
21
|
+
cloudcc delete object <projectPath> <objid>
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
说明:
|
|
@@ -35,7 +35,7 @@ cc delete object <projectPath> <objid>
|
|
|
35
35
|
### 3.1 查询全部对象
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
|
|
38
|
+
cloudcc get object <projectPath>
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
返回标准对象和自定义对象的合并列表。
|
|
@@ -43,8 +43,8 @@ cc get object <projectPath>
|
|
|
43
43
|
### 3.2 按类型查询
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
cloudcc get object <projectPath> standard
|
|
47
|
+
cloudcc get object <projectPath> custom
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
常见含义:
|
|
@@ -59,7 +59,7 @@ cc get object <projectPath> custom
|
|
|
59
59
|
### 4.1 基本命令
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
|
-
|
|
62
|
+
cloudcc create object <projectPath> <label>
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
|
|
@@ -79,7 +79,7 @@ cc create object <projectPath> <label>
|
|
|
79
79
|
### 5.1 基本命令
|
|
80
80
|
|
|
81
81
|
```bash
|
|
82
|
-
|
|
82
|
+
cloudcc delete object <projectPath> <objid>
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
删除前建议:
|
|
@@ -91,7 +91,7 @@ cc delete object <projectPath> <objid>
|
|
|
91
91
|
|
|
92
92
|
## 6. 开发前检查
|
|
93
93
|
|
|
94
|
-
- 已完成 `
|
|
94
|
+
- 已完成 `cloudcc doc project devguide` 中的环境准备
|
|
95
95
|
- 项目根目录存在可用的 `cloudcc-cli.config.js`
|
|
96
96
|
- 当前环境密钥配置正确
|
|
97
97
|
- 已确认对象名称、API 名称、角色权限需求
|
package/src/pagelayout/create.js
CHANGED
|
@@ -57,13 +57,13 @@ async function cloneLayout(config, objId, layoutName, sourceLayoutId, isCloneDyn
|
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
59
|
* 创建页面布局
|
|
60
|
-
* 用法:
|
|
60
|
+
* 用法:cloudcc create pagelayout <projectPath> <objId> <layoutName> [sourceLayoutId] [isCloneDynamic]
|
|
61
61
|
* @param {Array} argvs - 命令行参数数组
|
|
62
62
|
* @returns {Promise<Object>} 创建结果
|
|
63
63
|
*/
|
|
64
64
|
async function create(argvs) {
|
|
65
65
|
try {
|
|
66
|
-
// 命令行参数格式:
|
|
66
|
+
// 命令行参数格式:cloudcc create pagelayout <projectPath> <objId> <layoutName> [sourceLayoutId] [isCloneDynamic]
|
|
67
67
|
const projectPath = argvs[2] || process.cwd();
|
|
68
68
|
const objId = argvs[3];
|
|
69
69
|
const layoutName = argvs[4];
|
|
@@ -73,10 +73,10 @@ async function create(argvs) {
|
|
|
73
73
|
if (!objId) {
|
|
74
74
|
console.error();
|
|
75
75
|
console.error(chalk.red("Error: 缺少对象 ID"));
|
|
76
|
-
console.error("用法:
|
|
76
|
+
console.error("用法: cloudcc create pagelayout <projectPath> <objId> <layoutName> [sourceLayoutId] [isCloneDynamic]");
|
|
77
77
|
console.error("示例:");
|
|
78
|
-
console.error('
|
|
79
|
-
console.error("
|
|
78
|
+
console.error(' cloudcc create pagelayout . 20267D1465464C5OB6m5 "课程表2"');
|
|
79
|
+
console.error(" cloudcc create pagelayout . 20267D1465464C5OB6m5 \"课程表2\" add20261DA7347CZPAUz");
|
|
80
80
|
console.error();
|
|
81
81
|
throw new Error("缺少必需参数: objId");
|
|
82
82
|
}
|
|
@@ -84,7 +84,7 @@ async function create(argvs) {
|
|
|
84
84
|
if (!layoutName) {
|
|
85
85
|
console.error();
|
|
86
86
|
console.error(chalk.red("Error: 缺少页面布局名称"));
|
|
87
|
-
console.error("用法:
|
|
87
|
+
console.error("用法: cloudcc create pagelayout <projectPath> <objId> <layoutName> [sourceLayoutId] [isCloneDynamic]");
|
|
88
88
|
console.error();
|
|
89
89
|
throw new Error("缺少必需参数: layoutName");
|
|
90
90
|
}
|
package/src/pagelayout/delete.js
CHANGED
|
@@ -4,22 +4,22 @@ const chalk = require("chalk");
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* 删除页面布局
|
|
7
|
-
* 用法:
|
|
7
|
+
* 用法:cloudcc delete pagelayout <projectPath> <layoutId>
|
|
8
8
|
* @param {Array} argvs - 命令行参数数组
|
|
9
9
|
* @returns {Promise<Object>} 删除结果
|
|
10
10
|
*/
|
|
11
11
|
async function deleteLayout(argvs) {
|
|
12
12
|
try {
|
|
13
|
-
// 命令行参数格式:
|
|
13
|
+
// 命令行参数格式:cloudcc delete pagelayout <projectPath> <layoutId>
|
|
14
14
|
const projectPath = argvs[2] || process.cwd();
|
|
15
15
|
const layoutId = argvs[3];
|
|
16
16
|
|
|
17
17
|
if (!layoutId) {
|
|
18
18
|
console.error();
|
|
19
19
|
console.error(chalk.red("Error: 缺少页面布局 ID"));
|
|
20
|
-
console.error("用法:
|
|
20
|
+
console.error("用法: cloudcc delete pagelayout <projectPath> <layoutId>");
|
|
21
21
|
console.error("示例:");
|
|
22
|
-
console.error("
|
|
22
|
+
console.error(" cloudcc delete pagelayout . add202610BD89F09XyGT");
|
|
23
23
|
console.error();
|
|
24
24
|
throw new Error("缺少必需参数: layoutId");
|
|
25
25
|
}
|
package/src/pagelayout/doc.js
CHANGED
|
@@ -21,14 +21,14 @@ function getDevGuideDoc() {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* cloudcc doc pagelayout <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 pagelayout 需要子命令:introduction 或 devguide");
|
|
32
32
|
}
|
|
33
33
|
if (key === "introduction") {
|
|
34
34
|
const content = getIntroductionDoc();
|