@optima-chat/commerce-cli 1.17.1 → 1.18.0
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/skills/commerce-storefront/SKILL.md +54 -132
- package/dist/commands/homepage/patch-settings.d.ts.map +1 -1
- package/dist/commands/homepage/patch-settings.js +3 -0
- package/dist/commands/homepage/patch-settings.js.map +1 -1
- package/dist/commands/order/ship.d.ts.map +1 -1
- package/dist/commands/order/ship.js +59 -21
- package/dist/commands/order/ship.js.map +1 -1
- package/dist/commands/pdp/add.d.ts +3 -0
- package/dist/commands/pdp/add.d.ts.map +1 -0
- package/dist/commands/pdp/add.js +234 -0
- package/dist/commands/pdp/add.js.map +1 -0
- package/dist/commands/pdp/edit.d.ts +3 -0
- package/dist/commands/pdp/edit.d.ts.map +1 -0
- package/dist/commands/pdp/edit.js +258 -0
- package/dist/commands/pdp/edit.js.map +1 -0
- package/dist/commands/pdp/hide.d.ts +3 -0
- package/dist/commands/pdp/hide.d.ts.map +1 -0
- package/dist/commands/pdp/hide.js +191 -0
- package/dist/commands/pdp/hide.js.map +1 -0
- package/dist/commands/pdp/index.d.ts +4 -0
- package/dist/commands/pdp/index.d.ts.map +1 -0
- package/dist/commands/pdp/index.js +19 -0
- package/dist/commands/pdp/index.js.map +1 -0
- package/dist/commands/pdp/reorder.d.ts +3 -0
- package/dist/commands/pdp/reorder.d.ts.map +1 -0
- package/dist/commands/pdp/reorder.js +117 -0
- package/dist/commands/pdp/reorder.js.map +1 -0
- package/dist/commands/pdp/reset.d.ts +3 -0
- package/dist/commands/pdp/reset.d.ts.map +1 -0
- package/dist/commands/pdp/reset.js +123 -0
- package/dist/commands/pdp/reset.js.map +1 -0
- package/dist/commands/pdp/show.d.ts +3 -0
- package/dist/commands/pdp/show.d.ts.map +1 -0
- package/dist/commands/pdp/show.js +225 -0
- package/dist/commands/pdp/show.js.map +1 -0
- package/dist/commands/pdp/translate.d.ts +3 -0
- package/dist/commands/pdp/translate.d.ts.map +1 -0
- package/dist/commands/pdp/translate.js +258 -0
- package/dist/commands/pdp/translate.js.map +1 -0
- package/dist/commands/pdp/utils.d.ts +34 -0
- package/dist/commands/pdp/utils.d.ts.map +1 -0
- package/dist/commands/pdp/utils.js +85 -0
- package/dist/commands/pdp/utils.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/product-page/create.d.ts +0 -3
- package/dist/commands/product-page/create.d.ts.map +0 -1
- package/dist/commands/product-page/create.js +0 -218
- package/dist/commands/product-page/create.js.map +0 -1
- package/dist/commands/product-page/delete.d.ts +0 -3
- package/dist/commands/product-page/delete.d.ts.map +0 -1
- package/dist/commands/product-page/delete.js +0 -86
- package/dist/commands/product-page/delete.js.map +0 -1
- package/dist/commands/product-page/hide.d.ts +0 -3
- package/dist/commands/product-page/hide.d.ts.map +0 -1
- package/dist/commands/product-page/hide.js +0 -82
- package/dist/commands/product-page/hide.js.map +0 -1
- package/dist/commands/product-page/index.d.ts +0 -4
- package/dist/commands/product-page/index.d.ts.map +0 -1
- package/dist/commands/product-page/index.js +0 -23
- package/dist/commands/product-page/index.js.map +0 -1
- package/dist/commands/product-page/list.d.ts +0 -3
- package/dist/commands/product-page/list.d.ts.map +0 -1
- package/dist/commands/product-page/list.js +0 -164
- package/dist/commands/product-page/list.js.map +0 -1
- package/dist/commands/product-page/product/create.d.ts +0 -3
- package/dist/commands/product-page/product/create.d.ts.map +0 -1
- package/dist/commands/product-page/product/create.js +0 -208
- package/dist/commands/product-page/product/create.js.map +0 -1
- package/dist/commands/product-page/product/delete.d.ts +0 -3
- package/dist/commands/product-page/product/delete.d.ts.map +0 -1
- package/dist/commands/product-page/product/delete.js +0 -85
- package/dist/commands/product-page/product/delete.js.map +0 -1
- package/dist/commands/product-page/product/hide.d.ts +0 -3
- package/dist/commands/product-page/product/hide.d.ts.map +0 -1
- package/dist/commands/product-page/product/hide.js +0 -78
- package/dist/commands/product-page/product/hide.js.map +0 -1
- package/dist/commands/product-page/product/index.d.ts +0 -4
- package/dist/commands/product-page/product/index.d.ts.map +0 -1
- package/dist/commands/product-page/product/index.js +0 -17
- package/dist/commands/product-page/product/index.js.map +0 -1
- package/dist/commands/product-page/product/list.d.ts +0 -3
- package/dist/commands/product-page/product/list.d.ts.map +0 -1
- package/dist/commands/product-page/product/list.js +0 -157
- package/dist/commands/product-page/product/list.js.map +0 -1
- package/dist/commands/product-page/product/reorder.d.ts +0 -3
- package/dist/commands/product-page/product/reorder.d.ts.map +0 -1
- package/dist/commands/product-page/product/reorder.js +0 -110
- package/dist/commands/product-page/product/reorder.js.map +0 -1
- package/dist/commands/product-page/product/update.d.ts +0 -3
- package/dist/commands/product-page/product/update.d.ts.map +0 -1
- package/dist/commands/product-page/product/update.js +0 -127
- package/dist/commands/product-page/product/update.js.map +0 -1
- package/dist/commands/product-page/reorder.d.ts +0 -3
- package/dist/commands/product-page/reorder.d.ts.map +0 -1
- package/dist/commands/product-page/reorder.js +0 -111
- package/dist/commands/product-page/reorder.js.map +0 -1
- package/dist/commands/product-page/translation/delete.d.ts +0 -3
- package/dist/commands/product-page/translation/delete.d.ts.map +0 -1
- package/dist/commands/product-page/translation/delete.js +0 -97
- package/dist/commands/product-page/translation/delete.js.map +0 -1
- package/dist/commands/product-page/translation/index.d.ts +0 -4
- package/dist/commands/product-page/translation/index.d.ts.map +0 -1
- package/dist/commands/product-page/translation/index.js +0 -11
- package/dist/commands/product-page/translation/index.js.map +0 -1
- package/dist/commands/product-page/translation/list.d.ts +0 -3
- package/dist/commands/product-page/translation/list.d.ts.map +0 -1
- package/dist/commands/product-page/translation/list.js +0 -104
- package/dist/commands/product-page/translation/list.js.map +0 -1
- package/dist/commands/product-page/translation/set.d.ts +0 -3
- package/dist/commands/product-page/translation/set.d.ts.map +0 -1
- package/dist/commands/product-page/translation/set.js +0 -151
- package/dist/commands/product-page/translation/set.js.map +0 -1
- package/dist/commands/product-page/update.d.ts +0 -3
- package/dist/commands/product-page/update.d.ts.map +0 -1
- package/dist/commands/product-page/update.js +0 -137
- package/dist/commands/product-page/update.js.map +0 -1
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import inquirer from 'inquirer';
|
|
4
|
-
import { commerceApi } from '../../../api/rest/commerce.js';
|
|
5
|
-
import { handleError, createApiError, ValidationError } from '../../../utils/error.js';
|
|
6
|
-
import { output } from '../../../utils/output.js';
|
|
7
|
-
import { addEnhancedHelp } from '../../../utils/helpText.js';
|
|
8
|
-
import { isInteractiveEnvironment } from '../../../utils/interactive.js';
|
|
9
|
-
const cmd = new Command('delete')
|
|
10
|
-
.description('Delete translation for a section')
|
|
11
|
-
.argument('<handle>', 'Section handle')
|
|
12
|
-
.option('--lang <code>', 'Language code to delete (required)')
|
|
13
|
-
.option('--product-id <id>', 'Product ID (for product-level translation)')
|
|
14
|
-
.option('-y, --yes', 'Skip confirmation prompt')
|
|
15
|
-
.action(async (handle, options) => {
|
|
16
|
-
try {
|
|
17
|
-
await deleteTranslation(handle, options);
|
|
18
|
-
}
|
|
19
|
-
catch (error) {
|
|
20
|
-
handleError(error);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
addEnhancedHelp(cmd, {
|
|
24
|
-
examples: [
|
|
25
|
-
'# Delete merchant-level Chinese translation',
|
|
26
|
-
'$ commerce product-page translation delete care --lang zh-CN',
|
|
27
|
-
'',
|
|
28
|
-
'# Delete with confirmation skip',
|
|
29
|
-
'$ commerce product-page translation delete care --lang zh-CN --yes',
|
|
30
|
-
'',
|
|
31
|
-
'# Delete product-level translation',
|
|
32
|
-
'$ commerce product-page translation delete care --lang ja-JP --product-id prod-123 --yes',
|
|
33
|
-
],
|
|
34
|
-
output: {
|
|
35
|
-
example: JSON.stringify({
|
|
36
|
-
success: true,
|
|
37
|
-
message: '翻译已删除',
|
|
38
|
-
}, null, 2),
|
|
39
|
-
},
|
|
40
|
-
relatedCommands: [
|
|
41
|
-
{ command: 'product-page translation list', description: 'View translations' },
|
|
42
|
-
{ command: 'product-page translation set', description: 'Add translation' },
|
|
43
|
-
],
|
|
44
|
-
notes: [
|
|
45
|
-
'Use --yes to skip confirmation in non-interactive environments',
|
|
46
|
-
'Without --product-id: deletes merchant-level translation',
|
|
47
|
-
'With --product-id: deletes product-level translation',
|
|
48
|
-
],
|
|
49
|
-
});
|
|
50
|
-
export const deleteTranslationCommand = cmd;
|
|
51
|
-
async function deleteTranslation(handle, options) {
|
|
52
|
-
const { lang, productId, yes } = options;
|
|
53
|
-
if (!lang || lang.trim().length === 0) {
|
|
54
|
-
throw new ValidationError('缺少必需参数: --lang (语言代码)', 'lang');
|
|
55
|
-
}
|
|
56
|
-
if (!isInteractiveEnvironment() && !yes) {
|
|
57
|
-
throw new ValidationError('非交互模式下需要 --yes 确认删除操作', 'yes');
|
|
58
|
-
}
|
|
59
|
-
if (isInteractiveEnvironment() && !yes) {
|
|
60
|
-
const { confirm } = await inquirer.prompt([
|
|
61
|
-
{
|
|
62
|
-
type: 'confirm',
|
|
63
|
-
name: 'confirm',
|
|
64
|
-
message: `确定要删除区块 "${handle}" 的 ${lang} 翻译吗?`,
|
|
65
|
-
default: false,
|
|
66
|
-
},
|
|
67
|
-
]);
|
|
68
|
-
if (!confirm) {
|
|
69
|
-
console.log(chalk.yellow('已取消删除操作'));
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const level = productId ? '商品级' : '商户级';
|
|
74
|
-
const spinner = output.spinner(`正在删除${level}翻译...`);
|
|
75
|
-
try {
|
|
76
|
-
if (productId) {
|
|
77
|
-
await commerceApi.productSections.product.translations.delete(productId, handle, lang);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
await commerceApi.productSections.merchant.translations.delete(handle, lang);
|
|
81
|
-
}
|
|
82
|
-
spinner.succeed('翻译已删除!');
|
|
83
|
-
if (output.isJson()) {
|
|
84
|
-
output.success({ handle, language_code: lang, product_id: productId || null }, '翻译已删除');
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
console.log();
|
|
88
|
-
console.log(chalk.green(`✓ 区块 "${handle}" 的 ${lang} 翻译已删除`));
|
|
89
|
-
console.log();
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
spinner.fail('删除翻译失败');
|
|
94
|
-
throw createApiError(error);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=delete.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../src/commands/product-page/translation/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/product-page/translation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,QAAA,MAAM,kBAAkB,SACwB,CAAC;AAMjD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { listTranslationsCommand } from './list.js';
|
|
3
|
-
import { setTranslationCommand } from './set.js';
|
|
4
|
-
import { deleteTranslationCommand } from './delete.js';
|
|
5
|
-
const translationCommand = new Command('translation')
|
|
6
|
-
.description('Section translation management');
|
|
7
|
-
translationCommand.addCommand(listTranslationsCommand);
|
|
8
|
-
translationCommand.addCommand(setTranslationCommand);
|
|
9
|
-
translationCommand.addCommand(deleteTranslationCommand);
|
|
10
|
-
export { translationCommand };
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/product-page/translation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;KAClD,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAEjD,kBAAkB,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;AACvD,kBAAkB,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;AACrD,kBAAkB,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/product-page/translation/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkEpC,eAAO,MAAM,uBAAuB,SAAM,CAAC"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { commerceApi } from '../../../api/rest/commerce.js';
|
|
4
|
-
import { handleError, createApiError } from '../../../utils/error.js';
|
|
5
|
-
import { output } from '../../../utils/output.js';
|
|
6
|
-
import { addEnhancedHelp } from '../../../utils/helpText.js';
|
|
7
|
-
const cmd = new Command('list')
|
|
8
|
-
.description('List translations for a section')
|
|
9
|
-
.argument('<handle>', 'Section handle')
|
|
10
|
-
.option('--product-id <id>', 'Product ID (for product-level translations)')
|
|
11
|
-
.action(async (handle, options) => {
|
|
12
|
-
try {
|
|
13
|
-
await listTranslations(handle, options);
|
|
14
|
-
}
|
|
15
|
-
catch (error) {
|
|
16
|
-
handleError(error);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
addEnhancedHelp(cmd, {
|
|
20
|
-
examples: [
|
|
21
|
-
'# List merchant-level translations for care section',
|
|
22
|
-
'$ commerce product-page translation list care',
|
|
23
|
-
'',
|
|
24
|
-
'# List product-level translations',
|
|
25
|
-
'$ commerce product-page translation list care --product-id prod-123',
|
|
26
|
-
],
|
|
27
|
-
output: {
|
|
28
|
-
example: JSON.stringify({
|
|
29
|
-
success: true,
|
|
30
|
-
data: {
|
|
31
|
-
translations: [
|
|
32
|
-
{
|
|
33
|
-
language_code: 'en-US',
|
|
34
|
-
title: 'Care Instructions',
|
|
35
|
-
content: 'Machine washable, cold water.',
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
language_code: 'zh-CN',
|
|
39
|
-
title: '护理说明',
|
|
40
|
-
content: '机洗,冷水。',
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
},
|
|
44
|
-
}, null, 2),
|
|
45
|
-
},
|
|
46
|
-
relatedCommands: [
|
|
47
|
-
{ command: 'product-page translation set', description: 'Add or update translation' },
|
|
48
|
-
{ command: 'product-page translation delete', description: 'Delete translation' },
|
|
49
|
-
{ command: 'product-page list --resolved', description: 'View all sections with translations' },
|
|
50
|
-
],
|
|
51
|
-
notes: [
|
|
52
|
-
'Without --product-id: lists merchant-level translations',
|
|
53
|
-
'With --product-id: lists product-level translations',
|
|
54
|
-
'The section must have a customization/override to have translations',
|
|
55
|
-
],
|
|
56
|
-
});
|
|
57
|
-
export const listTranslationsCommand = cmd;
|
|
58
|
-
async function listTranslations(handle, options) {
|
|
59
|
-
const { productId } = options;
|
|
60
|
-
const level = productId ? '商品级' : '商户级';
|
|
61
|
-
const spinner = output.spinner(`正在获取${level}翻译...`);
|
|
62
|
-
try {
|
|
63
|
-
let translations;
|
|
64
|
-
if (productId) {
|
|
65
|
-
translations = await commerceApi.productSections.product.translations.list(productId, handle);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
translations = await commerceApi.productSections.merchant.translations.list(handle);
|
|
69
|
-
}
|
|
70
|
-
spinner.succeed(`${level}翻译获取成功`);
|
|
71
|
-
if (!translations || translations.length === 0) {
|
|
72
|
-
if (output.isJson()) {
|
|
73
|
-
output.success({ translations: [] }, '暂无翻译');
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
console.log(chalk.yellow(`\n区块 "${handle}" 暂无翻译\n`));
|
|
77
|
-
}
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (output.isJson()) {
|
|
81
|
-
output.success({ translations });
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
console.log();
|
|
85
|
-
console.log(chalk.bold(`区块 "${handle}" 的翻译(${level}):\n`));
|
|
86
|
-
translations.forEach((trans, index) => {
|
|
87
|
-
console.log(chalk.cyan(`${index + 1}. ${trans.language_code}`));
|
|
88
|
-
console.log(chalk.gray(` 标题: ${trans.title || '(无)'}`));
|
|
89
|
-
if (trans.content) {
|
|
90
|
-
const preview = trans.content.length > 80 ? trans.content.substring(0, 80) + '...' : trans.content;
|
|
91
|
-
console.log(chalk.gray(` 内容: ${preview}`));
|
|
92
|
-
}
|
|
93
|
-
console.log();
|
|
94
|
-
});
|
|
95
|
-
console.log(chalk.gray(`共 ${translations.length} 种语言`));
|
|
96
|
-
console.log();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
spinner.fail('获取翻译失败');
|
|
101
|
-
throw createApiError(error);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/product-page/translation/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../../src/commands/product-page/translation/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsEpC,eAAO,MAAM,qBAAqB,SAAM,CAAC"}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import inquirer from 'inquirer';
|
|
4
|
-
import { commerceApi } from '../../../api/rest/commerce.js';
|
|
5
|
-
import { handleError, createApiError, ValidationError } from '../../../utils/error.js';
|
|
6
|
-
import { output } from '../../../utils/output.js';
|
|
7
|
-
import { addEnhancedHelp } from '../../../utils/helpText.js';
|
|
8
|
-
import { isInteractiveEnvironment } from '../../../utils/interactive.js';
|
|
9
|
-
const cmd = new Command('set')
|
|
10
|
-
.description('Set (create or update) translation for a section')
|
|
11
|
-
.argument('<handle>', 'Section handle')
|
|
12
|
-
.option('--lang <code>', 'Language code, e.g. en-US, zh-CN, ja-JP (required)')
|
|
13
|
-
.option('--title <title>', 'Translated title (required)')
|
|
14
|
-
.option('--content <content>', 'Translated content in Markdown (required)')
|
|
15
|
-
.option('--product-id <id>', 'Product ID (for product-level translation)')
|
|
16
|
-
.action(async (handle, options) => {
|
|
17
|
-
try {
|
|
18
|
-
await setTranslation(handle, options);
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
handleError(error);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
addEnhancedHelp(cmd, {
|
|
25
|
-
examples: [
|
|
26
|
-
'# Add Chinese translation for merchant-level care section',
|
|
27
|
-
'$ commerce product-page translation set care --lang zh-CN --title "护理说明" --content "机洗,30度冷水。"',
|
|
28
|
-
'',
|
|
29
|
-
'# Add Japanese translation for product-level section',
|
|
30
|
-
'$ commerce product-page translation set care --product-id prod-123 --lang ja-JP --title "お手入れ方法" --content "洗濯機で洗えます。"',
|
|
31
|
-
'',
|
|
32
|
-
'# Update existing translation',
|
|
33
|
-
'$ commerce product-page translation set care --lang zh-CN --title "护理说明" --content "更新后的内容"',
|
|
34
|
-
],
|
|
35
|
-
output: {
|
|
36
|
-
example: JSON.stringify({
|
|
37
|
-
success: true,
|
|
38
|
-
data: {
|
|
39
|
-
language_code: 'zh-CN',
|
|
40
|
-
title: '护理说明',
|
|
41
|
-
content: '机洗,30度冷水。',
|
|
42
|
-
},
|
|
43
|
-
message: '翻译设置成功',
|
|
44
|
-
}, null, 2),
|
|
45
|
-
},
|
|
46
|
-
relatedCommands: [
|
|
47
|
-
{ command: 'product-page translation list', description: 'View translations' },
|
|
48
|
-
{ command: 'product-page translation delete', description: 'Delete translation' },
|
|
49
|
-
{ command: 'i18n languages', description: 'List supported languages' },
|
|
50
|
-
],
|
|
51
|
-
notes: [
|
|
52
|
-
'This creates a new translation or updates an existing one',
|
|
53
|
-
'Supported languages: en-US, zh-CN, zh-HK, zh-TW, vi-VN, es-ES, ja-JP',
|
|
54
|
-
'Without --product-id: sets merchant-level translation',
|
|
55
|
-
'With --product-id: sets product-level translation',
|
|
56
|
-
],
|
|
57
|
-
});
|
|
58
|
-
export const setTranslationCommand = cmd;
|
|
59
|
-
async function setTranslation(handle, options) {
|
|
60
|
-
let { lang, title, content, productId } = options;
|
|
61
|
-
// 非交互模式验证
|
|
62
|
-
if (!isInteractiveEnvironment()) {
|
|
63
|
-
if (!lang || lang.trim().length === 0) {
|
|
64
|
-
throw new ValidationError('缺少必需参数: --lang (语言代码)', 'lang');
|
|
65
|
-
}
|
|
66
|
-
if (!title || title.trim().length === 0) {
|
|
67
|
-
throw new ValidationError('缺少必需参数: --title (翻译标题)', 'title');
|
|
68
|
-
}
|
|
69
|
-
if (!content || content.trim().length === 0) {
|
|
70
|
-
throw new ValidationError('缺少必需参数: --content (翻译内容)', 'content');
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
// 交互模式
|
|
75
|
-
const answers = await inquirer.prompt([
|
|
76
|
-
{
|
|
77
|
-
type: 'list',
|
|
78
|
-
name: 'lang',
|
|
79
|
-
message: '语言:',
|
|
80
|
-
choices: [
|
|
81
|
-
{ name: 'English (US)', value: 'en-US' },
|
|
82
|
-
{ name: '简体中文', value: 'zh-CN' },
|
|
83
|
-
{ name: '繁體中文 (香港)', value: 'zh-HK' },
|
|
84
|
-
{ name: '繁體中文 (台灣)', value: 'zh-TW' },
|
|
85
|
-
{ name: 'Tiếng Việt', value: 'vi-VN' },
|
|
86
|
-
{ name: 'Español', value: 'es-ES' },
|
|
87
|
-
{ name: '日本語', value: 'ja-JP' },
|
|
88
|
-
],
|
|
89
|
-
when: !lang,
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
type: 'input',
|
|
93
|
-
name: 'title',
|
|
94
|
-
message: '翻译标题:',
|
|
95
|
-
when: !title,
|
|
96
|
-
validate: (input) => (input.trim().length > 0 ? true : '标题不能为空'),
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
type: 'editor',
|
|
100
|
-
name: 'content',
|
|
101
|
-
message: '翻译内容 (Markdown):',
|
|
102
|
-
when: !content,
|
|
103
|
-
},
|
|
104
|
-
]);
|
|
105
|
-
lang = lang || answers.lang;
|
|
106
|
-
title = title || answers.title;
|
|
107
|
-
content = content || answers.content;
|
|
108
|
-
}
|
|
109
|
-
const level = productId ? '商品级' : '商户级';
|
|
110
|
-
const spinner = output.spinner(`正在设置${level}翻译...`);
|
|
111
|
-
try {
|
|
112
|
-
let result;
|
|
113
|
-
if (productId) {
|
|
114
|
-
result = await commerceApi.productSections.product.translations.set(productId, handle, lang, {
|
|
115
|
-
title: title,
|
|
116
|
-
content: content,
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
result = await commerceApi.productSections.merchant.translations.set(handle, lang, {
|
|
121
|
-
title: title,
|
|
122
|
-
content: content,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
spinner.succeed('翻译设置成功!');
|
|
126
|
-
if (output.isJson()) {
|
|
127
|
-
output.success(result, '翻译设置成功');
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
console.log();
|
|
131
|
-
console.log(chalk.green('✓ 翻译设置成功!'));
|
|
132
|
-
console.log();
|
|
133
|
-
console.log(chalk.gray('区块: ') + chalk.cyan(handle));
|
|
134
|
-
console.log(chalk.gray('语言: ') + chalk.white(result.language_code));
|
|
135
|
-
console.log(chalk.gray('标题: ') + chalk.white(result.title));
|
|
136
|
-
if (result.content) {
|
|
137
|
-
const preview = result.content.length > 100 ? result.content.substring(0, 100) + '...' : result.content;
|
|
138
|
-
console.log(chalk.gray('内容: ') + chalk.white(preview));
|
|
139
|
-
}
|
|
140
|
-
if (productId) {
|
|
141
|
-
console.log(chalk.gray('商品ID: ') + chalk.white(productId));
|
|
142
|
-
}
|
|
143
|
-
console.log();
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
spinner.fail('设置翻译失败');
|
|
148
|
-
throw createApiError(error);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
//# sourceMappingURL=set.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../../../src/commands/product-page/translation/set.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/product-page/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiFpC,eAAO,MAAM,oBAAoB,SAAM,CAAC"}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { commerceApi } from '../../api/rest/commerce.js';
|
|
4
|
-
import { handleError, createApiError, ValidationError } from '../../utils/error.js';
|
|
5
|
-
import { output } from '../../utils/output.js';
|
|
6
|
-
import { addEnhancedHelp } from '../../utils/helpText.js';
|
|
7
|
-
import { isInteractiveEnvironment } from '../../utils/interactive.js';
|
|
8
|
-
const cmd = new Command('update')
|
|
9
|
-
.description('Update a product page section customization (merchant-level)')
|
|
10
|
-
.argument('<handle>', 'Section handle to update')
|
|
11
|
-
.option('--type <type>', 'Section type: collapsible | static')
|
|
12
|
-
.option('--position <n>', 'Display position')
|
|
13
|
-
.option('--content <text>', 'Section content in Markdown')
|
|
14
|
-
.option('--tab-group <group>', 'Tab group name (use empty string to clear)')
|
|
15
|
-
.action(async (handle, options) => {
|
|
16
|
-
try {
|
|
17
|
-
await updateSection(handle, options);
|
|
18
|
-
}
|
|
19
|
-
catch (error) {
|
|
20
|
-
handleError(error);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
addEnhancedHelp(cmd, {
|
|
24
|
-
examples: [
|
|
25
|
-
'# Update section content',
|
|
26
|
-
'$ commerce product-page update care --content "New care instructions..."',
|
|
27
|
-
'',
|
|
28
|
-
'# Update section position',
|
|
29
|
-
'$ commerce product-page update care --position 5',
|
|
30
|
-
'',
|
|
31
|
-
'# Update multiple fields',
|
|
32
|
-
'$ commerce product-page update care --type static --position 3 --content "Updated content"',
|
|
33
|
-
'',
|
|
34
|
-
'# Move section to a tab group',
|
|
35
|
-
'$ commerce product-page update care --tab-group product-info',
|
|
36
|
-
'',
|
|
37
|
-
'# Remove from tab group (make independent)',
|
|
38
|
-
'$ commerce product-page update care --tab-group ""',
|
|
39
|
-
],
|
|
40
|
-
output: {
|
|
41
|
-
example: JSON.stringify({
|
|
42
|
-
success: true,
|
|
43
|
-
data: {
|
|
44
|
-
id: 'customization-uuid',
|
|
45
|
-
merchant_id: 'merchant-uuid',
|
|
46
|
-
handle: 'care',
|
|
47
|
-
operation_type: 'override',
|
|
48
|
-
type: 'collapsible',
|
|
49
|
-
position: 5,
|
|
50
|
-
content: 'New care instructions...',
|
|
51
|
-
tab_group: null,
|
|
52
|
-
created_at: '2025-11-27T00:00:00Z',
|
|
53
|
-
updated_at: '2025-11-27T00:00:00Z',
|
|
54
|
-
},
|
|
55
|
-
message: '区块更新成功',
|
|
56
|
-
}, null, 2),
|
|
57
|
-
},
|
|
58
|
-
relatedCommands: [
|
|
59
|
-
{ command: 'product-page list --resolved', description: 'View all sections' },
|
|
60
|
-
{ command: 'product-page create', description: 'Create a section' },
|
|
61
|
-
{ command: 'product-page delete', description: 'Delete a customization' },
|
|
62
|
-
],
|
|
63
|
-
notes: [
|
|
64
|
-
'Only updates the fields you specify',
|
|
65
|
-
'The section must have a merchant customization to update',
|
|
66
|
-
'Use product-page create first if the section has no customization',
|
|
67
|
-
],
|
|
68
|
-
});
|
|
69
|
-
export const updateSectionCommand = cmd;
|
|
70
|
-
async function updateSection(handle, options) {
|
|
71
|
-
const { type, position, content, tabGroup } = options;
|
|
72
|
-
// 验证至少有一个更新字段
|
|
73
|
-
if (!type && !position && !content && tabGroup === undefined) {
|
|
74
|
-
if (!isInteractiveEnvironment()) {
|
|
75
|
-
throw new ValidationError('至少需要一个更新字段: --type, --position, --content, 或 --tab-group', 'options');
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
console.log(chalk.yellow('提示: 请指定要更新的字段'));
|
|
79
|
-
console.log(chalk.gray(' --type <type> 区块类型'));
|
|
80
|
-
console.log(chalk.gray(' --position <n> 显示位置'));
|
|
81
|
-
console.log(chalk.gray(' --content <text> 区块内容'));
|
|
82
|
-
console.log(chalk.gray(' --tab-group <group> Tab分组'));
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
// 验证 type
|
|
87
|
-
if (type) {
|
|
88
|
-
const validTypes = ['collapsible', 'static'];
|
|
89
|
-
if (!validTypes.includes(type)) {
|
|
90
|
-
throw new ValidationError(`无效的区块类型: ${type}。有效值: ${validTypes.join(', ')}`, 'type');
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
const spinner = output.spinner('正在更新区块...');
|
|
94
|
-
try {
|
|
95
|
-
const data = {};
|
|
96
|
-
if (type) {
|
|
97
|
-
data.type = type;
|
|
98
|
-
}
|
|
99
|
-
if (position) {
|
|
100
|
-
data.position = parseInt(position, 10);
|
|
101
|
-
}
|
|
102
|
-
if (content) {
|
|
103
|
-
data.content = content;
|
|
104
|
-
}
|
|
105
|
-
if (tabGroup !== undefined) {
|
|
106
|
-
data.tab_group = tabGroup || null;
|
|
107
|
-
}
|
|
108
|
-
const result = await commerceApi.productSections.merchant.update(handle, data);
|
|
109
|
-
spinner.succeed('区块更新成功!');
|
|
110
|
-
if (output.isJson()) {
|
|
111
|
-
output.success(result, '区块更新成功');
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
console.log();
|
|
115
|
-
console.log(chalk.green('✓ 区块更新成功!'));
|
|
116
|
-
console.log();
|
|
117
|
-
console.log(chalk.gray('ID: ') + chalk.cyan(result.id));
|
|
118
|
-
console.log(chalk.gray('Handle: ') + chalk.white(result.handle));
|
|
119
|
-
console.log(chalk.gray('操作类型: ') + chalk.white(result.operation_type));
|
|
120
|
-
console.log(chalk.gray('区块类型: ') + chalk.white(result.type));
|
|
121
|
-
console.log(chalk.gray('位置: ') + chalk.white(result.position.toString()));
|
|
122
|
-
if (result.tab_group) {
|
|
123
|
-
console.log(chalk.gray('Tab分组: ') + chalk.white(result.tab_group));
|
|
124
|
-
}
|
|
125
|
-
if (result.content) {
|
|
126
|
-
const preview = result.content.length > 100 ? result.content.substring(0, 100) + '...' : result.content;
|
|
127
|
-
console.log(chalk.gray('内容: ') + chalk.white(preview));
|
|
128
|
-
}
|
|
129
|
-
console.log();
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
catch (error) {
|
|
133
|
-
spinner.fail('更新区块失败');
|
|
134
|
-
throw createApiError(error);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=update.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/product-page/update.ts"],"names":[],"mappings":"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"}
|