# 账号管理 API 文档

## 统一认证接口 (`/api/auth/*`)

### 1. 登录

**路由**：`POST /api/auth/login`

**请求体**：
```json
{
  "username": "admin",      // 用户名或手机号（二选一）
  "phone": "13800000001",   //
  "password": "Password123" // 必填
}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIs...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIs...",
    "expires_in": 86400,  // 24小时
    "user": {
      "id": 1,
      "username": "admin",
      "user_type": 1,
      "menus": [...],      // 菜单树
      "buttons": [...]     // 按钮权限
    }
  },
  "timestamp": 1638345600
}
```

### 2. 登出

**路由**：`POST /api/auth/logout`

**请求头**：
```
Authorization: Bearer {access_token}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "timestamp": 1638345600
}
```

### 3. 刷新 Token

**路由**：`POST /api/auth/refresh-token`

**请求体**：
```json
{
  "refresh_token": "eyJhbGciOiJIUzI1NiIs..."
}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIs...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIs...",
    "expires_in": 86400
  },
  "timestamp": 1638345600
}
```

### 4. 获取用户信息

**路由**：`GET /api/auth/me`

**请求头**：
```
Authorization: Bearer {access_token}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "data": {
    "id": 1,
    "username": "admin",
    "phone": "13800000001",
    "user_type": 1,
    "shop_id": null,
    "enterprise_id": null,
    "status": 1,
    "menus": [...],
    "buttons": [...]
  },
  "timestamp": 1638345600
}
```

### 5. 修改密码

**路由**：`PUT /api/auth/password`

**请求头**：
```
Authorization: Bearer {access_token}
```

**请求体**：
```json
{
  "old_password": "OldPassword123",
  "new_password": "NewPassword123"
}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "timestamp": 1638345600
}
```

---

## 账号管理接口 (`/api/admin/accounts/*`)

### 路由结构说明

**所有账号类型共享同一套接口**，通过请求体的 `user_type` 字段区分：
- `user_type: 2` - 平台用户
- `user_type: 3` - 代理账号（需提供 `shop_id`）
- `user_type: 4` - 企业账号（需提供 `enterprise_id`）

---

### 1. 创建账号

**路由**：`POST /api/admin/accounts`

**请求头**：
```
Authorization: Bearer {access_token}
```

**请求体（平台账号）**：
```json
{
  "username": "platform_user",
  "phone": "13800000001",
  "password": "Password123",
  "user_type": 2  // 2=平台用户
}
```

**请求体（代理账号）**：
```json
{
  "username": "agent_user",
  "phone": "13800000002",
  "password": "Password123",
  "user_type": 3,  // 3=代理账号
  "shop_id": 10    // 必填
}
```

**请求体（企业账号）**：
```json
{
  "username": "enterprise_user",
  "phone": "13800000003",
  "password": "Password123",
  "user_type": 4,       // 4=企业账号
  "enterprise_id": 5    // 必填
}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "data": {
    "id": 100,
    "username": "platform_user",
    "phone": "13800000001",
    "user_type": 2,
    "status": 1,
    "created_at": "2025-02-02T10:00:00Z"
  },
  "timestamp": 1638345600
}
```

### 2. 查询账号列表

**路由**：`GET /api/admin/accounts?page=1&page_size=20&user_type=3&username=test&status=1`

**请求头**：
```
Authorization: Bearer {access_token}
```

