# Dada UI Design

| 文档项 | 内容 |
| --- | --- |
| 文档版本 | 1.1 |
| 产品范围 | P0-A Windows 单机版 |
| 设计状态 | 低保真交互与界面规范 |
| 主要画布 | Windows 当前稳定版 Chrome / Edge，1920 × 1080 优先验收 |
| 产品需求权威 | PRD.md v1.10 |
| 功能与状态导航 | FeatureSummary.md 1.1 |
| 工程与接口约束 | DevelopmentPlan.md 1.2 |
| 本阶段产出 | 页面、布局、组件、状态、文案、焦点顺序和可访问性规范 |
| 本阶段不产出 | 高保真视觉稿、前端代码、移动端、P0-B、部署人员 CLI |

输入文件冻结校验：

| 文件 | SHA-256 |
| --- | --- |
| PRD.md | 31F93674DF1A90B557FEE3AA9E74FB084E246CA8FE09F6BD4B1DC9D56D606565 |
| FeatureSummary.md | 6F80E272AAB08A5525B54501D83F16A4F6A7A170596947BBC25F1DA54F2FE844 |
| DevelopmentPlan.md | 76CCC786E910F3E503921AEF5B9BD22976E364184BA8C0062CDCF1C5F376AC0A |

## 文档使用规则

本稿只解释上游需求如何落到界面，不创建新的产品角色、状态、接口或错误动作。出现冲突时，PRD.md 是唯一产品需求权威；FeatureSummary.md 只用于导航；DevelopmentPlan.md 只约束已冻结的工程、接口和状态实现。

设计交付遵循以下边界：

- UI 可以决定布局、视觉、图标、控件、焦点顺序、提示层级和未被冻结的具体中文文案。
- UI 不得改变产品状态机、权限、错误动作、验收条件、API 语义、固定提示或数据范围。
- 后端返回的稳定 message_key 决定错误语义；前端只把它映射到本稿规定的标题、说明和允许动作，不用字符串猜测错误。
- 前端不得把已配置默认模型、运行时推荐模型和用户当前选择合并为一个状态。
- 页面展示不得暴露密钥、完整本机路径、私有正文、私有图片内容或不必要的个人信息。
- 本稿中的“卡片”仅用于重复项目、素材缩略项和弹层内的独立对象；页面区段本身不做层层嵌套卡片。

## 设计目标

Dada 是面向小规模内测创作者的本机图像创作工具。普通创作体验应直接、醒目、有作品感；后台和编辑器应安静、紧凑、可扫描。视觉表达不能掩盖本机数据风险、费用、模型状态和保存状态。

界面遵循六项原则：

- **先给状态，再给动作**：生成、保存、容量、服务和冲突状态必须在动作附近可见。
- **视觉有识别度，操作不过度装饰**：艺术表达集中在登录、注册和无项目工作台顶部。
- **危险动作明确且可逆时优先可逆**：移入回收站与永久删除分离；不可逆操作使用对象名确认。
- **不暗换用户选择**：模型失效、版本冲突和未提交导出都要求用户明确确认。
- **本机边界持续可见**：固定本机数据提示不是首次启动提示，不可被永久关闭。
- **同一语义同一组件**：相同状态、message_key 和错误动作在普通端、后台与辅助界面中保持一致。

## 视觉方向

### 主视觉

整体使用荧光黄、黑、白、冷灰的高对比系统。荧光黄用于主要动作、当前选择和有限的品牌面积；黑色用于标题、正文和关键轮廓；白与冷灰承担大面积操作背景。错误、成功和信息状态使用独立红、绿、蓝，不依赖黄色表达所有含义。

视觉特征：

- 方角模块、硬边分隔、粗体中文标题、细密数据行。
- 不使用大面积圆角、渐变、光斑、漂浮装饰球或卡片堆叠。
- 控件圆角最多 4 px；大区段保持直角。
- 页面级主标题不超过 28 px；高密度面板标题使用 16 至 20 px。
- 数字、括号和机能符号只在艺术带中少量出现，不作为导航编号。
- 所有动态信息预留稳定宽度，状态切换不推挤相邻控件。

### 原创机能风艺术带

艺术带只用于：

- 普通用户登录与注册页顶部。
- 普通用户首次进入且没有任何项目的工作台顶部。

艺术带不用于：

- 已有项目的工作台。
- 项目列表、项目详情、编辑器。
- super_admin 登录与后台。
- 浏览器阻断与启动失败等系统错误页。

后续高保真阶段制作原创位图，不复制参考图中的文字、标志或具体构图。视觉由巨大 DADA 字形、银灰材质碎片、细技术线、少量荧光黄切片和低密度标记组成。艺术带不得遮住页面 H1、表单、错误提示或主动作。

建议规格：

- 桌面横幅比例约 3.4:1，高度 180 至 240 px。
- 内容安全区左右各 48 px；主字形与装饰均不得越过安全区覆盖操作内容。
- 静态图为默认方案；如后续加入轻微位移，必须响应减少动态效果设置，并提供完全静态替代。
- 图片加载失败时显示白底、DADA 黑色字标和一条荧光黄分隔，不影响表单和导航。

## 设计令牌

### 颜色

| 令牌 | 色值 | 用途 |
| --- | --- | --- |
| Brand Yellow | #F2F400 | 主按钮、当前标签、关键品牌面 |
| Ink | #111111 | 主标题、正文、主轮廓 |
| Paper | #FFFFFF | 页面与画布操作区 |
| Cool Gray 050 | #F7F7F5 | 次级背景、表格隔行 |
| Cool Gray 100 | #E8E8E5 | 分区、禁用背景 |
| Cool Gray 300 | #B9B9B3 | 边框、占位 |
| Cool Gray 600 | #62625D | 次要文字 |
| Danger | #C92A24 | 错误、破坏性动作 |
| Success | #16794B | 已保存、恢复、完成 |
| Info | #1769AA | 加载、排队、信息提示 |
| Focus | #005FCC | 键盘焦点环 |

使用约束：

- Brand Yellow 上只用 Ink，不用白字。
- Danger、Success、Info 不能只靠颜色表达，必须同时出现图标和文字。
- 页面正文与背景达到 WCAG AA；大号艺术字不承载唯一业务信息。
- 禁用态保持文字可读，不通过降低到近乎不可见的透明度表达。

### 排版

| 层级 | 字体 | 字号 / 行高 | 字重 |
| --- | --- | --- | --- |
| 页面标题 | Microsoft YaHei UI, Segoe UI, sans-serif | 28 / 40 px | 700 |
| 区段标题 | 同上 | 20 / 28 px | 700 |
| 面板标题 | 同上 | 16 / 24 px | 700 |
| 正文与控件 | 同上 | 14 / 22 px | 400 或 600 |
| 表格与辅助信息 | 同上 | 12 / 18 px | 400 |
| 艺术带字形 | 系统粗黑或后续位图 | 72 至 96 px | 800 |

字间距固定为 0，不随视口宽度缩放字号。金额、点数、日期和版本号使用 Segoe UI 的等宽数字特性；不引入产品包之外的远程字体。

### 间距与尺寸

- 基础间距：4、8、12、16、24、32、48 px。
- 顶部导航高 56 px；严重状态条最小高 36 px；固定本机提示条最小高 32 px。
- 普通按钮高 36 px；主要按钮高 40 px；图标按钮为 36 × 36 px。
- 表格行高 44 px；密集审计表格可用 40 px。
- 表单输入最小高 40 px；多行提示词输入最小高 120 px。
- 页面最大内容宽 1440 px；后台数据区可使用可用宽度，不用居中窄栏。
- 弹层宽度分为 480、640、800 px；不超过可用视口高度，正文区域内部滚动，标题和动作固定。

### 图标

实现阶段优先使用项目采用的 Lucide 图标。熟悉的工具只显示图标并提供 tooltip 和无障碍名称；业务命令使用图标加文字。

| 动作 | 图标 |
| --- | --- |
| 返回 | ArrowLeft |
| 撤销 / 重做 | Undo2 / Redo2 |
| 保存 | Save |
| 下载 / 导出 | Download |
| 删除 | Trash2 |
| 恢复 | RotateCcw |
| 当前任务 | LoaderCircle 或 CircleCheck |
| 状态警告 | TriangleAlert |
| 冲突 | GitCompareArrows |
| 查看详情 | Eye |
| 审计访问 | ShieldCheck |
| 诊断 | Stethoscope |
| 外部引导 | ExternalLink |

