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.
- package/.cloudcc-cache.json +38 -0
- package/README.md +1435 -522
- package/bin/cc.js +7 -2
- package/bin/index.js +4 -0
- package/java/com/cloudcc/core/BaseException.java +100 -0
- package/java/com/cloudcc/core/BusiException.java +43 -0
- package/java/com/cloudcc/core/CCService.java +3 -1
- package/java/com/cloudcc/core/StringUtils.java +7 -0
- package/java/com/cloudcc/core/TimeUtil.java +33 -0
- package/java/com/cloudcc/core/UserInfo.java +9 -0
- package/package.json +7 -1
- package/pom.xml +1 -1
- package/skill/BACKEND_CODE.md +114 -0
- package/skill/CLI_CHEATSHEET.md +90 -0
- package/skill/INSTALL_AND_BOOTSTRAP.md +59 -0
- package/skill/OBJECTS_AND_FIELDS.md +120 -0
- package/skill/REQUIREMENTS_BREAKDOWN.md +98 -0
- package/skill/SKILL.md +33 -0
- package/skill/VUE_CUSTOM_COMPONENT.md +50 -0
- package/src/api/backend-sdk-java.md +427 -0
- package/src/api/ccdk-sdk.md +1039 -0
- package/src/application/create.js +114 -0
- package/src/application/get.js +13 -0
- package/src/application/index.js +8 -0
- package/src/classes/doc.js +486 -0
- package/src/classes/index.js +1 -0
- package/src/mcp/cliRunner.js +61 -0
- package/src/mcp/index.js +84 -12
- package/src/mcp/readme.md +6 -3
- package/src/mcp/tools/Application Creator/handler.js +78 -0
- package/src/mcp/tools/Approval/handler.js +34 -151
- package/src/mcp/tools/Class Creator/handler.js +18 -15
- package/src/mcp/tools/Class Detail Retriever/handler.js +8 -9
- package/src/mcp/tools/Class Editor Guide/handler.js +5 -19
- package/src/mcp/tools/Class List Retriever/handler.js +8 -3
- package/src/mcp/tools/Class Publisher/handler.js +7 -9
- package/src/mcp/tools/Class Puller/handler.js +6 -65
- package/src/mcp/tools/Client Script Detail Retriever/handler.js +12 -18
- package/src/mcp/tools/Client Script Editor Guide/handler.js +9 -605
- package/src/mcp/tools/Client Script List Retriever/handler.js +30 -33
- package/src/mcp/tools/Client Script Publisher/handler.js +12 -11
- package/src/mcp/tools/Client Script Puller/handler.js +23 -30
- package/src/mcp/tools/CloudCC Development Overview/handler.js +11 -5
- package/src/mcp/tools/Component Creator/handler.js +12 -11
- package/src/mcp/tools/Component Detail Retriever/handler.js +12 -9
- package/src/mcp/tools/Component Editor Guide/handler.js +5 -22
- package/src/mcp/tools/Component List Retriever/handler.js +21 -18
- package/src/mcp/tools/Component Publisher/handler.js +25 -3
- package/src/mcp/tools/Component Puller/handler.js +13 -16
- package/src/mcp/tools/Dev Environment Creator/handler.js +5 -72
- package/src/mcp/tools/Dev Environment Validator/handler.js +5 -66
- package/src/mcp/tools/Developer Key Setup Guide/handler.js +11 -20
- package/src/mcp/tools/JSP Migrator/handler.js +842 -0
- package/src/mcp/tools/Menu Creator/handler.js +86 -0
- package/src/mcp/tools/Object Creator/handler.js +14 -6
- package/src/mcp/tools/Object Fields Creator/handler.js +9 -10
- package/src/mcp/tools/Object Fields Retriever/handler.js +6 -3
- package/src/mcp/tools/Object List Retriever/handler.js +10 -7
- package/src/mcp/tools/Scheduled Class Creator/handler.js +12 -16
- package/src/mcp/tools/Scheduled Class Detail Retriever/handler.js +7 -9
- package/src/mcp/tools/Scheduled Class List Retriever/handler.js +21 -23
- package/src/mcp/tools/Scheduled Class Publisher/handler.js +7 -9
- package/src/mcp/tools/Scheduled Class Puller/handler.js +6 -70
- package/src/mcp/tools/Trigger Creator/handler.js +12 -20
- package/src/mcp/tools/Trigger Detail Retriever/handler.js +7 -9
- package/src/mcp/tools/Trigger Editor Guide/handler.js +10 -35
- package/src/mcp/tools/Trigger List Retriever/handler.js +12 -4
- package/src/mcp/tools/Trigger Publisher/handler.js +8 -11
- package/src/mcp/tools/Trigger Puller/handler.js +12 -17
- package/src/menu/common.js +16 -0
- package/src/menu/create-object.js +94 -0
- package/src/menu/create-page.js +108 -0
- package/src/menu/create-script.js +108 -0
- package/src/menu/create-site.js +108 -0
- package/src/menu/create.js +54 -0
- package/src/menu/index.js +7 -0
- package/src/plugin/doc.js +801 -0
- package/src/plugin/index.js +1 -0
- package/src/plugin/pull.js +3 -0
- package/src/project/doc.js +378 -0
- package/src/project/index.js +1 -0
- package/src/script/doc.js +259 -0
- package/src/script/index.js +1 -0
- package/src/timer/index.js +1 -0
- package/src/triggers/doc.js +342 -0
- package/src/triggers/index.js +5 -0
- package/target/classes/com/cloudcc/core/BaseException.class +0 -0
- package/target/classes/com/cloudcc/core/BusiException.class +0 -0
- package/target/classes/com/cloudcc/core/CCService.class +0 -0
- package/target/classes/com/cloudcc/core/StringUtils.class +0 -0
- package/target/classes/com/cloudcc/core/TimeUtil.class +0 -0
- package/target/classes/com/cloudcc/core/UserInfo.class +0 -0
- package/template/lib/ccopenapi-0.0.4.jar +0 -0
- package/test/application.cli.test.js +30 -0
- package/test/classes.cli.test.js +121 -0
- package/test/fields.cli.test.js +69 -0
- package/test/mcp.cli.test.js +21 -0
- package/test/menu.cli.test.js +41 -0
- package/test/object.cli.test.js +64 -0
- package/test/plugin.cli.test.js +109 -0
- package/test/script.cli.test.js +101 -0
- package/test/timer.cli.test.js +107 -0
- package/test/trigger.cli.test.js +146 -0
- package/.vscode/settings.json +0 -3
- package/bin/mcp-svc.js +0 -13
- package/src/mcp/MCP/345/234/272/346/231/257/346/250/241/346/213/237.md +0 -8
- package/src/mcp/index-sse-svc.js +0 -126
- package/src/mcp/index-streamable-svc.js +0 -180
- package/src/mcp/tools/Class Detail Retriever/prompt.js +0 -37
- package/src/mcp/tools/Class Editor Guide/prompt.js +0 -468
- package/src/mcp/tools/Class Publisher/prompt.js +0 -40
- package/src/mcp/tools/Class Puller/prompt.js +0 -49
- package/src/mcp/tools/Client Script Creator/handler.js +0 -179
- package/src/mcp/tools/CloudCC Development Overview/prompt.js +0 -870
- package/src/mcp/tools/Component Editor Guide/prompt.js +0 -519
- package/src/mcp/tools/Component Publisher/prompt.js +0 -659
- package/src/mcp/tools/Dev Environment Creator/prompt.js +0 -273
- package/src/mcp/tools/Dev Environment Validator/prompt.js +0 -193
- package/src/mcp/tools/Developer Key Setup Guide/prompt.js +0 -71
- package/src/mcp/tools/Object Fields Retriever/prompt.js +0 -10
- package/src/mcp/tools/Object List Retriever/prompt.js +0 -10
- package/src/mcp/tools/ccdk/fetcher.js +0 -18
- package/src/mcp/tools/ccdk/handler.js +0 -98
- package/src/mcp/tools/ccdk/prompt.js +0 -453
- package/target/ccopenapi-0.0.3-classes.jar +0 -0
- package/target/ccopenapi-0.0.3.jar +0 -0
- package/target/maven-archiver/pom.properties +0 -3
- package/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +0 -18
- package/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +0 -19
- package/template/lib/ccopenapi-0.0.3.jar +0 -0
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* 查询触发器列表
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const { runCcJsonCommand } = require('../../cliRunner');
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* 获取触发器列表
|
|
@@ -24,9 +25,16 @@ async function listTriggers({ triggerName = '', targetObjectId = '', projectPath
|
|
|
24
25
|
rptorder: ''
|
|
25
26
|
};
|
|
26
27
|
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
const resolvedPath = path.resolve(projectPath);
|
|
29
|
+
const run = runCcJsonCommand(['get', 'triggers', encodeURI(JSON.stringify(queryBody)), resolvedPath], { cwd: resolvedPath });
|
|
30
|
+
if (!run.success) {
|
|
31
|
+
return {
|
|
32
|
+
content: [
|
|
33
|
+
{ type: 'text', text: `获取触发器列表失败: ${run.detail || 'cc 命令执行失败'}` }
|
|
34
|
+
]
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const result = run.data || [];
|
|
30
38
|
return {
|
|
31
39
|
content: [
|
|
32
40
|
{
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* 发布触发器到服务器
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const { runCcCommand, buildRunDetail } = require('../../cliRunner');
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* 发布触发器到服务器
|
|
@@ -13,17 +14,13 @@ const publishTriggerModule = require('../../../triggers/publish');
|
|
|
13
14
|
*/
|
|
14
15
|
async function publishTrigger({ triggerPath, projectPath = process.cwd() }) {
|
|
15
16
|
try {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const argvs = ['', '', triggerPath];
|
|
21
|
-
await publishTriggerModule(argvs);
|
|
22
|
-
const triggerName = triggerPath.split("/")[1];
|
|
23
|
-
return { content: [{ type: 'text', text: `✓ 发布成功!触发器 ${triggerName} 已发布到服务器` }] };
|
|
24
|
-
} finally {
|
|
25
|
-
process.chdir(originalCwd);
|
|
17
|
+
const resolvedPath = path.resolve(projectPath);
|
|
18
|
+
const run = runCcCommand(['publish', 'triggers', triggerPath], { cwd: resolvedPath });
|
|
19
|
+
if (!run.success) {
|
|
20
|
+
return { content: [{ type: 'text', text: `✗ 发布失败: ${buildRunDetail(run) || 'cc 命令执行失败'}` }] };
|
|
26
21
|
}
|
|
22
|
+
const triggerName = triggerPath.split("/")[1];
|
|
23
|
+
return { content: [{ type: 'text', text: `✓ 发布成功!触发器 ${triggerName} 已发布到服务器` }] };
|
|
27
24
|
} catch (error) {
|
|
28
25
|
return { content: [{ type: 'text', text: `✗ 发布失败: ${error.message}` }] };
|
|
29
26
|
}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* 从服务器拉取触发器
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const { runCcCommand, buildRunDetail } = require('../../cliRunner');
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* 从服务器拉取触发器
|
|
@@ -13,23 +14,17 @@ const pullListModule = require('../../../triggers/pullList');
|
|
|
13
14
|
*/
|
|
14
15
|
async function pullTrigger({ id, projectPath = process.cwd() }) {
|
|
15
16
|
try {
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
const argvs = ['', '', id, projectPath];
|
|
22
|
-
await pullListModule(argvs, true);
|
|
23
|
-
|
|
24
|
-
return {
|
|
25
|
-
content: [{
|
|
26
|
-
type: 'text',
|
|
27
|
-
text: `✓ 拉取成功!已从服务器拉取触发器(ID: ${id})并在本地创建/更新`
|
|
28
|
-
}]
|
|
29
|
-
};
|
|
30
|
-
} finally {
|
|
31
|
-
process.chdir(originalCwd);
|
|
17
|
+
const resolvedPath = path.resolve(projectPath);
|
|
18
|
+
const run = runCcCommand(['pullList', 'triggers', id, resolvedPath], { cwd: resolvedPath });
|
|
19
|
+
if (!run.success) {
|
|
20
|
+
return { content: [{ type: 'text', text: `✗ 拉取失败: ${buildRunDetail(run) || 'cc 命令执行失败'}` }] };
|
|
32
21
|
}
|
|
22
|
+
return {
|
|
23
|
+
content: [{
|
|
24
|
+
type: 'text',
|
|
25
|
+
text: `✓ 拉取成功!已从服务器拉取触发器(ID: ${id})并在本地创建/更新`
|
|
26
|
+
}]
|
|
27
|
+
};
|
|
33
28
|
} catch (error) {
|
|
34
29
|
return { content: [{ type: 'text', text: `✗ 拉取失败: ${error.message}` }] };
|
|
35
30
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 构建公共的菜单字段
|
|
3
|
+
*/
|
|
4
|
+
function buildCommonMenuFields(tabName, tabStyle, mobileimg, cloudccservicetab) {
|
|
5
|
+
const commonFields = {
|
|
6
|
+
tabName: tabName,
|
|
7
|
+
tabStyle: tabStyle,
|
|
8
|
+
mobileimg: mobileimg,
|
|
9
|
+
cloudccservicetab: cloudccservicetab,
|
|
10
|
+
};
|
|
11
|
+
return commonFields;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
module.exports = {
|
|
15
|
+
buildCommonMenuFields
|
|
16
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const { postClass } = require("../../utils/http")
|
|
2
|
+
const { getPackageJson } = require("../../utils/config");
|
|
3
|
+
const briefGet = require("../brief/get");
|
|
4
|
+
const objectGet = require("../object/get");
|
|
5
|
+
const chalk = require('chalk');
|
|
6
|
+
const { buildCommonMenuFields } = require('./common');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 创建自定义对象菜单
|
|
10
|
+
* @param {Array} argvs - 命令行参数数组
|
|
11
|
+
* @returns {Promise<Object>} 创建结果
|
|
12
|
+
*/
|
|
13
|
+
async function createObjectMenu(argvs) {
|
|
14
|
+
try {
|
|
15
|
+
// 命令行参数格式:cc create menu object <path> <objectId> <tabName>
|
|
16
|
+
// argvs: ['create', 'menu', 'object', '.', 'objectId', 'tabName', ...]
|
|
17
|
+
let path = argvs[3]; // 路径 (argvs[3])
|
|
18
|
+
let objectId = argvs[4]; // 对象ID (p1)
|
|
19
|
+
let tabName = argvs[5]; // 标签名称
|
|
20
|
+
let tabStyle = "cloudtab145"; // 标签样式图标,默认 cloudtab145
|
|
21
|
+
let mobileimg = "cloudcc01"; // 移动端图标,默认 cloudcc01
|
|
22
|
+
let cloudccservicetab = "cloudccservicetab_1"; // 服务标签图标,默认 cloudccservicetab_1
|
|
23
|
+
|
|
24
|
+
if (!objectId || !tabName) {
|
|
25
|
+
console.error();
|
|
26
|
+
console.error(chalk.red('Error: 缺少必需参数'));
|
|
27
|
+
console.error('用法: cc create menu object <path> <objectId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
28
|
+
console.error();
|
|
29
|
+
throw new Error('缺少必需参数: objectId 和 tabName');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let config = await getPackageJson(path);
|
|
33
|
+
|
|
34
|
+
// 从 brief/get 获取角色ID列表
|
|
35
|
+
// briefGet 期望 argvs[2] 是 path,所以需要调整参数数组
|
|
36
|
+
const briefArgvs = [argvs[0], argvs[1], path]; // ['create', 'menu', path]
|
|
37
|
+
let briefData = await briefGet(briefArgvs);
|
|
38
|
+
|
|
39
|
+
if (!briefData.success) {
|
|
40
|
+
console.error("获取角色列表失败:", briefData.message);
|
|
41
|
+
throw new Error("获取角色列表失败");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 提取所有角色的 ID 列表,格式为 "profileId_show"
|
|
45
|
+
const profileIds = briefData.data.map(profile => `${profile.id}_show`);
|
|
46
|
+
|
|
47
|
+
// 构建公共字段
|
|
48
|
+
const commonFields = buildCommonMenuFields(tabName, tabStyle, mobileimg, cloudccservicetab);
|
|
49
|
+
|
|
50
|
+
// 构建请求体
|
|
51
|
+
const requestBody = {
|
|
52
|
+
ed: "ed",
|
|
53
|
+
visited_0: "1",
|
|
54
|
+
visited_1: "1",
|
|
55
|
+
visited_2: "1",
|
|
56
|
+
allOrSome: "some",
|
|
57
|
+
type: "object",
|
|
58
|
+
p1: objectId,
|
|
59
|
+
...commonFields,
|
|
60
|
+
profileIds: profileIds,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// 显示创建进度
|
|
64
|
+
console.error();
|
|
65
|
+
console.error(chalk.green('Creating object menu, please wait...'));
|
|
66
|
+
console.error();
|
|
67
|
+
|
|
68
|
+
// 发送请求到服务器
|
|
69
|
+
const result = await postClass(
|
|
70
|
+
config.setupSvc + "/api/customTab/tabSetDone",
|
|
71
|
+
requestBody,
|
|
72
|
+
config.accessToken
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
// API 返回结构中, result 字段决定调用是否成功
|
|
76
|
+
if (result && result.result) {
|
|
77
|
+
console.error();
|
|
78
|
+
console.error(chalk.green('Success!'));
|
|
79
|
+
console.error();
|
|
80
|
+
return result;
|
|
81
|
+
} else {
|
|
82
|
+
const msg = result && result.returnInfo ? result.returnInfo : 'Unknown error';
|
|
83
|
+
console.error();
|
|
84
|
+
console.error(chalk.red('Error:' + msg));
|
|
85
|
+
throw new Error('Create Object Menu Failed: ' + msg);
|
|
86
|
+
}
|
|
87
|
+
} catch (error) {
|
|
88
|
+
console.error();
|
|
89
|
+
console.error(chalk.red("自定义对象菜单创建失败:"), error);
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
module.exports = createObjectMenu;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const { postClass } = require("../../utils/http")
|
|
2
|
+
const { getPackageJson } = require("../../utils/config");
|
|
3
|
+
const briefGet = require("../brief/get");
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const { buildCommonMenuFields } = require('./common');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 创建自定义页面菜单
|
|
9
|
+
* @param {Array} argvs - 命令行参数数组
|
|
10
|
+
* @returns {Promise<Object>} 创建结果
|
|
11
|
+
*/
|
|
12
|
+
async function createPageMenu(argvs) {
|
|
13
|
+
try {
|
|
14
|
+
// 命令行参数格式:cc create menu page <path> <pageId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
15
|
+
// argvs: ['create', 'menu', 'page', '.', 'pageId', 'tabName', ...]
|
|
16
|
+
let path = argvs[3]; // 路径 (argvs[3])
|
|
17
|
+
let pageId = argvs[4]; // 页面ID (p1)
|
|
18
|
+
let tabName = argvs[5]; // 标签名称
|
|
19
|
+
let tabStyle = argvs[6] || "cloudtab145"; // 标签样式图标,默认 cloudtab145
|
|
20
|
+
let mobileimg = argvs[7] || "cloudcc01"; // 移动端图标,默认 cloudcc01
|
|
21
|
+
let cloudccservicetab = argvs[8] || "cloudccservicetab_1"; // 服务标签图标,默认 cloudccservicetab_1
|
|
22
|
+
|
|
23
|
+
if (!pageId || !tabName) {
|
|
24
|
+
console.error();
|
|
25
|
+
console.error(chalk.red('Error: 缺少必需参数'));
|
|
26
|
+
console.error('用法: cc create menu page <path> <pageId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
27
|
+
console.error();
|
|
28
|
+
throw new Error('缺少必需参数: pageId 和 tabName');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let config = await getPackageJson(path);
|
|
32
|
+
|
|
33
|
+
// 从 brief/get 获取角色ID列表
|
|
34
|
+
// briefGet 期望 argvs[2] 是 path,所以需要调整参数数组
|
|
35
|
+
const briefArgvs = [argvs[0], argvs[1], path]; // ['create', 'menu', path]
|
|
36
|
+
let briefData = await briefGet(briefArgvs);
|
|
37
|
+
|
|
38
|
+
if (!briefData.success) {
|
|
39
|
+
console.error("获取角色列表失败:", briefData.message);
|
|
40
|
+
throw new Error("获取角色列表失败");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 提取所有角色的 ID 列表,格式为 "profileId_show"
|
|
44
|
+
const profileIds = briefData.data.map(profile => `${profile.id}_show`);
|
|
45
|
+
|
|
46
|
+
// 构建公共字段
|
|
47
|
+
const commonFields = buildCommonMenuFields(tabName, tabStyle, mobileimg, cloudccservicetab);
|
|
48
|
+
|
|
49
|
+
// 构建请求体
|
|
50
|
+
const requestBody = {
|
|
51
|
+
ed: "ed",
|
|
52
|
+
visited_0: "1",
|
|
53
|
+
visited_1: "1",
|
|
54
|
+
visited_2: "1",
|
|
55
|
+
allOrSome: "some",
|
|
56
|
+
type: "page",
|
|
57
|
+
p1: pageId,
|
|
58
|
+
p1_origin: {
|
|
59
|
+
label: "label.import.index.page",
|
|
60
|
+
fieldKey: "p1",
|
|
61
|
+
field: "Select",
|
|
62
|
+
required: "right",
|
|
63
|
+
hint: "label.customer.tab.step1.selectonepage",
|
|
64
|
+
rules: [
|
|
65
|
+
{
|
|
66
|
+
required: true,
|
|
67
|
+
message: "请选择页面",
|
|
68
|
+
trigger: "blur"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
value: pageId
|
|
72
|
+
},
|
|
73
|
+
...commonFields,
|
|
74
|
+
profileIds: profileIds,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// 显示创建进度
|
|
78
|
+
console.error();
|
|
79
|
+
console.error(chalk.green('Creating page menu, please wait...'));
|
|
80
|
+
console.error();
|
|
81
|
+
|
|
82
|
+
// 发送请求到服务器
|
|
83
|
+
const result = await postClass(
|
|
84
|
+
config.setupSvc + "/api/customTab/tabSetDone",
|
|
85
|
+
requestBody,
|
|
86
|
+
config.accessToken
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
// API 返回结构中, result 字段决定调用是否成功
|
|
90
|
+
if (result && result.result) {
|
|
91
|
+
console.error();
|
|
92
|
+
console.error(chalk.green('Success!'));
|
|
93
|
+
console.error();
|
|
94
|
+
return result;
|
|
95
|
+
} else {
|
|
96
|
+
const msg = result && result.returnInfo ? result.returnInfo : 'Unknown error';
|
|
97
|
+
console.error();
|
|
98
|
+
console.error(chalk.red('Error:' + msg));
|
|
99
|
+
throw new Error('Create Page Menu Failed: ' + msg);
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error();
|
|
103
|
+
console.error(chalk.red("自定义页面菜单创建失败:"), error);
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
module.exports = createPageMenu;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const { postClass } = require("../../utils/http")
|
|
2
|
+
const { getPackageJson } = require("../../utils/config");
|
|
3
|
+
const briefGet = require("../brief/get");
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const { buildCommonMenuFields } = require('./common');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 创建自定义脚本菜单
|
|
9
|
+
* @param {Array} argvs - 命令行参数数组
|
|
10
|
+
* @returns {Promise<Object>} 创建结果
|
|
11
|
+
*/
|
|
12
|
+
async function createScriptMenu(argvs) {
|
|
13
|
+
try {
|
|
14
|
+
// 命令行参数格式:cc create menu script <path> <scriptId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
15
|
+
// argvs: ['create', 'menu', 'script', '.', 'scriptId', 'tabName', ...]
|
|
16
|
+
let path = argvs[3]; // 路径 (argvs[3])
|
|
17
|
+
let scriptId = argvs[4]; // 脚本ID (p1)
|
|
18
|
+
let tabName = argvs[5]; // 标签名称
|
|
19
|
+
let tabStyle = argvs[6] || "cloudtab145"; // 标签样式图标,默认 cloudtab145
|
|
20
|
+
let mobileimg = argvs[7] || "cloudcc01"; // 移动端图标,默认 cloudcc01
|
|
21
|
+
let cloudccservicetab = argvs[8] || "cloudccservicetab_1"; // 服务标签图标,默认 cloudccservicetab_1
|
|
22
|
+
|
|
23
|
+
if (!scriptId || !tabName) {
|
|
24
|
+
console.error();
|
|
25
|
+
console.error(chalk.red('Error: 缺少必需参数'));
|
|
26
|
+
console.error('用法: cc create menu script <path> <scriptId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
27
|
+
console.error();
|
|
28
|
+
throw new Error('缺少必需参数: scriptId 和 tabName');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let config = await getPackageJson(path);
|
|
32
|
+
|
|
33
|
+
// 从 brief/get 获取角色ID列表
|
|
34
|
+
// briefGet 期望 argvs[2] 是 path,所以需要调整参数数组
|
|
35
|
+
const briefArgvs = [argvs[0], argvs[1], path]; // ['create', 'menu', path]
|
|
36
|
+
let briefData = await briefGet(briefArgvs);
|
|
37
|
+
|
|
38
|
+
if (!briefData.success) {
|
|
39
|
+
console.error("获取角色列表失败:", briefData.message);
|
|
40
|
+
throw new Error("获取角色列表失败");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 提取所有角色的 ID 列表,格式为 "profileId_show"
|
|
44
|
+
const profileIds = briefData.data.map(profile => `${profile.id}_show`);
|
|
45
|
+
|
|
46
|
+
// 构建公共字段
|
|
47
|
+
const commonFields = buildCommonMenuFields(tabName, tabStyle, mobileimg, cloudccservicetab);
|
|
48
|
+
|
|
49
|
+
// 构建请求体
|
|
50
|
+
const requestBody = {
|
|
51
|
+
ed: "ed",
|
|
52
|
+
visited_0: "1",
|
|
53
|
+
visited_1: "1",
|
|
54
|
+
visited_2: "1",
|
|
55
|
+
allOrSome: "some",
|
|
56
|
+
type: "script",
|
|
57
|
+
p1: scriptId,
|
|
58
|
+
p1_origin: {
|
|
59
|
+
label: "label.import.index.script",
|
|
60
|
+
fieldKey: "p1",
|
|
61
|
+
field: "Select",
|
|
62
|
+
required: "right",
|
|
63
|
+
hint: "label.customer.tab.step1.selectonescript",
|
|
64
|
+
rules: [
|
|
65
|
+
{
|
|
66
|
+
required: true,
|
|
67
|
+
message: "请选择脚本",
|
|
68
|
+
trigger: "blur"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
value: scriptId
|
|
72
|
+
},
|
|
73
|
+
...commonFields,
|
|
74
|
+
profileIds: profileIds,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// 显示创建进度
|
|
78
|
+
console.error();
|
|
79
|
+
console.error(chalk.green('Creating script menu, please wait...'));
|
|
80
|
+
console.error();
|
|
81
|
+
|
|
82
|
+
// 发送请求到服务器
|
|
83
|
+
const result = await postClass(
|
|
84
|
+
config.setupSvc + "/api/customTab/tabSetDone",
|
|
85
|
+
requestBody,
|
|
86
|
+
config.accessToken
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
// API 返回结构中, result 字段决定调用是否成功
|
|
90
|
+
if (result && result.result) {
|
|
91
|
+
console.error();
|
|
92
|
+
console.error(chalk.green('Success!'));
|
|
93
|
+
console.error();
|
|
94
|
+
return result;
|
|
95
|
+
} else {
|
|
96
|
+
const msg = result && result.returnInfo ? result.returnInfo : 'Unknown error';
|
|
97
|
+
console.error();
|
|
98
|
+
console.error(chalk.red('Error:' + msg));
|
|
99
|
+
throw new Error('Create Script Menu Failed: ' + msg);
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error();
|
|
103
|
+
console.error(chalk.red("自定义脚本菜单创建失败:"), error);
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
module.exports = createScriptMenu;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const { postClass } = require("../../utils/http")
|
|
2
|
+
const { getPackageJson } = require("../../utils/config");
|
|
3
|
+
const briefGet = require("../brief/get");
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const { buildCommonMenuFields } = require('./common');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 创建站点菜单
|
|
9
|
+
* @param {Array} argvs - 命令行参数数组
|
|
10
|
+
* @returns {Promise<Object>} 创建结果
|
|
11
|
+
*/
|
|
12
|
+
async function createSiteMenu(argvs) {
|
|
13
|
+
try {
|
|
14
|
+
// 命令行参数格式:cc create menu site <path> <siteId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
15
|
+
// argvs: ['create', 'menu', 'site', '.', 'siteId', 'tabName', ...]
|
|
16
|
+
let path = argvs[3]; // 路径 (argvs[3])
|
|
17
|
+
let siteId = argvs[4]; // 站点ID (p1)
|
|
18
|
+
let tabName = argvs[5]; // 标签名称
|
|
19
|
+
let tabStyle = argvs[6] || "cloudtab145"; // 标签样式图标,默认 cloudtab145
|
|
20
|
+
let mobileimg = argvs[7] || "cloudcc01"; // 移动端图标,默认 cloudcc01
|
|
21
|
+
let cloudccservicetab = argvs[8] || "cloudccservicetab_1"; // 服务标签图标,默认 cloudccservicetab_1
|
|
22
|
+
|
|
23
|
+
if (!siteId || !tabName) {
|
|
24
|
+
console.error();
|
|
25
|
+
console.error(chalk.red('Error: 缺少必需参数'));
|
|
26
|
+
console.error('用法: cc create menu site <path> <siteId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
27
|
+
console.error();
|
|
28
|
+
throw new Error('缺少必需参数: siteId 和 tabName');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let config = await getPackageJson(path);
|
|
32
|
+
|
|
33
|
+
// 从 brief/get 获取角色ID列表
|
|
34
|
+
// briefGet 期望 argvs[2] 是 path,所以需要调整参数数组
|
|
35
|
+
const briefArgvs = [argvs[0], argvs[1], path]; // ['create', 'menu', path]
|
|
36
|
+
let briefData = await briefGet(briefArgvs);
|
|
37
|
+
|
|
38
|
+
if (!briefData.success) {
|
|
39
|
+
console.error("获取角色列表失败:", briefData.message);
|
|
40
|
+
throw new Error("获取角色列表失败");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 提取所有角色的 ID 列表,格式为 "profileId_show"
|
|
44
|
+
const profileIds = briefData.data.map(profile => `${profile.id}_show`);
|
|
45
|
+
|
|
46
|
+
// 构建公共字段
|
|
47
|
+
const commonFields = buildCommonMenuFields(tabName, tabStyle, mobileimg, cloudccservicetab);
|
|
48
|
+
|
|
49
|
+
// 构建请求体
|
|
50
|
+
const requestBody = {
|
|
51
|
+
ed: "ed",
|
|
52
|
+
visited_0: "1",
|
|
53
|
+
visited_1: "1",
|
|
54
|
+
visited_2: "1",
|
|
55
|
+
allOrSome: "some",
|
|
56
|
+
type: "site",
|
|
57
|
+
p1: siteId,
|
|
58
|
+
p1_origin: {
|
|
59
|
+
label: "label.import.index.site",
|
|
60
|
+
fieldKey: "p1",
|
|
61
|
+
field: "Select",
|
|
62
|
+
required: "right",
|
|
63
|
+
hint: "label.customer.tab.step1.selectonesite",
|
|
64
|
+
rules: [
|
|
65
|
+
{
|
|
66
|
+
required: true,
|
|
67
|
+
message: "请选择站点",
|
|
68
|
+
trigger: "blur"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
value: siteId
|
|
72
|
+
},
|
|
73
|
+
...commonFields,
|
|
74
|
+
profileIds: profileIds,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// 显示创建进度
|
|
78
|
+
console.error();
|
|
79
|
+
console.error(chalk.green('Creating site menu, please wait...'));
|
|
80
|
+
console.error();
|
|
81
|
+
|
|
82
|
+
// 发送请求到服务器
|
|
83
|
+
const result = await postClass(
|
|
84
|
+
config.setupSvc + "/api/customTab/tabSetDone",
|
|
85
|
+
requestBody,
|
|
86
|
+
config.accessToken
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
// API 返回结构中, result 字段决定调用是否成功
|
|
90
|
+
if (result && result.result) {
|
|
91
|
+
console.error();
|
|
92
|
+
console.error(chalk.green('Success!'));
|
|
93
|
+
console.error();
|
|
94
|
+
return result;
|
|
95
|
+
} else {
|
|
96
|
+
const msg = result && result.returnInfo ? result.returnInfo : 'Unknown error';
|
|
97
|
+
console.error();
|
|
98
|
+
console.error(chalk.red('Error:' + msg));
|
|
99
|
+
throw new Error('Create Site Menu Failed: ' + msg);
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error();
|
|
103
|
+
console.error(chalk.red("站点菜单创建失败:"), error);
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
module.exports = createSiteMenu;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const createObjectMenu = require('./create-object');
|
|
3
|
+
const createPageMenu = require('./create-page');
|
|
4
|
+
const createScriptMenu = require('./create-script');
|
|
5
|
+
const createSiteMenu = require('./create-site');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 创建自定义菜单(标签页)
|
|
9
|
+
* 支持类型:object(自定义对象)、page(自定义页面)、script(自定义脚本)、site(站点)
|
|
10
|
+
* 命令格式:cc create menu <type> <path> <resourceId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
11
|
+
* @param {Array} argvs - 命令行参数数组
|
|
12
|
+
* @returns {Promise<Object>} 创建结果
|
|
13
|
+
*/
|
|
14
|
+
async function create(argvs) {
|
|
15
|
+
try {
|
|
16
|
+
// 命令行参数格式:cc create menu <type> <path> <resourceId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
17
|
+
// argvs: ['create', 'menu', 'object', '.', 'resourceId', 'tabName', ...]
|
|
18
|
+
// type: object, page, script, site
|
|
19
|
+
let menuType = argvs[2]; // 菜单类型 (argvs[2])
|
|
20
|
+
|
|
21
|
+
// 验证菜单类型
|
|
22
|
+
const validTypes = ['object', 'page', 'script', 'site'];
|
|
23
|
+
if (!validTypes.includes(menuType)) {
|
|
24
|
+
console.error();
|
|
25
|
+
console.error(chalk.red('Error: 无效的菜单类型'));
|
|
26
|
+
console.error(`支持的菜单类型: ${validTypes.join(', ')}`);
|
|
27
|
+
console.error('用法: cc create menu <type> <path> <resourceId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
28
|
+
console.error('示例:');
|
|
29
|
+
console.error(' cc create menu object . <objectId> "我的对象菜单"');
|
|
30
|
+
console.error(' cc create menu page . <pageId> "我的页面菜单"');
|
|
31
|
+
console.error(' cc create menu script . <scriptId> "我的脚本菜单"');
|
|
32
|
+
console.error(' cc create menu site . <siteId> "我的站点菜单"');
|
|
33
|
+
console.error();
|
|
34
|
+
throw new Error(`无效的菜单类型: ${menuType}`);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// 根据菜单类型路由到不同的创建函数
|
|
38
|
+
if (menuType === 'object') {
|
|
39
|
+
return await createObjectMenu(argvs);
|
|
40
|
+
} else if (menuType === 'page') {
|
|
41
|
+
return await createPageMenu(argvs);
|
|
42
|
+
} else if (menuType === 'script') {
|
|
43
|
+
return await createScriptMenu(argvs);
|
|
44
|
+
} else if (menuType === 'site') {
|
|
45
|
+
return await createSiteMenu(argvs);
|
|
46
|
+
}
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.error();
|
|
49
|
+
console.error(chalk.red("菜单创建失败:"), error);
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
module.exports = create;
|