构建树形菜单数据
Posted pan-my
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建树形菜单数据相关的知识,希望对你有一定的参考价值。
菜单实体: @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;
以上是关于构建树形菜单数据的主要内容,如果未能解决你的问题,请参考以下文章