不手绘通用图标。加载图标旋转但不改变按钮宽度；减少动态效果时改为静态图标加“处理中”文本。

## 全局组件

### 按钮

- **主要按钮**：荧光黄底、黑字，用于页面唯一主动作。
- **次要按钮**：白底、黑色 1 px 边框，用于返回、取消、筛选。
- **文字按钮**：无边框，用于表格内轻量动作。
- **危险按钮**：红色边框或红底，只有最终确认使用实心红底。
- **图标按钮**：固定 36 × 36 px；必须有 tooltip 和 aria-label。
- 处理中保持原宽，显示 spinner 与动词进行时，禁止重复提交。

### 输入与选择

- 输入框标签始终在控件上方；必填标记和错误说明不占用 placeholder。
- 邮箱与验证码使用原生可识别的 input 类型和自动完成语义。
- 模型、比例、格式等有限选项使用菜单或分段控件，不使用自由文本。
- 二元设置使用复选框或开关；危险设置不使用仅图标开关。
- 数字范围使用输入加步进器；JPG 质量使用滑杆与数值输入同步。
- 字段错误紧邻字段，页面级错误位于标题下方；二者可同时存在。

### 标签与状态徽标

状态徽标为方角短标签，固定最小宽，不使用只有颜色的圆点。状态词与后端状态一一映射，不用“差不多完成”等模糊措辞。

### 通知

| 类型 | 位置 | 行为 |
| --- | --- | --- |
| 字段错误 | 字段下方 | 聚焦后仍保留，字段修正并重新校验后消失 |
| 页面错误 | 页面标题下 | 持续到重试成功或离开页面 |
| 场景状态条 | 受影响区段上方 | 服务恢复或场景退出后消失 |
| 全局容量条 | 普通端导航下 / 后台内容顶部 | critical、full、unavailable 持续显示 |
| Toast | 右上角 | 仅用于低风险完成反馈，不承载唯一错误 |
| 冲突遮罩 | 编辑区或配置区 | 阻断写操作，保留规定的读取、导出或刷新动作 |

### 表格

- 表头固定，第一列可在横向滚动时固定。
- 支持筛选的列在表头提供明确按钮，不把筛选藏在列名点击中。
- 行动作统一放在最右侧“更多”菜单；高频唯一动作可直接显示。
- 空表格保留表头和筛选器，正文显示空状态与下一步动作。
- 加载时显示稳定行高骨架；失败时不清空上一次已成功数据，并标注其更新时间。

### 弹层

- 打开后焦点进入标题后的第一个可操作控件。
- 焦点限制在弹层内；Esc 仅关闭非破坏性弹层。
- 关闭后焦点返回触发按钮。
- 破坏性确认显示对象名、影响范围和不可恢复后果。
- 后端请求期间禁用关闭与重复提交；请求失败后恢复控件，保留用户输入。

## 全局状态语言

### 加载、空、失败和禁用

| 状态 | 视觉 | 默认动作 |
| --- | --- | --- |
| 正常 | 完整内容与可用主动作 | 执行当前流程 |
| 空 | 明确空原因、一个主动作、可选次动作 | 创建、上传或清除筛选 |
| 加载 | 稳定尺寸骨架或行内进度 | 允许取消时显示取消 |
| 失败 | 红色标题、可理解说明、稳定 message_key 映射 | 重试、返回或诊断 |
| 禁用 | 控件保持可读，旁边说明前置条件 | 前往满足条件的入口 |
| 冲突 | 对象版本与最新状态并列 | 按产品规则刷新、重试或仅导出 |
| 容量限制 | 全局或场景状态条加受影响动作说明 | 清理、下载或重试计量 |

### 容量状态

LocalBackendStorageState 的状态与动作必须来自后端；前端不自行用浏览器剩余空间估算。

| 状态 | 全局表达 | 生图 / 参考图 / 成品保存 | 上传贴纸 / 生成缩略图 | JSON 项目编辑 | 已有内容查看 / 下载 / 删除 |
| --- | --- | --- | --- | --- | --- |
| normal，低于 80% | 不显示全局条 | 允许 | 允许 | 允许 | 允许 |
| warning，达到 80% | 受影响场景显示黄色提示 | 允许 | 允许 | 允许 | 允许 |
| critical，达到 90% | 持续紧凑状态条 | 允许，但提交前再次显示预计占用 | 允许，但上传前再次确认 | 允许 | 允许 |
| full，已达到 5 GB，或预计本次写入后超过上限 | 持续红色状态条 | 阻断新增受管二进制写入与 AI 调用；客户端只下载按上游规则保留 | 阻断 | 允许可提交的 JSON 编辑 | 允许 |
| unavailable，不可写或系统磁盘满 | 持续红色状态条 | 阻断新增写入与 AI 调用；已有文件可下载 | 阻断 | 后端写入失败，页面进入 failed | 允许查看、下载和删除入口 |

预计本次写入后恰好等于 5 GB 时，允许本次容量预留和写入继续；写入提交后 storage_status 进入 full，并阻断后续新增受管二进制写入与 AI 调用。

容量提示中显示已用量、5 GB 上限、最后计量时间和“管理存储”入口。前端不得在清理排队时预先减少已用量；只有物理清理完成并重新计量后更新。

### 服务异常

- Worker degraded：生成表单和当前任务入口显示；不影响项目查看、编辑已有 JSON 和本地可完成的导出。
- 无运行时可用模型：生成区持续显示，生成按钮禁用；不改写用户模型配置显示。
- Resend 异常：只在登录、注册和后台服务页显示。
- 高德异常：只在使用 DYN004 定位能力的素材场景和后台服务页显示。
- AI 网关余额或可用性异常：在模型选择、生成提交、当前任务和后台服务页显示。
- LocalDataRoot 容量异常：按上表全局表达。
- 普通用户错误不显示密钥、绝对路径、原始上游响应或私有正文。

## 页面与入口地图

### 访问前门禁

浏览器访问 localhost 后首先进入支持检查。门禁通过后才可加载普通端或后台产品界面；失败只进入浏览器不受支持引导页。

### 普通用户

普通用户顶部导航：

- 创作
- 项目
- 点数
- 设置

右侧固定区域：

- 当前生成任务入口：只要存在 queued 或 running 任务就持续显示。
- 点数余额。
- 账号菜单。

导航下方按需显示严重容量状态条。页面底部或固定底栏持续显示：

> 测试数据仅保存在本机，不自动备份，也不会迁移到正式系统。

普通用户页面：

- 登录 / 注册
- 创作工作台
- 当前生成任务
- 项目列表与回收站
- 项目详情
- 编辑器
- 导出
- 点数明细
- 设置与账号注销

内部预览账号沿用普通用户全部页面，只在授权素材批次内多看到允许的 internal_preview 或 passed 内容。它不是新角色，不出现后台入口。

### super_admin

super_admin 使用独立登录和独立会话。后台左侧导航：

- 总览
- 用户
- 邀请码
- 模型
- 素材
- 内部预览
- 生成记录
- 服务与存储
- 审计

super_admin 不显示普通创作导航、创作工作台、项目或编辑器入口。

### 辅助系统界面

Windows 托盘和 Supervisor 提供：

- 打开 Dada
- 查看运行状态
- 打开诊断
- 退出 Dada

部署人员 CLI 不属于本稿。

## 权限矩阵

| 能力 | 未登录访问者 | 普通用户 | 内部预览账号 | super_admin | 辅助系统 |
| --- | --- | --- | --- | --- | --- |
| 浏览器不受支持引导 | 可见 | 门禁前可见 | 门禁前可见 | 门禁前可见 | 可打开支持页 |
| 登录 / 注册 | 可见 | 已登录后跳转创作 | 同普通用户 | 仅独立后台登录 | 不处理身份 |
| 创作与生成 | 不可 | 可 | 可 | 不可 | 只显示健康状态 |
| 已发布普通素材 | 不可 | 可 | 可 | 后台管理 | 只显示素材根健康 |
| 授权内部预览素材 | 不可 | 不可 | 可 | 管理授权与批次，不以普通用户身份消费 | 不可 |
| 项目、编辑器、导出 | 不可 | 可 | 可 | 不可 | 不可 |
| 后台运营 | 不可 | 不可 | 不可 | 可 | 不可 |
| 私有内容完整正文 / 图片 | 不可 | 不可 | 不可 | 告知确认后，逐次“打开并记录审计” | 不可 |
| 诊断摘要 | 不可 | 设置中只看用户相关简化状态 | 同普通用户 | 后台可看脱敏运营诊断 | 可看脱敏系统诊断 |

