菜单

布局系统

相关源文件

介绍

vue-element-admin 中的布局系统为应用程序的用户界面提供了基础结构。它定义了应用程序的主要部分如何组织以及它们之间如何交互。本文档涵盖了核心布局组件、它们之间的关系以及它们如何协同工作以创建一致的用户体验。

有关侧边栏实现的具体信息,请参阅 侧边栏和导航。有关基于选项卡导航系统的详细信息,请参阅 TagsView 和缓存

布局结构概览

布局系统创建了一个标准的管理界面,分为四个主要区域:

  1. Navbar - 顶部导航栏,包含控件和用户信息
  2. Sidebar - 左侧导航菜单,包含应用程序路由
  3. TagsView - 选项卡式界面,用于显示已打开的页面/路由
  4. AppMain - 主要内容区域,页面组件在此渲染

布局组件图

来源

关键布局组件

AppMain 组件

AppMain 是路由组件(页面)显示的主要内容容器。它包括:

  • 路由变更时的过渡效果
  • 使用 <keep-alive> 进行视图缓存,以保留组件状态
  • 根据是否存在 navbar 和 tagsview 动态计算高度

关键实现细节

  • 使用带有“fade-transform”效果的 <transition> 实现平滑的页面过渡
  • 通过 <keep-alive> 使用计算出的要缓存视图列表进行组件缓存
  • 响应式尺寸,根据头部是否固定以及是否启用 TagsView 进行调整

来源

Navbar 在应用程序顶部提供导航控件和用户相关功能。

特性

  • 汉堡包菜单切换侧边栏
  • 显示当前路由路径的面包屑导航
  • 头部搜索,方便快速导航
  • 错误日志访问
  • 全屏切换
  • UI 尺寸选择器
  • 用户头像及下拉菜单(个人资料、退出等)

实现

  • 响应式设计,桌面版和移动版有不同的组件集
  • 与 Vuex store 集成,用于应用程序状态(侧边栏状态、用户信息)
  • 侧边栏切换和用户登出的事件处理

来源

TagsView 组件

TagsView 实现了一个选项卡式导航系统,将当前打开的页面显示为可点击的选项卡。

特性

  • 当前活动路由的视觉指示
  • 选项卡之间的点击导航
  • 鼠标中键单击以关闭选项卡
  • 右键上下文菜单,包含选项
    • 刷新当前视图
    • 关闭当前选项卡
    • 关闭其他选项卡
    • 关闭所有选项卡
  • 当打开许多选项卡时,进行水平滚动
  • 支持无法关闭的“固定”选项卡

实现细节

  • 使用 ScrollPane 组件进行水平滚动
  • 通过 Vuex store 维护已访问的视图
  • 支持路由缓存以保留组件状态
  • 对路由配置中标记的“固定”路由进行特殊处理

来源

布局交互和状态管理

布局组件通过多种机制相互以及与应用程序的其余部分进行交互:

响应式布局行为

布局系统适应不同的屏幕尺寸和设备。

桌面模式

  • 完整的侧边栏,包含文本和图标
  • 完整的导航栏,显示所有控件

移动模式

  • 折叠的侧边栏,仅显示图标
  • 简化的导航栏,包含基本控件

这通过 Vuex store 的 app 模块进行管理,该模块跟踪设备类型和侧边栏状态。

路由渲染和缓存过程

来源

页面组件与布局集成

页面组件在 AppMain 区域内渲染。它们通常使用标准的“app-container”类以实现一致的样式。

标准页面结构

<div class="app-container">
  <!-- Page content -->
</div>

导航到页面时:

  1. 路由由 Vue Router 处理。
  2. 相应的组件在 AppMain 中渲染。
  3. 如果尚未存在,则向 TagsView 添加一个选项卡。
  4. 如果配置了缓存,则缓存该组件。

代码库中的示例页面遵循此模式:

  • Excel 导出页面
  • 指南页面
  • 剪贴板演示
  • 带 keep-alive 的选项卡演示

来源

高级布局功能

视图缓存

布局系统实现了智能视图缓存,以在路由之间导航时保留组件状态。

  1. TagsView 组件在 Vuex store 中跟踪已访问的视图。
  2. AppMain 使用计算属性从 store 获取缓存的视图。
  3. 组件 <keep-alive> 接收此列表以确定要缓存的组件。
  4. 刷新视图时,将在导航之前移除缓存的实例。

该系统允许:

  • 离开页面后再返回时,保留表单输入
  • 维护滚动位置和 UI 状态
  • 通过不重新渲染未更改的组件来提高性能

来源

上下文菜单系统

TagsView 实现了一个自定义的上下文菜单系统,用于选项卡管理。

  • 在任何选项卡上单击鼠标右键时出现。
  • 位置根据单击坐标计算。
  • 提供了多个选项卡管理选项。
  • 单击其他地方会自动关闭。
  • 使用事件监听器进行正确清理。

来源

总结

vue-element-admin 中的布局系统为应用程序界面提供了一个灵活、响应式的框架。它将内容渲染与导航控件分离,同时在路由更改时保持状态。基于组件的架构允许自定义,同时确保一致的用户体验。

关键组件(Navbar、Sidebar、TagsView 和 AppMain)协同工作,为管理应用程序创建了一个高效的界面,其中内置了选项卡导航、状态保存和响应式设计等功能。