返回目录
组件详情入口
导航
@vean/ui
STreeMenu

TreeMenu

TreeMenu 属于 导航 分类。建议先看演示与用法,再对照 API 表格完成接入和样式调整。

先用快捷跳转面板找到概述、用法、演示和 API,再往下细读完整文档内容。

快速跳转

同分类组件

如果你在同一类交互里做组合,这些组件通常会一起出现。

树形菜单

概述

用于展示可折叠侧边导航树形菜单的组件。STreeMenu 将 Aria 层 TreeMenuCompact 一族组合组件(TreeMenuRoot/TreeMenuOptionCompact/TreeMenuSlotCompact 等,零样式)与 TreeMenuRoot 上下文(受控/非受控激活与展开、折叠侧边栏模式、折叠时子菜单弹出、操作菜单)组合;UI 层仅注入 8 档尺寸配方与插槽类。items 递归数据模型内建 icon/badge/tag/actions/isGroup/链接等字段,节点内容可经 item/item-leading/item-trailing 插槽自由定制。

用法

特性

  • 🧭 层级数据模型 — items: TreeMenuOptionData<T>[](value/label + 递归 children),TreeMenuOptionData<T> 泛型保留自定义字段;内建 isGroup/hidden/icon/badge/tag/disabled/actions/to/href 等字段
  • 🎛️ 受控/非受控双通道 — modelValue / defaultValue(激活项)、expanded / defaultExpanded(展开项)、collapsed / defaultCollapsed(折叠态);均支持 v-model 与 update:* 事件回写
  • 🎯 展开策略 — expandStrategy="keep"(默认)保留手动展开,无论选中哪个菜单都不会改变展开/折叠状态;expandStrategy="selected" 只展开当前选中菜单及其所有父级菜单,选中项变化时非选中分支自动折叠
  • 📉 折叠侧边栏模式 — collapsed + collapsedWidth(默认 50px)/ indent 一键收缩;折叠时含子项的菜单以弹出菜单呈现子级,展开状态暂存并在恢复时自动还原
  • 🧩 操作菜单 — actions + actionMenuProps + onActionSelect 为菜单项附加悬停操作(ellipsis 按钮),操作按钮 aria-label 经 13 语言包本地化
  • 🏷️ 徽标/标签/图标 — 内建 icon/badge/tag 字段,配合 item-leading/item-trailing 插槽自由扩展
  • 🔗 链接项 — to/href 渲染为路由链接或外链(external 控制),外链自动显示跳转图标
  • 🗂️ 分组 — isGroup 分组 + group-label 插槽;top/bottom 插槽承载菜单首尾内容
  • 🎨 8 档尺寸 + 样式注入 — size xs~2xl,class/ui 按 20+ 命名插槽覆盖样式
  • ⌨️ 键盘导航 — 遵循 WAI-ARIA tree 模式:根元素为单一 Tab 停留点并携带 role="tree",↑/↓ 在可见条目间漫游,→ 展开分支或进入首个子项,← 折叠分支或回到父项,Home/End 跳转首尾项,Enter/Space 显式激活(方向键只漫游焦点,不改变选中项)
  • ♿ 无障碍 — role="tree"/treeitem 语义 + aria-expanded/aria-controls/aria-selected、roving tabindex、data-vean-tree-menu-* 数据属性,axe 扫描零违规

组件家族

  • STreeMenu(styled)— 入口包装;TreeMenuCompact 组合 + treeMenuVariants 尺寸配方 + provideTreeMenuUi 注入插槽类,useForwardListeners 合并事件
  • STreeMenuStyledItem(styled)— 用菜单项配方画出的单独一行,供非菜单节点的内容使用(品牌区、触发器、页脚行);经 Primitive 渲染,因此 as / asChild 可指定元素、disabled 可标记禁用
  • TreeMenuCompact(Aria)— 组合根;TreeMenuRoot 状态根 + TreeMenuOptionsCompact 分组/递归渲染 + top/bottom 插槽
  • TreeMenuRoot(Aria)— 状态根;useControllableState 管理激活/展开/折叠,折叠时 backupExpanded 暂存展开状态并在恢复时还原
  • TreeMenuOptionsCompact(Aria)— 分组/递归渲染;expandStrategy="selected" 时按选中菜单路径同步展开状态
  • TreeMenuOptionCompact(Aria)— 单节点组合;叶子渲染按钮/链接 + 操作菜单,父项渲染 TreeMenuCollapsible 触发器 + TreeMenuSub 递归 + 折叠弹出 DropdownMenuCompact
  • TreeMenuSlotCompact(Aria)— 节点内容编排(图标/标签/badge/tag/外链图标/chevron)
  • 基础原语(Aria)— TreeMenuButton/TreeMenuItem/TreeMenuCollapsible/TreeMenuSub/TreeMenuGroup/TreeMenuGroupLabel/TreeMenuTooltipCompact,全部零样式