账号被停用或注销后，服务端权限优先于已打开页面。页面收到拒绝时立即退出受保护内容并返回相应身份入口，不保留可交互的旧数据。

## 浏览器不受支持引导

**入口与权限**

支持检查返回 BROWSER_UNSUPPORTED，或任何产品路由在门禁前被拒绝时进入。所有身份均只能看引导，不能继续使用产品功能。

**布局**

- 白底全页，顶部 8 px 荧光黄规则线。
- 中央 640 px 文字列，显示 DADA 字标、标题“当前浏览器无法使用 Dada”、原因、受支持品牌和版本。
- 底部显示当前检测到的浏览器品牌 / major；识别不可用时只显示“无法可靠识别”。
- 不加载产品主导航、项目缩略图或后台框架。

**控件**

- “查看如何打开 Chrome / Edge”折叠说明。
- “重新检测”只重新执行门禁，不提供绕过。
- 若系统能力允许，提供“复制本机地址”；它不是继续使用入口。

**状态与动作**

| reason | 文案重点 | 允许动作 |
| --- | --- | --- |
| platform_unsupported | 仅支持当前 Windows 电脑 | 查看引导、复制地址、重新检测 |
| brand_unsupported | 请使用已验收的 Chrome 或 Edge | 查看引导、重新检测 |
| version_unsupported | 当前版本不在本次发布支持范围 | 查看支持 major、重新检测 |
| identity_unavailable | 无法可靠识别浏览器 | 检查浏览器设置、重新检测 |

焦点顺序：页面标题 → 折叠说明 → 重新检测 → 复制地址。错误摘要使用 assertive live region。页面没有“仍然继续”。

## 普通用户认证

### 登录 / 注册框架

页面顶部为原创机能风艺术带，下方为左对齐 480 px 表单列。艺术带不随字段展开改变高度。页面右上角只显示“管理员登录”文字入口，明确进入独立后台身份域。

登录与注册使用标签切换。切换时清除不属于目标模式的敏感字段，不把注册资料带到登录提交。

### 登录

**字段与动作**

- 邮箱
- 验证码
- 获取验证码 / 倒计时后重新获取
- 登录

登录模式不显示邀请码、创作署名、社交 ID 和内测告知。

焦点顺序：登录标签 → 邮箱 → 获取验证码 → 验证码 → 登录 → 注册标签 → 管理员登录。

**状态**

| 状态 | 表达 | 允许动作 |
| --- | --- | --- |
| 初始 | 邮箱空，获取验证码禁用 | 输入邮箱 |
| 邮箱格式无效 | 字段错误 | 修正邮箱 |
| 发码中 | 按钮保持宽度并显示“发送中” | 等待 |
| 已发码 | 显示倒计时和发送目标的脱敏邮箱 | 输入验证码、倒计时后重发 |
| Resend 失败 | 页面错误，不清空邮箱 | 重试 |
| 验证码错误 / 过期 | 验证码字段错误 | 修正或重发 |
| 账号停用 | 页面错误 | 返回、联系管理员 |
| 登录成功 | 跳转创作 | 无重复提交 |

### 注册

注册分为两个可见阶段，但仍是一个页面和一条注册流程。

**第一阶段**

字段顺序固定为：

- 邀请码
- 邮箱
- 获取验证码

获取验证码只有在邀请码和邮箱均通过本地完整性检查后可用。点击后使用既有发码请求，由后端校验邀请码有效性和名额；前端不新增邀请码预检 API。

后端确认邀请码有效、名额未满并成功发码后，才展开第二阶段：

- 验证码
- 创作署名
- 社交 ID
- 《内测使用与隐私告知》阅读入口和必选同意框
- 注册

第二阶段展开后，邀请码和邮箱保持只读摘要，并提供“修改”动作。修改会收起第二阶段并使已发挑战按后端规则失效或重新申请。

焦点顺序：注册标签 → 邀请码 → 邮箱 → 获取验证码 → 验证码 → 创作署名 → 社交 ID → 告知阅读 → 同意复选框 → 注册 → 登录标签。

**状态**

| 状态 | 表达 | 允许动作 |
| --- | --- | --- |
| 邀请码未填 / 邮箱未填 | 获取验证码禁用，并说明缺少字段 | 补充字段 |
| 邀请码无效 | 邀请码字段错误，第二阶段不展开 | 修正邀请码 |
| 邀请码已用 / 过期 | 显示对应稳定错误语义 | 更换邀请码 |
| 名额已满 | 页面级阻断，不发送验证码 | 返回登录 |
| 发码成功 | 展开第二阶段 | 完成资料 |
| 验证码错误 / 过期 | 保留资料字段 | 修正或重发 |
| 告知未同意 | 注册按钮禁用，说明必选 | 阅读并勾选 |
| 最终复核失败 | 保留非敏感资料，显示具体稳定错误 | 按错误动作修正 |
| 注册成功 | 建立普通用户会话并进入创作 | 无重复提交 |

告知正文必须覆盖 PRD 固定范围；界面不把长文塞入复选框标签。阅读弹层底部固定显示“我已阅读”，但只有返回表单后的复选框代表同意。

## 普通用户主框架

### 顶部导航

左侧为 DADA 字标和四个导航入口。当前入口使用荧光黄底与 3 px 黑色下边线，不能只靠颜色。右侧任务入口在 queued 或 running 时显示状态文字和进度；进入 succeeded、failed 或 rejected 后保留一次可查看结果提示，用户查看后恢复为隐藏。

顶部导航在页面滚动时保持可见。容量 critical/full/unavailable 状态条固定在导航下，不盖住页面内容。

### 本机数据提示

普通用户主框架底部持续显示固定文案：

> 测试数据仅保存在本机，不自动备份，也不会迁移到正式系统。

该条不可永久关闭。设置页重复显示更完整的数据风险说明和下载建议。屏幕阅读器首次进入页面时读出，站内导航时不重复打断。

## 创作工作台

### 无项目状态

**布局**

- 顶部原创机能风艺术带，标题为“开始一张新作品”。
- 艺术带下方直接进入生成表单，不把表单放进装饰卡。
- 右侧或下方显示“当前任务”；无任务时显示简洁空状态。

**空状态动作**

- 输入提示词。
- 选择模型和比例。
- 添加参考图（提交生成时上传）。
- 查看预计点数。
- 提交生成。

没有“浏览示例模板”之类未定义入口。

### 有项目状态

不显示艺术带。页面顶部为紧凑生成区，下方为最近项目与当前任务摘要。最近项目只展示真实项目数据；最多显示 6 个，之后使用“查看全部项目”。

### 生成表单

**布局与控件**

- 提示词多行输入。
- 模型选择菜单。
- 比例分段控件：3:4、1:1、4:3、9:16。
- 添加参考图区域，包含选择本地文件、标注“尚未提交，仅保留在当前页面”的缩略预览和移除；只有点击提交生成时才上传并绑定本次 GenerationJob。
- 已确认点数成本。
- 生成按钮。

首次新建创作时预选 recommended_model_id。界面同时区分：

- “系统配置默认”：只在模型详情说明中展示 configured_default_model_id。
- “当前推荐”：在推荐模型选项旁显示“推荐”。
- “你的选择”：菜单当前值。

如果 recommended_model_id 为空，模型不自动选中，生成按钮禁用并显示“当前没有可用于新任务的模型”。

若用户已选模型后，该模型变为不可用于新任务：

- 保留原选择并标红“当前不可用”。
- 不切换到推荐模型。
- 阻断提交。
- 若后端返回新推荐，显示“改用推荐模型”按钮；用户点击后形成新的显式选择。
- 重新显示成本和能力约束，用户再次确认后才可提交。

**提交前状态**

