# 部门模块接口文档

基础路径：`POST /mgt/dpt/*`，需 JWT 认证。  
部门按应用维度隔离：创建/列表/树等接口需传 `workspace` 表示所属应用。

---

## 1. 新增部门

**路径**：`POST /mgt/dpt/create`

**请求体**（DptReq）：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| workspace | string | 是 | 应用编码，部门归属应用 |
| name | string | 是 | 部门名称，1-100 位，同应用下唯一 |
| parent_id | number | 否 | 父部门 ID，0 或不传表示顶级 |
| leader_id | number | 否 | 部门负责人用户 ID |

**请求示例**：

```json
{
  "workspace": "my_app",
  "name": "技术部",
  "parent_id": 0,
  "leader_id": 1
}
```

**返回**（IdResp）：

```json
{
  "code": 0,
  "data": {
    "id": 1,
    "identity": "01ARZ3NDEKTSV4RRFFQ69G5FAV"
  }
}
```

---

## 2. 删除部门

**路径**：`POST /mgt/dpt/del`

**说明**：会级联删除该部门及所有子部门，并清理部门-用户、部门-角色、部门-权限关联。

**请求体**：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | number | 是 | 部门 ID |

**请求示例**：

```json
{
  "id": 1
}
```

**返回示例**：

```json
{
  "code": 0,
  "data": {
    "id": 1,
    "identity": "01ARZ3NDEKTSV4RRFFQ69G5FAV"
  }
}
```

---

## 3. 部门详情

**路径**：`POST /mgt/dpt/detail`

**请求体**：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | number | 是 | 部门 ID |

**请求示例**：

```json
{
  "id": 1
}
```

**返回**：data 含部门基础信息及负责人（leader）简要信息。

| 参数 | 类型 | 说明 |
|------|------|------|
| id | number | 部门 ID |
| identity | string | 唯一标识 |
| name | string | 部门名称 |
| app_id | number | 应用 ID |
| parent_id | number | 父部门 ID |
| leader_id | number | 负责人用户 ID |
| leader | object | 负责人信息（id、identity、name） |

**返回示例**：

```json
{
  "code": 0,
  "data": {
    "id": 1,
    "identity": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
    "name": "技术部",
    "app_id": 1,
    "parent_id": 0,
    "leader_id": 1,
    "leader": {
      "id": 1,
      "identity": "01HXXX",
      "name": "张三"
    }
  }
}
```

---

## 4. 修改部门

**路径**：`POST /mgt/dpt/modify`

**请求体**：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | number | 是 | 部门 ID |
| name | string | 否 | 部门名称，同应用下唯一 |
| parent_id | number | 否 | 父部门 ID（不能为自己或当前部门的子孙） |
| leader_id | number | 否 | 负责人用户 ID |
| status | number | 否 | 状态 |

**请求示例**：

```json
{
  "id": 1,
  "name": "研发技术部",
  "parent_id": 0,
  "leader_id": 2
}
```

**返回示例**：

```json
{
  "code": 0,
  "data": {
    "id": 1,
    "identity": "01ARZ3NDEKTSV4RRFFQ69G5FAV"
  }
}
```

---

## 5. 获取部门列表（分页）

**路径**：`POST /mgt/dpt/fetch`

**请求体**：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| workspace | string | 是 | 应用编码 |
| page | number | 否 | 页码 |
| size | number | 否 | 每页条数 |
| keyword | string | 否 | 关键字，模糊匹配部门名称 |
| status | number | 否 | 状态 |
| id | number | 否 | 指定部门 ID |
| parent_id | number | 否 | 按父部门 ID 筛选 |

**请求示例**：

```json
{
  "workspace": "my_app",
  "page": 1,
  "size": 10,
  "keyword": "技术",
  "status": 1
}
```

**返回**（FetchResp，data 为部门对象数组，含 id、identity、name、app_id、parent_id）：

```json
{
  "code": 0,
  "data": {
    "total": 1,
    "page": 1,
    "size": 10,
    "data": [
      {
        "id": 1,
        "identity": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
        "name": "技术部",
        "app_id": 1,
        "parent_id": 0
      }
    ]
  }
}
```

---

## 6. 部门列表（下拉/树）

**路径**：`POST /mgt/dpt/list`

**说明**：必传 workspace；`tree=true` 时返回树形结构，否则返回扁平列表。