演示

基础

Platform
Projects
  • 01 Basic — 侧边栏自定义器:expandStrategy / collapsed / collapsedWidth / indent / size 控件,配分组/图标/badge/tag/操作菜单/链接项数据

API

Aria 层

17

TreeMenu<T>

24 属性4 事件6 插槽
属性
属性名类型默认值描述
class
ClassValue
—
应用于根元素的额外类名。
size
ThemeSize
—
组件的视觉尺寸。
ui
Partial<Record<TreeMenuUiSlot, ClassValue>>
—
该组件的按槽类重写。
modelValue
string
—
树形菜单的选中值。可通过 `v-model` 进行绑定。
defaultValue
string
—
树形菜单在初始渲染时的值。当您无需控制树的状态时请使用此选项。
expanded
string[]
—
树形菜单的展开值。可通过 `v-model` 进行绑定。
defaultExpanded
string[]
—
树形菜单在初始渲染时的展开状态。当您无需控制树的状态时,请使用此选项。
expandStrategy
TreeMenuExpandStrategy
'keep'
树形菜单的展开策略。 - `keep`:保持当前展开状态;手动展开或折叠的菜单不会因激活其他菜单而受影响。选中菜单的可折叠父菜单会在挂载时以及每次选中菜单从外部发生变化时(例如由外部路由驱动)展开,从而保持其可见性。 - `selected`:仅展开当前选中的菜单及其所有父菜单;当选中菜单发生变化时,未选中的菜单将被折叠。
collapsed
boolean
false
树形菜单是否已折叠。
defaultCollapsed
boolean
—
树状菜单折叠时的值。
collapsedWidth
number
50
侧边栏菜单折叠时的宽度。
indent
number
16
缩进的宽度。
pxToRem
((px: number) => number)
(px: number) => px / 16 (16 is the base font size)
将像素转换为 rem 的函数。
items
TreeMenuOptionData<T>[]
—
由该组件渲染的项。
groupRootProps
TreeMenuGroupRootProps
—
转发至组根元素的属性。
groupProps
TreeMenuGroupProps
—
转发给 group 元素的属性。
groupLabelProps
TreeMenuGroupLabelProps
—
转发至组标签元素的属性。
showGroupIcon
boolean
false
是否显示组图标。
side
HorizontalSide
—
水平方向。
itemProps
TreeMenuItemProps
—
转发给 item 元素的属性。
buttonProps
TreeMenuButtonProps
—
转发给按钮元素的属性。
linkProps
LinkExtraProps
—
传递给 link 元素的属性。
collapsibleProps
TreeMenuCollapsibleProps
—
转发给可折叠元素的属性。
subProps
TreeMenuSubProps
—
转发给子元素的属性。
事件
事件名参数描述
update:modelValue
string
当模型值发生变化时触发。
update:expanded
string[]
在展开状态发生变化时触发。
update:collapsed
boolean
在折叠状态发生变化时触发。
selectDropdown
string
在选择下拉菜单时触发。
插槽
插槽名参数描述
top
—
选项之前渲染的自定义内容。
bottom
—
选项之后渲染的自定义内容。
group-label
{ item: TreeMenuOptionData<T>; }
组标签槽位的自定义内容。
item
{ item: T; }
项插槽的自定义内容。
item-leading
{ item: T; }
用于项目引导槽位的自定义内容。
item-trailing
{ item: T; }
用于项目尾部槽位的自定义内容。

TreeMenuBadge

2 属性
属性
属性名类型默认值描述
open
boolean
true
是否渲染徽章气泡。
contentProps
BaseProps
—
转发给徽章气泡元素的属性。

TreeMenuBaseItem

2 属性
属性
属性名类型默认值描述
value
string
—
该项的唯一值。
disabled
boolean
—
当值为 `true` 时,禁止用户与该项进行交互。