| 条件 | 生成按钮 | 邻近说明 |
| --- | --- | --- |
| 提示词为空 | 禁用 | 请输入创作描述 |
| 模型未选 | 禁用 | 请选择当前可用模型 |
| 模型运行时不可用 | 禁用 | 保留原选择并显示原因、推荐替代 |
| 比例未选 | 禁用 | 请选择画面比例 |
| 参考图处理中 | 禁用 | 正在处理参考图 |
| 点数不足 | 禁用 | 显示所需与现有点数，入口到点数页 |
| 已有 queued / running 任务 | 不创建第二个任务 | 变为“查看当前任务” |
| Worker degraded | 禁用或按后端能力阻断 | 显示生成服务暂不可用 |
| storage full / unavailable | 禁用 | 显示容量动作 |
| 条件均满足 | 可用 | 显示确认成本与模型 |

提交后立即进入当前任务视图，不乐观创建成功图片。

### 当前生成任务

当前任务既是顶部持续入口，也有独立详情抽屉或页面。抽屉宽 420 px，从右侧打开，不改变主页面状态。

| 状态 | 显示 | 允许动作 |
| --- | --- | --- |
| queued | 排队时间、模型、比例、冻结点数 | 关闭抽屉、返回项目 |
| running | 运行状态、开始时间、模型 | 关闭抽屉、查看项目 |
| succeeded | 结果缩略图、实际点数、项目入口 | 打开项目、下载原图 |
| failed | 错误标题、是否释放点数、允许动作 | 按错误映射重试或修改 |
| rejected | 拒绝原因、点数释放状态和允许动作 | 按错误映射修改提示词或参考图 |

同一账号再次提交时若后端返回现有 queued / running 任务，界面打开该任务，不显示第二次冻结成功。

### 生成错误与提交阻断动作矩阵

具体 message_key 由后端返回。固定 GenerationErrorCategory 只有以下九类，前端不得新增、重命名或归并：

| GenerationErrorCategory | 用户说明重点 | 主动作 | 任务与点数 |
| --- | --- | --- | --- |
| upstream_timeout | 上游响应超时 | 使用原输入重试 | failed，释放冻结点 |
| upstream_failed | 上游明确失败 | 使用原输入重试 | failed，释放冻结点 |
| safety_rejected | 内容未通过安全检查 | 修改提示词或参考图 | rejected，不保存输出并释放冻结点 |
| model_disabled | 模型因普通启停规则不可用 | 选择其他模型或等待 | 不创建任务、不冻结点 |
| gateway_balance_insufficient | AI 网关余额不足 | 选择未受影响模型或联系管理员 | 未创建则不冻结；已创建则 failed 并释放 |
| gateway_contract_invalid | 网关契约未验证或失效 | 选择其他模型或联系管理员 | 未创建则不冻结；已创建则 failed 并释放 |
| reference_invalid | 参考图格式、大小、数量或内容无效 | 更换或移除参考图 | 未创建则不冻结；已创建则 failed 并释放 |
| unknown_retryable | 未知但判断为临时错误 | 稍后重试 | failed，释放冻结点 |
| unknown_non_retryable | 未知且不应反复重试 | 联系管理员 | failed，释放冻结点 |

以下情况是确定性业务阻断，不属于 GenerationErrorCategory：

| 阻断条件 | 用户说明重点 | 主动作 | 任务与点数 |
| --- | --- | --- | --- |
| 点数不足 | 显示所需点数与当前可用点数 | 查看点数明细 | 不创建任务、不冻结点 |
| ModelConfig 版本变化 | 显示最新模型配置和成本 | 重新确认 | 不创建任务、不冻结点 |
| 已有 queued / running 任务 | 当前已有生成任务 | 查看当前任务 | 不创建第二个任务、不重复冻结 |
| 项目或生成历史达到上限 | 显示对应上限和清理要求 | 管理项目或删除旧历史图 | 不创建任务、不冻结点 |
| storage full / unavailable | 显示容量或可写性阻断原因 | 管理存储或打开诊断 | 不创建任务、不调用上游、不冻结点 |

## 项目

### 项目列表

**入口与权限**

普通用户及内部预览账号从顶部“项目”进入，只能看到自己的项目。

**布局**

- 页面标题、active 项目计数和上限。
- “项目”与“回收站”标签。
- 搜索、排序和状态筛选。
- 项目缩略图网格；卡片比例稳定，不因名称或状态变化改变尺寸。
- failed_empty 快捷清理区只在存在候选时出现。

**项目卡片**

- 当前底图或占位图。
- 项目名、比例、更新时间。
- 成功图数量。
- 项目状态。
- 打开主动作。
- 更多菜单：重命名、移入回收站；只有允许的对象显示对应动作。

项目名最多显示两行，之后省略；完整名称通过 tooltip 和无障碍名称可读。

**状态**

| 状态 | 表达 | 允许动作 |
| --- | --- | --- |
| 正常 | 网格与计数 | 打开、重命名、按规则删除 |
| 空 | “还没有项目” | 前往创作 |
| 筛选为空 | “没有符合条件的项目” | 清除筛选 |
| 加载 | 固定比例骨架 | 等待 |
| 失败 | 保留上次列表并标注旧数据 | 重试 |
| 达到 20 个 active 上限 | 顶部阻断提示 | 清理 failed_empty 或移入回收站 |
| 批量 failed_empty | 仅选择无成功图草稿 | 批量移入回收站 |

含成功图项目不得进入 failed_empty 快捷批量操作。前端复核展示条件，后端仍做最终校验。

焦点顺序：页面标题 → 标签 → 搜索 → 筛选 → 排序 → 项目卡片 → 分页或加载更多 → failed_empty 清理。

### 回收站

- 显示删除时间和剩余保留时间。
- 提供恢复和永久删除。
- 恢复若触发 active 项目上限，显示阻断并指向现有项目管理。
- 永久删除使用项目名确认；提交后显示清理进度。
- 永久删除完成前不乐观减少容量。

### 项目详情

**布局**

- 顶部：返回、可编辑项目名、项目状态、比例、更多菜单。
- 主区：当前底图大预览。
- 历史区：按时间展示最多 10 张成功图。
- 操作区：继续生成、进入编辑器、下载原始图。
- 最新导出区：每种格式最多展示最新一份；后端保存失败的本地下载不进入此区。

**状态与动作**

| 状态 | 表达 | 允许动作 |
| --- | --- | --- |
| active 且有成功图 | 正常详情 | 满足生成前置条件时继续生成；编辑、下载 |
| failed_empty | 无成功图与最后错误摘要 | 修改并重试、移入回收站 |
| 已达 10 张成功图 | 历史上限提示 | 编辑、下载；不再追加生成 |
| trashed | 回收站标识 | 恢复、永久删除；不编辑 |
| state_version 冲突 | 版本冲突条 | 刷新后继续 |
| 加载失败 | 不展示部分可编辑数据 | 重试、返回列表 |

项目比例创建后固定。继续生成不提供改变比例的控件。继续生成入口始终保留，但受项目 10 张成功图上限、模型运行时可用性、点数、同账号单一 queued / running 任务和 storage full / unavailable 约束；条件不满足时禁用入口，并在入口旁说明具体原因和允许动作。

## 编辑器

### 总体布局

编辑器使用固定三栏框架：

- 顶部工具栏：56 px。
- 左栏：280 px，素材与底图来源。
- 中央：自适应画布工作区。
- 右栏：320 px，当前对象或底图参数。
- 底部状态行：32 px，缩放、对象计数和键盘状态。

1920 × 1080 下，画布完整可见且工具栏不换行。可用宽度缩小时左右栏各自内部滚动，不挤压画布到不可操作尺寸。

### 顶部工具栏

从左到右：

- 返回项目。
- 项目名与比例。
- 撤销、重做。
- 保存状态。
- 预览。
- 导出。

保存状态固定占用至少 128 px，覆盖：

| 状态 | 显示文案 | 图标 / 色彩 | 行为 |
| --- | --- | --- | --- |
| dirty | 有未保存修改 | Circle / Ink | 允许继续编辑，离开需确认 |
| saving | 正在保存 | LoaderCircle / Info | 保持布局，禁止重复手动保存 |
| saved | 已保存 | CircleCheck / Success | 显示最近保存时间 |
| failed | 保存失败 | CircleX / Danger | 显示重试；离开与刷新按失败规则提示 |
| conflicted | 版本冲突 | GitCompareArrows / Danger | 编辑区转只读，进入冲突处理 |

### 左栏

左栏使用文本标签，不使用数字编号：

- 底图
- 历史
- 文字模板
- 普通贴纸
- 色卡
- 动态贴纸

