feat(system): 添加菜单管理功能- 在 MenuService 中新增创建、更新和删除菜单的方法
- 实现 MenuServiceImpl 类,添加具体的操作逻辑 - 新增 MenuController 控制器,提供菜单管理的 API 接口 - 创建 MenuDto 数据传输对象,用于菜单信息的传递 - 添加 MenuMapper 映射接口,实现菜单数据的转换 - 移除 UserController 中的菜单相关代码,改为在 MenuController 中统一管理
This commit is contained in:
parent
91d99c7f6d
commit
6bb8e7cefa
@ -0,0 +1,63 @@
|
|||||||
|
package com.zsc.edu.gateway.modules.system.controller;
|
||||||
|
|
||||||
|
import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
|
||||||
|
import com.zsc.edu.gateway.modules.system.dto.MenuDto;
|
||||||
|
import com.zsc.edu.gateway.modules.system.entity.Menu;
|
||||||
|
import com.zsc.edu.gateway.modules.system.service.MenuService;
|
||||||
|
import com.zsc.edu.gateway.modules.system.utils.TreeUtil;
|
||||||
|
import com.zsc.edu.gateway.modules.system.vo.MenuVo;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zhuang
|
||||||
|
*/
|
||||||
|
@AllArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/rest/menu")
|
||||||
|
public class MenuController {
|
||||||
|
|
||||||
|
private final MenuService service;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单树
|
||||||
|
*/
|
||||||
|
@GetMapping("/menu")
|
||||||
|
public List<MenuVo> menu(@AuthenticationPrincipal UserDetailsImpl userDetails) {
|
||||||
|
List<MenuVo> list = service.selectByUserId(userDetails.getId(), Menu.Type.PAGE).stream().map(MenuVo::new).toList();
|
||||||
|
return TreeUtil.makeTree(
|
||||||
|
list,
|
||||||
|
x -> x.getPid() == null,
|
||||||
|
(x, y) -> x.getId().equals(y.getPid()),
|
||||||
|
MenuVo::setChildren
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新建菜单
|
||||||
|
*/
|
||||||
|
@PostMapping("")
|
||||||
|
public Menu create(MenuDto dto) {
|
||||||
|
return service.create(dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新菜单
|
||||||
|
*/
|
||||||
|
@PatchMapping("")
|
||||||
|
public Menu update(MenuDto dto, Long id) {
|
||||||
|
return service.update(dto, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除菜单
|
||||||
|
*/
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public Boolean delete(@PathVariable Long id) {
|
||||||
|
return service.delete(id);
|
||||||
|
}
|
||||||
|
}
|
@ -190,19 +190,6 @@ public class UserController {
|
|||||||
return service.getById(id);
|
return service.getById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取MENU
|
|
||||||
* */
|
|
||||||
@GetMapping("/menu")
|
|
||||||
public List<MenuVo> menu(@AuthenticationPrincipal UserDetailsImpl userDetails) {
|
|
||||||
List<MenuVo> list = menuService.selectByUserId(userDetails.getId(), Menu.Type.PAGE).stream().map(MenuVo::new).toList();
|
|
||||||
return TreeUtil.makeTree(
|
|
||||||
list,
|
|
||||||
x -> x.getPid() == null,
|
|
||||||
(x, y) -> x.getId().equals(y.getPid()),
|
|
||||||
MenuVo::setChildren
|
|
||||||
);
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* 发送邮件
|
* 发送邮件
|
||||||
* */
|
* */
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
package com.zsc.edu.gateway.modules.system.dto;
|
||||||
|
|
||||||
|
import com.zsc.edu.gateway.modules.system.entity.Menu;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zhuang
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class MenuDto {
|
||||||
|
/**
|
||||||
|
* 子部门ID
|
||||||
|
*/
|
||||||
|
private Long pid;
|
||||||
|
/**
|
||||||
|
* 菜单类型
|
||||||
|
*/
|
||||||
|
private Menu.Type type;
|
||||||
|
/**
|
||||||
|
* 名称
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
/**
|
||||||
|
* 路径
|
||||||
|
*/
|
||||||
|
private String path;
|
||||||
|
/**
|
||||||
|
* 应用区域
|
||||||
|
*/
|
||||||
|
private String locale;
|
||||||
|
/**
|
||||||
|
* 标注
|
||||||
|
*/
|
||||||
|
private String icon;
|
||||||
|
/**
|
||||||
|
* 是否需要认证
|
||||||
|
*/
|
||||||
|
private Boolean requiresAuth;
|
||||||
|
/**
|
||||||
|
* 是否隐藏
|
||||||
|
*/
|
||||||
|
private Boolean hideInMenu;
|
||||||
|
/**
|
||||||
|
* 菜单排序
|
||||||
|
*/
|
||||||
|
private Integer menuOrder;
|
||||||
|
/**
|
||||||
|
* 权限
|
||||||
|
*/
|
||||||
|
private String permissions;
|
||||||
|
/**
|
||||||
|
* 权限标识
|
||||||
|
*/
|
||||||
|
private String authority = "";
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.zsc.edu.gateway.modules.system.mapper;
|
||||||
|
|
||||||
|
import com.zsc.edu.gateway.common.mapstruct.BaseMapper;
|
||||||
|
import com.zsc.edu.gateway.modules.system.dto.MenuDto;
|
||||||
|
import com.zsc.edu.gateway.modules.system.entity.Menu;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.MappingConstants;
|
||||||
|
import org.mapstruct.ReportingPolicy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zhuang
|
||||||
|
*/
|
||||||
|
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
|
||||||
|
public interface MenuMapper extends BaseMapper<MenuDto, Menu> {
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package com.zsc.edu.gateway.modules.system.service;
|
package com.zsc.edu.gateway.modules.system.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.zsc.edu.gateway.modules.system.dto.MenuDto;
|
||||||
import com.zsc.edu.gateway.modules.system.entity.Menu;
|
import com.zsc.edu.gateway.modules.system.entity.Menu;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -13,4 +14,10 @@ public interface MenuService extends IService<Menu> {
|
|||||||
List<Menu> selectByRoleId(Long roleId);
|
List<Menu> selectByRoleId(Long roleId);
|
||||||
|
|
||||||
List<Menu> selectByUserId(Long userId, Menu.Type type);
|
List<Menu> selectByUserId(Long userId, Menu.Type type);
|
||||||
|
|
||||||
|
Menu create(MenuDto dto);
|
||||||
|
|
||||||
|
Menu update(MenuDto dto, Long id);
|
||||||
|
|
||||||
|
Boolean delete(Long id);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
package com.zsc.edu.gateway.modules.system.service.impl;
|
package com.zsc.edu.gateway.modules.system.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.zsc.edu.gateway.exception.ConstraintException;
|
||||||
|
import com.zsc.edu.gateway.modules.system.dto.MenuDto;
|
||||||
import com.zsc.edu.gateway.modules.system.entity.Menu;
|
import com.zsc.edu.gateway.modules.system.entity.Menu;
|
||||||
|
import com.zsc.edu.gateway.modules.system.entity.RoleMenu;
|
||||||
|
import com.zsc.edu.gateway.modules.system.mapper.MenuMapper;
|
||||||
import com.zsc.edu.gateway.modules.system.repo.MenuRepository;
|
import com.zsc.edu.gateway.modules.system.repo.MenuRepository;
|
||||||
|
import com.zsc.edu.gateway.modules.system.repo.RoleMenuRepository;
|
||||||
import com.zsc.edu.gateway.modules.system.service.MenuService;
|
import com.zsc.edu.gateway.modules.system.service.MenuService;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -15,6 +21,8 @@ import java.util.List;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Service
|
@Service
|
||||||
public class MenuServiceImpl extends ServiceImpl<MenuRepository, Menu> implements MenuService {
|
public class MenuServiceImpl extends ServiceImpl<MenuRepository, Menu> implements MenuService {
|
||||||
|
private MenuMapper mapper;
|
||||||
|
private RoleMenuRepository roleMenuRepository;
|
||||||
@Override
|
@Override
|
||||||
public List<Menu> selectByRoleId(Long roleId) {
|
public List<Menu> selectByRoleId(Long roleId) {
|
||||||
return baseMapper.selectByRoleId(roleId);
|
return baseMapper.selectByRoleId(roleId);
|
||||||
@ -24,4 +32,29 @@ public class MenuServiceImpl extends ServiceImpl<MenuRepository, Menu> implement
|
|||||||
public List<Menu> selectByUserId(Long userId, Menu.Type type) {
|
public List<Menu> selectByUserId(Long userId, Menu.Type type) {
|
||||||
return baseMapper.selectByUserId(userId, type);
|
return baseMapper.selectByUserId(userId, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Menu create(MenuDto dto) {
|
||||||
|
Menu menu = mapper.toEntity(dto);
|
||||||
|
baseMapper.insert(menu);
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Menu update(MenuDto dto, Long id) {
|
||||||
|
Menu menu = baseMapper.selectById(id);
|
||||||
|
if (menu == null) {
|
||||||
|
throw new ConstraintException("菜单不存在!请检查输入ID是否正确!");
|
||||||
|
}
|
||||||
|
mapper.convert(dto, menu);
|
||||||
|
baseMapper.updateById(menu);
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean delete(Long id) {
|
||||||
|
LambdaQueryWrapper<RoleMenu> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
roleMenuRepository.delete(queryWrapper.eq(RoleMenu::getMenuId, id));
|
||||||
|
return removeById(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user