|
|
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); // 返回包含树形结构菜单的结果
|
|
|
}
|
|
|
|
|
|
}
|