状态:「每个独立任务上下文至多突出一个主操作」为用户确认规则(2026-10-19);八个视觉变体职责(D03)及其初始状态配方(D03-B01)由代理依用户授权采用为初始设计输入,可逆;D04 已选择不启用批准/拒绝双主操作例外。B2-FAVORITE 是已独立反审的通用深契约候选;CMP-04 默认记忆时机与 CMP-05 菜单焦点和键盘细则仍为建议/候选。组件参数 API、跨端包、实际视觉与平台反馈均未实现或未验证,全部夹具运行未执行。 更新:2026-10-20 所属章节:基础组件与交互契约
本页是操作组件族行为与参数引用的唯一主档;使用选型、解剖与正反例见组件使用手册:从任务选型到页面组合。共同设计与验收边界见基础组件与交互契约,本页的特殊条件与来源限制就近说明。
每个独立任务上下文至多突出一个主操作,此规则已确认;视觉变体不增加组件数量,也不授予额外主操作配额。
本页依次覆盖:
- 动作选择、主操作与 CMP-ACTION
- CMP-01 / ACT-BUTTON 普通按钮
- CMP-02 / ACT-ICON 图标按钮
- CMP-03 / ACT-TOGGLE 切换按钮
- B2-FAVORITE:标记与收藏
- CMP-04 / ACT-SPLIT 拆分按钮
- CMP-05 菜单按钮、命令菜单与子菜单
- 组合案例、验证与主档索引
1. 动作选择、主操作与 CMP-ACTION
动作入口应显示可辨识的名称、可用性、请求状态,以及必要的原因和风险说明;图标可选。名称采用动词与必要对象,如“保存草稿”“提交这 3 项”,避免多个“确定”让用户推测结果。主次样式只表达当前任务优先级;危险动作还必须说明后果,不能仅靠颜色。
按钮触发动作;跳转资源通常用链接,见导航组件:位置、切换与返回。一次激活产生一次操作意图,业务是否完成以请求结果为准。请求包含何种对象、版本和执行约束由产品定义;组件负责保留必要上下文并呈现结果。
1.1 已确认的主操作规则(2026-10-19)
每个独立任务上下文至多突出一个主操作;这不是要求每块区域都配置主按钮。上下文由明确的对象、任务目标和操作边界识别,不机械等同于整个 View。独立对话框或抽屉只有承担独立任务时才形成自己的上下文;不得以分栏、卡片或按钮组人为拆分边界。
危险确认说明对象、范围和后果,以该确认任务中的危险操作作为唯一主操作,不能再并列一个品牌主按钮。普通主操作不因“重要”就使用危险色或成功色。具体视觉映射不改变权限、请求结果与恢复契约。
D03 由代理依据用户授权采用八个视觉变体职责:primary、outline、neutral、minimal、general、success、warning、failure。前四种表达强调层级(outline/neutral 同级),后四种只用于对应状态上下文;这一语义采用不声明完整 API、资产或跨端包已经实现。D04 已选择不启用批准/拒绝双状态主操作例外;历史补记保留当日原文,但不作为当前例外。
| 维度 | 表达什么 | 不能等同于 |
|---|---|---|
| 组件结构与行为 | 动作、图标、切换、拆分、菜单按钮 | 视觉变体名 |
| 主次强调与视觉变体 | 当前任务优先级、对应状态的呈现 | 授权、请求是否成功 |
| 交互状态 | 悬浮、按下、焦点、选中 | 业务审批结果 |
| 请求状态 | 待确认、处理中、成功、失败、结果未知 | success/failure 视觉变体或业务终态 |
| 业务状态与权限 | 产品给出的流程阶段、风险和可执行条件 | 组件自行推定的规则 |
同一控件可同时处于这些维度的组合;焦点与错误独立保留,结果未知时先核查原请求。
1.2 CMP-ACTION:八变体设计边界与任务判断
以下 D03 设计职责沿用八个名称,须与七角色固定色阶规则共同核对;初始色值和几何按 D01/D05 主档,具体组件参数 API 和跨端包仍未实现核验。普通任务主操作使用 primary 的语义方向;状态强操作只在已有同状态原因/后果的上下文中成立,取代本任务的普通主操作,不与它并列。
| 变体 | D03 设计职责 | 必需邻近信息与禁止用法 |
|---|---|---|
primary |
独立任务的唯一主要行动 | 明示对象和结果;不得因每个卡片都“重要”而重复设置 |
outline |
细边表面风格的普通行动 | 与 neutral 同级;同组只选一种,不用边框暗示未授权 |
neutral |
分层表面风格的普通行动 | 与 outline 同级;不因灰色把可用动作误报为禁用 |
minimal |
低强调、行内命令及取消 | 仍需可见名称、命中区和焦点;不能把风险说明藏进悬浮 |
general |
信息上下文的主要后续行动 | 附说明和具体目的地,例如查看这条通知详情;不是通用“更多”的染色 |
success |
已明示正向决定/解决上下文中的行动 | 明示将作出的决定;样式不代表业务已经成功,也不自动允许与拒绝并列主操作 |
warning |
用户已知警告后仍继续的行动 | 警告内容和继续的后果直接可读;不能代替普通强调 |
failure |
明示破坏、撤销或不可逆后果的行动 | 写明对象、范围及可恢复性;不是每个出错后的“重试”都使用危险样式 |
判断独立任务须同时确认:正在处理的对象/范围是什么、要达成的结果是什么、提交与关闭边界是否独立。
- 正例:合同编辑只有保存主操作;打开“移除附件 A”独立确认时,该确认任务只有移除主操作,背景编辑不可同时激活。
- 非模态独立任务可各有主操作,但必须有明确的任务标题、对象、提交与退出,且切换时不串写。
- 反例:同一合同表单分成三张卡片,但都提交整份合同,不能三张卡片各设主按钮;把批准和拒绝分成两个色块也不构成两个任务。
D04 已选择不启用批准/拒绝双主操作例外。可先以普通选择明确“批准”或“拒绝”及必要意见,再用一个“提交决定”主操作;拒绝若有不可逆后果,进入单一危险确认任务。两项同级普通入口加后续单一确认也可表达两种业务决定,但不并列状态强主按钮、不以颜色诱导默认批准。要改变已确认的单主操作规则,须用户明确修改,并补任务风险与比较测试;普通可逆设计授权不能自行放宽。
夹具(实际运行未执行):
- 正常夹具:合同 A 选拒绝、填意见、查看影响、确认一次 → 只提交拒绝意图;已受理仍不报业务结束。
- 失败夹具:预览后权限撤回 → 阻止执行,保留允许保留的意见并解释;不能通过切换到批准绕过权限。
先按上文已确认规则识别独立任务上下文,再决定其唯一主操作;仅有工作区域或卡片边界不足以新增主按钮。提交按钮不能仅因表单“尚未通过全部校验”就永远禁用且不解释原因;常见建议是允许用户提交以发现错误,再定位问题。
长标签允许扩展或合理换行;风险对象数量和关键动作词不得截断。按钮顺序适应平台习惯,破坏性操作不通过快捷键绕过确认。密度改变不改变可达性和命中要求。
1.3 D03-B01:八变体初始状态消费配方
代理依据用户授权决定(2026-10-20),可逆。配方只消费既有角色和允许配对,不新增公共别名,不改 D01 物理值。文字默认 label-3x(Web 16/iOS 17/Android 16/Harmony 16,单位沿 D02);显式命名的小文字选项可用 label-2x,但命中目标不变,密度不能静默缩字。几何继承 D05 对应输入方式的最小高度、按钮圆角 6 及安全命中;焦点独立遵循 D01 已登记的双层构造,不用 hover 代替。
| 现有变体 | 默认文字 / 面 / 边界 | hover | pressed |
|---|---|---|---|
primary |
primary-000 / primary-800 / 无额外必要边界 |
面 primary-850 |
保留当前允许强面,即时按下反馈遵循既有平台适配边界,不新增 pressed 色阶 |
outline |
neutral-950 / neutral-100 / neutral-600 |
面 neutral-300、边界 neutral-700 |
面 neutral-400、边界 neutral-700 |
neutral |
neutral-950 / neutral-200 / 无额外必要边界 |
面 neutral-300 |
面 neutral-400 |
minimal |
neutral-950 / 保留明确登记的宿主 neutral-100/150/200 / 无额外边界 |
面 neutral-300 |
面 neutral-400 |
general |
neutral-100 / general-900 / 无额外必要边界 |
面 general-950 |
保留当前允许强面,沿既有平台即时反馈 |
success |
neutral-100 / success-900 / 无额外必要边界 |
面 success-950 |
保留当前允许强面,沿既有平台即时反馈 |
warning |
neutral-100 / warning-900 / 无额外必要边界 |
面 warning-950 |
保留当前允许强面,沿既有平台即时反馈 |
failure |
neutral-100 / failure-900 / 无额外必要边界 |
面 failure-950 |
保留当前允许强面,沿既有平台即时反馈 |
- 上表“无额外必要边界”以已有对比充分的文字和形状识别为前提,不豁免焦点;若边界承担识别,须补
neutral-600/neutral-700并验证邻色。 minimal的“宿主”不是任意透明背景,也不是新色阶:严格限于登记的不透明表面,强面或图像上不得直接套用此基线。是否增加其他宿主需新增测量记录。- 八变体共用 disabled 初始配方:
neutral-850文字/neutral-150面、无需承担识别的neutral-500细边;去除 hover/pressed 反馈;名称保留,旁边直接说明“暂不可用:原因”,不可用语义与事件拦截遵循 ACT-BUTTON。说明文字不随按钮降低可读性。不能靠变灰作为唯一的不可用说明,也不整体用 opacity 折损。 - 八变体共用 loading 初始配方:保留原变体默认配对与已存在的焦点;按钮中写具体的处理中状态,保留动作身份;不使用成功色替换或透明度。是否可取消、是否可聚焦继承已有行为契约,样式不替代防重入。减少动态效果时用静态状态标记。
强状态仅用于已有同状态上下文的独立任务主动作。pressed 保留已登记强面,并遵循 Token 契约、主题与状态与色彩语义与可辨状态既有的即时反馈边界,不另发明内侧短标记、额外描边、色阶或全局 opacity;不得误示持久选择。实际平台的 pressed 反馈仍待验证。上表是文档可复原的起点,不代表视觉已通过;自定义 primary 须重验全部受影响配对。
2. CMP-01 / ACT-BUTTON 普通按钮
用途与结构
用于单次命令、打开后续任务、明确提交;去往资源地址通常使用链接,不用按钮伪造导航。文字名称必需,可附装饰图标、忙碌指示和独立说明。普通/危险描述目的与后果;primary 等仅描述 D03 视觉职责,不意味着获得授权或已经成功。非提交按钮明确采用非提交行为;真正的表单提交统一进入同一校验/去重管线。
状态与交互
可用、悬浮、瞬时按下、焦点、不可用,与 idle/确认中/pending/成功/明确失败/未知结果彼此正交。Web 上 Enter/Space 激活,Space 不同时滚动页面;单次动作不声明 aria-pressed。打开确认只产生打开意图,取消确认产生零次执行;确认必须重新核对对象、范围与权限。忙碌时保持动作身份可读,尺寸变化不挤走邻近目标。可保留焦点并阻断重入,或采用原生 disabled 并先安排有效焦点,继承现有 CMP-01。
数据与恢复
输入为命令身份、对象/范围版本、允许性、确认需求和真实能力;输出区分激活、提交被接受、终态。服务端只受理时显示已受理,不显示已完成。校验失败时定位摘要/字段并保留允许的草稿;远程失败时留下原因和可行的恢复路径;结果未知时核查原操作,有无查询能力都如实说明。此处不授予任何高风险动作自动确认权。
夹具
| 夹具 | 前置 → 动作 → 预期 |
|---|---|
| ACT-BUTTON-N | 对象 A 有未提交草稿,提交可用 → Enter 一次及其合成 click → 执行意图 1,原草稿关联 A;仅有受理回执时显示处理中,终态后才显示完成。 |
| ACT-BUTTON-F | A 写入超时,焦点已到字段 B → 连击原按钮、迟到成功 → 额外写入 0,原任务核实成功,焦点仍在 B;无查询能力时明确核查限制。 |
| ACT-BUTTON-R | 确认层打开后 A 的执行权限被撤销 → 确认/快捷键 → 执行 0,说明原因并转移到有效焦点;取消确认亦执行 0。 |
| ACT-BUTTON-G | 长动作名、长对象名、200% 文本及 RTL 窄布局 → Tab/触控激活 → 名称/范围可理解、无相邻误触,一个任务仍仅一个主操作;布局变化执行 0。 |
通用异步夹具:按钮 A 发出一个受控请求后进入处理中,再连续按键/点击,额外提交意图为 0 次。分别测试“忙碌但可聚焦”与“处理中不可聚焦”两种映射:前者保留原焦点,后者有明确的有效去向;随后用户移到字段 B,再收到成功或失败响应,焦点不自动回到 A。记录状态通告、防重入次数及实际焦点目标。该夹具尚未实现,键盘、读屏和触控运行均未执行。
示例
修改合同后,“保存草稿”显示“正在保存”,收到已保存版本后才显示完成;接口仅受理后台任务时显示“已提交处理”;只有产品确有任务查询能力时才附相应入口,否则说明当前可见状态及核查限制,遵循浮层组件:对话框、抽屉与提示的 CMP-LAYER。
验收
连续点击与按 Enter 不产生两次意图提交;失败后标签恢复且已有输入保留;取消确认框不会提交;焦点不随成功提示自动跳走。
实现边界
仅锁定当前动作,状态说明与退出路径仍可达。Web 的 disabled 与 aria-disabled 不能互相替换后就视为行为完备;使用 aria-disabled 时仍须实际阻止重复激活。服务端幂等/去重由产品和实现负责,禁用按钮只是界面保护。
CMP-01 基线正常夹具
合同 A 有草稿 → 激活保存 → 确认版本后显示已保存。
CMP-01 基线失败夹具
有原任务查询能力且保存超时 → 查看原任务 → 显示待确认;无查询能力时按 CMP-LAYER 说明限制;两种情况均不自动再提交。
依据与来源
APG Button 支持按钮的键盘与语义;OUDS Buttons 支持动作与导航的区分;异步、权限与去重为 YUDS 推导。来源与边界见本组来源。
3. CMP-02 / ACT-ICON 图标按钮
用途与结构
用于语义足够明确的紧凑命令;不适合仅凭图形无法理解的风险或复杂目的。结构为一个焦点入口、动作图标、包含对象的可访问名称、可选的补充提示。图标装饰本身不成为第二个读屏目标。名称“移除 A”与“关闭面板 A”不得都退化为“叉号”。高后果或含义不明的图标优先保留可见文字。
行为、数据与状态
继承 ACT-BUTTON 的全部状态和 Enter/Space 管线,输入显式的对象标识与动作;工具提示出现时不激活,也不成为确认。触控须有可理解的名称路径,不能把长按提示作为唯一操作方法。嵌在可点击行中时,按钮激活不同时打开/选择整行;交互控件不得嵌套在另一个按钮里。成功移除当前项时,焦点到允许的邻项或列表入口;失败时保留/恢复原身份的条目;晚到的响应不得移除该位置的新条目。对象已不存在与无权限,应按可披露边界区分。
增长与 RTL
重复图标仍逐项带消歧名称;虚拟列表重用节点时,必须把名称更新与绑定身份一起完成。长对象名可补充完整说明,但不能丢失动作/对象识别;RTL 不镜像关闭等非方向图标。禁用/撤权遵循共同规则,提示不是唯一的原因通道。
校验与失败
对象已被他人删除时说明“该附件已不存在”并更新条目;移除失败时条目不先永久消失。若先隐藏条目以即时反馈操作,失败后必须能恢复条目并说明原因。
夹具
| 夹具 | 前置 → 动作 → 预期 |
|---|---|
| ACT-ICON-N | A、B 两行均有移除图标 → 读屏定位并激活 A → A 意图 1,B/行导航 0;成功后有效邻项获得焦点,仅在原焦点仍属于 A 时移动。 |
| ACT-ICON-F | A 乐观隐藏后服务拒绝 → 恢复 → A 的原身份及允许的数据恢复、原因可读;不把 B 当 A,不抢外部焦点。 |
| ACT-ICON-R | A 的图标获得焦点后失去读取/执行权 → 旧键盘事件和延迟 click → 执行 0,受限名称从应用输出中清除,安全的列表入口可达。 |
| ACT-ICON-G | 200 个同形按钮、同名对象带不同编号,RTL 重排/虚拟复用 → 激活编号 b → 仅 b 执行一次;每个名称仍可区分,触控不依赖 hover。 |
验收
读屏定位同一列表里的两个移除按钮时能区分对象;窄空间中不缩小到难以操作;提示打开后焦点可见;行点击不会吞掉内嵌按钮的行为。
CMP-02 基线正常夹具
附件 A、B 并列 → 激活移除 A → 仅 A 收到移除意图。
CMP-02 基线失败夹具
服务端拒绝移除 A → A 保留/恢复且显示原因,焦点不丢到页面起点。
依据与来源
Geist Button 支持图标按钮名称与动作/目标建议。其 loading 时保持可聚焦是供应商模型,不覆盖 CMP-01 的多平台选择;禁用时的 tooltip 不作为唯一说明。删除恢复、虚拟身份为 YUDS 推导。来源与边界见本组来源。
4. CMP-03 / ACT-TOGGLE 切换按钮
用途与结构
表达持续的按下状态,如本地显示过滤或编辑模式;不是一次提交命令、集合选择框或隐含的远程授权。结构为稳定标签+pressed 状态+可选的说明/保存状态。独立开关设置通常选 switch;互斥字段值通常选 radio,不因外观像按钮就使用多个互不关联的 pressed。
语义与状态
Web 上 Enter/Space 改变 pressed,名称不随值变为相反命令;若采用“显示/隐藏”这类随动作轮换的标签,则是普通命令模型,不再混用稳定 toggle 语义。true/false 是持续值,hover、瞬时按下与焦点独立于它。仅汇总多个真实、已知按下值的实例可声明 mixed,并说明本次激活将统一为开;未知/加载不成为 mixed。聚合实例不得代替批量数据复选框。
数据与保存
本地视图立即按期望值展示,远程偏好保存是独立状态。采用本页的保守远程模型时,pending 锁定该切换,但不锁定用户离开;保存明确失败时可保留本地视图,并明说“当前临时开启,偏好未保存”,后续关闭只改变新意图,不能误报服务端已关。表单模式则只改草稿,取消时回到会话基线。撤权禁止新的改变,并清理受限视图与数据;只有失去写权但仍可读时才保持可读状态。重排、长标签和 RTL 保留同一 pressed 身份,不按样式推断值。
夹具
| 夹具 | 前置 → 动作 → 预期 |
|---|---|
| ACT-TOGGLE-N | 本地“显示标记”为 false → Space → true 且名称仍为“显示标记”,本地变化 1,无提交命令或整表保存。 |
| ACT-TOGGLE-F | 偏好为 false,本地切为 true 后保存被拒绝 → 查看状态 → 本地仍 true、远端仍 false、未保存说明同时可读;pending 期间连击不产生第二次写入。 |
| ACT-TOGGLE-R | true 状态且焦点在其上,受限视图的读取权撤回 → 尝试切换并收到旧偏好成功 → 新意图 0,受限视图已清除,旧回执不恢复授权。 |
| ACT-TOGGLE-G | 长稳定标签换行,窄屏下移入工具栏溢出 → 打开并切换 → 同一身份与 pressed 保留,只有一个有效入口/Tab 位置;移动本身变化 0。 |
示例
“固定此列”可以使用切换按钮;“提交审批”不可使用切换按钮,因为它不是可逆的持续布尔值。数据批量选择使用复选框,不让同一视觉承载两套范围含义。
验收
键盘和指针切换的是同一状态;重新进入页面后,已保存与临时状态可区分;网络失败时准确区分“视图已切换”与“偏好未保存”。
CMP-03 基线正常夹具
“仅显示异常”为关 → 激活 → 开启,且列表按异常过滤。
CMP-03 基线失败夹具
偏好保存失败 → 保留当前临时过滤并提示未保存,不声称已同步。
依据与来源
APG Button 支持稳定 toggle 名称与 pressed 模型;mixed 的默认动作、保存分离与溢出身份为 YUDS 推导。来源与边界见本组来源。
5. B2-FAVORITE:标记与收藏
现行设计输入沿用 D01–D08;以下为已独立反审的通用深契约候选,具体 API、服务与平台实现须有真实证据,全部运行未执行。七个 role × 固定 step、三个文字角色各九档,以及每个独立任务至多一个主操作,均不变。
5.1 B2-FAVORITE-01 用途、范围与结构
收藏是可解释的再次访问偏好;标记是实例声明的个人/共享布尔值或有限状态。二者分别命名,不能把收藏星形混同于评分、当前选择、已读、业务批准或共享授权。没有真实共享能力时不提供“团队标记”。任意标签编辑或工作流状态超出本族,复用相应的选择/业务契约。
结构包括:对象可识别的名称、状态/用途、作用人群与存储范围说明、明确的切换或设置/取消命令、处理中/未知/失败、可达的原因和真实的恢复路径。会话、设备、账户远端、已获准的共享范围是不同的实例能力。收藏不复制受限对象的内容,也不保证对象以后仍可访问;跨设备同步、排序、收藏列表、离线恢复只在真实实现时声明。
5.2 B2-FAVORITE-02 语义与独立状态
Web 可用稳定名称(如“收藏 R-01”)的 toggle 及 pressed,或随动作变化的普通“加入收藏/取消收藏”按钮,两种模型二选一;不能名称在变却仍假称稳定 toggle。依据为 APG Button 的 toggle/普通按钮区分;存储与权限不来自 APG。星形只是辅助,名称与当前状态须可读。尚未读取的未知不是 false,读取失败时不展示“未收藏”;mixed 仅在真实聚合且范围明确时另用 CHO-CHECK(见选择组件:值、范围与层级),不把单对象的未知当作 mixed。
分开已确认状态/版本、用户期望、本地呈现、读取、偏好写请求、授权及同步范围。本地会话的改变不声称已存到远端。远端可乐观显示期望,但必须可辨“正在设为收藏/尚待确认”,不能把 pressed 这一个比特充当保存回执。重复入口共享同一主体/范围/对象的状态拥有者;读取到的旧版本不能覆盖当前在途意图,列表重新挂载时不重发。
5.3 B2-FAVORITE-03 写入、防重、失败与冲突
本候选在同对象同偏好处于 pending/未知时,不接收第二次反向写入,也不排队自动执行;保留查看状态与退出路径。键盘事件及合成 click 归为一次意图,菜单/卡片/预览中的副本一并防重。偏好写入与对象业务写入分账,不把取消收藏当作删除对象。
能力门槛:涉及跨设备/共享状态的远端修改,以及成功后的安全补偿,必须由真实服务执行条件版本或等价的原子冲突控制;前端串行、先读后写和本地版本号不能防止其他客户端并发覆盖。没有该能力时,本候选降级为明确的会话偏好、远端只读,或取消该远端变更/补偿入口并说明限制;不能假设读到当前值后无条件写入就安全。个人远端偏好也可能有多设备竞争,同样受此门槛约束。
发起时捕获主体/空间、个人或共享范围、对象 ID、偏好键、期望状态、确认基准版本、授权代次与操作身份。提交前检查当前权限;明确成功只更新原目标与匹配的修订,当前视图/主体已变化时不得复活旧名称。明确拒绝时可回到已确认状态并保留失败说明;有外部新确认版本时使用新版本并标记冲突,不回到旧基线覆盖。读取失败/超时与写入拒绝分开处理。
写入超时时保留结果未知;仅在真实查询或幂等机制下核查/安全重试,不盲目创建第二次切换。查询能力不存在时说明限制,允许离开,不伪造稍后自动核查。用户关闭预览、离开收藏页或按 Escape,不撤销已发出的写请求。成功后的“撤销”若支持,是新的获准补偿意图,须针对当前版本重新核对;不能本地翻转图标就声称远端已恢复。期间共享偏好被他人改动时,需要版本冲突处理/重新读取与明确的再操作,不悄悄让最后写入者获胜。
本族默认为即时偏好或仅会话值,不含编辑草稿。若实例放在表单的暂存设置中,明确仅改该表单草稿;取消时恢复进入前允许持有的原始快照,外部父层更新时只丢弃本层变化,不覆盖当前父值;接受与业务保存分开。不能把即时远端实例的关闭也写成“取消全部”。
5.4 B2-FAVORITE-04 权限、缓存与焦点
个人收藏与共享标记的读/写权限分别检查。可读不可写时呈现当前可读状态及原因;有权标记不授予对象内容的访问。对象被撤销读权时,清理应用可控的名称、缩略图、最近项/收藏列表摘要、可访问文本和待播报内容;偏好记录能否在服务端保留由真实政策决定,不为清理呈现而擅自发送删除。只留获准的安全占位/恢复入口;旧状态读取不复活对象。
切换账户/工作范围沿用 B1-SHELL(见导航组件:位置、切换与返回),不能将 A 的个人收藏或共享成员资格迁给 B 的同名对象。原写回执仅在允许披露的范围内归属原主体的操作,不当作“旧读取”丢弃,也不向新主体显示敏感结果。离线仅在真实支持冲突/同步策略时展示可执行的离线写入,本候选不默认离线队列。
在已收藏列表中取消收藏成功后可移除该条目,此前先为仍位于该条目内的焦点安排相邻项/集合标题;用户已移出时不抢焦点。若过滤只显示已收藏项,乐观取消不先卸载唯一的可恢复入口,至少在确认前保留“正在移除”状态或等效的恢复入口。失败时原条目可找到,重排不把操作投给下一条。
5.5 B2-FAVORITE-05 键盘、增长与平台
普通按钮 Enter/Space 激活一次,事件不冒泡兼做整卡打开;嵌在菜单、toolbar 或 grid 中时,先遵循容器的进入方式与事件归属。禁用原因邻近可达,aria-disabled 须实际阻断所有入口;当前项将不可聚焦时,转换前先安排安全目标。没有内容持久化要求的纯本地即时切换可直接更新,但必须不声称跨会话已保存。
长对象名/共享范围名和错误需换行或完整可达;图标模式有区分对象的名称,触控不依赖 hover,RTL 不改变状态或对象 ID。原生端采用实际可访问的切换/命令特征,记录键盘/读屏/触控,不能直接照抄 ARIA 作为原生证据。图标资源按实际许可选择;颜色与尺寸沿现行 D01/D05 设计基线,实际渲染仍待验证;已选、焦点、忙碌、失败分别可辨。
执行前冻结平台/浏览器或设备版本、实际视口、文字设置、方向、完整样本、真实能力前置与各子轮的唯一预期。所有测试数值仅属于夹具配置,不是全局组件默认值;本页没有真实运行证据。
5.6 精确夹具(全部运行未执行)
B2-FAVORITE-F01 个人远端正常
- 前置:账户 U 的对象 A,个人远端收藏已确认 false/v1,有写权;两处入口共享状态。服务实际执行条件版本写入;该能力不意味着有状态查询或幂等重试。
- 动作:从卡片点击收藏一次,服务确认 true/v2。
- 预期:偏好写意图 1、业务记录写入 0;两个入口显示同一已确认 true/v2,名称语义一致。
- 禁止事件:点击兼打开卡片;重复入口发送第二次。
- 规则:B2-FAVORITE-01、B2-FAVORITE-02、B2-FAVORITE-03
- 实际运行:未执行。
B2-FAVORITE-F02 会话和设备分开
- 前置:甲仅有会话偏好 false;乙设备已确认 false,真实设备存储可用但本次写入被拒绝;乙采用“失败后保留期望并明确未保存”的呈现。
- 动作:甲明确设为 true;乙尝试记住 true 并收到拒绝。
- 预期:甲本会话为 true;乙的期望 true 与设备已确认 false 分别显示,设备保存失败;远端写 0,不称设备已存 true。
- 禁止事件:跨设备已同步;把设备拒绝当作账户成功。
- 规则:B2-FAVORITE-01、B2-FAVORITE-02
- 实际运行:未执行。
B2-FAVORITE-F03 未知不是未收藏
- 前置:远端状态尚未读取;请求 q1 失败,无确认值。
- 动作:打开对象卡片。
- 预期:未知/无法读取可见;不画确定的 false,不允许按假 false 盲切;提供真实的重新读取。
- 禁止事件:把未知当作未收藏;先写覆盖。
- 规则:B2-FAVORITE-02
- 实际运行:未执行。
B2-FAVORITE-F04 pending 多入口防重
- 前置:A 为 false/v1,收藏 w1 正在发送;菜单和预览都有同一偏好的入口。服务实际执行条件版本写入;该能力不意味着有状态查询或幂等重试。
- 动作:从另一入口反向激活,并注入合成 click。
- 预期:额外偏好写 0,不排队;状态/退出可达;w1 只有一个意图。
- 禁止事件:事后自动反向写;双重 click 发送。
- 规则:B2-FAVORITE-03
- 实际运行:未执行。
B2-FAVORITE-F05 明确拒绝与并发
- 前置:A 为 false/v1,期望 true/w1;另一设备确认 false/v3。服务实际执行条件版本写入;该能力不意味着有状态查询或幂等重试。
- 动作:w1 因基准过期被明确拒绝;旧 v1 读取迟到。
- 预期:按当前 v3 呈现冲突/未完成的期望;旧 v1 不覆盖 v3,无自动再提交。
- 禁止事件:回到旧基线覆盖 v3;最后写入者默认获胜。
- 规则:B2-FAVORITE-03
- 实际运行:未执行。
B2-FAVORITE-F06 超时无查询能力
- 前置:w1(期望 true)已发出,无幂等/状态查询;当前结果未知。服务实际执行条件版本写入;该能力不意味着有状态查询或幂等重试。
- 动作:再次激活切换,并关闭预览。
- 预期:额外写 0;未知和真实限制保留;关闭不是取消;允许离开。
- 禁止事件:自动发出 w2;报告“已撤销”或“失败、必未写”。
- 规则:B2-FAVORITE-03
- 实际运行:未执行。
B2-FAVORITE-F07 撤读权不擅删偏好
- 前置:A 为 true/v2,收藏列表有名称/图像;旧读取在途;读权撤回,而服务端保留策略未定。
- 动作:撤权后再送达旧读取。
- 预期:受限呈现/缓存被清理;不产生删除收藏的请求;仅获准的说明可保留。
- 禁止事件:旧响应复活;为清理 UI 擅删远端偏好。
- 规则:B2-FAVORITE-04
- 实际运行:未执行。
B2-FAVORITE-F08 账户切换旧写回执
- 前置:U 与 V 都有同名的 A,但对象/权限隔离;U/w1 收藏在途,当前已切到 V。服务实际执行条件版本写入;该能力不意味着有状态查询或幂等重试。
- 动作:U/w1 成功迟到。
- 预期:回执归属 U 的原操作,且只披露允许的事实;V 的状态不改,不显示 U 的名称;不重发。
- 禁止事件:用同名匹配 V;丢弃回执并宣称未写。
- 规则:B2-FAVORITE-03、B2-FAVORITE-04
- 实际运行:未执行。
B2-FAVORITE-F09 列表取消成功焦点
- 前置:只显示收藏集合 A/B,焦点在 A 的取消按钮;A 的取消在远端 pending;B 及其收藏按钮始终有效可达。服务实际执行条件版本写入;该能力不意味着有状态查询或幂等重试。
- 动作:等待,再收到成功;另一个独立分支中用户先移到外部 C。
- 预期:pending 期间保留可恢复入口;成功后移除 A 时,若焦点仍在 A 内,则移到 B 的收藏按钮一次;外部 C 分支保持在 C。
- 禁止事件:乐观卸载导致丢焦;强抢外部焦点。
- 规则:B2-FAVORITE-04
- 实际运行:未执行。
B2-FAVORITE-F10 撤销是新补偿
- 前置:共享收藏 w1 已确认 true/v2;服务真实执行条件版本写入。用户撤销,获准发出补偿 w2(期望 false,条件 v2);请求到达前他人写入 true/v3,服务当前值为 true/v3。
- 动作:w2 到达,服务因 v2 过期而拒绝,并返回获准的 true/v3;用户不再次提交。
- 预期:新补偿请求 1 次,但成功写入 0;当前确认 true/v3 并显示冲突;不自动重发,不显示已撤销。
- 禁止事件:用旧 v2 覆盖 v3;把关闭当作撤销。
- 规则:B2-FAVORITE-03
- 实际运行:未执行。
B2-FAVORITE-F11 暂存取消原稿与外部版本
- 前置:表单模式下,父层偏好稿 P1 带有待修正原因原文 q;子层修改了状态;父层被合法入口更新为 P2 及原文 r。
- 动作:取消子层。
- 预期:P2/r 保持,仅丢弃子层变化;远端偏好写 0;对照(无外部更新)时保留 P1/q。
- 禁止事件:回到已确认的旧值;把即时写入伪装成取消。
- 规则:B2-FAVORITE-03
- 实际运行:未执行。
B2-FAVORITE-F12 长名共享范围与键盘
- 前置:长的混排对象名与共享范围名,两个同名对象,图标按钮位于 grid 操作格中;仍有读权但无共享写权。
- 动作:按 04 进入格内,读取状态/原因;用 Enter/Space 尝试;在大字体/触控下查看。
- 预期:对象与范围可区分;共享不可写,所有路径写 0,邻近原因可达;不陷焦;各平台未执行。
- 禁止事件:
aria-disabled仅作样式;星号被读作评分。 - 规则:B2-FAVORITE-01、B2-FAVORITE-02、B2-FAVORITE-05
- 实际运行:未执行。
B2-FAVORITE-F13 正常补偿闭环
- 前置:w1 确认 true/v2;服务实际执行条件版本写入;无外部更新,当前为 true/v2;用户仍有权限。
- 动作:明确撤销,发出 w2(期望 false,条件 v2),服务确认 false/v3。
- 预期:补偿请求 1、成功写入 1;各入口确认 false/v3,说明新补偿已成功;原 w1 历史保留。
- 禁止事件:仅翻转图标就称成功;删除原操作事实。
- 规则:B2-FAVORITE-03
- 实际运行:未执行。
B2-FAVORITE-F14 缺失原子冲突能力
- 前置:共享偏好可读 true/v1,但服务没有条件版本或等价的原子冲突控制;本客户端实例选择远端只读,无已发出的操作。
- 动作:本客户端尝试切换与撤销;另一设备把状态改为 false/v2,本客户端随后读取成功,返回 false/v2。
- 预期:本客户端的远端修改与补偿请求均为 0;说明能力限制;只读确认更新为 false/v2,不以先读后写防覆盖。
- 禁止事件:前端串行冒充跨设备安全;发出无条件补偿。
- 规则:B2-FAVORITE-03
- 实际运行:未执行。
证据:完整夹具 · 来源与适用边界 · 独立反审。原始草案仅以 b2 冻结源稿存证,不是第二份现行正文。来源语义范围不等于 SAP 对等,也不代表平台运行通过。
6. CMP-04 / ACT-SPLIT 拆分按钮
用途与结构
用于一个常用的明确命令及相关替代命令;不是表单枚举选择,也不是两个无关的主操作。主命令区与菜单区分别有名称、命中区和焦点,菜单名说明“更多 A 动作”,不把整组再设成第三个可激活按钮。两区可分别不可用;一项格式失败不禁用无关能力,而同一命令处于结果未知时,它的各个副本共同锁定。
键盘与组合
主区 Enter/Space 仅执行主命令;菜单区 Enter/Space 仅打开菜单并聚焦首个可聚焦命令项(可包括允许披露的禁用项;标题与分隔不作为命令项),展开状态可读;之后继承本页「CMP-05 菜单按钮、命令菜单与子菜单」(第 7 节)的命令菜单契约(工具栏组合另见导航组件:位置、切换与返回)。Escape 关闭菜单并回到菜单触发器;Tab 或外部点击关闭时尊重目的焦点;命令打开新模态时直接进入模态,不先强行回到触发器。菜单本身不能装复杂字段,必要时转为面板。取消菜单时执行 0、不改记忆的默认、不取消外层草稿。
数据与记忆
主区显示实际命令、对象和范围。选择菜单项默认执行该明确命令一次;若产品选择“仅更换默认”模式,必须另有明示文字,两种模式不混用。允许记忆时以本任务范围为保守默认,并明确何时记忆:本页建议成功执行后更新,失败/取消不变;只有最新明确选择的命令意图、且当前对象/范围/权限仍适用时才更新默认,较旧命令的迟到成功只更新其任务结果,不回写默认;跨会话的个人偏好需另行声明。主按钮与菜单若重复同一动作,必须共享命令身份、权限、pending 和防重入,不算两个可并发的命令;不要求复制 Geist 的首项重复规则。记忆不跨对象继承风险/范围,范围变化须重新核对。
增长、RTL 与恢复
窄屏下可以变为独立按钮+“更多”入口,但语义和身份不变,不复制出两个可聚焦版本;布局转换保持正在浏览的合法菜单项/焦点,不能隐式执行。文字或风险说明过长时换行或转为面板,箭头区不覆盖主区。禁用与撤权须检查两个入口及展开的菜单;主区移除时按共同焦点规则处理。
夹具
| 夹具 | 前置 → 动作 → 预期 |
|---|---|
| ACT-SPLIT-N | 主命令 A,菜单含 A/B → 点箭头打开、选择 B → 打开菜单执行 0,B 执行 1;确认成功后才按已声明的策略把主标签更新为 B。 |
| ACT-SPLIT-F | A pending 且菜单中有 A 的副本,无关的 B 可用 → 激活 A 副本及取消菜单 → A 额外提交 0、默认不变;B 的可用性由其自身约束判定。 |
| ACT-SPLIT-R | 在菜单中浏览 B 时权限撤回 → Enter → 执行 0,受限内容清除;焦点回到仍可用的触发器,否则到同任务的安全入口。 |
| ACT-SPLIT-G | 长命令/范围、RTL、窄屏分离入口且菜单打开 → 重排、Escape → 执行 0,原命令身份不变,焦点至当前菜单触发器,无隐藏的重复入口。 |
| ACT-SPLIT-O | 默认 A,用户先明确执行 A 再选 B;B 先成功、A 后成功 → 默认仅由最新的 B 意图成功更新为 B,A 的迟到成功只记入原任务,不覆盖 B;对象/授权已变时,两个旧结果都不改当前默认。 |
CMP-04 基线正常夹具
导出当前筛选 → 点箭头 → 仅展开格式,不发起导出。
CMP-04 基线失败夹具
PDF 不支持 → 选 CSV 仍可用;若导出结果未知,仅提供真实的核查入口或能力限制说明,再次激活不重复导出。
验收
点击箭头不触发导出;触控时相邻区域不重叠;菜单项的格式与范围可读;上次的导出选项不会跨对象错误继承。
依据与来源
APG Menu Button 支持入口键盘与展开语义;Geist Split Button 支持主命令+相关选项的结构。菜单项数量、样式限制、首项复制与记忆时机均非 YUDS 已批准规范。来源与边界见本组来源。
7. CMP-05 菜单按钮、命令菜单与子菜单
7.1 用途、不适用与结构
菜单提供一个上下文明确的短命令集合。字段取值使用选择控件;大量可搜索的命令须另做检索契约;普通站点目的地列表默认采用链接+披露按钮。确需把链接放入完整菜单时,保留目标和链接行为并完成菜单键位,不能仅在导航列表上加 menu 角色。动作表是触控上的呈现选择,不会自动成为 Web 菜单或独立任务。
解剖:命名的触发器、展开状态、菜单名称、稳定的命令项、可选的分组标签/分隔、不可用原因、子菜单指示;指示图标不代替名称。每项的类型明确为执行、链接、布尔切换、互斥选择或子菜单父项。勾选命令采用对应的 checked 语义,不与表单多选混淆;分隔/标题不激活。父项在本候选中只展开,不同时执行另一个默认动作。
输入为上下文、允许披露的条目、状态与可用原因;输出为打开、关闭原因、聚焦变化、命令意图或期望的 checked 值。显示一个选中标记不是执行回执。关闭原因区分 Escape、外部点击、Tab 离开、激活、撤权、锚点消失。
7.2 状态与输入路径
APG 基线:触发器 Enter/Space 打开;菜单中上下移动,Home/End 到边界;子菜单用方向键进入/返回;Escape 关闭当前层,禁用项可聚焦但不执行。Tab 离开菜单系统,不逐个遍历菜单项。menuitemcheckbox/radio 区分持续值,展开父项暴露 haspopup/expanded。不同容器方向的键位不得混用。
YUDS 具体候选:首次打开时焦点放在首个可聚焦命令项(可包括允许披露的禁用项,标题与分隔不作为命令项),禁用项保留发现路径且禁止激活;Home/End 和上下循环统一实现。字符查找从可见标签开头匹配,重复首字符时循环匹配,不吞掉输入法的组合输入。LTR 下右方向键进入子菜单首项、左方向键回到父项;Escape 仅退出当前子层,再按一次才关闭根菜单。子项执行后关闭整条命令菜单链;打开确认对话框时焦点直接交给对话框,不能先闪回触发器再移动。外部点击关闭时尊重被点击的有效目标,不能强行拉回菜单按钮。Tab 关闭后按触发器在正常文档序列中的位置前后离开,不把已隐藏的菜单作为下一站。
触控以点按打开、逐项点按执行;子菜单父项有清楚的展开入口,窄屏可呈现为同层替换的列表,并提供“返回上级菜单”按钮。只有 hover 或长按的路径不合格。层次过深时改用有标题的面板,不把滚动列表伪装成无限级菜单。
7.3 内容、溢出、权限与组合
命令名称可换行;风险/对象说明可由独立的辅助文本关联。视口变窄时自动避让与滚动,保持当前项在可视区内;浮层随锚点重定位,但不重新开闭。锚点销毁或撤权时关闭菜单,并移到同对象的有效邻项/区域标题。子菜单避让后的视觉位置不改变父子身份。
暂时条件不满足、且允许用户知道该功能时,保留禁用项和安全的原因;不允许披露功能或对象时,从可访问树、搜索/typeahead、提示和缓存中移除。禁用原因不是 Tooltip 独占的内容。权限更新使当前焦点项隐藏时,优先移到下一个合法的同层项,其次前一项,再次父项或触发器;无合法条目时关闭。执行竞态被拒绝时不能先显示成功,也不自动选择附近的命令。
组合:菜单属于父对话框的活动层;Escape 不穿透父层。工具栏溢出复用同一命令身份/权限/处理中状态,不能把输入框硬塞进 menuitem。危险命令进入原有的确认契约,不因位于“更多”中而省略确认。
7.4 精确中性夹具(全部运行未执行)
- NAV-M1:对象 R-01 的“更多操作”含“复制名称”、子菜单“导出”→“文本”“CSV”、禁用的“归档(正在处理)”。Enter 打开、Down 到导出、Right、Down、Escape:只回到导出父项,执行次数为 0;再按 Escape 回到触发器,父任务保持打开。
- NAV-M2:同一数据下,触控点按导出 → CSV:恰好记录一次导出意图,包含 R-01 与 CSV;外部点击只关闭菜单,不执行任何项。另行单独测试 Tab/Shift+Tab 后的正常前后目标,焦点不回到隐藏节点。
- NAV-M3:焦点在归档上,权限版本由 P1→P2 且禁止披露归档:移除其名称/原因/索引,焦点到合法的前一项;迟到的激活按 P2 拒绝。若 R-01 整体撤权,关闭菜单并落到安全的区域标题。
- NAV-M4:容器由宽变窄,导出子菜单处于活动状态;中文标签扩至“导出当前记录中允许访问的全部文本内容”,再切换到 RTL:完整意义可通过阅读/滚动获得,父子归属不变,执行 0 次,焦点仍是同一子项。须记录实际的方向键与 AT 顺序,不能仅凭截屏通过。
来源和证据限制见本组来源。
示例
“更多合同操作”包含“复制链接”“查看变更”;“删除”与普通命令有清楚的分组和后续后果说明。菜单里的危险入口仍必须经过相应的业务确认。
验收
键盘能打开、探索、取消与执行;菜单关闭后无残留的隐形焦点项;滚动、窗口缩放后,菜单不遮挡唯一的退出路径。
CMP-05 基线正常夹具
合同 A 的“更多” → 浏览到“查看历史” → 进入 A 的历史。
CMP-05 基线失败夹具
菜单打开后撤权 → 执行时重新校验、拒绝并给出安全位置,不泄露历史内容。
8. 组合案例、验证与主档索引
组合案例
选中 12 份合同批量发送提醒。按钮初始显示“发送提醒(12)”;预览显示可发送 10 份、权限受限 2 份,确认时明确实际范围;执行中显示已处理数量;结果为 9 份成功、1 份失败、2 份未执行。按钮不显示笼统的“已发送 12 份”。复杂范围归查询、选择范围与批量执行。
验证与来源
全部测试未执行。最低样本包含禁用原因、焦点可见、重复激活、结果未知、长标签、窄布局、读屏名称、权限途中变更。语义通过后才验证具体视觉方案;初始色值与几何沿用代理已采用的 D01/D02/D05 主档;框架依赖及实际视觉验证仍待证据。
来源核查于 2026-10-18:按钮相关的 Web 语义参考已链接官方 APG,其余为 YUDS 的行为建议。浮层见浮层组件:对话框、抽屉与提示;反馈见反馈组件:让状态和结果可理解。
主档索引
本节仅提供追踪导航;完整契约及基线正常/失败夹具已归入同名的组件主节。CMP 编号只用于规范追踪,不是组件 API;用途、结构和变体见同名组件主节。输入/输出指可观察的信息与意图,不把意图当作业务完成。正常与失败夹具均按“前置条件 → 动作 → 预期”书写,实际平台执行全部未执行。键位为已注明的 Web 模型,原生端按本章平台映射另行验证;触控必须有显式可点的入口,不依赖悬浮或拖拽。
CMP-01 表中的“焦点留原位”,按本页「CMP-01 / ACT-BUTTON 普通按钮」的异步焦点补充解释:只在原控件仍可聚焦且用户未移走焦点时保留,不覆盖有效去向与禁止抢回焦点的要求。
- CMP-01 动作按钮:本页「CMP-01 / ACT-BUTTON 普通按钮」(第 2 节)
- CMP-02 图标按钮:本页「CMP-02 / ACT-ICON 图标按钮」(第 3 节)
- CMP-03 切换按钮:本页「CMP-03 / ACT-TOGGLE 切换按钮」(第 4 节)
- CMP-04 拆分按钮:本页「CMP-04 / ACT-SPLIT 拆分按钮」(第 6 节)
- CMP-05 菜单按钮:本页「CMP-05 菜单按钮、命令菜单与子菜单」(第 7 节)
历史补记:2026-10-19 主操作与按钮变体原文
以下原文保留当日记录,不扩大批准范围。现行主操作规则以上文为准;完整八变体 API/材质映射及批准与拒绝配对例外仍待后续提案与用户决定,见 YUDS 统一设计系统的执行说明。
每个独立任务上下文至多一个品牌主操作,不机械限制整个页面只能有一个。页面主体、独立任务对话框或抽屉可以各有一个主操作,但必须有清楚的对象、任务目标与操作边界;不得人为拆分区域来增加主按钮。
统一 Billgo 八种视觉变体:
primary、outline、neutral、minimal、general、success、warning、failure。前四种用于强调层级,后四种只用于相应状态上下文。状态强按钮是所在组的主操作,不与品牌主按钮并列;批准与拒绝配对按既有例外。outline与neutral为同级替代,按表面风格选择,同组不混用。动作按钮、图标按钮、拆分按钮等仍属于结构与行为分类,不等于上述视觉变体。原有权限、结果未知、错误恢复和无障碍契约保持不变。组件实现及任务验收尚未执行。