AGILE TEAM
Skip to content

C_Tree 全局树形组件

纯树形展示组件,提供标签页、搜索、过滤等功能。布局由页面自行控制。

设计原则

  • 单一职责:只负责树形展示,不管布局
  • 解耦设计:与页面布局完全独立
  • 高复用性:可在任何布局中使用
  • 自动导入:无需手动 import

Props

参数说明类型默认值必填
tabs标签页配置Array<{label, name}>-
treeData树形数据Array-
treeProps树形配置Object{children: 'children', label: 'label'}
defaultActiveTab默认激活标签string'tab1'
showSearch显示搜索booleantrue
searchPlaceholder搜索占位符string'关键词搜索'
defaultExpandAll默认展开booleantrue
highlightCurrent高亮当前booleantrue

Events

事件名说明参数
node-click节点被点击(data: any)
tab-change标签页切换(tabName: string)

Slots

插槽名说明参数
node自定义节点内容{ data }

暴露方法

方法名说明参数
clearSearch清空搜索-
switchTab切换标签页(tabName: string)

使用示例

1. 基础用法

vue
<template>
  <C_Tree :tree-data="treeData" @node-click="handleNodeClick" />
</template>

<script setup>
const treeData = ref([
  {
    id: "1",
    label: "节点1",
    children: [{ id: "1-1", label: "子节点1-1" }]
  }
]);

const handleNodeClick = (data) => {
  console.log("点击节点:", data);
};
</script>

2. 带标签页和搜索

vue
<template>
  <C_Tree
    :tabs="tabs"
    :tree-data="treeData"
    :default-active-tab="activeTab"
    @node-click="handleNodeClick"
    @tab-change="handleTabChange"
  />
</template>

<script setup>
const tabs = [
  { label: "基本信息", name: "tab1" },
  { label: "交付标准", name: "tab2" }
];

const activeTab = ref("tab1");
const treeData = ref([...]);

const handleTabChange = (tabName) => {
  activeTab.value = tabName;
  // 加载对应标签页的数据...
};
</script>

3. 左右布局(使用 jh-drag-col)

vue
<template>
  <jh-drag-col :left-width="300">
    <!-- 左侧:树形 -->
    <template #left>
      <C_Tree
        :tabs="tabs"
        :tree-data="treeData"
        @node-click="handleNodeClick"
      />
    </template>

    <!-- 右侧:详情 -->
    <template #right>
      <div class="detail-panel">
        <h3>{{ selectedNode?.label }}</h3>
        <p>详情内容...</p>
      </div>
    </template>
  </jh-drag-col>
</template>

<script setup>
const tabs = [
  { label: "基本信息", name: "tab1" },
  { label: "交付标准", name: "tab2" }
];

const treeData = ref([...]);
const selectedNode = ref(null);

const handleNodeClick = (data) => {
  selectedNode.value = data;
};
</script>

<style scoped>
.detail-panel {
  padding: 16px;
  background: #fff;
  border-radius: 4px;
  height: 100%;
}
</style>

注意事项

  1. treeData 必填:组件必须传入树形数据
  2. 布局由页面控制:组件本身只占满父容器的 100% 高度
  3. 自动导入:已配置 Vite 自动导入,无需手动 import
  4. 事件名格式:使用 kebab-case(@node-click@tab-change

You may not distribute, modify, or sell this software without permission.