> **本文档集顺序**:① [prod.md](./prod.md) → ② [spec.md](./spec.md) → ③ **本页 task**。依据与条目应对齐 prod 与 spec。 # 侧栏导航 — 验收标准 在 **antd@6** 目标栈下可执行(手工或 E2E)。参数与语义以 [spec.md](./spec.md) §5 为准;不要求与现网 class 名一致。 ## 数据与结构 - [ ] 顶层 `tree` 非法组合不渲染错误结构;有 `items` 时一级分组标题与 `name` 一致。 - [ ] 叶子标识与菜单 `key`/`selectedKeys` 一致;`curActivePaneKey` 命中叶子时该叶为 **selected**。 - [ ] 分组下任意深度有选中时,该一级分组具 **子树选中** 可辨样式。 ## 响应式与壳层(根容器组合) - [ ] 跨越 `Sider` **breakpoint**(如 lg)时宿主收到 `onSetMenuCollapse(broken)`,且界面「**窄屏固定覆盖**」与 broken 一致。 - [ ] **窄屏**且 `collapsed === false` 时呈现 **全宽抽屉** 语义;窄屏且 `collapsed === true` 时不呈现全宽展开。 - [ ] 窄屏且展开时遮罩为 **可见半透明**(约 0.2 透明度量级,可肉眼对照 spec §5);点遮罩收起。 - [ ] 由窄回宽后无永久遮罩挡主内容操作。 ## 展开与手风琴 - [ ] 同父级下连续展开两个一级 `SubMenu`,最终仅保留新展开项(同级其他被收起)。 - [ ] **自研子菜单**路径:展开一节点时同级另一节点从 `openKeys` 中移除。 - [ ] 展开/收起后,在约 0.35s~0.5s 内完成高度与滚动检测;内容足够高时无「永久无法滚动」或「滑块高度为 0」。 ## 点击与宿主回调 - [ ] **非窄屏固定覆盖**:点叶子立即 `onClickMenuItem(item)`。 - [ ] **窄屏固定覆盖**:先触发收起,约 300ms 后 `onClickMenuItem(item)`。 - [ ] **点遮罩**(非拖拽滚动条、且为可见半透明遮罩):触发收拢。 ## 自绘滚动条 — 出现与同步(spec §5) - [ ] 仅当视口 ≥ 约 992px 且内容超高(含容差)时出现轨与滑块;否则轨不可见且不形成右侧可点死区。 - [ ] 拖拽时 `scrollTop` 与滑块位移比例一致;松手后滚动与滑块仍同步。 - [ ] **拖拽中**:遮罩 **近透明**;点遮罩/遮罩区域不收拢侧栏(与 spec §5 一致)。 - [ ] **非拖拽**且窄屏展开:**半透明遮罩**可点收拢。 ## 自绘滚动条 — 交互反馈阶梯(spec §5 表格) - [ ] 外围 → 邻近:先进入可滚菜单区,滑块条较默认态明显提亮(中间色),宽度可仍为窄条。 - [ ] 邻近 → 主操作面:指针落在滑块热区,滑块加宽(如约 6px→12px)且更亮,过渡约 0.3s 量级。 - [ ] 拖拽(激活):滑块保持加宽高亮;`background-color` 等 `transition` 为 0,无跟手迟滞。 ## 自研子菜单 - [ ] 展开时箭头旋转与 max-height 过渡可感知;收起与展开时长可不同,无闪断。 - [ ] 选中在本节点与仅有子级选中时标题样式可区分。 ## 已打开窗格 - [ ] `panesOnShelf` 中存在 `pane.key` 与叶子 `id` 一致的项时,该叶具 **已打开** 可辨样式,**Caret** 规则符合 spec §5。 ## 回归(v6) - [ ] 窄视口/触摸下分组内多级仍可展开并点选叶子。