使用递归遍历一个结构树(layui)
1.后台代码
@PostMapping("selectDepts")
public List findTypeTree() throws Exception {
List depts = deptMapper.queryDepts();//查出所有部门
List list = new ArrayList<>();
for (Dept t : depts) {
if(t.getParentId()==-1){//判断是否是一级菜单
boolean flag;
if(t.getIsUsed()==1){
flag=false;
}else{
flag=true;
}
JSONObject treeObject = new JSONObject();
if(t.getParentId()==-1){
treeObject.put("spread", true);//是否直接展开
}
treeObject.put("id", t.getDeptId());
treeObject.put("title", t.getDeptName());//tree的节点名称
treeObject.put("disabled", flag);//layui中的是否禁用
treeObject.put("children", getChildren(t.getDeptId(),depts));//孩子节点,递归遍历
list.add(treeObject);
}
}
return list;
}
public List getChildren(Integer parentId,List depts){
List list = new ArrayList<>();
for (Dept d : depts) {
if(d.getParentId().equals(parentId)){
boolean flag;
if(d.getIsUsed()==1){
flag=false;
}else{
flag=true;
}
JSONObject obj = new JSONObject();
obj.put("id", d.getDeptId());
obj.put("title", d.getDeptName());
obj.put("disabled", flag);
obj.put("children", getChildren(d.getDeptId(),depts));
list.add(obj);
}
}
return list;
}
2.前端代码
var msg=null;
var msg1=null;
var index = layer.load(2, {
shade: [0.1,'#fff'] //0.1透明度的白色背景
});
loadtree()
function loadtree(){
$.ajax({
type: "post",
url: serverUrl + "/Dept/selectDepts",
dataType: 'json',
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
success: function(res) {
layer.close(index);
var data = [{}];
layui.use(['tree','util'], function() {
var tree = layui.tree,
layer = layui.layer,
util = layui.util,
data1 = res
tree.render({
elem: '#test9',
id:'treedept',
data: data1,
showCheckbox: true,//显示多选框
showLine:true,//显示线
accordion:true,//手风琴模式
drag:true,//拖拽
skin: "laySimple" , // laySimple主题风格
showSearch: true,//显示搜索框
edit: ['add', 'update','del','banuser'], //操作节点的图标,
click: function(obj) {
},
operate:function(obj){
var type = obj.type; //得到操作类型:add、edit、del
var data = obj.data; //得到当前节点的数据
var elem = obj.elem; //得到当前节点元素
if(type==='del'){
var arr=obj.data;
if(arr.id>0&&(!typeof arr.id!= 'undefined')){
if(arr.children.length>0){
layer.confirm('该部门下有其它子部门是否确认删除?', function(index){
deleteDept(arr.id);
if(msg1.trim()=="删除成功!"){
elem.remove();
}
htmlInfo(msg1);
layer.close(index);
loadtree()
});
}else{
layer.confirm('是否确认删除?', function(index){
deleteDept(arr.id);
if(msg1.trim()=="删除成功!"){
elem.remove();
}
htmlInfo(msg1);
layer.close(index);
loadtree()
});
}
}else{
elem.remove();
}
}
},drag:function(obj){
console.log(obj);
}
});
util.event('lay-demo', {//多选框获取数据
getChecked: function(othis){
var idList=[];
var arr= document.getElementsByClassName("layui-form-checked");
for (var i = 0; i < arr.length; i++) {
let a=arr[i];
if($(a).parent().parent().parent().attr("data-id")!="undefined"){
idList.push($(a).parent().parent().parent().attr("data-id"));
}
}
if(idList.length==0){
layer.msg("请至少选择一个部门进行删除");
}else{
layer.confirm('是否确认删除?', function(index){
deleteDeptList(idList); //删除函数
htmlInfo(msg);
layer.close(index);
loadtree()
});
}
}
});
});
}
});
}
3.数据库设计
红线框住的是根节点,parent_id是根据dept-id获取的