wjx-cli 0.1.15 → 0.1.17
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/bundled/wjx-cli-use/SKILL.md +109 -119
- package/bundled/wjx-cli-use/references/analytics-commands.md +1 -1
- package/bundled/wjx-cli-use/references/contacts-commands.md +17 -7
- package/bundled/wjx-cli-use/references/dsl-syntax.md +57 -1
- package/bundled/wjx-cli-use/references/response-commands.md +2 -1
- package/bundled/wjx-cli-use/references/survey-commands.md +1 -1
- package/dist/commands/account.js +1 -1
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/admin.js +2 -2
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/analytics.js +3 -3
- package/dist/commands/analytics.js.map +1 -1
- package/dist/commands/contacts.js +2 -2
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/department.js +4 -4
- package/dist/commands/department.js.map +1 -1
- package/dist/commands/reference.js +39 -10
- package/dist/commands/reference.js.map +1 -1
- package/dist/commands/response.js +8 -6
- package/dist/commands/response.js.map +1 -1
- package/dist/commands/survey.js +8 -8
- package/dist/commands/survey.js.map +1 -1
- package/dist/commands/tag.js +4 -4
- package/dist/commands/tag.js.map +1 -1
- package/dist/commands/user-system.js +19 -6
- package/dist/commands/user-system.js.map +1 -1
- package/dist/lib/command-helpers.d.ts +9 -0
- package/dist/lib/command-helpers.js +26 -1
- package/dist/lib/command-helpers.js.map +1 -1
- package/package.json +44 -44
|
@@ -1,69 +1,120 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wjx-cli-use
|
|
3
|
-
description: Guide for using wjx-cli (Wenjuanxing CLI) to create surveys, query responses, and analyze data. Use when the user
|
|
4
|
-
homepage: https://www.wjx.cn
|
|
5
|
-
version: 1.0.0
|
|
3
|
+
description: "Guide for using wjx-cli (Wenjuanxing CLI) to create surveys, query responses, and analyze data. Use when the user mentions: 问卷, 调查, 收集, 表单, 投票, 考试, 测评, 满意度, NPS, 问卷星, wjx, survey, questionnaire — or wants to create surveys, view responses, export data, analyze NPS/CSAT, manage contacts/departments/sub-accounts. Covers all 69 subcommands across 15 modules."
|
|
6
4
|
---
|
|
7
5
|
|
|
8
6
|
# wjx-cli 使用指南
|
|
9
7
|
|
|
10
|
-
wjx-cli 是问卷星 OpenAPI
|
|
8
|
+
wjx-cli 是问卷星 OpenAPI 的命令行工具。命令格式:`wjx <模块> <操作> [选项]`。
|
|
11
9
|
|
|
12
|
-
|
|
10
|
+
全局选项:`--api-key <key>` 覆盖凭据,`--table` 表格输出,`--dry-run` 预览请求不发送,`--stdin` 从管道读 JSON 参数。
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
## AI Agent 行为准则(必读)
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
- 用户说「帮我做个调查」「创建问卷」「查看答卷」「分析数据」「导出数据」等
|
|
18
|
-
- 用户需要管理通讯录、部门、子账号、SSO 等企业功能
|
|
14
|
+
### 规则 1:一个需求 = 一个问卷
|
|
19
15
|
|
|
20
|
-
|
|
16
|
+
无论用户要求多少种题型,**必须在一次 create-by-text 调用中包含所有题目**。
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
|
32
|
-
|
|
18
|
+
- 正确:用户说"包含单选、多选、填空、量表" → 一个 DSL 文本包含所有题目 → 调用一次
|
|
19
|
+
- 错误:为每种题型分别调用 create-by-text → 产生多个问卷
|
|
20
|
+
|
|
21
|
+
一个问卷可以包含任意数量、任意类型的题目。没有"一种问卷只能包含一种题型"的限制。
|
|
22
|
+
|
|
23
|
+
### 规则 2:问卷类型 ≠ 题目类型
|
|
24
|
+
|
|
25
|
+
"投票问卷"、"考试问卷"、"调查问卷"是**问卷类型**(atype),通过 `--type` 参数设置。题目仍然使用普通的题型标签。
|
|
26
|
+
|
|
27
|
+
| 用户说 | 正确做法 | 错误做法 |
|
|
28
|
+
|--------|---------|---------|
|
|
29
|
+
| "投票单选" | `--type 3` + `[单选题]` | 寻找"投票单选"标签 |
|
|
30
|
+
| "投票多选" | `--type 3` + `[多选题]` | 寻找"投票多选"标签 |
|
|
31
|
+
| "考试填空" | `--type 6` + `[填空题]` | 寻找"考试填空"标签 |
|
|
32
|
+
|
|
33
|
+
不存在 `[投票单选题]`、`[投票多选题]` 这样的题型标签。"投票"描述的是问卷用途,不是题目类型。
|
|
34
|
+
|
|
35
|
+
### 规则 3:不支持的题型要明确告知
|
|
36
|
+
|
|
37
|
+
以下功能**不在 DSL/API 支持范围内**,遇到时应告知用户,不要反复尝试或创建替代问卷:
|
|
38
|
+
|
|
39
|
+
| 不支持的题型 | 替代方案 |
|
|
40
|
+
|-------------|---------|
|
|
41
|
+
| 签名题 | `[绘图题]` 近似替代 |
|
|
42
|
+
| 地区题/省市区选择 | API 不支持,建议用 `[多级下拉题]` 或网页端手动添加 |
|
|
43
|
+
| NPS 专用题 | `[量表题]` + `0~10` 实现相同效果 |
|
|
44
|
+
| 自动每题一页 | DSL 支持 `=== 分页 ===` 手动分页 |
|
|
45
|
+
|
|
46
|
+
遇到不支持的题型时,正确做法:
|
|
47
|
+
1. 告诉用户该题型不被支持,并建议替代方案
|
|
48
|
+
2. 继续创建问卷中其他可支持的题目
|
|
49
|
+
3. **不要**反复调用创建命令尝试不同方式,**不要**为不同题型分别创建多个问卷
|
|
50
|
+
|
|
51
|
+
## 快速路由
|
|
52
|
+
|
|
53
|
+
| 用户意图 | 命令 |
|
|
54
|
+
|---------|------|
|
|
55
|
+
| 做调查/问卷 | `wjx survey create-by-text --text "..."` |
|
|
56
|
+
| 做考试/测验 | `wjx survey create-by-text --text "..." --type 6` |
|
|
57
|
+
| 做投票 | `wjx survey create-by-text --text "..." --type 3` |
|
|
58
|
+
| 做表单/报名表 | `wjx survey create-by-text --text "..." --type 7` |
|
|
59
|
+
| 看问卷结果 | 先 `wjx survey list` 找 vid,再 `wjx response report --vid <vid>` |
|
|
60
|
+
| 导出答卷数据 | `wjx response download --vid <vid>` |
|
|
61
|
+
| 分析 NPS | `wjx analytics nps --scores "[9,10,7,3]"` |
|
|
62
|
+
| 导入联系人 | `wjx contacts add --users '[...]'`(需 `WJX_CORP_ID`) |
|
|
63
|
+
| 查看问卷链接 | `wjx survey url --mode edit --activity <vid>` |
|
|
33
64
|
|
|
34
65
|
## 安装与配置
|
|
35
66
|
|
|
36
|
-
|
|
67
|
+
首次使用时按以下步骤执行。AI 应直接执行命令,不要求用户去终端操作。
|
|
68
|
+
|
|
69
|
+
### 步骤 1:检查并安装 wjx-cli
|
|
37
70
|
|
|
38
71
|
```bash
|
|
39
|
-
|
|
72
|
+
wjx --version
|
|
40
73
|
```
|
|
41
74
|
|
|
42
|
-
|
|
75
|
+
未安装或版本过低时,直接执行:
|
|
43
76
|
|
|
44
77
|
```bash
|
|
45
78
|
npm install -g wjx-cli
|
|
46
|
-
wjx init # 交互式配置:API Key、Base URL、Corp ID → ~/.wjxrc
|
|
47
|
-
wjx doctor # 检查连接状态
|
|
48
79
|
```
|
|
49
80
|
|
|
50
|
-
###
|
|
81
|
+
### 步骤 2:获取并配置 API Key
|
|
82
|
+
|
|
83
|
+
API Key 需要用户手动获取(无法自动化):
|
|
84
|
+
|
|
85
|
+
1. 告诉用户打开以下链接,用微信扫码登录:
|
|
86
|
+
`https://www.wjx.cn/weixinlogin.aspx?redirecturl=%2Fnewwjx%2Fmanage%2Fuserinfo.aspx%3FshowApiKey%3D1`
|
|
87
|
+
2. 登录后页面会显示 API Key,让用户复制粘贴给你
|
|
88
|
+
3. 拿到 Key 后,直接执行(非交互模式):
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
wjx init --api-key <用户提供的key>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
凭据优先级:`--api-key` 参数 > `WJX_API_KEY` 环境变量 > `~/.wjxrc` 配置文件。通讯录操作另需 `WJX_CORP_ID`。
|
|
95
|
+
|
|
96
|
+
### 步骤 3:验证
|
|
97
|
+
|
|
98
|
+
配置完成后**必须执行** doctor 确认环境和连接正常:
|
|
51
99
|
|
|
52
100
|
```bash
|
|
53
|
-
|
|
54
|
-
./setup.sh -c # 仅检查环境
|
|
55
|
-
./setup.sh -v # 验证安装
|
|
56
|
-
./setup.sh -h # 显示帮助
|
|
101
|
+
wjx doctor
|
|
57
102
|
```
|
|
58
103
|
|
|
59
|
-
|
|
104
|
+
所有检查项应为 ok。如果 API 连接失败,根据错误信息排查(参见下方"常见错误与处理")。
|
|
105
|
+
|
|
106
|
+
验证通过后,告诉用户可以开始使用了,并给出示例引导:
|
|
60
107
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
108
|
+
```
|
|
109
|
+
配置完成!你现在可以直接告诉我你想做什么,比如:
|
|
110
|
+
- 「帮我做一份客户满意度调查,包含 NPS 评分题」
|
|
111
|
+
- 「出一套 JavaScript 基础测验,10 道选择题」
|
|
112
|
+
- 「查看我的问卷列表」
|
|
113
|
+
- 「分析一下这组 NPS 评分:9,10,7,3,8,10,6」
|
|
114
|
+
- 「把问卷 12345 的答卷数据导出为 CSV」
|
|
115
|
+
- 「帮我提交一份问卷的答案」
|
|
116
|
+
- 「帮我把这批联系人导入到通讯录」
|
|
117
|
+
```
|
|
67
118
|
|
|
68
119
|
## 命令总览(15 模块,69 命令)
|
|
69
120
|
|
|
@@ -71,7 +122,7 @@ wjx doctor # 检查连接状态
|
|
|
71
122
|
|------|------|------|
|
|
72
123
|
| `survey` | list, get, create, create-by-text, delete, status, settings, update-settings, tags, tag-details, clear-bin, upload, export-text, url | 问卷增删改查与配置 |
|
|
73
124
|
| `response` | query, realtime, download, submit, modify, clear, report, winners, 360-report, count | 答卷数据操作 |
|
|
74
|
-
| `contacts` | query, add, delete |
|
|
125
|
+
| `contacts` | query, add, delete | 联系人管理(需 WJX_CORP_ID) |
|
|
75
126
|
| `department` | list, add, modify, delete | 部门管理 |
|
|
76
127
|
| `admin` | add, delete, restore | 管理员管理 |
|
|
77
128
|
| `tag` | list, add, modify, delete | 标签管理 |
|
|
@@ -79,18 +130,17 @@ wjx doctor # 检查连接状态
|
|
|
79
130
|
| `account` | list, add, modify, delete, restore | 子账号管理 |
|
|
80
131
|
| `sso` | subaccount-url, user-system-url, partner-url | SSO 链接生成 |
|
|
81
132
|
| `analytics` | decode, nps, csat, anomalies, compare, decode-push | 本地分析(无需 API Key) |
|
|
82
|
-
| `init` |
|
|
83
|
-
| `doctor` | (独立命令) | 环境诊断 |
|
|
133
|
+
| `init` / `doctor` / `whoami` | — | 配置向导 / 环境诊断 / 验证 API Key |
|
|
84
134
|
| `completion` | bash, zsh, fish, install | Shell 自动补全 |
|
|
85
|
-
| `skill`
|
|
86
|
-
| `update` | (独立命令) | 自更新 wjx-cli 到最新版本 |
|
|
135
|
+
| `skill` / `update` | — | 技能管理 / 自更新 |
|
|
87
136
|
|
|
88
137
|
## 核心工作流
|
|
89
138
|
|
|
90
|
-
###
|
|
139
|
+
### 创建问卷(DSL 文本格式)
|
|
140
|
+
|
|
141
|
+
> **重要**:必须执行 `wjx survey create-by-text` 命令来创建问卷。只生成 DSL 文本而不执行命令,问卷不会被创建到问卷星平台上。
|
|
91
142
|
|
|
92
143
|
```bash
|
|
93
|
-
# AI Agent 推荐使用 DSL 文本格式
|
|
94
144
|
wjx survey create-by-text --text "问卷标题
|
|
95
145
|
|
|
96
146
|
可选描述
|
|
@@ -102,27 +152,26 @@ wjx survey create-by-text --text "问卷标题
|
|
|
102
152
|
2. 另一个题目[填空题]"
|
|
103
153
|
```
|
|
104
154
|
|
|
105
|
-
|
|
155
|
+
问卷类型:`--type 1` 调查(默认),`3` 投票,`6` 考试,`7` 表单。考试问卷示例见 `examples/exam_survey.txt`。
|
|
106
156
|
|
|
107
|
-
|
|
157
|
+
**注意**:考试问卷的正确答案和每题分值**无法**通过 API 设置。创建考试后,应提供编辑链接 `wjx survey url --mode edit --activity <vid>`,指引用户在网页端手动配置答案与评分。
|
|
108
158
|
|
|
109
|
-
|
|
159
|
+
完整 DSL 语法(含 28 种题型标签)见 [references/dsl-syntax.md](references/dsl-syntax.md)。JSON 创建或复制问卷见 [references/survey-commands.md](references/survey-commands.md)。
|
|
160
|
+
|
|
161
|
+
### 查询与分析答卷
|
|
110
162
|
|
|
111
163
|
```bash
|
|
112
164
|
wjx response report --vid 12345 # 统计报告(建议第一步)
|
|
113
165
|
wjx response query --vid 12345 # 答卷明细数据
|
|
114
166
|
wjx response download --vid 12345 # 批量导出(CSV/SAV/Word)
|
|
115
167
|
wjx response count --vid 12345 # 答卷总数
|
|
116
|
-
|
|
117
|
-
#
|
|
118
|
-
wjx analytics nps --scores "[9,10,7,3,8]"
|
|
119
|
-
wjx analytics csat --scores "[4,5,3,5,2]"
|
|
120
|
-
wjx analytics decode --submitdata "1\$1}2\$3|4"
|
|
168
|
+
wjx analytics nps --scores "[9,10,7,3,8]" # NPS 分析(本地,无需 API)
|
|
169
|
+
wjx analytics csat --scores "[4,5,3,5,2]" # CSAT 分析(本地)
|
|
121
170
|
```
|
|
122
171
|
|
|
123
|
-
|
|
172
|
+
下载格式:`--suffix 0` CSV,`1` SAV,`2` Word。完整参数见 [references/response-commands.md](references/response-commands.md)。
|
|
124
173
|
|
|
125
|
-
###
|
|
174
|
+
### 管理通讯录与账号
|
|
126
175
|
|
|
127
176
|
```bash
|
|
128
177
|
wjx contacts add --users '[{"userid":"u1","name":"Alice","mobile":"13800000001"}]'
|
|
@@ -131,77 +180,18 @@ wjx admin add --users '[{"userid":"u1","role":2}]'
|
|
|
131
180
|
wjx account add --subuser user1 --password pass123 --role 1
|
|
132
181
|
```
|
|
133
182
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
### 工作流 4:考试/测评问卷
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
# 创建考试问卷(type=6)
|
|
140
|
-
wjx survey create-by-text --text "JavaScript 基础测验
|
|
141
|
-
|
|
142
|
-
1. typeof null 的结果是?[单选题]
|
|
143
|
-
\"null\"
|
|
144
|
-
\"undefined\"
|
|
145
|
-
\"object\"
|
|
146
|
-
\"boolean\"
|
|
147
|
-
|
|
148
|
-
2. 请解释闭包的概念 [填空题]" --type 6
|
|
149
|
-
|
|
150
|
-
# 也可使用示例文件
|
|
151
|
-
wjx survey create-by-text --file examples/exam_survey.txt --type 6
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
## 常用枚举值
|
|
155
|
-
|
|
156
|
-
| 参数 | 值 |
|
|
157
|
-
|------|-----|
|
|
158
|
-
| 问卷类型 (`--type`) | 1=调查, 2=测评, 3=投票, 6=考试, 7=表单 |
|
|
159
|
-
| 问卷状态 (`--state`) | 1=发布, 2=暂停, 3=删除 |
|
|
160
|
-
| 下载格式 (`--suffix`) | 0=CSV, 1=SAV, 2=Word |
|
|
161
|
-
| 排序方式 (`--sort`) | 0=升序, 1=降序 |
|
|
183
|
+
子账号角色:1=系统管理员, 2=问卷管理员, 3=统计查看, 4=完整查看。详见 [references/contacts-commands.md](references/contacts-commands.md)。
|
|
162
184
|
|
|
163
185
|
## 常见错误与处理
|
|
164
186
|
|
|
165
187
|
| 错误信息 | 原因 | 解决方案 |
|
|
166
188
|
|---------|------|---------|
|
|
167
|
-
| `API Key is required` | 未配置 API Key |
|
|
168
|
-
| `Invalid API Key` | API Key 错误或过期 |
|
|
169
|
-
| `vid is required` | 未指定问卷 ID | 先 `wjx survey list`
|
|
170
|
-
| `Corp ID is required` | 通讯录操作需企业 ID |
|
|
189
|
+
| `API Key is required` | 未配置 API Key | 执行 `wjx init --api-key <key>` |
|
|
190
|
+
| `Invalid API Key` | API Key 错误或过期 | 重新获取 API Key(见安装步骤 2) |
|
|
191
|
+
| `vid is required` | 未指定问卷 ID | 先 `wjx survey list` 获取 vid |
|
|
192
|
+
| `Corp ID is required` | 通讯录操作需企业 ID | 执行 `wjx init`,配置 `WJX_CORP_ID` |
|
|
171
193
|
| `Network Error` | 网络连接问题 | 检查网络,或用 `--dry-run` 预览请求 |
|
|
172
194
|
|
|
173
|
-
## 环境变量
|
|
174
|
-
|
|
175
|
-
| 变量 | 必填 | 说明 |
|
|
176
|
-
|------|:---:|------|
|
|
177
|
-
| `WJX_API_KEY` | 是 | 问卷星 OpenAPI API Key |
|
|
178
|
-
| `WJX_CORP_ID` | 否 | 企业通讯录 ID(通讯录相关操作需要) |
|
|
179
|
-
| `WJX_BASE_URL` | 否 | 自定义 API 基础域名(默认 `https://www.wjx.cn`) |
|
|
180
|
-
|
|
181
|
-
凭据优先级:`--api-key` 参数 > 环境变量 > `~/.wjxrc` 配置文件。
|
|
182
|
-
|
|
183
|
-
## 目录结构
|
|
184
|
-
|
|
185
|
-
```
|
|
186
|
-
wjx-cli-use/
|
|
187
|
-
├── SKILL.md # 本文档(AI 读取入口)
|
|
188
|
-
├── README.md # 场景化宣传文档
|
|
189
|
-
├── package.json # 元数据
|
|
190
|
-
├── setup.sh # 环境检测与安装脚本
|
|
191
|
-
├── pack_skill.sh # 打包分发 zip
|
|
192
|
-
├── examples/ # DSL 示例文件
|
|
193
|
-
│ ├── nps_survey.txt # NPS 调查示例
|
|
194
|
-
│ ├── satisfaction_survey.txt # 满意度调查示例
|
|
195
|
-
│ └── exam_survey.txt # 考试问卷示例
|
|
196
|
-
└── references/ # 详细参考文档(按需读取)
|
|
197
|
-
├── dsl-syntax.md # DSL 语法,28 种题型标签
|
|
198
|
-
├── survey-commands.md # survey 模块全部子命令
|
|
199
|
-
├── response-commands.md # 答卷查询、筛选、下载
|
|
200
|
-
├── contacts-commands.md # 通讯录、部门、管理员、标签、子账号、SSO
|
|
201
|
-
├── analytics-commands.md # NPS/CSAT/异常检测/数据解码
|
|
202
|
-
└── question-types.md # 题型编码映射表
|
|
203
|
-
```
|
|
204
|
-
|
|
205
195
|
## 参考文件(按需读取)
|
|
206
196
|
|
|
207
197
|
- [DSL 语法](references/dsl-syntax.md) — create-by-text 的完整 DSL 格式,28 种题型标签
|
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 通讯录、部门、管理员、标签、子账号与 SSO 参考
|
|
2
2
|
|
|
3
3
|
> 通讯录相关操作需要 `WJX_CORP_ID`(通过 `wjx init` 配置或环境变量)。
|
|
4
4
|
> 所有通讯录命令支持 `--corpid <s>` 覆盖默认值。
|
|
5
5
|
|
|
6
|
+
## 目录
|
|
7
|
+
|
|
8
|
+
- [Contacts 模块](#contacts-模块) — query, add, delete
|
|
9
|
+
- [Department 模块](#department-模块) — list, add, modify, delete
|
|
10
|
+
- [Admin 模块](#admin-模块) — add, delete, restore
|
|
11
|
+
- [Tag 模块](#tag-模块) — list, add, modify, delete
|
|
12
|
+
- [Account 模块(子账号)](#account-模块子账号) — list, add, modify, delete, restore
|
|
13
|
+
- [SSO 模块](#sso-模块) — subaccount-url, user-system-url, partner-url
|
|
14
|
+
- [User-System 模块(已过时)](#user-system-模块已过时) — add/modify/delete-participants, bind, query
|
|
15
|
+
|
|
6
16
|
## Contacts 模块
|
|
7
17
|
|
|
8
18
|
### wjx contacts query
|
|
@@ -321,10 +331,10 @@ wjx sso partner-url --username partner1
|
|
|
321
331
|
> 这些命令已标记 Deprecated,优先使用通讯录模块。仅在用户明确要求时使用。
|
|
322
332
|
|
|
323
333
|
```bash
|
|
324
|
-
wjx user-system add-participants --
|
|
325
|
-
wjx user-system modify-participants --
|
|
326
|
-
wjx user-system delete-participants --
|
|
327
|
-
wjx user-system bind --vid 12345 --
|
|
328
|
-
wjx user-system query-binding --vid 12345 --
|
|
329
|
-
wjx user-system query-surveys --
|
|
334
|
+
wjx user-system add-participants --sysid 100 --users '[{"uid":"u1","uname":"Alice","upass":"123"}]'
|
|
335
|
+
wjx user-system modify-participants --sysid 100 --users '[...]'
|
|
336
|
+
wjx user-system delete-participants --sysid 100 --uids '["u1","u2"]'
|
|
337
|
+
wjx user-system bind --vid 12345 --sysid 100 --uids '["u1"]'
|
|
338
|
+
wjx user-system query-binding --vid 12345 --sysid 100
|
|
339
|
+
wjx user-system query-surveys --sysid 100 --uid u1
|
|
330
340
|
```
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
|
|
45
45
|
| 标签 | 说明 |
|
|
46
46
|
|------|------|
|
|
47
|
-
| `[量表题]` | 量表评分(选项用 `最小值~最大值` 格式,如 `1~5
|
|
47
|
+
| `[量表题]` | 量表评分(选项用 `最小值~最大值` 格式,如 `1~5`,**必须使用半角波浪号 `~`**) |
|
|
48
48
|
| `[评分单选]` | 带评分的单选 |
|
|
49
49
|
| `[评分多选]` | 带评分的多选 |
|
|
50
50
|
| `[比重题]` | 百分比权重分配 |
|
|
@@ -82,6 +82,10 @@
|
|
|
82
82
|
|
|
83
83
|
## 矩阵题格式
|
|
84
84
|
|
|
85
|
+
矩阵题需要定义行(评价维度)。列可以用 `最小值~最大值` 简写,也可以用 `列:` 显式定义列标签。
|
|
86
|
+
|
|
87
|
+
### 简写格式(量表评分)
|
|
88
|
+
|
|
85
89
|
```
|
|
86
90
|
4. 请评价各维度[矩阵量表题]
|
|
87
91
|
行:
|
|
@@ -92,6 +96,22 @@
|
|
|
92
96
|
1~5
|
|
93
97
|
```
|
|
94
98
|
|
|
99
|
+
### 显式列定义
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
4. 请评价各维度[矩阵量表题]
|
|
103
|
+
行:
|
|
104
|
+
- 沟通能力
|
|
105
|
+
- 团队协作
|
|
106
|
+
- 管理水平
|
|
107
|
+
列:
|
|
108
|
+
- 非常不满意
|
|
109
|
+
- 不满意
|
|
110
|
+
- 一般
|
|
111
|
+
- 满意
|
|
112
|
+
- 非常满意
|
|
113
|
+
```
|
|
114
|
+
|
|
95
115
|
## 示例
|
|
96
116
|
|
|
97
117
|
### 客户满意度调查
|
|
@@ -149,6 +169,42 @@ I has a book.
|
|
|
149
169
|
|
|
150
170
|
创建命令:`wjx survey create-by-text --text "<上述文本>" --type 6`
|
|
151
171
|
|
|
172
|
+
## 投票问卷
|
|
173
|
+
|
|
174
|
+
投票问卷使用 `--type 3`,题目仍然使用普通题型标签:
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
最佳员工投票
|
|
178
|
+
|
|
179
|
+
请投出您的一票。
|
|
180
|
+
|
|
181
|
+
1. 最佳个人奖[单选题]
|
|
182
|
+
张三
|
|
183
|
+
李四
|
|
184
|
+
王五
|
|
185
|
+
|
|
186
|
+
2. 最佳团队(可多选)[多选题]
|
|
187
|
+
技术团队
|
|
188
|
+
设计团队
|
|
189
|
+
运营团队
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
命令:`wjx survey create-by-text --text "<上述文本>" --type 3`
|
|
193
|
+
|
|
194
|
+
**注意**:投票问卷的题目就是普通 `[单选题]`/`[多选题]`,不存在 `[投票单选题]` 标签。`--type 3` 控制问卷展示为投票样式,题型本身不变。
|
|
195
|
+
|
|
196
|
+
## 不支持的题型
|
|
197
|
+
|
|
198
|
+
以下题型**无法通过 DSL/API 创建**,遇到时应告知用户并建议替代方案:
|
|
199
|
+
|
|
200
|
+
| 题型 | 状态 | 替代方案 |
|
|
201
|
+
|------|------|---------|
|
|
202
|
+
| 签名题 | 不支持 | 用 `[绘图题]` 近似替代 |
|
|
203
|
+
| 地区题/省市区选择 | 不支持 | 用 `[多级下拉题]` 或网页端手动添加 |
|
|
204
|
+
| NPS 专用题 | 不支持 | 用 `[量表题]` + `0~10` 实现相同效果 |
|
|
205
|
+
| 自动每题一页 | 不支持 | 用 `=== 分页 ===` 在每题间手动分页 |
|
|
206
|
+
| 段落说明 | DSL 解析后被过滤 | API 不支持段落类型,内容不会出现在问卷中 |
|
|
207
|
+
|
|
152
208
|
## 限制
|
|
153
209
|
|
|
154
210
|
DSL 格式**不支持**以下功能:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 答卷命令参考
|
|
2
2
|
|
|
3
3
|
> **全参数访问**: 以下列出的是 CLI 显式 flags。SDK 支持的额外参数可通过 `--stdin` 传入 JSON。
|
|
4
4
|
|
|
@@ -46,6 +46,7 @@ wjx response query --vid 12345 --page_size 50 --sort 1 --begin_time 170000000000
|
|
|
46
46
|
- 多选:`2$1|3`(第2题选第1和第3个选项)
|
|
47
47
|
- 填空:`3$答案文本`
|
|
48
48
|
- 量表:`4$8`(第4题选8分)
|
|
49
|
+
- 排序:`5$2|3|1`(第5题排序:选项2第1名、选项3第2名、选项1第3名,按排名顺序用`|`分隔所有选项序号)
|
|
49
50
|
|
|
50
51
|
## wjx response report
|
|
51
52
|
|
package/dist/commands/account.js
CHANGED
|
@@ -50,7 +50,7 @@ export function registerAccountCommands(program) {
|
|
|
50
50
|
// --- modify ---
|
|
51
51
|
account
|
|
52
52
|
.command("modify")
|
|
53
|
-
.description("
|
|
53
|
+
.description("修改子账号(不支持修改密码,密码需通过问卷星后台修改)")
|
|
54
54
|
.option("--subuser <s>", "子账号用户名")
|
|
55
55
|
.option("--mobile <s>", "手机号")
|
|
56
56
|
.option("--email <s>", "邮箱")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEpF,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEhE,eAAe;IACf,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC;SACjC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC;SACnC,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC;SACrC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,kBAAkB,EAAE,IAAI,EAAE,SAAS,CAAC;SAC3C,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,SAAS,CAAC;SAC5C,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC;SAC7B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC;SACjC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC;SAC9B,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC;SAC7B,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC;SAC3B,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC;SACrC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACtD,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;aACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/admin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { addAdmin, deleteAdmin, restoreAdmin, } from "wjx-api-sdk";
|
|
2
|
-
import { executeCommand, requireField } from "../lib/command-helpers.js";
|
|
2
|
+
import { executeCommand, requireField, ensureJsonString } from "../lib/command-helpers.js";
|
|
3
3
|
export function registerAdminCommands(program) {
|
|
4
4
|
const admin = program.command("admin").description("管理员管理");
|
|
5
5
|
// --- add ---
|
|
@@ -11,7 +11,7 @@ export function registerAdminCommands(program) {
|
|
|
11
11
|
.action(async (_opts, cmd) => {
|
|
12
12
|
await executeCommand(program, cmd, addAdmin, (m) => {
|
|
13
13
|
requireField(m, "users");
|
|
14
|
-
return { users: m.users, corpid: m.corpid };
|
|
14
|
+
return { users: ensureJsonString(m.users, "users"), corpid: m.corpid };
|
|
15
15
|
});
|
|
16
16
|
});
|
|
17
17
|
// --- delete ---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE3F,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAE5D,cAAc;IACd,KAAK;SACF,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC;SACrC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACjD,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzB,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;SACpC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACpD,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,kBAAkB;IAClB,KAAK;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;SACpC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;YACrD,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -31,7 +31,7 @@ export function registerAnalyticsCommands(program) {
|
|
|
31
31
|
requireField(m, "scores");
|
|
32
32
|
const scores = JSON.parse(m.scores);
|
|
33
33
|
if (!Array.isArray(scores)) {
|
|
34
|
-
throw new CliError("INPUT_ERROR", "--scores
|
|
34
|
+
throw new CliError("INPUT_ERROR", "--scores 必须是数字数组的 JSON 字符串");
|
|
35
35
|
}
|
|
36
36
|
const result = calculateNps(scores);
|
|
37
37
|
formatOutput(result, program.opts());
|
|
@@ -52,7 +52,7 @@ export function registerAnalyticsCommands(program) {
|
|
|
52
52
|
requireField(m, "scores");
|
|
53
53
|
const scores = JSON.parse(m.scores);
|
|
54
54
|
if (!Array.isArray(scores)) {
|
|
55
|
-
throw new CliError("INPUT_ERROR", "--scores
|
|
55
|
+
throw new CliError("INPUT_ERROR", "--scores 必须是数字数组的 JSON 字符串");
|
|
56
56
|
}
|
|
57
57
|
const result = calculateCsat(scores, m.scale);
|
|
58
58
|
formatOutput(result, program.opts());
|
|
@@ -72,7 +72,7 @@ export function registerAnalyticsCommands(program) {
|
|
|
72
72
|
requireField(m, "responses");
|
|
73
73
|
const responses = JSON.parse(m.responses);
|
|
74
74
|
if (!Array.isArray(responses)) {
|
|
75
|
-
throw new CliError("INPUT_ERROR", "--responses
|
|
75
|
+
throw new CliError("INPUT_ERROR", "--responses 必须是 JSON 数组");
|
|
76
76
|
}
|
|
77
77
|
const result = detectAnomalies(responses);
|
|
78
78
|
formatOutput(result, program.opts());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/commands/analytics.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAEnE,iBAAiB;IACjB,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,UAAU,CAAC;SACvB,MAAM,CAAC,kBAAkB,EAAE,SAAS,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YACzB,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,UAAoB,CAAC,CAAC;YACvD,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,SAAS;SACN,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,SAAS,CAAC;SACtB,MAAM,CAAC,iBAAiB,EAAE,UAAU,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YACzB,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAgB,CAAa,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/commands/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { queryContacts, addContacts, deleteContacts, } from "wjx-api-sdk";
|
|
2
|
-
import { executeCommand, requireField } from "../lib/command-helpers.js";
|
|
2
|
+
import { executeCommand, requireField, ensureJsonString } from "../lib/command-helpers.js";
|
|
3
3
|
export function registerContactsCommands(program) {
|
|
4
4
|
const contacts = program.command("contacts").description("通讯录管理");
|
|
5
5
|
// --- query ---
|
|
@@ -26,7 +26,7 @@ export function registerContactsCommands(program) {
|
|
|
26
26
|
await executeCommand(program, cmd, addContacts, (m) => {
|
|
27
27
|
requireField(m, "users");
|
|
28
28
|
return {
|
|
29
|
-
users: m.users,
|
|
29
|
+
users: ensureJsonString(m.users, "users"),
|
|
30
30
|
corpid: m.corpid,
|
|
31
31
|
auto_create_udept: m.auto_create_udept,
|
|
32
32
|
auto_create_tag: m.auto_create_tag,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE3F,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAElE,gBAAgB;IAChB,QAAQ;SACL,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;SAC3B,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACtD,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,QAAQ;SACL,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC;SACpC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,mBAAmB,EAAE,QAAQ,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACpD,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzB,OAAO;gBACL,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC;gBACzC,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;gBACtC,eAAe,EAAE,CAAC,CAAC,eAAe;aACnC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,QAAQ;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;SACpC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;YACvD,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { listDepartments, addDepartment, modifyDepartment, deleteDepartment, } from "wjx-api-sdk";
|
|
2
|
-
import { executeCommand, requireField } from "../lib/command-helpers.js";
|
|
2
|
+
import { executeCommand, requireField, ensureJsonString } from "../lib/command-helpers.js";
|
|
3
3
|
export function registerDepartmentCommands(program) {
|
|
4
4
|
const department = program.command("department").description("部门管理");
|
|
5
5
|
// --- list ---
|
|
@@ -21,7 +21,7 @@ export function registerDepartmentCommands(program) {
|
|
|
21
21
|
.action(async (_opts, cmd) => {
|
|
22
22
|
await executeCommand(program, cmd, addDepartment, (m) => {
|
|
23
23
|
requireField(m, "depts");
|
|
24
|
-
return { depts: m.depts, corpid: m.corpid };
|
|
24
|
+
return { depts: ensureJsonString(m.depts, "depts"), corpid: m.corpid };
|
|
25
25
|
});
|
|
26
26
|
});
|
|
27
27
|
// --- modify ---
|
|
@@ -33,7 +33,7 @@ export function registerDepartmentCommands(program) {
|
|
|
33
33
|
.action(async (_opts, cmd) => {
|
|
34
34
|
await executeCommand(program, cmd, modifyDepartment, (m) => {
|
|
35
35
|
requireField(m, "depts");
|
|
36
|
-
return { depts: m.depts, corpid: m.corpid };
|
|
36
|
+
return { depts: ensureJsonString(m.depts, "depts"), corpid: m.corpid };
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
39
|
// --- delete ---
|
|
@@ -50,7 +50,7 @@ export function registerDepartmentCommands(program) {
|
|
|
50
50
|
requireField(m, "depts");
|
|
51
51
|
return {
|
|
52
52
|
type: m.type,
|
|
53
|
-
depts: m.depts,
|
|
53
|
+
depts: ensureJsonString(m.depts, "depts"),
|
|
54
54
|
corpid: m.corpid,
|
|
55
55
|
del_child: m.del_child,
|
|
56
56
|
};
|