zoukankan      html  css  js  c++  java
  • 构建树形菜单数据

    菜单实体:
    @Data
    public class SysMenu {
    
        /**
         * 菜单编码
         */
        @ApiModelProperty(value="菜单编码",name="rowId",example="菜单编码")
        private String rowId;
    
        /**
         * 菜单名称
         */
        @ApiModelProperty(value="菜单名称",name="name",example="菜单名称")
        private String name;
    
        /**
         * 父ID
         */
        @ApiModelProperty(value="父ID",name="parentId",example="父ID")
        private String parentId;
    
        /**
         *
         */
        @ApiModelProperty(value="",name="iconCls",example="")
        private String iconCls;
    
        /**
         * url
         */
        @ApiModelProperty(value="url",name="url",example="url")
        private String url;
        /**
         * 值
         */
        @ApiModelProperty(value="值",name="sort",example="值")
        private Long sort;
    
        /**
         * 版本号
         */
        @ApiModelProperty(value="版本号",name="version",example="版本号")
        private String version;
    
        /**
         * 修改人
         */
        @ApiModelProperty(value="修改人",name="updateUserid",example="修改人")
        private String updateUserid;
    
        /**
         * 修改时间
         */
        @ApiModelProperty(value="修改时间",name="updatedt",example="修改时间")
        private Date updatedt;
    
        /**
         * 创建人
         */
        @ApiModelProperty(value="创建人",name="userid",example="创建人")
        private String userid;
    
        /**
         * 创建时间
         */
        @ApiModelProperty(value="创建时间",name="insdt",example="创建时间")
        private Date insdt;
    
        /**
         * 类型
         */
        @ApiModelProperty(value="类型",name="type",example="类型")
        private String type;
    
        @ApiModelProperty(value="父节点名",name="parentName",example="父节点名")
        private String parentName;
    
        @ApiModelProperty(value="是否可见",name="visible",example="是否可见")
        private String visible;
    
        @ApiModelProperty(value="权限标识",name="access",example="权限标识")
        private String access;
        /**
         * 是否被选中
         */
        private boolean checked = false;
    
        @ApiModelProperty(value="是否是收藏(0:不是,1:是)",name="access",example="是否是收藏(0:不是,1:是)")
        private String isFavorite;
    
        /**
         *子节点
         * @return
         */
        @ApiModelProperty(value = "子菜单, 查询时返回")
        private List<SysMenu> childrens = new ArrayList<>();
    
    }
    
    
    @Data
    public class SysMenuDto {
    
        /**
         * 菜单编码
         */
        @ApiModelProperty(value="菜单编码",name="id",example="菜单编码")
        private String id;
    
        /**
         * 菜单名称
         */
        @ApiModelProperty(value="菜单名称",name="text",example="菜单名称")
        private String text;
    
        /**
         * 父ID
         */
        @ApiModelProperty(value="父ID",name="parentId",example="父ID")
        private String parentId;
    
        /**
         *
         */
        @ApiModelProperty(value="",name="iconCls",example="")
        private String iconCls;
    
        /**
         * url
         */
        @ApiModelProperty(value="url",name="url",example="url")
        private String url;
    
        @ApiModelProperty(value="类型",name="type",example="类型")
        private String type;
    
        @ApiModelProperty(value="父节点名",name="parentName",example="父节点名")
        private String parentName;
    
        @ApiModelProperty(value="是否可见",name="visible",example="是否可见")
        private String visible;
    
        @ApiModelProperty(value="权限标识",name="access",example="权限标识")
        private String access;
    
        /**
         * 是否被选中
         */
        private boolean checked = false;
    
        @ApiModelProperty(value="是否是收藏(0:不是,1:是)",name="access",example="是否是收藏(0:不是,1:是)")
        private String isFavorite;
    
        /**
         * 值
         */
        @ApiModelProperty(value="值",name="sort",example="值")
        private Long sort;
    
        /**
         *子节点
         * @return
         */
        @ApiModelProperty(value = "子菜单, 查询时返回")
        private List<SysMenuDto> childrens;
    
        public static SysMenuDto convertSysMenuEntity(SysMenu entity) {
            SysMenuDto sysMenuDto = new SysMenuDto();
            sysMenuDto.setId(entity.getRowId());
            sysMenuDto.setText(entity.getName());
            sysMenuDto.setParentId(entity.getParentId());
            sysMenuDto.setIconCls(entity.getIconCls());
            sysMenuDto.setUrl(entity.getUrl());
            sysMenuDto.setChecked(entity.isChecked());
            sysMenuDto.setAccess(entity.getAccess());
            sysMenuDto.setParentName(entity.getParentName());
            sysMenuDto.setVisible(entity.getVisible());
            sysMenuDto.setType(entity.getType());
            sysMenuDto.setIsFavorite(entity.getIsFavorite());
            sysMenuDto.setSort(entity.getSort());
            return sysMenuDto;
        }
    
    }
    
    构建递归方法查询子节点:
     private void getTreeStructure(SysMenuDto root, List<SysMenu> orgs) {
            for (SysMenu org : orgs) {
                if (org.getParentId().equals(root.getId())) {
                    SysMenuDto s = SysMenuDto.convertSysMenuEntity(org);
                    getTreeStructure(s, orgs);
                    if (root.getChildrens() == null) {
                        root.setChildrens(new ArrayList<>());
                    }
                    root.getChildrens().add(s);
                }
            }
        }
    
    
    调用递归方法构建数据:
    
    public Map<String, Object> getSysMenuTreeData(String pDid, String pRowId) {
            List<SysMenuDto> list = new ArrayList<>();
            //查询菜单列表
            List<SysMenu> sysMenuList = sysRoleMapper.findList();
            //修改时查询已选中的权限
            if (!StringUtils.isEmpty(pRowId)) {
                SysRole sysRole = sysRoleMapper.selectByPrimaryKey(pRowId, pDid);
                if (null != sysRole && !StringUtils.isEmpty(sysRole.getMenu())) {
                    //已选中的权限列表 就是拥有的菜单编码
                    List<String> menuList = Arrays.asList(sysRole.getMenu().split(","));
                    logger.info("选中的权限列表:{}", JsonUtil.obj2String(menuList));
                    for (SysMenu sysMenu : sysMenuList) {
                        //如果菜单已被选中,则设置为true
                        if (menuList.contains(sysMenu.getRowId())) {
                            sysMenu.setChecked(true);
                        }
                    }
                }
            }
            //获取该经销商默认设置的系统菜单版本
            String verdion = sysRoleMapper.selectVersion(pDid);
            //获取顶级菜单
            List<SysMenu> topMenuList = sysRoleMapper.selectTopMenu(verdion);
            if (null == topMenuList) {
                return null;
            }
            for (SysMenu menu : topMenuList) {
                SysMenuDto s = SysMenuDto.convertSysMenuEntity(menu);
                getTreeStructure(s, sysMenuList);
                list.add(s);
            }
            logger.info("获取最终菜单:{}", JsonUtil.obj2String(list));
    
            Map<String, Object> map = new HashMap<>();
            map.put("Id", "0");
            map.put("text", "全选");
            map.put("childrens", list);
            return map;
        }
  • 相关阅读:
    DBAccess
    业务耗时及数组
    QB资料学习.01
    格式化参数
    日志记录.02_线程处理
    nginx 开启gzip
    js 变量提升和函数提升
    js 深拷贝 vs 浅拷贝
    js 伪数组 转 数组
    js 对象原型和原型链
  • 原文地址:https://www.cnblogs.com/pan-my/p/11428443.html
Copyright © 2011-2022 走看看