TreeMenuButton

5 属性
属性
属性名类型默认值描述
disabledSelect
boolean
false
当值为 `true` 时,禁止用户选择该项。
type
ButtonType
'button'
按钮元素的类型。可以是 'button'、'submit' 或 'reset' 之一。
disabled
boolean
—
该组件是否已禁用。
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。

TreeMenuCollapsible

3 属性
属性
属性名类型默认值描述
disabledCollapsible
boolean
—
当值为 `true` 时,禁止用户激活可折叠控件的触发器。
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。

TreeMenuCompact<T>

21 属性4 事件6 插槽
属性
属性名类型默认值描述
modelValue
string
—
树形菜单的选中值。可通过 `v-model` 进行绑定。
defaultValue
string
—
树形菜单在初始渲染时的值。当您无需控制树的状态时请使用此选项。
expanded
string[]
—
树形菜单的展开值。可通过 `v-model` 进行绑定。
defaultExpanded
string[]
—
树形菜单在初始渲染时的展开状态。当您无需控制树的状态时,请使用此选项。
expandStrategy
TreeMenuExpandStrategy
'keep'
树形菜单的展开策略。 - `keep`:保持当前展开状态;手动展开或折叠的菜单不会因激活其他菜单而受影响。选中菜单的可折叠父菜单会在挂载时以及每次选中菜单从外部发生变化时(例如由外部路由驱动)展开,从而保持其可见性。 - `selected`:仅展开当前选中的菜单及其所有父菜单;当选中菜单发生变化时,未选中的菜单将被折叠。
collapsed
boolean
false
树形菜单是否已折叠。
defaultCollapsed
boolean
—
树状菜单折叠时的值。
collapsedWidth
number
50
侧边栏菜单折叠时的宽度。
indent
number
16
缩进的宽度。
pxToRem
((px: number) => number)
(px: number) => px / 16 (16 is the base font size)
将像素转换为 rem 的函数。
items
TreeMenuOptionData<T>[]
—
由该组件渲染的项。
groupRootProps
TreeMenuGroupRootProps
—
转发至组根元素的属性。
groupProps
TreeMenuGroupProps
—
转发给 group 元素的属性。
groupLabelProps
TreeMenuGroupLabelProps
—
转发至组标签元素的属性。
showGroupIcon
boolean
false
是否显示组图标。
side
HorizontalSide
—
水平方向。
itemProps
TreeMenuItemProps
—
转发给 item 元素的属性。
buttonProps
TreeMenuButtonProps
—
转发给按钮元素的属性。
linkProps
LinkExtraProps
—
传递给 link 元素的属性。
collapsibleProps
TreeMenuCollapsibleProps
—
转发给可折叠元素的属性。
subProps
TreeMenuSubProps
—
转发给子元素的属性。
事件
事件名参数描述
update:modelValue
string
当模型值发生变化时触发。
update:expanded
string[]
在展开状态发生变化时触发。
update:collapsed
boolean
在折叠状态发生变化时触发。
selectDropdown
string
在选择下拉菜单时触发。
插槽
插槽名参数描述
top
—
选项之前渲染的自定义内容。
bottom
—
选项之后渲染的自定义内容。
group-label
{ item: TreeMenuOptionData<T>; }
组标签槽位的自定义内容。
item
{ item: T; }
项插槽的自定义内容。
item-leading
{ item: T; }
用于项目引导槽位的自定义内容。
item-trailing
{ item: T; }
用于项目尾部槽位的自定义内容。

TreeMenuGroup

2 属性
属性
属性名类型默认值描述
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。

TreeMenuGroupLabel

TreeMenuGroupRoot

TreeMenuItem

4 属性
属性
属性名类型默认值描述
value
string
—
该项的唯一值。
disabled
boolean
—
当值为 `true` 时,禁止用户与该项进行交互。
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。

TreeMenuOptionCompact

