Skip to content

Tree 树形组件

赛博朋克风格的树形组件,支持多级数据展示、节点选择、状态显示等功能。

基本用法

vue
<template>
  <cyber-tree :data="basicData" />
</template>

<script setup>
import { ref } from 'vue'

const basicData = ref([
  {
    id: 1,
    label: '系统根节点',
    children: [
      {
        id: 2,
        label: '文件夹 1',
        children: [
          { id: 3, label: '文件 1-1' },
          { id: 4, label: '文件 1-2' }
        ]
      },
      {
        id: 5,
        label: '文件夹 2',
        children: [
          { id: 6, label: '文件 2-1' }
        ]
      }
    ]
  }
])
</script>

主题

支持四种赛博朋克主题:neonhologramterminalmatrix

vue
<template>
  <cyber-tree :data="basicData" theme="neon" />
  <cyber-tree :data="basicData" theme="hologram" />
  <cyber-tree :data="basicData" theme="terminal" />
  <cyber-tree :data="basicData" theme="matrix" />
</template>

视觉效果

支持多种视觉效果:glitch(故障)、scan(扫描)、pulse(脉冲)、static(静态)

vue
<template>
  <cyber-tree :data="basicData" effect="glitch" />
  <cyber-tree :data="basicData" effect="scan" />
  <cyber-tree :data="basicData" effect="pulse" />
  <cyber-tree :data="basicData" effect="static" />
</template>

显示状态

节点可以显示在线状态:onlineofflinewarningerror

vue
<template>
  <cyber-tree :data="statusData" :show-status="true" />
</template>

<script setup>
import { ref } from 'vue'

const statusData = ref([
  {
    id: 1,
    label: '服务器集群',
    children: [
      { id: 2, label: '服务器 A', status: 'online' },
      { id: 3, label: '服务器 B', status: 'warning' },
      { id: 4, label: '服务器 C', status: 'offline' },
      { id: 5, label: '服务器 D', status: 'error' }
    ]
  }
])
</script>

节点选择

支持单选和多选模式

vue
<template>
  <cyber-tree :data="basicData" :multiple="true" @select-change="handleSelectChange" />
</template>

<script setup>
const handleSelectChange = (selectedNodes) => {
  console.log('选中的节点:', selectedNodes)
}
</script>

默认全部展开

vue
<template>
  <cyber-tree :data="basicData" :default-expand-all="true" />
</template>

隐藏连接线

vue
<template>
  <cyber-tree :data="basicData" :show-connectors="false" />
</template>

自定义缩进

vue
<template>
  <cyber-tree :data="basicData" :indent="50" />
</template>

点击展开/收起

vue
<template>
  <cyber-tree :data="basicData" :expand-on-click="true" />
</template>

事件

vue
<template>
  <cyber-tree
    :data="treeData"
    @node-click="handleNodeClick"
    @node-expand="handleNodeExpand"
    @node-collapse="handleNodeCollapse"
    @select-change="handleSelectChange"
  />
</template>

<script setup>
const handleNodeClick = (node) => {
  console.log('节点点击:', node)
}

const handleNodeExpand = (node) => {
  console.log('节点展开:', node)
}

const handleNodeCollapse = (node) => {
  console.log('节点收起:', node)
}

const handleSelectChange = (selectedNodes) => {
  console.log('选中节点变化:', selectedNodes)
}
</script>

属性

属性名说明类型可选值默认值
data树形数据array-[]
theme主题样式stringneon / hologram / terminal / matrixneon
effect视觉效果stringglitch / scan / pulse / staticscan
showConnectors是否显示连接线boolean-true
showStatus是否显示状态boolean-true
showScanline是否显示扫描线boolean-true
indent节点缩进距离number-30
defaultExpandAll默认全部展开boolean-false
expandOnClick点击节点展开/收起boolean-true
multiple是否支持多选boolean-false

事件

事件名说明回调参数
node-click节点点击事件(node)
node-expand节点展开事件(node)
node-collapse节点收起事件(node)
select-change选中节点变化事件(selectedNodes)

数据结构

属性说明类型默认值
id节点唯一标识string | number-
label节点显示文本string-
children子节点数组TreeNode[]-
expanded是否展开booleanfalse
selected是否选中booleanfalse
status节点状态online / offline / warning / error-
icon自定义图标类名string-

方法

通过 ref 可以调用以下方法:

方法名说明参数
getSelectedNodes获取选中的节点-
clearSelection清除选中状态-
vue
<template>
  <cyber-tree ref="treeRef" :data="treeData" />
  <button @click="getSelected">获取选中节点</button>
  <button @click="clearSelection">清除选中</button>
</template>

<script setup>
import { ref } from 'vue'

const treeRef = ref(null)

const getSelected = () => {
  const nodes = treeRef.value.getSelectedNodes()
  console.log('选中的节点:', nodes)
}

const clearSelection = () => {
  treeRef.value.clearSelection()
}
</script>

Relcased under the Mit Lincense.