You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

141 lines
5.1 KiB

package com.yanzhen.controller;
import com.yanzhen.entity.Menu;
import com.yanzhen.entity.User;
import com.yanzhen.service.MenuService;
import com.yanzhen.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//菜单管理的控制器
@RestController
@RequestMapping("/menu")
public class MenuController {
//注入实例
//注入菜单服务类
@Autowired
private MenuService menuService;
//查询菜单信息
@GetMapping("/query")
public Result query(HttpServletRequest request){
//创建菜单列表
List<Menu> menus = new ArrayList<>();
//判断查询请求的属性
//如果是用户属性
if(request.getAttribute("user") != null){
//获取用户信息
User user = (User) request.getAttribute("user");
//根据用户ID查询菜单
menus = menuService.query(user.getId());
}
//如果是学生属性
else if(request.getAttribute("student") != null){
//查询所有学生类型的菜单
menus = menuService.queryByType();
}
//创建菜单
List<Menu> menuList1 = new ArrayList<>();
//找出一级菜单
//遍历所有菜单项
for (Menu menu : menus) {
//判断是否为一级菜单
if(menu.getParentId() == 0){
//添加到一级菜单中
menuList1.add(menu);
}
}
//嵌套循环找出关联设置child属性
//遍历一级菜单
for (Menu parent : menuList1) {
//创建子菜单
List<Menu> child = new ArrayList<>();
//遍历所有菜单项
for (Menu entity : menus) {
//判断当前菜单是否为子菜单
if(parent.getId() == entity.getParentId()){
//添加到子菜单中
child.add(entity);
}
}
//设置一级菜单
parent.setChild(child);
}
//返回结果
return Result.ok(menuList1);
}
//获取tree信息
@GetMapping("/tree")
public Result tree(Integer checked,HttpServletRequest request){
//check查询的时候是否选中状态
//创建已选中菜单ID列表
List<Integer> checkedMenuId = new ArrayList<>();
//判断是否包含checked
if(checked != null){
// 获取用户信息
User user = (User) request.getAttribute("user");
//查询出来自己已经设置过的menuId
checkedMenuId = menuService.queryCheckMenuId(user.getId());
}
//获取菜单
List<Menu> list = menuService.list();
//菜单存入tree
List<Map<String,Object>> menus = new ArrayList<>();
//嵌套循环所有菜单项找出一级菜单
for (Menu menu : list) {
//判断是否为一级菜单
if(menu.getParentId()==0){
Map<String,Object> map = new HashMap<>();
//添加菜单ID
map.put("id",menu.getId());
//添加菜单名称
map.put("name",menu.getTitle());
//标记为父节点
map.put("isParent",true);
map.put("open",true);
//判断是否已选中
if(checked != null){
map.put("checked",checkedMenuId.contains(menu.getId()));
}
//创建子菜单
List<Map<String,Object>> child = new ArrayList<>();
// 遍历所有菜单项
for (Menu menu1 : list) {
//判断当前菜单是否为子菜单
if(menu1.getParentId()!=0 && menu.getId() == menu1.getParentId()){
Map<String,Object> map2 = new HashMap<>();
//添加子菜单ID
map2.put("id",menu1.getId());
//添加子菜单名称
map2.put("name",menu1.getTitle());
//标记为子节点
map2.put("isParent",false);
//判断是否已选中
if(checked != null){
map2.put("checked",checkedMenuId.contains(menu1.getId()));
}
//添加到子菜单中
child.add(map2);
}
}
//将子菜单列表添加到一级菜单中
map.put("children",child);
//将一级菜单添加到结果中
menus.add(map);
}
}
//返回结果
return Result.ok(menus);
}
}