TreeBox 树形容器

February 27, 2026 · View on GitHub

树形布局容器组件,包含左侧树和右侧内容区。

引入

import { ATreeBox } from '@airpower/web'

Props

参数说明类型默认值必填
hideTree隐藏树booleanfalse
defaultExpandAll默认展开全部booleantrue
searchable显示树搜索booleanfalse
placeholder树搜索提示文案string'搜索...'
treeData左侧树的数据ITree[]-
hideIcon隐藏图标booleantrue
isTreeLoading树加载中booleanfalse
title标题string''
width左侧树宽度number300
collapse是否可折叠booleanfalse
defaultCollapse默认折叠状态booleanfalse

Emits

事件名说明回调参数
change树节点选择变化(data: T | undefined) => void

Slots

插槽名说明作用域参数
default右侧内容区-
icon树标题图标-
beforeSearch搜索前区域-
afterSearch搜索后区域-
afterTree树后区域-

示例

<template>
  <!-- 基础用法 -->
  <ATreeBox
    :tree-data="treeData"
    @change="handleTreeChange"
  >
    <div>右侧内容</div>
  </ATreeBox>

  <!-- 带搜索 -->
  <ATreeBox
    :tree-data="treeData"
    searchable
    @change="handleTreeChange"
  >
    <div>右侧内容</div>
  </ATreeBox>

  <!-- 可折叠 -->
  <ATreeBox
    :tree-data="treeData"
    :width="250"
    collapse
    @change="handleTreeChange"
  >
    <div>右侧内容</div>
  </ATreeBox>

  <!-- 自定义插槽 -->
  <ATreeBox
    :tree-data="treeData"
    searchable
    title="部门树"
  >
    <template #icon>
      <ElIcon><Folder /></ElIcon>
    </template>
    <template #beforeSearch>
      <AButton size="small" @click="handleAdd">
        添加
      </AButton>
    </template>
    <div>右侧内容</div>
  </ATreeBox>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const treeData = ref([
  {
    id: 1,
    name: '根节点',
    children: []
  }
])

function handleTreeChange(data: any) {
  console.log('选中节点:', data)
}

function handleAdd() {
  // 添加逻辑
}
</script>

注意事项

  • 树数据需实现 ITree 接口
  • 支持节点过滤搜索
  • 点击已选中的节点可取消选中
  • 可折叠模式下有折叠条用于展开/收起
  • 树组件会自动填充父容器高度