后端:User.is_platform_admin + migration;权限类 IsPlatformAdmin;管理命令建 admin/admin123(幂等); AdminAuditLog 模型 + log_admin_action() helper;me/login 对无团队超管优雅返回 team=null;UserSerializer 暴露标志。 前端:routes/admin 后台外壳(分组侧栏 + 概览 + 占位)、/admin 路由解析与 gating(超管直落、非超管纠回)、 侧栏平台入口、admin-page.css(仅 token)、IconKitSvg 补图标。 测试:accounts 11/11 单测过;无头 e2e _admin-p0.mjs 全断言过 + 0 console error;tsc+build 绿。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
65 lines
4.9 KiB
Markdown
65 lines
4.9 KiB
Markdown
# Plan · 平台 Admin 后台(全量)+ 注册邀请码逻辑
|
||
|
||
> **范围:全做 —— 下面 Phase 0–9 全部,一块不落。** 参考 AirDrama 后台、复用其壳/权限/组件/审计;AirShelf 多商品 + 多资产类型 + 火山审核 + 模型供应商,更重。**视觉一律套 AirShelf restraint(冷灰 + 单橙),不抄 AirDrama 的样子。**
|
||
|
||
## 已拍板决策
|
||
- **范围:全铺**(Phase 0–9 全做)。
|
||
- **平台超管:加 `User.is_platform_admin`**;第一个超管 = **`admin` / `admin123`**(管理命令 bootstrap)。
|
||
- **质量词:全平台统一单层**(所有团队共用一套;团队单独覆盖以后再说)。
|
||
- **注册:邀请码优先**(码必填,`kind` 分流 create_team / join_team)。
|
||
|
||
## 复用 AirDrama(别重写,只换皮)
|
||
布局壳(AdminLayout 折叠侧栏+分组导航)· 权限类模式(IsSuperAdmin→IsPlatformAdmin)· 表格+行内操作/弹窗/手风琴/**标签编辑 UI**/状态徽章 · `AdminAuditLog` 审计日志 · API 分层(adminApi/teamApi)。
|
||
|
||
---
|
||
|
||
## Phase 0 · 基础(角色 + 壳 + 审计)
|
||
- 后端:`User.is_platform_admin` + migration;权限类 `IsPlatformAdmin`;管理命令 `create_platform_admin` 建 **admin/admin123**;`AdminAuditLog` 模型 + 写日志 helper;`/api/auth/me/` 返回 `is_platform_admin`。
|
||
- 前端:Admin 外壳 `routes/admin/`(AdminLayout 折叠侧栏+分组导航,套 restraint);路由 `/admin/*` + 超管 gating;侧栏分组:概览/团队·用户/内容/生成/财务/系统。
|
||
|
||
## Phase 1 · 注册邀请码逻辑(本线驱动 · 最优先)
|
||
- 后端:Invitation 加 `kind`(join_team/create_team)+ `team` 可空 + migration;端点 `validate-invite`(免登录验码→{有效,类型,团队名});RegisterSerializer 改**码必填**+ 按 kind 分流;**删「空码=开团队」**。
|
||
- 前端:注册页重做(码优先→验过才展开:加入=只读团队名+账号 / 开团队=团队名+账号),不暴露团队列表;邀请链接自动验;`api.validateInvite`。
|
||
|
||
## Phase 2 · Admin 壳实功能:邀请码发放管理
|
||
- 后端:平台超管发 create_team 码 / 列所有码 / 撤销端点(替掉 Phase 1 的临时命令)。
|
||
- 前端:Admin「邀请码」页(发码弹窗 + 码列表 + 状态 + 复制邀请链接)。
|
||
|
||
## Phase 3 · 平台团队管理 + 平台用户管理
|
||
- 后端:列所有团队(名/owner/成员数/余额/状态)+ 启停 + 详情;列所有用户(跨团队)+ 启停 + 强制改密;全 `IsPlatformAdmin` + 写审计。
|
||
- 前端:Admin「团队」页 + 「用户」页(表格 + 启停 + 详情弹窗,复用 AirDrama 表格/弹窗/徽章)。
|
||
|
||
## Phase 4 · 质量词 Admin(平台单层)
|
||
- 后端:模型 `QualityWord`(stage + slot + text + sort,平台级单层无 team)+ 增删改查端点;生成侧(`build_person_frontal_prompt` 等)改读配置、无配置回落现写死值(兼容)。
|
||
- 前端:Admin「质量词」页,**复用 AirDrama 标签编辑 UI**(按 stage 分组 + 行内增删改 + 编辑模式开关防误删)。
|
||
|
||
## Phase 5 · 火山人像审核队列(AirShelf 特有)
|
||
- 后端:全局 person 资产按 `review_status`(空/processing/active绿/failed红)筛;批量送审 / 轮询 / 重试,复用现有 `assets/review.py` + `assets_client.py`。
|
||
- 前端:Admin「资产审核」页(队列 + 绿/红盾徽章 + 批量送审/重试)。
|
||
|
||
## Phase 6 · AI 任务监控 + 成本异常
|
||
- 后端:全局 AITask 列表(按 status/team/type 筛)+ 详情(request/response payload)+ 成本 >> 预估告警 + 失败重投端点。
|
||
- 前端:Admin「任务监控」页(可筛表格 + 详情抽屉 + 异常标 + 重投)。
|
||
|
||
## Phase 7 · 计费审计 + 4 层额度策略
|
||
- 后端:全局 CreditLedger 浏览(按 type/team 筛)+ 手动调额(争议/补偿,写审计)+ QuotaPolicy(月/项目/单任务 4 层)编辑端点。
|
||
- 前端:Admin「计费审计」页(流水表 + 调额弹窗)+「额度策略」页。
|
||
|
||
## Phase 8 · 模型供应商管理(从 Django admin 搬前端)
|
||
- 后端:ModelProvider / ModelConfig 增删改启停 + 定价 + 默认模型选择端点(热插拔中转站)。
|
||
- 前端:Admin「模型供应商」页(provider/model 表格 + 编辑弹窗 + 启停 + 设默认)。
|
||
|
||
## Phase 9 · 收尾治理(商品 / 通知 / 项目监控 / 数据完整性)
|
||
- 商品治理(孤儿商品 / 分类管理)· 通知管理(全局 Notification 筛/批量)· 项目流水线监控(全局项目按 stage/status)· 数据完整性工具(孤儿记录检查 / 缓存)。
|
||
|
||
---
|
||
|
||
## 实施顺序
|
||
**0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9。** 每 Phase 后端先于前端;每块完即真跑验证再进下一块;**不 push**。Phase 0+1 先落(注册逻辑本线驱动、立刻见效)。
|
||
|
||
## 验证(每阶段)
|
||
- 注册:admin/admin123 登录→发 create_team 码→新用户凭码开团队当团管;团管发 join 码→成员加入;邀请链接自动验;**无码注册被拒**。
|
||
- 质量词:Admin 改某阶段质量词→重新生成→提示词用新词。
|
||
- 各 Admin 页:超管能进、非超管被拒;表格/弹窗/启停/审核/调额/热插拔真生效 + 写审计。
|
||
- 基线:tsc + build 全绿;既有团管页 / 生成链路零回归。
|