9 属性1 事件
属性
属性名类型默认值描述
as
AsTag
—
渲染后的元素标签。
item
TreeMenuOptionData<T extends TreeMenuBaseOptionData = TreeMenuBaseOptionData>
—
当前条目数据。
side
HorizontalSide
—
水平方向。
selectedPaths
string[]
—
树形菜单中选中的路径,用于确定当前项目是否被选中或其子节点是否被选中。
itemProps
TreeMenuItemProps
—
转发给 item 元素的属性。
buttonProps
TreeMenuButtonProps
—
转发给按钮元素的属性。
linkProps
LinkExtraProps
—
传递给 link 元素的属性。
collapsibleProps
TreeMenuCollapsibleProps
—
转发给可折叠元素的属性。
subProps
TreeMenuSubProps
—
转发给子元素的属性。
事件
事件名参数描述
selectDropdown
string
在选择下拉菜单时触发。

TreeMenuOptionsCompact<T>

11 属性1 事件
属性
属性名类型默认值描述
items
TreeMenuOptionData<T>[]
—
由该组件渲染的项。
groupRootProps
TreeMenuGroupRootProps
—
转发至组根元素的属性。
groupProps
TreeMenuGroupProps
—
转发给 group 元素的属性。
groupLabelProps
TreeMenuGroupLabelProps
—
转发至组标签元素的属性。
showGroupIcon
boolean
false
是否显示组图标。
side
HorizontalSide
—
水平方向。
itemProps
TreeMenuItemProps
—
转发给 item 元素的属性。
buttonProps
TreeMenuButtonProps
—
转发给按钮元素的属性。
linkProps
LinkExtraProps
—
传递给 link 元素的属性。
collapsibleProps
TreeMenuCollapsibleProps
—
转发给可折叠元素的属性。
subProps
TreeMenuSubProps
—
转发给子元素的属性。
事件
事件名参数描述
selectDropdown
string
在选择下拉菜单时触发。

TreeMenuOptionSlotCompact

10 属性
属性
属性名类型默认值描述
showLinkIcon
boolean
—
是否显示链接图标。
as
AsTag
—
渲染后的元素标签。
item
TreeMenuOptionData<T extends TreeMenuBaseOptionData = TreeMenuBaseOptionData>
—
当前条目数据。
side
HorizontalSide
—
水平方向。
selectedPaths
string[]
—
树形菜单中选中的路径,用于确定当前项目是否被选中或其子节点是否被选中。
itemProps
TreeMenuItemProps
—
转发给 item 元素的属性。
buttonProps
TreeMenuButtonProps
—
转发给按钮元素的属性。
linkProps
LinkExtraProps
—
传递给 link 元素的属性。
collapsibleProps
TreeMenuCollapsibleProps
—
转发给可折叠元素的属性。
subProps
TreeMenuSubProps
—
转发给子元素的属性。

TreeMenuRoot

10 属性3 事件
属性
属性名类型默认值描述
modelValue
string
—
树形菜单的选中值。可通过 `v-model` 进行绑定。
defaultValue
string
—
树形菜单在初始渲染时的值。当您无需控制树的状态时请使用此选项。
expanded
string[]
—
树形菜单的展开值。可通过 `v-model` 进行绑定。
defaultExpanded
string[]
—
树形菜单在初始渲染时的展开状态。当您无需控制树的状态时,请使用此选项。
expandStrategy
TreeMenuExpandStrategy
'keep'
树形菜单的展开策略。 - `keep`:保持当前展开状态;手动展开或折叠的菜单不会因激活其他菜单而受影响。选中菜单的可折叠父菜单会在挂载时以及每次选中菜单从外部发生变化时(例如由外部路由驱动)展开,从而保持其可见性。 - `selected`:仅展开当前选中的菜单及其所有父菜单;当选中菜单发生变化时,未选中的菜单将被折叠。
collapsed
boolean
false
树形菜单是否已折叠。
defaultCollapsed
boolean
—
树状菜单折叠时的值。
collapsedWidth
number
50
侧边栏菜单折叠时的宽度。
indent
number
16
缩进的宽度。
pxToRem
((px: number) => number)
(px: number) => px / 16 (16 is the base font size)
将像素转换为 rem 的函数。
事件
事件名参数描述
update:modelValue
string
当模型值发生变化时触发。
update:expanded
string[]
在展开状态发生变化时触发。
update:collapsed
boolean
在折叠状态发生变化时触发。

TreeMenuSlotCompact

TreeMenuStyledItem

