cbs-4px-merchant-cli 0.0.7 → 0.0.8
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/README.4px.md +38 -5
- package/README.cainiao.md +38 -5
- package/README.md +38 -5
- package/dist/cli.js +242 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/address.js +6 -26
- package/dist/commands/address.js.map +1 -1
- package/dist/commands/claim.js +14 -34
- package/dist/commands/claim.js.map +1 -1
- package/dist/commands/config.js +222 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/country.js +6 -26
- package/dist/commands/country.js.map +1 -1
- package/dist/commands/customs.js +17 -65
- package/dist/commands/customs.js.map +1 -1
- package/dist/commands/finance.js +56 -204
- package/dist/commands/finance.js.map +1 -1
- package/dist/commands/label.js +6 -26
- package/dist/commands/label.js.map +1 -1
- package/dist/commands/notice.js +22 -86
- package/dist/commands/notice.js.map +1 -1
- package/dist/commands/onboarding.d.ts +79 -0
- package/dist/commands/onboarding.js +384 -0
- package/dist/commands/onboarding.js.map +1 -0
- package/dist/commands/order.d.ts +26 -0
- package/dist/commands/order.js +254 -58
- package/dist/commands/order.js.map +1 -1
- package/dist/commands/pickup.js +29 -97
- package/dist/commands/pickup.js.map +1 -1
- package/dist/commands/platform.d.ts +26 -0
- package/dist/commands/platform.js +254 -0
- package/dist/commands/platform.js.map +1 -0
- package/dist/commands/problem.js +56 -170
- package/dist/commands/problem.js.map +1 -1
- package/dist/commands/product.js +52 -155
- package/dist/commands/product.js.map +1 -1
- package/dist/commands/service.js +64 -186
- package/dist/commands/service.js.map +1 -1
- package/dist/commands/skill.d.ts +1 -1
- package/dist/commands/skill.js +1 -1
- package/dist/commands/track.js +20 -74
- package/dist/commands/track.js.map +1 -1
- package/dist/commands/update.js +1 -1
- package/dist/digital-employee-skills/cbs-4px-merchant-cli-order-fulfillment.zip +0 -0
- package/dist/digital-employee-skills/cbs-cainiao-merchant-cli-order-fulfillment.zip +0 -0
- package/dist/index.js +0 -0
- package/dist/services/api-client.d.ts +38 -1
- package/dist/services/api-client.js +275 -9
- package/dist/services/api-client.js.map +1 -1
- package/dist/types/index.d.ts +294 -0
- package/dist/utils/confirm.d.ts +18 -0
- package/dist/utils/confirm.js +50 -0
- package/dist/utils/confirm.js.map +1 -0
- package/dist/utils/run-command.d.ts +24 -0
- package/dist/utils/run-command.js +58 -0
- package/dist/utils/run-command.js.map +1 -0
- package/package.json +2 -1
- package/scripts/postinstall.js +1 -1
- package/skill/SKILL.md +112 -4
- package/skill/package.json +3 -1
- package/skill/reference/index.md +30 -3
- package/skill/reference/onboarding.md +573 -0
- package/skill/reference/order.md +194 -0
- package/skill/reference/platform.md +317 -0
- package/skill/reference/update.md +1 -1
package/dist/commands/notice.js
CHANGED
|
@@ -1,57 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ApiClient } from '../services/api-client.js';
|
|
3
|
-
import { createSpinner } from '../utils/logger.js';
|
|
4
|
-
import { handleError } from './error-handler.js';
|
|
1
|
+
import { runCommand, withClient } from '../utils/run-command.js';
|
|
5
2
|
import chalk from 'chalk';
|
|
6
3
|
export async function noticeListCommand(opts) {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
spinner.stop();
|
|
15
|
-
if (opts.output === 'json') {
|
|
16
|
-
console.log(JSON.stringify(data ?? null, null, 2));
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
if (!data) {
|
|
20
|
-
console.log('');
|
|
21
|
-
console.log(chalk.yellow(' 暂无数据'));
|
|
22
|
-
console.log('');
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
printNoticeList(data);
|
|
26
|
-
}
|
|
27
|
-
catch (e) {
|
|
28
|
-
spinner.stop();
|
|
29
|
-
handleError(e);
|
|
30
|
-
}
|
|
4
|
+
const pageNum = opts.page ? parseInt(opts.page, 10) : undefined;
|
|
5
|
+
const pageSize = opts.size ? parseInt(opts.size, 10) : undefined;
|
|
6
|
+
await runCommand(opts, {
|
|
7
|
+
spinner: '正在查询公告列表...',
|
|
8
|
+
exec: (client) => client.listNotice(opts.category, pageNum, pageSize),
|
|
9
|
+
render: printNoticeList,
|
|
10
|
+
});
|
|
31
11
|
}
|
|
32
12
|
export async function noticeDetailCommand(code, opts) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
spinner.stop();
|
|
39
|
-
if (opts.output === 'json') {
|
|
40
|
-
console.log(JSON.stringify(data ?? null, null, 2));
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
if (!data) {
|
|
44
|
-
console.log('');
|
|
45
|
-
console.log(chalk.yellow(' 暂无数据'));
|
|
46
|
-
console.log('');
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
printNoticeDetail(data);
|
|
50
|
-
}
|
|
51
|
-
catch (e) {
|
|
52
|
-
spinner.stop();
|
|
53
|
-
handleError(e);
|
|
54
|
-
}
|
|
13
|
+
await runCommand(opts, {
|
|
14
|
+
spinner: '正在查询公告详情...',
|
|
15
|
+
exec: (client) => client.getNoticeDetail(code),
|
|
16
|
+
render: printNoticeDetail,
|
|
17
|
+
});
|
|
55
18
|
}
|
|
56
19
|
function printNoticeList(data) {
|
|
57
20
|
console.log('');
|
|
@@ -100,15 +63,10 @@ function printNoticeDetail(data) {
|
|
|
100
63
|
console.log('');
|
|
101
64
|
}
|
|
102
65
|
export async function messageListCommand(opts) {
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const pageNum = opts.page ? parseInt(opts.page, 10) : undefined;
|
|
108
|
-
const pageSize = opts.size ? parseInt(opts.size, 10) : undefined;
|
|
109
|
-
const isRead = opts.read === 'true' ? true : opts.read === 'false' ? false : undefined;
|
|
110
|
-
const data = await client.listMessage(opts.bizCode, isRead, opts.keyword, pageNum, pageSize);
|
|
111
|
-
spinner.stop();
|
|
66
|
+
const pageNum = opts.page ? parseInt(opts.page, 10) : undefined;
|
|
67
|
+
const pageSize = opts.size ? parseInt(opts.size, 10) : undefined;
|
|
68
|
+
const isRead = opts.read === 'true' ? true : opts.read === 'false' ? false : undefined;
|
|
69
|
+
await withClient(opts, '正在查询站内消息...', (client) => client.listMessage(opts.bizCode, isRead, opts.keyword, pageNum, pageSize), (data) => {
|
|
112
70
|
if (opts.output === 'json') {
|
|
113
71
|
console.log(JSON.stringify(data ?? null, null, 2));
|
|
114
72
|
return;
|
|
@@ -137,19 +95,10 @@ export async function messageListCommand(opts) {
|
|
|
137
95
|
}
|
|
138
96
|
console.log(chalk.gray(` 共 ${data.total ?? 0} 条`));
|
|
139
97
|
console.log('');
|
|
140
|
-
}
|
|
141
|
-
catch (e) {
|
|
142
|
-
spinner.stop();
|
|
143
|
-
handleError(e);
|
|
144
|
-
}
|
|
98
|
+
});
|
|
145
99
|
}
|
|
146
100
|
export async function messageDetailCommand(recordId, opts) {
|
|
147
|
-
|
|
148
|
-
try {
|
|
149
|
-
spinner.start();
|
|
150
|
-
const client = new ApiClient(new ConfigManager(), opts);
|
|
151
|
-
const data = await client.getMessageDetail(recordId);
|
|
152
|
-
spinner.stop();
|
|
101
|
+
await withClient(opts, '正在查询消息详情...', (client) => client.getMessageDetail(recordId), (data) => {
|
|
153
102
|
if (opts.output === 'json') {
|
|
154
103
|
console.log(JSON.stringify(data ?? null, null, 2));
|
|
155
104
|
return;
|
|
@@ -181,19 +130,10 @@ export async function messageDetailCommand(recordId, opts) {
|
|
|
181
130
|
console.log(` ${data.content}`);
|
|
182
131
|
}
|
|
183
132
|
console.log('');
|
|
184
|
-
}
|
|
185
|
-
catch (e) {
|
|
186
|
-
spinner.stop();
|
|
187
|
-
handleError(e);
|
|
188
|
-
}
|
|
133
|
+
});
|
|
189
134
|
}
|
|
190
135
|
export async function unreadCountCommand(opts) {
|
|
191
|
-
|
|
192
|
-
try {
|
|
193
|
-
spinner.start();
|
|
194
|
-
const client = new ApiClient(new ConfigManager(), opts);
|
|
195
|
-
const data = await client.getUnreadMessageCount();
|
|
196
|
-
spinner.stop();
|
|
136
|
+
await withClient(opts, '正在查询未读消息数...', (client) => client.getUnreadMessageCount(), (data) => {
|
|
197
137
|
if (opts.output === 'json') {
|
|
198
138
|
console.log(JSON.stringify(data ?? null, null, 2));
|
|
199
139
|
return;
|
|
@@ -201,10 +141,6 @@ export async function unreadCountCommand(opts) {
|
|
|
201
141
|
console.log('');
|
|
202
142
|
console.log(` 未读消息数量: ${chalk.bold.yellow(String(data?.unReadCount ?? 0))}`);
|
|
203
143
|
console.log('');
|
|
204
|
-
}
|
|
205
|
-
catch (e) {
|
|
206
|
-
spinner.stop();
|
|
207
|
-
handleError(e);
|
|
208
|
-
}
|
|
144
|
+
});
|
|
209
145
|
}
|
|
210
146
|
//# sourceMappingURL=notice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notice.js","sourceRoot":"","sources":["../../src/commands/notice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"notice.js","sourceRoot":"","sources":["../../src/commands/notice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { type WriteOptions } from '../utils/confirm.js';
|
|
2
|
+
import type { GlobalOptions } from '../types/index.js';
|
|
3
|
+
export interface OnboardingAuthIndivCommandOptions extends WriteOptions {
|
|
4
|
+
name: string;
|
|
5
|
+
certNumber: string;
|
|
6
|
+
mobile: string;
|
|
7
|
+
authType: string;
|
|
8
|
+
bankCard?: string;
|
|
9
|
+
agent?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface OnboardingAuthCodeCommandOptions extends WriteOptions {
|
|
12
|
+
authCode: string;
|
|
13
|
+
flowId: string;
|
|
14
|
+
authType?: string;
|
|
15
|
+
agent?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface OnboardingAuthOrganCommandOptions extends WriteOptions {
|
|
18
|
+
name: string;
|
|
19
|
+
certNumber: string;
|
|
20
|
+
certType?: string;
|
|
21
|
+
agentAccountId?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface OnboardingAuthGatCommandOptions extends WriteOptions {
|
|
24
|
+
customerProfile: string;
|
|
25
|
+
entity: string;
|
|
26
|
+
name: string;
|
|
27
|
+
mobile: string;
|
|
28
|
+
email: string;
|
|
29
|
+
contactName?: string;
|
|
30
|
+
legalPerson?: string;
|
|
31
|
+
certNumber?: string;
|
|
32
|
+
country?: string;
|
|
33
|
+
countryCode?: string;
|
|
34
|
+
alpha2Code?: string;
|
|
35
|
+
state?: string;
|
|
36
|
+
stateCode?: string;
|
|
37
|
+
city?: string;
|
|
38
|
+
cityCode?: string;
|
|
39
|
+
county?: string;
|
|
40
|
+
countyCode?: string;
|
|
41
|
+
address?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface OnboardingAuthRemitCommandOptions extends WriteOptions {
|
|
44
|
+
flowId: string;
|
|
45
|
+
amount: string;
|
|
46
|
+
}
|
|
47
|
+
export interface OnboardingBrandListCommandOptions extends GlobalOptions {
|
|
48
|
+
customerType?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface OnboardingBrandOpenCommandOptions extends WriteOptions {
|
|
51
|
+
serviceCode: string;
|
|
52
|
+
customerType?: string;
|
|
53
|
+
country: string;
|
|
54
|
+
address: string;
|
|
55
|
+
state?: string;
|
|
56
|
+
city?: string;
|
|
57
|
+
county?: string;
|
|
58
|
+
customerName: string;
|
|
59
|
+
contactName: string;
|
|
60
|
+
mobile: string;
|
|
61
|
+
email: string;
|
|
62
|
+
legalName?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface OnboardingContractListCommandOptions extends GlobalOptions {
|
|
65
|
+
page?: string;
|
|
66
|
+
size?: string;
|
|
67
|
+
}
|
|
68
|
+
export declare function onboardingProgressCommand(opts: GlobalOptions): Promise<void>;
|
|
69
|
+
export declare function onboardingAuthScheduleCommand(opts: GlobalOptions): Promise<void>;
|
|
70
|
+
export declare function onboardingAuthIndivCommand(opts: OnboardingAuthIndivCommandOptions): Promise<void>;
|
|
71
|
+
export declare function onboardingAuthCodeCommand(opts: OnboardingAuthCodeCommandOptions): Promise<void>;
|
|
72
|
+
export declare function onboardingAuthOrganCommand(opts: OnboardingAuthOrganCommandOptions): Promise<void>;
|
|
73
|
+
export declare function onboardingAuthGatCommand(opts: OnboardingAuthGatCommandOptions): Promise<void>;
|
|
74
|
+
export declare function onboardingAuthRemitCommand(opts: OnboardingAuthRemitCommandOptions): Promise<void>;
|
|
75
|
+
export declare function onboardingCustomerTypeCommand(opts: GlobalOptions): Promise<void>;
|
|
76
|
+
export declare function onboardingBrandListCommand(opts: OnboardingBrandListCommandOptions): Promise<void>;
|
|
77
|
+
export declare function onboardingBrandOpenCommand(opts: OnboardingBrandOpenCommandOptions): Promise<void>;
|
|
78
|
+
export declare function onboardingContractListCommand(opts: OnboardingContractListCommandOptions): Promise<void>;
|
|
79
|
+
export declare function onboardingContractUrlCommand(contractCode: string, opts: GlobalOptions): Promise<void>;
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
import { runCommand, withClient } from '../utils/run-command.js';
|
|
2
|
+
import { confirmWrite } from '../utils/confirm.js';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
// ==================== 1. Onboarding Progress ====================
|
|
5
|
+
export async function onboardingProgressCommand(opts) {
|
|
6
|
+
await runCommand(opts, {
|
|
7
|
+
spinner: '正在查询入驻进度...',
|
|
8
|
+
exec: (client) => client.queryOnboardingProgress(),
|
|
9
|
+
render: printProgress,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
const NODE_LABELS = {
|
|
13
|
+
certification: '待实名认证',
|
|
14
|
+
contractApply: '待申请合同',
|
|
15
|
+
contractSign: '待签署合同',
|
|
16
|
+
brandSuccess: '品牌已开通',
|
|
17
|
+
};
|
|
18
|
+
const CUSTOMER_PROFILE_LABELS = {
|
|
19
|
+
'0': '中国大陆',
|
|
20
|
+
'1': '港澳台',
|
|
21
|
+
'2': '海外',
|
|
22
|
+
};
|
|
23
|
+
const ENTITY_LABELS = {
|
|
24
|
+
'1': '个人',
|
|
25
|
+
'2': '企业',
|
|
26
|
+
};
|
|
27
|
+
function printProgress(data) {
|
|
28
|
+
console.log('');
|
|
29
|
+
console.log(chalk.bold('入驻进度'));
|
|
30
|
+
console.log(chalk.gray('─'.repeat(50)));
|
|
31
|
+
console.log(` 实名认证 ${stage(data.certification)}`);
|
|
32
|
+
console.log(` 合同申请 ${stage(data.contractApply)}`);
|
|
33
|
+
console.log(` 合同签署 ${stage(data.contractSign)}`);
|
|
34
|
+
if (data.currentNode) {
|
|
35
|
+
console.log(` 当前节点 ${chalk.yellow(NODE_LABELS[data.currentNode] ?? data.currentNode)}`);
|
|
36
|
+
}
|
|
37
|
+
if (data.customerProfile) {
|
|
38
|
+
console.log(` 客户类型 ${label(CUSTOMER_PROFILE_LABELS, data.customerProfile)}`);
|
|
39
|
+
}
|
|
40
|
+
if (data.entity) {
|
|
41
|
+
console.log(` 经济主体 ${label(ENTITY_LABELS, data.entity)}`);
|
|
42
|
+
}
|
|
43
|
+
console.log('');
|
|
44
|
+
}
|
|
45
|
+
function stage(done) {
|
|
46
|
+
return done ? chalk.green('已完成') : chalk.gray('未完成');
|
|
47
|
+
}
|
|
48
|
+
// ==================== 2. Auth Schedule ====================
|
|
49
|
+
export async function onboardingAuthScheduleCommand(opts) {
|
|
50
|
+
await runCommand(opts, {
|
|
51
|
+
spinner: '正在查询实名认证进度...',
|
|
52
|
+
exec: (client) => client.queryAuthSchedule(),
|
|
53
|
+
render: printAuthSchedule,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const AUTH_STATUS_LABELS = {
|
|
57
|
+
'0': '未开始',
|
|
58
|
+
'1': '进行中',
|
|
59
|
+
'2': '已完成',
|
|
60
|
+
'3': '认证失败',
|
|
61
|
+
'4': '待对公打款验证',
|
|
62
|
+
};
|
|
63
|
+
const AUTH_TYPE_LABELS = {
|
|
64
|
+
'0': '个人认证',
|
|
65
|
+
'1': '企业认证',
|
|
66
|
+
};
|
|
67
|
+
function printAuthSchedule(data) {
|
|
68
|
+
console.log('');
|
|
69
|
+
console.log(chalk.bold('实名认证进度'));
|
|
70
|
+
console.log(chalk.gray('─'.repeat(50)));
|
|
71
|
+
if (data.authStatus != null) {
|
|
72
|
+
console.log(` 认证状态 ${chalk.yellow(label(AUTH_STATUS_LABELS, String(data.authStatus)))}`);
|
|
73
|
+
}
|
|
74
|
+
if (data.authType != null) {
|
|
75
|
+
console.log(` 认证类型 ${label(AUTH_TYPE_LABELS, String(data.authType))}`);
|
|
76
|
+
}
|
|
77
|
+
if (data.customerType) {
|
|
78
|
+
console.log(` 客户类型 ${label(CUSTOMER_PROFILE_LABELS, data.customerType)}`);
|
|
79
|
+
}
|
|
80
|
+
console.log('');
|
|
81
|
+
}
|
|
82
|
+
// ==================== 3. Individual Real-name Auth (write) ====================
|
|
83
|
+
export async function onboardingAuthIndivCommand(opts) {
|
|
84
|
+
const via = opts.authType === '1' ? '银行卡验证' : '手机号验证';
|
|
85
|
+
const ok = await confirmWrite(opts, `为 ${chalk.cyan(opts.name)} 发起个人实名认证(${via})`);
|
|
86
|
+
if (!ok)
|
|
87
|
+
return;
|
|
88
|
+
await withClient(opts, '正在发起个人实名认证...', (client) => client.startIndivRealNameAuth({
|
|
89
|
+
name: opts.name,
|
|
90
|
+
certNumber: opts.certNumber,
|
|
91
|
+
mobile: opts.mobile,
|
|
92
|
+
authType: opts.authType,
|
|
93
|
+
bankCard: opts.bankCard,
|
|
94
|
+
isAgent: opts.agent,
|
|
95
|
+
}), (flowId) => {
|
|
96
|
+
if (opts.output === 'json') {
|
|
97
|
+
console.log(JSON.stringify({ flowId: flowId ?? null }, null, 2));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
console.log('');
|
|
101
|
+
console.log(` ${chalk.green('✔')} 已发起个人实名认证`);
|
|
102
|
+
console.log(` flowId ${chalk.cyan(flowId ?? '-')}`);
|
|
103
|
+
console.log('');
|
|
104
|
+
console.log(chalk.gray(' 验证码下发后,用 auth code --flow-id <flowId> --auth-code <code> 完成认证'));
|
|
105
|
+
console.log('');
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// ==================== 4. Check Auth Code (write) ====================
|
|
109
|
+
export async function onboardingAuthCodeCommand(opts) {
|
|
110
|
+
const ok = await confirmWrite(opts, `提交验证码完成实名认证(flowId ${chalk.cyan(opts.flowId)})`);
|
|
111
|
+
if (!ok)
|
|
112
|
+
return;
|
|
113
|
+
await withClient(opts, '正在校验验证码...', (client) => client.checkAuthCode({
|
|
114
|
+
authCode: opts.authCode,
|
|
115
|
+
flowId: opts.flowId,
|
|
116
|
+
authType: opts.authType,
|
|
117
|
+
isAgent: opts.agent,
|
|
118
|
+
}), (result) => printWriteResult(opts, result, '验证码校验通过'));
|
|
119
|
+
}
|
|
120
|
+
// ==================== 5. Organization Real-name Auth (write) ====================
|
|
121
|
+
export async function onboardingAuthOrganCommand(opts) {
|
|
122
|
+
const ok = await confirmWrite(opts, `为 ${chalk.cyan(opts.name)} 发起企业实名认证`);
|
|
123
|
+
if (!ok)
|
|
124
|
+
return;
|
|
125
|
+
await withClient(opts, '正在发起企业实名认证...', (client) => client.startOrganRealNameAuth({
|
|
126
|
+
name: opts.name,
|
|
127
|
+
certNumber: opts.certNumber,
|
|
128
|
+
certType: opts.certType ? parseInt(opts.certType, 10) : undefined,
|
|
129
|
+
agentAccountId: opts.agentAccountId,
|
|
130
|
+
}), (result) => {
|
|
131
|
+
if (opts.output === 'json') {
|
|
132
|
+
console.log(JSON.stringify({ result: result ?? null }, null, 2));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
console.log('');
|
|
136
|
+
console.log(` ${chalk.green('✔')} 已发起企业实名认证`);
|
|
137
|
+
if (result)
|
|
138
|
+
console.log(` 返回 ${result}`);
|
|
139
|
+
console.log('');
|
|
140
|
+
console.log(chalk.gray(' 待对公打款验证时,用 auth remit --flow-id <flowId> --amount <分> 完成'));
|
|
141
|
+
console.log('');
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// ==================== 6. GAT / Overseas Auth (write) ====================
|
|
145
|
+
export async function onboardingAuthGatCommand(opts) {
|
|
146
|
+
const profile = label(CUSTOMER_PROFILE_LABELS, opts.customerProfile);
|
|
147
|
+
const entity = label(ENTITY_LABELS, opts.entity);
|
|
148
|
+
const ok = await confirmWrite(opts, `提交${profile}${entity}客户实名认证资料(${chalk.cyan(opts.name)}),进入人工审核`);
|
|
149
|
+
if (!ok)
|
|
150
|
+
return;
|
|
151
|
+
await withClient(opts, '正在提交实名认证资料...', (client) => client.authSaveGAT({
|
|
152
|
+
customerProfile: opts.customerProfile,
|
|
153
|
+
// The CLI flag is spelled correctly; the backend field is not.
|
|
154
|
+
enitity: opts.entity,
|
|
155
|
+
name: opts.name,
|
|
156
|
+
mobile: opts.mobile,
|
|
157
|
+
email: opts.email,
|
|
158
|
+
contactName: opts.contactName,
|
|
159
|
+
legalPerson: opts.legalPerson,
|
|
160
|
+
certNumber: opts.certNumber,
|
|
161
|
+
country: opts.country,
|
|
162
|
+
countryCode: opts.countryCode,
|
|
163
|
+
alpha2Code: opts.alpha2Code,
|
|
164
|
+
state: opts.state,
|
|
165
|
+
stateCode: opts.stateCode,
|
|
166
|
+
city: opts.city,
|
|
167
|
+
cityCode: opts.cityCode,
|
|
168
|
+
county: opts.county,
|
|
169
|
+
countyCode: opts.countyCode,
|
|
170
|
+
address: opts.address,
|
|
171
|
+
}), (result) => {
|
|
172
|
+
if (opts.output === 'json') {
|
|
173
|
+
console.log(JSON.stringify({ result: result ?? null }, null, 2));
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
console.log('');
|
|
177
|
+
console.log(` ${chalk.green('✔')} 资料已提交,进入人工审核队列`);
|
|
178
|
+
if (result)
|
|
179
|
+
console.log(` 返回 ${result}`);
|
|
180
|
+
console.log('');
|
|
181
|
+
console.log(chalk.gray(' 人工审核无法加速,用 progress / auth schedule 查看进度'));
|
|
182
|
+
console.log('');
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
// ==================== 7. Check Remit Amount (write) ====================
|
|
186
|
+
export async function onboardingAuthRemitCommand(opts) {
|
|
187
|
+
const ok = await confirmWrite(opts, `校验对公打款金额 ${chalk.cyan(opts.amount)} 分(flowId ${opts.flowId}),有重试次数限制`);
|
|
188
|
+
if (!ok)
|
|
189
|
+
return;
|
|
190
|
+
await withClient(opts, '正在校验打款金额...', (client) => client.checkRemitAmount(opts.flowId, parseInt(opts.amount, 10)), (result) => printWriteResult(opts, result, '打款金额校验通过'));
|
|
191
|
+
}
|
|
192
|
+
// ==================== 8. Customer Type ====================
|
|
193
|
+
export async function onboardingCustomerTypeCommand(opts) {
|
|
194
|
+
await withClient(opts, '正在查询客户类型...', (client) => client.queryCustomerType(), (data) => {
|
|
195
|
+
if (opts.output === 'json') {
|
|
196
|
+
console.log(JSON.stringify(data ?? null, null, 2));
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (!data || data.length === 0) {
|
|
200
|
+
console.log('');
|
|
201
|
+
console.log(chalk.yellow(' 暂无可选客户类型'));
|
|
202
|
+
console.log('');
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
console.log('');
|
|
206
|
+
console.log(chalk.bold('可选客户类型'));
|
|
207
|
+
console.log(chalk.gray('─'.repeat(50)));
|
|
208
|
+
console.log('');
|
|
209
|
+
for (const item of data) {
|
|
210
|
+
printCustomerType(item);
|
|
211
|
+
}
|
|
212
|
+
console.log('');
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
function printCustomerType(item) {
|
|
216
|
+
const current = item.isValid === '1' ? chalk.green(' ← 当前') : '';
|
|
217
|
+
console.log(` ${chalk.cyan(item.customerCode ?? '-')} ${item.customerName ?? ''}${current}`);
|
|
218
|
+
}
|
|
219
|
+
// ==================== 9. Brand & Auth Options ====================
|
|
220
|
+
export async function onboardingBrandListCommand(opts) {
|
|
221
|
+
await withClient(opts, '正在查询可开通品牌...', (client) => client.queryBrandAndAuth(opts.customerType), (data) => {
|
|
222
|
+
if (opts.output === 'json') {
|
|
223
|
+
console.log(JSON.stringify(data ?? null, null, 2));
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (!data || data.length === 0) {
|
|
227
|
+
console.log('');
|
|
228
|
+
console.log(chalk.yellow(' 暂无可开通的品牌'));
|
|
229
|
+
console.log('');
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
console.log('');
|
|
233
|
+
console.log(chalk.bold('可开通品牌与认证方式'));
|
|
234
|
+
console.log(chalk.gray('─'.repeat(60)));
|
|
235
|
+
console.log('');
|
|
236
|
+
for (const item of data) {
|
|
237
|
+
printBrandAndAuth(item);
|
|
238
|
+
}
|
|
239
|
+
console.log('');
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
function printBrandAndAuth(item) {
|
|
243
|
+
const disabled = item.disable ? chalk.gray(' [不可选]') : '';
|
|
244
|
+
console.log(` ${chalk.cyan(item.brandCode ?? '-')} ${item.brandName ?? ''}${disabled}`);
|
|
245
|
+
if (item.info)
|
|
246
|
+
console.log(` 介绍 ${item.info}`);
|
|
247
|
+
if (item.authList && item.authList.length > 0) {
|
|
248
|
+
const options = item.authList
|
|
249
|
+
.map((a) => `${a.authCode ?? '-'}(${a.authName ?? ''})${a.disable ? '[不可选]' : ''}`)
|
|
250
|
+
.join(' ');
|
|
251
|
+
console.log(` 认证方式 ${options}`);
|
|
252
|
+
}
|
|
253
|
+
console.log('');
|
|
254
|
+
}
|
|
255
|
+
// ==================== 10. Open Brand & Apply Contract (write) ====================
|
|
256
|
+
export async function onboardingBrandOpenCommand(opts) {
|
|
257
|
+
const ok = await confirmWrite(opts, `为 ${chalk.cyan(opts.customerName)} 开通品牌 ${chalk.cyan(opts.serviceCode)} 并申请合同`);
|
|
258
|
+
if (!ok)
|
|
259
|
+
return;
|
|
260
|
+
await withClient(opts, '正在开通品牌并申请合同...', (client) => client.openBrandAndApplyContract({
|
|
261
|
+
serviceCode: opts.serviceCode,
|
|
262
|
+
customerType: opts.customerType ? parseInt(opts.customerType, 10) : undefined,
|
|
263
|
+
country: opts.country,
|
|
264
|
+
address: opts.address,
|
|
265
|
+
state: opts.state,
|
|
266
|
+
city: opts.city,
|
|
267
|
+
county: opts.county,
|
|
268
|
+
customerName: opts.customerName,
|
|
269
|
+
contactName: opts.contactName,
|
|
270
|
+
mobile: opts.mobile,
|
|
271
|
+
email: opts.email,
|
|
272
|
+
cLegalName: opts.legalName,
|
|
273
|
+
}), (result) => {
|
|
274
|
+
if (opts.output === 'json') {
|
|
275
|
+
console.log(JSON.stringify({ result: result ?? null }, null, 2));
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
console.log('');
|
|
279
|
+
console.log(` ${chalk.green('✔')} 品牌开通与合同申请已提交`);
|
|
280
|
+
if (result)
|
|
281
|
+
console.log(` 返回 ${result}`);
|
|
282
|
+
console.log('');
|
|
283
|
+
console.log(chalk.gray(' 用 contract list 查看合同,contract url <合同编号> 获取签署链接'));
|
|
284
|
+
console.log('');
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
// ==================== 11. Contract List ====================
|
|
288
|
+
export async function onboardingContractListCommand(opts) {
|
|
289
|
+
const pageNum = opts.page ? parseInt(opts.page, 10) : undefined;
|
|
290
|
+
const pageSize = opts.size ? parseInt(opts.size, 10) : undefined;
|
|
291
|
+
await runCommand(opts, {
|
|
292
|
+
spinner: '正在查询合同列表...',
|
|
293
|
+
exec: (client) => client.getContractList(pageNum, pageSize),
|
|
294
|
+
render: printContractList,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
const CONTRACT_STATUS_LABELS = {
|
|
298
|
+
'0': '草稿',
|
|
299
|
+
'1': '待签署',
|
|
300
|
+
'2': '已过期',
|
|
301
|
+
'3': '驳回',
|
|
302
|
+
'4': '签署中',
|
|
303
|
+
'6': '拒签',
|
|
304
|
+
'7': '已归档',
|
|
305
|
+
'8': '拒签-已重新签署',
|
|
306
|
+
'9': '已撤销',
|
|
307
|
+
'10': '待授权',
|
|
308
|
+
'12': '审核中',
|
|
309
|
+
};
|
|
310
|
+
function printContractList(data) {
|
|
311
|
+
console.log('');
|
|
312
|
+
console.log(chalk.bold('合同列表'));
|
|
313
|
+
console.log(chalk.gray('─'.repeat(60)));
|
|
314
|
+
if (!data.data || data.data.length === 0) {
|
|
315
|
+
console.log('');
|
|
316
|
+
console.log(chalk.yellow(' 暂无合同'));
|
|
317
|
+
console.log('');
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
console.log('');
|
|
321
|
+
for (const item of data.data) {
|
|
322
|
+
console.log(` ${chalk.cyan(item.code ?? '-')}`);
|
|
323
|
+
if (item.name)
|
|
324
|
+
console.log(` 合同名称 ${item.name}`);
|
|
325
|
+
if (item.serviceName)
|
|
326
|
+
console.log(` 品牌 ${item.serviceName}`);
|
|
327
|
+
if (item.customerName)
|
|
328
|
+
console.log(` 客户 ${item.customerName}`);
|
|
329
|
+
if (item.status != null) {
|
|
330
|
+
console.log(` 状态 ${chalk.yellow(label(CONTRACT_STATUS_LABELS, String(item.status)))}`);
|
|
331
|
+
}
|
|
332
|
+
if (item.effectiveStartTime || item.effectiveEndTime) {
|
|
333
|
+
console.log(` 有效期 ${item.effectiveStartTime ?? '-'} ~ ${item.effectiveEndTime ?? '-'}`);
|
|
334
|
+
}
|
|
335
|
+
if (item.applyTime)
|
|
336
|
+
console.log(` 申请时间 ${item.applyTime}`);
|
|
337
|
+
if (item.signFinishTime)
|
|
338
|
+
console.log(` 签署完成 ${item.signFinishTime}`);
|
|
339
|
+
console.log('');
|
|
340
|
+
}
|
|
341
|
+
console.log(chalk.gray(` 共 ${data.total ?? 0} 份合同`));
|
|
342
|
+
console.log('');
|
|
343
|
+
}
|
|
344
|
+
// ==================== 12. Contract Sign URL ====================
|
|
345
|
+
export async function onboardingContractUrlCommand(contractCode, opts) {
|
|
346
|
+
await withClient(opts, '正在获取合同链接...', (client) => client.getContractSignUrl(contractCode), (url) => {
|
|
347
|
+
if (opts.output === 'json') {
|
|
348
|
+
console.log(JSON.stringify({ contractCode, url: url ?? null }, null, 2));
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
console.log('');
|
|
352
|
+
if (!url) {
|
|
353
|
+
console.log(chalk.yellow(' 未获取到合同链接'));
|
|
354
|
+
console.log('');
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
console.log(chalk.bold('合同链接'));
|
|
358
|
+
console.log(chalk.gray('─'.repeat(50)));
|
|
359
|
+
console.log(` 合同编号 ${chalk.cyan(contractCode)}`);
|
|
360
|
+
console.log(` 链接 ${url}`);
|
|
361
|
+
console.log('');
|
|
362
|
+
// 每次调用都会生成新的签署链接,别让用户反复刷
|
|
363
|
+
console.log(chalk.gray(' 签署中的合同返回签署链接,其余状态返回下载链接;请勿频繁调用'));
|
|
364
|
+
console.log('');
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
// ==================== Shared helpers ====================
|
|
368
|
+
function printWriteResult(opts, result, successText) {
|
|
369
|
+
if (opts.output === 'json') {
|
|
370
|
+
console.log(JSON.stringify({ result: result ?? null }, null, 2));
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
console.log('');
|
|
374
|
+
console.log(` ${chalk.green('✔')} ${successText}`);
|
|
375
|
+
if (result)
|
|
376
|
+
console.log(` 返回 ${result}`);
|
|
377
|
+
console.log('');
|
|
378
|
+
}
|
|
379
|
+
/** Show the human label but keep the raw code visible — enums drift. */
|
|
380
|
+
function label(labels, code) {
|
|
381
|
+
const text = labels[code];
|
|
382
|
+
return text ? `${text} (${code})` : code;
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=onboarding.js.map
|