底图显示当前生成图和可用历史图。切换底图前显示说明：“覆盖元素会保留，底图编辑参数将重置。”用户确认后执行。

历史区按项目历史顺序显示，不能绕过项目 10 张成功图上限。素材列表使用虚拟滚动、懒加载和稳定缩略尺寸；内部预览账号只在授权素材上看到“预览”标识。

素材加载失败时：

- 已加载素材继续可用。
- 失败分区显示重试。
- 只读素材根异常时显示“素材暂不可用”，不显示绝对路径。
- 下架素材不得用于新添加；项目已有引用仍按保存版本渲染。

### 中央画布

- 画布背景为 Cool Gray 100，真实输出区域为白色或当前底图。
- 固定宽高比容器避免图片加载时跳动。
- 支持选择、移动、缩放、旋转、翻转、透明度、复制、层级、对齐吸附、循环选择、长按候选、多选和框选。
- 对齐参考线使用 Focus 蓝，吸附结果同时有视觉和短暂文字提示。
- 长按候选在指针附近显示对象列表，键盘用户可通过“循环选择”命令打开同一列表。
- 覆盖元素达到 50 个时，新增相关动作禁用并说明上限。

明确不提供：

- 图层面板。
- 隐藏。
- 锁定。
- 编组。

层级调整只作用于当前选中对象，通过置顶、上移、下移、置底命令完成。

### 右栏

右栏标题随选择变化，但宽度不变：

- 未选择对象：画布摘要和底图参数。
- 选择底图：裁剪、适配、亮度、对比度、饱和度、色温、固定滤镜。
- 选择文字：内容、模板允许的文字样式和对象变换。
- 选择贴纸 / 色卡 / 动态贴纸：对象变换、透明度和素材允许参数。
- 多选：对齐、分布、共同变换和删除。

数值控件使用滑杆与数值输入同步。拖动时画布即时预览，松开形成一个撤销记录；键盘步进结束后同样合并为合理的撤销单元。

### 编辑器状态

| 状态 | 中央区 | 顶部动作 | 允许动作 |
| --- | --- | --- | --- |
| 正常 | 可编辑 | 保存、导出可用 | 全部编辑 |
| 初次加载 | 固定画布骨架 | 导出禁用 | 返回项目 |
| 素材分区加载失败 | 画布保持可编辑 | 保存、导出可用 | 重试素材，编辑已有对象 |
| dirty | 可编辑 | 显示有未保存修改 | 保存、导出前确认 |
| saving | 可编辑但保存动作锁定 | 显示正在保存 | 继续本地编辑，按队列保存 |
| failed | 保留本地当前状态 | 显示保存失败 | 重试、按规则本地导出、返回需确认 |
| conflicted | 只读遮罩，显示本页版本和后端新版本 | 仅一次本地导出与刷新可用 | 本地导出一次、刷新最新版本 |
| storage full | JSON 保存仍按上游允许，二进制写入提示 | 导出可客户端下载 | 编辑、保存 JSON、客户端下载 |
| storage unavailable | 保留当前内存状态，保存 failed | 本地导出按上游可行性提示 | 查看、尝试本地下载、诊断 |

同机多标签发生 state_version 冲突时，不提供合并、覆盖后端或继续编辑。旧页只读，允许一次本地导出当前内存版本，然后必须刷新本地后端最新版本。关闭冲突提示不能恢复编辑。

### 离开与崩溃边界

- dirty：离开弹层提供“保存并离开”“不保存离开”“继续编辑”。
- saving：等待当前保存结果后再决定离开。
- failed：明确未写入本地后端；提供重试、按规则本地导出和继续编辑。
- conflicted：只允许一次本地导出和刷新最新版本，不提供覆盖。
- 强制刷新、关闭页面或浏览器崩溃时，不承诺恢复未提交私有草稿。

## 导出

导出使用 640 px 弹层。

**控件顺序**

- 格式分段控件：JPG / PNG。
- JPG 质量：滑杆和数值输入；选择 PNG 时隐藏且不保留为可聚焦控件。
- 输出尺寸与预计文件信息。
- 未提交修改确认区。
- “导出并下载”主按钮。
- 取消。

如果存在未提交文字或样式修改：

- 弹层显示“导出前需要提交当前修改”。
- 用户确认后形成一次撤销记录，再用提交后的同一画布状态合成。
- 用户取消时不提交，也不导出。

**结果矩阵**

| 客户端合成 | 浏览器下载 | 后端最新成品保存 | 结果表达 |
| --- | --- | --- | --- |
| 成功 | 成功 | 成功 | “已下载并保存为最新成品” |
| 成功 | 成功 | 失败 | 明确“文件已下载，但未保存为最新成品”；latest_exports 不更新 |
| 成功 | 失败 | 未开始或失败 | 显示浏览器下载失败，允许重新下载同一次合成结果 |
| 失败 | 未开始 | 未开始 | 显示合成失败，返回编辑器检查 |
| 冲突页允许的一次导出 | 成功或失败 | 不覆盖后端 | 明确“仅下载本页版本，未写入项目” |

下载与后端持久化必须来自同一次合成。后端保存失败不能撤回已成功的客户端下载，也不能假装 latest_exports 已更新。每种格式只保留最新一份后端记录。

焦点顺序：格式 → JPG 质量 → 修改确认 → 导出并下载 → 取消。结果消息通过 polite live region 宣读；失败通过 assertive。

## 点数

### 点数明细

**布局**

- 当前可用点数。
- 冻结点数说明。
- 明细表：时间、事件、变动、任务 / 管理操作引用、余额。
- 筛选：日期、事件类型。

**状态**

- 空：显示“暂无点数变动”，不提供购买入口。
- queued / running 冻结：用“已冻结”状态，不算作已扣除。
- succeeded：显示实际结算。
- failed / rejected：显示对应释放，避免看起来重复加点。
- 加载失败：保留上次余额并标明更新时间，涉及新提交时仍以服务端实时校验为准。

upstream_cost_reconciliation 只用于后台诊断与本地监控，不改变 Dada 点数处理，也不在普通用户点数页显示为任务状态或点数状态。

普通用户不能调整点数。

## 设置与账号注销

### 设置

区段：

- 个人资料：创作署名、社交 ID。
- 账号：邮箱只读，登录与状态摘要。
- 本机数据：固定提示、容量状态、主动下载建议、诊断摘要入口。
- 注销账号。

本机数据区必须持续显示原文：

> 测试数据仅保存在本机，不自动备份，也不会迁移到正式系统。

同时说明数据依赖当前 Windows 用户登录和文件系统权限，不提供 Dada 应用层加密或云备份；机器损坏、重装或删除 LocalDataRoot 后不可恢复。界面只显示逻辑位置说明，不显示绝对路径。

### 注销

注销入口放在设置末尾危险区，不与退出登录相邻。流程：

- 打开 640 px 确认弹层。
- 展示影响范围、不可恢复内容和匿名保留规则。
- 输入指定确认词或账号邮箱。
- 再次获取验证码并验证。
- 提交后显示处理中，不允许关闭重复提交。
- 成功后结束普通用户会话并返回登录。

失败保留确认弹层和非敏感输入，按稳定错误显示重试动作。注销不提供将可编辑项目导入未来正式系统的承诺。

## super_admin 登录与框架

### 管理员登录

独立 URL、独立会话和独立 audience。页面使用白底、黑色字标和窄荧光黄顶条，不使用创作艺术带。

字段：

- 管理员邮箱。
- 验证码。
- 获取验证码。
- 登录。

邮箱不在管理员白名单时，发码前按服务端结果阻断。错误文案不暴露某邮箱是否属于普通用户。普通用户登录成功不能跳入后台。

焦点顺序：邮箱 → 获取验证码 → 验证码 → 登录 → 返回普通用户登录。

### 后台框架

- 左侧导航 216 px，固定在视口。
- 顶部 52 px，显示页面标题、系统总体状态、管理员账号菜单。
- 主内容区优先使用表格和无框分区。
- critical/full/unavailable 容量条固定在主内容顶部。
- 服务 degraded 可聚合为顶部“有异常”入口，但详细影响仍在对应页面。
- 后台不显示创作、项目和编辑器入口。
- 后台身份域不能把当前 super_admin 会话切换为普通用户。若同一自然人另有独立普通账号，必须退出后台并从普通用户登录入口进入普通端；普通账号与 super_admin 仍是独立身份，不能原地提升或共用会话。