6 属性1 插槽
属性
属性名类型默认值描述
class
ClassValue
—
应用于根元素的额外类名。
size
ThemeSize
—
组件的视觉尺寸。
ui
Partial<Record<TreeMenuStyledItemUiSlot, ClassValue>>
—
该组件的按槽类重写。
disabled
boolean
false
该行是否处于禁用状态。 该行包含 `data-disabled`(即该示例中禁用样式的依据) 以及 `aria-disabled`。原生 `button` 行还会额外获得 `disabled` 属性;其他所有元素仅声明该状态,因此嵌套内容 (例如行内的触发器)将决定其如何实现自我禁用。
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。
插槽
插槽名参数描述
default
—
该行的内容。

TreeMenuSub

2 属性
属性
属性名类型默认值描述
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。

说明

架构与对标差异

TreeMenuRoot 持有全部状态(激活/展开/折叠经 useControllableState 受控/非受控双通道);折叠切换时用 backupExpanded 暂存展开分支、清空展开并触发折叠弹出菜单,恢复折叠时原样还原——折叠/展开无损往返。紧凑组合在 Aria 层完成:TreeMenuOptionCompact 编排叶子(按钮/链接 + 操作菜单)与父项(Collapsible 触发器 + 递归 TreeMenuSub + 折叠弹出菜单),UI 层 STreeMenu 只注入尺寸配方与插槽类,不承载任何状态。操作菜单与折叠弹出菜单均复用数据驱动的 DropdownMenuCompact(MenuOptions 渲染)。根元素遵循 WAI-ARIA tree 模式——单一 roving 停留点、role="tree"、treeitem 条目与 group 子列表,axe 扫描零违规。对比主流侧边菜单库,VeanUI 在 Aria 分离、内建操作菜单、折叠弹出、外链项与 13 语言本地化上更完整。

能力VeanUIAnt DesignElement PlusNaive UI
Aria/样式分离✅———
受控激活/展开/折叠✅✅✅✅
折叠侧边栏(collapsed 宽度)✅✅✅⚠️
折叠时子菜单弹出✅✅✅⚠️
内建操作菜单(actions)✅———
徽标/标签(badge/tag)✅⚠️——
分组/图标/外链✅✅✅✅
本地化 aria-label✅✅✅✅

⚠️ = 部分支持(Naive UI 折叠弹出需额外配置 collapsed + 自定义弹出内容;Ant Design 的徽标经 label 自定义节点实现)。

注意事项

  • 键盘导航遵循 WAI-ARIA tree 模式:↑/↓(及 Home/End)在可见条目间漫游且首尾不循环,→ 展开闭合分支、再次按下进入首个子项,← 折叠已展开分支或回到父项,Enter/Space 显式激活;方向键只移动焦点,选中项仅在显式激活时变化。
  • 折叠模式下弹出子菜单由 Menu 机制接管键盘,树漫游只作用于侧栏条目本身。
  • 折叠模式(collapsed)下隐藏操作菜单(actions),操作按钮仅在展开模式渲染。
  • 折叠时子菜单弹出默认 hover 触发,可经 dropdownMenuProps.trigger 切换为 click。
  • collapsed 切换会暂存并恢复展开状态;从折叠返回后仍保留原有展开分支。
  • 操作按钮的可访问名称来自 treeMenu.openActions 模板({label} 占位符),随 ConfigProvider locale 在 13 种语言间切换。
  • 节点 disabled 阻止激活/展开/操作;禁用项渲染 data-disabled 与原生 disabled 语义。
  • 叶子项点击激活并派发 update:modelValue;含子项点击切换展开并派发 update:expanded。
  • expandStrategy="selected" 时,展开状态会在选中项变化或切换到 selected 策略时按选中菜单路径重新同步;此前手动展开的非选中分支会保持到下一次选中。
  • 数据属性仅使用 data-vean-tree-menu-*(D1-07),不附加冗余属性。
  • size 支持 xs~2xl 8 档;样式覆盖经 ui(20+ 命名插槽)与根 class 注入。

常见问题

树菜单支持哪些键盘快捷键?

菜单是单一 Tab 停留点并遵循 WAI-ARIA tree 模式:进入树时聚焦选中项(否则首项),↑/↓ 在可见条目间漫游(自动跳过禁用项),→ 展开闭合分支、再次按下进入首个子项,← 折叠或回到父项,Home/End 跳转首尾可见项,Enter/Space 显式激活。

如何实现可折叠的侧边栏菜单?

v-model:collapsed 绑定折叠态,collapsedWidth(默认 50px)控制收缩宽度,indent 控制子级缩进:

