状态:本章为建议,可调整;它承接已确认的真实状态、权限边界、操作反馈与恢复原则。列出的状态是设计语义,不强制某套 API、框架或枚举;PAT-OFFLINE 是代理依用户授权采用的有界文档候选。所有测试与夹具均未执行,不代表已有产品具备全部恢复能力。 更新:2026-10-20
本章维护各组件、任务模式与页面模板的共同状态语言。请求、取消与恢复详见异步执行、结果核查与恢复;访问边界与并发处理详见权限变化、并发修改与保存冲突。
1. 不用一个“加载中”覆盖所有情况
页面可能同时包含已加载的旧数据、正在刷新的一部分、无权查看的字段和正在执行的任务。仅用一个页面级“加载中”标记无法表达这些差异,也容易把局部失败变成全屏不可用。
内容状态先分别描述四个维度;控件与任务的五层组合裁决见第 11 节:
- 数据可用性:尚未请求、加载中、可用、空、部分可用、不可用。
- 数据有效性:当前、正在刷新、已过期或基准变化;具体失效判定由产品提供。
- 访问与操作能力:可查看、只读、暂不可操作、不可访问;原因与披露范围由权限规则决定。
- 动作执行结果:未执行、请求中、处理中、成功、部分成功、明确失败、结果待确认、取消相关状态。
批次生命周期还应与逐项结果分开:已完成部分项目但其他项仍在运行时,批次仍是处理中;批次执行结束而部分结果尚未核实时,说明执行已结束和待确认范围,不能把它们归入失败。
这些维度可以组合。例如“可查看的旧数据+刷新失败”不同于“首次加载失败”,也不同于“已无权访问”。界面应表达对当前任务有影响的组合,而不是机械展示全部技术状态。
2. 共同状态词汇
| 状态 | 含义与必要反馈 | 不应表达成 |
|---|---|---|
| 尚未加载 | 尚未取得数据;说明如何加载或等待 | 0、无记录 |
| 首次加载中 | 当前尚无可用内容,提供范围合适的进度反馈 | 空结果、失败 |
| 后台刷新中 | 仍展示已有内容,同时取得更新 | 整页空白或已最新 |
| 已确认空数据 | 在明确范围与权限下没有记录 | 未知、无权限 |
| 筛选无结果 | 当前条件没有匹配项,可调整条件 | 系统没有任何数据 |
| 部分数据 | 只有部分来源、记录或区块可用 | 完整汇总 |
| 旧数据/基准变化 | 当前内容不再满足产品定义的有效条件 | 仍然最新 |
| 不适用 | 当前对象或情境不适用该字段或步骤 | 零、错误 |
| 无权访问 | 无法展示相应内容;提示受安全策略约束 | 空值或带真实值的禁用控件 |
| 加载失败 | 数据读取未完成,已有内容与新请求分开处理 | 操作执行失败 |
| 执行失败 | 已有可靠依据确认动作未按预期完成 | 所有网络超时 |
| 结果待确认 | 动作可能已执行,尚不能确定最终结果 | 失败并可任意重试 |
| 部分成功 | 批次已确认结束且全部逐项结果已核实,其中既有成功项,也有未成功项;保留各项结果 | 全部成功、仍在运行的中间进度、含未核实项的批次终态 |
批次执行已结束但仍有未核实项时,应说明“执行已结束,部分结果待确认”,单列待确认范围,不以“部分成功”代替核查。
零是数据值,不是状态占位。缺失、未知、无权限、失败和不适用均不能统一用“0”表示。符号可用于高密度呈现,但必须有一致且可访问的解释。
3. 状态放在哪里
状态应尽量贴近受影响范围:字段错误放在字段旁,区块加载失败放在区块内,整个任务不能继续才提升到任务层。页面仍有可用内容时,保留用户可继续使用的部分。
短暂提示适合轻量且无需追溯的反馈;重要错误、部分成功、任务结果及需要用户决定的问题应在当前任务范围内有不随短暂通知消失的查阅位置。是否跨关闭、刷新或进程退出保留,必须按产品实际查询能力、保留期限和当前授权说明;这不是无条件要求已有持久任务服务。缺少离开后核查能力时,说明限制与真实可用的处置路径,仍允许用户理解限制后明确离开,不伪造以后查阅入口;统一遵守导航、深链接与上下文保留的 NAV-03 和浮层组件:对话框、抽屉与提示的 CMP-LAYER。横幅说明跨区块影响,局部提示说明具体影响,不应重复堆叠相同消息。
状态信息至少让用户理解当前情况、影响范围及下一步。技术代码可按需要提供给支持人员,但不替代用户可读说明,也不得暴露内部凭证、受限对象或敏感数据。
4. 冲突状态的呈现优先级
建议先保护访问边界,再保护业务正确性,最后优化阅读连续性:
- 权限已变化:立即停止不再允许的展示与操作;不能为保持画面稳定继续显示受限缓存。
- 任务或对象条件已失效:阻止过期提交,说明当前状态及获准的后续路径。
- 执行结果待确认:优先核查同一动作结果,避免用户重复触发。
- 输入冲突或校验失败:保留允许保留的输入,定位需要处理的问题。
- 旧数据或局部读取失败:在允许的情况下保留可用内容,标明限制并提供刷新。
- 普通加载与提示:不抢夺焦点、不遮挡重要结果或当前工作。
这不是把所有状态合成一条最高优先级提示。需要并列说明时,分别标出范围;例如“草稿仍未保存”与“任务已完成”都可能需要用户理解,但旧提交必须停止。
5. 数据读取与后台刷新
首次加载失败没有可用内容,应提供真实错误与可行重试路径。刷新失败已有旧内容时,可以保留旧内容并说明更新时间或已知限制;不能用空白覆盖旧值,导致上下文丢失。
是否允许继续操作取决于动作是否依赖最新数据。单纯阅读可允许查看旧内容;审批、扣减或其他依赖当前条件的动作需要按产品规则重新核查。没有可靠更新时间时,不伪造“刚刚更新”。
局部刷新不应无故重排用户正在阅读或编辑的内容。新增记录可提示用户查看;确需更新可见内容时,保持对象身份、合理位置与当前输入,说明影响判断的变化。
6. 空状态设计
空状态首先说明“为什么没有内容”。新建空间尚无记录、当前筛选无结果、尚未配置来源、尚未请求数据和无权访问,应使用不同表达。
只有当前角色有权且该动作有助于当前任务时,才提供“创建”“导入”等操作。筛选无结果优先提供调整条件,不能强迫用户创建新记录。在允许披露对象存在的范围内,权限限制不应伪装成普通无结果,也不应泄露受限数量;产品禁止披露存在性时,按权限变化、并发修改与保存冲突的安全错误分类提供统一有限表达,不为解释空状态泄露存在性。
空状态仍应保留当前范围、筛选与必要导航,避免用户丢失“在哪里、查了什么”的信息。
7. 离线与连接不稳定
连接不可用说明通信条件,不自动说明业务数据不存在或某次操作失败。界面应区分读取受阻、草稿未同步与执行结果待确认。
只有实际提供离线读取或编辑能力时,才显示相应可用入口,并说明数据基准、同步状态与冲突限制。恢复网络后,不能自动执行高后果或结果不明的动作;安全自动恢复的读取与写入应分别定义。
持续显示旧数据、保留本地草稿与跨会话恢复均受产品安全和存储政策约束。YUDS 不要求以扩大数据保留来换取无条件恢复。
PAT-OFFLINE:离线读取与同步反馈
代理依用户授权将本节采用为有界文档候选(2026-10-20),文档契约已独立反审;本单元设计未创建、实现未验证、运行未执行。
本模式共同继承 CMP-STATE、原始稿/接受值/写回执的区分、NAV 离开保护、CMP-LAYER 焦点、撤权清理及真实服务能力;异步事件绑定会话、对象、版本、账户与权限代次。标题、目的、状态、可用动作、原因和退出须可获取。秘密不得进入示例或普通日志。
- 前提与输入:逐项声明缓存读取、本地草稿、持久队列、手动同步、自动同步、取消同步、状态查询的有/无;数据基准/时间、范围、保留策略由产品提供。网络连接性、服务可达性、数据新鲜度、写入状态分别记录。
- 状态:
- 连接:在线/离线/连接未知;
- 缓存:无缓存/可读缓存/过期;
- 写入:仅本地草稿/排队未发送/发送中/服务确认/冲突/拒绝/结果未知;
- 同步:空闲/进行中/部分失败/已确认完成。
- 无队列能力时,队列相关状态标为不适用,不展示“稍后自动发送”。
- 契约:
- 可读缓存标明时间与范围,离线不等于空数据;本地保存不称远端保存。
- 保留网络提示,但不反复抢焦点。
- 仅在真实支持时提供同步,并明确范围、进度分母和逐项结果;关闭提示不是取消同步,取消请求不是停止已发写入。
- 重新联网后按真实协议处理排队意图,先核当前身份、权限与基准;未知的已发写入先核查,不能因重连再次发送。
- 队列中的编辑、删除、重排等能力若未定义则不提供,不能以普通列表操作暗改执行顺序。
- 登出或撤权时按产品保留政策处理缓存和待发项,不转移到新身份。
- 最小文档测试(未执行):
- 缓存 v1、离线且只支持本地稿:保存后标为本地未同步。
- 网络已恢复但服务不可达:仍不是同步成功。
- 队列三项中 1 项成功、1 项冲突、1 项未知:不能显示全部完成,也不能重发未知项。
- 由 A 换成 B 后:A 的队列不得作为 B 执行。
- 没有缓存:明确显示不可读,而不是“暂无数据”。
- 设计路由:D02(状态)和 D04(组合)共用这一个 PAT ID,由 D02 主责、D04 复用,不重复计数。
8. 可访问反馈
关键状态不得仅靠颜色、动画或声音表达。文字、图标和语义状态应一致;辅助技术能获知加载、错误、保存及任务结果的变化。
反馈应与重要性相称。后台轮询不应每次都播报相同状态;重要失败或需要用户处理的变化应可感知。仅为播报状态不应反复移动焦点。动效减少、窄容器和文字放大时仍保留状态文字及可执行下一步。
9. 责任划分与状态来源
- 产品规定业务状态、数据有效性、动作条件、权限及恢复政策。
- 执行系统提供可信的授权判断、任务身份、版本或基准信息、实际结果及恢复能力。
- 实现项目负责状态组合、响应顺序、焦点和组件行为正确映射。
- YUDS 维护共同词汇、用户理解、风险表达和验收要求。
不能以隐藏按钮代替授权,以本地时间推断业务结束,以等待足够久推断失败,或以界面提示推断已保存到服务器。
10. 状态矩阵与验收材料
每个重要任务至少提供正常、首次加载、刷新、空、局部失败、无权限、旧数据、冲突、执行失败、结果待确认与恢复后的场景。某状态不适用时,写明理由。
建议记录:触发条件、真实状态来源、可见内容、允许操作、输入与焦点处理、用户下一步和验证结果。测试使用“通过/失败/未执行/不适用”,不能因设计稿画出了状态就写“通过”。
建议验收重点:
- 首次加载、刷新和空结果可区分,旧数据不会冒充最新数据。
- 同页部分成功与局部失败能表达实际范围,不丢失其余可用工作。
- 权限收回后受限内容和操作及时停止,错误不泄露受限事实。
- 请求超时不会被自动认定为执行失败;结果核查和安全重试清楚。
- 实时更新、窄容器、键盘与读屏路径保持任务身份、输入和合理焦点。
11. 五层状态与组合裁决
规则 YUDS-120000-01(状态分层)
第 1 节的数据视角用于描述内容,下表用于裁决控件和任务行为;两者互补,不把所有状态并成单一枚举。
| 层 | 必须区分的事实 | 可信来源及职责 |
|---|---|---|
| 授权 | 可知存在、可读、可改、可执行,及当前安全范围 | 产品安全模型与执行层判断;界面不可自行授予 |
| 业务 | 开放、已封账、已完成、被撤回等真实阶段 | 产品业务结果;看过页面不算推进 |
| 请求 | 读请求加载/失败;写请求在途/结果待确认/已核实 | 对应请求及动作身份;网络异常不是业务失败 |
| 交互 | 可编辑、readonly、disabled、选中、编辑草稿、invalid | 当前能力、值及校验;只读仍可阅读,禁用不等于无权看,校验错误不等于禁用 |
| 视觉 | hover、pressed、focus-visible、强调、局部进度表现 | 指针和焦点事实及语义映射;视觉覆盖不改授权、业务或结果 |
loading 表示范围明确的请求进行中,不自动禁用全部页面;readonly 保留获准值和必要阅读路径;disabled 停止对应触发,但原因仍在可达的邻近说明中;invalid 保留可编辑的错误值并关联错误。无权查看时,不保留含原值的只读或禁用控件。
规则 YUDS-120000-02(组合优先)
第 4 节优先级决定允许展示和执行什么,不代表只显示最高一条消息。先按授权过滤内容,再按业务和结果阻止无效动作;随后呈现输入、选择和焦点。焦点环必须独立于选择底色、错误边界和 hover 可辨;错误用关联文字/图标,选择有语义状态。没有颜色时仍能辨认三者。loading 不能遮住现有错误和已确认回执;disabled 不把失败原因移进无法访问的悬浮提示。状态通知不为每次轮询抢焦点。
规则 YUDS-120000-03(事件归属)
读取结果绑定当前查询代次,旧读响应可被丢弃;写入结果始终先归属原任务和版本,再决定能否在当前位置披露。撤权后停止披露敏感内容,但不能把已发出写入宣布为失败、取消或未发生;保留执行系统持有的真实回执,界面提供安全策略允许的最小状态或获准核查路径。
文档判定夹具
| 规则 | 输入与动作 | 可验预期 | 反例 |
|---|---|---|---|
| YUDS-120000-01 | 金额字段可读不可改,后台刷新;Tab 进入邻近说明 | 获准值可读、只读有原因、刷新只影响其范围,其他合法动作可用 | readonly 当 disabled 删除内容;刷新锁整页 |
| YUDS-120000-02 | 已选行金额 invalid,焦点在该格,同时 hover 与保存中 | 焦点、选择和错误分别可辨,保存的版本与进度明确,错误文字仍可得 | hover 盖掉焦点;spinner 抹掉错误;只用红绿 |
| YUDS-120000-03 | T 在组织 A 写入后切到 B;A 的回执晚到且已撤回 A 权限 | B 不被 A 污染;执行系统回执归 T,前端只披露获准最小信息,不能伪报 T 失败 | 忽略“非当前请求”的写回执;通知泄露 A 名称 |
| YUDS-120000-02 | 任务完成时仍有本地未保存草稿 | 停止旧推进,分别说明任务已完成及获准保留的草稿,焦点到合理可用位置 | 完成提示覆盖草稿丢失;仍允许旧提交 |
上述均是文档判定夹具,实际视觉组合、焦点、读屏及执行层验证未执行。色彩配对仍依色彩语义与可辨状态,不新增状态颜色别名或组件 API。
相关页面:异步执行、结果核查与恢复 · 权限变化、并发修改与保存冲突 · 表单校验、草稿与提交 · 端到端任务旅程与验收案例