## 后台总览

总览是运营状态摘要，不做营销式仪表盘。使用一列关键状态带和两列紧凑数据区：

- 当前普通用户数与名额。
- queued / running 任务。
- 上游成本核对待人工核对数量和最早等待时间；该项来自 upstream_cost_reconciliation = pending_manual_review，不作为 GenerationJob 状态或点数状态显示。
- 三模型配置默认、运行时可用数量和当前推荐。
- LocalDataRoot 容量。
- Resend、高德、AI 网关、Worker、素材根状态。
- 最近后台操作。
- 需要处理的贴纸清理任务。

每个摘要都链接到唯一负责页面。空状态代表“当前无待处理项”，不能与加载失败混淆。

## 用户管理

**布局**

- 搜索与账号状态筛选。
- 用户表：脱敏邮箱、创作署名、社交 ID、状态、点数、注册时间、最近活动。
- 行动作：查看、停用 / 恢复、调整点数。

**用户详情抽屉**

- 账号资料。
- 项目与任务计数，不直接显示私有图片。
- 点数摘要与最近流水。
- 管理操作历史。

调整点数弹层要求：

- 正负方向明确。
- 数值、原因必填。
- 提交前显示调整前后余额。
- 处理中禁止重复提交。
- 成功后更新余额和审计摘要。

普通后台查看不自动打开完整提示词或私有图片。需要私有内容时只能进入受保护的生成记录流程。

## 邀请码

页面含邀请统计、筛选和表格：

- 邀请码脱敏显示。
- 状态。
- 创建时间、过期时间。
- 使用账号和使用时间。
- 创建人。

创建弹层只显示 PRD 允许字段。复制邀请码为低风险 Toast；禁用、过期或已用状态不能复制成“可用”。名额已满时创建或使用相关动作按后端规则禁用并说明。

## 模型

### 模型列表

每个模型一行，分别显示：

- 模型 ID 与显示名。
- configured enabled。
- configured default。
- recommendation_priority。
- contract_validation_status。
- runtime availability 及 reason、checked_at。
- 当前是否为 recommended_model_id。
- 成本、比例和参考图能力摘要。
- config_version。

“默认”“推荐”“运行时可用”必须是三个独立列，不用一个徽标覆盖。

### 完整配置集合编辑

模型配置以完整集合弹层或页面编辑，不提供逐行立即保存。顶部显示 config_set_version。

规则：

- 始终恰好一个已启用默认模型。
- recommendation_priority 为唯一正整数，不能重复。
- 停用非默认模型可直接纳入候选集合。
- 停用当前默认模型时，同一操作必须先指定另一个已启用、合法的默认模型。
- 保存以完整配置集合原子提交；任何字段失败整次不写入。
- 保存时版本冲突映射 MODEL_CONFIG_VERSION_CONFLICT，用户刷新最新集合后重新编辑。

固定错误动作：

| message_key | 界面动作 |
| --- | --- |
| MODEL_DEFAULT_REPLACEMENT_REQUIRED | 聚焦“替代默认模型”，不允许提交 |
| MODEL_DEFAULT_REPLACEMENT_INVALID | 标出替代模型不可作为默认的原因 |
| MODEL_RECOMMENDATION_PRIORITY_INVALID | 聚焦首个非正整数或缺失优先级 |
| MODEL_RECOMMENDATION_PRIORITY_CONFLICT | 同时标出重复优先级行 |
| MODEL_CONFIG_VERSION_CONFLICT | 整页阻断保存，提供刷新最新配置 |

外部服务临时异常只更新运行时可用显示，不自动修改 enabled、is_default 或 recommendation_priority。恢复后 recommended_model_id 可重新派生，但界面不把结果写回配置。

## 素材

素材页分为：

- 普通贴纸。
- 素材版本与发布。
- 历史文件清理。

### 普通贴纸

表格或缩略网格支持 part、状态、来源和稳定 ID 筛选。管理员上传流程：

- 选择 PNG / WebP。
- 填写稳定 ID、既有 part、顺序、启停和可选内部名称。
- 上传前显示原图将写入 LocalDataRoot，缩略图由 Dada 生成。
- 原图和缩略图都计入 managed_content_bytes。
- 只读规范素材库明确显示“不计入本机 5 GB 内容额度”。

storage full / unavailable 时，选择文件和提交上传均禁用，缩略图生成不启动。已有素材仍可查看和按规则下架。

下架只阻止新添加；已有项目引用保持可渲染。页面不能提供“下架并立即删除文件”的组合动作。

### 素材版本与发布

- 版本表显示稳定 ID、版本、状态、白名单范围、引用计数和发布时间。
- passed、internal_preview 与公开可见性分列展示。
- 发布、撤回和启停使用后端合法状态；UI 不创建额外“半发布”状态。
- 发布失败保留候选配置并显示具体 message_key。
- 只读素材根校验失败时暂停依赖动作，提供重新配置指引或诊断入口，不自动复制素材。

### 历史贴纸文件清理

清理是独立流程，不能藏在下架动作中。

| 阶段 | 页面表达 | 允许动作 | 容量显示 |
| --- | --- | --- | --- |
| 候选查询 | 列出历史原图、缩略图、预计字节和引用摘要 | 选择候选、刷新 | 不变 |
| 确认 | 显示文件数量、总字节、不可恢复说明 | 确认并提交、取消 | 不变 |
| 引用复核冲突 | 整批拒绝，列出引用类型与对象 ID 的安全摘要 | 打开引用对象、刷新候选 | 不变 |
| 已排队 | 显示 cleanup job 和排队时间 | 查看任务 | 不变 |
| 物理清理中 | 显示处理进度，不允许重复提交 | 查看任务 | 不变 |
| 物理清理失败 | 显示已处理 / 未处理摘要和重试条件 | 按后端结果重试或诊断 | 重新计量前不乐观减少 |
| 重新计量 | 显示“正在重新计量本机内容” | 等待 | 使用旧值并标注 |
| 完成 | 显示实际释放与新容量状态 | 返回列表 | 以后端新计量为准 |

固定错误动作：

| message_key | 界面动作 |
| --- | --- |
| ASSET_HISTORY_REFERENCE_CONFLICT | 阻断整批清理，展示安全引用摘要 |
| ASSET_CLEANUP_CANDIDATE_STALE | 放弃旧候选，要求重新查询与确认 |
| STORAGE_CAPACITY_EXCEEDED | 阻断会新增受管二进制的动作，打开存储管理 |

每个阶段在后台操作审计中有记录。无引用只是候选条件，不代表系统可自动清理；必须由 super_admin 显式确认。

## 内部预览

页面管理：

- 预览批次。
- 批次内素材版本。
- 授权普通用户账号。
- 生效时间与状态。

授权对象仍是普通用户账号。界面不得创建“内部预览管理员”或单独角色。普通用户端仅在已授权批次范围内多显示素材，并在缩略项上加“预览”标识；不出现管理入口。

取消授权后，用户不再能新添加预览素材；已有项目引用按上游版本规则处理。后台变更必须显示影响范围并写入后台操作审计。

## 生成记录与私有内容

### 默认列表

生成记录表默认显示：

- 任务 ID。
- 脱敏账号。
- 模型。
- 比例。
- 状态。
- 上游成本核对状态，与任务状态分列；pending_manual_review 显示为“待人工核对”。
- 点数结算状态。
- 创建与完成时间。
- 错误类别。

默认隐藏：

- 完整提示词。
- 参考图。
- 生成图片。
- 其他私有正文。

列表筛选和普通详情摘要不触发私有内容访问。

### 私有内容告知

管理员首次进入私有内容区域时，后端按 super_admin 身份与当前告知版本校验。未确认时显示阻断弹层：

- 标题“查看私有内容前请确认”。
- 告知版本和生效时间。
- 可查看范围、自动审计、最小化查看和禁止外传说明。
- “确认并进入”主按钮。
- “返回生成记录”次按钮。

确认成功后由后端持久记录。相同管理员、相同版本不因新标签页、重启、重登或换浏览器再次提示；告知版本升级后重新提示。前端 session 或 localStorage 不能作为确认权威。

若后端返回 PRIVATE_CONTENT_NOTICE_ACK_REQUIRED，立即退出私有区域并打开告知弹层。

