# QuyUn 平台超级管理员（frontend/superadmin）页面与功能规划

基于 `backend/docs/swagger.json` 中平台侧接口 `/super/v1/*`，规划 `frontend/superadmin/` 的信息架构、页面路由与核心交互。

> `frontend/superadmin/src/router/index.js` 的路由基座为 `/super/`；API base 由 `VITE_API_BASE_URL` 控制（见 `frontend/superadmin/src/service/apiClient.js`），本文中的 API 路径均为绝对路径（例如 `/super/v1/users`）。

## 0. 全局约定（前端通用能力）

- **鉴权**：登录成功后保存 `token`（建议保存到 `localStorage.super_token`），所有请求带 `Authorization: Bearer <token>`（项目已在 `frontend/superadmin/src/service/apiClient.js` 实现）。
- **路由守卫**：
  - 未登录访问受保护页面 → 跳转 `/auth/login`。
  - 可选：启动时调用 `GET /super/v1/auth/token` 校验 token 是否有效（401 则清理 token 并回到登录页）。
- **分页/排序**：列表接口使用 `page/limit`，并支持 `asc/desc`（字段名逗号分隔）。统一封装分页表格组件与 URL query 同步。
- **枚举来源**：优先使用 `GET /super/v1/tenants/statuses`、`GET /super/v1/users/statuses` 返回的 `requests.KV[]` 作为下拉选项（swagger 中 `dto.*StatusUpdateForm` 的 enum 与 `consts.*Status` 存在不一致，见“风险点”）。

## 1. 路由与菜单（与现有路由保持一致）

业务页面统一放在 `/superadmin/*`。

- `/auth/login`：登录
- `/`：概览 Dashboard
- `/superadmin/tenants`：租户管理
- `/superadmin/tenants/:tenantID`：租户详情
- `/superadmin/users`：用户管理
- `/superadmin/users/:userID`：用户详情
- `/superadmin/orders`：订单管理
- `/superadmin/orders/:orderID`：订单详情
- `/superadmin/contents`：内容管理（跨租户汇总）
- `/superadmin/creators`：创作者/成员审核（待补超管接口）
- `/superadmin/coupons`：优惠券（待补超管接口）
- `/superadmin/finance`：财务与提现（待补超管接口）
- `/superadmin/reports`：报表与导出（待补超管接口）
- `/superadmin/assets`：资产与上传（待补超管接口）
- `/superadmin/notifications`：通知与消息（待补超管接口）

## 1.1 迭代路线（按接口可用性）

- **P0（已有接口可落地）**：登录、概览、租户管理/详情、用户管理/详情、订单列表/详情/退款、内容治理。
- **P1（需补超管接口）**：创作者审核、优惠券、财务/提现、报表导出。
- **P2（扩展增强）**：资产/上传治理、通知中心、审计日志。

## 2. 页面规格（页面 → 功能 → API）

### 2.1 登录 `/auth/login`

目标：完成超级管理员登录并写入 token。

- 登录表单：`username`、`password`（对应 `dto.LoginForm`）
- API：
  - 登录：`POST /super/v1/auth/login` → `dto.LoginResponse.token`
  - 校验/续期：`GET /super/v1/auth/token`（返回同结构 `dto.LoginResponse`）
- 交互：
  - 失败提示：展示后端错误信息
  - 成功：保存 token → 跳转到 `/superadmin/tenants` 或上次访问页面

### 2.2 概览 `/`（Dashboard）

目标：提供“关键指标 + 快捷入口”。

- 指标：
  - 用户状态统计：`GET /super/v1/users/statistics`（`dto.UserStatistics[]`）
  - 可选：租户总数（利用租户列表响应中的 `total`）：`GET /super/v1/tenants?limit=10&page=1`
- 快捷入口：租户管理、用户管理

### 2.3 租户管理 `/superadmin/tenants`

核心对象：`dto.TenantItem`

- 创建租户并关联租户管理员（新增）
  - 表单字段：`code`、`name`、`admin_user_id`、`duration(7/30/90/180/365 天)`
  - API：`POST /super/v1/tenants`（`dto.TenantCreateForm`）
  - 行为：创建 `tenants` 记录，并创建 `tenant_users` 关系，角色为 `tenant_admin`
- 租户列表（筛选/分页/排序）
  - 过滤：`name`、`status`
  - 排序：`asc/desc`
  - API：`GET /super/v1/tenants`
- 状态更新
  - 选项：`GET /super/v1/tenants/statuses`（`requests.KV[]`）
  - API：`PATCH /super/v1/tenants/{tenantID}/status`（`dto.TenantStatusUpdateForm`）
  - 交互：点击状态 tag 打开弹窗选择新状态并提交
- 续期/更新过期时间
  - 方案：提供固定档位（7/30/90/180/365 天）或日期选择器（二选一；swagger 当前为 duration 档位）
  - API：`PATCH /super/v1/tenants/{tenantID}`（`dto.TenantExpireUpdateForm.duration`）

### 2.4 租户详情 `/superadmin/tenants/:tenantID`

- 基本信息、管理员/成员列表、内容与订单列表。
- API：
  - `GET /super/v1/tenants/{tenantID}`
  - `GET /super/v1/tenants/{tenantID}/users`
  - `GET /super/v1/tenants/{tenantID}/contents`
  - `GET /super/v1/orders`（按 `tenant_id` 过滤）

