ElementUI组件Cascader级联选择器数据后台处理
Cascader级联选择器数据数据格式不知道的可以去官网看下;这里我就不表示什么了。
部门实体类:
import lombok.Data; @Data
public class Department {
private Integer id; private Integer parentId; private String name; public Department(Integer id, Integer parentId, String name) {
this.id = id;
this.parentId = parentId;
this.name = name;
} public static TreeItem deptNode(Department dept) {
TreeItem treeItem = new TreeItem();
treeItem.setId(dept.getId());
treeItem.setName(dept.getName());
treeItem.setParentId(dept.getParentId());
return treeItem;
}
}
用户实体类:
import lombok.Data; @Data
public class Employee { private Integer id; private String name; private Integer deptId; public Employee(Integer id, String name, Integer deptId) {
this.id = id;
this.name = name;
this.deptId = deptId;
} public static TreeItem empNode(Employee emp) {
TreeItem treeItem = new TreeItem();
treeItem.setId(emp.getId());
treeItem.setName(emp.getName());
treeItem.setParentId(emp.getDeptId());
return treeItem;
}
}
返回数据实体类:
import lombok.Data; import java.util.List; @Data
public class TreeItem {
private Integer id; private Integer parentId; private String name; private List<TreeItem> children;
}
数据处理操作,这里是用java8新的特性写的。不懂的可以学习下,挺好用的
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; public class App {
public static void main(String[] args) {
//创建部门
List<Department> deptList = Arrays.asList(
new Department(1, 0, "星宇"),
new Department(2, 1, "金3"),
new Department(3, 2, "金3/1"),
new Department(4, 2, "金3/2"),
new Department(5, 1, "总1"),
new Department(6, 5, "总1/2") );
//创建员工
List<Employee> empList = Arrays.asList(
new Employee(1, "张三", 5),
new Employee(2, "李四", 6),
new Employee(3, "王五", 2),
new Employee(4, "赵六", 2),
new Employee(5, "田七", 3),
new Employee(6, "牛八", 4)
);
//转换成结点
List<TreeItem> allDept = deptList.stream()
.map(Department::deptNode)
.collect(Collectors.toList());
//按照上级部门分组
Map<Integer, List<TreeItem>> deptMap = allDept.stream()
.collect(Collectors.groupingBy(TreeItem::getParentId));
//给每个部门绑定子部门
allDept.forEach(node ->
node.setChildren(deptMap.get(node.getId()))
); List<TreeItem> treeItem = deptMap.get(0); Map<Integer, List<TreeItem>> empMap = empList.stream()
.filter(emp -> emp.getDeptId() != null)
.map(Employee::empNode)
.collect(Collectors.groupingBy(TreeItem::getParentId));
//BFS辅助队列
List<TreeItem> queue = new ArrayList<>();
queue.addAll(treeItem);
for (int i = 0; i < queue.size(); i++) {
TreeItem node = queue.get(i);
//遍历时先将子部门放入队列中
if (node.getChildren() != null) {
queue.addAll(node.getChildren());
} else {
node.setChildren(new ArrayList<>());
}
//再将部门成员放入子结点中
List<TreeItem> children = empMap.get(node.getId());
if (children != null) {
node.getChildren().addAll(children);
}
} treeItem.forEach(x -> System.out.println(x)); }
}
TreeItem(id=1, parentId=0, name=星宇, children=[TreeItem(id=2, parentId=1, name=金3, children=[TreeItem(id=3, parentId=2, name=金3/1, children=[TreeItem(id=5, parentId=3, name=田七, children=null)]), TreeItem(id=4, parentId=2, name=金3/2, children=[TreeItem(id=6, parentId=4, name=牛八, children=null)]), TreeItem(id=3, parentId=2, name=王五, children=null), TreeItem(id=4, parentId=2, name=赵六, children=null)]), TreeItem(id=5, parentId=1, name=总1, children=[TreeItem(id=6, parentId=5, name=总1/2, children=[TreeItem(id=2, parentId=6, name=李四, children=null)]), TreeItem(id=1, parentId=5, name=张三, children=null)])])
上面是我打印出来的数据,其实你们只要返回treeItem这个集合就可以了,这个数据结构符合Cascader级联选择器。
ElementUI组件Cascader级联选择器数据后台处理的更多相关文章
- ElementUI 之 Cascader 级联选择器指定 value label
ElementUI 的 Cascader 级联选择器个人觉得很好用,但是对 :options="options" 里的数据格式是有特定要求的:input 框显示的值是 option ...
- element-ui Cascader 级联选择器示例
<html> <head>test</head> <style> @import url("http://unpkg.com/element- ...
- element UI Cascader 级联选择器 编辑 修改 数组 路径 问题(转载)
来源:https://segmentfault.com/a/1190000014827485 element UI的Cascader级联选择器编辑时 vue.js element-ui 2 eleme ...
- vue+element ui项目总结点(一)select、Cascader级联选择器、encodeURI、decodeURI转码解码、mockjs用法、路由懒加载三种方式
不多说上代码: <template> <div class="hello"> <h1>{{ msg }}</h1> <p> ...
- Cascader 级联选择器
当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择. 基础用法 有两种触发子菜单的方式 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器. 通过expa ...
- element 的 Cascader 级联选择器设定默认值
Cascader 级联选择器 发现在很多的CRM管理系统里面,都有不少页面是用到这种级联选择器的,确实,功能很实用, 不过要设置默认值则应该让不少人头痛,因为你选择的时候 @change 事件的参数就 ...
- vue+element级联选择器对接后台数据
1.后台接口返回的数据肯定要和级联选择器的数据一致,所以我专门弄个model存放返回的值,如下:/** * @Auther: GGDong * @Date: 2019/4/3 10:30 */@Get ...
- Element-ui Cascader 级联选择器 同时返回 value 和 label
给 cascader 组件赋值一个别名 ref="cascaderAddr" <el-form-item label="部门" prop="or ...
- 【前端】Element-UI 省市县级联选择器 JSON数据
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/element_cascader.html 不想自己处理的就直接下载吧 http://shamoyuu.bj.bce ...
随机推荐
- C#打印类
using System;using System.Collections.Generic;using System.Text;using System.Windows.Forms;using Sys ...
- 阿里云ECS服务器磁盘挂载(转)
买了阿里云的ECS云服务器,本机赠送20GB的磁盘,感觉不够用,又买了一块500GB的磁盘,本文就是记录怎么把这500GB的磁盘挂载上. 检查现在磁盘情况 我们可以看到买的那个500GB的磁盘没有出现 ...
- Java基础知识---continue
一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名为Java: ...
- [转]将Eclipse设置为黑色主题 方式一
将Eclipse设置为黑色主题 觉得黑色的主题&配色很高大上,于是花了点时间实践出下面一种方法. 修改代码编辑区配色 修改整个软件主题 先上成果图: 但是进度条依旧是白色的,不知道怎么弄了╮( ...
- Zstack中任务,事件,消息之间的关系
Zstack是Zigbee协议的具体实现,在实现的过程中为了能够更好的对各个模块和功能进行管理,所以加入了OSAL(Operating System Abstraction Layer 操作系统抽象层 ...
- axios配置大全
一.安装 1. 利用npm安装npm install axios --save 2. 利用bower安装bower install axios --save 3. 直接利用cdn引入<scrip ...
- TCP深入详解
TCP三次握手.四次挥手时序图: #TCP协议状态机 1.TCP建立连接时的初始化序列号X.Y可以是写死固定的吗? 如果初始化序列号(缩写为ISN:Inital Sequence Numbe ...
- 图片上传oss--先拿server端签名再上传oss,返回id值
目前项目oss阿里云存储图片,图片上传主要步骤是:前端从服务端拿到签名signature,再上传到oss上busket里,上传成功返回图片id (imgId),最后再给server端: 注:官网上有个 ...
- rhel7配置samba_4.7.1,共享给所有人以及共享给指定用户
1.共享给所有人 服务端配置: yum -y install samba samba-client samba-common #安装客户端 mkdir /guest #创建共享文件夹 c ...
- jar包中使用log4j2不起作用
某程序中有使用到log4j2,将该程序打包成jar,使用以下命令执行时,发现log4j不输出 java -cp Tool.jar com.zhen.nameOnce.Log4jTest 且报以下错误 ...