### 逐次访问

告知确认不替代逐次访问审计。每个完整提示词、参考图或生成图片入口统一显示：

> 打开并记录审计

动作流程：

- 入口附近只显示对象类型、自动审计提示和最小化查看说明；不要求填写原因，也不增加逐次确认。
- 用户点击。
- 后端先写 PrivateContentAccessLog。
- 审计成功后返回内容。
- 审计失败则不打开内容。

图片默认使用低信息占位，不在 hover、列表预取、键盘聚焦或浏览器缓存预览时自动加载。完整提示词不进入页面初始 HTML。关闭内容后回到安全摘要，页面不把正文留在其他列表行。

## 服务与存储

页面分为五个无框区段：

- Resend。
- 高德。
- AI 网关。
- Worker / API。
- LocalDataRoot 容量。

### 服务区段

每个服务显示：

- configured / paused 等后台允许状态。
- 最近健康检查时间。
- 影响范围。
- 当前错误安全摘要。
- 允许的暂停、恢复或重新检查动作。

密钥只显示是否已配置和安全引用版本，不显示值。上游响应脱敏，不显示完整请求正文。

AI 网关按模型级、账户级或 unknown 影响展示。任何临时停用都只影响 runtime availability；页面显式提醒“不修改配置默认与推荐优先级”。管理员确认真实余额恢复后，按后端允许动作恢复运行时状态并审计。

### LocalDataRoot

显示：

- storage_status。
- managed_content_bytes / 5 GB。
- 80% 和 90% 阈值刻度。
- last_measured_at。
- 受影响动作清单。
- 项目清理与历史贴纸清理入口。
- 重新计量状态。

不显示绝对路径；只显示“当前 Windows 用户的 Dada 本机数据目录”等逻辑说明。只读规范素材库容量单独显示为参考信息，并标注“不计入 5 GB”。

full / unavailable 时，页面顶部和该区段同时显示阻断原因。恢复按钮只有在后端允许且已完成物理清理、可写检查和重新计量后出现；前端不能手工把状态改成 active。

## 审计

审计拆成两个同级标签，不混在一张表：

- 后台操作审计。
- 私有内容访问审计。

### 后台操作审计

覆盖用户状态、点数、邀请码、模型完整配置集合、运行时恢复、素材发布、贴纸清理各阶段、内部预览、服务操作等。列：

- 时间。
- 管理员。
- 操作类型。
- 对象安全摘要。
- 结果。
- request / operation ID。

### 私有内容访问审计

列：

- 时间。
- 管理员。
- 被查看任务或项目的安全目标标识。
- 查看内容类型。
- expires_at。

两类表均不显示被访问的完整提示词、图片或密钥。180 天内不可编辑或删除；UI 不提供行内修改、批量删除或清空审计按钮。

加载失败时保留上次结果并标注时间；筛选导出若上游未定义则不提供。搜索只针对允许的标识与摘要，不对私有正文建前端搜索。

## Windows 辅助系统界面

辅助界面属于产品支持面，不属于运营后台或部署 CLI。

### 托盘菜单

状态图标和 tooltip 同时表达：

- 正常运行。
- 启动中。
- API degraded。
- Worker degraded。
- 存储 full / unavailable。
- 启动失败。

菜单顺序：

- 打开 Dada。
- 运行状态。
- 打开诊断。
- 重新启动服务，仅在 Supervisor 允许时显示。
- 退出 Dada。

退出时按工程约束执行优雅关闭。托盘不显示账号私有内容、提示词或完整错误堆栈。

### 启动中

小型 480 px 系统窗口：

- DADA 字标。
- “正在启动本机服务”。
- API、Worker、数据目录三个步骤状态。
- “打开诊断”仅在超过正常等待或发生异常时出现。
- 关闭窗口不等于退出服务；使用明确最小化到托盘行为。

### 启动失败

显示稳定标题、发生时间、安全错误摘要和 correlation ID。允许：

- 重试启动。
- 打开诊断。
- 退出 Dada。

不显示密钥、绝对路径、私有正文或完整堆栈。

### 端口占用

标题“Dada 无法使用固定端口启动”。说明另一个程序或残留实例占用了端口。允许：

- 检查是否已有 Dada 正在运行。
- 重试。
- 打开诊断。
- 退出。

不提供在 UI 中修改端口，不暗切随机端口。

### API / Worker degraded

当 API 可用但 Worker degraded：

- 托盘显示警告。
- 浏览器可进入项目、编辑器和已有内容下载。
- 生成区显示服务异常并禁用受影响动作。
- 诊断页显示 Worker 最近健康检查和有限重启结果。

当 API degraded：

- 浏览器产品页显示全页连接状态，不继续展示可编辑旧数据。
- 提供重试连接和打开诊断。
- 托盘保持可操作。

### 诊断

诊断使用只读窗口或本地支持页，包含：

- 发布版本、支持的 Chrome / Edge major。
- API / Worker / Supervisor 状态与最近检查时间。
- storage_status、容量比例和 last_measured_at。
- 只读素材根校验状态。
- 固定端口状态。
- 最近有限数量的脱敏错误事件。
- correlation ID。
- “复制脱敏诊断”动作。

复制内容必须经过同一脱敏契约，不含：

- 密钥或安全配置值。
- Windows 用户名和绝对路径。
- 邮箱全值。
- 提示词、参考图或生成图片。
- 原始上游请求 / 响应正文。

## 焦点与键盘规范

### 全局

- 每页第一个 Tab 目标为“跳到主要内容”。
- 键盘焦点使用 2 px Focus 蓝外环和 2 px 间隔，在黄色、白色和灰色背景上均清晰。
- 页面导航顺序与视觉顺序一致，不使用正 tabindex。
- 图标按钮提供 aria-label；状态图标提供可读文字。
- Toast 不是焦点目标；其中如有动作，动作进入正常焦点顺序。
- 列表和表格不把整行及内部所有控件同时设为重复焦点。

### 编辑器

焦点区域顺序：

- 跳到主要内容。
- 顶部工具栏。
- 左栏标签与素材。
- 画布。
- 右栏属性。
- 底部状态。

画布获得焦点后，方向键执行已定义的对象微移；Esc 退出当前模式或选择；Delete 删除当前选中对象并保留撤销能力。所有快捷键必须能通过可见菜单完成，不在页面中放“使用说明”式常驻文字。

### 异步状态

- saving、queued、running、重新计量使用 polite live region，仅在状态变化时朗读。
- 保存失败、冲突、浏览器阻断、容量 full / unavailable 使用 assertive live region。
- 进度未知时不用虚假百分比，显示不定进度和开始时间。

## 文案与 message_key 绑定

以下文案固定，不得改写：

| 场景 | 固定文案 |
| --- | --- |
| 本机测试数据 | 测试数据仅保存在本机，不自动备份，也不会迁移到正式系统。 |
| 私有内容入口 | 打开并记录审计 |

稳定 message_key 至少覆盖以下 UI 动作：

| code / message_key | 展示位置 | UI 动作 |
| --- | --- | --- |
| BROWSER_UNSUPPORTED / browser.unsupported | 浏览器引导 | 硬阻断，无继续入口 |
| MODEL_CONFIG_VERSION_CONFLICT | 模型配置 | 刷新完整配置集合 |
| MODEL_DEFAULT_REPLACEMENT_REQUIRED | 模型配置 | 要求同一操作选择替代默认 |
| MODEL_DEFAULT_REPLACEMENT_INVALID | 模型配置 | 修正替代默认 |
| MODEL_RECOMMENDATION_PRIORITY_INVALID | 模型配置 | 修正优先级 |
| MODEL_RECOMMENDATION_PRIORITY_CONFLICT | 模型配置 | 修正重复优先级 |
| PRIVATE_CONTENT_NOTICE_ACK_REQUIRED | 私有内容区域 | 退出内容并要求确认当前版本告知 |
| ASSET_HISTORY_REFERENCE_CONFLICT | 贴纸清理 | 阻断整批清理 |
| ASSET_CLEANUP_CANDIDATE_STALE | 贴纸清理 | 重新查询并确认候选 |
| STORAGE_CAPACITY_EXCEEDED | 所有受管二进制写入 | 阻断写入并打开存储管理 |

后端返回未知 message_key 时，使用安全兜底：

