级联菜单的查询实现

一:原理

  级联菜单的原理就是一个下拉框,它是elementui的一个级联组件,后端需要给前端返回一个集合,首先后端需要查询出所有的上级部门,返回部门集合,然后将id作为key,对象作为value循环存入map,用于方便根据id获取对应的对象,然后创建一个新的集合用于存储处理后的部门树,循环上面的部门集合,如果parent_id为空,说明是顶级部门,直接将这个对象放进刚刚新创建的集合,如果不为空,就根据这个parent_id到map中get上级对象,然后将循环的这个对象放进上级对象的chilren子部门集合中,然后将这个集合返回给前端即可

二:前端

<el-form-item label="上级部门" prop="parent">
            <el-cascader v-model="editForm.parent_id"
                :options="deptTree"
                :props="{
                  label:'name',
                  value:'id',
                  checkStrictly: true
                }"
                clearable>
            </el-cascader>
        </el-form-item>

deptTree:即后端返回的部门树集合

label:即在显示框中显示的值

value:回显和往后端传值都需要

 //查询部门树
      getDeptTree(){
        this.$http.get("/department/deptTree").then(res=>{ //后台返回一个List
          this.deptTree = res.data
        }).catch(res=>{

        })
      },

三:后端业务

/**
     * 部门树
     * @return List
     */
    @Override
    public List<Department> deptTree() {
        //1.查询所有部门信息
        List<Department> all = departmentMapper.loadAll();
        //2.准备一个map去存储数据
        Map<Long, Department> map = new HashMap<>();
        //3.将所有数据放入map中
        for(Department department:all){
            map.put(department.getId(),department);
        }
        //4.准备一个集合用于保存处理后的数据
        List<Department> dpartmentTree = new ArrayList<>();
        for (Department department : all){
            if(department.getParent_id()==null){  //顶级部门
                dpartmentTree.add(department);
            }else{
                //获取parent_id
                Long parent_id = department.getParent_id();
                //获取上级部门对象
                Department parentDept = map.get(parent_id);
                //把自己放入上级部门的children中
                parentDept.getChildren().add(department);
            }
        }
        //返回处理完毕的部门树
        return dpartmentTree;
    }

实体类字段:

 //子集部门集合
    @JsonInclude(JsonInclude.Include.NON_EMPTY)  //部门树最后一页没有数据就不显示
    List<Department> children = new ArrayList<>();

 

posted @ 2022-08-02 12:50  yyybl  阅读(130)  评论(0)    收藏  举报