菜单

侧边栏与导航

相关源文件

目的

本文档详细介绍了Vue Element Admin中侧边栏和导航系统的实现。侧边栏为用户提供了访问管理面板不同部分的主要导航界面。它具有响应式设计、可折叠功能以及与路由和权限系统的集成。

有关整体布局结构的更多信息,请参阅布局系统。有关与侧边栏协同工作的TagsView组件的详细信息,请参阅TagsView与缓存

概述

侧边栏组件使用Element UI的菜单组件提供分层导航,同时支持

  • 基于路由的菜单生成
  • 可折叠侧边栏以节省空间
  • 移动设备响应式行为
  • 权限控制的菜单项
  • 自定义样式和主题

来源:src/layout/components/Sidebar/Item.vue1-42 src/styles/sidebar.scss10-92

组件架构

侧边栏由多个嵌套组件组成,协同工作以创建导航界面

组件目的
侧边栏管理侧边栏状态的主容器
SidebarLogo显示应用程序logo和标题
El-Scrollbar为菜单项提供自定义滚动
El-MenuElement UI菜单组件用于导航
SidebarItem用于渲染菜单项和子菜单的递归组件
MenuItem渲染每个菜单项的图标和文本的功能组件

MenuItem 组件是一个功能组件,负责渲染单个菜单项

  • 渲染图标(SVG图标或Element UI图标)
  • 显示菜单项标题
  • 使用Vue的渲染函数以提高渲染效率

来源:src/layout/components/Sidebar/Item.vue1-42

侧边栏有三种主要状态,会影响其外观和行为

来源:src/styles/sidebar.scss94-153 src/styles/variables.scss22 src/styles/sidebar.scss160-177

展开状态

在展开状态下,侧边栏显示全宽(默认为210px),显示所有菜单项的图标和文本标签。主内容区域会调整边距以适应侧边栏。

折叠状态

在折叠状态下

  • 侧边栏宽度减少至54px
  • 仅显示图标,隐藏文本
  • 隐藏子菜单标题
  • 主内容区域边距相应减少
  • 鼠标悬停在菜单项上时显示菜单标题的工具提示

来源:src/styles/sidebar.scss94-153

移动设备响应式行为

在移动设备(或小屏幕视口)上

  • 在展开状态下,侧边栏显示为覆盖层
  • 在折叠状态下,侧边栏通过transform隐藏
  • 过渡提供状态之间的平滑动画
  • 主内容占据全部宽度

来源:src/styles/sidebar.scss160-177

样式系统

侧边栏使用井井有条的样式系统,通过SCSS变量来保持一致性并支持主题化。

关键样式变量

侧边栏的外观由 variables.scss 中定义的变量控制

可变目的默认值
$sideBarWidth展开侧边栏的宽度210px
$menuBg主菜单背景色#304156
$menuText默认文本颜色#bfcbd9
$menuActiveText激活菜单项文本颜色#409EFF
$menuHover悬停状态背景#263445
$subMenuBg子菜单背景#1f2d3d
$subMenuHover子菜单悬停背景#001528
$subMenuActiveText激活子菜单文本#f4f4f5

这些变量会导出到JavaScript,以确保整个应用程序的样式一致。

来源:src/styles/variables.scss1-35

CSS 实现

侧边栏样式采用了多种技术

  • CSS过渡实现平滑动画
  • 侧边栏容器的固定定位
  • 长菜单的溢出处理
  • 自定义滚动条样式
  • 嵌套选择器用于不同状态
  • Element UI样式覆盖以实现一致的外观

样式处理了特殊情况,例如

  • 菜单项悬停状态
  • 活动菜单高亮
  • 图标定位和间距
  • 子菜单样式和嵌套
  • 滚动条外观

来源:src/styles/sidebar.scss1-227

侧边栏导航通过将路由渲染为菜单项来工作。该过程遵循以下流程

导航逻辑的关键方面

  • 路由可以嵌套以创建分层菜单
  • 路由元信息控制菜单项的外观和行为
  • 基于权限的过滤决定了显示哪些路由
  • 当前路由在菜单中被高亮显示

性能优化

侧边栏实现了多项优化以提高性能

  1. 功能组件:MenuItem组件实现为功能组件,减少了内存使用并提高了渲染性能。

  2. 过渡控制:可以通过(通过withoutAnimation类)禁用过渡,以提高低端设备的性能。

  3. 高效渲染:侧边栏使用Vue的渲染函数对菜单项进行更高效的渲染。

  4. 受控溢出:仔细管理溢出和滚动行为,以防止长菜单出现性能问题。

来源:src/layout/components/Sidebar/Item.vue2-32 src/styles/sidebar.scss179-185

与其他系统集成

侧边栏集成了应用程序中的几个其他系统

  1. 路由系统:侧边栏根据路由配置进行渲染,并高亮显示当前路由。

  2. 权限系统:在显示在侧边栏之前,会根据用户权限过滤路由。

  3. 设备检测:侧边栏的行为会根据检测到的设备(移动设备或桌面设备)进行调整。

  4. 主题系统:侧边栏样式与应用程序的主题系统集成,以获得一致的外观。

结论

侧边栏导航系统为用户提供了灵活、响应式且视觉一致的应用程序导航方式。它与路由和权限系统的集成确保用户仅看到并访问他们被授权使用的应用程序部分,而其响应式设计则确保了在不同设备类型和屏幕尺寸上的可用性。