<STreeMenu v-model:collapsed="collapsed" :items="items" />

折叠时如何弹出子菜单?

含子项的菜单在折叠模式下自动渲染弹出菜单(默认 hover 触发,可经 dropdownMenuProps.trigger: 'click' 切换)。弹出菜单的激活态与 modelValue 联动。

如何为菜单项添加操作按钮?

<STreeMenu :items="items" />
<!-- items 中: -->
{ label: 'Design Engineering', value: 'design-engineering', actions: [ { label: 'Edit', value: 'edit', icon:
'lucide:pencil' }, { label: 'Delete', value: 'delete', icon: 'lucide:trash' } ], onActionSelect: action =>
console.log('select', action.value) }

悬停菜单项时末端显示 ellipsis 按钮,点击展开操作菜单;按钮 aria-label 自动本地化(Open {label} actions)。

如何控制激活项与展开项?

受控:v-model:modelValue="active"、v-model:expanded="expandedKeys"、v-model:collapsed="collapsed";非受控初始值使用 default-value / default-expanded / default-collapsed。激活事件为 update:modelValue,展开事件为 update:expanded。

keep 与 active 两种展开策略有什么区别?

expandStrategy 决定展开状态与激活菜单的关系。keep(默认)下展开完全由手动控制:激活其他菜单不会改变任何展开/折叠状态。active 下菜单跟随激活项——每当激活项变化(或切换到 active)时,只保留激活菜单及其所有父级菜单展开,其余分支自动折叠:

<STreeMenu :items="items" expand-strategy="selected" />

适合自由浏览、由用户完全掌控每个分支时使用 keep;需要侧边栏始终展示当前路由路径时使用 active。

如何做分组?

节点设置 isGroup: true 并携带 children 即成为分组;分组标题可经 group-label 插槽自定义:

<STreeMenu :items="items">
  <template #group-label="{ item }">{{ item.label }} ({{ item.children.length }})</template>
</STreeMenu>

如何添加链接项?

{ label: 'Vean', value: 'vean', href: 'https://veanui.com' } { label: 'About', value: 'about', to: '/about' }

外链自动显示跳转图标;external: true 强制按外链处理。

如何自定义图标/徽标/标签?

内建字段:icon(图标)、badge + badgeProps(徽标)、tag + tagProps(标签)。更自由的内容可用 item-leading/item-trailing/item 插槽:

<STreeMenu :items="items">
  <template #item-leading="{ item }">
    <span class="text-primary">{{ item.label.slice(0, 1) }}</span>
  </template>
</STreeMenu>

如何禁用菜单项?

节点设置 disabled: true 即不可激活/展开/操作;禁用项渲染 data-disabled 与原生 disabled 语义。

如何让自定义行拥有菜单项的样式?

渲染 STreeMenuStyledItem —— 菜单项本身就用这一行,因此它共享同一套尺寸配方、同一个图标列与同一种折叠:身处于折叠祖先(group + data-state="collapsed")内时,该行会收窄到菜单项的图标宽度。传入 size 与菜单对齐;该行不是按钮时用 as / asChild(非交互品牌区用 div,asChild 则合并到你自己的链接上);用 disabled 标记禁用。折叠后该行只放图标,因此请自行隐藏标签并居中图标——比折叠后内容盒更宽的标记图否则会贴着行尾::ui="{ button: 'group-data-[state=collapsed]:justify-center' }"。

操作按钮的 aria-label 如何本地化?

经 ConfigProvider 切换 locale(内置 13 种语言包),操作按钮使用 treeMenu.openActions 模板:Open {label} actions,其中 {label} 替换为菜单项文案。

更新日志

版本记录按发布版本分组,便于快速查看这个组件在不同版本里的实际变更。

v0.50.0

2026-10-02

对比版本

新功能

使样式化项具有多态性并能感知状态

范围: tree-menu作者: soybeanjs查看提交83a4f

样式

当侧边栏折叠时,调整项目行宽度

范围: tree-menu作者: soybeanjs查看提交95c3f

文档

将生成的技能与当前示例保持同步

范围: tree-menu作者: soybeanjs查看提交6e7c1

样式

当侧边栏折叠时,调整项目行宽度

范围: tree-menu作者: soybeanjs查看提交95c3f

文档

将生成的技能与当前示例保持同步

范围: tree-menu作者: soybeanjs查看提交6e7c1

新功能

