Files

11 KiB

桌面对话框、反馈与长任务交互规范

目录

  1. 选择反馈层级
  2. 对话框交互契约
  3. 焦点、按钮与关闭
  4. 确认、删除与未保存决策
  5. 进度、取消与后台任务
  6. 错误、重试与部分成功
  7. 通知、信息条与临时反馈
  8. 异步与生命周期
  9. 测试矩阵
  10. 交付检查清单

1. 选择反馈层级

使用能解决问题的最低干扰层级:

场景 优先形式 不应使用
字段格式或局部操作错误 字段附近/组件内联反馈 应用级模态错误框
页面加载失败、离线、权限或可恢复警告 页面内信息条/Banner,带操作 自动消失 Toast
简短、可忽略、无需立即操作的完成状态 非模态临时通知或状态区 阻塞对话框
与当前对象相关的附加选择/详情 Flyout/Popover/非模态面板 无原因的全窗口模态
应用无法安全替用户决定 窗口级模态对话框 隐藏在状态栏的提示
永久破坏贵重资产、安全/支付等高风险决策 明确后果的确认对话框 含糊“确定/取消”
长时间但可继续其他工作的任务 页面/任务中心进度,可后台化 锁住整个应用的旋转圈
短暂阻塞且必须完成才能继续 局部遮罩或模态进度,支持取消时提供取消 假装确定进度的百分比

同类、重复或持续状态应占据稳定界面位置,不要每次弹出。对常见可恢复操作优先直接完成并提供撤销,而不是反复确认。

2. 对话框交互契约

创建对话框前定义:

  • 为什么必须阻塞,以及阻塞当前窗口还是整个应用;
  • 标题、简短说明、影响对象和所需决策;
  • 主操作、次操作、取消/关闭、默认按钮与危险按钮;
  • 初始焦点、Tab 循环、Enter、Escape 和窗口关闭按钮行为;
  • 验证、提交中、失败、重试和成功后的关闭条件;
  • 所有者窗口、重复打开防护和对话框生命周期;
  • 屏幕阅读器名称、描述和状态播报。

内容与动作

  • 标题直接说明决策,如“删除 3 个项目?”或“保存更改后关闭?”。
  • 正文说明不可见后果和影响范围,不重复标题或堆叠技术错误。
  • 按钮使用具体动词:“删除”“覆盖”“保存并关闭”,不要让危险操作叫“确定”。
  • 常用安全操作是视觉主按钮;不可恢复操作与其他按钮分离,并使用一致的危险样式。
  • 超过三项复杂选择通常应改成任务页面或向导,不把应用页面塞进对话框。
  • 对话框内只有完成决策所需内容;帮助和详细日志使用可展开区或外部入口。

3. 焦点、按钮与关闭

打开

  • 将焦点移入对话框。短对话框聚焦最安全且最可能的操作;复杂内容先聚焦标题/说明或第一个字段。
  • 不可逆决策默认聚焦取消或最安全操作,除非平台和业务有充分理由。
  • 记录调用者;关闭后将焦点返回调用者,调用者消失时返回逻辑后继。
  • 模态界面必须让背景在视觉和交互上都不可用;不能只添加 aria-modal 或半透明遮罩。

操作

  • Tab/Shift+Tab 留在模态对话框内部;非模态面板允许按明确规则离开。
  • Enter 只触发当前有效的默认按钮;多行输入中默认换行。
  • Escape 执行取消/关闭,不提交或丢失输入;无法取消时解释原因并提供可见关闭路径。
  • 右上角关闭、Alt+F4、Escape 和取消按钮使用同一取消协议。
  • 提交中防重复操作;若可取消,取消请求与关闭 UI 是两个阶段,等待任务确认停止或忽略结果。

关闭

  • 成功、取消、失败和窗口关闭返回可区分结果,调用方不能把所有关闭都当成功。
  • 验证失败或提交失败时保持对话框打开并保留输入。
  • 对话框关闭时清理订阅、计时器和任务回调,防止访问已销毁界面。
  • 避免同时打开多个相同对话框;重复请求应激活已有实例或排队。

4. 确认、删除与未保存决策

何时确认

仅当操作不可逆、代价高、影响范围难以预见、涉及安全/支付,或应用无法安全提供撤销时确认。频繁删除草稿、移除可恢复项等优先立即执行并提供撤销。

确认内容必须包含:动作、对象、数量、不可逆后果和必要条件。不要使用双重否定或“是否确定?”作为全部说明。

未保存内容

  • 使用“保存 / 不保存 / 取消”而不是模糊的“是 / 否”。
  • 多文档退出列出受影响文档,并支持安全的“全部保存”与失败项处理。
  • 保存失败保持窗口/标签打开,提供重试、另存或恢复内容出口。
  • 不保存仅放弃明确列出的本地更改,不删除远程数据或其他自动保存版本。
  • 关闭、后退、切换账户和应用退出共享同一未保存协调器。

覆盖与冲突

  • 文件或数据已变化时显示来源、时间和可理解差异,提供保留本地、重新加载、另存/复制或合并。
  • 默认操作选择数据损失最小的方案。
  • 不把版本冲突伪装成普通“保存失败”,也不要静默覆盖。

5. 进度、取消与后台任务

任务状态模型

至少定义 queued、running、pausing/paused(适用时)、cancelling、cancelled、succeeded、failed 和 partially-succeeded。完成、失败与取消是终态,不能仅靠进度条是否消失判断。

