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
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);
|
|
}
|
|
|
|
}
|