Menu 菜单

为页面和功能提供导航的菜单列表,支持子菜单、分组、暗色主题、手风琴模式、徽标、Logo 插槽、路由跳转(to)、查询参数(query)、外部链接(href)、自定义点击回调(onClick)等。组件根据宽度自动检测折叠状态:宽度 ≤ collapsedWidth(默认 64px)时仅显示图标,悬停自动弹出 tooltip 或子菜单面板。

综合示例
包含 Logo、徽标、子菜单、分组、路由跳转、自定义回调、外部链接、折叠切换的完整侧边栏演示。切换 width 宽度,组件自动感知折叠。
首页New
仪表盘
组件
系统管理
用户管理
角色管理
GitHub
自定义操作
设置
我的5
首页New
仪表盘
组件
系统管理
用户管理
角色管理
GitHub
自定义操作
设置
我的5
基础用法
通过 items 定义菜单项,v-model 绑定当前选中项。
首页
搜索
设置
我的
当前选中:shouye
带 Logo
使用 #logo 插槽自定义顶部品牌区域,折叠时自动隐藏文字。
首页
搜索
设置
我的
首页
搜索
设置
我的
徽标 Badge
通过 badge 字段为菜单项添加徽标。
首页New
消息3
设置
我的
子菜单
支持 children 配置子菜单,点击展开/收起。
首页
组件
系统
我的
菜单分组
通过 type: 'group' 创建菜单分组,分组标题不可选中。
基础组件
输入框
按钮
选择器
数据展示
表格
树形控件
导航
菜单
标签页
暗色主题
设置 theme 为 dark 使用暗色主题,文字自动切换为白色。
首页
组件
设置
我的
暗色主题 + 分组
暗色主题下菜单分组同样正确显示白色文字。
基础组件
输入框
按钮
选择器
数据展示
表格
树形控件
导航
菜单
标签页
手风琴模式
设置 accordion 后,同一时刻只有一个子菜单展开。
首页
组件
系统
我的
折叠模式
将 width 设置为 56(≤ 64px 即 collapsedWidth 默认值)即可触发折叠,菜单仅显示图标。悬停普通菜单项会显示 tooltip 文字提示,悬停含子菜单的项会在右侧弹出子菜单面板。
首页
组件
系统
我的
首页
组件
系统
我的
水平模式
设置 mode 为 horizontal 水平排列,子菜单以下拉方式展开。
首页
组件
设置
我的
水平暗色模式
水平菜单同样支持暗色主题。
首页
组件
设置
我的
默认展开
通过 defaultOpenKeys 设置默认展开的子菜单。
首页
组件
表单
数据展示
导航
系统
我的
禁用菜单项
设置 disabled 禁用某个菜单项。
首页
搜索
设置
不可选中
设置 selectable: false 使菜单项不可选中(仍可点击触发 select 事件)。
首页(可选中)
关于(不可选中)
文档
当前选中:
分割线与自定义缩进
插入 { divider: true } 显示分割线;inlineIndent 控制缩进。
首页
搜索
设置
我的
底部插槽
使用 #footer 插槽在菜单底部添加内容。
首页
组件
系统
我的
事件回调
监听 select 和 openChange 事件。
首页
组件
系统
我的
select:—
openChange:—
受控展开
通过 v-model:open-keys 受控管理展开的子菜单。
首页
组件
表单
数据展示
导航
系统
我的
折叠切换
通过 #footer 插槽放置折叠按钮,点击即可展开/收起侧边栏。
首页
组件
系统
我的
路由跳转
通过 to 字段指定路由路径,点击菜单项自动跳转;query 字段可传递查询参数;href 字段可打开外部链接。
首页
按钮文档
菜单文档
组件
GitHub
自定义操作
点击菜单项将自动跳转到对应页面

Props

参数类型默认值说明
modelValuestring | number当前选中项 key(v-model)
itemsMenuItem[]菜单项数据(必填)
mode'vertical' | 'horizontal''vertical'菜单模式
theme'light' | 'dark''light'主题风格
widthstring | number224菜单宽度(px 或 string),宽度 ≤ collapsedWidth 时自动折叠
collapsedWidthnumber64折叠宽度阈值(px),组件宽度 ≤ 此值时自动进入折叠模式
accordionbooleanfalse手风琴模式
defaultOpenKeys(string | number)[][]默认展开子菜单(非受控)
openKeys(string | number)[]受控展开子菜单(v-model:open-keys)
inlineIndentnumber16菜单项缩进(px)
popupClassNamestring''水平模式下弹出菜单自定义类名

MenuItem 类型

属性类型说明
keystring | number唯一标识
labelstring标题
iconstring图标名称
disabledboolean是否禁用
dividerboolean是否为分割线
selectableboolean是否可选中,默认 true
type'group'设为 "group" 创建分组
badgestring | number徽标内容
childrenMenuItem[]子菜单或分组子项
tostring路由跳转路径,如 '/docs/button'
queryRecord<string, string>路由查询参数,与 to 搭配使用
hrefstring外部链接,点击后 window.open 打开
targetstringhref 的 target 属性,默认 '_blank'
onClick(item: MenuItem) => void自定义点击回调函数,优先级高于 to/href

Events

事件名类型说明
update:modelValue(key: string | number) => void选中项变化
select(key: string | number, item: MenuItem) => void选择菜单项
update:openKeys(keys: (string|number)[]) => void展开变化
openChange(keys: (string|number)[]) => void展开变化
update:collapsed(collapsed: boolean) => void折叠状态变化(宽度自动检测触发)

Slots

插槽名说明
logo顶部品牌/Logo 区域,参数 { collapsed }
footer菜单底部区域,参数 { collapsed },常用于折叠按钮或用户信息