菜单实体:
@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;
}
转载于:https://www.cnblogs.com/pan-my/p/11428443.html
相关资源:树形菜单 前台后台完整的代码