SimpleAdmin手摸手教学之:基于Ant Design Tree组件实现树形结构数据的异步加载

发布时间 2023-05-31 13:34:19作者: HuTiger

一、说明

当有一个树形结构的数据有非常多个节点的时候,一次性加载所有节点会显得过于臃肿,可能会对性能造成影响,正好Ant Design 的树(Tree)组件支持异步加载,于是我就想把异步加载封装为一个组件,可以减少接口数据返回,点击展开节点,动态加载数据。非常好用!

二、前端实现

需要接收一些值用来数据的初始化和格式化

const props = defineProps({
		//替换treeNode 中 children
		fieldNamesChildren: { type: String, default: 'children' },
		//替换treeNode 中 title
		fieldNamesTitle: { type: String, default: 'title' },
		//替换treeNode 中 key
		fieldNamesKey: { type: String, default: 'id' },
		//初始数据
		treeData: { type: Function, required: true },
		//父Id字段
		parentIdColumn: { type: String, default: 'parentId' },
		//默认顶级父Id值
		topValue: { default: 0 }
	})

以组织树为例,需要异步加载的时候,由tree组件换成lazyTree组件就行

默认需要传treeData属性,也就是去请求后端去获取数据的方法,这个方法需要有一个参数parameter,当展开节点的时候会请求这个方法并带上父ID去查询。

首次加载组件会调用一次获取节点数据方法。

点击某个节点会根据节点的key对应的字段,获取下级节点。并添加到节点数据中。

三、后端实现

以组织树为例,原来的tree方法需要增加父ID参数来根据父ID获取下级节点

原来的tree方法也要改一改,如果选择器ID不为空则表示是懒加载,只加载子节点。

GetSysOrgChildenLazy方法会去根据父ID找到对应的子节点并判断子节点是否有下级节点。

需要在组织实体中加个IsLeaf字段判断是不是叶子节点,如果IsLeaf是true就表示没有子节点了,前端树控件也不会显示小箭头。

四、效果

最后实现效果如下,这里一次请求加载2级节点。