前言
Vue+ElementUI 是目前项目开发中普遍使用的前端技术,我们在开发中肯定会遇到用树形展示数据的需求,比如公司和部门,公司下面有多个部门,部门下面又有多个班组,每个部门或者班组下有相关人员,此时我们就可以使用ElementUI 的 tree 组件来实现,前端根据官网上的例子,需要的数据是这样的:
1 | javascript复制代码<el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree> |
效果是这样的:
接下来就是后台去构建这样结构的数据,然后提供接口给前端了。
本篇文章的例子最终实现的效果是这样的:
后台返回的数据是这样的:
1 | json复制代码{ |
一、数据库表结构设计
1 | sql复制代码create table SYS_NATURE_TREE |
其中 nature_tree_id 是主键、nature_tree_name 就是我们要展示的树节点的名称了,parent_id 是当前节点的父级,parent_ids 是当前节点的所有父级,用‘,’隔开。
二、具体实现
- entity
SYS_NATURE_TREE 对应的实体类:
1 | java复制代码public class NatureTree { |
实体类里加了子节点的 List 集合字段
- controller
代码如下:
1 | java复制代码 @GetMapping("/blackoutNatureTreeSelect") |
思路是先将 sys_nature_tree 表中的数据全部查出来,然后作为参数传入构建数据结构的方法 buildNatureTreeSelect。重点是这个 service 方法 buildNatureTreeSelect
- service
代码如下:
1 | java复制代码 @Override |
1 | java复制代码 @Override |
1 | java复制代码 /** |
1 | java复制代码 /** |
1 | java复制代码/** |
1 | java复制代码// 经过 buildNatureTree 处理过的 listNatureTrees 中的 NatureTree,children 属性就都有数据了 |
TreeSelect 类
1 | java复制代码/** |
上面贴出了最主要的代码,用到了 java 8 的 stream 流。至此,我们的数据结构就构建完成了
- 数据初始化
数据库中初始化一些数据,其中的停电性质就是顶级节点
三、总结
以上树结构的数据是提前在数据库中初始化好的,也可以将树节点添加上增删改功能,这个相对来说就比较简单了。
本文转载自: 掘金