Skip to content

TreeMenu 树型菜单

树型菜单组件用于展示具有层级关系的导航结构,常见于后台管理系统的侧边栏导航。


基础用法

通过 :items 传入树型菜单配置数据,支持图标、徽标、禁用态。

vue
<TTreeMenu :items="[
  { label: '仪表盘', icon: IconHome, href: '#', active: true },
  { label: '项目', href: '#', badge: '3' },
  { label: '内容管理', icon: IconFileText, children: [
    { label: '文章列表', href: '#' },
    { label: '分类管理', href: '#' },
  ]},
  { label: '用户管理', href: '#' },
  { label: '设置', href: '#', disabled: true },
]" />

多级嵌套与激活高亮

支持任意层级嵌套。子项设置 active: true 会自动递归高亮所有祖先菜单。下例中「📄 所有文章」处于激活态,其父级「内容管理」→「文章管理」均自动高亮。

vue
<TTreeMenu :items="[
  { label: '仪表盘', icon: IconHome, href: '#' },
  { label: '内容管理', icon: IconFileText, children: [
    { label: '文章管理', children: [
      { label: '所有文章', href: '#', active: true },   ← 当前激活
      { label: '写文章', href: '#' },
    ]},
    { label: '页面管理', href: '#' },
  ]},
]" v-model:expanded-keys="expandedKeys" />

手风琴模式

默认 accordiontrue,同一时间仅展开一个父节点,展开新节点时自动关闭其他同级节点。

vue
<TTreeMenu :items="items" accordion />

默认展开全部

设置 default-expand-all 开启所有节点默认展开。

vue
<TTreeMenu :items="items" default-expand-all />

深色主题

配合 data-bs-theme="dark" 使用深色侧边栏风格。

vue
<aside class="navbar navbar-vertical" data-bs-theme="dark">
  <div class="container-fluid">
    <TTreeMenu :items="items" />
  </div>
</aside>

API

TTreeMenu Props

Prop说明类型默认值
items树型菜单数据TreeMenuItem[][]
accordion手风琴模式(同级仅展开一个)booleantrue
defaultExpandAll默认展开所有节点booleanfalse
expandedKeys展开节点 key 列表(v-model)(string | number)[][]
indent每层缩进像素number16
collapsible是否允许折叠booleantrue

TTreeMenu Emits

Emit参数说明
update:expandedKeyskeys: (string | number)[]展开键列表变化
selectitem: TreeMenuItem选中某个叶子菜单项
toggleitem: TreeMenuItem, expanded: boolean展开/折叠状态变化

TreeMenuItem

属性类型说明
labelstring显示文字
iconComponent图标组件(@tabler/icons-vue)
hrefstring链接地址
targetstring链接打开方式
activeboolean是否激活(子项 active 会递归高亮父级)
disabledboolean是否禁用
badgestring | { text, color }徽标(color 为 bg-xxx 类名)
childrenTreeMenuItem[]子菜单项
keystring | number自定义节点标识(用于 expandedKeys 受控)