1、控制层
/**
* 查询菜单树
*/
@GetMapping("/selectMenuTree")
public AjaxResult selectMenuTree(){
return AjaxResult.success(MenuService.selectMenuTree());
}
2、业务层
/**
* 查询菜单树
* @return 菜单树
*/
public List<Menu> selectMenuTree();
/**
* 查询菜单树
*
* @return 所有菜单信息
*/
@Override
public List<Menu> selectMenuTree() {
List<Menu> menus = menuMapper.selectMenuTreeAll();
return getChildPerms(menus, 0);
}
3、相关方法
/**
* 根据父节点的ID获取所有子节点
*
* @param list 分类表
* @param parentId 传入的父节点ID
* @return String
*/
public List<Menu> getChildPerms(List<Menu> list, int parentId)
{
List<Menu> returnList = new ArrayList<Menu>();
for (Iterator<Menu> iterator = list.iterator(); iterator.hasNext();)
{
menu t = (Menu) iterator.next();
// 根据传入的某个父节点ID,遍历该父节点的所有子节点
if (t.getParentId() == parentId)
{
recursionFn(list, t);
returnList.add(t);
}
}
return returnList;
}
/**
* 递归列表
*
* @param list 分类表
* @param t 子节点
*/
private void recursionFn(List<Menu> list, Menu t)
{
// 得到子节点列表
List<Menu> childList = getChildList(list, t);
t.setChildren(childList);
for (Menu tChild : childList)
{
if (hasChild(list, tChild))
{
recursionFn(list, tChild);
}
}
}
/**
* 得到子节点列表
*/
private List<Menu> getChildList(List<Menu> list, Menu t)
{
List<Menu> tlist = new ArrayList<Menu>();
Iterator<Menu> it = list.iterator();
while (it.hasNext())
{
menu n = (Menu) it.next();
if (n.getParentId().longValue() == t.getMenuId().longValue())
{
tlist.add(n);
}
}
return tlist;
}
/**
* 判断是否有子节点
*/
private boolean hasChild(List<Menu> list, Menu t)
{
return getChildList(list, t).size() > 0;
}