From 047bf398426f3122fa398532fc47183b7bf62b00 Mon Sep 17 00:00:00 2001 From: wangys <3401275564@qq.com> Date: Thu, 9 Oct 2025 11:11:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/xyzh/api/system/menu/MenuService.java | 22 +- .../java/org/xyzh/common/vo/PermissionVO.java | 14 + .../system/controller/MenuController.java | 111 +++ .../controller/PermissionController.java | 61 ++ .../system/controller/RoleController.java | 38 + .../org/xyzh/system/mapper/MenuMapper.java | 26 + .../xyzh/system/mapper/PermissionMapper.java | 4 +- .../org/xyzh/system/mapper/RoleMapper.java | 8 + .../menu/service/impl/SysMenuServiceImpl.java | 57 +- .../role/service/impl/SysRoleServiceImpl.java | 6 +- .../src/main/resources/mapper/MenuMapper.xml | 47 +- .../resources/mapper/PermissionMapper.xml | 11 +- .../src/main/resources/mapper/RoleMapper.xml | 12 +- schoolNewsWeb/src/apis/system/menu.ts | 54 +- schoolNewsWeb/src/apis/system/permission.ts | 55 ++ schoolNewsWeb/src/apis/system/role.ts | 16 + schoolNewsWeb/src/types/permission/index.ts | 8 + .../views/manage/system/MenuManageView.vue | 659 +++++++++++++++++- .../manage/system/PermissionManageView.vue | 376 +++++++++- 19 files changed, 1526 insertions(+), 59 deletions(-) create mode 100644 schoolNewsServ/system/src/main/java/org/xyzh/system/controller/MenuController.java create mode 100644 schoolNewsServ/system/src/main/java/org/xyzh/system/controller/RoleController.java create mode 100644 schoolNewsWeb/src/apis/system/role.ts diff --git a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/menu/MenuService.java b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/menu/MenuService.java index 5d8edf1..d3bcc50 100644 --- a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/menu/MenuService.java +++ b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/menu/MenuService.java @@ -1,10 +1,8 @@ package org.xyzh.api.system.menu; -import java.util.List; - import org.xyzh.common.core.domain.ResultDomain; -import org.xyzh.common.core.page.PageParam; import org.xyzh.common.dto.menu.TbSysMenu; +import org.xyzh.common.dto.menu.TbSysMenuPermission; /** * @description MenuRemoteService.java文件描述 菜单远程服务接口 @@ -23,6 +21,15 @@ public interface MenuService { */ ResultDomain getAllMenus(); + /** + * @description 查询菜单列表 + * @param filter 过滤条件 + * @return ResultDomain 菜单列表 + * @author yslg + * @since 2025-09-28 + */ + ResultDomain getMenuList(TbSysMenu filter); + /** * @description 根据菜单ID查询菜单 * @param menuId 菜单ID @@ -124,5 +131,12 @@ public interface MenuService { */ ResultDomain changeMenuVisibility(String menuId, Boolean visible); - + /** + * @description 查询菜单权限 + * @param menuId 菜单ID + * @return ResultDomain 菜单权限信息 + * @author yslg + * @since 2025-09-28 + */ + ResultDomain getMenuPermission(String menuId); } diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/PermissionVO.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/PermissionVO.java index 90a919c..57bb1e7 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/PermissionVO.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/PermissionVO.java @@ -7,6 +7,7 @@ import java.util.List; import org.xyzh.common.dto.BaseDTO; import org.xyzh.common.dto.menu.TbSysMenu; +import org.xyzh.common.dto.permission.TbSysPermission; public class PermissionVO extends BaseDTO{ @@ -82,6 +83,13 @@ public class PermissionVO extends BaseDTO{ */ private List roles; + /** + * @description 绑定权限 + * @author yslg + * @since 2024-06 + */ + private List permissions; + /** * @description 更新人名称 * @author yslg @@ -177,6 +185,12 @@ public class PermissionVO extends BaseDTO{ this.roles = roles; } + public List getPermissions() { + return permissions; + } + public void setPermissions(List permissions) { + this.permissions = permissions; + } } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/MenuController.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/MenuController.java new file mode 100644 index 0000000..28f6981 --- /dev/null +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/MenuController.java @@ -0,0 +1,111 @@ +package org.xyzh.system.controller; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.xyzh.api.system.menu.MenuService; +import org.xyzh.common.core.domain.ResultDomain; +import org.xyzh.common.dto.menu.TbSysMenu; +import org.xyzh.common.dto.menu.TbSysMenuPermission; + +@RestController +@RequestMapping("/menus") +public class MenuController { + private static final Logger logger = LoggerFactory.getLogger(MenuController.class); + + + @Autowired + private MenuService menuService; + + /** + * @description 查询所有菜单 + * @return ResultDomain 菜单列表 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/all") + public ResultDomain getAllMenus() { + return menuService.getAllMenus(); + } + + /** + * @description 查询菜单 + * @param filter 过滤条件 + * @return ResultDomain 菜单列表 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/list") + public ResultDomain getMenuList(@RequestBody TbSysMenu filter) { + return menuService.getMenuList(filter); + } + + /** + * @description 查询菜单 + * @param menuId 菜单ID + * @return ResultDomain 菜单信息 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/id") + public ResultDomain getMenuById(@RequestBody String menuId) { + return menuService.getMenuById(menuId); + } + + /** + * @description 创建菜单 + * @param menu 菜单信息 + * @return ResultDomain 菜单信息 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/menu") + public ResultDomain createMenu(@RequestBody TbSysMenu menu) { + return menuService.createMenu(menu); + } + + /** + * @description 删除菜单 + * @param menuId 菜单ID + * @return ResultDomain 菜单信息 + * @author yslg + * @since 2025-10-06 + */ + @DeleteMapping("/menu") + public ResultDomain deleteMenu(@RequestBody String menuId) { + return menuService.deleteMenu(menuId); + } + + /** + * @description 更新菜单 + * @param menu 菜单信息 + * @return ResultDomain 菜单信息 + * @author yslg + * @since 2025-10-06 + */ + @PutMapping("/menu") + public ResultDomain updateMenu(@RequestBody TbSysMenu menu) { + return menuService.updateMenu(menu); + } + + + /** + * @description 查询菜单权限 + * @param menuId 菜单ID + * @return ResultDomain 菜单权限信息 + * @author yslg + * @since 2025-10-06 + */ + @PostMapping("/permission") + public ResultDomain getMenuPermission(@RequestBody TbSysMenu menu) { + return menuService.getMenuPermission(menu.getMenuID()); + } + +} diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/PermissionController.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/PermissionController.java index f13d66c..c0d651d 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/PermissionController.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/PermissionController.java @@ -1,5 +1,9 @@ package org.xyzh.system.controller; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,7 +17,11 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.DeleteMapping; import org.xyzh.api.system.permission.PermissionService; import org.xyzh.common.core.domain.ResultDomain; +import org.xyzh.common.dto.menu.TbSysMenu; +import org.xyzh.common.dto.menu.TbSysMenuPermission; import org.xyzh.common.dto.permission.TbSysPermission; +import org.xyzh.common.dto.role.TbSysRole; +import org.xyzh.common.dto.role.TbSysRolePermission; import org.xyzh.common.vo.PermissionVO; @RestController @@ -89,4 +97,57 @@ public class PermissionController { public ResultDomain listPermissionBinding(@RequestBody PermissionVO permission) { return permissionService.listPermissionBinding(permission); } + + /** + * @description 绑定菜单 + * @param permission + * @author yslg + * @ since 2025-10-06 + */ + @PostMapping("/bind/menu") + public ResultDomain bindMenu(@RequestBody PermissionVO permission) { + List menuIds = permission.getMenus().stream().map(TbSysMenu::getMenuID).collect(Collectors.toList()); + List permissionIds = permission.getPermissions().stream().map(TbSysPermission::getPermissionID).collect(Collectors.toList()); + return permissionService.batchBindMenuPermission(menuIds, permissionIds); + } + + /** + * @description 解绑菜单 + * @param permission + * @author yslg + * @ since 2025-10-06 + */ + @PostMapping("/unbind/menu") + public ResultDomain unbindMenu(@RequestBody PermissionVO permission) { + List menuIds = permission.getMenus().stream().map(TbSysMenu::getMenuID).collect(Collectors.toList()); + List permissionIds = permission.getPermissions().stream().map(TbSysPermission::getPermissionID).collect(Collectors.toList()); + return permissionService.batchUnbindMenuPermission(menuIds, permissionIds); + } + + /** + * @description 绑定角色 + * @param permission + * @author yslg + * @ since 2025-10-06 + */ + @PostMapping("/bind/role") + public ResultDomain bindRole(@RequestBody PermissionVO permission) { + List roleIds = permission.getRoles().stream().map(TbSysRole::getRoleID).collect(Collectors.toList()); + List permissionIds = permission.getPermissions().stream().map(TbSysPermission::getPermissionID).collect(Collectors.toList()); + return permissionService.batchBindRolePermission(roleIds, permissionIds); + } + + /** + * @description 解绑角色 + * @param permission + * @author yslg + * @ since 2025-10-06 + */ + @PostMapping("/unbind/role") + public ResultDomain unbindRole(@RequestBody PermissionVO permission) { + List roleIds = permission.getRoles().stream().map(TbSysRole::getRoleID).collect(Collectors.toList()); + List permissionIds = permission.getPermissions().stream().map(TbSysPermission::getPermissionID).collect(Collectors.toList()); + return permissionService.batchUnbindRolePermission(roleIds, permissionIds); + } + } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/RoleController.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/RoleController.java new file mode 100644 index 0000000..6c79fc7 --- /dev/null +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/RoleController.java @@ -0,0 +1,38 @@ +package org.xyzh.system.controller; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.xyzh.api.system.role.RoleService; +import org.xyzh.common.core.domain.ResultDomain; +import org.xyzh.common.dto.role.TbSysRole; + +/** + * @description RoleController.java文件描述 角色控制器 + * @filename RoleController.java + * @author yslg + * @copyright xyzh + * @ since 2025-10-09 + */ +@RestController +@RequestMapping("/roles") +public class RoleController { + private static final Logger logger = LoggerFactory.getLogger(RoleController.class); + + @Autowired + private RoleService roleService; + + /** + * @description 获取所有角色 + * @return 角色列表 + * @author yslg + * @ since 2025-10-09 + */ + @PostMapping("/all") + public ResultDomain all() { + return roleService.getAllRoles(); + } +} diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/MenuMapper.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/MenuMapper.java index 386aa96..d4a14b7 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/MenuMapper.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/MenuMapper.java @@ -17,6 +17,32 @@ import java.util.List; @Mapper public interface MenuMapper extends BaseMapper { + /** + * @description 查询所有菜单 + * @return List 菜单列表 + * @author yslg + * @since 2025-09-28 + */ + List selectAllMenus(); + + /** + * @description 查询菜单列表 + * @param filter 过滤条件 + * @return List 菜单列表 + * @author yslg + * @since 2025-09-28 + */ + List selectMenuList(TbSysMenu filter); + + /** + * @description 查询菜单 + * @param menuId 菜单ID + * @return TbSysMenu 菜单 + * @author yslg + * @since 2025-09-28 + */ + TbSysMenu selectMenuById(String menuId); + /** * @description 根据用户ID查询菜单列表 * @param userId 用户ID diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/PermissionMapper.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/PermissionMapper.java index b9c3ce0..6e03963 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/PermissionMapper.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/PermissionMapper.java @@ -147,7 +147,7 @@ public interface PermissionMapper extends BaseMapper { * @author yslg * @since 2025-10-08 */ - List selectPermissionBindMenu(PermissionVO permission); + List selectPermissionBindMenu(@Param("permission") PermissionVO permission); /** * @description 查询权限绑定角色 @@ -156,5 +156,5 @@ public interface PermissionMapper extends BaseMapper { * @author yslg * @since 2025-10-08 */ - List selectPermissionBindRole(PermissionVO permission); + List selectPermissionBindRole(@Param("permission") PermissionVO permission); } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RoleMapper.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RoleMapper.java index 8b1929a..32cb74f 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RoleMapper.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/mapper/RoleMapper.java @@ -18,6 +18,14 @@ import java.util.List; @Mapper public interface RoleMapper extends BaseMapper { + /** + * @description 查询所有角色 + * @return List 角色列表 + * @author yslg + * @since 2025-10-09 + */ + List selectAllRoles(); + /** * @description 根据用户ID查询角色列表 * @param userId 用户ID diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/menu/service/impl/SysMenuServiceImpl.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/menu/service/impl/SysMenuServiceImpl.java index 7d2642a..38230f9 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/menu/service/impl/SysMenuServiceImpl.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/menu/service/impl/SysMenuServiceImpl.java @@ -1,6 +1,5 @@ package org.xyzh.system.menu.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -8,8 +7,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.xyzh.common.core.domain.ResultDomain; import org.xyzh.common.dto.menu.TbSysMenu; +import org.xyzh.common.dto.menu.TbSysMenuPermission; import org.xyzh.common.utils.IDUtils; import org.xyzh.system.mapper.MenuMapper; +import org.xyzh.system.mapper.MenuPermissionMapper; import org.xyzh.system.menu.service.SysMenuService; import java.util.Date; @@ -30,6 +31,9 @@ public class SysMenuServiceImpl implements SysMenuService { @Autowired private MenuMapper menuMapper; + @Autowired + private MenuPermissionMapper menuPermissionMapper; + @Override public ResultDomain getAllMenus() { ResultDomain resultDomain = new ResultDomain<>(); @@ -37,11 +41,7 @@ public class SysMenuServiceImpl implements SysMenuService { try { logger.info("开始查询所有菜单"); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TbSysMenu::getDeleted, false) - .orderByAsc(TbSysMenu::getCreateTime); - - List menus = menuMapper.selectList(queryWrapper); + List menus = menuMapper.selectAllMenus(); logger.info("查询所有菜单完成,共找到{}个菜单", menus.size()); resultDomain.success("查询成功", menus); @@ -54,6 +54,26 @@ public class SysMenuServiceImpl implements SysMenuService { } } + @Override + public ResultDomain getMenuList(TbSysMenu filter) { + ResultDomain resultDomain = new ResultDomain<>(); + try { + logger.info("开始查询菜单列表:{}", filter); + + List menus = menuMapper.selectMenuList(filter); + + logger.info("查询菜单列表完成,共找到{}个菜单", menus.size()); + resultDomain.success("查询成功", menus); + return resultDomain; + + } catch (Exception e) { + logger.error("查询菜单列表失败:{}", filter, e); + resultDomain.fail("查询菜单失败:" + e.getMessage()); + return resultDomain; + } + + } + @Override public ResultDomain getMenuById(String menuId) { ResultDomain resultDomain = new ResultDomain<>(); @@ -65,11 +85,7 @@ public class SysMenuServiceImpl implements SysMenuService { return resultDomain; } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TbSysMenu::getMenuID, menuId) - .eq(TbSysMenu::getDeleted, false); - - TbSysMenu menu = menuMapper.selectOne(queryWrapper); + TbSysMenu menu = menuMapper.selectMenuById(menuId); if (menu == null) { logger.warn("未找到菜单:{}", menuId); @@ -445,4 +461,23 @@ public class SysMenuServiceImpl implements SysMenuService { return resultDomain; } } + + @Override + public ResultDomain getMenuPermission(String menuId) { + ResultDomain resultDomain = new ResultDomain<>(); + try { + logger.info("开始查询菜单权限:{}", menuId); + List menuPermissions = menuPermissionMapper.selectByMenuId(menuId); + if (menuPermissions.isEmpty()) { + resultDomain.fail("未找到菜单权限"); + return resultDomain; + } + resultDomain.success("查询菜单权限成功", menuPermissions); + return resultDomain; + } catch (Exception e) { + logger.error("查询菜单权限异常:{}", menuId, e); + resultDomain.fail("查询菜单权限失败:" + e.getMessage()); + return resultDomain; + } + } } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/role/service/impl/SysRoleServiceImpl.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/role/service/impl/SysRoleServiceImpl.java index b2f979c..cf2774d 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/role/service/impl/SysRoleServiceImpl.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/role/service/impl/SysRoleServiceImpl.java @@ -39,11 +39,7 @@ public class SysRoleServiceImpl implements SysRoleService { try { logger.info("开始查询所有角色"); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TbSysRole::getDeleted, false) - .orderByAsc(TbSysRole::getCreateTime); - - List roles = roleMapper.selectList(queryWrapper); + List roles = roleMapper.selectAllRoles(); logger.info("查询所有角色完成,共找到{}个角色", roles.size()); resultDomain.success("查询成功", roles); diff --git a/schoolNewsServ/system/src/main/resources/mapper/MenuMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/MenuMapper.xml index dccf34a..24fd784 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/MenuMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/MenuMapper.xml @@ -39,6 +39,47 @@ + + + m.deleted = 0 + + AND m.menu_id = #{menuID} + + + AND m.name LIKE CONCAT('%', #{name}, '%') + + + AND m.type = #{type} + + + + + + + + + + + + + - SELECT * FROM tb_sys_menu WHERE id IN + SELECT * FROM tb_sys_menu WHERE menu_id IN #{menuId} diff --git a/schoolNewsServ/system/src/main/resources/mapper/PermissionMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/PermissionMapper.xml index 1695a62..9b88b87 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/PermissionMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/PermissionMapper.xml @@ -37,7 +37,6 @@ - @@ -268,12 +267,12 @@ @@ -282,10 +281,10 @@ SELECT tsr.id, tsr.role_id, tsr.name, tsr.description FROM tb_sys_role tsr - INNER JOIN tb_sys_role_permission tsrp ON tsrp.role_id = tsr.id + INNER JOIN tb_sys_role_permission tsrp ON tsrp.role_id = tsr.role_id WHERE tsr.deleted = 0 AND tsrp.deleted = 0 - AND tsrp.permission_id = #{permission.id} + AND tsrp.permission_id = #{permission.permissionID} ORDER BY tsr.role_id, tsr.create_time ASC diff --git a/schoolNewsServ/system/src/main/resources/mapper/RoleMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/RoleMapper.xml index 2fe0b4e..cef3b20 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/RoleMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/RoleMapper.xml @@ -39,7 +39,7 @@ - id, dept_id, role_id, name, description, creator, updater, + id, role_id, name, description, creator, updater, create_time, update_time, delete_time, deleted @@ -70,6 +70,16 @@ + + + +