状态:本页承接已确认的导航职责和“只恢复仍有效上下文”的方向;具体契约(含第 9 节 NAV 规则工作稿)与验收细则为建议,可调整。保留能力以产品与实现实际提供的范围为准,不承诺跨设备、离线或无限期恢复;第 8 节验收场景与 NAV-05 夹具均未执行。 所属章节:信息架构与工作空间
1. 导航必须说明改变了什么
导航可能只改变内容分区,也可能改变对象、组织、版本或任务。界面应让用户预判切换范围,并在切换后确认当前位置。
面包屑适合表达稳定的业务归属路径,不能用它伪装完整浏览历史。来自搜索、待办或其他对象的实际返回路径,应通过“返回搜索结果”“返回审核任务”等有明确目标的入口表达。浏览器返回、页面内返回与关闭面板可以采用不同实现,但应遵守相同的输入保护和权限规则。
全局搜索、对象内搜索与当前列表筛选分别作用于不同范围,应明确命名。搜索到某个对象不等于已获得操作权;列表结果也不应包含安全策略不允许暴露的标题、摘要或数量。
2. 跨对象关系与入口
关系链接应说明目标类型、身份及其与当前工作的关系,例如“关联项目”“依据记录”。相同名称不够辨识时,补充允许展示的编号、组织或期间。
打开相关对象前,不应默认把当前编辑目标切换为该对象。进入后应持续标明新的身份,保留返回原任务的路径。参照内容需要与原内容并列时,可提供参照面板或符合平台习惯的独立打开方式;新窗口不应成为避免输入保护的唯一方法。
关系不存在、已删除或不再可访问时,解释以用户可知范围为限。若无权知道对象是否存在,可统一显示“无法打开此内容,请检查链接或联系支持”,不能暴露名称、负责人或删除原因。
3. 深链接契约
深链接应定位可识别的对象、任务或视图,并在打开时重新核查登录身份、访问范围与当前状态。链接是定位信息,不是授权凭证。
建议区分:
- 对象链接:打开该对象当前允许查看的内容。若总是指向最新状态,应让用户知道展示的是当前数据。
- 任务链接:定位特定任务;任务结束后指向允许查看的结果或历史,而不是自动创建新任务。
- 版本或快照链接:仅在产品支持时指向明确的历史基准,并持续显示历史/只读状态。
- 视图链接:携带获准共享的筛选、分区或时间范围。打不开部分筛选时说明哪些条件未应用,不能静默改成更广泛数据后假装原视图已恢复。
链接参数不得承载敏感输入、访问令牌或不应分享的备注。个性化选择、草稿内容和临时勾选默认不作为共享链接的一部分;确需共享时,应由产品提供明确、受权限控制的能力。
深链接打开结果
| 情况 | 建议行为 |
|---|---|
| 目标与权限有效 | 定位目标,说明当前上下文,加载必要内容 |
| 需要登录 | 登录后继续定位原目标;继续前仍核查权限和当前状态 |
| 组织或工作区不一致 | 明确目标范围;按产品规则切换或让用户确认,不混用当前范围 |
| 任务已完成 | 显示允许查看的结果与完成状态,停止旧提交 |
| 版本不可用 | 解释限制;可提供明确的“查看当前版本”,不静默替换历史依据 |
| 无权访问或存在性受限 | 采用不泄露信息的提示,提供获准的返回或求助路径 |
| 链接格式错误 | 说明无法定位,提供稳定入口,不显示虚构的目标信息 |
4. 哪些上下文可以恢复
不将全部界面状态一律持久化。每类上下文应有保存范围、失效条件与清理规则:
| 上下文 | 返回时的目标 | 需要重新核查的情况 |
|---|---|---|
| 查询、排序、分组 | 恢复用户寻找内容的方式 | 字段、权限、数据范围或视图定义变化 |
| 阅读与滚动位置 | 回到原记录或合理的邻近位置 | 原记录删除、过滤结果变化、布局重排 |
| 当前查看对象/步骤 | 恢复定位,并显示真实业务状态 | 对象不存在、任务结束、步骤访问权变化 |
| 勾选范围 | 让用户明确准备操作哪些记录 | 查询结果变化、记录失效、跨组织切换或权限变化 |
| 未保存输入 | 恢复当前允许保留的原始草稿,含未解析/待修正内容;不因此允许提交 | 数据基准、字段定义、权限或任务条件变化 |
| 已保存草稿 | 重新打开其明确版本与保存状态 | 草稿过期、冲突、目标任务结束或保存能力变化 |
| 密度、列宽等偏好 | 按已声明作用域恢复阅读习惯 | 平台不支持、组件变化或偏好失效 |
勾选范围不是业务承诺。在恢复选择后执行批量操作前,还需按当前数据核验实际范围;不能把“全部查询结果”误当作离开时已加载的几条记录。选择交互见 数据表与交互网格契约;跨页与全部查询结果的范围语义见 查询、选择范围与批量执行。
5. 返回恢复的处理顺序
- 先核查身份与安全范围,再读取或呈现相应内容。
- 取得当前对象、任务、版本及条件,不以缓存取代业务有效性判断。
- 恢复有效的导航、查询及当前允许保留的原始输入;输入的解析/校验状态另行表达,不因暂时无效而抹掉原稿。按稳定身份定位原记录,而非只记第几行。
- 将失效内容与变化说明放在相关位置,不用笼统的“页面已更新”代替判断依据。
- 恢复合理焦点:原触发点仍在时返回原点;不存在时转到相关标题或最近的可操作位置,并说明变化。
可以先显示已知的旧数据帮助用户定位,但必须标明其旧状态,并限制依赖最新数据的操作。权限已撤销时不得继续用旧缓存显示受限信息。
返回后存在影响判断的并发变化,应要求用户重新核查或确认。本次确认必须对应当前内容与当前动作,不能仅关闭一个提示后继续提交旧基准。
6. 离开保护与恢复能力
普通查看切换能安全保留输入时,不需要反复打断。可能丢失工作时,应明确说明:哪些未保存、保存到哪里、离开后能否恢复,以及当前可用动作。
“保存并离开”只有保存已被确认后才能完成预期离开;保存失败时继续保留输入并说明原因。若用户明确选择放弃,应清楚说明放弃范围,不能连带删除既有已保存草稿。
会话结束、刷新、崩溃和跨设备不是相同恢复场景。实现应逐一声明能力,并按数据敏感程度设置存储边界。无法保证的场景应说明限制,而不是以“自动保存”暗示任何中断均可恢复。
6.1 范围切换的完整检查
切换组织、对象、版本或任务前,分别处理三类工作:
- 未保存输入:仍绑定原对象、原版本/基准及原任务,不能直接装入新上下文。有安全暂存能力时,保留并说明归属;否则提供实际可用的保存、放弃或取消切换。
- 保存结果待确认的请求:先核查原请求,不当作未保存内容重发,也不能因新范围已打开就显示保存成功。
- 已发起的后台动作:保留原任务关联;切换后按以下规则处理回执和查询。
切换后的读取结果只更新匹配的范围与查看意图;原范围晚到的写入回执仍归属原动作,按当前权限保留核查入口,不能用丢弃过期读取响应的方式丢掉写入结果。后台任务的范围不随导航变化,详见 异步执行、结果核查与恢复 第 3.1 节。
6.2 多窗口、面板与独立浏览位置
若产品支持同时打开多个窗口、标签页或面板,每个视图保有明确的查看对象、版本与位置,不因另一视图切换而静默换目标。业务状态、权限和提交结果仍以权威来源为准;“浏览位置独立”不意味着各窗口可以维护互相矛盾的业务事实。另一窗口完成任务或撤回权限后,本窗口不得继续使用旧操作条件。跨端接力重新核验相同边界,不能把接收端当前组织自动套给原任务。
7. 示例:从筛选列表进入任务再返回
用户在“待审核”列表按项目筛选,打开第 12 条合同并查看其附件。返回审核时保留仍有效的意见;提交成功后回列表,保留项目筛选和相邻阅读位置。
该合同已经不满足“待审核”条件时,可以说明“已提交,该记录已不在当前筛选结果中”,并提供查看结果入口。不要为维持原行位置把它继续显示为待审核,也不要清空筛选让用户重新寻找剩余工作。
如果期间列表数据变化,恢复目标应是原记录或合理邻近位置,不是机械滚动到相同像素导致打开另一条记录。系统不能恢复准确位置时应保持合理落点,不声称精准还原。
8. 验收场景
以下为待执行的验收场景,当前结果均为未执行:
- 从带筛选的列表进入详情再返回:条件保留,原对象可定位,真实数据变化可理解。
- 从审核中打开相关对象并返回:编辑目标不会被参照目标替换,有效输入保留。
- 打开已完成任务的通知链接:显示任务结果,不出现仍可提交的旧表单。
- 打开另一工作区的链接:范围变化可辨,原范围的选择与输入不会混入。
- 打开无权知道其存在的对象链接:标题、摘要、人员、数量及错误细节均不泄露目标事实。
- 删除或权限变化使原焦点目标消失:返回后焦点仍有合理位置,辅助技术能理解变化。
- 恢复全部查询结果选择后数据发生变化:执行前明确当前范围并重新核验,不静默扩大处理数量。
- 窄容器、文字放大和键盘返回时,保留同样的业务上下文与输入保护。
9. 返回、关闭与离开的仲裁契约
以下 NAV 规则是既有输入保护与范围边界的可执行细化,作为规范工作稿;不是路由 API,也不批准新的业务动作。平台事实及版本限制见 平台适配、国际化与输入能力;弹层内焦点行为以 浮层组件:对话框、抽屉与提示 为主档。
NAV-01:先说明动作语义
| 动作 | 改变什么 | 不得暗含什么 |
|---|---|---|
| 返回 Back | 沿当前平台实际返回栈离开当前查看位置;可能回外部来源 | 不能保证总回业务父节点,不能把离开当提交或撤销 |
| 向上 Up/业务父级 | 到可访问的父级或声明的合成业务层级 | 不伪称完整历史,不把它强行等同系统 Back |
| 关闭 Close | 结束当前呈现的弹层、窗口或临时工作区 | 不自动取消已发出的服务任务,不自动放弃未保存内容 |
| 取消编辑/放弃更改 | 在用户明确的编辑范围内放弃尚未提交的更改 | 不删除已确认保存的草稿,不撤回已生效业务结果 |
| 取消执行 | 向产品实际支持的执行协议提出取消 | 请求取消不等于已取消,需核查可撤销的边界及最终结果 |
| 撤销 Undo | 发起业务明确支持的补偿或恢复动作 | 不等于页面返回,不假设所有业务都可逆 |
组件上的名称、可访问名称及帮助应表达实际目标;“返回列表”和“关闭审核窗口”不能都只标为“完成”。
NAV-02:一个离开事件只提交一次位置变化
系统返回、应用返回、Escape、遮罩点击与拖动关闭不是固定等价的事件。平台先处理其拥有的输入法/系统 UI;已被其消费的事件不再传给应用导航。应用只交由当前最上层、具有该事件处理权的临时层或任务处理一次;普通页内 Back 不模拟输入法返回。关闭菜单只关菜单,不能穿透关闭编辑弹层或退两页。无该事件语义的层不应吞掉它。
处理顺序是:识别目标动作与事件拥有者 → 核查是否会丢失输入或隐藏未确认结果 → 保留/放弃/取消离开取得确定选择 → 完成一次位置变化 → 恢复合理焦点。平台手势预览和未提交的返回动画只改变呈现;取消预览时恢复原位置与草稿,不执行业务写入、不清空选择。动画完成回调不能作为唯一的数据保存或业务解锁条件。
NAV-03:保护的结果必须可判定
| 当前工作 | 允许离开的条件 | 失败或取消时 |
|---|---|---|
| 只读、无在途写入 | 返回目标仍允许访问;正常离开 | 目标失效则到获准稳定入口,解释限制 |
| 未保存输入且可安全留在当前会话 | 声明保存边界后离开,输入仍绑定原对象 | 超出保留边界之前重新保护,不暗示跨进程可靠恢复 |
| 离开会丢失输入 | 选择真实可用的保存并离开、放弃本次未保存更改、留在此处 | 保存失败或结果未知时不宣称已保存;保留获准输入及核查路径 |
| 已发写入,结果待确认 | 有已证实的查询与保留能力时,可在其范围内关闭查看;没有离开后核查能力时,先明确限制,用户可继续等待或理解限制后明确离开,不无限锁住任务;动作继续归原任务 | 关闭不标失败、成功或已取消,不恢复可重复提交的初始状态;有能力才返回核查原动作,无能力则说明限制及真实可用的处置路径,不伪造任务入口 |
| 权限已撤回 | 立即停止受限呈现和操作,依据政策清理或隔离输入 | 不以离开确认延长受限展示;只给允许披露的说明和稳定落点 |
结果核查入口的有效性包含保留期限、当前授权以及关闭、刷新和进程退出后的真实能力;在某个范围可查询,不表示其他范围也可查询。缺少持久服务时,离开限制与可用人工处置按 浮层组件:对话框、抽屉与提示 的 CMP-LAYER 说明;没有真实人工渠道也应如实告知。用户明确离开只结束呈现,不证明业务失败或许可自动重发。
选择“留在此处”不会再触发同一个离开事件。保存失败、网络恢复和新权限变化是新的状态事件;没有用户的新意图不得偷偷继续原离开操作。状态恢复能力与进程中断见 异步执行、结果核查与恢复,不能依靠导航记忆重放事务。
NAV-04:平台差异与检验依据
Android 官方区分 Up 与 Back:应用任务内通常一致,Up 不退出应用;从其他应用任务通过深链接进入时,Up 可进入应用的合成层级,Back 则可回来源。YUDS 因此要求深链接记录入口类型和有效返回落点,不承诺所有入口都有相同历史。Android navigation principles(读取于 2026-10-19)。
Android 预测返回有预览与提交/取消之分,取消时恢复之前的呈现状态。YUDS 将“预览不提交业务、副作用只在确定动作后发生”作为跨端推导;不把 Android 动画参数复制到 iOS 或 HarmonyOS。Predictive back design(页面更新于 2024-10-24,读取于 2026-10-19)。
HarmonyOS 官方 NavDestination FAQ 说明:onBackPressed 返回 true 表示重写返回逻辑,false 表示默认回退。它只支持该组件上下文,不证明所有 ArkUI 弹层均相同。YUDS 要求实现只消费一次离开事件;自行完成回退后仍放行默认回退的实现需判为重复导航缺陷。具体 SDK 支持范围由映射记录核实。NavDestination 返回 FAQ(页面更新于 2026-08-13,读取于 2026-10-19)。
Apple 当前 HIG 将标准 Back 用于沿信息层级返回,Close 用于关闭模态视图,并建议采用标准符号。YUDS 的语义名称不要求给原生工具栏强加可见文字;可访问名称仍应准确。各端实际手势/按钮映射集中在 平台适配、国际化与输入能力;不能以本节声称已完成实现。Apple Toolbars(官方 Markdown 正文读取于 2026-10-19,导航指导更新于 2025 年)。
NAV-05:返回失败夹具
以下是文档夹具,运行结果全部为未执行。每次执行记录平台、系统及 SDK 版本、输入方式、栈前后状态和任务结果。
| 编号 | 输入与动作 | 可验预期 |
|---|---|---|
| N1 | 搜索结果打开详情,再打开附件后逐次返回 | 先回同一详情再回有效搜索;一次事件只退一层,条件和对象身份不串换 |
| N2 | 编辑存在未保存意见,选择保存并离开;服务返回失败或无回执 | 失败留在编辑并解释;无回执保持待确认而非重新提交;未获保存证据不显示保存成功 |
| N3 | 进行预测返回或交互关闭预览,在提交阈值前取消 | 位置、可访问任务身份、草稿与选择保持;零业务写入、零清草稿副作用 |
| N4 | 从外部应用深链进入任务,分别选择 Android Up 与 Back | 允许不同导航落点;两条路径都保护同一未保存工作,且不把链接当授权 |
| N5 | 编辑弹层中打开菜单,然后触发该平台的菜单关闭事件 | 只关闭菜单并恢复其触发点;编辑层仍在,草稿不丢失,不触发第二次返回 |
| N6 | 产品已证实离开后可查询且在保留期内;提交后超时,关闭任务视图,再从真实任务入口返回 | 核查原动作,不新建提交;只展示当前有权查看的结果;保留期届满或授权失效则说明实际限制 |
| N7 | 返回预览中权限被撤回,随后取消返回 | 不恢复受限旧内容;安全要求优先于原画面还原,获准落点及说明可感知 |
| N8 | 无离开后查询能力;提交超时后明确关闭,分别测试有/无真实人工核查渠道 | 关闭前告知限制,允许继续等待或明确离开;只提供真实渠道,不假造任务入口,不重发,不将未知改成失败或取消 |