@xbongbong/xbbcli 2.0.0 → 2.1.1
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.md +71 -2
- package/ai-call-add-task.js +10 -1
- package/ai-word-list.js +10 -1
- package/bin/xbbcli.js +5 -0
- package/buyer-inquiry-detail.js +10 -1
- package/buyer-inquiry-list.js +10 -1
- package/clue-add-couser.js +10 -1
- package/clue-add.js +10 -1
- package/clue-back.js +10 -1
- package/clue-del.js +10 -1
- package/clue-delete-couser.js +10 -1
- package/clue-delete-mainuser.js +10 -1
- package/clue-detail.js +10 -1
- package/clue-distribution.js +10 -1
- package/clue-edit.js +10 -1
- package/clue-handover.js +10 -1
- package/clue-list.js +10 -1
- package/clue-thorough-delete.js +10 -1
- package/communicate-add.js +10 -1
- package/communicate-del.js +10 -1
- package/communicate-detail.js +10 -1
- package/communicate-edit.js +10 -1
- package/communicate-list.js +10 -1
- package/communicate-plan-add.js +10 -1
- package/communicate-plan-cancel.js +10 -1
- package/communicate-plan-del.js +10 -1
- package/communicate-plan-detail.js +10 -1
- package/communicate-plan-list.js +10 -1
- package/communicate-plan-single-operate.js +10 -1
- package/contact-add-couser.js +10 -1
- package/contact-add-mainuser.js +10 -1
- package/contact-add.js +10 -1
- package/contact-del.js +14 -1
- package/contact-delete-couser.js +10 -1
- package/contact-delete-mainuser.js +10 -1
- package/contact-detail.js +14 -1
- package/contact-edit.js +10 -1
- package/contact-handover.js +10 -1
- package/contact-list.js +10 -1
- package/contract-add-couser.js +10 -1
- package/contract-add-mainuser.js +10 -1
- package/contract-add.js +10 -1
- package/contract-del.js +10 -1
- package/contract-delete-couser.js +10 -1
- package/contract-delete-mainuser.js +10 -1
- package/contract-detail.js +10 -1
- package/contract-edit.js +10 -1
- package/contract-handover.js +10 -1
- package/contract-list.js +10 -1
- package/contract-outstock-add.js +10 -1
- package/contract-outstock-del.js +10 -1
- package/contract-outstock-detail.js +10 -1
- package/contract-outstock-edit.js +10 -1
- package/contract-outstock-list.js +10 -1
- package/customer-add-couser.js +10 -1
- package/customer-add.js +10 -1
- package/customer-back.js +10 -1
- package/customer-del.js +10 -1
- package/customer-delete-couser.js +10 -1
- package/customer-delete-mainuser.js +10 -1
- package/customer-detail.js +10 -1
- package/customer-distribution.js +10 -1
- package/customer-edit.js +10 -1
- package/customer-handover.js +10 -1
- package/customer-invoice-address-add.js +10 -1
- package/customer-invoice-address-edit.js +10 -1
- package/customer-invoice-address.js +10 -1
- package/customer-invoice-info-add.js +10 -1
- package/customer-invoice-info-edit.js +10 -1
- package/customer-invoice-info.js +10 -1
- package/customer-list.js +10 -1
- package/department-add.js +10 -1
- package/department-del.js +10 -1
- package/department-edit.js +10 -1
- package/department-list.js +10 -1
- package/form-data-add-couser.js +10 -1
- package/form-data-add-mainuser.js +10 -1
- package/form-data-add.js +10 -1
- package/form-data-del.js +10 -1
- package/form-data-delete-couser.js +10 -1
- package/form-data-delete-mainuser.js +10 -1
- package/form-data-detail.js +10 -1
- package/form-data-edit.js +10 -1
- package/form-data-handover.js +10 -1
- package/form-data-list.js +10 -1
- package/form-get.js +10 -1
- package/form-list.js +10 -1
- package/invoice-add.js +10 -1
- package/invoice-cancel.js +10 -1
- package/invoice-del.js +10 -1
- package/invoice-detail.js +10 -1
- package/invoice-edit.js +10 -1
- package/invoice-get-amount-detail.js +10 -1
- package/invoice-list.js +10 -1
- package/invoice-red.js +10 -1
- package/label-add.js +10 -1
- package/label-all-list.js +10 -1
- package/label-batch-add.js +10 -1
- package/label-batch-remove.js +10 -1
- package/label-del-completely.js +10 -1
- package/label-del.js +10 -1
- package/label-edit.js +10 -1
- package/label-group-add.js +10 -1
- package/label-group-del.js +10 -1
- package/label-group-list.js +10 -1
- package/label-group-update.js +10 -1
- package/label-list.js +10 -1
- package/label-reduction.js +10 -1
- package/label-repeat.js +10 -1
- package/market-activity-add.js +10 -1
- package/market-activity-del.js +10 -1
- package/market-activity-detail.js +10 -1
- package/market-activity-edit.js +10 -1
- package/market-activity-handover.js +10 -1
- package/market-activity-list.js +10 -1
- package/opportunity-add-couser.js +10 -1
- package/opportunity-add-mainuser.js +10 -1
- package/opportunity-add.js +10 -1
- package/opportunity-del.js +10 -1
- package/opportunity-delete-couser.js +10 -1
- package/opportunity-delete-mainuser.js +10 -1
- package/opportunity-detail.js +10 -1
- package/opportunity-edit.js +10 -1
- package/opportunity-handover.js +10 -1
- package/opportunity-list.js +10 -1
- package/package.json +1 -1
- package/pay-plan-add-couser.js +10 -1
- package/pay-plan-add-mainuser.js +10 -1
- package/pay-plan-add.js +10 -1
- package/pay-plan-delete-couser.js +10 -1
- package/pay-plan-delete-mainuser.js +10 -1
- package/pay-plan-handover.js +10 -1
- package/pay-sheet-add-bad.js +10 -1
- package/pay-sheet-add-couser.js +10 -1
- package/pay-sheet-add-mainuser.js +10 -1
- package/pay-sheet-add-red.js +10 -1
- package/pay-sheet-add-write-off.js +10 -1
- package/pay-sheet-del.js +10 -1
- package/pay-sheet-delete-couser.js +10 -1
- package/pay-sheet-delete-mainuser.js +10 -1
- package/pay-sheet-detail.js +10 -1
- package/pay-sheet-edit-bad.js +10 -1
- package/pay-sheet-edit-red.js +10 -1
- package/pay-sheet-edit-write-off.js +10 -1
- package/pay-sheet-get-amount-detail.js +10 -1
- package/pay-sheet-list.js +10 -1
- package/payment-add-couser.js +10 -1
- package/payment-add-mainuser.js +10 -1
- package/payment-add.js +10 -1
- package/payment-del.js +10 -1
- package/payment-delete-couser.js +10 -1
- package/payment-delete-mainuser.js +10 -1
- package/payment-detail.js +10 -1
- package/payment-edit.js +10 -1
- package/payment-handover.js +10 -1
- package/payment-list.js +10 -1
- package/payment-sheet-add-bad-debt.js +10 -1
- package/payment-sheet-add-pre.js +10 -1
- package/payment-sheet-add-red.js +10 -1
- package/payment-sheet-add-write-off.js +10 -1
- package/payment-sheet-del.js +10 -1
- package/payment-sheet-detail.js +10 -1
- package/payment-sheet-edit-bad-debt.js +10 -1
- package/payment-sheet-edit-red.js +10 -1
- package/payment-sheet-edit-write-off.js +10 -1
- package/payment-sheet-get-amount-detail.js +10 -1
- package/payment-sheet-handover.js +10 -1
- package/payment-sheet-list.js +10 -1
- package/product-add.js +10 -1
- package/product-category-add.js +10 -1
- package/product-category-del.js +10 -1
- package/product-category-list.js +10 -1
- package/product-category-update.js +10 -1
- package/product-del.js +10 -1
- package/product-detail.js +10 -1
- package/product-edit.js +10 -1
- package/product-list.js +10 -1
- package/product-online.js +10 -1
- package/quotation-add-couser.js +10 -1
- package/quotation-add-mainuser.js +10 -1
- package/quotation-add.js +10 -1
- package/quotation-del.js +10 -1
- package/quotation-delete-couser.js +10 -1
- package/quotation-delete-mainuser.js +10 -1
- package/quotation-detail.js +10 -1
- package/quotation-edit.js +10 -1
- package/quotation-handover.js +10 -1
- package/quotation-list.js +10 -1
- package/refund-add.js +16 -1
- package/refund-del.js +16 -1
- package/refund-detail.js +16 -1
- package/refund-edit.js +16 -1
- package/refund-list.js +10 -1
- package/role-list.js +10 -1
- package/sign-in-list.js +10 -1
- package/stage-get.js +10 -1
- package/stage-jump.js +10 -1
- package/supplier-add.js +10 -1
- package/token-del.js +101 -0
- package/token-generate.js +10 -1
- package/token-list.js +101 -0
- package/token-set.js +175 -10
- package/token-use.js +97 -0
- package/user-add.js +10 -1
- package/user-del.js +10 -1
- package/user-edit.js +10 -1
- package/user-handover.js +10 -1
- package/user-list.js +13 -4
- package/work-order-add.js +10 -1
- package/work-order-asset-add-couser.js +10 -1
- package/work-order-asset-add-mainuser.js +10 -1
- package/work-order-asset-add.js +10 -1
- package/work-order-asset-del-couser.js +10 -1
- package/work-order-asset-del-mainuser.js +10 -1
- package/work-order-asset-del.js +10 -1
- package/work-order-asset-detail.js +10 -1
- package/work-order-asset-edit.js +10 -1
- package/work-order-asset-handover.js +10 -1
- package/work-order-asset-list.js +10 -1
- package/work-order-del.js +10 -1
- package/work-order-detail.js +10 -1
- package/work-order-dynamic-list.js +10 -1
- package/work-order-edit.js +10 -1
- package/work-order-list.js +10 -1
- package/work-order-operate.js +10 -1
- package/work-order-template-detail.js +10 -1
- package/work-order-template-list.js +10 -1
- package/work-report-daily-add.js +10 -1
- package/work-report-daily-del.js +10 -1
- package/work-report-daily-detail.js +10 -1
- package/work-report-daily-edit.js +10 -1
- package/work-report-daily-get-work-plan.js +10 -1
- package/work-report-daily-list.js +10 -1
- package/work-report-monthly-add.js +10 -1
- package/work-report-monthly-del.js +10 -1
- package/work-report-monthly-detail.js +10 -1
- package/work-report-monthly-edit.js +10 -1
- package/work-report-monthly-list.js +10 -1
- package/work-report-weekly-add.js +10 -1
- package/work-report-weekly-del.js +10 -1
- package/work-report-weekly-detail.js +10 -1
- package/work-report-weekly-edit.js +10 -1
- package/work-report-weekly-list.js +10 -1
- package/work-task-add-couser.js +10 -1
- package/work-task-add.js +10 -1
- package/work-task-delete-couser.js +10 -1
- package/work-task-detail.js +10 -1
- package/work-task-edit.js +10 -1
- package/work-task-handover.js +10 -1
- package/workorder-add-couser.js +10 -1
- package/workorder-delete-couser.js +10 -1
- package/workorder-handover.js +10 -1
- package/workorderlist.js +10 -1
- package/workorderproductlist.js +10 -1
- package/worktimerecorddetail.js +10 -1
- package/worktimerecordlist.js +10 -1
package/README.md
CHANGED
|
@@ -13,6 +13,21 @@ xbbcli --help
|
|
|
13
13
|
|
|
14
14
|
需要升级时运行 `npm update -g @xbongbong/xbbcli`。
|
|
15
15
|
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
首次使用时配置销帮帮凭证:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
xbbcli token-set --corpid <CORPID> --token <TOKEN> --userId <USERID>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
配置完成后即可运行各业务命令,例如:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
xbbcli user-list
|
|
28
|
+
xbbcli form-list --saasMark 1 -f json
|
|
29
|
+
```
|
|
30
|
+
|
|
16
31
|
## 初始化配置
|
|
17
32
|
|
|
18
33
|
首次使用先保存 `corpid`、`token` 和 `userId`:
|
|
@@ -27,12 +42,40 @@ xbbcli token-set --corpid <CORPID> --token <TOKEN> --userId <USERID>
|
|
|
27
42
|
~/.xbbcli/config.env
|
|
28
43
|
```
|
|
29
44
|
|
|
30
|
-
|
|
45
|
+
`config.env` 是一个 JSON 文件,可同时保存多家公司,每个公司包含:
|
|
31
46
|
|
|
32
47
|
- `corpid`
|
|
33
48
|
- `token`
|
|
34
49
|
- `baseurl`
|
|
35
50
|
- `userId`
|
|
51
|
+
- `enable`:是否启用;任何时刻**仅且只有一个**公司的 `enable` 为 `true`
|
|
52
|
+
- `corpName`:公司名称,取部门列表中 `id` 为 `1` 的部门名称(`token-set` 自动写入)
|
|
53
|
+
- `userName`:当前 `userId` 对应的员工姓名,从员工列表中按 `userId` 匹配(`token-set` 自动写入)
|
|
54
|
+
|
|
55
|
+
示例:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
[
|
|
59
|
+
{
|
|
60
|
+
"corpid": "<CORPID_A>",
|
|
61
|
+
"token": "<TOKEN_A>",
|
|
62
|
+
"baseurl": "https://proapi.xbongbong.com",
|
|
63
|
+
"userId": "<USERID_A>",
|
|
64
|
+
"corpName": "<CORP_NAME_A>",
|
|
65
|
+
"userName": "<USER_NAME_A>",
|
|
66
|
+
"enable": true
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"corpid": "<CORPID_B>",
|
|
70
|
+
"token": "<TOKEN_B>",
|
|
71
|
+
"baseurl": "https://appapi.xbongbong.com",
|
|
72
|
+
"userId": "<USERID_B>",
|
|
73
|
+
"enable": false
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`token-set` 会按 `corpid` 新增或覆盖一家公司,并把该公司置为 `enable=true`(其余公司自动置为 `false`),同时写入公司名称 `corpName`(取部门 `id` 为 `1` 的部门名称)和操作人姓名 `userName`(从员工列表中按 `userId` 匹配)。除 `token-set`、`token-list`、`token-use`、`token-del` 外,其余命令都使用 `enable` 为 `true` 的公司配置。
|
|
36
79
|
|
|
37
80
|
同时会自动拉取两份表单清单并合并缓存到:
|
|
38
81
|
|
|
@@ -47,6 +90,27 @@ xbbcli form-list --saasMark 2 -f json
|
|
|
47
90
|
xbbcli form-list --saasMark 1 -f json
|
|
48
91
|
```
|
|
49
92
|
|
|
93
|
+
同时会自动分页拉取所有部门与员工并缓存到:
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
~/.xbbcli/<corpid>.department-user.json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
初始化过程调用:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
xbbcli department-list --pageSize 200 -f json
|
|
103
|
+
xbbcli user-list --pageSize 200 -f json
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
缓存文件内容:
|
|
107
|
+
|
|
108
|
+
- `departments`:部门清单(`id`、`name`、`parentId`、`depIdRouter`)
|
|
109
|
+
- `users`:员工清单(`userId`、`name`、`position`、`jobnumber`、`departmentList`)
|
|
110
|
+
- `departmentCount`、`userCount`、`pageSize`、`updatedAt`
|
|
111
|
+
|
|
112
|
+
以后需要查询部门或员工信息时,可以先查这个文件,避免重复调用接口。
|
|
113
|
+
|
|
50
114
|
`baseurl` 路由规则:
|
|
51
115
|
|
|
52
116
|
- `corpid` 以 `ding` 开头,或包含 `$$ding` 时,使用 `https://proapi.xbongbong.com`
|
|
@@ -56,7 +120,10 @@ xbbcli form-list --saasMark 1 -f json
|
|
|
56
120
|
|
|
57
121
|
### 配置
|
|
58
122
|
|
|
59
|
-
- `token-set`:保存个人 token、`corpid`、`userId`、`baseurl
|
|
123
|
+
- `token-set`:保存个人 token、`corpid`、`userId`、`baseurl`,并刷新本地表单缓存、命令映射文件与部门/员工缓存;传入的 token 不以 `user_` 开头时,会先为该 `userId` 刷新并保存个人 token
|
|
124
|
+
- `token-list`:列出本地保存的所有公司配置和唯一启用的公司(含 `corpName` 公司名称与 `userName` 操作人姓名);`--showToken` 显示完整 token(默认脱敏)
|
|
125
|
+
- `token-use`:切换当前启用的公司(`xbbcli token-use --corpid <CORPID>`),保证仅且只有一个公司被启用
|
|
126
|
+
- `token-del`:删除指定公司的本地配置(`xbbcli token-del --corpid <CORPID>`),并保证剩余配置中仅且只有一个公司被启用
|
|
60
127
|
- `token-generate`:生成/获取个人 token,`--resetToken 0` 获取(默认)、`1` 刷新;`--checkUserId` 未传则用配置中的 `userId`
|
|
61
128
|
|
|
62
129
|
### 组织与人员
|
|
@@ -304,6 +371,8 @@ xbbcli form-list --saasMark 1 -f json
|
|
|
304
371
|
- 大部分命令会从 `~/.xbbcli/config.env` 读取 `token`
|
|
305
372
|
- 所有命令会从配置中读取 `userId` 并附加到请求 header 中
|
|
306
373
|
- 大部分命令需要 formId 参数,可以根据业务名称或 businessType 从 `~/.xbbcli/<corpid>.formlist.json` 中获取 formId
|
|
374
|
+
- 需要查询部门 id/名称,或员工 userId/所属部门时,可以先查 `~/.xbbcli/<corpid>.department-user.json`(由 `token-set` 分页抓取并缓存全部部门与员工)
|
|
375
|
+
- 当前公司名称存在 `~/.xbbcli/config.env` 的 `corpName` 字段(取部门 `id` 为 `1` 的部门名称),操作人姓名存在 `userName` 字段(按 `userId` 匹配员工列表)
|
|
307
376
|
- 未传入的可选参数不会进入请求体
|
|
308
377
|
- `--attr` 和 `--value` 只有同时提供时才会拼入查询条件
|
|
309
378
|
- `--limit` 是在响应映射之后截断结果
|
package/ai-call-add-task.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 opencli xbb token-set
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/ai-word-list.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 opencli xbb token-set
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/bin/xbbcli.js
CHANGED
|
@@ -91,6 +91,11 @@ function outputRows(rows, command, format) {
|
|
|
91
91
|
}
|
|
92
92
|
process.stdout.write(`${columns.join('\t')}\n`);
|
|
93
93
|
for (const row of rows) process.stdout.write(`${columns.map((column) => String(row[column] ?? '')).join('\t')}\n`);
|
|
94
|
+
|
|
95
|
+
const footer = typeof command.footerExtra === "function"
|
|
96
|
+
? command.footerExtra()
|
|
97
|
+
: command.footerExtra;
|
|
98
|
+
if (footer) process.stdout.write(`${footer}\n`);
|
|
94
99
|
}
|
|
95
100
|
|
|
96
101
|
await loadCommands();
|
package/buyer-inquiry-detail.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/buyer-inquiry-list.js
CHANGED
|
@@ -12,7 +12,16 @@ let lastPagination = null;
|
|
|
12
12
|
|
|
13
13
|
function readConfig() {
|
|
14
14
|
try {
|
|
15
|
-
|
|
15
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
16
|
+
const companies = Array.isArray(parsed)
|
|
17
|
+
? parsed
|
|
18
|
+
: Array.isArray(parsed?.companies)
|
|
19
|
+
? parsed.companies
|
|
20
|
+
: null;
|
|
21
|
+
if (companies) {
|
|
22
|
+
return companies.find((item) => item && item.enable) || {};
|
|
23
|
+
}
|
|
24
|
+
return parsed || {};
|
|
16
25
|
} catch {
|
|
17
26
|
return {};
|
|
18
27
|
}
|
package/clue-add-couser.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/clue-add.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/clue-back.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/clue-del.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/clue-delete-couser.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/clue-delete-mainuser.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/clue-detail.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/clue-distribution.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/clue-edit.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/clue-handover.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 opencli xbb token-set
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/clue-list.js
CHANGED
|
@@ -12,7 +12,16 @@ let lastPagination = null;
|
|
|
12
12
|
|
|
13
13
|
function readConfig() {
|
|
14
14
|
try {
|
|
15
|
-
|
|
15
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
16
|
+
const companies = Array.isArray(parsed)
|
|
17
|
+
? parsed
|
|
18
|
+
: Array.isArray(parsed?.companies)
|
|
19
|
+
? parsed.companies
|
|
20
|
+
: null;
|
|
21
|
+
if (companies) {
|
|
22
|
+
return companies.find((item) => item && item.enable) || {};
|
|
23
|
+
}
|
|
24
|
+
return parsed || {};
|
|
16
25
|
} catch {
|
|
17
26
|
return {};
|
|
18
27
|
}
|
package/clue-thorough-delete.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/communicate-add.js
CHANGED
|
@@ -11,7 +11,16 @@ const DEFAULT_BASE_URL = 'https://proapi.xbongbong.com';
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/communicate-del.js
CHANGED
|
@@ -11,7 +11,16 @@ const DEFAULT_BASE_URL = 'https://proapi.xbongbong.com';
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/communicate-detail.js
CHANGED
|
@@ -11,7 +11,16 @@ const DEFAULT_BASE_URL = 'https://proapi.xbongbong.com';
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/communicate-edit.js
CHANGED
|
@@ -11,7 +11,16 @@ const DEFAULT_BASE_URL = 'https://proapi.xbongbong.com';
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/communicate-list.js
CHANGED
|
@@ -12,7 +12,16 @@ let lastPagination = null;
|
|
|
12
12
|
|
|
13
13
|
function readConfig() {
|
|
14
14
|
try {
|
|
15
|
-
|
|
15
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
16
|
+
const companies = Array.isArray(parsed)
|
|
17
|
+
? parsed
|
|
18
|
+
: Array.isArray(parsed?.companies)
|
|
19
|
+
? parsed.companies
|
|
20
|
+
: null;
|
|
21
|
+
if (companies) {
|
|
22
|
+
return companies.find((item) => item && item.enable) || {};
|
|
23
|
+
}
|
|
24
|
+
return parsed || {};
|
|
16
25
|
} catch {
|
|
17
26
|
return {};
|
|
18
27
|
}
|
package/communicate-plan-add.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/communicate-plan-del.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/communicate-plan-list.js
CHANGED
|
@@ -12,7 +12,16 @@ let lastPagination = null;
|
|
|
12
12
|
|
|
13
13
|
function readConfig() {
|
|
14
14
|
try {
|
|
15
|
-
|
|
15
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
16
|
+
const companies = Array.isArray(parsed)
|
|
17
|
+
? parsed
|
|
18
|
+
: Array.isArray(parsed?.companies)
|
|
19
|
+
? parsed.companies
|
|
20
|
+
: null;
|
|
21
|
+
if (companies) {
|
|
22
|
+
return companies.find((item) => item && item.enable) || {};
|
|
23
|
+
}
|
|
24
|
+
return parsed || {};
|
|
16
25
|
} catch {
|
|
17
26
|
return {};
|
|
18
27
|
}
|
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|
package/contact-add-couser.js
CHANGED
|
@@ -11,7 +11,16 @@ const MISSING_TOKEN_MESSAGE = '缺少 token;请先执行 xbbcli token-set --co
|
|
|
11
11
|
|
|
12
12
|
function readConfig() {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
15
|
+
const companies = Array.isArray(parsed)
|
|
16
|
+
? parsed
|
|
17
|
+
: Array.isArray(parsed?.companies)
|
|
18
|
+
? parsed.companies
|
|
19
|
+
: null;
|
|
20
|
+
if (companies) {
|
|
21
|
+
return companies.find((item) => item && item.enable) || {};
|
|
22
|
+
}
|
|
23
|
+
return parsed || {};
|
|
15
24
|
} catch {
|
|
16
25
|
return {};
|
|
17
26
|
}
|