## ADDED Requirements

### Requirement: 查询客户账号列表
系统 SHALL 提供统一查询代理商账号和企业账号的接口。

**接口**：`GET /api/admin/customer-accounts`

**请求参数**：
- `page`、`page_size`：分页
- `shop_id`：代理商ID（筛选该代理商及其下级的账号）
- `username`：账号名称（模糊查询）
- `status`：账号状态（0=禁用, 1=启用）
- `user_type`：账号类型（3=代理, 4=企业）

**响应字段**：
- 账号信息（id, username, phone, user_type, user_type_name, status, status_name）
- 归属信息（shop_id, shop_name, enterprise_id, enterprise_name）
- 时间信息（created_at）

#### Scenario: 查询所有客户账号
- **WHEN** 不带筛选条件查询
- **THEN** 返回所有 `user_type IN (3, 4)` 的账号

#### Scenario: 平台用户查看所有账号
- **WHEN** 平台用户请求账号列表
- **THEN** 返回所有代理商账号和企业账号

#### Scenario: 代理商用户查看可见账号
- **WHEN** 代理商用户请求账号列表
- **THEN** 返回自己店铺+下级店铺的代理账号
- **AND** 返回归属企业的账号

#### Scenario: 按 shop_id 筛选
- **WHEN** 指定 `shop_id` 筛选
- **THEN** 返回该店铺及其下级店铺的代理账号

---

### Requirement: 新增客户账号
系统 SHALL 提供为代理商新增账号的接口。

**接口**：`POST /api/admin/customer-accounts`

**请求参数**：
- `shop_id`：代理商ID（必填）
- `username`：账号名称（必填）
- `phone`：登录手机号（必填）
- `password`：登录密码（必填）
- `status`：状态（可选，默认1=启用）

**响应字段**：
- 账号信息（id, username, phone, user_type, shop_id, shop_name, status）

**注意**：此接口只能新增代理商账号（UserType=3）。企业账号通过新增企业时自动创建。

#### Scenario: 新增代理商账号
- **WHEN** 新增客户账号
- **THEN** 创建 UserType=3 的账号
- **AND** 关联到指定店铺

#### Scenario: 验证店铺权限
- **WHEN** 新增账号到某店铺
- **THEN** 验证店铺存在且当前用户有权限

#### Scenario: 验证手机号唯一性
- **WHEN** 新增账号时手机号已存在
- **THEN** 返回错误：手机号已被使用

---

### Requirement: 编辑客户账号
系统 SHALL 提供编辑客户账号信息的接口。

**接口**：`PUT /api/admin/customer-accounts/:id`

**请求参数**：
- `id`：账号ID（路径参数）
- `username`：账号名称
- `phone`：登录手机号

#### Scenario: 编辑账号信息
- **WHEN** 编辑客户账号
- **THEN** 验证账号类型为代理或企业（3或4）
- **AND** 更新账号信息

#### Scenario: 修改手机号时验证唯一性
- **WHEN** 修改手机号
- **THEN** 验证新手机号不与其他账号冲突

#### Scenario: 验证账号权限
- **WHEN** 编辑账号
- **THEN** 验证当前用户有权限编辑该账号

---

### Requirement: 修改客户账号密码
系统 SHALL 提供修改客户账号密码的接口。

**接口**：`PUT /api/admin/customer-accounts/:id/password`

**请求参数**：
- `id`：账号ID（路径参数）
- `password`：新密码（必填）

#### Scenario: 重置账号密码
- **WHEN** 修改客户账号密码
- **THEN** 更新账号密码（bcrypt加密）

---

### Requirement: 启用/禁用客户账号
系统 SHALL 提供启用或禁用客户账号的接口。

**接口**：`PUT /api/admin/customer-accounts/:id/status`

**请求参数**：
- `id`：账号ID（路径参数）
- `status`：状态（0=禁用, 1=启用）

#### Scenario: 禁用账号
- **WHEN** 禁用客户账号
- **THEN** 更新账号状态为禁用

#### Scenario: 启用账号
- **WHEN** 启用客户账号
- **THEN** 更新账号状态为启用
