# 顶部菜单动态宽度检测测试指南 ## 功能说明 顶部菜单现在会根据可用空间动态调整显示的菜单项数量,超出部分会自动放入"更多"菜单中。 ## 测试场景 ### 1. 窗口大小调整 - **操作**: 拖动浏览器窗口调整大小 - **预期**: 菜单项数量会实时调整,确保不与右侧"Select Company"输入框重叠 - **间隔**: 20px 安全边距 ### 2. 侧边栏展开/收起 - **操作**: 点击汉堡菜单图标切换侧边栏状态 - **预期**: - 侧边栏收起时,顶部菜单可用空间增加,显示更多菜单项 - 侧边栏展开时,顶部菜单可用空间减少,部分菜单项移入"更多" - **延迟**: 300ms(等待动画完成) ### 3. 语言切换 - **操作**: 切换系统语言(中文/英文) - **预期**: - 菜单文本长度改变 - 自动重新计算可显示的菜单项数量 - 保持不与右侧元素重叠 ### 4. 路由切换 - **操作**: 点击不同的菜单项切换页面 - **预期**: - 切换页面时重新计算可用宽度 - 确保布局稳定 - **延迟**: 150ms(防抖) ### 5. 顶部导航模式切换 - **操作**: 在设置中切换"顶部导航"开关 - **预期**: 切换到顶部导航模式时,立即计算并正确显示菜单 ## 调试模式 如果需要查看详细的计算过程,可以在代码中启用调试模式: ```typescript // 在 TopNav/index.vue 中 const DEBUG_MODE = true; // 改为 true ``` 启用后,浏览器控制台会显示: - 可用宽度计算详情 - 每个菜单项的宽度 - 最终显示的菜单数量 ## 关键参数 | 参数 | 值 | 说明 | |------|-----|------| | 安全边距 | 20px | 顶部菜单与右侧元素之间的间隔 | | "更多"按钮预留宽度 | 100px | 用于判断是否需要显示"更多"按钮 | | 侧边栏动画延迟 | 300ms | 等待侧边栏展开/收起动画完成 | | 路由切换防抖 | 150ms | 避免频繁计算 | | 窗口调整防抖 | 200ms | 优化性能 | ## 已监听的变化 ✅ 窗口大小调整 (resize) ✅ 侧边栏展开/收起状态 (sidebar.opened) ✅ 侧边栏显示/隐藏 (sidebar.hide) ✅ 顶部导航模式切换 (topNav) ✅ 语言切换 (locale) ✅ 菜单内容变化 (topMenus) ✅ 路由变化 (route.path) ## 边界条件处理 1. **最小宽度保护**: 可用宽度至少 100px 2. **至少显示一项**: 即使空间不足,也会显示至少一个菜单项 3. **右侧菜单未就绪**: 首次渲染时会延迟 100ms 重试 4. **动画未完成**: 侧边栏动画完成后再计算 ## 注意事项 - 所有计算都在 `nextTick()` 中执行,确保 DOM 已更新 - 使用防抖机制避免过度计算 - 支持动态菜单数量变化 - 自适应不同分辨率和设备