使样式化项具有多态性并能感知状态

范围: tree-menu作者: soybeanjs查看提交83a4f

v0.40.0

2026-09-14

对比版本

新功能

折叠式下拉弹出窗口的键盘导航

范围: tree-menu作者: soybeanfe查看提交c2a44

修复

从 dropdownMenuProps 中获取折叠下拉菜单的展开状态

范围: tree-menu作者: soybeanfe查看提交e94f0

新功能

折叠式下拉弹出窗口的键盘导航

范围: tree-menu作者: soybeanfe查看提交c2a44

修复

从 dropdownMenuProps 中获取折叠下拉菜单的展开状态

范围: tree-menu作者: soybeanfe查看提交e94f0

v0.31.0

2026-08-31

对比版本

优化

为 pxToRem 添加默认值

范围: tree-menu作者: soybeanjs查看提交abcf5

v0.30.0

2026-08-20

对比版本

新功能

新增 expandStrategy 属性,支持 keep 和 active 模式

范围: tree-menu作者: soybeanjs查看提交5d911

新功能

新增 expandStrategy 属性,支持 keep 和 active 模式

范围: tree-menu作者: soybeanjs查看提交5d911

v0.26.0

2026-05-27

对比版本

优化

增强树形菜单样式和组件中的工具提示和徽章集成

范围: tree-menu作者: soybeanfe查看提交07bc0

v0.19.0

2026-05-11

对比版本

新功能

实施 TreeMenuCmpact

范围: tree-menu作者: soybeanfe查看提交ccecd

v0.15.0

2026-04-26

对比版本

修复

修复树形菜单中的可折叠 UI 上下文

范围: tree-menu作者: soybeanjs查看提交fbb4b

修复

修复树形菜单中的可折叠 UI 上下文

范围: tree-menu作者: soybeanjs查看提交fbb4b

v0.7.0

2026-02-09

对比版本

重构

添加 TreeMenuOptions 组件并加强上下文管理

范围: tree-menu作者: soybeanjs查看提交4878f

v0.3.3

2026-01-30

对比版本

修复

为下拉菜单添加活动值绑定

范围: tree-menu作者: soybeanjs查看提交18f74

v0.3.0

2026-01-29

对比版本

新功能

实现活动路径跟踪和更新子活动状态逻辑

范围: tree-menu作者: soybeanjs查看提交6d5e8

优化

添加 getTreePaths 函数,并更新树形菜单组件以使用该函数

范围: tree-menu作者: soybeanjs查看提交c6391

v0.2.8

2026-01-28

对比版本

修复

更新 TreeMenuCollapsible 组件中的打开状态逻辑

范围: tree-menu作者: soybeanjs查看提交5e892

修复

在 TreeMenuOption 组件中添加选择-下拉事件发射功能

范围: tree-menu作者: soybeanjs查看提交7852c

v0.2.7

2026-01-28

对比版本

修复

确保在 filterHiddenMenus 函数中创建新的菜单对象

范围: tree-menu作者: soybeanjs查看提交5579b

v0.2.6

2026-01-28

对比版本

新功能

增强隐藏菜单的过滤逻辑,更新子菜单可见性检查

范围: tree-menu作者: soybeanjs查看提交4bd8a

v0.2.5

2026-01-28

对比版本

优化

为树形菜单中的尺寸变化调整间距和衬垫

范围: tree-menu作者: soybeanjs查看提交f9249

v0.2.4

2026-01-28

对比版本

修复

更新 hasChildren 计算,以排除隐藏的儿童

范围: tree-menu作者: soybeanjs查看提交f3343

优化

改进 TreeMenuOption 和 TreeMenu 中的儿童筛选逻辑

范围: tree-menu作者: soybeanjs查看提交7955e

v0.2.0

2026-01-28

对比版本

重构

重构类型定义并添加隐藏属性

范围: tree-menu作者: soybeanjs查看提交23110

v0.1.13

2026-01-28

对比版本

新功能

为树形菜单选项添加项目可见性控制

范围: tree-menu作者: soybeanjs查看提交70ac1

v0.1.12

2026-01-28

对比版本

优化

将 TreeMenuGroupOptionData 改为一种类型并删除多余属性

范围: tree-menu作者: soybeanjs查看提交40685

v0.1.10

2026-01-28

对比版本

新功能

添加 showGroupIcon 属性以控制组图标的可见性