**请求体**：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| workspace | string | 是 | 应用编码 |
| keyword | string | 否 | 关键字，模糊匹配部门名称 |
| status | number | 否 | 状态 |
| tree | bool | 否 | true 时返回树形（含 children） |

**请求示例（扁平）**：

```json
{
  "workspace": "my_app",
  "keyword": "技术"
}
```

**请求示例（树形）**：

```json
{
  "workspace": "my_app",
  "tree": true
}
```

**返回示例（树形）**：

```json
{
  "code": 0,
  "data": {
    "data": [
      {
        "id": 1,
        "identity": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
        "name": "技术部",
        "app_id": 1,
        "parent_id": 0,
        "children": [
          {
            "id": 2,
            "identity": "01ARZ3NDEKTSV4RRFFQ69G5FBW",
            "name": "前端组",
            "app_id": 1,
            "parent_id": 1,
            "children": []
          }
        ]
      }
    ]
  }
}
```

---

## 7. 获取部门树

**路径**：`POST /mgt/dpt/fetch_tree`

**说明**：必传 workspace，返回该应用下完整部门树。

**请求体**：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| workspace | string | 是 | 应用编码 |

**请求示例**：

```json
{
  "workspace": "my_app"
}
```

**返回**：data 为树形部门数组（结构同 list tree=true）。

---

## 8. 给部门设置权限

**路径**：`POST /mgt/dpt/set_pmn`

**请求体**（AddPmnRequest）：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| workspace | string | 否 | 应用编码，需与部门所属应用一致 |
| id | number | 是 | 部门 ID |
| list | number[] | 是 | 权限 ID 列表，至少 1 个 |

**请求示例**：

```json
{
  "workspace": "my_app",
  "id": 1,
  "list": [1, 2, 3]
}
```

---

## 9. 给部门编辑权限（按应用覆盖）

**路径**：`POST /mgt/dpt/modify_pmn`

**请求体**：同 set_pmn，按应用维度覆盖该部门在该应用下的权限。

---

## 10. 移除部门权限

**路径**：`POST /mgt/dpt/del_pmn`

**请求体**：同 set_pmn；**list 必填且至少一个元素**，为要移除的权限 ID 列表。

**请求示例**：

```json
{
  "workspace": "my_app",
  "id": 1,
  "list": [2, 3]
}
```

---

## 11. 获取部门权限列表（平面）

**路径**：`POST /mgt/dpt/pmn`

**说明**：可选 id 指定部门、workspace 过滤应用；**传 workspace 时仅返回该应用下部门权限**。

**请求体**：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | number | 否 | 部门 ID，不传则查所有部门 |
| workspace | string | 否 | 应用编码，过滤应用维度 |

**请求示例**：

```json
{
  "id": 1,
  "workspace": "my_app"
}
```

**返回**：data 为部门列表，每项含 id、identity、name 及 permissions 数组。

---

## 12. 获取部门权限树

**路径**：`POST /mgt/dpt/pmn_tree`

**说明**：部门下权限按父子建树；**传 workspace 时仅返回该应用下部门权限**。

**请求体**：同 pmn 接口（id、workspace 可选）。

**返回**：data 为部门列表，每项的 permissions 为树形权限结构。

---

## 13. 用户移入部门

**路径**：`POST /mgt/dpt/set_user`

**请求体**（DptUserRequest）：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| dpt_id | number | 是 | 部门 ID，大于 0 |
| user_ids | number[] | 是 | 用户 ID 列表，至少 1 个，每个大于 0 |

**请求示例**：

```json
{
  "dpt_id": 1,
  "user_ids": [1, 2, 3]
}
```

**返回示例**：

```json
{
  "code": 0,
  "data": ""
}
```

---

## 14. 用户移出部门

**路径**：`POST /mgt/dpt/del_user`

**请求体**：同 set_user，user_ids 为要移出的用户 ID 列表。

**请求示例**：

```json
{
  "dpt_id": 1,
  "user_ids": [2]
}
```

---

## 15. 获取部门下用户列表

**路径**：`POST /mgt/dpt/user`

**说明**：**部门 ID 必传**，避免误用为“查全部部门用户”。

**请求体**：

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | number | 是 | 部门 ID |

**请求示例**：

```json
{
  "id": 1
}
```

**返回**：data 为部门列表（通常一条），每项含 id、identity、name 及 users 数组（用户 id、identity、name）。
