Skip to content
# t-tree

Tree 树形控件

t-tree 组件介绍 ​

t-tree 是功能强大的树形结构组件,支持多级节点展开、折叠、选择、懒加载,具有增删改操作按钮,支持手风琴模式,适用于组织架构、文件目录、分类管理等场景。

t-tree 平台兼容 ​

HarmonyH5AndroidiOS小程序UTS
✅✅✅✅✅✅

t-tree 基础用法 ​

基础用法参考 demo/tree/tree.uvue。

vue
<template>
	<view class="p-15">
		<tui-theme-switch></tui-theme-switch>
		<t-card title="Tree 树"
				class="mb-15"
				sub-title="功能强大,多级节点展开、折叠、选择、懒加载,支持插槽灵活布局,并具有丰富的样式定制和事件响应能力"></t-card>
		<t-card title="亮点"
				class="mb-15"
				type="error"
				effect="light"
				sub-title="支持折叠动画。功能齐全"></t-card>
		<t-tree :list="list"
				type="primary"
				:row-height="60"
				:selects="selects"
				:folds="['1','2']"
				:show-checkbox="true"
				@edit="edit"
				@add="add"
				:load="lazyload"
				@delete="trash"
				@change="change"
				:accordion="false"></t-tree>
	</view>
</template>
<script setup>
	import { ref } from 'vue';
	import { TuiGuid } from '@/uni_modules/tui-common'
	const accordion = ref(false)
	const showCheckbox = ref(true)
	const selects = ref<string[]>(['11', '6'])
	const list = ref<UTSJSONObject[]>([{
		id: '1',
		label: '一级 1',
		children: [{
			id: '4',
			label: '二级 1-1',
			children: [{
				id: '9',
				label: '三级 1-1-1',
				disabled: true,
				children: [{
					id: '11',
					label: '四级 1-1-1'
				}]
			}, {
				id: '12',
				label: '三级 1-1-1',
				children: [{
					id: '13',
					label: '四级 1-1-1',
				}, {
					id: '14',
					label: '四级 4-2-1',
				}]
			}, {
				id: '10',
				label: '三级 1-1-2'
			}]
		}, {
			id: '16',
			label: '二级 1-1',
			children: [{
				id: '17',
				label: '三级 1-1-1',
				disabled: true,
				children: [{
					id: '18',
					label: '四级 1-1-1'
				}]
			}, {
				id: '19',
				label: '三级 1-1-1',
				children: [{
					id: '20',
					label: '四级 1-1-1',
				}]
			}, {
				id: '21',
				label: '最后一级 1-1-2'
			}]
		}]
	}, {
		id: '2',
		label: '一级 2',
		children: [{
			id: '5',
			label: '二级 2-1',
			disabled: true
		}, {
			id: '6',
			label: '二级 2-2'
		}]
	}, {
		id: '3',
		label: '一级 3',
		children: [{
			id: '7',
			label: '二级 3-1'
		}, {
			id: '8',
			label: '二级 3-2',
		}]
	}, {
		id: '89',
		label: '懒加载',
		lazy: true
	}])

	function change(e : string[]) {
		console.log(e)
	}

	function add(callback : (e : UTSJSONObject[]) => void) {
		callback([{
			id: TuiGuid(10),
			label: `新增${TuiGuid(10)}`
		}])
	}

	function edit(e : UTSJSONObject) {
		uni.showModal({
			title: `label更新`,
			editable: true,
			success: (res) => {
				if (res.confirm) {
					e.set('label', res.content)
				}
			}
		})
	}

	function trash(e : UTSJSONObject) {
		uni.showModal({
			title: '提示',
			content: `确认删除${e.getString('item.label')}吗?`,
			success: function (res) {
				if (res.confirm) {
					const callback = e.getAny('callback') as () => void
					callback()
				} else if (res.cancel) {
					console.log('用户点击取消');
				}
			}
		});
	}

	function lazyload(e : UTSJSONObject) : Promise<UTSJSONObject[]> {
		return new Promise((
			resolve : (res : UTSJSONObject[]) => void,
		) => {
			setTimeout(() => {
				console.log(e) //选中的项
				resolve([{
					id: TuiGuid(10),
					label: `异步数据${TuiGuid(10)}`
				}, {
					id: TuiGuid(10),
					label: `异步数据${TuiGuid(10)}`
				}])
			}, 2000)
		})
	}
</script>

t-tree Props ​

属性名说明类型默认值
list树形数据源UTSJSONObject[][]
selects选中项 ID 集合string[][]
folds默认展开的节点 ID 集合string[][]
accordion是否开启手风琴模式booleanfalse
showCheckbox是否显示选择框booleantrue
lazy是否开启懒加载booleanfalse
load懒加载函数function() => Promise.resolve([])
showAddButton是否显示增加按钮booleantrue
addIcon增加按钮图标string'plus-circle'
addIconClass增加按钮样式string''
showEditButton是否显示编辑按钮booleantrue
editIcon编辑按钮图标string'edit-pen'
editIconClass编辑按钮样式string''
showDeleteButton是否显示删除按钮booleantrue
deleteIcon删除按钮图标string'trash'
deleteIconClass删除按钮样式string''
rowHeight每行高度(px)number50
idKey节点唯一标识字段名string'id'
labelKey节点显示文字字段名string'label'
disabledKey节点禁用字段名string'disabled'
childrenKey子节点字段名string'children'
path点击组件后跳转的页面路径string''
hover是否启用点击效果booleanfalse
type组件主题类型string''
disabled是否禁用booleanfalse
effect组件显示主题string'normal'
size组件尺寸string''

t-tree Events ​

事件名说明回调参数
change选中状态变化时触发string[](选中项 ID 数组)
add点击增加按钮时触发节点数据
edit点击编辑按钮时触发节点数据
delete点击删除按钮时触发节点数据
click点击节点时触发event
initFinished组件初始化完成触发组件节点信息
touchstart触摸开始时触发event
touchend触摸结束时触发event
touchmove触摸移动时触发event
touchcancel触摸取消时触发event

外部类 ​

类名说明
add-icon-class增加按钮样式
edit-icon-class编辑按钮样式
delete-icon-class删除按钮样式

数据格式 ​

typescript
interface TreeNode {
  id: string;           // 唯一标识
  label: string;        // 显示文本
  disabled?: boolean;   // 是否禁用
  children?: TreeNode[];// 子节点数组
}