范围: tree-menu作者: soybeanjs查看提交62193

新功能

使用新道具增强 TreeMenuOption,以便更好地定制

范围: tree-menu作者: soybeanjs查看提交69033

v0.1.8

2026-01-27

对比版本

优化

移除未使用的 useTreeMenuUi 导入并重构样式化项目组件

范围: tree-menu作者: soybeanjs查看提交7e505

v0.1.7

2026-01-27

对比版本

优化

更新 groupRoot 边距样式,使布局更合理

范围: tree-menu作者: soybeanjs查看提交e3fb2

v0.1.5

2026-01-27

对比版本

优化

从 TreeMenuRootProps 中移除未使用的 collapsedWidth prop

范围: tree-menu作者: soybeanjs查看提交7a4fd

v0.1.4

2026-01-27

对比版本

新功能

使用自定义属性扩展 TreeMenuOptionData 并更新类型定义

范围: tree-menu作者: soybeanjs查看提交12721

v0.1.3

2026-01-26

对比版本

新功能

使用计算类和道具接口增强 TreeMenuStyledItem

范围: tree-menu作者: soybeanjs查看提交c6bc8

v0.0.11

2026-01-08

对比版本

新功能

为 TreeMenuOption 添加 "as "道具并更新相关组件,以提高渲染的灵活性

范围: tree-menu作者: soybeanjs查看提交18c0f

v0.0.9

2026-01-02

对比版本

重构

实现无头 TreeMenu 组件,增强结构和样式,包括新的 TreeMenuOption 和 TreeMenuGroup 组件

范围: tree-menu作者: soybeanjs查看提交21708

v0.0.8

2026-01-01

对比版本

样式

为根样式添加边距重置,以提高布局一致性

范围: tree-menu作者: soybeanjs查看提交5ff20

v0.0.6

2025-12-09

对比版本

样式

增强下拉选择处理和更新类型定义,以实现更好的集成

范围: tree-menu作者: soybeanjs查看提交350ed

新功能

增强下拉选择处理和更新类型定义,以实现更好的集成

范围: tree-menu作者: soybeanjs查看提交350ed

v0.0.3

2025-11-19

对比版本

重构

改进项目操作定位和工具提示逻辑,提高可用性

范围: tree-menu作者: soybeanjs查看提交8fd11

重构

改进项目操作定位和工具提示逻辑,提高可用性

范围: tree-menu作者: soybeanjs查看提交8fd11

v0.0.2

2025-11-18

对比版本

新功能

实现具有折叠功能和可自定义项的 TreeMenu 组件

范围: tree-menu作者: soybeanjs查看提交5d47a

新功能

实现 TreeMenuItemWrapper 以复用 TreeMenuItem 的样式

范围: tree-menu作者: soybeanjs查看提交d1b8e

样式

增强 TreeMenuItem 的实现,改进属性处理和结构

范围: tree-menu作者: soybeanjs查看提交c5d34

样式

更新 TreeMenuItem 的样式,以提升可访问性并保持一致性

范围: tree-menu作者: soybeanjs查看提交9c465

样式

移除 TreeMenuItemImpl 组件,并将该组件的功能整合到 TreeMenuItem 中,以使结构更简洁

范围: tree-menu作者: soybeanjs查看提交60131

新功能

在树形菜单导出中添加 STreeMenuRootOption 组件

范围: tree-menu作者: soybeanjs查看提交405ca

新功能

实现具有折叠功能和可自定义项的 TreeMenu 组件

范围: tree-menu作者: soybeanjs查看提交5d47a

新功能

实现 TreeMenuItemWrapper 以复用 TreeMenuItem 的样式

范围: tree-menu作者: soybeanjs查看提交d1b8e

样式

增强 TreeMenuItem 的实现,改进属性处理和结构

范围: tree-menu作者: soybeanjs查看提交c5d34

样式

更新 TreeMenuItem 的样式,以提升可访问性并保持一致性

范围: tree-menu作者: soybeanjs查看提交9c465

样式

移除 TreeMenuItemImpl 组件,并将该组件的功能整合到 TreeMenuItem 中,以使结构更简洁

范围: tree-menu作者: soybeanjs查看提交60131

新功能

在树形菜单导出中添加 STreeMenuRootOption 组件

范围: tree-menu作者: soybeanjs查看提交405ca