## ADDED Requirements

### Requirement: 代理商账号分页列表查询

系统 SHALL 提供代理商账号分页列表查询功能，支持按店铺ID和账号名称过滤（均为可选条件），返回账号基本信息。

#### Scenario: 查询指定店铺的账号列表

- **WHEN** 用户传入店铺ID查询参数（不传账号名称）
- **THEN** 返回该店铺的所有账号（user_type=3 且 shop_id=指定店铺ID）
- **AND** 包含分页信息（总数、当前页、每页数量）
- **AND** 每条记录包含：账号名称（username）、手机号、创建时间

#### Scenario: 按账号名称模糊查询

- **WHEN** 用户传入账号名称查询参数（不传店铺ID）
- **THEN** 返回账号名称包含该关键字的所有代理商账号（user_type=3）
- **AND** 使用 LIKE 模糊匹配
- **AND** 支持分页

#### Scenario: 组合条件查询

- **WHEN** 用户同时传入店铺ID和账号名称查询参数
- **THEN** 返回同时满足两个条件的账号
- **AND** 使用 AND 逻辑组合条件
- **AND** shop_id = 指定店铺ID AND username LIKE '%关键字%'

#### Scenario: 查询所有代理商账号（无过滤条件）

- **WHEN** 用户不传任何查询条件（店铺ID和账号名称都为空）
- **AND** 当前用户是平台管理员
- **THEN** 返回所有代理商账号（user_type=3）
- **AND** 支持分页

#### Scenario: 数据权限过滤

- **WHEN** 代理账号访问账号列表（无论是否传查询条件）
- **THEN** 通过 GORM Callback 自动过滤
- **AND** 只返回当前店铺及下级店铺的账号
- **AND** 在数据权限过滤的基础上，再应用用户传入的查询条件

#### Scenario: 空结果处理

- **WHEN** 查询条件无匹配结果
- **THEN** 返回空数组
- **AND** 总数为 0
- **AND** HTTP 状态码 200

### Requirement: 代理商账号新增

系统 SHALL 提供代理商账号新增功能，支持创建绑定到指定店铺的代理账号。

#### Scenario: 新增代理商账号

- **WHEN** 用户提交新增账号请求
- **AND** 提供账号名称、手机号、登录密码、关联店铺ID
- **THEN** 验证店铺存在且未删除
- **AND** 验证手机号唯一性（未被使用）
- **AND** 验证账号名称唯一性（未被使用）
- **AND** 密码使用 bcrypt 加密
- **AND** 创建账号（user_type=3，shop_id=指定店铺ID）
- **AND** 状态默认为启用（status=1）
- **AND** 返回新创建的账号信息（不包含密码）

#### Scenario: 手机号已存在

- **WHEN** 用户提交的手机号已被使用
- **THEN** 返回错误码 2002（手机号已存在）
- **AND** HTTP 状态码 400

#### Scenario: 账号名称已存在

- **WHEN** 用户提交的账号名称已被使用
- **THEN** 返回错误码 2001（用户名已存在）
- **AND** HTTP 状态码 400

#### Scenario: 关联店铺不存在

- **WHEN** 用户提交的店铺ID不存在或已删除
- **THEN** 返回错误码 2103（店铺不存在）
- **AND** HTTP 状态码 404

### Requirement: 代理商账号编辑

系统 SHALL 提供代理商账号编辑功能，支持更新账号名称，但不允许修改密码和手机号。

#### Scenario: 更新账号名称

- **WHEN** 用户提交编辑账号请求（更新账号名称）
- **THEN** 验证账号存在且未删除
- **AND** 验证新账号名称唯一性（如果修改）
- **AND** 更新账号名称
- **AND** 更新 updater 字段为当前用户ID
- **AND** 返回更新后的账号信息

#### Scenario: 不允许修改手机号

- **WHEN** 编辑请求中包含手机号字段
- **THEN** 忽略该字段
- **AND** 不更新手机号

#### Scenario: 不允许修改密码

- **WHEN** 编辑请求中包含密码字段
- **THEN** 忽略该字段
- **AND** 不更新密码
- **AND** 密码修改需通过专用接口

#### Scenario: 编辑不存在的账号

- **WHEN** 用户尝试编辑不存在或已删除的账号
- **THEN** 返回错误码 2101（账号不存在）
- **AND** HTTP 状态码 404

### Requirement: 代理商账号密码修改

系统 SHALL 提供代理商账号密码修改功能，支持管理员重置密码，不需要验证旧密码。

#### Scenario: 管理员重置密码

- **WHEN** 管理员提交密码修改请求
- **AND** 提供新密码
- **THEN** 验证账号存在且未删除
- **AND** 验证新密码格式（8-32位）
- **AND** 使用 bcrypt 加密新密码
- **AND** 更新账号密码
- **AND** 更新 updater 字段为当前用户ID
- **AND** 返回成功响应

#### Scenario: 新密码格式验证

- **WHEN** 用户提交的新密码不符合要求（长度不在8-32位）
- **THEN** 返回参数验证错误
- **AND** HTTP 状态码 400

#### Scenario: 修改不存在账号的密码

- **WHEN** 用户尝试修改不存在或已删除账号的密码
- **THEN** 返回错误码 2101（账号不存在）
- **AND** HTTP 状态码 404

### Requirement: 代理商账号启用/禁用

系统 SHALL 提供代理商账号启用/禁用功能，支持快速切换账号状态。

#### Scenario: 启用账号

- **WHEN** 管理员提交启用账号请求
- **THEN** 验证账号存在且未删除
- **AND** 更新账号状态为 1（启用）
- **AND** 更新 updater 字段为当前用户ID
- **AND** 返回成功响应

#### Scenario: 禁用账号

- **WHEN** 管理员提交禁用账号请求
- **THEN** 验证账号存在且未删除
- **AND** 更新账号状态为 0（禁用）
- **AND** 更新 updater 字段为当前用户ID
- **AND** 返回成功响应

#### Scenario: 禁用后的账号无法登录

- **WHEN** 账号状态为禁用（status=0）
- **AND** 用户尝试使用该账号登录
- **THEN** 登录失败
- **AND** 返回账号已禁用错误

#### Scenario: 操作不存在的账号

- **WHEN** 用户尝试启用/禁用不存在或已删除的账号
- **THEN** 返回错误码 2101（账号不存在）
- **AND** HTTP 状态码 404
