# 变更提案: admin-frontend-sidebar-height-overflow ## 元信息 ```yaml 类型: 缺陷修复 方案类型: implementation 优先级: P1 状态: 已确认 创建: 2026-04-24 ``` --- ## 1. 需求 ### 背景 `admin-frontend` 新增系统管理与订阅管理分组后,左侧导航项明显增多。当前 `AdminLayout.vue` 的侧边栏仍采用“Logo + ElMenu 直接铺满”的结构,而 `body` 又被全局设置为 `overflow: hidden`。在用户截图所示的小窗口高度下,底部菜单会被直接裁切,导致“礼品卡管理”“系统管理”“支付配置”等入口无法完整访问。 ### 目标 - 修复管理端侧边栏在低视口高度下显示不全的问题。 - 按用户已确认的方案,保留顶部 Logo/品牌区固定,仅让菜单区独立纵向滚动。 - 保持现有 Apple 风格后台的导航层级、折叠行为和移动端体验不回退。 ### 约束条件 ```yaml 范围约束: 仅处理 admin 侧边栏在低高度下的可访问性与滚动行为,不扩展菜单信息架构 技术约束: 继续使用 Vue3 + TypeScript + Element Plus,不新增依赖 兼容性约束: 需兼容桌面展开态、折叠态以及现有移动端 fixed aside 行为 视觉约束: 延续 apple/DESIGN.md 与 .helloagents/DESIGN.md 的纯白侧栏 + 单一蓝色激活态体系 ``` ### 验收标准 - [ ] 在窗口高度不足时,侧边栏底部菜单项仍可通过纵向滚动访问完整。 - [ ] 顶部 Logo/品牌区保持固定,不跟随菜单滚动一起消失。 - [ ] 折叠态与移动端侧边栏不出现新的遮挡、抖动或布局错位。 - [ ] `admin-frontend` 执行 `npm run build` 通过。 --- ## 2. 方案 ### 技术方案 1. 在 `AdminLayout.vue` 中把侧边栏拆成“固定头部品牌区 + 独立滚动的菜单容器”两层结构,而不是直接让 `ElMenu` 占满整个 `ElAside`。 2. 为侧边栏与菜单滚动容器补齐 `min-height: 0`、`overflow-y: auto`、底部留白和滚动条细节,解决 flex 子项在固定高度容器中无法正确收缩的问题。 3. 保持现有 `ElMenu`、`ElSubMenu` 和折叠逻辑不变,确保这次修复是针对根因的最小改动,而不是重写导航实现。 ### 影响范围 ```yaml 涉及模块: - admin-frontend: 更新主布局侧边栏结构与样式,修复低高度下菜单裁切 - .helloagents/modules/admin-frontend.md: 记录侧边栏低高度滚动规则 预计变更文件: 3 ``` ### 风险评估 | 风险 | 等级 | 应对 | |------|------|------| | Element Plus 菜单在滚动容器中出现高度塌陷或双滚动条 | 中 | 采用独立滚动容器并显式补齐 `min-height: 0` 与内边距,避免只在 `ElMenu` 上追加单点样式 | | 移动端 fixed aside 与桌面侧栏样式相互影响 | 中 | 仅在当前侧边栏作用域内增加滚动容器样式,保留现有移动端定位策略 | | 构建会刷新 `public/assets/admin` 构建产物 | 低 | 本轮仅完成本地构建验证,不自动代做子模块发布 | --- ## 3. 核心场景 ### 场景: 低高度窗口中的侧边栏导航 **模块**: admin-frontend **条件**: 浏览器窗口高度不足以同时容纳品牌区与全部菜单项 **行为**: 用户在左侧导航区域滚动菜单 **结果**: 顶部品牌区固定可见,菜单项可完整访问,激活态与分组结构保持正常 --- ## 4. 技术决策 ### admin-frontend-sidebar-height-overflow#D001: 侧边栏采用“固定品牌区 + 独立滚动菜单区” **日期**: 2026-04-24 **状态**: ✅采纳 **背景**: 用户明确选择“顶部 Logo/品牌区固定,仅菜单区域独立纵向滚动”的处理方式。 **选项分析**: | 选项 | 优点 | 缺点 | |------|------|------| | A: 固定品牌区,菜单区独立滚动 | 保留品牌识别和导航定位,改动集中、体验最稳定 | 需要微调侧栏结构和滚动容器样式 | | B: 整个侧边栏整体滚动 | 实现简单 | 品牌区会被滚出视口,低高度下辨识度更差 | | C: 低高度自动折叠成图标栏 | 可压缩空间 | 会改变现有导航行为,且不是用户选定方案 | **决策**: 选择方案 A **理由**: 最符合用户已确认交互,也与当前 Apple 风格后台“固定品牌区 + 稳定导航层级”的设计基线一致。 **影响**: 影响 `AdminLayout.vue` 侧边栏结构与样式,不涉及 API、路由或业务数据流。 --- ## 5. 成果设计 ### 设计方向 - **美学基调**: 克制运营后台 —— 保留纯白侧栏、细边框、轻阴影和单一蓝色激活态,让修复更像“增强可用性”而非“换一套皮肤” - **记忆点**: 窗口再矮,顶部品牌区依旧稳定悬停,菜单像独立轨道一样顺滑滚动 - **参考**: 现有 `apple/DESIGN.md` 与 `.helloagents/DESIGN.md` 的 Apple 风格后台规范 ### 视觉要素 - **配色**: 保持现有 `#ffffff` 侧栏底色、`#0071e3` 激活色和中性文字层级,不引入新强调色 - **字体**: 延续全局系统字体栈 `--xboard-font-sans`,不新增字体 - **布局**: 侧栏继续分为顶部品牌区与下方菜单区,但改为明确的上下分层,菜单区获得独立滚动上下文 - **动效**: 保留当前宽度折叠过渡;滚动本身不增加额外装饰动画 - **氛围**: 维持轻薄、低噪音的 Apple 化后台质感,仅补齐滚动可达性 ### 技术约束 - **可访问性**: 键盘聚焦与当前菜单激活态不可被滚动修复破坏 - **响应式**: 桌面低高度、桌面折叠态和移动端 fixed aside 都需保持可用