# Change: 实现平台账号管理接口

## Why

当前系统已有通用的账号管理功能，但缺少针对**平台账号（平台用户 + 超级管理员）**的专用管理接口。业务需要：

1. **专门的平台账号列表**：筛选出 `user_type IN (1, 2)` 的账号，包含超级管理员
2. **语义明确的专用接口**：密码修改、启用/禁用需要独立端点，而非通过通用 Update 接口
3. **角色分配灵活性**：允许清空角色、支持可选角色分配
4. **超级管理员保护**：超级管理员在列表中只读显示，禁止编辑角色

**现状**：
- ✅ 已有账号 CRUD 功能（`/internal/handler/admin/account.go`）
- ✅ 已有角色分配功能（`AssignRoles`, `GetRoles`, `RemoveRole`）
- ❌ 缺少专门的密码修改接口（当前混在 Update 接口中）
- ❌ 缺少专门的启用/禁用接口（当前混在 Update 接口中）
- ❌ 角色分配要求至少 1 个角色（不允许清空）
- ❌ 没有超级管理员编辑保护

## What Changes

### 1. 新增专用接口

#### Handler 层新增方法
- `UpdatePassword(c *fiber.Ctx)` - 修改密码专用接口
- `UpdateStatus(c *fiber.Ctx)` - 启用/禁用专用接口
- `ListPlatformAccounts(c *fiber.Ctx)` - 平台账号列表查询（user_type IN (1,2)）

#### Service 层新增方法
- `UpdatePassword(ctx, accountID, newPassword)` - 密码修改业务逻辑
- `UpdateStatus(ctx, accountID, status)` - 状态切换业务逻辑
- `ListPlatformAccounts(ctx, req)` - 平台账号列表查询（自动筛选 user_type）

#### 新增 DTO
- `UpdatePasswordRequest` - 密码修改请求（只包含 `new_password`）
- `UpdateStatusRequest` - 状态修改请求（只包含 `status`）
- `PlatformAccountListRequest` - 平台账号列表请求（移除 user_type 筛选）

### 2. 优化现有角色分配逻辑

#### Service 层修改
- `AssignRoles` 方法增强：
  - 允许 `roleIDs` 为空数组（清空所有角色）
  - 超级管理员（`user_type=1`）禁止分配角色，返回错误
  - 平台用户（`user_type=2`）可分配无限个平台角色（`role_type=1`）

#### DTO 修改
- `AssignRolesRequest.RoleIDs` 改为可选（`validate:"omitempty"`）

### 3. 新增路由

```go
// 平台账号专用路由
GET    /api/admin/platform-accounts        // 平台账号列表（含超级管理员）
POST   /api/admin/platform-accounts        // 新增平台账号
GET    /api/admin/platform-accounts/:id    // 获取详情
PUT    /api/admin/platform-accounts/:id    // 编辑平台账号
DELETE /api/admin/platform-accounts/:id    // 删除平台账号

// 专用操作接口
PUT    /api/admin/platform-accounts/:id/password  // 修改密码
PUT    /api/admin/platform-accounts/:id/status    // 启用/禁用

// 角色管理
POST   /api/admin/platform-accounts/:id/roles     // 分配角色（支持空数组）
GET    /api/admin/platform-accounts/:id/roles     // 获取角色列表
DELETE /api/admin/platform-accounts/:id/roles/:role_id  // 移除单个角色
```

### 4. 响应格式调整

**列表返回字段**（符合需求）：
```json
{
  "items": [
    {
      "id": 1,
      "username": "admin",
      "phone": "13800000000",
      "created_at": "2025-01-14T10:30:00Z",
      "status": 1,
      "user_type": 1
    }
  ],
  "total": 10,
  "page": 1,
  "size": 20
}
```

## Impact

### 受影响的 Specs
- `role-permission` - 角色分配逻辑调整（允许空数组）
- `user-organization` - 平台账号管理增强

### 受影响的代码模块
- `internal/handler/admin/account.go` - 新增 3 个 Handler 方法
- `internal/service/account/service.go` - 新增 2 个 Service 方法，修改 AssignRoles
- `internal/model/account_dto.go` - 新增 2 个 DTO，修改 AssignRolesRequest
- `internal/routes/account.go` - 新增路由注册

### Breaking Changes
无。新增功能向后兼容，现有接口保持不变。

### 数据库变更
无。复用现有 `tb_account` 表结构。

### 迁移计划
无需迁移。新接口与现有接口共存，前端可按需切换。

## Risks

1. **角色分配空数组行为**：允许清空所有角色可能导致账号无权限
   - **缓解措施**：前端二次确认，文档明确说明

2. **超级管理员保护**：禁止编辑超级管理员角色可能影响已有流程
   - **缓解措施**：仅对 `user_type=1` 生效，平台用户不受影响

3. **路由命名冲突**：新增 `/platform-accounts` 路由可能与未来规划冲突
   - **缓解措施**：遵循 RESTful 规范，路径清晰语义化

## Open Questions

1. ✅ **已确认**：超级管理员是否需要出现在平台账号列表？ → **是**
2. ✅ **已确认**：修改密码是否需要旧密码验证？ → **否**（管理员重置场景）
3. ✅ **已确认**：角色分配是否必填？ → **可选**（允许无角色账号）
4. ✅ **已确认**：是否允许清空所有角色？ → **是**（灵活分配）