- 标题“操作未完成”。
- 显示 correlation ID。
- 提供重试、返回或诊断中由接口允许的动作。
- 不把未知错误映射成成功、点数已释放或可继续覆盖。

## 关键流程

### 普通用户注册

邀请码与邮箱完整 → 点击获取验证码 → 后端校验邀请码和名额 → 成功发码 → 展开验证码与资料 → 阅读并同意告知 → 最终注册复核 → 进入创作。

任何前置失败都不展开第二阶段。最终复核仍由后端完成，前端展开状态不代表邀请码已占用或注册必然成功。

### 新建创作

进入创作 → 读取模型列表与 recommended_model_id → 首次预选推荐模型 → 输入提示词与比例 → 可选参考图 → 确认模型配置版本和点数 → 提交 → 进入 queued / running 任务 → 成功进入项目，失败按错误动作返回输入。

模型在提交前失效时保留旧选择、阻断提交；用户主动改选并重新确认后才能继续。

### 编辑与导出

打开项目 → 加载画布和素材版本 → 编辑形成 dirty → 保存进入 saving → saved 或 failed / conflicted → 打开导出 → 如有未提交修改则明确确认 → 同一次客户端合成用于下载和后端最新成品保存 → 分别反馈下载和持久化结果。

### 默认模型替换

进入模型配置 → 编辑完整集合 → 尝试停用当前默认 → 必须选择新的已启用合法默认 → 校验唯一正整数 recommendation_priority → 提交带 config_set_version 的完整集合 → 原子成功或整次失败。

外部临时不可用不走此流程，也不修改配置集合。

### 私有内容访问

进入生成记录 → 默认只看安全摘要 → 打开私有区域 → 后端检查管理员身份与告知版本 → 必要时确认告知 → 点击具体对象“打开并记录审计” → 后端先写逐次访问审计 → 成功后才返回正文或图片。

### 历史贴纸清理

查询候选 → 选择与确认 → 后端复核所有有效引用 → 有引用整批拒绝 / 无引用创建清理任务 → 排队 → 物理清理 → 重新计量 → 更新容量状态 → 展示真实释放结果。

## 综合状态矩阵

| 页面 / 区域 | 正常 | 空 | 加载 | 失败 | 禁用 | 冲突 | 容量 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 登录 / 注册 | 可发码与提交 | 字段初始空 | 发码 / 登录中 | Resend、验证码、邀请错误 | 前置字段或告知未完成 | 不适用 | 非存储相关 |
| 创作工作台 | 可生成 | 无项目艺术带 | 模型 / 任务加载 | 服务、参考图、生成失败 | 模型、点数、单任务等前置不满足 | 模型配置变化需重确认 | critical 提示；full / unavailable 阻断 |
| 当前任务 | 状态与结果 | 无活动任务 | queued / running | failed / rejected 按稳定错误动作 | 不允许第二任务 | 不适用 | storage 错误按任务结果显示 |
| 项目列表 | active 项目 | 无项目或筛选空 | 卡片骨架 | 保留旧列表重试 | 20 项目上限 | state_version 刷新 | 删除后重计量，不乐观减少 |
| 编辑器 | 三栏可编辑 | 无成功图不能进入正常编辑 | 画布 / 素材加载 | 保存失败或素材失败 | 50 元素等上限 | 旧页只读、一次导出、刷新 | full 可按规则编辑；unavailable 保存失败 |
| 导出 | 下载并保存 | 不适用 | 合成 / 持久化中 | 下载与后端保存分别反馈 | 无画布或冲突次数用尽 | 冲突页只本地导出 | 后端失败不影响已下载文件 |
| 后台表格 | 数据与动作 | 无记录 | 稳定行骨架 | 保留旧数据 | 权限、状态前置 | 配置 CAS 冲突 | 顶部持续状态条 |
| 素材上传 | 上传并生成缩略 | 无上传素材 | 上传 / 处理 | 文件或编译失败 | 类型、状态、权限 | 稳定 ID / 版本冲突 | full / unavailable 阻断 |
| 私有内容 | 告知已确认且逐次审计 | 无记录 | 审计写入中 | 审计失败不打开 | 未确认当前版本 | 版本升级重新确认 | 不适用 |
| 贴纸清理 | 候选到完成 | 无可清理文件 | 排队 / 清理 / 重计量 | 失败按任务结果 | 无选择或无权限 | 引用或候选过期 | 完成重计量后更新 |
| 辅助系统 | 正常托盘 | 不适用 | 启动中 | 启动失败 | 不允许的重启动作隐藏 | 端口占用 | full / unavailable 告警 |

## AC 界面追踪

| AC | 主要界面落点 | 必验 UI 行为 |
| --- | --- | --- |
| AC-24 | 浏览器不受支持引导、产品路由门禁、诊断 | 非支持品牌 / major / 识别失败均硬阻断，无继续入口 |
| AC-25 | 私有内容告知、逐次访问、私有内容访问审计 | 身份+版本持久确认；升版重提示；每次打开独立审计 |
| AC-30 | 模型完整配置集合、创作模型选择 | 唯一默认、优先级、原子替换、运行时推荐分层 |
| AC-31 | 普通贴纸上传、历史文件清理、容量条 | 原图 / 缩略图计量；full / unavailable 阻断；显式清理 |
| AC-35 | 项目详情、编辑器保存、导出 | 项目与成品保存失败动作清晰，不假成功 |
| AC-36 P0-A 子集 | 编辑器冲突 | 同机多标签旧页只读、一次本地导出、刷新最新版本 |
| AC-50 | 后台操作审计、私有内容访问审计 | 两类审计分离；清理全阶段有记录；正文不进入审计列表 |
| AC-51 | 模型运行时状态、服务与存储、当前任务 | 临时不可用不回写默认 / 启停 / 优先级；推荐重新派生 |
| AC-55 | 全局容量条、存储页、上传、生成、导出、清理 | 80% / 90% / 等于 5 GB / 超限 / unavailable 动作一致 |
| AC-56 | 本机数据提示、设置、诊断、导出 | 无备份、不迁移持续可见；主动下载保留在下载目录 |

## 明确不做

本阶段不设计或暗示以下能力：

- 手机、平板或移动端布局。
- 远程访问、局域网访问、其他设备访问。
- 跨设备同步、账号云端同步、云备份。
- P0-B 公司系统、正式账号合并或数据迁移。
- 可编辑项目归档、项目包导入导出。
- 部署人员 CLI 或端口配置 UI。
- super_admin 普通创作入口。
- 内部预览独立角色或后台权限。
- 图层面板、隐藏、锁定、编组。
- 自动清理历史上传贴纸文件。
- 模型失效后的静默替换。
- 在浏览器不支持页继续进入产品。
- 对只读规范素材库计入 managed_content_bytes。
- 高保真视觉稿、艺术带最终图片和前端实现。

## 1080p 验收清单

高保真与实现阶段必须在真实 Windows 当前支持 Chrome / Edge 上逐页检查：

- 1920 × 1080 下顶部导航、容量条、页面内容和固定本机提示不重叠。
- 登录注册第二阶段完整展开后，主动作可通过滚动到达，艺术带不挤压表单。
- 编辑器三栏、顶部保存状态和底部状态行不遮挡画布。
- 最长中文状态、模型 ID、项目名和 message_key 映射不撑破控件。
- 表格横向内容有明确滚动与固定关键列，不产生不可见行动作。
- 弹层在可用视口内，标题与底部动作固定，正文可滚动。
- 当前任务、容量条和服务异常同时出现时仍保持清晰层级。
- 键盘可到达全部动作，弹层焦点不会逃逸，关闭后焦点正确返回。
- 保存 failed / conflicted、storage full / unavailable、模型失效时没有隐藏可写入口。
- 图片骨架使用稳定宽高比，加载、错误和实际图片切换不引起布局跳动。
- 200% 浏览器缩放下不出现文字覆盖、不可关闭弹层或不可达主动作；允许页面滚动，不缩小字体规避问题。
- Chrome 与 Edge 的焦点、下载和文件选择行为均按同一流程验收。

## 文档确认后的下一阶段

本稿确认后再进入低保真画布文件或可交互原型制作，并以本稿为页面与状态依据。高保真阶段补充原创机能风艺术带、真实素材缩略和像素级视觉 QA，但不得借视觉深化改变本稿绑定的产品状态、权限、错误动作、固定文案、API 语义或 AC。
