@optima-chat/commerce-cli 1.8.0 → 1.9.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-review/SKILL.md +196 -0
- package/dist/api/rest/commerce.d.ts +117 -1
- package/dist/api/rest/commerce.d.ts.map +1 -1
- package/dist/api/rest/commerce.js +76 -0
- package/dist/api/rest/commerce.js.map +1 -1
- package/dist/commands/review/approve.d.ts +3 -0
- package/dist/commands/review/approve.d.ts.map +1 -0
- package/dist/commands/review/approve.js +73 -0
- package/dist/commands/review/approve.js.map +1 -0
- package/dist/commands/review/batch.d.ts +3 -0
- package/dist/commands/review/batch.d.ts.map +1 -0
- package/dist/commands/review/batch.js +120 -0
- package/dist/commands/review/batch.js.map +1 -0
- package/dist/commands/review/delete-response.d.ts +3 -0
- package/dist/commands/review/delete-response.d.ts.map +1 -0
- package/dist/commands/review/delete-response.js +91 -0
- package/dist/commands/review/delete-response.js.map +1 -0
- package/dist/commands/review/delete.d.ts +3 -0
- package/dist/commands/review/delete.d.ts.map +1 -0
- package/dist/commands/review/delete.js +93 -0
- package/dist/commands/review/delete.js.map +1 -0
- package/dist/commands/review/feature.d.ts +3 -0
- package/dist/commands/review/feature.d.ts.map +1 -0
- package/dist/commands/review/feature.js +89 -0
- package/dist/commands/review/feature.js.map +1 -0
- package/dist/commands/review/get.d.ts +3 -0
- package/dist/commands/review/get.d.ts.map +1 -0
- package/dist/commands/review/get.js +79 -0
- package/dist/commands/review/get.js.map +1 -0
- package/dist/commands/review/handle-report.d.ts +3 -0
- package/dist/commands/review/handle-report.d.ts.map +1 -0
- package/dist/commands/review/handle-report.js +85 -0
- package/dist/commands/review/handle-report.js.map +1 -0
- package/dist/commands/review/index.d.ts +3 -0
- package/dist/commands/review/index.d.ts.map +1 -0
- package/dist/commands/review/index.js +28 -0
- package/dist/commands/review/index.js.map +1 -0
- package/dist/commands/review/list.d.ts +3 -0
- package/dist/commands/review/list.d.ts.map +1 -0
- package/dist/commands/review/list.js +144 -0
- package/dist/commands/review/list.js.map +1 -0
- package/dist/commands/review/reject.d.ts +3 -0
- package/dist/commands/review/reject.d.ts.map +1 -0
- package/dist/commands/review/reject.js +73 -0
- package/dist/commands/review/reject.js.map +1 -0
- package/dist/commands/review/reports.d.ts +3 -0
- package/dist/commands/review/reports.d.ts.map +1 -0
- package/dist/commands/review/reports.js +90 -0
- package/dist/commands/review/reports.js.map +1 -0
- package/dist/commands/review/respond.d.ts +3 -0
- package/dist/commands/review/respond.d.ts.map +1 -0
- package/dist/commands/review/respond.js +106 -0
- package/dist/commands/review/respond.js.map +1 -0
- package/dist/commands/review/stats.d.ts +3 -0
- package/dist/commands/review/stats.d.ts.map +1 -0
- package/dist/commands/review/stats.js +71 -0
- package/dist/commands/review/stats.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/format.d.ts +28 -0
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js +186 -0
- package/dist/utils/format.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Command, Option } 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 { formatReportList } from '../../utils/format.js';
|
|
6
|
+
import { output } from '../../utils/output.js';
|
|
7
|
+
import { addEnhancedHelp } from '../../utils/helpText.js';
|
|
8
|
+
const cmd = new Command('reports')
|
|
9
|
+
.description('List review reports')
|
|
10
|
+
.addOption(new Option('-s, --status <status>', 'Filter by status')
|
|
11
|
+
.choices(['pending', 'reviewed', 'dismissed']))
|
|
12
|
+
.action(async (options) => {
|
|
13
|
+
try {
|
|
14
|
+
await listReports(options);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
handleError(error);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
addEnhancedHelp(cmd, {
|
|
21
|
+
examples: [
|
|
22
|
+
'# List all reports',
|
|
23
|
+
'$ commerce review reports',
|
|
24
|
+
'',
|
|
25
|
+
'# Filter by pending status',
|
|
26
|
+
'$ commerce review reports --status pending',
|
|
27
|
+
],
|
|
28
|
+
output: {
|
|
29
|
+
example: JSON.stringify({
|
|
30
|
+
success: true,
|
|
31
|
+
data: {
|
|
32
|
+
reports: [
|
|
33
|
+
{
|
|
34
|
+
id: 'report-uuid',
|
|
35
|
+
review_id: 'review-uuid',
|
|
36
|
+
reason: 'inappropriate',
|
|
37
|
+
description: 'Contains offensive language',
|
|
38
|
+
status: 'pending',
|
|
39
|
+
created_at: '2025-12-21T10:00:00Z',
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
total: 1,
|
|
43
|
+
},
|
|
44
|
+
}, null, 2),
|
|
45
|
+
},
|
|
46
|
+
relatedCommands: [
|
|
47
|
+
{ command: 'review handle-report', description: 'Process a report' },
|
|
48
|
+
{ command: 'review get', description: 'View the reported review' },
|
|
49
|
+
{ command: 'review delete', description: 'Delete reported review' },
|
|
50
|
+
],
|
|
51
|
+
notes: [
|
|
52
|
+
'Reports are submitted by customers for inappropriate content',
|
|
53
|
+
'Use handle-report to mark reports as reviewed or dismissed',
|
|
54
|
+
'Report reasons: fake, inappropriate, spam, other',
|
|
55
|
+
],
|
|
56
|
+
});
|
|
57
|
+
export const reportsCommand = cmd;
|
|
58
|
+
async function listReports(options) {
|
|
59
|
+
const spinner = output.spinner('Fetching reports...');
|
|
60
|
+
try {
|
|
61
|
+
const params = {};
|
|
62
|
+
if (options.status) {
|
|
63
|
+
params.status = options.status;
|
|
64
|
+
}
|
|
65
|
+
const result = await commerceApi.reviews.listReports(params);
|
|
66
|
+
spinner.succeed('Reports fetched');
|
|
67
|
+
const reports = result.reports || [];
|
|
68
|
+
const total = result.total || 0;
|
|
69
|
+
if (output.isJson()) {
|
|
70
|
+
output.success({ reports, total }, `Retrieved ${reports.length} reports`);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.log();
|
|
74
|
+
console.log(chalk.cyan(`Found ${total} reports`));
|
|
75
|
+
console.log();
|
|
76
|
+
if (reports.length === 0) {
|
|
77
|
+
console.log(chalk.yellow('No reports found'));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log(formatReportList(reports));
|
|
81
|
+
}
|
|
82
|
+
console.log();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
spinner.fail('Failed to fetch reports');
|
|
87
|
+
throw createApiError(error);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=reports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.js","sourceRoot":"","sources":["../../../src/commands/review/reports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"respond.d.ts","sourceRoot":"","sources":["../../../src/commands/review/respond.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyDpC,eAAO,MAAM,cAAc,SAAM,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
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, requireParam } from '../../utils/interactive.js';
|
|
9
|
+
const cmd = new Command('respond')
|
|
10
|
+
.description('Add or update merchant response to a review')
|
|
11
|
+
.option('--id <uuid>', 'Review ID (required)')
|
|
12
|
+
.option('--content <text>', 'Response content (required)')
|
|
13
|
+
.action(async (options) => {
|
|
14
|
+
try {
|
|
15
|
+
await respondToReview(options);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
handleError(error);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
addEnhancedHelp(cmd, {
|
|
22
|
+
examples: [
|
|
23
|
+
'# Reply to a review',
|
|
24
|
+
'$ commerce review respond --id abc-123-def --content "Thank you for your feedback!"',
|
|
25
|
+
'',
|
|
26
|
+
'# Interactive mode (prompt for content)',
|
|
27
|
+
'$ commerce review respond --id abc-123-def',
|
|
28
|
+
],
|
|
29
|
+
output: {
|
|
30
|
+
example: JSON.stringify({
|
|
31
|
+
success: true,
|
|
32
|
+
data: {
|
|
33
|
+
review_id: 'abc-123-def',
|
|
34
|
+
merchant_response: 'Thank you for your feedback!',
|
|
35
|
+
merchant_response_at: '2025-12-21T12:00:00Z',
|
|
36
|
+
},
|
|
37
|
+
message: 'Response added',
|
|
38
|
+
}, null, 2),
|
|
39
|
+
},
|
|
40
|
+
relatedCommands: [
|
|
41
|
+
{ command: 'review get', description: 'View review details' },
|
|
42
|
+
{ command: 'review delete-response', description: 'Delete your response' },
|
|
43
|
+
{ command: 'review list', description: 'Find reviews to respond to' },
|
|
44
|
+
],
|
|
45
|
+
notes: [
|
|
46
|
+
'You can only have one response per review',
|
|
47
|
+
'Responding again will update the existing response',
|
|
48
|
+
'Maximum 1000 characters',
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
export const respondCommand = cmd;
|
|
52
|
+
async function respondToReview(options) {
|
|
53
|
+
const reviewId = isInteractiveEnvironment()
|
|
54
|
+
? (options.id?.trim() || (() => { throw new ValidationError('Review ID is required', 'id'); })())
|
|
55
|
+
: requireParam(options.id, 'id', 'Review ID');
|
|
56
|
+
let content = options.content;
|
|
57
|
+
// Interactive prompt for content if not provided
|
|
58
|
+
if (!content && isInteractiveEnvironment()) {
|
|
59
|
+
const answers = await inquirer.prompt([
|
|
60
|
+
{
|
|
61
|
+
type: 'editor',
|
|
62
|
+
name: 'content',
|
|
63
|
+
message: 'Enter your response (max 1000 characters):',
|
|
64
|
+
validate: (input) => {
|
|
65
|
+
if (!input || input.trim().length === 0) {
|
|
66
|
+
return 'Response content is required';
|
|
67
|
+
}
|
|
68
|
+
if (input.length > 1000) {
|
|
69
|
+
return 'Response must be 1000 characters or less';
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
]);
|
|
75
|
+
content = answers.content;
|
|
76
|
+
}
|
|
77
|
+
if (!content || content.trim().length === 0) {
|
|
78
|
+
throw new ValidationError('Response content is required (--content)', 'content');
|
|
79
|
+
}
|
|
80
|
+
if (content.length > 1000) {
|
|
81
|
+
throw new ValidationError('Response must be 1000 characters or less', 'content');
|
|
82
|
+
}
|
|
83
|
+
const spinner = output.spinner('Adding response...');
|
|
84
|
+
try {
|
|
85
|
+
const review = await commerceApi.reviews.respond(reviewId, content);
|
|
86
|
+
spinner.succeed('Response added');
|
|
87
|
+
if (output.isJson()) {
|
|
88
|
+
output.success({
|
|
89
|
+
review_id: review.id,
|
|
90
|
+
merchant_response: review.merchant_response,
|
|
91
|
+
merchant_response_at: review.merchant_response_at,
|
|
92
|
+
}, 'Response added');
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log();
|
|
96
|
+
console.log(chalk.green('Response added successfully'));
|
|
97
|
+
console.log(chalk.gray('Review ID: ') + chalk.white(review.id));
|
|
98
|
+
console.log();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
spinner.fail('Failed to add response');
|
|
103
|
+
throw createApiError(error);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=respond.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"respond.js","sourceRoot":"","sources":["../../../src/commands/review/respond.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/commands/review/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqDpC,eAAO,MAAM,YAAY,SAAM,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { commerceApi } from '../../api/rest/commerce.js';
|
|
3
|
+
import { handleError, createApiError } from '../../utils/error.js';
|
|
4
|
+
import { formatReviewStats } from '../../utils/format.js';
|
|
5
|
+
import { output } from '../../utils/output.js';
|
|
6
|
+
import { addEnhancedHelp } from '../../utils/helpText.js';
|
|
7
|
+
const cmd = new Command('stats')
|
|
8
|
+
.description('Get shop review statistics')
|
|
9
|
+
.action(async () => {
|
|
10
|
+
try {
|
|
11
|
+
await getReviewStats();
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
handleError(error);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
addEnhancedHelp(cmd, {
|
|
18
|
+
examples: [
|
|
19
|
+
'# Get review statistics',
|
|
20
|
+
'$ commerce review stats',
|
|
21
|
+
],
|
|
22
|
+
output: {
|
|
23
|
+
example: JSON.stringify({
|
|
24
|
+
success: true,
|
|
25
|
+
data: {
|
|
26
|
+
total_reviews: 150,
|
|
27
|
+
average_rating: 4.5,
|
|
28
|
+
rating_distribution: {
|
|
29
|
+
'5': 80,
|
|
30
|
+
'4': 40,
|
|
31
|
+
'3': 20,
|
|
32
|
+
'2': 5,
|
|
33
|
+
'1': 5,
|
|
34
|
+
},
|
|
35
|
+
with_media_count: 30,
|
|
36
|
+
with_reply_count: 45,
|
|
37
|
+
featured_count: 10,
|
|
38
|
+
verified_count: 120,
|
|
39
|
+
},
|
|
40
|
+
message: 'Review statistics retrieved',
|
|
41
|
+
}, null, 2),
|
|
42
|
+
},
|
|
43
|
+
relatedCommands: [
|
|
44
|
+
{ command: 'review list', description: 'View all reviews' },
|
|
45
|
+
{ command: 'review list --status pending', description: 'View pending reviews' },
|
|
46
|
+
],
|
|
47
|
+
notes: [
|
|
48
|
+
'Shows overall review metrics for your store',
|
|
49
|
+
'Rating distribution shows count for each star level',
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
export const statsCommand = cmd;
|
|
53
|
+
async function getReviewStats() {
|
|
54
|
+
const spinner = output.spinner('Fetching review statistics...');
|
|
55
|
+
try {
|
|
56
|
+
const stats = await commerceApi.reviews.stats();
|
|
57
|
+
spinner.succeed('Statistics retrieved');
|
|
58
|
+
if (output.isJson()) {
|
|
59
|
+
output.success(stats, 'Review statistics retrieved');
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log();
|
|
63
|
+
console.log(formatReviewStats(stats));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
spinner.fail('Failed to fetch statistics');
|
|
68
|
+
throw createApiError(error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/commands/review/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7B,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe,CAAC,GAAG,EAAE;IACnB,QAAQ,EAAE;QACR,yBAAyB;QACzB,yBAAyB;KAC1B;IACD,MAAM,EAAE;QACN,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;YACtB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,aAAa,EAAE,GAAG;gBAClB,cAAc,EAAE,GAAG;gBACnB,mBAAmB,EAAE;oBACnB,GAAG,EAAE,EAAE;oBACP,GAAG,EAAE,EAAE;oBACP,GAAG,EAAE,EAAE;oBACP,GAAG,EAAE,CAAC;oBACN,GAAG,EAAE,CAAC;iBACP;gBACD,gBAAgB,EAAE,EAAE;gBACpB,gBAAgB,EAAE,EAAE;gBACpB,cAAc,EAAE,EAAE;gBAClB,cAAc,EAAE,GAAG;aACpB;YACD,OAAO,EAAE,6BAA6B;SACvC,EAAE,IAAI,EAAE,CAAC,CAAC;KACZ;IACD,eAAe,EAAE;QACf,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE;QAC3D,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,sBAAsB,EAAE;KACjF;IACD,KAAK,EAAE;QACL,6CAA6C;QAC7C,qDAAqD;KACtD;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAEhC,KAAK,UAAU,cAAc;IAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAEhE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAChD,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAExC,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,7 @@ import collection from './commands/collection/index.js';
|
|
|
23
23
|
import { testCommand } from './commands/test/index.js';
|
|
24
24
|
import { productPageCommand } from './commands/product-page/index.js';
|
|
25
25
|
import { easyshipCommand } from './commands/easyship/index.js';
|
|
26
|
+
import { reviewCommand } from './commands/review/index.js';
|
|
26
27
|
import { output } from './utils/output.js';
|
|
27
28
|
const __filename = fileURLToPath(import.meta.url);
|
|
28
29
|
const __dirname = dirname(__filename);
|
|
@@ -108,6 +109,7 @@ program.addCommand(homepage);
|
|
|
108
109
|
program.addCommand(collection);
|
|
109
110
|
program.addCommand(productPageCommand);
|
|
110
111
|
program.addCommand(easyshipCommand);
|
|
112
|
+
program.addCommand(reviewCommand);
|
|
111
113
|
program
|
|
112
114
|
.command('version')
|
|
113
115
|
.description('显示版本信息')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.js
CHANGED
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAkC7B,uCAAuC;AAEvC,MAAM,CAAC,MAAM,UAAU,GAA2C;IAChE,UAAU,EAAE;QACV,OAAO,EAAE,yBAAyB;QAClC,MAAM,EAAE,wBAAwB;QAChC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/format.d.ts
CHANGED
|
@@ -74,4 +74,32 @@ export declare function formatVariantList(variants: any[]): string;
|
|
|
74
74
|
* 格式化变体详情
|
|
75
75
|
*/
|
|
76
76
|
export declare function formatVariant(variant: any): string;
|
|
77
|
+
/**
|
|
78
|
+
* 格式化评价审核状态
|
|
79
|
+
*/
|
|
80
|
+
export declare function formatReviewStatus(status: string): string;
|
|
81
|
+
/**
|
|
82
|
+
* 格式化举报状态
|
|
83
|
+
*/
|
|
84
|
+
export declare function formatReportStatus(status: string): string;
|
|
85
|
+
/**
|
|
86
|
+
* 格式化评分星级
|
|
87
|
+
*/
|
|
88
|
+
export declare function formatRating(rating: number): string;
|
|
89
|
+
/**
|
|
90
|
+
* 格式化评价列表
|
|
91
|
+
*/
|
|
92
|
+
export declare function formatReviewList(reviews: any[]): string;
|
|
93
|
+
/**
|
|
94
|
+
* 格式化评价详情
|
|
95
|
+
*/
|
|
96
|
+
export declare function formatReview(review: any): string;
|
|
97
|
+
/**
|
|
98
|
+
* 格式化评价统计
|
|
99
|
+
*/
|
|
100
|
+
export declare function formatReviewStats(stats: any): string;
|
|
101
|
+
/**
|
|
102
|
+
* 格式化举报列表
|
|
103
|
+
*/
|
|
104
|
+
export declare function formatReportList(reports: any[]): string;
|
|
77
105
|
//# sourceMappingURL=format.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,GAAE,MAAc,GAAG,MAAM,CAGpF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAGlE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAaxD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAU,GAAG,MAAM,CAQtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CA8BzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAyClD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CA8BrD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAiE9C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CA6BxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,MAAM,CA4B5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAyBpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAoCzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CA2ClD"}
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,GAAE,MAAc,GAAG,MAAM,CAGpF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAGlE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAaxD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAU,GAAG,MAAM,CAQtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CA8BzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAyClD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CA8BrD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAiE9C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CA6BxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,MAAM,CA4B5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAyBpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAoCzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CA2ClD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAgCvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAqEhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAkCpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CA4BvD"}
|
package/dist/utils/format.js
CHANGED
|
@@ -403,4 +403,190 @@ export function formatVariant(variant) {
|
|
|
403
403
|
lines.push(separator);
|
|
404
404
|
return lines.join('\n');
|
|
405
405
|
}
|
|
406
|
+
/**
|
|
407
|
+
* 格式化评价审核状态
|
|
408
|
+
*/
|
|
409
|
+
export function formatReviewStatus(status) {
|
|
410
|
+
const statusMap = {
|
|
411
|
+
pending: { text: '待审核', color: chalk.yellow },
|
|
412
|
+
approved: { text: '已批准', color: chalk.green },
|
|
413
|
+
rejected: { text: '已拒绝', color: chalk.red },
|
|
414
|
+
};
|
|
415
|
+
const config = statusMap[status] || { text: status, color: chalk.white };
|
|
416
|
+
return config.color(config.text);
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* 格式化举报状态
|
|
420
|
+
*/
|
|
421
|
+
export function formatReportStatus(status) {
|
|
422
|
+
const statusMap = {
|
|
423
|
+
pending: { text: '待处理', color: chalk.yellow },
|
|
424
|
+
reviewed: { text: '已审核', color: chalk.green },
|
|
425
|
+
dismissed: { text: '已驳回', color: chalk.gray },
|
|
426
|
+
};
|
|
427
|
+
const config = statusMap[status] || { text: status, color: chalk.white };
|
|
428
|
+
return config.color(config.text);
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* 格式化评分星级
|
|
432
|
+
*/
|
|
433
|
+
export function formatRating(rating) {
|
|
434
|
+
const stars = '★'.repeat(rating) + '☆'.repeat(5 - rating);
|
|
435
|
+
return chalk.yellow(stars);
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* 格式化评价列表
|
|
439
|
+
*/
|
|
440
|
+
export function formatReviewList(reviews) {
|
|
441
|
+
if (!reviews || reviews.length === 0) {
|
|
442
|
+
return chalk.yellow('暂无评价');
|
|
443
|
+
}
|
|
444
|
+
const table = new Table({
|
|
445
|
+
head: [
|
|
446
|
+
chalk.cyan('ID'),
|
|
447
|
+
chalk.cyan('评分'),
|
|
448
|
+
chalk.cyan('评价者'),
|
|
449
|
+
chalk.cyan('商品'),
|
|
450
|
+
chalk.cyan('状态'),
|
|
451
|
+
chalk.cyan('精选'),
|
|
452
|
+
chalk.cyan('时间'),
|
|
453
|
+
],
|
|
454
|
+
colWidths: [14, 12, 18, 25, 10, 8, 18],
|
|
455
|
+
wordWrap: true,
|
|
456
|
+
});
|
|
457
|
+
reviews.forEach((review) => {
|
|
458
|
+
table.push([
|
|
459
|
+
truncateId(review.id, 12),
|
|
460
|
+
formatRating(review.rating || 0),
|
|
461
|
+
review.reviewer_name || review.customer_name || '-',
|
|
462
|
+
(review.product_name || '-').substring(0, 22) + (review.product_name?.length > 22 ? '...' : ''),
|
|
463
|
+
formatReviewStatus(review.moderation_status || 'pending'),
|
|
464
|
+
review.is_featured ? chalk.green('是') : chalk.gray('否'),
|
|
465
|
+
formatDate(review.created_at),
|
|
466
|
+
]);
|
|
467
|
+
});
|
|
468
|
+
return table.toString();
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* 格式化评价详情
|
|
472
|
+
*/
|
|
473
|
+
export function formatReview(review) {
|
|
474
|
+
const lines = [];
|
|
475
|
+
const separator = chalk.gray('─'.repeat(60));
|
|
476
|
+
lines.push(separator);
|
|
477
|
+
lines.push(chalk.cyan.bold('评价详情'));
|
|
478
|
+
lines.push(separator);
|
|
479
|
+
lines.push(`${chalk.gray('ID:')} ${review.id}`);
|
|
480
|
+
lines.push(`${chalk.gray('评分:')} ${formatRating(review.rating || 0)} (${review.rating}/5)`);
|
|
481
|
+
lines.push(`${chalk.gray('状态:')} ${formatReviewStatus(review.moderation_status || 'pending')}`);
|
|
482
|
+
if (review.title) {
|
|
483
|
+
lines.push(`${chalk.gray('标题:')} ${review.title}`);
|
|
484
|
+
}
|
|
485
|
+
if (review.content) {
|
|
486
|
+
lines.push(`${chalk.gray('内容:')} ${review.content}`);
|
|
487
|
+
}
|
|
488
|
+
lines.push('');
|
|
489
|
+
lines.push(chalk.gray('评价者信息'));
|
|
490
|
+
if (review.reviewer_name || review.customer_name) {
|
|
491
|
+
lines.push(`${chalk.gray('姓名:')} ${review.reviewer_name || review.customer_name}`);
|
|
492
|
+
}
|
|
493
|
+
if (review.reviewer_email) {
|
|
494
|
+
lines.push(`${chalk.gray('邮箱:')} ${review.reviewer_email}`);
|
|
495
|
+
}
|
|
496
|
+
if (review.is_verified_purchase) {
|
|
497
|
+
lines.push(`${chalk.gray('已验证购买:')} ${chalk.green('是')}`);
|
|
498
|
+
}
|
|
499
|
+
lines.push('');
|
|
500
|
+
lines.push(chalk.gray('商品信息'));
|
|
501
|
+
if (review.product_id) {
|
|
502
|
+
lines.push(`${chalk.gray('商品 ID:')} ${review.product_id}`);
|
|
503
|
+
}
|
|
504
|
+
if (review.product_name) {
|
|
505
|
+
lines.push(`${chalk.gray('商品名称:')} ${review.product_name}`);
|
|
506
|
+
}
|
|
507
|
+
lines.push('');
|
|
508
|
+
lines.push(chalk.gray('互动数据'));
|
|
509
|
+
lines.push(`${chalk.gray('有用:')} ${review.helpful_count || 0}`);
|
|
510
|
+
lines.push(`${chalk.gray('无用:')} ${review.not_helpful_count || 0}`);
|
|
511
|
+
lines.push(`${chalk.gray('精选:')} ${review.is_featured ? chalk.green('是') : chalk.gray('否')}`);
|
|
512
|
+
if (review.media_ids && review.media_ids.length > 0) {
|
|
513
|
+
lines.push(`${chalk.gray('媒体数量:')} ${review.media_ids.length}`);
|
|
514
|
+
}
|
|
515
|
+
if (review.merchant_response) {
|
|
516
|
+
lines.push('');
|
|
517
|
+
lines.push(chalk.cyan('商家回复'));
|
|
518
|
+
lines.push(`${chalk.gray('内容:')} ${review.merchant_response}`);
|
|
519
|
+
if (review.merchant_response_at) {
|
|
520
|
+
lines.push(`${chalk.gray('回复时间:')} ${formatDate(review.merchant_response_at)}`);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
lines.push('');
|
|
524
|
+
lines.push(`${chalk.gray('创建时间:')} ${formatDate(review.created_at)}`);
|
|
525
|
+
if (review.is_edited) {
|
|
526
|
+
lines.push(`${chalk.gray('编辑时间:')} ${formatDate(review.edited_at)}`);
|
|
527
|
+
}
|
|
528
|
+
lines.push(separator);
|
|
529
|
+
return lines.join('\n');
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* 格式化评价统计
|
|
533
|
+
*/
|
|
534
|
+
export function formatReviewStats(stats) {
|
|
535
|
+
const lines = [];
|
|
536
|
+
const separator = chalk.gray('─'.repeat(60));
|
|
537
|
+
lines.push(separator);
|
|
538
|
+
lines.push(chalk.cyan.bold('评价统计'));
|
|
539
|
+
lines.push(separator);
|
|
540
|
+
lines.push(`${chalk.gray('总评价数:')} ${stats.total_reviews || 0}`);
|
|
541
|
+
lines.push(`${chalk.gray('平均评分:')} ${formatRating(Math.round(stats.average_rating || 0))} (${(stats.average_rating || 0).toFixed(1)})`);
|
|
542
|
+
if (stats.rating_distribution) {
|
|
543
|
+
lines.push('');
|
|
544
|
+
lines.push(chalk.gray('评分分布:'));
|
|
545
|
+
for (let i = 5; i >= 1; i--) {
|
|
546
|
+
const count = stats.rating_distribution[i] || 0;
|
|
547
|
+
const total = stats.total_reviews || 1;
|
|
548
|
+
const percent = ((count / total) * 100).toFixed(1);
|
|
549
|
+
const bar = '█'.repeat(Math.round(count / total * 20));
|
|
550
|
+
lines.push(` ${chalk.yellow('★'.repeat(i) + '☆'.repeat(5 - i))} ${chalk.gray(bar.padEnd(20))} ${count} (${percent}%)`);
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
lines.push('');
|
|
554
|
+
lines.push(`${chalk.gray('带媒体:')} ${stats.with_media_count || 0}`);
|
|
555
|
+
lines.push(`${chalk.gray('已回复:')} ${stats.with_reply_count || 0}`);
|
|
556
|
+
lines.push(`${chalk.gray('精选数:')} ${stats.featured_count || 0}`);
|
|
557
|
+
if (stats.verified_count !== undefined) {
|
|
558
|
+
lines.push(`${chalk.gray('已验证购买:')} ${stats.verified_count}`);
|
|
559
|
+
}
|
|
560
|
+
lines.push(separator);
|
|
561
|
+
return lines.join('\n');
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* 格式化举报列表
|
|
565
|
+
*/
|
|
566
|
+
export function formatReportList(reports) {
|
|
567
|
+
if (!reports || reports.length === 0) {
|
|
568
|
+
return chalk.yellow('暂无举报');
|
|
569
|
+
}
|
|
570
|
+
const table = new Table({
|
|
571
|
+
head: [
|
|
572
|
+
chalk.cyan('举报 ID'),
|
|
573
|
+
chalk.cyan('评价 ID'),
|
|
574
|
+
chalk.cyan('原因'),
|
|
575
|
+
chalk.cyan('状态'),
|
|
576
|
+
chalk.cyan('时间'),
|
|
577
|
+
],
|
|
578
|
+
colWidths: [14, 14, 25, 12, 18],
|
|
579
|
+
wordWrap: true,
|
|
580
|
+
});
|
|
581
|
+
reports.forEach((report) => {
|
|
582
|
+
table.push([
|
|
583
|
+
truncateId(report.id, 12),
|
|
584
|
+
truncateId(report.review_id, 12),
|
|
585
|
+
report.reason || '-',
|
|
586
|
+
formatReportStatus(report.status || 'pending'),
|
|
587
|
+
formatDate(report.created_at),
|
|
588
|
+
]);
|
|
589
|
+
});
|
|
590
|
+
return table.toString();
|
|
591
|
+
}
|
|
406
592
|
//# sourceMappingURL=format.js.map
|