**查询参数**：
- `page`：页码（默认 1）
- `page_size`：每页数量（默认 20，最大 100）
- `user_type`：账号类型（2=平台，3=代理，4=企业），不传则查询所有
- `username`：用户名（模糊搜索）
- `phone`：手机号（模糊搜索）
- `status`：状态（1=启用，2=禁用）

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "data": {
    "list": [
      {
        "id": 100,
        "username": "platform_user",
        "phone": "13800000001",
        "user_type": 2,
        "status": 1,
        "created_at": "2025-02-02T10:00:00Z"
      }
    ],
    "total": 50,
    "page": 1,
    "page_size": 20
  },
  "timestamp": 1638345600
}
```

### 3. 获取账号详情

**路由**：`GET /api/admin/accounts/:id`

**请求头**：
```
Authorization: Bearer {access_token}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "data": {
    "id": 100,
    "username": "platform_user",
    "phone": "13800000001",
    "user_type": 2,
    "shop_id": null,
    "enterprise_id": null,
    "status": 1,
    "created_at": "2025-02-02T10:00:00Z",
    "updated_at": "2025-02-02T11:00:00Z"
  },
  "timestamp": 1638345600
}
```

### 4. 更新账号

**路由**：`PUT /api/admin/accounts/:id`

**请求头**：
```
Authorization: Bearer {access_token}
```

**请求体**：
```json
{
  "username": "new_username",  // 可选
  "phone": "13900000001",      // 可选
  "status": 2                  // 可选（1=启用，2=禁用）
}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "data": {
    "id": 100,
    "username": "new_username",
    "phone": "13900000001",
    "status": 2,
    "updated_at": "2025-02-02T12:00:00Z"
  },
  "timestamp": 1638345600
}
```

### 5. 删除账号

**路由**：`DELETE /api/admin/accounts/:id`

**请求头**：
```
Authorization: Bearer {access_token}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "timestamp": 1638345600
}
```

### 6. 修改账号密码

**路由**：`PUT /api/admin/accounts/:id/password`

**请求头**：
```
Authorization: Bearer {access_token}
```

**请求体**：
```json
{
  "password": "NewPassword123"
}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "timestamp": 1638345600
}
```

### 7. 修改账号状态

**路由**：`PUT /api/admin/accounts/:id/status`

**请求头**：
```
Authorization: Bearer {access_token}
```

**请求体**：
```json
{
  "status": 2  // 1=启用，2=禁用
}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "timestamp": 1638345600
}
```

### 8. 分配角色

**路由**：`POST /api/admin/accounts/:id/roles`

**请求头**：
```
Authorization: Bearer {access_token}
```

**请求体**：
```json
{
  "role_ids": [1, 2, 3]  // 角色 ID 数组，空数组表示清空所有角色
}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "data": [
    {
      "id": 1,
      "account_id": 100,
      "role_id": 1,
      "created_at": "2025-02-02T12:00:00Z"
    },
    {
      "id": 2,
      "account_id": 100,
      "role_id": 2,
      "created_at": "2025-02-02T12:00:00Z"
    }
  ],
  "timestamp": 1638345600
}
```

### 9. 获取账号角色

**路由**：`GET /api/admin/accounts/:id/roles`

**请求头**：
```
Authorization: Bearer {access_token}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "data": [
    {
      "id": 1,
      "role_name": "系统管理员",
      "role_code": "system_admin",
      "role_type": 2
    },
    {
      "id": 2,
      "role_name": "运营人员",
      "role_code": "operator",
      "role_type": 2
    }
  ],
  "timestamp": 1638345600
}
```

### 10. 移除角色

**路由**：`DELETE /api/admin/accounts/:account_id/roles/:role_id`

**请求头**：
```
Authorization: Bearer {access_token}
```

**响应**：
```json
{
  "code": 0,
  "msg": "success",
  "timestamp": 1638345600
}
```

---

## 错误码说明

### 认证相关

| 错误码 | 说明 |
|-------|------|
| 1001 | 缺失认证令牌 |
| 1002 | 无效或过期的令牌 |
| 1003 | 权限不足 |

### 账号管理相关

| 错误码 | 说明 |
|-------|------|
| 2001 | 用户名已存在 |
| 2002 | 手机号已存在 |
| 2003 | 账号不存在 |
| 2004 | 无权限操作该资源或资源不存在 |
| 2005 | 超级管理员不允许分配角色 |
| 2006 | 角色类型与账号类型不匹配 |

### 通用错误

| 错误码 | 说明 |
|-------|------|
| 400 | 请求参数错误 |
| 500 | 服务器内部错误 |

---

## 权限说明

### 账号类型与权限

| 账号类型 | 值 | 可创建的账号类型 | 可访问的接口 |
|---------|---|---------------|------------|
| 超级管理员 | 1 | 所有 | 所有 |
| 平台用户 | 2 | 平台、代理、企业 | 所有账号管理 |
| 代理账号 | 3 | 自己店铺及下级店铺的代理、企业 | 自己店铺及下级的账号 |
| 企业账号 | 4 | 无 | **禁止访问账号管理** |

### 企业账号限制

企业账号访问账号管理接口会返回：
```json
{
  "code": 1003,
  "msg": "无权限访问账号管理功能",
  "timestamp": 1638345600
}
```

---

## 使用示例

### 创建不同类型账号

```javascript
// 1. 创建平台账号
POST /api/admin/accounts
{
  "username": "platform1",
  "phone": "13800000001",
  "password": "Pass123",
  "user_type": 2  // 平台用户
}

// 2. 创建代理账号
POST /api/admin/accounts
{
  "username": "agent1",
  "phone": "13800000002",
  "password": "Pass123",
  "user_type": 3,  // 代理账号
  "shop_id": 10    // 必填：归属店铺
}

// 3. 创建企业账号
POST /api/admin/accounts
{
  "username": "ent1",
  "phone": "13800000003",
  "password": "Pass123",
  "user_type": 4,       // 企业账号
  "enterprise_id": 5    // 必填：归属企业
}
```

### 查询不同类型账号

```javascript
// 1. 查询所有账号
GET /api/admin/accounts

// 2. 查询平台账号
GET /api/admin/accounts?user_type=2

// 3. 查询代理账号
GET /api/admin/accounts?user_type=3

// 4. 查询企业账号
GET /api/admin/accounts?user_type=4

// 5. 组合筛选（代理账号 + 启用状态）
GET /api/admin/accounts?user_type=3&status=1

// 6. 分页查询
GET /api/admin/accounts?page=2&page_size=50
```

---

## 相关文档

- [迁移指南](./迁移指南.md) - 接口迁移步骤
- [功能总结](./功能总结.md) - 重构内容和安全提升
- [OpenAPI 规范](../../docs/admin-openapi.yaml) - 机器可读的完整接口文档
