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.

98 lines
5.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<Menu> 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<Menu> menuList1 = new ArrayList<>(); // 创建一级菜单列表
//找出一级菜单
for (Menu menu : menus) { // 遍历所有菜单项
if(menu.getParentId() == 0){ // 如果父ID为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); // 返回包含一级菜单及其子菜单的结果
}
@GetMapping("/tree") // 处理对 "/menu/tree" 的 GET 请求
public Result tree(Integer checked,HttpServletRequest request){
//check查询的时候是否选中状态
List<Integer> checkedMenuId = new ArrayList<>(); // 创建已选中菜单ID列表
if(checked != null){ // 如果请求参数中包含 "checked"
User user = (User) request.getAttribute("user"); // 获取用户信息
//查询出来自己已经设置过得menuId
checkedMenuId = menuService.queryCheckMenuId(user.getId()); // 查询用户已设置的菜单ID
}
List<Menu> list = menuService.list(); // 获取所有菜单列表
List<Map<String,Object>> menus = new ArrayList<>(); // 创建用于存储树形结构的菜单列表
for (Menu menu : list) { // 遍历所有菜单项
if(menu.getParentId()==0){ // 如果父ID为0则为一级菜单
Map<String,Object> 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<Map<String,Object>> child = new ArrayList<>(); // 创建子菜单列表
for (Menu menu1 : list) { // 遍历所有菜单项
if(menu1.getParentId()!=0 && menu.getId() == menu1.getParentId()){ // 如果当前菜单是某个一级菜单的子菜单
Map<String,Object> 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); // 返回包含树形结构菜单的结果
}
}