状态:普通表、交互网格的结构与能力是建议;格内草稿与离开政策、YUDS-090100-04 格内事件模型和 Web treegrid 键位是 YUDS 候选。B1-TREE 通用契约可修订,初始设计输入按 D01—D08 主档采用。未选择网格库、框架、固定行高或品牌样式;API、设计资产与实际平台支持未验收,全部夹具与验收场景的运行均未执行。 更新:2026-10-19 所属章节:复杂数据工作模式
本页是数据工作模式中的结构与交互主档;服务端查询、权限、事务和业务校验不由表格组件定义。
共同设计与验收边界见基础组件与交互契约,本页的特殊条件与来源限制就近说明。
本页依次覆盖:
- TBL-DATA 普通数据表与交互网格
- B1-TREE:树与树表
- 解剖与信息层级
- 排序、分组与展开
- 列宽、固定、重排与隐藏
- 行选择与行操作
- 网格键盘模型
- 行内编辑与保存
- 复制、粘贴与批量填值
- 分页、加载更多与虚拟化
- 实时更新、失败与性能
- 业务验收场景
- 输入模式、虚拟化与替代路径夹具
1. TBL-DATA 普通数据表与交互网格
1.1 用途、非用途与选型
普通表用于同结构记录的行列阅读、比较与少量明确动作;表内存在复选框、链接、排序按钮并不使表本身成为复合控件。交互网格仅在连续格间定位/编辑的任务收益足够、完整内部焦点合同及等效路径可验时采用。记录数量、固定表头、虚拟化、视觉紧凑或某供应商称“interactive”都不单独决定 grid。键值元数据用描述列表,线性内容用记录列表;父子数据另按树/矩阵合同,不把普通展开行伪装成树。
每个实例先登记:任务、字段与数据类型、表/网格语义、排序/选择/编辑/展开是否支持、查询范围、分页机制、焦点模型、原生替代路径。没有该功能的表不挂相应的可编辑/可选择状态,不以批量快捷键暗示全结果操作。普通 grid 的导航、格内操作、字段编辑及输入法上下文严格引用 YUDS-090100-04;treegrid 导航增量见下节 B1-TREE-KEY,进入格内后仍完整沿用 04。不能另定 Tab 保存,或用 Escape 清掉历史草稿。
1.2 结构、值与独立状态
本页用少量字母区分容易混淆的状态:R 是当前显示结果,S 是已选范围,V 是展示偏好,W 是已经提交的写任务;它们不是规定的 API 字段。完整定义见查询、选择范围与批量执行第 1.1 节。E 则是表头父选择框当前明确范围内已解析、有权且可操作的稳定 ID 快照,见第 1.5 节及选择组件:值、范围与层级的 CHO-CHECK。先按这些中文含义阅读,不必记住代号。
表区包含:可理解的名称/说明、实际 R 范围和更新时间、查询/视图入口、列标题及类型/单位、稳定行身份、必要的选择控件、独立的行操作/展开、结果状态、带范围的汇总及分页。标题、检索、批量摘要与分页不属于可免于重排的二维内容;表体可按实际二维理解的需要局部滚动,外围工具仍须重排。
列的稳定字段 ID 与行对象 ID/读取基准共同定位值、草稿、错误、选择和动作;显示行号不是身份。真实值与格式化显示、单位、精度和可披露状态分开。0、空缺、不适用、未知、受限、计算失败、未加载、过期各有可理解的表达,不统一变成无说明的破折号。受限值不藏在 title、屏幕阅读文本、排序键输出或可控复制缓存里。
状态按对象/字段独立:
- 读取成功/局部缺失/失败;
- 可读/不可读;
- 可编辑/只读;
- 已选/未选;
- 聚焦;
- 展开;
- 草稿/待保存/保存中/明确失败/未知结果/冲突。
单行失败不抹掉合法的其它行;一个汇总请求失败不让所有已确认行变空。刷新时标记旧 R,必要时保留合法旧值与草稿,不把表体替换成会导致焦点或组字丢失的骨架。空查询、没有记录、查询失败、被筛至零和无权阅读不能共用一条“暂无数据”。
1.3 TBL-SORT:按字段语义排序
排序意图绑定字段、方向、优先级、实际范围及读取基准;只允许排序能力已知的字段。表头可达的按钮承担排序,当前方向与可用动作可理解,不让图标/颜色成为唯一信号。明确区分请求中的新排序与当前 R 已确认的排序;失败时保留原 R 次序及真实标记。未排序时是否恢复产品默认顺序由实例声明,不能暗示后端存在“原始自然序”。多列排序提供可读的优先次序及清除/调整入口;不能只在多列同时挂 aria-sort 就声称读屏获得了优先级。
以下是字段语义检查表,不提供统一比较函数或 API:
| 字段类型/状态 | 实例必须声明/验证 | 禁止捷径 |
|---|---|---|
| 数量 | 基于真实数值和已声明单位;精度、可比较范围及同值次序 | 按“2”“10”的格式化字符串排序;直接比较不可换算的单位 |
| 文本/标识 | 语言排序、大小写/重音及是否按自然数字分段;标识是否纯字符串 | 自动把有前导零的编号当数量;语言切换无说明地改变稳定顺序 |
| 枚举/状态 | 按明确业务次序或已声明标签顺序;同名枚举仍按稳定 ID | 用翻译标签猜业务优先级;把未知枚举排成正常最低值 |
| 日期/时刻 | 日历日期、当地时间或绝对时刻的比较基准,必要时含时区;相对显示所用的实际值 | 按“刚刚/昨天”或显示格式字典序排序;日期偷转时区 |
| 空缺/不适用/未知/失败 | 可排序类别、排前或排后及处理语义由产品声明;受限内容遵守披露策略 | 统一当作 0、空串,或使用可泄漏受限值的隐藏排序键 |
| 远程/局部数据 | 是完整查询的服务端排序,还是明确标注的本页/已加载排序 | 本页重排冒充全量;混入不同查询/版本的增量页 |
同值需有服务支持的稳定次级次序或明确的快照语义;不能仅靠前端追加排序就保证服务端翻页无重无漏。持续变化的数据集若服务不保证稳定遍历,应说明可见变化并提供安全刷新/重新定位,不能承诺没有遗漏。查询、排序和页身份一起换代;排序不改变按 ID 保存的 S,更不把旧页表头父选择 E 偷换为新成员。
1.4 TBL-VIEW:列设置、固定与密度
列设置负责可见性、顺序、宽度/固定和密度等展示意图;不是字段授权、记录编辑或任意查询修改。设置面板标明本地/个人保存/共享视图的范围,捕获本次进入时允许持有的原始 V 快照。若有“应用/取消”,面板内的改变只改临时偏好,应用时才一次性接受到 V;取消仅放弃本层临时偏好,不回滚数据草稿,外部 V 更新按下段冲突合同保留。即时预览则显式说明预览和取消的范围。远端偏好保存另有 pending/失败/未知状态,回执归属提交时的偏好修订,不能把之后改动的 V 当成已经保存;失败时不把本地现状叫作已保存。
面板打开时捕获 V 修订、字段集合/定义、作用范围与授权版本,临时偏好与当前已接受的 V 分开;即时视觉预览也不把外部 V 更新混入原取消基线。外部偏好/字段/权限发生变化后,应用前先比较当前目标与基准,冲突需重新审阅,不能用旧的临时列集合覆盖最新 V。取消只放弃本层临时变化并回到当前外部 V,不把它回写成打开前的旧值;未发生外部更新时,才按本次预览基线恢复视觉。异步可用性核验须绑定临时偏好修订、字段和授权版本,过期的成功结果不接受新修订,也不退回旧修订。安全变化立即生效,不能等用户按取消后才隐藏受限列。
不采用“唯一标识列和动作列一律不可隐藏”的外观硬规则。任务不变量是:用户仍能区分目标对象、理解必要的范围/单位/风险、获取错误并完成获准操作。
- 原始数据库 ID 不必永远展示;有充分消歧的名称/编号或同权限详情时,可隐藏冗余列。
- 动作列若有等效、可发现、键盘/触控可达的详情入口,可按任务验证后隐藏。
- 若隐藏会使两条同名记录无法区分,或移除唯一有效的操作/错误恢复入口,则拒绝该组合并说明具体原因,或提供等效布局。
- 不能只说“系统列不能隐藏”而不验证真实任务。
隐藏有活动筛选/排序的列,不自动取消其查询作用,摘要仍能解释;任务需要该列可见时说明原因。被权限撤回的字段不同于用户隐藏:先清理受限数据、可访问名称和缓存,关联条件失效时停止/修复查询,不静默忽略条件而扩大结果。升级后字段删除或偏好引用失效时,按稳定字段身份核对并给出有意义的修复说明,不按位置把旧宽度/排序套到新字段上。
列调宽/重排有键盘路径及无需拖动的可点击路径,例如明确的“移到前/后”“调整宽度”“恢复此列”;本节不批准步长/尺寸值。重排、固定和密度变化不提交记录,不因测量而重建编辑器;不得将固定列复制成两个可交互/可被读屏的实例。窄屏可取消固定或改换布局,当前焦点/错误不能被粘性区域遮住。列设置里仍能找到恢复入口,不能在隐藏所有信息后留下不可恢复的空表。
整套设置、原始查询草稿 D、命名视图和真实个人存储合同见查询、选择范围与批量执行「B1-VIEW:视图设置与个人配置」;本节仍负责列展示的任务不变量。
1.5 选择、展开、编辑与事件所有权
普通表内的复选框、详情链接、展开按钮和菜单分别执行自己的动作,事件不冒泡兼做整行选择/打开。表头父框沿用 CHO-CHECK:E 是当前明确范围、已解析、有权、可操作的稳定 ID 快照;S 跨页保留不代表 E 跨页保留。E 未解析,或查询/页/授权版本失效时,父操作不可用并给出原因;发起时的范围身份随选择意图一起核对,旧的键盘/click 意图不能落到新 E 上,即使成员碰巧相同。全量查询选择只通过查询、选择范围与批量执行的独立升级动作。聚焦、选择、打开详情、展开及格范围选择保持独立。
展开按钮表达对应 R-001 的扩展内容及其状态;加载失败留在该对象下并允许重试,不用同索引 R-002 的详情补位。收起不撤销已提交的写入;若扩展中含未提交草稿,按声明保留或经过同一离开保护,不能无声销毁。子表若任务确有必要,需要独立的名称/边界/焦点;默认优先使用详情区或页面,避免难以辨别的嵌套滚动。
编辑保存延续「行内编辑与保存」和 YUDS-090100-04 的会话基线:进入编辑时的草稿是本次 Escape 的基线,Tab 可保留已有草稿,已确认的保存不被 Escape 伪装撤销。用户切换排序/页/列布局时,若草稿可安全保留,则按 ID/字段/版本归属保留且可找到;做不到时按既有 NAV 单一流程先决定是否离开,不能为了翻页偷偷保存。复制/粘贴/填值沿用原主档的事务单元,不借列设置重新定义。
1.6 虚拟化、键盘与平台差异
普通表使用原生表结构及控件的自然 Tab 顺序,表体静态单元格不人为加入逐格 Tab;辅助技术按真实的行/列标题读取。普通 grid 引用现有 YUDS-090100-04 完整模型;treegrid 导航见 B1-TREE-KEY,格内操作/编辑/IME 仍完整沿用 04。两者都保留可点击的进入/退出入口与明确保存。网格导航键不抢占字段的方向键/输入法;表外的 Ctrl/Cmd+A 不变成全量业务选择;未声明范围快捷键就不拦截它。
虚拟化必须维持对象/字段/基准与逻辑位置;活动后代或焦点引用指向真实存在、可感知的目标。目标未准备好时,保留当前合法焦点/加载说明,不把焦点设到未渲染节点,也不用占位行冒充对象。APG 行列属性用于正确表达逻辑结构,未知总数保持未知;不能从滚动位置猜全局行号。普通分页表作为独立的当前页表,或作为连续的虚拟集合,都要先声明语义范围,再使用匹配的逻辑索引,不能混用本页索引与全数据总量误导读屏。
组字过程中的排序、分页、列隐藏/固定、尺寸变化和节点回收沿用 YUDS-090100-01/02:延后影响编辑宿主的变动,或保持稳定宿主;不能为刷新强制结束组字,也不能把 compositionend 绑定到当前位置。撤权/删除时优先阻止原目标继续编辑,按平台实际机制处理候选;晚到的输入不复活对象、不写入替位行。这里只增加组合检查,GEN-GRID-02 仍是原网格夹具,不复制另一套事件模型。
原生端可以选用平台表/列表/可访问集合加对象详情表单,但必须验证同字段、同版本、同更改集与同事务结果;用若干卡片导致无法完成比较,或把联合提交拆成逐项写入,都不算等效。触控与软键盘需有明确的行/字段操作入口,不依赖 hover、双击、长按或拖拽。Web 与原生端各自记录实际 OS、浏览器、辅助技术、输入法及版本;目前没有运行证据。
1.7 TBL-DATA 文档夹具(全部未执行)
| ID/类别 | 固定前置与事件 | 可观察预期与失败判据 |
|---|---|---|
| TBL-DATA-N 正常表 | 普通表 R-001/R-002,各含名称、数值、详情、复选框 → 用键盘读标题/值,勾选 R-001,再打开其详情 | 保持 table 语义;勾选变化 1、详情导航 1,彼此不兼发;焦点/已选/详情分开 |
| TBL-DATA-F 排序失败 | R 为数值升序,用户请求降序后失败,旧的成功结果/计数晚到 | 当前行与排序标记仍属原 R,失败明确;请求方向不冒充已生效;不把失败当空表 |
| TBL-DATA-R 撤权 | R-001 编辑/选择中被撤读权,旧详情和保存回执后到 | 受限内容/输出清理,新写入 0;原写回执仅归原 W 的可披露核查;R-002 不被替位写入 |
| TBL-DATA-G 增长/固定 | 长列标题、长混排编号、换行值、大字体/窄屏,固定的身份区遮挡目标 | 调整/取消固定或等效布局后,仍可定位对象、完整值、错误和操作;无重复的可访问副本,外部筛选/分页可重排 |
| TBL-DATA-S 类型排序 | 数值 2/10、编号 02/2、两个同值记录、空/未知分别存在 → 按各自声明的字段排序并翻页 | 数值按 2 在 10 前;编号依声明而非偷偷转成数;空/未知不当 0;同值遍历依据真实服务能力,不凭前端承诺 |
| TBL-DATA-V 列设置 | 两条同名记录有不同编号;先隐藏唯一的消歧列,再提供可达的消歧详情;动作另有等效入口 | 第一种组合失败并说明具体原因;第二种组合在实际任务验证后可接受,不一刀切锁定所有身份/动作列;取消回到合法 V,数据写入 0 |
| TBL-DATA-X 虚拟化/IME | 继承 GEN-GRID-02:R-001 组字未完,排序/页请求使 R-002 拟占其节点,再确认候选 | 延后或保持宿主;候选只属 R-001 草稿,不保存、不串写;引用/焦点有效。撤权分支晚到事件提交 0;不得用普通表的通过结果替代网格证据 |
| TBL-DATA-E 编辑退出 | 继承 GEN-GRID-01:确认值 x,改为草稿 y 后 Tab 离开,再进入改为 z 后按 Escape;子选择器先打开再按 Escape | 第一次只关闭子层,不取消格草稿;重新进入后的取消恢复 y 而非 x;Tab/重排写入 0,明确保存才写一次;完全采用现有 04 合同 |
| TBL-DATA-C 偏好并发 | V1 打开面板,临时隐藏 c 且核验在途;外部 V2 重排列,c 又被撤读权;旧核验成功后应用/取消 | 不接受过期偏好、不覆盖 V2、不恢复 c;临时修订已改时,旧结论不套到新值;取消只放弃本层临时变化,远端已发偏好的回执独立归属原修订 |
| TBL-DATA-A 展开/汇总 | 展开 R-001 的请求失败,切到 R-002;部分页合计已知而全量汇总未知 | 错误归 R-001,晚到回包不填 R-002;局部合计明确范围,全量未知时不以局部冒充;展开不改变 S |
来源界限:APG Table 和 APG Grid 支撑静态结构与复合焦点的区别;格内草稿与离开政策仍是既有 YUDS 候选。Sortable Table Example 展示真实的表头按钮,且明确示例需要实际辅助技术测试。Grid and Table Properties 支撑逻辑索引、未知总数及多键排序表达的限制;不替产品提供查询与排序服务。
Geist Table 的语义表和克制结构可参考;不采纳把 unknown/not applicable 统一成破折号、强制英文大小写、固定相对日期阈值或字体/API 建议。Carbon Data Table 仅参照表区结构与阅读/操作边界;固定行高、依赖 hover 的截断、供应商变体数量不引入。列隐藏的任务判断、排序数据类型、授权与虚拟化身份是 YUDS 自身推导。
来源与证据边界见本组来源。
选型与表/网格的差异统一见第 1.1 节;焦点和原生替代路径见第 1.6 节,不另设第二套模型。
2. B1-TREE:树与树表
状态:通用契约可修订;初始设计输入按 D01—D08 主档采用,API、设计资产、实际平台支持与全部真实运行仍未验收。七 role × 固定 step、三文字角色各九档与独立任务至多一个主操作保持不变;本族不新增另一套色值或服务能力。
2.1 B1-TREE-USE:用途、非用途和变体登记
只有父子关系本身帮助定位、比较或决定范围时才保留树。静态层级说明可用有层次的普通列表;逐层进入可以用列表+路径;只因数据含 parent 字段,不足以选 tree 或 treegrid。按状态等属性临时分组不是对象父子关系,不将分组头伪装为真实父对象。
- 展示树:读层级关系,无选择任务。可展开内容用真实披露控件;纯静态嵌套列表不强加复合方向键和可选择状态。
- 导航树:定位并打开对象/位置;聚焦、展开与当前打开目标分开。导航遵 NAV,不能为了换节点自动保存对象草稿。
- 选择树:仅增加对已声明范围的选择,完全采用 CMP-19/CMP-SELECT-KEYS/CHO-CHECK;不在此另定父子级联、全量查询选择或权限继承。
- 树表:确需在层级上下文比较多字段。普通层级表可保留 table+明确展开按钮;仅当任务需要完整二维复合导航/格内操作时采用 treegrid。多列、行数多、虚拟滚动本身均不是升级理由。
每个实例登记:层级来源及身份、显示/导航/选择/编辑能力、父子范围模型、加载/排序/搜索范围、未知分支政策、焦点模式、计数来源、折叠草稿策略、真实平台替代。默认不新增重挂父节点、拖动对象、目录权限管理等写入业务;列重排属于视图设置,不等于节点迁移。
2.2 B1-TREE-STRUCT:结构、身份与独立状态
父行自身值、子树汇总和二者组合继续引用矩阵与层级数据工作区「层级、树形表与树形网格」;部分已加载合计不冒充全子树合计,不在此增加汇总引擎。
组合结构包括名称与当前范围、必要工具栏、层级主体、可理解路径、按分支归属的加载/错误/继续加载入口、选择摘要(仅选择型)、必要分页/详情。工具栏声明作用于当前分支、已加载可见节点或真实全树范围;「展开全部」与「选择全部」是不同操作。计数区分当前可见、已加载、匹配、可操作及已选;没有真实总数就不显示总树精确规模。
每个显示节点有稳定的层级出现身份和对象身份;路径/父出现身份/层级版本可变,标签和当前行号不是主键。普通树的一次出现只有一个父节点。同一对象经不同入口重复出现时,先声明是否只是别名,以及选择按对象还是按出现去重;不能同名去重、重复累计同一对象,也不能把一条路径的展开状态套到另一条路径。不能确认这种模型时改用带路径的结果列表,不伪造树。
分开保存:当前展开意图、当前可见位置、聚焦对象/字段、选择集合、读取版本、草稿与写入任务。分支状态至少能区分:
| 分支事实 | 可观察表达与允许动作 | 不得推断 |
|---|---|---|
| 子项是否存在未知 | 表达未核实;仅在真实探查能力下提供展开/加载入口 | 未加载等于叶节点、已加载量等于总量 |
| 已知有子项,未加载/加载中 | 父对象保留,加载归该分支;重复激活不重复启动同一有效读取 | 展开一次自动选中后代或递归读完整树 |
| 已加载一部分 | 已有合法子项可读,明确仍有后续;继续加载有当前分支身份 | 当前末项是最后一个后代,部分成功是全部完成 |
| 当前授权范围下已确认无子项 | 才可按该范围呈现终端节点 | 无权查看的子项不存在;缺权限可以泄漏隐藏数量 |
| 分支失败 | 父对象、合法旧内容和错误/重试分开 | 失败当空分支/叶节点;错误作为可选对象 |
| 已过期/结构冲突/受限 | 依据可披露事实说明并停止失效交互;安全清理优先 | 旧路径仍可导航/执行,受限值可留在可访问名称 |
循环、自指、缺失父链和跨版本路径不由前端随意修复成根;隔离异常边并提供可理解错误及真实可用刷新/平面详情。若服务允许部分树可用,合法分支可继续;不能一边显示错误边仍无限展开循环。
2.3 B1-TREE-DATA:懒加载、排序、搜索与事件版本
每次分支读取绑定当前主体/空间、树及层级修订、父出现与对象、查询/排序、分支分页位置、授权版本、请求身份;这些是语义必需信息,不要求供应商采用某字段名。接收时重新核对目标仍可披露且结构身份兼容。
- 展开 P 后又收起 P,旧成功最多在仍获准且版本兼容时作为缓存,不重开 P、不移焦点、不改变选择。P 被移动/替换、过滤条件改换或权限更新后,旧请求不能填充新路径或另一节点。
- 继续加载失败只影响相应分支的后续段;不抹已有合法子项。不假设服务支持跳页、总数、快照或任意定位。重复页按真实稳定身份及服务分页规则核对,不用显示索引猜去重;缺稳定遍历保证时提供真实限制与安全刷新。
- 默认只对同父节点下的兄弟集合按 TBL-SORT 排序,保持父子结构。若产品提供跨层级平面排序,必须显式切为带路径结果模式;不将全局排序后的行继续冒充原层级。部分本地排序明确标为「已加载子项」,不宣称全分支已排完。
- 搜索登记「已加载范围检索」或真实支持的远程全范围检索。未检索未知后代时,不能断言全树无匹配。匹配项与仅用于解释路径的祖先区分;上下文祖先不是自动命中、自动可选或自动有权进入。没有披露权的中间路径不显示名称/数量;采用获准的路径摘要或说明无法定位。
- 清除搜索恢复的是仍有效的用户展开意图与定位,不是旧 DOM 索引。搜索临时展开路径与用户自己展开分账;焦点已离开树时,清除/回包不抢焦点。定位结果需要补读路径时,目标版本/当前意图失效就停,不以新标签猜同一节点。
- 「展开全部」默认不能承诺发现全部未知后代。只能提供实际可完成且明确命名的范围,如展开已加载分支;真实服务支持全范围展开时还须声明停止/取消、进度与受限分支。取消停止本次继续展开意图,不回滚期间用户独立展开的节点,不自动发送选择或业务写入。
父子选择仍冻结于明确解析集合。即使 P 已勾选、随后加载得到新子项 N,也不把 N 自动加入 S,除非实例采用经过独立说明和批准的动态后代模型。折叠/搜索隐藏已选项不等于取消选择;撤权则按当前披露策略处理,不以「保选择」保留受限名称或扩大操作权。
2.4 B1-TREE-KEY:树表键盘不能拼接成两套竞争模型
展示/导航/选择树继续 CMP-SELECT-KEYS。层级表的普通 table 变体继续自然 Tab 和展开按钮,不拦截整表箭头。下面是为 Web treegrid 单独登记的候选:以单元格为导航单位,首个数据列承载层级;不再同时提供一套可聚焦整行的导航模式。其它 treegrid 模式须另列完整键位和测试,不能半套用「树的左右」半套用「表格的左右」。
| 上下文/动作 | 此候选的唯一结果 |
|---|---|
| 导航中的 Up/Down | 当前字段移至前/后一个已展开逻辑行;不展开隐藏分支、不勾选行 |
| 导航中的 Left/Right | 沿当前行相邻单元格移动,边界停;不兼做父子层级展开/回父 |
| 首个层级格中的 Enter | 该格存在可展开关系时只切换本行展开意图;终端节点不借此提交/选择/编辑。详情和编辑另有明确入口 |
| 其它操作/编辑格中的 Enter | 进入 YUDS-090100-04 的格内操作或字段编辑;内部控件之后拥有其事件 |
| Home/End;Ctrl+Home/End | 前者到本行首/末格;后者到当前逻辑集合首/末行的同字段。未加载末尾不假称全数据末尾,不暗中展开所有节点 |
| Tab/Shift+Tab | 导航态离开此复合网格;进入格内后沿 YUDS-090100-04 本格控件边界退出。此退出政策是 YUDS 明确选择,不声称是 APG 所有 treegrid 示例的唯一模型 |
| Space/范围快捷键 | 仅已登记且有可见等效入口的选择控件/模型可处理;无声明就不代做树选择、整表全选或默认提交 |
| Escape | IME、最上层子控件、格内编辑/操作依次拥有;导航态不擅自「收起全部」、抹草稿或撤销已发写入 |
本候选首层级格仅包含静态节点名称、层级说明与披露能力,不放详情链接、名称编辑器、菜单或选择框等其它格内操作。展开控件提供可点击/触控入口,读屏获得同一名称和展开状态;展开不兼做导航、选择或保存。详情、名称编辑、选择及菜单等全部放在可达的独立操作/字段格,用户可用水平导航到该格、Enter 进入 YUDS-090100-04 格内模式,再操作其内部控件;也提供明确的点击/触控入口。不能把这些动作放回首格后却没有键盘进入路径。叶节点的首格 Enter 无动作,其详情/编辑仍可在独立格完成。列设置可以调整展示,但不能隐藏唯一层级关系/展开入口却仍声称当前是可操作树表;替代布局需保留等效入口和可理解关系。
Web 使用 treegrid、row、适当行列标题及单元格语义;只对真实可展开节点表达 expanded,编辑禁用语义只用于确有编辑能力的上下文。选择语义须反映真实选中对象,不能以焦点移动冒充业务选择。本候选新增的首层级格披露动作是 treegrid 导航契约;进入格内后完整引用 YUDS-090100-04,不修改普通 grid 已有模型。APG 提供可选 treegrid 模型和键位依据;此处的选择范围、草稿、回执与退出政策是 YUDS 决策,均待实测。APG Treegrid
2.5 B1-TREE-VIRTUAL:虚拟化、折叠、撤权与增长
虚拟化保持对象/层级出现/字段/读取基准;同级位置、层级深度、展开后逻辑行位置不是一个数字。树的集合位置反映同父集合,树表的行位置反映声明的逻辑表范围;不把视口位置、全树节点总数或尚未展开后代数混成当前行计数。已知逻辑范围使用真实索引,未知使用规范允许的未知表达/清楚说明,不能编造父级计数。缺少必要层级位置数据时,不以不完整 ARIA 声称已交付虚拟树,改用能正确表达的逐层列表/分页表。
活动引用必须指向真实存在、可感知的节点。键盘目标已知但未渲染时先准备目标,再转移焦点;需要网络才知道目标时保持当前合法焦点并说明加载,失败可恢复。到已加载末尾与到全数据末尾分开;滚动回收不能为了省节点丢失编辑器、组字或焦点。APG Tree View 与 APG Grid and Table Properties 支撑层级/行列属性,真实数据范围仍由实例保证。
折叠祖先前先处理其内部活动内容:焦点/活动格在子树内且仍由本操作拥有时,转到可见祖先的层级格;若用户已将焦点移到外部则不抢回。可安全保留的子树草稿按稳定身份保留并有找到/继续入口;否则走既有 NAV 单一离开保护,不自动保存。IME 期间延后会破坏宿主的普通折叠/布局,或保持稳定宿主;安全撤权不能延后,沿 YUDS-090100-01/02 处理晚事件。子树拥有的弹层先依 LP-COMMON/LP-PANEL 解决其关闭和草稿;不能留下锚点隐藏的孤立弹层,也不能一个 Escape 关子层并折叠父树。
节点删除/重挂/撤权立即使失效路径、焦点目标及 E 范围失效。仍获准的对象草稿可按对象身份继续保留,但不可无声改写为另一出现/另一父上下文的操作;依赖父路径的未提交意图须重核。已发写入不因树消失而从 W 中删除;只在真实核查能力下查询原任务,按当前权限披露,不假称「折叠已取消请求」。
内容增长包括同名跨分支、深层长路径、长列头/换行值、大字体、RTL、窄屏和很多兄弟。缩进、固定列、二维滚动不能遮住名称/展开/错误;完整路径有键盘与触控可读入口,不只靠 hover。深度不设供应商数字上限;当路径挤压使比较/操作不可完成时改为逐层进入或详情,并保留返回位置和相同任务结果,不靠缩小文字解决。
2.6 B1-TREE-PLATFORM:平台与交付门槛
Web 分别验证普通树、普通层级表和 treegrid;任一通过不能替另一种。原生端选实际支持的可访问树/大纲/集合控件,记录读屏层级、展开、外接键盘、触控和输入法行为,不把 Web ARIA 当原生 API。窄屏可用路径+分层列表+对象详情/同权限比较表;须保留查询范围、明确选择、允许草稿、同一更改集和写入结果,不能以只读卡片替代编辑任务。
未知后代解析、结构快照、分支定位、稳定分页、可披露计数、动态后代选择均属真实产品/服务能力。缺能力时收缩到已知范围并明确说明,不用「组件支持」代替证据。参考 SAP 历史 Tree/Tree Table 的任务区分与小屏替代提醒;不采纳其条数/深度/密度阈值、单行截断、专有插件和固定行高。历史 Tree、历史 Tree Table
2.7 B1-TREE 文档夹具(全部未执行)
以下是文档验收定义,实际运行全部未执行。运行时记录实际 OS/浏览器/辅助技术/输入法及版本、实现修订、D/A/R/S/W/V、主体/schema/auth/请求身份、焦点/活动后代及读取/选择/接受/偏好写入/业务写入次数;中性数据不包含真实敏感内容。原有底层夹具只引用,不重复计数。
| ID/类别 | 精确前置与动作 | 可观察预期 | 禁止事件 |
|---|---|---|---|
| B1-TREE-F01 正常 | 展开、选择和导航独立:P 含已加载叶 A/B,选择模型仅当前对象,S 为空;P 有展开按钮,A 有选择和详情入口;无在途读取。→ 激活 P 展开按钮一次;按 CMP-SELECT-KEYS 浏览至 A 并 Space 一次;使用 A 明确详情入口一次。 | P 展开;选择集合仅 A;详情目标仅 A。展开意图 1、选择变更 1、详情导航意图 1,三者对象身份可追踪。键盘浏览、展开与选择不发送业务写入。 | 展开兼选择、选择兼导航、详情入口触发整行第二次导航、业务写入 |
| B1-TREE-F02 正常/增长 | 未知后代不自动入选:P 已知有子项,A 已解析且可选,后续子项未知;采用冻结已解析子集合的父选择模型;E={A},S 为空。→ 对当前已声明 E 执行父选择;继续加载成功得到新子项 B,且未来再新增 C;重新查看已选摘要和 P 状态。 | 第一次选择只加入 A 一次;B/C 未自动加入,S 仍为 {A}。P 状态依所声明已解析范围与未知标记计算,不称整棵子树已全选。摘要说明原选择范围;新范围选择需明确新意图及重新解析。 | 自动选择 B 或 C、把未知后代当零、将冻结集合改成动态范围、业务写入 |
| B1-TREE-F03 失败 | 分支部分加载失败不变叶:P 已展开,合法 A/B 已加载,尚有后续页;焦点 A;下一页请求 q2 在途。→ q2 返回明确失败;用户激活 P 下对应重试入口;重试仍失败。 | A/B 和 P、允许的选择/草稿保持;P 仍是未完成分支,错误与重试归 P。已加载量可报 2,树总量仍未知。两次失败都不移动至不存在子项,不影响另一个合法分支。 | 将 P 改叶节点、清空整树、以错误占位项为可选对象、自动转入无关分支、业务写入 |
| B1-TREE-F04 异步/取消 | 收起后晚读取不重开:P 未展开,授权 a1 和结构 h1 有效,子项请求尚未发出,S={X}。→ 展开 P 发 q1;q1 未回时收起 P,并将焦点移至树外按钮;q1 成功返回 A/B。 | P 仍收起,焦点仍在外部按钮,S={X}。在 a1/h1 仍兼容且允许缓存时可保留读取缓存,但不再次发展开事件;否则丢弃。 | 自动重开 P、自动聚焦 A、选择 A/B、业务写入 |
| B1-TREE-F05 版本/撤权 | 父路径换代及旧读取:出现 p1 是对象 P 在父 U 下的路径,h1/a1;q1 读取 p1 子项在途。→ 结构变 h2,P 现属于父 V,出现 p2;随后 P 的子项读取权限变 a2;q1 按 h1/a1 成功到达;用户试激活旧路径的继续加载意图。 | q1 不填 p2 或同索引替位节点;旧意图无效并说明需刷新/重定位。受限名称/计数/可访问文本不复活,新读取只可基于现授权。 | 旧数据填新父路径、旧意图操作当前同索引节点、泄漏受限子项数量、业务写入 |
| B1-TREE-F06 搜索/撤权 | 搜索范围与祖先上下文:已加载树仅 A/B,未加载分支 P;实例仅支持已加载范围搜索;匹配 A 的祖先 U 可披露但不是匹配,另一路祖先 V 不可披露。→ 搜索词 z 在已加载范围无匹配;搜索词 a 匹配 A,展示获准路径;清除搜索时焦点已在搜索输入外的另一任务按钮。 | z 显示当前已加载范围无匹配,不宣称全树无结果。U 只作上下文,不冒充匹配或自动选中;V 不泄漏。清除恢复仍有效的用户展开意图,不恢复失效路径、不夺外部焦点。 | 全树零结果断言、选中上下文祖先、披露 V 名称、清除后自动选择或导航 |
| B1-TREE-F07 排序 | 兄弟排序与平面结果边界:根 U/V;U 子 A 值 10、B 值 2,V 子 C 值 1;服务只支持各父已加载子集合排序。→ 按数值升序;用户要求跨父统一排序。 | 第一步 U 内 B 在 A 前,C 仍在 V 内;范围标为已加载兄弟。第二步只有真实支持明确平面模式时才可按 C/B/A 并显示路径;否则说明能力限制。选择和草稿保留原身份。 | 把 C 挪入 U、本地部分排序称全树已排完、排序发送选择/业务写入 |
| B1-TREE-F08 键盘 | treegrid 单元格导航与层级格:Web 候选 cells-only treegrid;P 层级格为首数据格,第二格 f 可编辑,P 子 A 已知;焦点在 P 层级格,P 收起。→ Enter 一次;Right 到 P.f,Enter 进入编辑,再 Escape 回导航;Down 到 A.f,Home 到 A 层级格,End 到 A 末格;Tab 离开网格。 | 首次 Enter 仅展开 P 一次;Right 仅移格,不改 P 展开。编辑和 Escape 完整沿 YUDS-090100-04,本次草稿恢复规则不变。Up/Down 在已展开逻辑行同字段;Home/End 在同一行;Tab 到外部后继。操作计数可分别归展开/进入编辑/退出,不产生选择或保存。 | 同一 Enter 既展开又编辑、Right 同时进入子树、Tab 保存、Escape 收起全部、业务写入 |
| B1-TREE-F09 输入/嵌套 | 树表编辑中的 IME 与子层:A.f 确认值 x,先改为草稿 y 后 Tab 保留;重入编辑捕获基线 y,再改为 z 并打开格内子选择器;另一分支测试中文组字进行中。→ 按 Escape 一次关闭子选择器,再按 Escape 退出本次格编辑;重入编辑开始组字,Enter 确认候选。 | 第一次 Escape 只关闭最上层子控件,保留 z、不收起祖先;第二次恢复本次进入基线 y,确认值仍为 x。候选确认仅更新 A.f 草稿,不触发树展开、选择或保存。 | Escape 穿透折叠祖先、子层取消清除历史草稿、IME 确认触发业务写入 |
| B1-TREE-F10 虚拟化 | 逻辑位置与未渲染焦点:已展开逻辑范围包含父 P 及其兄弟子项;虚拟窗口只渲染其中一段;全树总数未知;活动格 A.f 存在,下一逻辑格 B.f 尚未渲染。→ Down 请求到 B.f;目标准备失败;随后重试成功;执行 Ctrl+End。 | 失败期间焦点保持在 A.f 并有加载/恢复入口;成功才转到真实 B.f。同级位置/层级/展开逻辑行索引分开核验;未知总数不取 DOM 节点数。Ctrl+End 只到声明逻辑集合可确定的末端,不能把未加载末尾说成全部数据末尾。 | 焦点或活动引用指向未存在节点、把视口序号当全局索引、自动展开未知后代、业务写入 |
| B1-TREE-F11 折叠/草稿 | 折叠包含草稿和子弹层:P 展开,A.f 有允许保留的未解析原稿 q;非模态子编辑层 C 打开且明确允许外部 P 折叠请求,C 稿 r 未应用,焦点在 C;可按身份保留 A 稿。→ 从明确的 P 折叠入口请求折叠;先取消 C,解决关闭,再完成折叠;重新展开并定位 A。 | C 取消仅弃 r,A 原稿 q 保持;按 LP 关闭前不孤立隐藏锚点。折叠时焦点在仍由本操作拥有时到 P 层级格;已外移则不抢。重新展开可找到 q 且仍待修正,S 不变。 | 丢弃 q 或回到远端合法值、保留孤立子层、一个 Escape 同时关 C 并折叠 P、自动保存 |
| B1-TREE-F12 撤权 | 虚拟编辑撤权与原写回执:A.f 组字中,原来已发 W1 另一次保存;A 位置拟由 B 复用;树结构/权限更新将 A 撤读权。→ 收到撤权,再收到 A 晚到的 compositionend 及旧读取;W1 后到成功/未知回执分别测试。 | 先阻止 A 新输入与新写;按当前政策清理受限值和名称;焦点到可用说明/合法节点。晚候选不写 A、不写 B、不重建 A。W1 归原任务,仅真实能力可核查且只显示允许内容;树移除不等于 W1 取消。 | 组字复活 A、按当前位置写 B、旧回执恢复受限字段、假称 W1 被折叠取消 |
| B1-TREE-F13 数据异常 | 循环和同对象多出现:服务返回 U→P→U 循环;另有对象 A 在合法路径 pA1/pA2 重复出现,实例声明按对象 ID 选择去重。→ 尝试展开循环边;分别在 pA1、pA2 选择 A,再收起 pA1。 | 循环边隔离并给错误/真实恢复入口,合法树仍可用。S 中 A 只有一个对象;两出现状态依据对象选择模型一致,但展开位置独立。没有声明多出现模型的实现须拒绝伪树或改带路径列表。 | 无限递归加载、按标签去重、双计 A、收起一条路径无故关闭另一条 |
| B1-TREE-F14 增长/平台 | 路径增长与等效替代:同名 A/B 位于不同深长路径,字段含长混排文本与错误;A 有允许草稿;当前比较/编辑任务必须保留联合提交单元。→ 大字体、窄屏、RTL;依次用键盘/触控读完整路径和字段;当前树表无法完成任务时切到逐层列表+同权限详情/比较替代。 | 身份、层级、错误和操作可达,固定列不遮挡;无仅 hover 入口。替代保同对象/权限/草稿/更改集/事务结果及返回位置;无实际等效时不判交付。每个目标平台独立记录未执行,普通表证据不替 treegrid。 | 缩小文字掩盖增长、复制双可交互固定列、拆联合提交、只读卡片宣称编辑等效 |
| B1-TREE-F15 范围/取消 | 有界展开任务:只有已加载子项展开能力,无服务全树解析;用户独立展开过 V。→ 打开「展开已加载分支」并在进行中取消;期间用户另行明确展开 U。 | 入口从未叫无限全树完成;仅操作已声明可完成范围。取消停止本次继续展开,U/V 独立意图保留;没有选择或业务写入。无后台能力时不承诺未加载后代进度、继续查询或离线完成。 | 递归拉取全部未知后代、取消时恢复整份旧展开快照覆盖 U、全树完成假反馈、自动选中 |
| B1-TREE-F16 键盘/结构边界 | 首格不能藏无入口操作:候选 treegrid 首层级格拟含叶 A 名称编辑器/详情链接,另有可独立聚焦的操作格;当前无选中或写入。→ 按本候选结构规则把首格交互移出到独立操作格,保留首格静态名和披露能力;聚焦叶 A 首格按 Enter;Right 到操作格,Enter 进入,Tab 到详情或编辑入口并激活。 | 首格 Enter 不选择/导航/编辑;水平导航能到明确操作格。操作格可完整进入 YUDS-090100-04,详情或编辑各仅产生其声明意图一次。若无法移出且没有另审完整模型,此结构不得计为本候选可交付。 | 首格 Enter 同时展开/编辑、存在只能鼠标激活的首格链接、键盘无法进入却宣称完整、业务自动保存 |
来源:读取范围及限制见本组来源;精确夹具见本组夹具;冻结稿独立反审只证明文档反例闭合,不证明实现或运行。本族 SAP 1.151 Tree/Tree Table 直接页只读到标题与 Usage 外壳;历史 SAP 正文仅有官方索引节选,不计为当前全篇对等。Geist File Tree 只有用途与基础示例;OUDS 未取得专门正文。原生与所有目标平台运行均未执行。
3. 解剖与信息层级
表区包含标题和数据范围、查询及视图工具、列标题、数据行、可选选择列、行操作、汇总和分页/加载入口。单位、期间、版本及更新时间应放在容易找到的位置。排序、筛选、选择数量都应在数据主体外有可理解摘要。
列由稳定字段 ID、标题、数据类型、可空状态、显示格式、单位、排序能力、编辑能力及权限表达组成。行由稳定对象 ID、版本标识、业务状态与动作能力组成。行号只是当前位置;不能作为选择、编辑或回写的对象身份。
单元格区分 0、空缺、不适用、无权限、计算失败、未加载及过期值。混合单位要逐行或逐组标明,避免表头一个单位误导全部值。省略的长文本可在键盘和触控中查到完整内容。
4. 排序、分组与展开
排序按钮有可理解方向和当前排序列。多列排序显示优先次序,并提供清除/调整方式;不能只在几个表头放小箭头而要求用户记忆。服务端排序与客户端局部排序必须标示范围,本页排序不冒充全部结果排序。
默认排序和同值次级排序由产品确定,应保证远程分页可稳定遍历。更改排序保留基于 ID 的选择;滚动位置是否重置要与查询变化策略一致。正在编辑时排序不得让编辑内容悄悄写到另一行。
分组行说明分组键、可见数量与总数量是否相同;分组汇总来自完整查询还是已加载部分必须明示。展开是展示详细信息,不等于选择整组,也不意味着加载了所有成员。真实父子业务关系采用本篇 B1-TREE 组合契约;父值与子树汇总继续见矩阵与层级数据工作区「层级、树形表与树形网格」。
5. 列宽、固定、重排与隐藏
列宽首先服务内容理解;关键身份与单位可换行或提供可达详情,不用强制省略维持整齐。数值按比较需要对齐,文本按阅读需要对齐;对齐规则不能改变存储值或精度。
固定身份列和表头可帮助定位,但不应占满窄视口。冻结区域、滚动区和页脚不得遮住当前焦点及错误。展示上复制的固定列不应在辅助技术中产生重复单元格。
列重排与调宽同时提供键盘路径和无需拖拽的单指针入口,例如可点击的前移/后移、加宽/缩窄及恢复默认。仅有键盘快捷键不足以代替单指针操作;两条路径分别验收。隐藏列仍可能参与查询或汇总时要说明;重要范围、危险后果和当前编辑错误不得被个人偏好永久遮掉。
列偏好属于个人展示还是共享视图需分开保存。字段被删除、权限变化或版本升级后,恢复偏好应校验有效性,并告诉用户发生了哪些有意义的调整。
6. 行选择与行操作
焦点、行选中、活动详情与单元格范围是四个不同状态。行点击打开详情时,复选框点击只改变选择;行内菜单不同时打开详情。给复选框或行操作加可理解的记录身份。
表头复选框必须明确是当前页、已加载项还是全部查询结果。建议第一层只选择当前页可操作项,再通过独立动作升级为远程全量范围;具体契约见查询、选择范围与批量执行。不可操作行的原因是否披露由产品权限策略决定。
实时变化不自动扩大选中集合。被删除或失去权限的选择保留为待处理/不可操作状态,或按明确规则移除并通告,不能让总数无声变化。执行前服务端重新验证范围。
7. 网格键盘模型
以下为建议的 Web 普通 grid 键位,不自动适用于原生平台;普通表不强加此模型。treegrid 导航由 B1-TREE-KEY 完整定义,进入格内后沿 YUDS-090100-04:
- 导航模式的 Tab 进入网格当前活动单元格,再次 Tab 离开网格;Shift+Tab 反向。格内操作/编辑模式按「输入模式、虚拟化与替代路径夹具」的模式转换契约处理。不会逐格要求 Tab 到完整数据集末尾才能退出。
- 导航模式中方向键移动相邻单元格,行末不默认跳到下一行;Home/End 移动当前行边界,组合键的全局边界含义应与已加载范围一致并提供说明。
- Enter 或明确编辑动作进入单元格编辑;编辑时方向键归输入内容。Escape 先由输入法或最上层子控件处理;没有子层消费时才取消本格未提交编辑并回到导航;已成功保存的值不能靠 Escape 假装撤销。
- 单元格含多个操作时提供明确的进入与退出内部操作方式,避免方向键既移动网格又操作选择器。
- 范围选择快捷键只在已明确支持时启用;「全选单元格」和「选择全部业务记录」必须区分,不能让一个快捷键隐式启动远程全量选择。
这些选择需形成完整、可发现的快捷说明,并按 APG 网格模式测试实现,不能只实现其中几个键就宣称支持。APG Grid
8. 行内编辑与保存
编辑解剖:对象及字段身份、原确认值、用户草稿、校验、保存方式与状态。逐格自动保存、按行保存和整表提交是三种不同承诺。每个实例应说明采用哪种保存方式;有跨字段依赖时优先把相关值作为一个可预览提交单元。
流程:进入编辑 → 修改草稿 → 本地校验 → 请求提交 → 服务端确认版本 → 更新显示。失败保留草稿并说明;版本冲突保留双方值,转版本、比较与并发差异;结果未知按请求身份核实。失焦不是一切业务的默认提交许可。
服务端返回的规范化值与输入不同(如精度或业务修正规则)时,必须能被用户辨认。权限变为只读时不可继续写,但应按安全策略保留尚未提交草稿供用户查看或复制,不能继续显示受限原值。
依赖写操作需排队、事务或版本控制;「只保留最新请求」不能丢弃早先可能已经执行的写操作回执。若允许乐观更新,明确期望值和已确认值,失败恢复不覆盖用户随后产生的新草稿。
9. 复制、粘贴与批量填值
复制应说明取得的是原始值还是显示文本、是否带标题/单位、是否包含隐藏列。导出与剪贴板分别定义契约,均遵守权限。受限原值不能留在应用可控制的隐藏 DOM 或由后续复制输出;此前合法复制及外部副本的控制边界遵守权限变化、并发修改与保存冲突的 YUDS-120200-01。公式或可执行表达式的处理与安全策略由产品实现明确。
粘贴先解析为待应用更改,显示目标范围、数据类型、单位、跳过项和错误。拖拽填充之外同时提供键盘路径及可点击的「选择目标范围/填入指定值」流程,使单指针用户无需拖动也能完成同一任务。只读格、汇总格和受限格不应被默默写入;存在部分合法数据时选择整批拒绝还是允许部分应用,需要明确的产品事务规则和预览。
粘贴二维数据若会创建新记录,应先说明创建范围与后果。错列、分隔符、本地数字格式和隐藏列都会导致错配,应用前保留可检查的对应关系。提交之后才进入真实结果反馈,预览通过不代表执行成功。
10. 分页、加载更多与虚拟化
分页见导航组件:位置、切换与返回。已加载行数、可见行数、查询总量和可操作数量不同。未知总量不显示精确总页数;只获取当前页时不把本页合计写成总体合计。
虚拟化需维护逻辑坐标和稳定对象身份;滚出视口的编辑草稿不能因节点回收丢失。焦点移向未渲染行时应先准备可访问目标或给明确加载状态,不能将焦点丢到页面主体。不可通过重复 DOM 制造两个可操作副本。
Web 表/网格在部分行列未出现在 DOM 时,需适当表达逻辑总量和行列位置,具体属性与未知值语义按官方规范核对;用目标读屏验证,不能只跑自动扫描。APG Grid
11. 实时更新、失败与性能
后台新记录可提示「有新数据」,用户再刷新;不在阅读中无提示地重排所见行。低风险值可局部刷新,但当前编辑单元格保留草稿与冲突标记。对象被删除时说明并处理其选择、详情和焦点。
性能测量应包含真实列类型、长文本、交互内容、权限状态与辅助技术,记录设备、浏览器、数据规模、加载时间、滚动及键盘响应。行数上限由实测确定,不能拿纯文本空表基准承诺复杂业务。
12. 业务验收场景
样例:按区域筛选合同,按到期日排序,选中当前页 8 项,打开合同 A 详情并修改金额,返回后查看批量任务结果。至少验证:
- 排序与刷新后,A 仍按 ID 对应,金额未写入新占据同一行号的 B。
- 缺失金额与 0 区分,表头单位明确,旧缓存标时间。
- 普通表可用 Tab 访问动作;网格可进入、编辑、取消与退出,嵌套选择器不冲突。
- 第 2 页失败不误显示为已切页;已选 8 项范围保持清楚。
- 粘贴中 1 格受限、1 格类型错误,预览和执行结果逐项准确。
- 实时删除聚焦记录、权限收回、断网及未知写结果均有恢复路径。
- 文字放大和窄窗口仍能获取对象、字段、单位、错误及主操作。
全部测试当前未执行。结构与能力为建议;没有选择网格库、框架、固定行高或品牌样式。来源核查:2026-10-18。
13. 输入模式、虚拟化与替代路径夹具
规则 YUDS-090100-01(输入模式)
使用「网格键盘模型」中的 Web 网格键位时,必须区分导航、格内操作、编辑和输入法组合四种上下文。组合输入尚未结束时,Enter 用于候选确认,Escape 及方向键先由输入法处理;本次按键不能同时提交表单或退出网格。进入编辑和退出编辑都有可点击入口;未经明确输入事件,不得因滚动或节点回收而保存。普通表不套用网格方向键;原生端采用平台可访问控件与焦点系统,记录对应的进入、编辑、退出路径,不声称 APG 键位是原生强制要求。
13.1 YUDS-090100-04:格内控件的事件归属与退出
下列候选默认模型用于自定义 Web 交互网格。其中「网格导航」行描述普通 grid,treegrid 导航增量见 B1-TREE-KEY;格内操作、字段编辑及输入法组合各行由两者完整共用。它补足「网格键盘模型」,不改变普通表的自然 Tab 路径。
- 保存策略仍由「行内编辑与保存」声明;此默认模型不把 Tab、失焦或 Escape 当作保存请求。
- 每次进入编辑时记录该次进入的草稿快照;此前没有草稿时,以已确认值作为该快照。Escape 只恢复这一次进入的基线,不删除此前 Tab 离开时保留的草稿。
- 已经发出的保存请求独立按任务身份核查,Escape 不取消或撤销未知写入。
- 按行/整表暂存时,离开编辑器保留待提交草稿,并有可见的待保存状态和继续编辑入口;需要逐格明确确认的实例提供可见的保存/取消。
- 若选择不同的 Tab 提交模型,必须记录校验失败、服务端未知和焦点去向并另审,不能默默继承。
| 输入上下文 | Tab / Shift+Tab | Enter / Space | Escape 与方向键 |
|---|---|---|---|
| 网格导航 | 离开当前网格,到后/前外部目标 | Enter 进入编辑或明确的格内操作;Space 仅在已声明选择模型时选择 | 方向键移动格;Escape 不撤销已确认值 |
| 格内操作 | 按自然顺序经过本格按钮/链接;越过末/首控件即离开网格,到外部后/前目标,保留活动格身份 | 仅激活当前控件;不得另发网格提交 | 无子层消费的 Escape 回到该格导航;内部控件拥有其专属方向键 |
| 字段编辑 | 先可达该格的输入、清除、保存/取消等控件;越过边界同上,允许保留草稿,不自动写入 | 文本多行时 Enter 换行;组合框中 Enter 仅接受候选;只有明确的保存按钮才发送保存意图 | 无输入法/子层消费的 Escape 取消本次未提交的格草稿并回到导航;编辑时方向键归字段 |
| 输入法组合或打开子层 | 先遵循当前输入法/子控件的完整模型;只把未消费的事件交给父级 | 候选确认不等于保存,子层选择不等于整行提交 | 输入法优先,其次是最上层子控件;同一事件不能再取消格编辑或退出父层 |
- 导航与格内操作都要有可点击的进入/退出入口;屏幕阅读器能知道当前对象、字段、模式和待保存状态。
- 返回导航或从外部再进入时,定位仍有效的原格,不按变动后的序号猜目标。
- 校验错误不靠永久截获 Tab 把用户困住;保留错误与草稿,并提供定位路径。
- 禁用或移除的内部按钮不成为死焦点,按相邻的有效控件/格导航恢复。
- 保存后晚到的 Escape 不得把服务器已确认的更改伪装成已撤销。
来源:APG Grid(2026-10-19 读取),用于网格导航与内部编辑的分离;上表具体的退出与草稿政策是 YUDS 的候选选择,并非 APG 规定的唯一实现。
GEN-GRID-01 独立网格夹具(运行全部未执行)
本夹具不扩大普通表 GEN-F09 的证据。
- 设置:固定两行,ID 为 A/B,字段为名称/类别;A 的类别原值为 x。
- 主路径:
- 导航到 A 的类别格,Enter 进入组合框,输入 q 并浏览候选 y。
- 第一次 Escape 只关闭候选:仍在编辑,q 草稿保留,保存 0 次。
- 第二次 Escape 取消本格未提交的草稿并回到导航,确认值仍为 x。
- 重新进入编辑,接受 y 只更新草稿;Tab 可依次到达清除/明确保存按钮,激活保存只产生一次请求。
- 另测:Shift+Tab、从最后一个内部控件 Tab 到网格外、无可用内部控件、保存失败、未知回执、输入法确认,以及关闭后的晚到响应。
- 补充重入分支:确认值为 x,编辑为 y 后 Tab 离开;重入改为 z 后按 Escape,草稿恢复为 y、确认值仍为 x,既不恢复 x,也不保存。
- 每一步记录:模式、活动对象/字段、焦点、进入基线/草稿/确认值、事件次数。
GEN-GRID-02
GEN-GRID-02 链接本节 YUDS-090100-01/02 的「组字+排序+虚拟化」和撤权夹具;与 GEN-GRID-01 分别记录。有限普通表通过,不替代任何网格结果。
规则 YUDS-090100-02(虚拟化)
- 焦点和编辑草稿绑定「对象 ID+字段 ID+读取基准」,显示的行列序号只服务位置说明。
- 目标行未加载时,保留可见的当前焦点与加载说明;加载失败时可重试或回到可用记录,不能移到不存在的节点。
- 逻辑总量未知时如实表达未知,不能把已渲染数量当作总量。
- Web 的逻辑行数包含表头行,索引从 1 开始;未知总行数可用规范支持的
-1,不得编造数据。该属性不是服务端字段设计。依据:APG Grid and Table Properties
组合输入期间:
- 普通排序、刷新和虚拟化回收不得强制结束组字、丢失允许保留的草稿,或将编辑器复用于另一对象。实现应延后影响编辑器的重排/回收,或保留稳定的编辑宿主。
- 用户确认或取消候选前,不把临时组合文本写入业务数据。确认候选只是更新当前草稿,并不自动保存;取消候选则保留此前已确认且允许保留的草稿。
- 候选结束事件仍绑定原对象、字段和读取基准,不能凭当前行号确定目标。
- 对象已删除或编辑资格被撤回时,安全与业务事实优先:停止原目标的编辑,按平台实际输入机制终止候选,并按披露政策处理草稿;晚到的组合结束事件不提交、不重建对象、不串写另一行;焦点移到可用说明。
- 原生端用平台实际的输入法行为验证,不要求照搬 Web 事件或键位。
这些组合保护要求是 YUDS 依据稳定身份、输入保留和权限优先原则所做的推导,不是 APG 规定的原生键位。
规则 YUDS-090100-03(可操作替代)
网格不能可靠支持目标读屏、触控或内容增长时,提供同权限的「分页普通表+对象详情表单」:
- 保留查询、排序、显式选择和待核实任务入口。
- 每个字段可读取完整值并编辑获准内容,保存按原事务单元校验。
- 批量或跨格约束须有更改清单和整体提交入口,不能拆成改变业务原子性的逐格写入。
- 替代路径不能达到同一业务结果时,阻止宣称此任务已交付。
YUDS-090100-01/02/03 验收夹具(四端运行均未执行)
| 规则 | 输入与动作 | 可验预期 | 反例 |
|---|---|---|---|
| YUDS-090100-01 | 第 2 行名称格输入拼音,按 Enter 选定汉字,再点保存 | 首次 Enter 只确认候选;保存一次,返回导航后 Tab 可离开网格 | 候选确认触发提交;Tab 被困在全部数据中 |
| YUDS-090100-02 | 在 A 的金额格保留草稿,滚动回收节点并排序,再定位 A;下一页请求失败 | 草稿仍属于 A;当前位置可辨,失败时停留在可用焦点,不把草稿写给同序号的 B | 回收丢草稿、焦点落到 body、当前页冒充总行数 |
| YUDS-090100-01/02 | A 名称格已有草稿“合同”,中文候选尚未确认;滚动离开视口并收到排序,原行位置将由 B 占据;分别确认或取消候选 | 延后编辑器重排/回收或保持稳定宿主;候选未结束不提交。确认仅更新 A 的草稿,取消保留 A 原有的获准草稿;随后明确保存只针对 A 及其基准,B 不变 | 回收丢组字;compositionend 按当前行号写入 B;排序触发自动保存 |
| YUDS-090100-01/02 | A 组字中收到删除或撤权,再收到晚到的候选结束事件 | 停止失效编辑,按平台机制终止候选,草稿仅按当前政策保留;焦点到安全说明,晚到事件不写入任何对象 | 为保草稿继续显示受限值;候选结束复活 A 或写入替位的 B |
| YUDS-090100-03 | 读屏用户从网格切换到普通表,完成两字段联合修改 | 同一对象与版本、同一更改集、同一结果与错误均可取得;返回有效位置 | 只给 CSV 或只保存一个字段,就宣称等效 |
来源核查:2026-10-19。APG 支持 Web 焦点与逻辑位置;输入法事件参考 W3C UI Events。事务、替代流程及「候选确认不触发业务提交」是 YUDS 的推导要求。以上为文档验收夹具,四端运行均未执行。