进度选择

  • 已知总量且进度可信时使用确定进度,显示完成量/总量或百分比及当前阶段。
  • 总量未知时使用不确定进度,并用具体文本说明正在做什么。
  • 先不确定、后可计算时允许切换为确定进度,但进度不能倒退或长期停在 99%。
  • 极短操作避免闪烁;稍长操作先显示局部忙碌状态,达到明显时长后升级为进度界面。
  • 后台任务显示在稳定任务中心/状态区,可重新找到;通知只作为补充。
  • 多文件/多阶段任务同时显示总体进度和当前项,不用每行一个永久旋转圈。

取消

  • 只有任务真实支持安全取消时显示取消按钮。
  • 点击后进入 cancelling,禁用重复取消,并说明正在停止;不能立即谎称已取消。
  • 定义取消点、已完成工作的保留/回滚、临时文件清理和后端请求撤销。
  • 窗口关闭时明确任务取消、后台继续或转移到任务中心,不能让工作静默中断。
  • 取消后的迟到结果必须被请求 ID/任务状态拒绝,不能重新把 UI 改成成功。

响应速度

  • 所有 I/O、计算和批处理离开 GUI 线程;通过线程安全消息更新进度。
  • 节流高频进度更新,避免每个字节/记录都刷新 UI。
  • 不使用 processEvents() 或嵌套事件循环掩盖阻塞。
  • 任务命令具有幂等/去重策略,双击按钮不能创建重复任务。

6. 错误、重试与部分成功

错误反馈回答:发生了什么、影响什么、用户能做什么、工作是否保留。

错误分类

  • 用户可修复: 指向字段、权限申请、文件位置或设置。
  • 暂时故障: 提供重试、稍后处理、离线或切换服务。
  • 冲突: 提供刷新、比较、合并、另存或放弃本地更改。
  • 不可恢复: 保留诊断 ID/日志出口和安全返回路径,不暴露内部堆栈。

重试

  • 重试只重复失败且安全的部分,保留已完成结果。
  • 不可幂等操作重试前查询实际状态或使用幂等键,避免重复付款、创建或删除。
  • 连续失败不无限弹窗;提供持久错误区和诊断入口。
  • 网络恢复自动重试时显示状态并限制退避;用户手动重试仍可用。

部分成功

  • 显示成功、失败、跳过、取消的数量和对象范围。
  • 允许查看/导出失败详情、重试失败项或撤销成功项(可行时)。
  • 不用绿色“成功”覆盖失败项,也不因少量失败否认全部已完成工作。
  • 批量操作结束后刷新受影响数据,同时保持仍有效的选择和上下文。

7. 通知、信息条与临时反馈

信息条/Banner

  • 用于页面级可恢复问题、离线、权限、过期数据和需要操作的警告。
  • 保持到问题解决、用户关闭或上下文消失;关闭后是否再次出现由状态而非计时器决定。
  • 包含严重程度、简短文本、主要恢复动作和必要时的详情。
  • 出现时不抢焦点,但重要状态通过无障碍实时区域/平台事件播报。

临时通知/Toast

  • 仅用于无需立即响应且不会因错过而阻塞任务的信息。
  • 不承载唯一的撤销入口、关键错误或复杂决策;重要历史可在任务/通知中心找到。
  • 避免连续堆叠相同通知,合并重复事件并限制频率。
  • 自动消失前给足阅读时间;键盘和屏幕阅读器用户能访问需要的操作。

成功反馈

  • 页面内变化明显时无需额外“成功”弹窗。
  • 保存、复制、导出等结果不明显时提供简短状态,并包含位置或下一步。
  • 撤销反馈说明对象与时限;时限结束后命令状态一致,不留下失效按钮。

8. 异步与生命周期

  • 每个对话框/任务有唯一实例或任务 ID、所有者和取消源。
  • 异步完成前核对窗口、页面和对象仍存在,且结果仍属于当前请求。
  • 关闭 UI 不等于工作已停止;分开管理可见状态和任务状态。
  • 应用挂起、退出、网络断开、凭据过期和权限变化时定义持久化/恢复。
  • 错误处理不能在后台线程直接操作 GUI;通过队列信号/调度器返回 UI 线程。
  • 记录必要诊断信息但过滤密码、令牌、个人数据和完整文件内容。
  • 任务完成通知不抢夺用户当前窗口或焦点;需要时提供“打开结果”。

9. 测试矩阵

至少验证:

  1. 内联、页面级、临时通知、Flyout 和模态层级选择是否正确;
  2. Enter、Escape、Alt+F4、关闭按钮、Tab 循环和焦点返回;
  3. 危险操作、可撤销删除、未保存和版本冲突;
  4. 确定/不确定进度、快速完成、长时间停顿和多阶段任务;
  5. 取消请求、取消中关闭、迟到成功、重复提交和应用退出;
  6. 网络失败、权限、超时、部分成功、重试失败和离线恢复;
  7. 多窗口所有者、父窗口关闭和重复打开同一对话框;
  8. 100%–200% 缩放、长文案、高对比度、减少动画、键盘和屏幕阅读器;
  9. 原型与最终桌面实现的按钮、结果、任务状态和错误恢复对照。

10. 交付检查清单

  • 已使用最低干扰层级,不把所有反馈都放进对话框。
  • 对话框的阻塞范围、所有者、按钮、默认/取消和结果明确。
  • 焦点进入、循环、Escape、关闭和返回调用者符合平台行为。
  • 危险操作说明对象与后果,可恢复操作优先撤销。
  • 任务具有完整状态、可信进度、取消协议和重复提交防护。
  • 错误区分可修复、暂时故障、冲突和不可恢复,并保留用户工作。
  • 部分成功显示准确数量并支持失败项恢复。
  • 后台线程不操作 GUI,关闭后迟到回调安全忽略。
  • 键盘、缩放、高对比度和屏幕阅读器已验证。
  • 原型与桌面实现使用同一决策和任务状态契约。