@optima-chat/commerce-cli 1.7.6 → 1.8.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/dist/api/rest/base.d.ts.map +1 -1
- package/dist/api/rest/base.js +1 -0
- package/dist/api/rest/base.js.map +1 -1
- package/dist/api/rest/commerce.d.ts +176 -22
- package/dist/api/rest/commerce.d.ts.map +1 -1
- package/dist/api/rest/commerce.js +133 -23
- package/dist/api/rest/commerce.js.map +1 -1
- package/dist/commands/collection/create.d.ts.map +1 -1
- package/dist/commands/collection/create.js +39 -1
- package/dist/commands/collection/create.js.map +1 -1
- package/dist/commands/collection/update.d.ts.map +1 -1
- package/dist/commands/collection/update.js +47 -6
- package/dist/commands/collection/update.js.map +1 -1
- package/dist/commands/easyship/couriers.d.ts +3 -0
- package/dist/commands/easyship/couriers.d.ts.map +1 -0
- package/dist/commands/easyship/couriers.js +103 -0
- package/dist/commands/easyship/couriers.js.map +1 -0
- package/dist/commands/easyship/create-shipment.d.ts +3 -0
- package/dist/commands/easyship/create-shipment.d.ts.map +1 -0
- package/dist/commands/easyship/create-shipment.js +102 -0
- package/dist/commands/easyship/create-shipment.js.map +1 -0
- package/dist/commands/easyship/get-origin.d.ts +3 -0
- package/dist/commands/easyship/get-origin.d.ts.map +1 -0
- package/dist/commands/easyship/get-origin.js +111 -0
- package/dist/commands/easyship/get-origin.js.map +1 -0
- package/dist/commands/easyship/index.d.ts +3 -0
- package/dist/commands/easyship/index.d.ts.map +1 -0
- package/dist/commands/easyship/index.js +18 -0
- package/dist/commands/easyship/index.js.map +1 -0
- package/dist/commands/easyship/track.d.ts +3 -0
- package/dist/commands/easyship/track.d.ts.map +1 -0
- package/dist/commands/easyship/track.js +141 -0
- package/dist/commands/easyship/track.js.map +1 -0
- package/dist/commands/easyship/update-origin.d.ts +3 -0
- package/dist/commands/easyship/update-origin.d.ts.map +1 -0
- package/dist/commands/easyship/update-origin.js +228 -0
- package/dist/commands/easyship/update-origin.js.map +1 -0
- package/dist/commands/easyship/validate-address.d.ts +3 -0
- package/dist/commands/easyship/validate-address.d.ts.map +1 -0
- package/dist/commands/easyship/validate-address.js +119 -0
- package/dist/commands/easyship/validate-address.js.map +1 -0
- package/dist/commands/easyship/validate-origin.d.ts +3 -0
- package/dist/commands/easyship/validate-origin.d.ts.map +1 -0
- package/dist/commands/easyship/validate-origin.js +119 -0
- package/dist/commands/easyship/validate-origin.js.map +1 -0
- package/dist/commands/homepage/delete-config.d.ts +3 -0
- package/dist/commands/homepage/delete-config.d.ts.map +1 -0
- package/dist/commands/homepage/delete-config.js +94 -0
- package/dist/commands/homepage/delete-config.js.map +1 -0
- package/dist/commands/homepage/get-config.d.ts +3 -0
- package/dist/commands/homepage/get-config.d.ts.map +1 -0
- package/dist/commands/homepage/get-config.js +95 -0
- package/dist/commands/homepage/get-config.js.map +1 -0
- package/dist/commands/homepage/index.d.ts.map +1 -1
- package/dist/commands/homepage/index.js +9 -0
- package/dist/commands/homepage/index.js.map +1 -1
- package/dist/commands/homepage/list-templates.d.ts +3 -0
- package/dist/commands/homepage/list-templates.d.ts.map +1 -0
- package/dist/commands/homepage/list-templates.js +113 -0
- package/dist/commands/homepage/list-templates.js.map +1 -0
- package/dist/commands/homepage/switch-template.d.ts +3 -0
- package/dist/commands/homepage/switch-template.d.ts.map +1 -0
- package/dist/commands/homepage/switch-template.js +129 -0
- package/dist/commands/homepage/switch-template.js.map +1 -0
- package/dist/commands/order/index.d.ts.map +1 -1
- package/dist/commands/order/index.js +5 -1
- package/dist/commands/order/index.js.map +1 -1
- package/dist/commands/order/list.d.ts.map +1 -1
- package/dist/commands/order/list.js +30 -3
- package/dist/commands/order/list.js.map +1 -1
- package/dist/commands/order/ship.d.ts.map +1 -1
- package/dist/commands/order/ship.js +29 -1
- package/dist/commands/order/ship.js.map +1 -1
- package/dist/commands/order/shipping-history.d.ts +3 -0
- package/dist/commands/order/shipping-history.d.ts.map +1 -0
- package/dist/commands/order/shipping-history.js +120 -0
- package/dist/commands/order/shipping-history.js.map +1 -0
- package/dist/commands/order/update-shipping-status.d.ts +3 -0
- package/dist/commands/order/update-shipping-status.d.ts.map +1 -0
- package/dist/commands/order/update-shipping-status.js +164 -0
- package/dist/commands/order/update-shipping-status.js.map +1 -0
- package/dist/commands/product/create.d.ts.map +1 -1
- package/dist/commands/product/create.js +53 -1
- package/dist/commands/product/create.js.map +1 -1
- package/dist/commands/product/index.d.ts.map +1 -1
- package/dist/commands/product/index.js +4 -0
- package/dist/commands/product/index.js.map +1 -1
- package/dist/commands/product/list.d.ts.map +1 -1
- package/dist/commands/product/list.js +30 -4
- package/dist/commands/product/list.js.map +1 -1
- package/dist/commands/product/remove-images.d.ts +3 -0
- package/dist/commands/product/remove-images.d.ts.map +1 -0
- package/dist/commands/product/remove-images.js +109 -0
- package/dist/commands/product/remove-images.js.map +1 -0
- package/dist/commands/product/reorder-images.d.ts +3 -0
- package/dist/commands/product/reorder-images.d.ts.map +1 -0
- package/dist/commands/product/reorder-images.js +113 -0
- package/dist/commands/product/reorder-images.js.map +1 -0
- package/dist/commands/product/update.d.ts.map +1 -1
- package/dist/commands/product/update.js +57 -1
- package/dist/commands/product/update.js.map +1 -1
- package/dist/commands/shipping/countries.d.ts +3 -0
- package/dist/commands/shipping/countries.d.ts.map +1 -0
- package/dist/commands/shipping/countries.js +87 -0
- package/dist/commands/shipping/countries.js.map +1 -0
- package/dist/commands/shipping/get-mode.d.ts +3 -0
- package/dist/commands/shipping/get-mode.d.ts.map +1 -0
- package/dist/commands/shipping/get-mode.js +84 -0
- package/dist/commands/shipping/get-mode.js.map +1 -0
- package/dist/commands/shipping/index.d.ts.map +1 -1
- package/dist/commands/shipping/index.js +7 -5
- package/dist/commands/shipping/index.js.map +1 -1
- package/dist/commands/shipping/update-mode.d.ts +3 -0
- package/dist/commands/shipping/update-mode.d.ts.map +1 -0
- package/dist/commands/shipping/update-mode.js +117 -0
- package/dist/commands/shipping/update-mode.js.map +1 -0
- package/dist/commands/shipping-zone/create.d.ts.map +1 -1
- package/dist/commands/shipping-zone/create.js +53 -9
- package/dist/commands/shipping-zone/create.js.map +1 -1
- package/dist/commands/shipping-zone/delete-rate.d.ts +3 -0
- package/dist/commands/shipping-zone/delete-rate.d.ts.map +1 -0
- package/dist/commands/shipping-zone/delete-rate.js +103 -0
- package/dist/commands/shipping-zone/delete-rate.js.map +1 -0
- package/dist/commands/shipping-zone/get.d.ts +3 -0
- package/dist/commands/shipping-zone/get.d.ts.map +1 -0
- package/dist/commands/shipping-zone/get.js +121 -0
- package/dist/commands/shipping-zone/get.js.map +1 -0
- package/dist/commands/shipping-zone/index.d.ts.map +1 -1
- package/dist/commands/shipping-zone/index.js +9 -1
- package/dist/commands/shipping-zone/index.js.map +1 -1
- package/dist/commands/shipping-zone/update-rate.d.ts +3 -0
- package/dist/commands/shipping-zone/update-rate.d.ts.map +1 -0
- package/dist/commands/shipping-zone/update-rate.js +149 -0
- package/dist/commands/shipping-zone/update-rate.js.map +1 -0
- package/dist/commands/shipping-zone/update.d.ts +3 -0
- package/dist/commands/shipping-zone/update.d.ts.map +1 -0
- package/dist/commands/shipping-zone/update.js +117 -0
- package/dist/commands/shipping-zone/update.js.map +1 -0
- package/dist/commands/variant/index.d.ts.map +1 -1
- package/dist/commands/variant/index.js +2 -0
- package/dist/commands/variant/index.js.map +1 -1
- package/dist/commands/variant/search.d.ts +3 -0
- package/dist/commands/variant/search.d.ts.map +1 -0
- package/dist/commands/variant/search.js +107 -0
- package/dist/commands/variant/search.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/config.js +4 -4
- package/dist/utils/config.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/shipping/history.d.ts +0 -3
- package/dist/commands/shipping/history.d.ts.map +0 -1
- package/dist/commands/shipping/history.js +0 -111
- package/dist/commands/shipping/history.js.map +0 -1
- package/dist/commands/shipping/update-status.d.ts +0 -3
- package/dist/commands/shipping/update-status.d.ts.map +0 -1
- package/dist/commands/shipping/update-status.js +0 -138
- package/dist/commands/shipping/update-status.js.map +0 -1
|
@@ -0,0 +1,109 @@
|
|
|
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('remove-images')
|
|
10
|
+
.description('Remove images from product')
|
|
11
|
+
.option('--id <uuid>', 'Product ID (required)')
|
|
12
|
+
.option('--media-id <ids...>', 'Media IDs to remove (multiple allowed)')
|
|
13
|
+
.option('--yes', 'Skip confirmation prompt')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
try {
|
|
16
|
+
await removeImages(options);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
handleError(error);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
addEnhancedHelp(cmd, {
|
|
23
|
+
examples: [
|
|
24
|
+
'# Remove specific images',
|
|
25
|
+
'$ commerce product remove-images \\',
|
|
26
|
+
' --id prod-123 \\',
|
|
27
|
+
' --media-id media_456 media_789',
|
|
28
|
+
'',
|
|
29
|
+
'# Skip confirmation',
|
|
30
|
+
'$ commerce product remove-images \\',
|
|
31
|
+
' --id prod-123 \\',
|
|
32
|
+
' --media-id media_456 --yes',
|
|
33
|
+
],
|
|
34
|
+
output: {
|
|
35
|
+
example: JSON.stringify({
|
|
36
|
+
success: true,
|
|
37
|
+
data: {
|
|
38
|
+
product_id: 'uuid',
|
|
39
|
+
removed_count: 2,
|
|
40
|
+
remaining_images: []
|
|
41
|
+
}
|
|
42
|
+
}, null, 2)
|
|
43
|
+
},
|
|
44
|
+
relatedCommands: [
|
|
45
|
+
{ command: 'product get', description: 'View product images and media IDs' },
|
|
46
|
+
{ command: 'product add-images', description: 'Add images to product' },
|
|
47
|
+
{ command: 'product reorder-images', description: 'Reorder product images' },
|
|
48
|
+
],
|
|
49
|
+
notes: [
|
|
50
|
+
'Product ID and media IDs are required',
|
|
51
|
+
'Use product get to find image media IDs',
|
|
52
|
+
'This only removes the association, not the media file',
|
|
53
|
+
]
|
|
54
|
+
});
|
|
55
|
+
export const removeImagesCommand = cmd;
|
|
56
|
+
async function removeImages(options) {
|
|
57
|
+
if (!options.id || options.id.trim().length === 0) {
|
|
58
|
+
throw new ValidationError('商品 ID 不能为空', 'id');
|
|
59
|
+
}
|
|
60
|
+
const { mediaId: mediaIds = [] } = options;
|
|
61
|
+
if (mediaIds.length === 0) {
|
|
62
|
+
throw new ValidationError('请提供要移除的图片 Media ID(--media-id)', 'media_id');
|
|
63
|
+
}
|
|
64
|
+
const productId = options.id;
|
|
65
|
+
console.log(chalk.cyan('\n🖼️ 移除商品图片\n'));
|
|
66
|
+
console.log(chalk.gray('商品 ID: ') + chalk.white(productId));
|
|
67
|
+
console.log(chalk.gray('要移除的图片: ') + chalk.white(mediaIds.join(', ')));
|
|
68
|
+
console.log();
|
|
69
|
+
// 确认
|
|
70
|
+
if (!options.yes && isInteractiveEnvironment()) {
|
|
71
|
+
const { confirm } = await inquirer.prompt([
|
|
72
|
+
{
|
|
73
|
+
type: 'confirm',
|
|
74
|
+
name: 'confirm',
|
|
75
|
+
message: `确定要移除 ${mediaIds.length} 张图片吗?`,
|
|
76
|
+
default: false,
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
if (!confirm) {
|
|
80
|
+
console.log(chalk.yellow('已取消操作'));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const spinner = output.spinner(`正在移除 ${mediaIds.length} 张图片...`);
|
|
85
|
+
try {
|
|
86
|
+
const result = await commerceApi.products.removeImages(productId, mediaIds);
|
|
87
|
+
spinner.succeed(`图片移除成功!`);
|
|
88
|
+
if (output.isJson()) {
|
|
89
|
+
output.success({
|
|
90
|
+
product_id: productId,
|
|
91
|
+
removed_count: mediaIds.length,
|
|
92
|
+
remaining_images: result.images || []
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.log();
|
|
97
|
+
console.log(chalk.green(`✓ 已移除 ${mediaIds.length} 张图片`));
|
|
98
|
+
if (result.images && result.images.length > 0) {
|
|
99
|
+
console.log(chalk.gray(`剩余图片: ${result.images.length} 张`));
|
|
100
|
+
}
|
|
101
|
+
console.log();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
spinner.fail('图片移除失败');
|
|
106
|
+
throw createApiError(error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=remove-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-images.js","sourceRoot":"","sources":["../../../src/commands/product/remove-images.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reorder-images.d.ts","sourceRoot":"","sources":["../../../src/commands/product/reorder-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwDpC,eAAO,MAAM,oBAAoB,SAAM,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
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
|
+
const cmd = new Command('reorder-images')
|
|
8
|
+
.description('Reorder product images')
|
|
9
|
+
.option('--id <uuid>', 'Product ID (required)')
|
|
10
|
+
.option('--moves <json>', 'Reorder moves as JSON: [{"media_id":"xxx","new_position":1}]')
|
|
11
|
+
.action(async (options) => {
|
|
12
|
+
try {
|
|
13
|
+
await reorderImages(options);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
handleError(error);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
addEnhancedHelp(cmd, {
|
|
20
|
+
examples: [
|
|
21
|
+
'# Move image to position 1 (first)',
|
|
22
|
+
'$ commerce product reorder-images \\',
|
|
23
|
+
' --id prod-123 \\',
|
|
24
|
+
' --moves \'[{"media_id":"media_456","new_position":1}]\'',
|
|
25
|
+
'',
|
|
26
|
+
'# Swap multiple images',
|
|
27
|
+
'$ commerce product reorder-images \\',
|
|
28
|
+
' --id prod-123 \\',
|
|
29
|
+
' --moves \'[{"media_id":"media_a","new_position":2},{"media_id":"media_b","new_position":1}]\'',
|
|
30
|
+
],
|
|
31
|
+
output: {
|
|
32
|
+
example: JSON.stringify({
|
|
33
|
+
success: true,
|
|
34
|
+
data: {
|
|
35
|
+
updated_count: 2,
|
|
36
|
+
images: [
|
|
37
|
+
{ media_id: 'media_b', position: 1, url: 'https://...' },
|
|
38
|
+
{ media_id: 'media_a', position: 2, url: 'https://...' }
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
}, null, 2)
|
|
42
|
+
},
|
|
43
|
+
relatedCommands: [
|
|
44
|
+
{ command: 'product get', description: 'View current image order' },
|
|
45
|
+
{ command: 'product add-images', description: 'Add images to product' },
|
|
46
|
+
{ command: 'product remove-images', description: 'Remove images from product' },
|
|
47
|
+
],
|
|
48
|
+
notes: [
|
|
49
|
+
'Product ID and moves are required',
|
|
50
|
+
'Position uses 1-based indexing (1 = first image)',
|
|
51
|
+
'Other images automatically shift positions',
|
|
52
|
+
'Use product get to find image media IDs',
|
|
53
|
+
]
|
|
54
|
+
});
|
|
55
|
+
export const reorderImagesCommand = cmd;
|
|
56
|
+
async function reorderImages(options) {
|
|
57
|
+
if (!options.id || options.id.trim().length === 0) {
|
|
58
|
+
throw new ValidationError('商品 ID 不能为空', 'id');
|
|
59
|
+
}
|
|
60
|
+
if (!options.moves) {
|
|
61
|
+
throw new ValidationError('请提供重排操作(--moves)', 'moves');
|
|
62
|
+
}
|
|
63
|
+
const productId = options.id;
|
|
64
|
+
// 解析 moves JSON
|
|
65
|
+
let moves;
|
|
66
|
+
try {
|
|
67
|
+
moves = JSON.parse(options.moves);
|
|
68
|
+
if (!Array.isArray(moves)) {
|
|
69
|
+
throw new Error('moves 必须是数组');
|
|
70
|
+
}
|
|
71
|
+
for (const move of moves) {
|
|
72
|
+
if (!move.media_id || typeof move.new_position !== 'number') {
|
|
73
|
+
throw new Error('每个 move 必须包含 media_id 和 new_position');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
throw new ValidationError(`无效的 moves JSON: ${error.message}`, 'moves');
|
|
79
|
+
}
|
|
80
|
+
console.log(chalk.cyan('\n🖼️ 重排商品图片\n'));
|
|
81
|
+
console.log(chalk.gray('商品 ID: ') + chalk.white(productId));
|
|
82
|
+
console.log(chalk.gray('操作:'));
|
|
83
|
+
for (const move of moves) {
|
|
84
|
+
console.log(chalk.gray(` • `) + chalk.white(`${move.media_id} → 位置 ${move.new_position}`));
|
|
85
|
+
}
|
|
86
|
+
console.log();
|
|
87
|
+
const spinner = output.spinner('正在重排图片...');
|
|
88
|
+
try {
|
|
89
|
+
const result = await commerceApi.products.reorderImages(productId, moves);
|
|
90
|
+
spinner.succeed('图片重排成功!');
|
|
91
|
+
if (output.isJson()) {
|
|
92
|
+
output.success(result);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log();
|
|
96
|
+
console.log(chalk.green(`✓ 更新了 ${result.updated_count || moves.length} 个图片位置`));
|
|
97
|
+
if (result.images && result.images.length > 0) {
|
|
98
|
+
console.log();
|
|
99
|
+
console.log(chalk.gray('当前顺序:'));
|
|
100
|
+
result.images.forEach((image) => {
|
|
101
|
+
const url = image.url ? chalk.dim(` (${image.url.substring(0, 40)}...)`) : '';
|
|
102
|
+
console.log(chalk.gray(` ${image.position}. `) + chalk.cyan(image.media_id) + url);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
console.log();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
spinner.fail('图片重排失败');
|
|
110
|
+
throw createApiError(error);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=reorder-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reorder-images.js","sourceRoot":"","sources":["../../../src/commands/product/reorder-images.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyHpC,eAAO,MAAM,oBAAoB,SAAM,CAAC"}
|
|
@@ -18,6 +18,12 @@ const cmd = new Command('update')
|
|
|
18
18
|
.option('--category-id <uuid>', 'Category ID')
|
|
19
19
|
.option('--collections <slugs>', 'Collection slugs to add product to (comma-separated)')
|
|
20
20
|
.option('--tags <tags>', 'Product tags (comma-separated, e.g., "featured,new,sale")')
|
|
21
|
+
.option('--weight <number>', 'Product weight in grams')
|
|
22
|
+
.option('--length <number>', 'Product length in cm')
|
|
23
|
+
.option('--width <number>', 'Product width in cm')
|
|
24
|
+
.option('--height <number>', 'Product height in cm')
|
|
25
|
+
.option('--hs-code <string>', 'Harmonized System code for customs')
|
|
26
|
+
.option('--country-of-origin <string>', 'Country of origin (ISO 2-letter code, e.g., CN, US)')
|
|
21
27
|
.action(async (options) => {
|
|
22
28
|
try {
|
|
23
29
|
if (!options.id) {
|
|
@@ -41,6 +47,13 @@ addEnhancedHelp(cmd, {
|
|
|
41
47
|
' --price 39.99 \\',
|
|
42
48
|
' --stock 150',
|
|
43
49
|
'',
|
|
50
|
+
'# Update shipping attributes (for Easyship)',
|
|
51
|
+
'$ commerce product update --id abc-123-def \\',
|
|
52
|
+
' --weight 350 \\',
|
|
53
|
+
' --length 12 --width 10 --height 10 \\',
|
|
54
|
+
' --hs-code "6912.00" \\',
|
|
55
|
+
' --country-of-origin CN',
|
|
56
|
+
'',
|
|
44
57
|
'# Change product status',
|
|
45
58
|
'$ commerce product update --id abc-123-def --status inactive',
|
|
46
59
|
'',
|
|
@@ -72,6 +85,8 @@ addEnhancedHelp(cmd, {
|
|
|
72
85
|
'Only specified fields will be updated, others remain unchanged',
|
|
73
86
|
'Status values: active (live), inactive (hidden), draft (unpublished), archived',
|
|
74
87
|
'handle must be unique and URL-safe (lowercase, hyphens only)',
|
|
88
|
+
'Weight is in grams, dimensions (length/width/height) are in cm',
|
|
89
|
+
'HS code format: "6912.00" (for ceramics), country code: ISO 2-letter (CN, US, etc.)',
|
|
75
90
|
],
|
|
76
91
|
});
|
|
77
92
|
export const updateProductCommand = cmd;
|
|
@@ -90,7 +105,13 @@ async function updateProduct(productId, options) {
|
|
|
90
105
|
options.status ||
|
|
91
106
|
options.categoryId ||
|
|
92
107
|
options.collections ||
|
|
93
|
-
options.tags
|
|
108
|
+
options.tags ||
|
|
109
|
+
options.weight ||
|
|
110
|
+
options.length ||
|
|
111
|
+
options.width ||
|
|
112
|
+
options.height ||
|
|
113
|
+
options.hsCode ||
|
|
114
|
+
options.countryOfOrigin);
|
|
94
115
|
if (!hasUpdates) {
|
|
95
116
|
throw new ValidationError('请至少提供一个要更新的字段');
|
|
96
117
|
}
|
|
@@ -131,6 +152,41 @@ async function updateProduct(productId, options) {
|
|
|
131
152
|
if (options.categoryId) {
|
|
132
153
|
updateData.category_id = options.categoryId;
|
|
133
154
|
}
|
|
155
|
+
// Add shipping attributes if provided
|
|
156
|
+
if (options.weight) {
|
|
157
|
+
const weight = parseFloat(options.weight);
|
|
158
|
+
if (isNaN(weight) || weight < 0) {
|
|
159
|
+
throw new ValidationError('重量必须是大于等于 0 的数字', 'weight');
|
|
160
|
+
}
|
|
161
|
+
updateData.weight = weight;
|
|
162
|
+
}
|
|
163
|
+
if (options.length) {
|
|
164
|
+
const length = parseFloat(options.length);
|
|
165
|
+
if (isNaN(length) || length < 0) {
|
|
166
|
+
throw new ValidationError('长度必须是大于等于 0 的数字', 'length');
|
|
167
|
+
}
|
|
168
|
+
updateData.length = length;
|
|
169
|
+
}
|
|
170
|
+
if (options.width) {
|
|
171
|
+
const width = parseFloat(options.width);
|
|
172
|
+
if (isNaN(width) || width < 0) {
|
|
173
|
+
throw new ValidationError('宽度必须是大于等于 0 的数字', 'width');
|
|
174
|
+
}
|
|
175
|
+
updateData.width = width;
|
|
176
|
+
}
|
|
177
|
+
if (options.height) {
|
|
178
|
+
const height = parseFloat(options.height);
|
|
179
|
+
if (isNaN(height) || height < 0) {
|
|
180
|
+
throw new ValidationError('高度必须是大于等于 0 的数字', 'height');
|
|
181
|
+
}
|
|
182
|
+
updateData.height = height;
|
|
183
|
+
}
|
|
184
|
+
if (options.hsCode) {
|
|
185
|
+
updateData.hs_code = options.hsCode;
|
|
186
|
+
}
|
|
187
|
+
if (options.countryOfOrigin) {
|
|
188
|
+
updateData.country_of_origin = options.countryOfOrigin.toUpperCase();
|
|
189
|
+
}
|
|
134
190
|
// 添加 tags(如果提供)
|
|
135
191
|
if (options.tags) {
|
|
136
192
|
const tags = options.tags.split(',').map((tag) => tag.trim()).filter((tag) => tag.length > 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/product/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/product/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"countries.d.ts","sourceRoot":"","sources":["../../../src/commands/shipping/countries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqDpC,eAAO,MAAM,gBAAgB,SAAM,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
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, requireParam } from '../../utils/interactive.js';
|
|
8
|
+
const cmd = new Command('countries')
|
|
9
|
+
.description('List supported shipping countries for a merchant')
|
|
10
|
+
.option('--merchant-id <id>', 'Merchant ID (required)')
|
|
11
|
+
.action(async (options) => {
|
|
12
|
+
try {
|
|
13
|
+
await listCountries(options);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
handleError(error);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
addEnhancedHelp(cmd, {
|
|
20
|
+
examples: [
|
|
21
|
+
'# List supported countries for a merchant',
|
|
22
|
+
'$ commerce shipping countries --merchant-id abc-123-def',
|
|
23
|
+
],
|
|
24
|
+
output: {
|
|
25
|
+
example: JSON.stringify({
|
|
26
|
+
success: true,
|
|
27
|
+
data: {
|
|
28
|
+
countries: [
|
|
29
|
+
{ country_code: 'US', country_name: 'United States' },
|
|
30
|
+
{ country_code: 'GB', country_name: 'United Kingdom' },
|
|
31
|
+
{ country_code: 'CN', country_name: 'China' },
|
|
32
|
+
],
|
|
33
|
+
default_origin: 'US',
|
|
34
|
+
},
|
|
35
|
+
message: 'Found 3 supported countries',
|
|
36
|
+
}, null, 2),
|
|
37
|
+
},
|
|
38
|
+
relatedCommands: [
|
|
39
|
+
{ command: 'shipping get-mode', description: 'View shipping mode' },
|
|
40
|
+
{ command: 'easyship couriers', description: 'List available couriers' },
|
|
41
|
+
],
|
|
42
|
+
notes: [
|
|
43
|
+
'This is a public endpoint (no authentication required)',
|
|
44
|
+
'Returns countries supported for shipping by the merchant',
|
|
45
|
+
'Also returns the default origin country',
|
|
46
|
+
],
|
|
47
|
+
});
|
|
48
|
+
export const countriesCommand = cmd;
|
|
49
|
+
async function listCountries(options) {
|
|
50
|
+
const merchantId = isInteractiveEnvironment()
|
|
51
|
+
? (options.merchantId?.trim() || (() => { throw new ValidationError('Merchant ID is required', 'merchant-id'); })())
|
|
52
|
+
: requireParam(options.merchantId, 'merchant-id', 'Merchant ID');
|
|
53
|
+
const spinner = output.spinner('Fetching supported countries...');
|
|
54
|
+
try {
|
|
55
|
+
const result = await commerceApi.shipping.getCountries(merchantId);
|
|
56
|
+
spinner.succeed('Countries fetched successfully');
|
|
57
|
+
const countries = result.countries || [];
|
|
58
|
+
const defaultOrigin = result.default_origin || 'N/A';
|
|
59
|
+
if (output.isJson()) {
|
|
60
|
+
output.success({ countries, default_origin: defaultOrigin }, `Found ${countries.length} supported countries`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.log();
|
|
64
|
+
console.log(chalk.cyan(`🌍 Supported Shipping Countries (${countries.length})`));
|
|
65
|
+
console.log();
|
|
66
|
+
if (countries.length === 0) {
|
|
67
|
+
console.log(chalk.yellow('No countries configured'));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
countries.forEach((country, index) => {
|
|
71
|
+
const code = country.country_code || country.code;
|
|
72
|
+
const name = country.country_name || country.name;
|
|
73
|
+
const isDefault = code === defaultOrigin ? chalk.green(' (default origin)') : '';
|
|
74
|
+
console.log(chalk.white(` ${index + 1}. ${code} - ${name}${isDefault}`));
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
console.log();
|
|
78
|
+
console.log(chalk.gray('Default Origin: ') + chalk.white(defaultOrigin));
|
|
79
|
+
console.log();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
spinner.fail('Failed to fetch countries');
|
|
84
|
+
throw createApiError(error);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=countries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"countries.js","sourceRoot":"","sources":["../../../src/commands/shipping/countries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-mode.d.ts","sourceRoot":"","sources":["../../../src/commands/shipping/get-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuDpC,eAAO,MAAM,cAAc,SAAM,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
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 MODE_LABELS = {
|
|
8
|
+
auto: 'Auto (自动选择)',
|
|
9
|
+
fixed_only: 'Fixed Only (仅固定运费)',
|
|
10
|
+
easyship_only: 'Easyship Only (仅Easyship)',
|
|
11
|
+
};
|
|
12
|
+
const MODE_DESCRIPTIONS = {
|
|
13
|
+
auto: 'System automatically selects the best shipping option',
|
|
14
|
+
fixed_only: 'Only use fixed shipping rates from shipping zones',
|
|
15
|
+
easyship_only: 'Only use Easyship for shipping calculations',
|
|
16
|
+
};
|
|
17
|
+
const cmd = new Command('get-mode')
|
|
18
|
+
.description('Get current shipping mode configuration')
|
|
19
|
+
.action(async () => {
|
|
20
|
+
try {
|
|
21
|
+
await getShippingMode();
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
handleError(error);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
addEnhancedHelp(cmd, {
|
|
28
|
+
examples: [
|
|
29
|
+
'# Get current shipping mode',
|
|
30
|
+
'$ commerce shipping get-mode',
|
|
31
|
+
],
|
|
32
|
+
output: {
|
|
33
|
+
example: JSON.stringify({
|
|
34
|
+
success: true,
|
|
35
|
+
data: {
|
|
36
|
+
shipping_mode: 'auto',
|
|
37
|
+
},
|
|
38
|
+
message: 'Current shipping mode: auto',
|
|
39
|
+
}, null, 2),
|
|
40
|
+
},
|
|
41
|
+
relatedCommands: [
|
|
42
|
+
{ command: 'shipping update-mode', description: 'Change shipping mode' },
|
|
43
|
+
{ command: 'shipping-zone list', description: 'View fixed shipping zones' },
|
|
44
|
+
{ command: 'easyship get-origin', description: 'View Easyship origin address' },
|
|
45
|
+
],
|
|
46
|
+
notes: [
|
|
47
|
+
'auto - System selects best option (Easyship or fixed rates)',
|
|
48
|
+
'fixed_only - Only use shipping zones with fixed rates',
|
|
49
|
+
'easyship_only - Only use Easyship for real-time rates',
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
export const getModeCommand = cmd;
|
|
53
|
+
async function getShippingMode() {
|
|
54
|
+
const spinner = output.spinner('Fetching shipping mode...');
|
|
55
|
+
try {
|
|
56
|
+
const result = await commerceApi.shipping.getMode();
|
|
57
|
+
spinner.succeed('Shipping mode fetched');
|
|
58
|
+
const mode = result.shipping_mode || 'auto';
|
|
59
|
+
if (output.isJson()) {
|
|
60
|
+
output.success({ shipping_mode: mode }, `Current shipping mode: ${mode}`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.log();
|
|
64
|
+
console.log(chalk.cyan('⚙️ Shipping Mode Configuration'));
|
|
65
|
+
console.log();
|
|
66
|
+
console.log(chalk.gray('Current Mode: ') + chalk.white.bold(MODE_LABELS[mode] || mode));
|
|
67
|
+
console.log(chalk.gray('Description: ') + chalk.white(MODE_DESCRIPTIONS[mode] || 'Unknown mode'));
|
|
68
|
+
console.log();
|
|
69
|
+
console.log(chalk.gray('Available modes:'));
|
|
70
|
+
Object.entries(MODE_LABELS).forEach(([key, label]) => {
|
|
71
|
+
const indicator = key === mode ? chalk.green(' ← current') : '';
|
|
72
|
+
console.log(chalk.gray(` • ${key}: `) + chalk.white(label) + indicator);
|
|
73
|
+
});
|
|
74
|
+
console.log();
|
|
75
|
+
console.log(chalk.gray('Use `commerce shipping update-mode --mode <mode>` to change'));
|
|
76
|
+
console.log();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
spinner.fail('Failed to fetch shipping mode');
|
|
81
|
+
throw createApiError(error);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=get-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-mode.js","sourceRoot":"","sources":["../../../src/commands/shipping/get-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/shipping/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/shipping/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,eAAe,SAKG,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { calculateCommand } from './calculate.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { getModeCommand } from './get-mode.js';
|
|
4
|
+
import { updateModeCommand } from './update-mode.js';
|
|
5
|
+
import { countriesCommand } from './countries.js';
|
|
5
6
|
export const shippingCommand = new Command('shipping')
|
|
6
|
-
.description('
|
|
7
|
+
.description('运输管理')
|
|
7
8
|
.addCommand(calculateCommand)
|
|
8
|
-
.addCommand(
|
|
9
|
-
.addCommand(
|
|
9
|
+
.addCommand(getModeCommand)
|
|
10
|
+
.addCommand(updateModeCommand)
|
|
11
|
+
.addCommand(countriesCommand);
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/shipping/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/shipping/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,MAAM,CAAC;KACnB,UAAU,CAAC,gBAAgB,CAAC;KAC5B,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,iBAAiB,CAAC;KAC7B,UAAU,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-mode.d.ts","sourceRoot":"","sources":["../../../src/commands/shipping/update-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwEpC,eAAO,MAAM,iBAAiB,SAAM,CAAC"}
|