63 KiB
Dada UI Design
| 文档项 | 内容 |
|---|---|
| 文档版本 | 1.0 |
| 产品范围 | P0-A Windows 单机版 |
| 设计状态 | 低保真交互与界面规范 |
| 主要画布 | Windows 当前稳定版 Chrome / Edge,1920 × 1080 优先验收 |
| 产品需求权威 | PRD.md v1.10 |
| 功能与状态导航 | FeatureSummary.md 1.1 |
| 工程与接口约束 | DevelopmentPlan.md 1.1 |
| 本阶段产出 | 页面、布局、组件、状态、文案、焦点顺序和可访问性规范 |
| 本阶段不产出 | 高保真视觉稿、前端代码、移动端、P0-B、部署人员 CLI |
输入文件冻结校验:
| 文件 | SHA-256 |
|---|---|
| PRD.md | 31F93674DF1A90B557FEE3AA9E74FB084E246CA8FE09F6BD4B1DC9D56D606565 |
| FeatureSummary.md | 6F80E272AAB08A5525B54501D83F16A4F6A7A170596947BBC25F1DA54F2FE844 |
| DevelopmentPlan.md | 7C579E9DF8D00DA9333F587D05FC966123437EE68575D87D73C903C1487FA9D6 |
文档使用规则
本稿只解释上游需求如何落到界面,不创建新的产品角色、状态、接口或错误动作。出现冲突时,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。