> **前置条件** — 执行以下任何命令前，请先确认已完成认证。如未认证，参见 [`../../shb-shared/SKILL.md`](../../shb-shared/SKILL.md)。

# shb-cli task type

工单类型查询。返回当前租户下所有工单类型，按权限分为三组。

## 重要：默认输出很大，取数时务必加 `--format-data`

后端每个工单类型对象都很大（含 `flowSetting`、`config`、`overTimeSetting`、`options` 等大量内部配置）。**不加 `--format-data` 时 CLI 会把这一整坨原样输出**——又大又没用。查类型时**一律加 `--format-data`**（或 `-o table`），它只保留有用的几列：`listType`、`id`、`name`、`enabled`、`modifyUserName`、`modifyTime`。

实际只需要 `id`（即工单命令里的 `templateId`，内部用）和 `name`（类型名）；其余字段一般用不到。

## 响应结构（三组）

| 字段 | 说明 |
|------|------|
| `writeList` | 当前用户可创建工单的类型 |
| `readList` | 当前用户可查看工单的类型 |
| `notEnableList` | 已禁用的工单类型 |

每条记录里取这几项即可：

| 字段 | 说明 |
|------|------|
| `id` | 类型 ID，即工单搜索/创建用的 `templateId`（内部用，不展示给用户） |
| `name` | 类型名称 |

## 查询工单类型

```bash
# 三组都要：精简输出（推荐）
shb-cli task type list --format-data

# 只看可创建的类型
shb-cli task type list --list-type writeList --format-data

# 只看可查看 / 已禁用
shb-cli task type list --list-type readList --format-data
shb-cli task type list --list-type notEnableList --format-data

# 需要表格直接看时
shb-cli task type list --format-data -o table
```

> 行为说明：不加 `--list-type` 取全部三组；加了只取该组。`--format-data`/`-o table` 都只输出上表的少数列；**都不加**才会输出完整原始大对象（避免）。

## 典型场景：拿 templateId 去搜索/创建工单

```bash
# 1. 查类型，从结果里读取目标类型的 id（= templateId）
shb-cli task type list --list-type writeList --format-data

# 2. 用该 id 搜索工单
shb-cli task search --template-id <id>

# 3. 用该 id 创建工单
shb-cli task create submit --template-id <id> --description "测试工单"
```

> 本轮已查过类型、结果里出现过某类型的 id，后续直接复用，不要重复查询。

## 查看某工单类型的配置详情

当用户想了解某类型的**配置**（审批/流程、超时提醒、工单选项、是否可暂停、服务报告字段等）时，`--format-data` 不够（它只留 name/enabled）。这时改用**不加 `--format-data`** 的原始输出（可加 `--list-type` 缩小范围、减少体积），从目标类型对象里读取相应字段后，用中文解释给用户。

```bash
# 取某一组的完整对象（含配置字段），再从结果里定位目标类型
shb-cli task type list --list-type writeList
```

配置主要分布在这些字段（按需读取、转成可读说明）：

| 字段 | 含义 |
|------|------|
| `flowSetting.{create,allot,accept,start,finish,cost,review,close,off,pause}` | 各流程节点的开关（`state`）、审批人（`approvers`）、负责人审批（`leader`）、超时（`overTime`）——即该类型的工单流转与审批流程 |
| `options` | 工单功能开关：附件 `showAttachment`、备件 `showSparepart`、服务项 `showService`、客户签名 `customerSign`、服务报告 `serviceReport`、打印 `printTask`、各 `*NotNull` 必填项等 |
| `overTimeSetting` / `config.newOverTimeSetting` | 超时提醒规则（提前量 `isAhead`/`minutes`、按节点 `overTimeState` 等） |
| `planRemindSetting` | 计划时间提醒（是否开启、提前分钟数） |
| `allowPause` / `pauseApprovers` | 是否允许暂停及暂停审批人 |
| `reportSetting` | 服务报告包含哪些字段（租户/客户/工单/回执字段） |
| `delayBack` / `delayBackMin` | 是否允许延迟回填及时长 |
| `config.color` | 类型颜色标识 |
| `config.positionExceptionConfig` | 定位异常、照片水印设置 |
| `config.intelligentConfig` | 智能图片/工单检查设置 |

> 解释配置时用中文标签、给出业务含义（如「完成节点需审批」「开启了客户签名」），**不要把原始 JSON 整段贴给用户**；`id`（UUID）等内部字段仍不展示。

## 给用户呈现

- 列清单时按三组分别报**类型名称**：如「可创建的工单类型：妮可测试」可查看的工单类型:大鱼测试」「已禁用的工单类型:大鱼测试」。
- **不要**展示 `id`（UUID，内部用）。`flowSetting`/`config`/`options` 等配置**默认不展示**——仅当用户明确询问该类型的配置时，按上一节读取并解释相应字段。
- `writeList` 与 `readList` 常有重复条目（有写权限通常也有读权限），向用户汇总时按需去重，避免同一类型列两遍。

## 注意

- 返回数据为当前登录用户在当前租户下的可见范围，不同用户结果可能不同。
- `id` 即 `templateId`，两者等价；只在后台串联搜索/创建时用，不输出给用户。
