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 // 声明这是一个控制器,并且返回的数据直接写入 HTTP 响应体中,而不是解析为跳转路径。 @RequestMapping("/menu") // 设置请求的根路径为 "/menu" public class MenuController { @Autowired // 自动注入 MenuService 对象 private MenuService菜单 menuService; @GetMapping("/query") // 处理对 "/menu/query" 的 GET 请求 public Result query(HttpServletRequest request){ List menus = new ArrayList<>(); // 创建一个空的菜单列表 if(request.getAttribute("user") != null){ // 如果请求中有 "user" 属性 User user = (User) request.getAttribute("user"); // 获取用户信息 menus = menuService.query(user.getId()); // 根据用户ID查询菜单 }else if(request.getAttribute("student") != null){ // 如果请求中有 "student" 属性 menus = menuService.queryByType(); // 查询所有学生类型的菜单 } List menuList1 = new ArrayList<>(); // 创建一级菜单列表 //找出一级菜单 for (Menu menu : menus) { // 遍历所有菜单项 if(menu.getParentId() == 0){ // 如果父ID为0,则为一级菜单 menuList1.add(menu); // 添加到一级菜单列表中 } } //嵌套循环找出关联设置child属性 for (Menu parent : menuList1) { // 遍历一级菜单 List child = new ArrayList<>(); // 创建子菜单列表 for (Menu entity : menus) { // 遍历所有菜单项 if(parent.getId() == entity.getParentId()){ // 如果当前菜单是某个一级菜单的子菜单 child.add(entity); // 添加到子菜单列表中 } } parent.setChild(child); // 设置一级菜单的子菜单列表 } return Result.ok(menuList1); // 返回包含一级菜单及其子菜单的结果 } @GetMapping("/tree") // 处理对 "/menu/tree" 的 GET 请求 public Result tree(Integer checked,HttpServletRequest request){ //check查询的时候是否选中状态 List checkedMenuId = new ArrayList<>(); // 创建已选中菜单ID列表 if(checked != null){ // 如果请求参数中包含 "checked" User user = (User) request.getAttribute("user"); // 获取用户信息 //查询出来自己已经设置过得menuId checkedMenuId = menuService.queryCheckMenuId(user.getId()); // 查询用户已设置的菜单ID } List list = menuService.list(); // 获取所有菜单列表 List> menus = new ArrayList<>(); // 创建用于存储树形结构的菜单列表 for (Menu menu : list) { // 遍历所有菜单项 if(menu.getParentId()==0){ // 如果父ID为0,则为一级菜单 Map map = new HashMap<>(); // 创建存储一级菜单信息的映射 map.put("id",menu.getId()); // 添加菜单ID map.put("name",menu.getTitle()); // 添加菜单名称 map.put("isParent",true); // 标记为父节点 map.put("open",true); // 默认展开 if(checked != null){ // 如果存在已选中的菜单ID map.put("checked",checkedMenuId.contains(menu.getId())); // 设置是否选中 } List> child = new ArrayList<>(); // 创建子菜单列表 for (Menu menu1 : list) { // 遍历所有菜单项 if(menu1.getParentId()!=0 && menu.getId() == menu1.getParentId()){ // 如果当前菜单是某个一级菜单的子菜单 Map map2 = new HashMap<>(); // 创建存储子菜单信息的映射 map2.put("id",menu1.getId()); // 添加子菜单ID map2.put("name",menu1.getTitle()); // 添加子菜单名称 map2.put("isParent",false); // 标记为子节点 if(checked != null){ // 如果存在已选中的菜单ID map2.put("checked",checkedMenuId.contains(menu1.getId())); // 设置是否选中 } child.add(map2); // 添加到子菜单列表中 } } map.put("children",child); // 将子菜单列表添加到一级菜单的映射中 menus.add(map); // 将一级菜单的映射添加到结果列表中 } } return Result.ok(menus); // 返回包含树形结构菜单的结果 } }