Skip to content

Menu 菜单

菜单用于承载系统导航,帮助用户在页面、功能模块和配置入口之间切换。VISTA B 直接使用 Element Plus 的 el-menu,样式沿用组件库,适合后台系统顶部导航、左侧导航、模块分组和多级功能入口。

顶部栏

设置 mode="horizontal" 后,菜单会变为水平模式。通过 el-sub-menu 可以生成二级菜单。

vue
<el-menu
  :default-active="activeIndex"
  mode="horizontal"
  :ellipsis="false"
  @select="handleSelect"
>
  <el-menu-item index="dashboard">工作台</el-menu-item>
  <el-menu-item index="project">项目管理</el-menu-item>
  <el-sub-menu index="design">
    <template #title>设计中心</template>
    <el-menu-item index="design-layout">户型方案</el-menu-item>
    <el-menu-item index="design-material">素材库</el-menu-item>
    <el-menu-item index="design-render">渲染任务</el-menu-item>
  </el-sub-menu>
  <el-menu-item index="order">订单管理</el-menu-item>
</el-menu>

顶栏布局

水平菜单可以通过菜单项的样式留出左右布局空间,常用于左侧品牌、右侧功能入口的后台顶部栏。

vue
<el-menu mode="horizontal" default-active="project" :ellipsis="false">
  <el-menu-item index="brand" style="margin-right: auto;">
    HOME VISTA
  </el-menu-item>
  <el-menu-item index="project">项目</el-menu-item>
  <el-menu-item index="assets">资产</el-menu-item>
  <el-sub-menu index="user">
    <template #title>账号</template>
    <el-menu-item index="profile">个人信息</el-menu-item>
    <el-menu-item index="settings">偏好设置</el-menu-item>
  </el-sub-menu>
</el-menu>

侧栏

默认菜单为垂直模式。侧栏菜单适合后台系统的主导航,支持图标、分组和多级子菜单。

项目列表

左侧菜单承载一级模块,展开后展示更细的业务入口。

vue
<el-menu default-active="project-list" :default-openeds="['project']">
  <el-menu-item index="dashboard">
    <el-icon><IconMenu /></el-icon>
    <span>工作台</span>
  </el-menu-item>
  <el-sub-menu index="project">
    <template #title>
      <el-icon><Location /></el-icon>
      <span>项目管理</span>
    </template>
    <el-menu-item-group title="项目阶段">
      <el-menu-item index="project-list">项目列表</el-menu-item>
      <el-menu-item index="project-plan">方案配置</el-menu-item>
    </el-menu-item-group>
  </el-sub-menu>
</el-menu>

折叠菜单

设置 collapse 可以折叠垂直菜单。折叠状态通常用于空间有限的后台页面,配合图标帮助用户识别入口。

vue
<script setup>
import { ref } from 'vue'

const isCollapse = ref(false)
</script>

<template>
  <el-menu default-active="dashboard" :collapse="isCollapse">
    <el-menu-item index="dashboard">
      <el-icon><IconMenu /></el-icon>
      <template #title>工作台</template>
    </el-menu-item>
    <el-sub-menu index="project">
      <template #title>
        <el-icon><Location /></el-icon>
        <span>项目管理</span>
      </template>
      <el-menu-item index="project-list">项目列表</el-menu-item>
      <el-menu-item index="project-plan">方案配置</el-menu-item>
    </el-sub-menu>
  </el-menu>
</template>

自定义颜色

通过 background-colortext-coloractive-text-color 可以调整菜单背景、文字颜色和激活项文字颜色。深色侧栏需要确保对比度足够。

vue
<el-menu
  default-active="dashboard"
  background-color="#001a26"
  text-color="#c8d4d8"
  active-text-color="#13aec5"
>
  <el-menu-item index="dashboard">工作台</el-menu-item>
  <el-menu-item index="project">项目管理</el-menu-item>
  <el-menu-item index="setting">系统设置</el-menu-item>
</el-menu>

弹出层偏移

子菜单弹出层默认会贴近触发项。设置 popper-offset 可以调整弹出层与菜单项的距离,横向顶部栏和折叠菜单里都可以使用。

vue
<el-menu mode="horizontal" default-active="1" :popper-offset="16">
  <el-menu-item index="1">项目</el-menu-item>
  <el-sub-menu index="2" :popper-offset="8">
    <template #title>配置</template>
    <el-menu-item index="2-1">基础配置</el-menu-item>
    <el-menu-item index="2-2">报价规则</el-menu-item>
  </el-sub-menu>
</el-menu>

API

属性说明类型默认值
mode菜单展示模式horizontal / verticalvertical
collapse是否水平折叠收起菜单,仅在 vertical 模式可用booleanfalse
ellipsis水平模式下菜单是否折叠省略超出内容booleantrue
ellipsis-icon水平折叠省略时显示的图标string / ComponentMore
popper-offset弹出层偏移量number6
default-active页面加载时默认激活菜单的 indexstring
default-openeds默认打开的 SubMenu 的 index 数组string[]
unique-opened是否只保持一个子菜单展开booleanfalse
menu-trigger子菜单打开触发方式,仅在 horizontal 模式可用hover / clickhover
router是否启用 vue-router 模式,启用后会把 index 作为路由跳转路径booleanfalse
collapse-transition是否开启折叠动画booleantrue
popper-effectTooltip 主题,内置主题为 dark / lightstringdark
close-on-click-outside是否在点击外部区域后收起菜单booleanfalse
background-color菜单背景色,支持十六进制格式string
text-color菜单文字颜色,支持十六进制格式string
active-text-color当前激活菜单项的文字颜色,支持十六进制格式string
事件名说明类型
select菜单激活回调(index: string, indexPath: string[], item: MenuItemClicked, routerResult?: Promise<void | NavigationFailure>) => void
openSubMenu 展开的回调(index: string, indexPath: string[]) => void
closeSubMenu 收起的回调(index: string, indexPath: string[]) => void
方法名说明类型
open展开指定的 SubMenu(index: string) => void
close收起指定的 SubMenu(index: string) => void
handleResize手动触发菜单重新计算尺寸() => void
插槽说明子标签
default自定义默认内容Menu Item / SubMenu / Menu Item Group
属性说明类型默认值
index唯一标识string必填
popper-class弹出菜单自定义类名string
show-timeout子菜单出现前延迟,单位毫秒number300
hide-timeout子菜单消失前延迟,单位毫秒number300
disabled是否禁用booleanfalse
teleported是否将弹出层插入到 bodybooleanundefined
popper-offset弹出层偏移量,覆盖 Menu 的 popper-offsetnumberundefined
expand-close-icon父菜单展开且子菜单关闭时的图标string / Component
expand-open-icon父菜单展开且子菜单打开时的图标string / Component
collapse-close-icon父菜单收起且子菜单关闭时的图标string / Component
collapse-open-icon父菜单收起且子菜单打开时的图标string / Component
插槽说明
default子菜单内容
title子菜单标题
属性说明类型默认值
index唯一标识string / nullnull
route路由跳转对象string / object
disabled是否禁用booleanfalse
事件名说明类型
click点击菜单项时触发(item: MenuItemClicked) => void
插槽说明
default菜单项内容
title折叠菜单时显示的标题
属性说明类型默认值
title分组标题string
插槽说明
default分组内容
title自定义分组标题

HOMEVISTA 设计规范