### 2.5 用户管理 `/superadmin/users`

核心对象：`dto.UserItem`

- 用户列表（筛选/分页/排序）
  - 过滤：`username`、`tenantID`、`status`
  - 排序：`asc/desc`
  - API：`GET /super/v1/users`
- 用户状态统计（页头统计条）
  - API：`GET /super/v1/users/statistics`
- 更新用户状态
  - 选项：`GET /super/v1/users/statuses`（`requests.KV[]`）
  - API：`PATCH /super/v1/users/{userID}/status`（`dto.UserStatusUpdateForm`）
  - 交互：点击状态 tag 打开弹窗

### 2.6 用户详情 `/superadmin/users/:userID`

- 资料展示、状态/角色变更、拥有/加入的租户列表。
- API：
  - `GET /super/v1/users/{userID}`
  - `PATCH /super/v1/users/{userID}/status`
  - `PATCH /super/v1/users/{userID}/roles`
  - `GET /super/v1/tenants`（按 `user_id` 过滤）
  - `GET /super/v1/users/{userID}/tenants`

### 2.7 订单管理 `/superadmin/orders`

- 订单列表（跨租户筛选/分页/排序）、平台退款、跳转详情页。
- API：
  - `GET /super/v1/orders`
  - `POST /super/v1/orders/{orderID}/refund`

### 2.8 订单详情 `/superadmin/orders/:orderID`

- 订单详情、支付信息、退款入口。
- API：`GET /super/v1/orders/{orderID}`

### 2.9 内容治理 `/superadmin/contents`

- 内容列表（跨租户筛选/排序）、审核、状态变更。
- API：
  - `GET /super/v1/contents`
  - `POST /super/v1/contents/{contentID}/review`
  - `PATCH /super/v1/tenants/{tenantID}/contents/{contentID}/status`

### 2.10 创作者与成员审核 `/superadmin/creators`

- 现状：页面已提供占位提示，等待超管侧跨租户接口。
- 建议接口：
  - `GET /super/v1/creators`
  - `GET /super/v1/creator-applications`
  - `POST /super/v1/creator-applications/{id}/review`
  - `GET /super/v1/creator-members`
  - `POST /super/v1/creator-members/{id}/review`

### 2.11 优惠券 `/superadmin/coupons`

- 现状：页面已提供占位提示，等待超管侧跨租户接口。
- 建议接口：
  - `GET /super/v1/coupons`
  - `PATCH /super/v1/coupons/{id}/status`
  - `GET /super/v1/coupon-grants`

### 2.12 财务与提现 `/superadmin/finance`

- 现状：页面已提供占位提示，等待超管侧跨租户接口。
- 建议接口：
  - `GET /super/v1/withdrawals`
  - `POST /super/v1/withdrawals/{id}/approve`
  - `POST /super/v1/withdrawals/{id}/reject`
  - `GET /super/v1/wallet-ledgers`

### 2.13 报表与导出 `/superadmin/reports`

- 现状：页面已提供占位提示，等待超管侧跨租户接口。
- 建议接口：
  - `GET /super/v1/reports/overview`
  - `GET /super/v1/reports/series`
  - `POST /super/v1/reports/export`

### 2.14 资产与上传 `/superadmin/assets`

- 现状：页面已提供占位提示，等待超管侧跨租户接口。
- 建议接口：
  - `GET /super/v1/assets`
  - `DELETE /super/v1/assets/{id}`
  - `GET /super/v1/assets/usage`

### 2.15 通知与消息 `/superadmin/notifications`

- 现状：页面已提供占位提示，等待超管侧跨租户接口。
- 建议接口：
  - `GET /super/v1/notifications`
  - `POST /super/v1/notifications/broadcast`
  - `GET /super/v1/notifications/templates`
  - `POST /super/v1/notifications/templates`

## 3. 枚举与数据结构（UI 需要）

- 租户状态：`consts.TenantStatus`（`pending_verify` / `verified` / `banned`），推荐用 `GET /super/v1/tenants/statuses` 驱动展示 label
- 用户状态：`consts.UserStatus`（`pending_verify` / `verified` / `banned`），推荐用 `GET /super/v1/users/statuses` 驱动展示 label
- KV 结构：`requests.KV`（`key` 为机器值，`value` 为展示文案）

## 4. 风险点 / 待补能力（从 swagger 反推）

- **swagger 不一致**：`dto.TenantStatusUpdateForm.status` / `dto.UserStatusUpdateForm.status` 在 swagger 里额外出现 `normal/disabled` enum，但 `consts.*Status` 与列表筛选 enum 为 `pending_verify/verified/banned`；前端应以 `/statuses` 接口返回为准，并推动后端修正 swagger。
- **分页 items 结构疑似不完整**：列表接口 swagger 中 `items` 被标成单个 object（`$ref dto.TenantItem`/`dto.UserItem`），实际应为数组；当前前端服务层已做兼容（`normalizeItems`），但建议后端修正 swagger。
- **跨租户超管接口缺口**：创作者审核、优惠券、提现/钱包、报表、资产、通知等仍依赖租户侧接口，需要补齐 `/super/v1/*` 聚合能力后才能落地。
