更新记录

1.0.0(2026-02-02) 下载此版本

  • 基础树形展示:支持多层级数据展示,展开/折叠。
  • 自定义插槽:支持自定义节点内容和图标。
  • 拖拽排序:支持长按节点进行拖拽排序(可开关)。
  • 选择功能:支持复选框(Checkbox)和单选框(Radio)模式。
  • 父子联动:复选框模式下支持父子节点选中状态联动(可配置独立选择)。
  • 操作交互:内置编辑和删除按钮操作。
  • 样式美观:简洁现代的 UI 设计,支持半选状态(Indeterminate)。

平台兼容性

uni-app(3.6.16)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟

x-tree 树形组件

x-tree 是一个功能丰富的 Vue 2 树形组件,专为 Uni-app 开发。它支持自定义节点、图标、拖拽排序(长按)、节点编辑/删除、复选框/单选框选择等功能。

功能特性

  • 基础树形展示:支持多层级数据展示,展开/折叠。
  • 自定义插槽:支持自定义节点内容和图标。
  • 拖拽排序:支持长按节点进行拖拽排序(可开关)。
  • 选择功能:支持复选框(Checkbox)和单选框(Radio)模式。
  • 父子联动:复选框模式下支持父子节点选中状态联动(可配置独立选择)。
  • 操作交互:内置编辑和删除按钮操作。
  • 样式美观:简洁现代的 UI 设计,支持半选状态(Indeterminate)。

引入组件

pages.json 中配置 easycom 或在页面中手动引入:

import xTree from '@/components/x-tree/x-tree.vue';

export default {
    components: {
        xTree
    }
}

基本用法

<template>
    <x-tree 
        :data="treeData" 
        :check-type="'checkbox'"
        :draggable="true"
        @edit="handleEdit" 
        @delete="handleDelete"
        @node-drop="handleDrop"
        @check-change="handleCheckChange"
    >
    </x-tree>
</template>

API

Props 属性

参数 说明 类型 默认值
data 树形结构数据源 Array []
itemHeight 每一行的高度 (px) Number 48
checkType 选择类型,可选值 'checkbox' (复选), 'radio' (单选), '' (无) String ''
checkStrictly 在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,默认为 false (即父子联动) Boolean false
draggable 是否开启长按拖拽排序功能 Boolean false

Events 事件

事件名 说明 回调参数
edit 点击编辑按钮触发 item: 当前节点数据对象
delete 点击删除按钮触发 item: 当前节点数据对象
node-drop 拖拽结束触发 { source, target, position }: 源节点,目标节点,位置('before'|'after')
check-change 勾选状态改变时触发 checkbox: { checked, item, checkedKeys, checkedNodes }
radio: { checked, item, checkedKeys }

Slots 插槽

插槽名 说明 作用域参数
icon 自定义节点左侧图标 { item }: 当前节点数据
default 自定义节点内容(文本区域) { item }: 当前节点数据

插槽示例

<x-tree :data="list">
    <!-- 自定义图标 -->
    <template v-slot:icon="{ item }">
        <text v-if="item.type === 'folder'">📂</text>
        <text v-else>📄</text>
    </template>

    <!-- 自定义内容 -->
    <template v-slot:default="{ item }">
        <text style="color: blue;">{{ item.label }}</text>
        <text style="font-size: 10px; color: #999;">(ID: {{ item.id }})</text>
    </template>
</x-tree>

数据结构 (Data Prop)

data 属性接受一个对象数组,每个对象应包含以下字段:

[
    {
        id: 1,                  // 唯一标识
        label: 'Node 1',        // 显示文本
        expanded: true,         // 是否展开 (可选, 默认 true)
        checked: false,         // 是否选中 (可选)
        children: [             // 子节点数组
            {
                id: 11,
                label: 'Child 1-1'
            }
        ]
    }
]

注意事项

  1. 拖拽排序:开启 draggable 后,用户需长按节点约 300ms 触发拖拽状态。
  2. 样式定制:组件内部使用了 scoped 样式,如需覆盖请使用深度选择器 ::v-deep
  3. 性能:组件内部将树形数据扁平化为列表渲染,以优化长列表性能并简化拖拽计算。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。