# 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。