924 lines
36 KiB
Markdown
924 lines
36 KiB
Markdown
# 元境幻生系统图示
|
||
|
||
> 本文覆盖一期用户端、管理端、系统请求链路和整体架构。
|
||
>
|
||
> SSI 在本文中指 ASCII 页面图示;Mermaid 图用于可渲染的流程图、时序图和架构图。
|
||
> current 表示仓库已有页面,phase 1 表示 develop.md 规划的一期页面。
|
||
|
||
> 管理台实现状态同步:渠道、渠道组、模型产品支持编辑抽屉,渠道健康支持全部探活,审批支持状态筛选与驳回,任务支持脱敏详情;详情请求失败会保留抽屉并提供重试,设置与调用记录抽屉显式支持关闭按钮、遮罩和 ESC。管理台 401 自动刷新后的重试会复用原始请求头和幂等键,渠道生成测试会把平台显示模型 ID 映射为供应商请求模型 ID。用户端画布设置弹层已按窄屏视口收缩,创建/右键菜单补齐 ESC 与菜单语义;这些页面仍需浏览器逐页验收,详见 `docs/content/docs/progress/pending-test.mdx`。
|
||
|
||
## 1. 页面清单
|
||
|
||
### 1.1 用户端
|
||
|
||
| 页面/路由 | 状态 | 一期职责 |
|
||
| --- | --- | --- |
|
||
| / | current | 首页、产品定位、开始创作、登录注册 |
|
||
| /auth/login、/auth/register、/auth/verify、/auth/reset | phase 1 | 注册、验证、登录、密码重置 |
|
||
| /workspace | phase 1 | 模型档位、分辨率、能力和价格选择 |
|
||
| /canvas | current | 画布项目列表、导入、导出、删除 |
|
||
| /canvas/:id | current | 无限画布、节点编排、任务和结果回写 |
|
||
| /tools/image | phase 1 | 万能渲染、局部编辑、反推、多角度、抠图、拆分、放大、扩图 |
|
||
| /tools/audio | phase 1 | 音频生成、播放、下载、画布引用 |
|
||
| /tools/3d | reserved / not V1 | 仅保留禁用契约;真正图生 3D、文生 3D、预览和导出后续再启用 |
|
||
| /tasks、/tasks/:id | phase 1 | 任务历史、进度、attempt、结果和计费 |
|
||
| /assets | current | 图片/文本/音频资产、筛选、导入导出、平台镜像、画布插入 |
|
||
| /account、/account/plans | phase 1 | 身份、会话、金币余额、账单、充值和套餐购买 |
|
||
| /settings | phase 1 | WebDAV 连接、同步、冲突和本地存储状态 |
|
||
| /404、/error | current/phase 1 | 统一错误、权限和模型不可用提示 |
|
||
|
||
### 1.2 管理端
|
||
|
||
| 页面/路由 | 模板来源 | 一期职责 |
|
||
| --- | --- | --- |
|
||
| /admin/login | Login | 管理员独立会话;默认邮箱密码,按后台开关追加 CAPTCHA/MFA |
|
||
| /admin/dashboard/base | BusinessPage | 用户、任务、余额、队列、渠道和告警统计 |
|
||
| /admin/users | BusinessPage | 用户状态、脱敏身份、冻结/解冻 |
|
||
| /admin/auth-messages | BusinessPage | 邮件/SMS outbox 和发送状态;供应商接入暂缓 |
|
||
| /admin/channels | BusinessPage | 渠道启停、健康和脱敏配置 |
|
||
| /admin/channel-groups | BusinessPage | priority、fallback 和版本 |
|
||
| /admin/model-products、/admin/pricing | BusinessPage | 公开模型、能力、分辨率和价格 |
|
||
| /admin/billing/units、/admin/plans | BusinessPage | 金币单位、换算、套餐和权益 |
|
||
| /admin/tasks | BusinessPage | 任务、attempt、结果、重试、取消、unknown 对账 |
|
||
| /admin/billing、/admin/recharges、/admin/payments | BusinessPage | 账本、充值申请、支付事件 |
|
||
| /admin/payment-providers | BusinessPage | mock/adapter 支付配置;第三方支付待接入 |
|
||
| /admin/approvals | BusinessPage | 人工充值和高风险操作审批,双人职责分离 |
|
||
| /admin/storage、/admin/settings、/admin/ws-metrics | BusinessPage | staging/WebDAV 策略、系统开关和实时指标 |
|
||
| /admin/audit、/admin/audit-logs | BusinessPage | 日志大板、详细审计列表和链式审计详情 |
|
||
| /admin/security/mfa | BusinessPage | 管理员 MFA 状态、启用/验证/审计关闭(受全局策略约束) |
|
||
| /admin/403、/admin/404 | Result | 权限和路由错误 |
|
||
|
||
## 2. 用户端 SSI(ASCII)
|
||
|
||
> V1 实现注记:图片/音频/文本以及反推、多角度、拆分、放大均通过 `/api/v1/tasks/*` 异步执行;本地画布只负责编排和缓存。资产页和任务详情同时读取平台资产 API,WebDAV 同步由存储设置触发并显示状态。
|
||
|
||
### 2.1 全局壳层
|
||
|
||
~~~text
|
||
+--------------------------------------------------------------------------------+
|
||
| 元境幻生 | 首页 | 工作台 | 画布 | 资产 | 任务 | 余额 | 账户 | 主题/语言 |
|
||
+--------------------------------------------------------------------------------+
|
||
| 当前页面内容 |
|
||
+--------------------------------------------------------------------------------+
|
||
| Toast | 任务事件 | 登录过期 | 模型不可用 | 余额不足 |
|
||
+--------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[Browser]
|
||
+--> [UserLayout]
|
||
| +--> [AuthGuard for billable routes]
|
||
| +--> [CatalogStore] [BalanceStore] [TaskEventClient]
|
||
| +--> [WebDAVSyncClient]
|
||
+--> [Public Home]
|
||
~~~
|
||
|
||
### 2.2 首页 /
|
||
|
||
~~~text
|
||
+------------------------------------------------------------------------------+
|
||
| 元境幻生 |
|
||
| 游戏美术 / 艺术资产 / 多视图工作流 |
|
||
| |
|
||
| [开始创作] [打开画布] [查看资产] [登录/注册] |
|
||
| |
|
||
| [万能渲染] [游戏资产] [反推/多角度] [音频] |
|
||
+------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[首页] --> [工作台/模型目录]
|
||
+--> [认证页]
|
||
+--> [/canvas]
|
||
+--> [/assets]
|
||
~~~
|
||
|
||
### 2.3 认证 /auth/*
|
||
|
||
~~~text
|
||
+-----------------------------------------------+
|
||
| 元境幻生 | 登录 / 注册 / 验证 / 重置密码 |
|
||
+-----------------------------------------------+
|
||
| 邮箱或手机号 [.........................] |
|
||
| 密码/验证码 [.........................] |
|
||
| 人机挑战 [ 7 + 5 = ? ] [.............] |
|
||
| [发送验证码] [登录] [注册] |
|
||
| 忘记密码 | 重新发送验证 | 返回首页 |
|
||
+-----------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[注册] --> [规范化身份] --> [人机挑战(IP/设备/目标绑定)] --> [验证码 Outbox] --> [一次性验证] --> [建立会话]
|
||
[登录] --> [人机挑战] --> [Access Token 内存 + HttpOnly Refresh Cookie] --> [工作台]
|
||
[重置] --> [单次 Reset Token] --> [修改密码] --> [撤销其他会话]
|
||
~~~
|
||
|
||
### 2.4 工作台 /workspace
|
||
|
||
~~~text
|
||
+------------------------------------------------------------------------------+
|
||
| 创作类型 [图片] [音频] |
|
||
| 模型档位 [基础] [高级] [旗舰] 分辨率 [低] [中] [高] [超高] |
|
||
| 能力 [文生图] [图生图] [局部] [反推] [多角度] [抠图] [拆分] |
|
||
| 数量 [ 1 ] 预计消耗 [ ] 当前余额 [ ] [开始任务] [进入画布] |
|
||
| 参考图 [上传] Mask [上传] 参数 [编辑] |
|
||
+------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[目录 API] --> [公开产品/能力/分辨率/价格] --> [控件]
|
||
[控件] --> [参数校验] --> [POST /api/v1/tasks/*] --> [任务详情]
|
||
~~~
|
||
|
||
### 2.5 画布项目库 /canvas
|
||
|
||
~~~text
|
||
+------------------------------------------------------------------------------+
|
||
| 画布项目库 [新建] [导入] [导出] [删除] |
|
||
+------------------------------------------------------------------------------+
|
||
| [搜索项目.................................................................] |
|
||
| +------------------+ +------------------+ +------------------+ |
|
||
| | 缩略图/名称 | | 缩略图/名称 | | 缩略图/名称 | |
|
||
| | 更新时间 | | 更新时间 | | 更新时间 | |
|
||
| | [打开] [更多] | | [打开] [更多] | | [打开] [更多] | |
|
||
| +------------------+ +------------------+ +------------------+ |
|
||
+------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[新建] --> [本地 hydrated] --> [/canvas/:id]
|
||
[导入] --> [ZIP projects.json + files] --> [IndexedDB] --> [项目卡]
|
||
[导出] <-- [项目 + 媒体] <-- [IndexedDB]
|
||
[删除] --> [确认] --> [清理未引用媒体] --> [列表]
|
||
~~~
|
||
|
||
### 2.6 画布编辑器 /canvas/:id
|
||
|
||
~~~text
|
||
+------------------------------------------------------------------------------+
|
||
| < 返回 | 撤销/重做 | 缩放 | 小地图 | 保存/同步 | 任务状态 | 余额 |
|
||
+------------------------------------------------------------------------------+
|
||
| 节点面板 | 无限画布 | 信息 |
|
||
| [Text] | [Text] ---> [Config] ---> [Image Batch] | 面板 |
|
||
| [Image] | | | | |
|
||
| [Audio] | [Reference] [Output] | |
|
||
| [Config] | ... | |
|
||
| [Group] | ... | |
|
||
+------------------------------------------------------------------------------+
|
||
| 生成/编辑/反推/多角度/抠图/拆分/放大/扩图/保存资产/下载 |
|
||
+------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[节点输入] --> [收集文字/图片/音频/mask 引用]
|
||
--> [上传对象或使用 objectId]
|
||
--> [估价 + 余额预扣]
|
||
--> [任务队列] --> [事件/轮询]
|
||
--> [结果节点] --> [资产] / [WebDAV] / [下一节点]
|
||
~~~
|
||
|
||
### 2.7 图片工具 /tools/image
|
||
|
||
~~~text
|
||
+------------------------------------------------------------------------------+
|
||
| [万能渲染] [局部编辑] [反推提示词] [多角度] [抠图] [智能拆分] [放大] [扩图] |
|
||
+------------------------------------------------------------------------------+
|
||
| 输入参考图/提示词/mask | 模型/分辨率/数量/专属参数 | 结果预览/版本/下载/资产 |
|
||
+------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[图片工具] --> [capability + taskType] --> [任务详情]
|
||
--> [image / mask / split manifest / prompt / angle group]
|
||
~~~
|
||
|
||
### 2.8 音频工具 /tools/audio
|
||
|
||
~~~text
|
||
+------------------------------------------------------------------------------+
|
||
| 文本 [.................................................................] |
|
||
| voice [ ] 格式 [mp3/wav] 速度 [---] instructions [..................] |
|
||
| 预计消耗 [ ] 当前余额 [ ] [开始生成] |
|
||
| 状态 [排队/生成中/成功/失败] [播放] [下载] [插入画布] |
|
||
+------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[文本 + voice + format] --> [Audio Adapter] --> [音频对象]
|
||
--> [播放器] + [画布节点] + [WebDAV]
|
||
~~~
|
||
|
||
### 2.9 3D 契约预留 /tools/3d(V1 禁用)
|
||
|
||
~~~text
|
||
+------------------------------------------------------------------------------+
|
||
| 入口状态: [CAPABILITY_NOT_ENABLED] |
|
||
| 三视图/自由视角的 V1 能力请使用图片工具;真正图生3D/文生3D暂不开放。 |
|
||
| adapter 预留: GLB/GLTF、OBJ、纹理、缩略图、导出和 Three.js/WebGL 视口 |
|
||
+------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[参考图/提示词] --> [3D task contract]
|
||
--> [CAPABILITY_NOT_ENABLED]
|
||
-. 后续启用 .-> [GLB/GLTF + texture + thumbnail]
|
||
~~~
|
||
|
||
### 2.10 任务历史 /tasks 和任务详情 /tasks/:id
|
||
|
||
~~~text
|
||
+------------------------------------------------------------------------------+
|
||
| 任务历史 [状态] [类型] [模型] [时间] [项目] [搜索任务 ID] |
|
||
+------------------------------------------------------------------------------+
|
||
| taskId | 类型 | 产品 | 状态 | 预扣/实扣 | 创建时间 | [详情] [重试] [取消] |
|
||
+------------------------------------------------------------------------------+
|
||
| 任务详情: 输入摘要 | attempt 时间线 | 输出 | 计费 | 错误建议 | 保存/下载 |
|
||
+------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[任务列表] --> [GET /api/v1/tasks] --> [任务详情]
|
||
[详情] --> [事件流/轮询] --> [取消或重试] --> [输出签名 URL]
|
||
~~~
|
||
|
||
### 2.11 资产 /assets
|
||
|
||
~~~text
|
||
+------------------------------------------------------------------------------+
|
||
| 我的资产 [新建] [导入] [导出] [筛选] [搜索] |
|
||
+------------------------------------------------------------------------------+
|
||
| 类型 [全部/图片/文本/音频] 标签 [........] (3D 资产 V1 仅预留) |
|
||
| +----------------+ +----------------+ +----------------+ |
|
||
| | 缩略图/标题 | | 缩略图/标题 | | 缩略图/标题 | |
|
||
| | 标签/来源 | | 标签/来源 | | 标签/来源 | |
|
||
| | [预览] [编辑] | | [下载] [画布] | | [删除] | |
|
||
| +----------------+ +----------------+ +----------------+ |
|
||
+------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[生成输出] --> [保存资产] --> [所有权校验] --> [Asset + outputId]
|
||
--> [资产列表] --> [插入画布] / [签名下载] / [WebDAV]
|
||
~~~
|
||
|
||
### 2.12 账户/余额/WebDAV /account、/settings
|
||
|
||
~~~text
|
||
+------------------------------------------------------------------------------+
|
||
| 账户 [个人资料] [安全/会话] [余额与账单] [充值] [WebDAV] |
|
||
+------------------------------------------------------------------------------+
|
||
| 可用余额 [ ] 预扣余额 [ ] [充值] |
|
||
| 流水: reserve | settle | release | refund | manual_adj |
|
||
| 套餐: [名称] [时长] [包含金币] [价格] [模型/能力] [购买] |
|
||
| WebDAV URL [脱敏] 状态 [已连接/失败] [测试] [同步] [冲突列表] |
|
||
+------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[充值] --> [recharge order] --> [签名 webhook] --> [payment_events] --> [账本]
|
||
[WebDAV] --> [加密凭证引用] --> [连接策略] --> [manifest/checksum]
|
||
--> [上传/下载/冲突副本/离线重试]
|
||
~~~
|
||
|
||
### 2.13 用户错误页 /error
|
||
|
||
~~~text
|
||
+-----------------------------------------------+
|
||
| 401/403/404/429/500 |
|
||
| 登录过期 / 无权限 / 页面不存在 / 系统繁忙 |
|
||
| [重新登录] [返回首页] [查看任务] |
|
||
+-----------------------------------------------+
|
||
~~~
|
||
|
||
错误页只显示公共错误码和可执行建议,不显示 provider 地址、Key、原始模型 ID 或内部 attempt 细节。
|
||
|
||
## 3. 管理端 SSI(ASCII)
|
||
|
||
### 3.1 管理壳层
|
||
|
||
~~~text
|
||
+--------------------------------------------------------------------------------+
|
||
| 管理台 | 面包屑 | requestId | 告警 | 管理员 | 退出 |
|
||
+--------------------------------------------------------------------------------+
|
||
| [总览] [用户] [认证消息] [渠道] [渠道组] [模型产品] [价格] [金币/换算] |
|
||
| [套餐] [任务] [余额] [充值/支付] [存储] [审计] [管理员 MFA] [系统设置] |
|
||
+--------------------------------------------------------------------------------+
|
||
| 内容区: 表格 / 表单 / 详情 / 时间线 / 审批 |
|
||
+--------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[Admin Browser] --> [Admin Session Guard] --> [RBAC + Object Scope] --> [Admin API]
|
||
--> [Audit Log]
|
||
~~~
|
||
|
||
### 3.2 管理员登录 /admin/login、/admin/mfa
|
||
|
||
~~~text
|
||
+-----------------------------------------------+
|
||
| 元境幻生管理台 |
|
||
| 账号 [.................................] |
|
||
| 密码 [.................................] |
|
||
| [登录] |
|
||
| MFA [........] [确认] | IP/设备策略 |
|
||
+-----------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[登录] --> [密码校验] --> [MFA/IP/设备策略] --> [admin audience session] --> [总览]
|
||
[管理员 MFA] --> [当前动态码 + 权限校验] --> [setup / verify / disable] --> [审计]
|
||
~~~
|
||
|
||
### 3.3 总览 /admin/dashboard
|
||
|
||
~~~text
|
||
+--------------------------------------------------------------------------------+
|
||
| 用户数 | 活跃数 | 余额总额 | 充值额 | 任务数 | 队列积压 |
|
||
+--------------------------------------------------------------------------------+
|
||
| 模型成功率/P95 | 渠道组健康/熔断 | 邮件/SMS/支付告警 |
|
||
| [图表] | [图表] | [事件列表] |
|
||
+--------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
### 3.4 用户/认证消息 /admin/users、/admin/auth-messages
|
||
|
||
~~~text
|
||
+--------------------------------------------------------------------------------+
|
||
| 用户 [搜索] [状态] [注册时间] [余额] |
|
||
+--------------------------------------------------------------------------------+
|
||
| userId | 脱敏身份 | 状态 | 余额 | 额度 | 最近活动 | [详情] [冻结] |
|
||
+--------------------------------------------------------------------------------+
|
||
| 详情: 身份/验证 | 会话设备 | 任务 | 消费 | WebDAV | 审计 |
|
||
+--------------------------------------------------------------------------------+
|
||
| 认证消息: Provider | 模板 | 验证码策略 | Outbox | 成功率 | 重试 |
|
||
+--------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[用户管理] --> [用户/会话/额度] --> [冻结/退出/重置/重发]
|
||
[消息管理] --> [Provider + Template] --> [Outbox] --> [邮件/SMS]
|
||
~~~
|
||
|
||
### 3.5 渠道/渠道组 /admin/channels、/admin/channel-groups
|
||
|
||
~~~text
|
||
+--------------------------------------------------------------------------------+
|
||
| 渠道 [新增] [测试] [启用/禁用] [轮换凭证] |
|
||
+--------------------------------------------------------------------------------+
|
||
| channelId | 供应商 | capability | 状态 | 并发 | 失败/熔断 | 最近成功 |
|
||
+--------------------------------------------------------------------------------+
|
||
| 旗舰组 vN [编辑] [预览] [发布] [回滚] |
|
||
| 1 -> channel A -> providerModel A |
|
||
| 2 -> channel B -> providerModel B |
|
||
| 3 -> channel C -> providerModel C |
|
||
| retry budget | 熔断 | fallback | 公共错误文案 |
|
||
+--------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[渠道] --> [加密凭证 + provider model] --> [探活]
|
||
--> [显示模型 ID ↔ 供应商请求模型 ID 映射]
|
||
--> [有序渠道组] --> [不可变路由版本] --> [新任务快照]
|
||
--> [生成测试使用供应商请求模型 ID]
|
||
~~~
|
||
|
||
### 3.6 模型产品/价格 /admin/model-products、/admin/pricing
|
||
|
||
~~~text
|
||
+--------------------------------------------------------------------------------+
|
||
| 产品 [基础] [高级] [旗舰] [专项] [新增] [上架/下架] |
|
||
+--------------------------------------------------------------------------------+
|
||
| 产品 | 能力 | 渠道组 | 分辨率 | 数量上限 | 价格版本 | 状态 |
|
||
+--------------------------------------------------------------------------------+
|
||
| 详情: 公开说明 | capability schema | 像素限制 | 价格 | 替代模型 | [发布/回滚] |
|
||
+--------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[草稿] --> [能力/价格校验] --> [影响预览] --> [发布版本] --> [目录 API]
|
||
~~~
|
||
|
||
### 3.7 金币单位、换算和套餐 /admin/billing/units、/admin/plans
|
||
|
||
~~~text
|
||
+--------------------------------------------------------------------------------+
|
||
| 金币单位 [名称] [短代码] [图标] [精度] [显示小数位] [启用] |
|
||
| 换算规则 [支付货币] [金币比例] [舍入] [最低/最高充值] [生效版本] |
|
||
+--------------------------------------------------------------------------------+
|
||
| 套餐 [新增] [复制] [上架/下架] |
|
||
| 名称 | 时长 | 购买价格 | 包含金币 | 模型/渠道组权益 | 并发 | 队列优先级 |
|
||
| 介绍 | 保留上限 | 可延长/归档 | 生效版本 | [发布] [回滚] |
|
||
+--------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[金币单位/换算发布] --> [新充值订单快照]
|
||
[套餐发布] --> [购买订单 + 权益快照]
|
||
--> [用户目录/账户] --> [并发与队列准入]
|
||
~~~
|
||
|
||
### 3.8 任务 /admin/tasks
|
||
|
||
~~~text
|
||
+--------------------------------------------------------------------------------+
|
||
| 任务 [用户] [状态] [模型] [时间] [requestId] |
|
||
+--------------------------------------------------------------------------------+
|
||
| taskId | 用户 | 产品 | 状态 | 预扣/实扣 | 创建时间 | [详情] |
|
||
+--------------------------------------------------------------------------------+
|
||
| 详情: 快照 | attempt 时间线 | provider 状态 | 输出 | 账本 | 脱敏审计日志 |
|
||
| [取消] [重试] [标记异常] |
|
||
+--------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
### 3.9 余额/支付 /admin/balance、/admin/recharges、/admin/payments
|
||
|
||
~~~text
|
||
+--------------------------------------------------------------------------------+
|
||
| 账本: reserve | settle | release | refund | manual_adj |
|
||
| 不变量: available + reserved = confirmed balance |
|
||
| 调账: 申请人 -> 审批人 -> 执行人 | 原因 | 幂等键 | 审计 |
|
||
+--------------------------------------------------------------------------------+
|
||
| 充值订单 | provider | 金额/币种 | 状态 | webhook | 对账 | 退款 |
|
||
+--------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
~~~text
|
||
[调账] --> [申请] --> [第二审批人] --> [账本事务] --> [审计]
|
||
[支付] --> [签名/订单金额校验] --> [唯一 eventId] --> [订单状态] --> [余额]
|
||
~~~
|
||
|
||
### 3.10 存储/设置/审计 /admin/storage、/admin/settings、/admin/audit、/admin/audit-logs
|
||
|
||
~~~text
|
||
+--------------------------------------------------------------------------------+
|
||
| 邮件/SMS | 目录 | 渠道健康 | 限流 | 对象存储 | WebDAV | TTL/GC | 安全 |
|
||
+--------------------------------------------------------------------------------+
|
||
| 审计 [管理员] [对象] [操作] [requestId] [时间] [导出] |
|
||
| 时间 | 操作者 | 动作 | 对象 | before/after 摘要 | IP | correlationId | 校验链 |
|
||
+--------------------------------------------------------------------------------+
|
||
~~~
|
||
|
||
## 4. 用户侧逻辑 Mermaid
|
||
|
||
~~~mermaid
|
||
flowchart TD
|
||
HOME[首页 /]
|
||
AUTH[认证 /auth/*]
|
||
WORK[工作台 /workspace]
|
||
CL[画布项目库 /canvas]
|
||
CANVAS[画布 /canvas/:id]
|
||
IMAGE[图片工具]
|
||
AUDIO[音频工具]
|
||
THREE[3D 契约预留<br/>V1 禁用]
|
||
TASKS[任务历史 /tasks]
|
||
ASSET[资产 /assets]
|
||
ACCOUNT[账户与余额]
|
||
PLANS[套餐购买 /account/plans]
|
||
DAV[WebDAV 设置]
|
||
ERROR[公共错误页]
|
||
|
||
HOME -->|开始创作| WORK
|
||
HOME -->|打开画布| CL
|
||
HOME -->|登录注册| AUTH
|
||
AUTH -->|会话成功| WORK
|
||
WORK --> IMAGE
|
||
WORK --> AUDIO
|
||
WORK --> THREE
|
||
WORK --> CL
|
||
CL -->|打开项目| CANVAS
|
||
IMAGE -->|提交 task| TASKS
|
||
AUDIO -->|提交 task| TASKS
|
||
THREE -.->|CAPABILITY_NOT_ENABLED| ERROR
|
||
CANVAS -->|提交 task| TASKS
|
||
TASKS -->|结果| ASSET
|
||
TASKS -->|结果回写| CANVAS
|
||
ASSET -->|插入| CANVAS
|
||
ASSET -->|同步| DAV
|
||
CANVAS -->|同步| DAV
|
||
ACCOUNT -->|充值/账单| TASKS
|
||
ACCOUNT --> PLANS
|
||
PLANS -->|购买订单| TASKS
|
||
WORK -.->|未登录或余额不足| AUTH
|
||
IMAGE -.-> ERROR
|
||
AUDIO -.-> ERROR
|
||
THREE -.-> ERROR
|
||
~~~
|
||
|
||
## 5. 管理员侧逻辑 Mermaid
|
||
|
||
~~~mermaid
|
||
flowchart TD
|
||
LOGIN[管理员登录]
|
||
MFA[MFA/IP/设备策略]
|
||
RBAC[RBAC 与对象范围]
|
||
DASH[总览]
|
||
USERS[用户与会话]
|
||
MSG[邮件/SMS/验证码]
|
||
CHANNELS[渠道]
|
||
GROUPS[渠道组/健康]
|
||
PRODUCTS[模型产品/分辨率]
|
||
PRICE[价格版本]
|
||
UNIT[金币单位/换算]
|
||
PLANS[套餐与权益]
|
||
TASKS[任务与 attempt]
|
||
BALANCE[余额与人工调账]
|
||
PAY[充值/支付/退款]
|
||
STORAGE[存储/WebDAV/TTL]
|
||
ADMIN_MFA[管理员 MFA 管理]
|
||
AUDIT[审计]
|
||
AUDIT_DASH[日志大板]
|
||
AUDIT_LOGS[详细日志]
|
||
API[Admin API]
|
||
|
||
LOGIN --> MFA --> RBAC --> DASH
|
||
DASH --> USERS
|
||
DASH --> MSG
|
||
DASH --> CHANNELS
|
||
DASH --> GROUPS
|
||
DASH --> PRODUCTS
|
||
DASH --> PRICE
|
||
DASH --> TASKS
|
||
DASH --> BALANCE
|
||
DASH --> PAY
|
||
DASH --> STORAGE
|
||
DASH --> ADMIN_MFA
|
||
DASH --> AUDIT
|
||
AUDIT --> AUDIT_DASH
|
||
AUDIT --> AUDIT_LOGS
|
||
USERS --> API
|
||
MSG --> API
|
||
CHANNELS --> API
|
||
GROUPS --> API
|
||
PRODUCTS --> API
|
||
PRICE --> API
|
||
UNIT --> API
|
||
PLANS --> API
|
||
TASKS --> API
|
||
BALANCE -->|申请/审批/执行| API
|
||
PAY --> API
|
||
STORAGE --> API
|
||
ADMIN_MFA --> API
|
||
API -->|所有写操作| AUDIT
|
||
GROUPS -->|路由版本| PRODUCTS
|
||
PRODUCTS -->|目录/价格版本| TASKS
|
||
RBAC -.->|拒绝越权| API
|
||
~~~
|
||
|
||
## 6. 系统请求逻辑 Mermaid
|
||
|
||
~~~mermaid
|
||
sequenceDiagram
|
||
autonumber
|
||
participant B as Browser
|
||
participant G as API Gateway
|
||
participant A as Auth/RBAC
|
||
participant C as Catalog
|
||
participant L as Balance Ledger
|
||
participant Q as Queue/Worker
|
||
participant R as Router
|
||
participant P as Provider Adapter
|
||
participant S as Object Storage
|
||
participant E as Task Events
|
||
|
||
B->>G: POST task + Access Token + Idempotency-Key
|
||
G->>A: token/account/scope
|
||
A-->>G: user identity
|
||
G->>C: resolve product/resolution/capability
|
||
C-->>G: catalog/price/route snapshot
|
||
G->>G: validate inputs, ownership, MIME, scan
|
||
G->>L: reserve expected amount
|
||
L-->>G: available/reserved updated
|
||
G->>Q: enqueue task with snapshot and lease
|
||
G-->>B: taskId + queued + expected charge
|
||
Q->>R: resolve ordered channels
|
||
R->>P: attempt #1 + provider request ID
|
||
P-->>R: success/retryable/permanent/unknown
|
||
alt success
|
||
R->>S: store normalized outputs
|
||
R->>L: settle per successful output
|
||
R->>E: succeeded/partial
|
||
else retryable
|
||
R->>R: backoff + budget + breaker
|
||
R->>P: next channel attempt
|
||
else unknown
|
||
R->>P: query/reconcile provider request ID
|
||
P-->>R: confirmed result/failure
|
||
R->>L: settle or release exactly once
|
||
else permanent
|
||
R->>L: release unused reserve
|
||
R->>E: failed + public error
|
||
end
|
||
E-->>B: WebSocket event with sequence/cursor
|
||
B->>G: HTTP polling fallback after WS disconnect
|
||
~~~
|
||
|
||
~~~mermaid
|
||
flowchart LR
|
||
U[用户] --> AUTH[Auth API]
|
||
AUTH --> CODE[验证码哈希/限流]
|
||
CODE --> OUTBOX[Message Outbox]
|
||
OUTBOX --> MAIL[邮件适配器]
|
||
OUTBOX --> SMS[短信适配器]
|
||
U --> ORDER[充值订单]
|
||
ORDER --> PAYMENT[Payment Adapter]
|
||
PAYMENT --> WEBHOOK[签名 Webhook]
|
||
WEBHOOK --> EVENTS[唯一 eventId]
|
||
EVENTS --> LEDGER[Balance Ledger]
|
||
~~~
|
||
|
||
~~~mermaid
|
||
sequenceDiagram
|
||
participant U as User Browser
|
||
participant API as Platform API
|
||
participant DAV as WebDAV Adapter
|
||
participant W as User WebDAV
|
||
participant DB as Manifest/Metadata
|
||
|
||
U->>API: PUT /me/webdav
|
||
API->>DAV: HTTPS/allowlist/private-network validation
|
||
DAV->>W: PROPFIND connection test
|
||
W-->>DAV: status
|
||
DAV-->>API: redacted status
|
||
U->>API: POST /me/webdav/sync
|
||
API->>DB: load manifest cursor
|
||
API->>DAV: merge remote manifest/checksums
|
||
DAV->>W: GET/PUT user namespace files
|
||
W-->>DAV: files/conflicts
|
||
DAV-->>API: merge result/conflict copies
|
||
API->>DB: persist cursor and status
|
||
API-->>U: progress/result
|
||
~~~
|
||
|
||
## 7. 系统总览架构 Mermaid
|
||
|
||
~~~mermaid
|
||
flowchart TB
|
||
subgraph Clients[客户端]
|
||
WEB[用户前台 Vite/React]
|
||
ADMIN[管理台 TDesign React]
|
||
CANVAS[DOM/SVG Canvas + future Three.js]
|
||
end
|
||
|
||
subgraph Edge[统一 Origin]
|
||
PROXY[Reverse Proxy]
|
||
STATIC[Static / and /admin/]
|
||
API[API Gateway /api/v1]
|
||
EVENTS[WebSocket /ws task events]
|
||
end
|
||
|
||
subgraph Domain[服务端领域]
|
||
AUTH[User/Admin Auth + RBAC]
|
||
CATALOG[Catalog + Pricing]
|
||
TASK[Task API + State Machine]
|
||
ROUTER[Channel Router + Circuit Breaker]
|
||
ADAPTER[Provider Adapters]
|
||
LEDGER[Balance Ledger + Recharge]
|
||
MESSAGE[Email/SMS Outbox]
|
||
ASSET[Upload/Object/Asset]
|
||
DAV[WebDAV Sync]
|
||
AUDIT[Audit + Correlation]
|
||
end
|
||
|
||
subgraph Infra[基础设施]
|
||
PG[(PostgreSQL)]
|
||
REDIS[(Redis Queue/Locks)]
|
||
STAGING[(Isolated local staging<br/>TTL/GC)]
|
||
OBJECT[(Optional S3 Object Storage<br/>V1 adapter off)]
|
||
PROVIDERS[Image/Text/Audio Providers]
|
||
FUTURE3D[Future 3D Provider Adapter]
|
||
MAIL[Email Provider]
|
||
SMS[SMS Provider]
|
||
PAY[Payment Provider]
|
||
USERDAV[Per-user WebDAV]
|
||
KMS[KMS/Secret Store]
|
||
end
|
||
|
||
WEB --> PROXY
|
||
ADMIN --> PROXY
|
||
CANVAS --> WEB
|
||
PROXY --> STATIC
|
||
PROXY --> API
|
||
PROXY --> EVENTS
|
||
API --> AUTH
|
||
API --> CATALOG
|
||
API --> TASK
|
||
API --> LEDGER
|
||
API --> ASSET
|
||
API --> DAV
|
||
API --> AUDIT
|
||
EVENTS --> TASK
|
||
TASK --> REDIS
|
||
TASK --> ROUTER
|
||
TASK --> ASSET
|
||
TASK --> LEDGER
|
||
ROUTER --> ADAPTER
|
||
ADAPTER --> PROVIDERS
|
||
ADAPTER -. V1 disabled .-> FUTURE3D
|
||
AUTH --> PG
|
||
AUTH --> KMS
|
||
CATALOG --> PG
|
||
TASK --> PG
|
||
LEDGER --> PG
|
||
LEDGER --> PAY
|
||
MESSAGE --> PG
|
||
MESSAGE --> MAIL
|
||
MESSAGE --> SMS
|
||
ASSET --> OBJECT
|
||
ASSET --> STAGING
|
||
DAV --> USERDAV
|
||
DAV --> KMS
|
||
AUDIT --> PG
|
||
~~~
|
||
|
||
## 8. 数据关系 Mermaid
|
||
|
||
~~~mermaid
|
||
erDiagram
|
||
USERS ||--o{ SESSIONS : owns
|
||
USERS ||--o{ GENERATION_TASKS : submits
|
||
USERS ||--|| BALANCE_ACCOUNTS : has
|
||
USERS ||--o{ UPLOAD_OBJECTS : uploads
|
||
USERS ||--o{ ASSETS : owns
|
||
MODEL_PRODUCTS }o--|| CHANNEL_GROUPS : routes_to
|
||
MEMBERSHIP_PLANS ||--o{ PLAN_PURCHASES : sold_as
|
||
USERS ||--o{ PLAN_PURCHASES : buys
|
||
CHANNEL_GROUPS ||--o{ CHANNEL_BINDINGS : contains
|
||
PROVIDER_CHANNELS ||--o{ CHANNEL_BINDINGS : binds
|
||
GENERATION_TASKS ||--o{ GENERATION_ATTEMPTS : tries
|
||
GENERATION_TASKS ||--o{ GENERATION_OUTPUTS : produces
|
||
BALANCE_ACCOUNTS ||--o{ BALANCE_LEDGER : records
|
||
BALANCE_UNITS ||--o{ BALANCE_CONVERSION_RULES : defines
|
||
BALANCE_UNITS ||--o{ BALANCE_LEDGER : denominates
|
||
BALANCE_CONVERSION_RULES ||--o{ RECHARGE_ORDERS : snapshots
|
||
RECHARGE_ORDERS ||--o{ PAYMENT_EVENTS : receives
|
||
USERS ||--o{ RECHARGE_ORDERS : creates
|
||
USERS ||--o{ WEBDAV_CONNECTIONS : configures
|
||
|
||
USERS {
|
||
uuid id PK
|
||
string status
|
||
datetime created_at
|
||
}
|
||
SESSIONS {
|
||
uuid id PK
|
||
uuid user_id FK
|
||
string audience
|
||
string refresh_hash
|
||
datetime expires_at
|
||
datetime revoked_at
|
||
}
|
||
MODEL_PRODUCTS {
|
||
uuid id PK
|
||
string public_code
|
||
string tier
|
||
int version
|
||
string status
|
||
}
|
||
CHANNEL_GROUPS {
|
||
uuid id PK
|
||
int published_version
|
||
string circuit_state
|
||
}
|
||
CHANNEL_BINDINGS {
|
||
uuid id PK
|
||
uuid group_id FK
|
||
uuid channel_id FK
|
||
int priority
|
||
string provider_model_id
|
||
}
|
||
GENERATION_TASKS {
|
||
uuid id PK
|
||
uuid user_id FK
|
||
uuid product_id FK
|
||
string status
|
||
string idempotency_key
|
||
decimal reserved_amount
|
||
int snapshot_version
|
||
}
|
||
GENERATION_ATTEMPTS {
|
||
uuid id PK
|
||
uuid task_id FK
|
||
string status
|
||
string provider_request_id
|
||
string error_class
|
||
}
|
||
BALANCE_ACCOUNTS {
|
||
uuid id PK
|
||
uuid user_id FK
|
||
decimal available
|
||
decimal reserved
|
||
int version
|
||
}
|
||
BALANCE_LEDGER {
|
||
uuid id PK
|
||
uuid account_id FK
|
||
string type
|
||
decimal amount
|
||
string idempotency_key
|
||
}
|
||
BALANCE_UNITS {
|
||
uuid id PK
|
||
string code
|
||
string display_name
|
||
string icon_key
|
||
int scale
|
||
}
|
||
BALANCE_CONVERSION_RULES {
|
||
uuid id PK
|
||
uuid unit_id FK
|
||
string payment_currency
|
||
decimal rate
|
||
int version
|
||
}
|
||
PROVIDER_CHANNELS {
|
||
uuid id PK
|
||
string provider
|
||
string status
|
||
}
|
||
UPLOAD_OBJECTS {
|
||
uuid id PK
|
||
uuid owner_id FK
|
||
string mime
|
||
string scan_status
|
||
}
|
||
ASSETS {
|
||
uuid id PK
|
||
uuid owner_id FK
|
||
string kind
|
||
string object_id
|
||
}
|
||
GENERATION_OUTPUTS {
|
||
uuid id PK
|
||
uuid task_id FK
|
||
string object_id
|
||
decimal charged_amount
|
||
}
|
||
RECHARGE_ORDERS {
|
||
uuid id PK
|
||
uuid user_id FK
|
||
decimal amount
|
||
string status
|
||
}
|
||
PAYMENT_EVENTS {
|
||
uuid id PK
|
||
uuid order_id FK
|
||
string provider_event_id
|
||
string status
|
||
}
|
||
WEBDAV_CONNECTIONS {
|
||
uuid id PK
|
||
uuid user_id FK
|
||
string base_url_redacted
|
||
string status
|
||
}
|
||
MEMBERSHIP_PLANS {
|
||
uuid id PK
|
||
string public_code
|
||
decimal purchase_amount
|
||
decimal included_balance
|
||
int duration_days
|
||
string status
|
||
}
|
||
PLAN_PURCHASES {
|
||
uuid id PK
|
||
uuid user_id FK
|
||
uuid plan_id FK
|
||
decimal granted_balance
|
||
datetime expires_at
|
||
string status
|
||
}
|
||
~~~
|
||
|
||
## 9. 页面与请求对照
|
||
|
||
| 页面 | 主要读取 | 主要写入/异步 | 用户可见错误 |
|
||
| --- | --- | --- | --- |
|
||
| 首页 | 公开能力和目录摘要 | 无 | 公共服务错误 |
|
||
| 认证 | 会话和账户状态 | 注册、验证、登录、刷新、重置 | 验证码失效、冻结、限流 |
|
||
| 工作台 | 目录、余额、上传限制 | 任务提交 | 参数错误、余额不足、模型不可用 |
|
||
| 画布 | 本地项目、任务、资产、同步 | 任务、保存资产、WebDAV | 公共错误码和任务建议 |
|
||
| 图片/音频/多视图 | 目录、余额、上传对象 | 对应 taskType | 任务失败和重试建议 |
|
||
| 任务详情 | 快照、事件、输出、账单 | 取消、重试、保存资产 | 不展示 provider attempt |
|
||
| 资产 | 资产列表、下载授权 | 新建、编辑、删除、同步 | 过期、无权限、扫描失败 |
|
||
| 账户/余额 | 账户、账本、充值订单 | 充值订单、会话撤销 | 支付待确认、余额不足 |
|
||
| WebDAV | 连接和 manifest | 测试、同步、冲突处理 | 连接失败、冲突副本 |
|
||
| 管理后台 | 列表、指标、审计 | 配置发布、审批、调账、重试 | 权限不足、版本冲突、需审批 |
|
||
|
||
## 10. 图示维护规则
|
||
|
||
- 新增页面时,同时更新 1.1/1.2 页面清单、对应 ASCII 页面图和至少一张相关 Mermaid 图。
|
||
- 新增 API、任务状态或账本状态时,同时更新第 6、7、8 节,保证请求链路、架构节点和数据关系一致。
|
||
- 本文的页面范围必须与 develop.md 第 1、2、5、6、9 节保持一致;不开发的视频、动画、3D 生成、Local Agent、远程 Prompt、插件市场等功能不得重新出现在用户导航。
|
||
- 一期固定使用本地画布/资产 + WebDAV;云端项目 CRUD 不进入 V1,仅保留 develop.md 中的团队/云端扩展预留契约。
|
||
|
||
## 11. 管理台重构图示索引
|
||
|
||
管理台一级/二级菜单、权限分组、每个页面的强交互 ASCII(SSII)线框、渠道→分组→模型产品→价格规则流程、版本冲突状态机和逐页验收清单,统一维护在 [`admin-plan.md`](./admin-plan.md)。
|
||
|
||
当前管理台重构约束:
|
||
|
||
- 左侧菜单必须使用一级分组 + 二级页面,不再把全部业务页面平铺成单层菜单。
|
||
- 消息供应商、消息模板本期不进入可见菜单;认证消息只展示 outbox 状态和多行内容详情。
|
||
- 新增/编辑渠道、分组、模型产品、用户、价格规则、套餐等都从按钮打开弹窗或抽屉,首屏不铺开全部配置字段。
|
||
- 403/404 必须渲染可恢复页面,不允许白板;权限过滤和后端 scope 必须一致。
|