/* * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. * * https://www.mall4j.com/ * * 未经允许,不可做商业用途! * * 版权所有,侵权必究! */ package com.yami.trading.sys.controller; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import com.yami.trading.common.annotation.SysLog; import com.yami.trading.common.exception.YamiShopBindException; import com.yami.trading.security.common.util.SecurityUtils; import com.yami.trading.sys.constant.Constant; import com.yami.trading.sys.constant.MenuType; import com.yami.trading.sys.model.SysMenu; import com.yami.trading.sys.service.SysMenuService; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; import java.util.Map; import java.util.Objects; /** * 系统菜单 * @author lgh */ @RestController @RequestMapping("/sys/menu") @AllArgsConstructor public class SysMenuController{ @Autowired SysMenuService sysMenuService; @GetMapping("/nav") @ApiOperation(value="获取用户所拥有的菜单和权限", notes="通过登陆用户的userId获取用户所拥有的菜单和权限") public ResponseEntity> nav(){ List menuList = sysMenuService.listMenuByUserId(SecurityUtils.getSysUser().getUserId()); return ResponseEntity.ok(MapUtil.builder().put("menuList", menuList).put("authorities", SecurityUtils.getSysUser().getAuthorities()).build()); } /** * 获取菜单页面的表 * @return */ @GetMapping("/table") public ResponseEntity> table(){ List sysMenuList = sysMenuService.listMenuAndBtn(); return ResponseEntity.ok(sysMenuList); } /** * 所有菜单列表(用于新建、修改角色时 获取菜单的信息) */ @GetMapping("/list") @ApiOperation(value="获取用户所拥有的菜单(不包括按钮)", notes="通过登陆用户的userId获取用户所拥有的菜单和权限") public ResponseEntity> list(){ List sysMenuList= sysMenuService.listSimpleMenuNoButton(); return ResponseEntity.ok(sysMenuList); } /** * 选择菜单 */ @GetMapping("/listRootMenu") public ResponseEntity> listRootMenu(){ //查询列表数据 List menuList = sysMenuService.listRootMenu(); return ResponseEntity.ok(menuList); } /** * 选择子菜单 */ @GetMapping("/listChildrenMenu") public ResponseEntity> listChildrenMenu(Long parentId){ //查询列表数据 List menuList = sysMenuService.listChildrenMenuByParentId(parentId); return ResponseEntity.ok(menuList); } /** * 菜单信息 */ @GetMapping("/info/{menuId}") @PreAuthorize("@pms.hasPermission('sys:menu:info')") public ResponseEntity info(@PathVariable("menuId") Long menuId){ SysMenu menu = sysMenuService.getById(menuId); return ResponseEntity.ok(menu); } /** * 保存 */ @SysLog("保存菜单") @PostMapping @PreAuthorize("@pms.hasPermission('sys:menu:save')") public ResponseEntity save(@Valid @RequestBody SysMenu menu){ //数据校验 verifyForm(menu); sysMenuService.save(menu); return ResponseEntity.ok().build(); } /** * 修改 */ @SysLog("修改菜单") @PutMapping @PreAuthorize("@pms.hasPermission('sys:menu:update')") public ResponseEntity update(@Valid @RequestBody SysMenu menu){ //数据校验 verifyForm(menu); if(menu.getType() == MenuType.MENU.getValue()){ if(StrUtil.isBlank(menu.getUrl())){ return ResponseEntity.badRequest().body("菜单URL不能为空"); } } sysMenuService.updateById(menu); return ResponseEntity.ok().build(); } /** * 删除 */ @SysLog("删除菜单") @DeleteMapping("/{menuId}") @PreAuthorize("@pms.hasPermission('sys:menu:delete')") public ResponseEntity delete(@PathVariable Long menuId){ if(menuId <= Constant.SYS_MENU_MAX_ID){ return ResponseEntity.badRequest().body("系统菜单,不能删除"); } //判断是否有子菜单或按钮 List menuList = sysMenuService.listChildrenMenuByParentId(menuId); if(menuList.size() > 0){ return ResponseEntity.badRequest().body("请先删除子菜单或按钮"); } sysMenuService.deleteMenuAndRoleMenu(menuId); return ResponseEntity.ok().build(); } /** * 验证参数是否正确 */ private void verifyForm(SysMenu menu){ if(menu.getType() == MenuType.MENU.getValue()){ if(StrUtil.isBlank(menu.getUrl())){ throw new YamiShopBindException("菜单URL不能为空"); } } if(Objects.equals(menu.getMenuId(), menu.getParentId())){ throw new YamiShopBindException("自己不能是自己的上级"); } //上级菜单类型 int parentType = MenuType.CATALOG.getValue(); if(menu.getParentId() != 0){ SysMenu parentMenu = sysMenuService.getById(menu.getParentId()); parentType = parentMenu.getType(); } //目录、菜单 if(menu.getType() == MenuType.CATALOG.getValue() || menu.getType() == MenuType.MENU.getValue()){ if(parentType != MenuType.CATALOG.getValue()){ throw new YamiShopBindException("上级菜单只能为目录类型"); } return ; } //按钮 if(menu.getType() == MenuType.BUTTON.getValue()){ if(parentType != MenuType.MENU.getValue()){ throw new YamiShopBindException("上级菜单只能为菜单类型"); } } } }