From 7ea1d52b4e654ffebfe2c8538f360cc296b07ae1 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Mon, 5 Aug 2024 11:42:04 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/supervision/config/CorsConfig.java | 39 +++++++++-------- .../police/controller/MenuController.java | 4 +- .../com/supervision/police/dto/MenuDTO.java | 38 ++++++++++++++++ .../police/service/SystemMenuService.java | 14 ++++++ .../service/impl/SystemMenuServiceImpl.java | 43 ++++++++++++++++--- .../service/impl/SystemUserServiceImpl.java | 13 ++++-- 6 files changed, 121 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/supervision/config/CorsConfig.java b/src/main/java/com/supervision/config/CorsConfig.java index 7b1ba16..30d4016 100644 --- a/src/main/java/com/supervision/config/CorsConfig.java +++ b/src/main/java/com/supervision/config/CorsConfig.java @@ -1,9 +1,10 @@ package com.supervision.config; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; /** * 设置跨域 @@ -13,23 +14,23 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; * @since JDK1.8 */ @Configuration -@EnableWebMvc -public class CorsConfig implements WebMvcConfigurer { +public class CorsConfig { - @Override - public void addCorsMappings(CorsRegistry registry) { - // 设置允许跨域的路径 - registry.addMapping("/**") - // 设置允许跨域请求的域名 - .allowedOriginPatterns("*") - // 是否允许整数 不再默认开启 - .allowCredentials(true) - // 设置允许的方法 - .allowedMethods("*") - // 允许跨域的请求头 - .allowedHeaders("*") - // 跨域允许时间 - .maxAge(3600); + @Bean + public CorsFilter corsFilter() { + CorsConfiguration config = new CorsConfiguration(); + // 允许所有域名进行跨域调用 + config.addAllowedOriginPattern("*"); + // 允许跨域发送cookie + config.setAllowCredentials(true); + // 放行全部原始头信息 + config.addAllowedHeader("*"); + // 允许所有请求方法跨域调用 + config.addAllowedMethod("*"); + config.setMaxAge(3600L); + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); + return new CorsFilter(source); } } \ No newline at end of file diff --git a/src/main/java/com/supervision/police/controller/MenuController.java b/src/main/java/com/supervision/police/controller/MenuController.java index 3f07967..7acc0df 100644 --- a/src/main/java/com/supervision/police/controller/MenuController.java +++ b/src/main/java/com/supervision/police/controller/MenuController.java @@ -23,8 +23,8 @@ public class MenuController { private final SystemMenuService menuService; @Operation(summary = "查看用户信息列表") @GetMapping("/listMenu") - public R> listMenu() { - List menuDTOS = menuService.listMenu(); + public R> treeMenuList() { + List menuDTOS = menuService.treeMenuList(); return R.ok(menuDTOS); } } diff --git a/src/main/java/com/supervision/police/dto/MenuDTO.java b/src/main/java/com/supervision/police/dto/MenuDTO.java index 8e2f29c..6eb3df1 100644 --- a/src/main/java/com/supervision/police/dto/MenuDTO.java +++ b/src/main/java/com/supervision/police/dto/MenuDTO.java @@ -1,9 +1,11 @@ package com.supervision.police.dto; +import cn.hutool.core.collection.CollUtil; import com.supervision.police.domain.SystemMenu; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -31,6 +33,10 @@ public class MenuDTO { public MenuDTO() { } + public MenuDTO(String id) { + this.id = id; + } + public MenuDTO(SystemMenu systemMenu) { if (Objects.isNull(systemMenu)){ return; @@ -41,4 +47,36 @@ public class MenuDTO { this.labelType = systemMenu.getLabelType(); this.parentId = systemMenu.getParentId(); } + + public List floatMenu(){ + List menuDTOS = new ArrayList<>(); + menuDTOS.add(this); + if (CollUtil.isNotEmpty(this.children)){ + for (MenuDTO child : this.children) { + menuDTOS.addAll(child.floatMenu()); + } + } + return menuDTOS; + } + + public List seekMenu(String menuId) { + List menuDTOS = new ArrayList<>(); + if (this.getId().equals(menuId)) { + menuDTOS.add(this); + return menuDTOS; + } + + if (CollUtil.isNotEmpty(this.children)) { + for (MenuDTO child : this.children) { + List seekList = child.seekMenu(menuId); + if (!seekList.isEmpty()) { + menuDTOS.add(this); + menuDTOS.addAll(seekList); + return menuDTOS; + } + } + } + return menuDTOS; + } + } diff --git a/src/main/java/com/supervision/police/service/SystemMenuService.java b/src/main/java/com/supervision/police/service/SystemMenuService.java index 0208972..4da1eaf 100644 --- a/src/main/java/com/supervision/police/service/SystemMenuService.java +++ b/src/main/java/com/supervision/police/service/SystemMenuService.java @@ -13,6 +13,20 @@ import java.util.List; */ public interface SystemMenuService extends IService { + + List treeMenuList(); + + List treeMenuList(List menuDTOList); + List listMenu(); + + /** + * 根据选中的菜单id过滤菜单 + * @param menuDTOList 菜单列表 + * @param selectMenuIdList 选中的菜单id列表 + * @return + */ + List filterMenuBySelect(List menuDTOList, List selectMenuIdList); + } diff --git a/src/main/java/com/supervision/police/service/impl/SystemMenuServiceImpl.java b/src/main/java/com/supervision/police/service/impl/SystemMenuServiceImpl.java index 58bd6fe..56c72a0 100644 --- a/src/main/java/com/supervision/police/service/impl/SystemMenuServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/SystemMenuServiceImpl.java @@ -9,8 +9,7 @@ import com.supervision.police.service.SystemMenuService; import com.supervision.police.mapper.SystemMenuMapper; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; +import java.util.*; /** * @author Administrator @@ -22,21 +21,53 @@ public class SystemMenuServiceImpl extends ServiceImpl listMenu() { + public List treeMenuList() { + List menuDTOS = listMenu(); + return treeMenuList(menuDTOS); + } - List systemMenuList = super.list(); - if (CollUtil.isEmpty(systemMenuList)){ + @Override + public List treeMenuList(List menuDTOList) { + + if (CollUtil.isEmpty(menuDTOList)){ return new ArrayList<>(); } - List menuDTOList = systemMenuList.stream().map(MenuDTO::new).toList(); for (MenuDTO menuDTO : menuDTOList) { List children = menuDTOList.stream() .filter(item -> menuDTO.getId().equals(item.getParentId())).toList(); menuDTO.setChildren(children); } + return menuDTOList.stream().filter(item -> StrUtil.isEmpty(item.getParentId())).toList(); } + + @Override + public List listMenu() { + return super.list().stream().map(MenuDTO::new).toList(); + } + + @Override + public List filterMenuBySelect(List menuDTOList, List selectMenuIdList) { + if (CollUtil.isEmpty(menuDTOList) || CollUtil.isEmpty(selectMenuIdList)){ + return new ArrayList<>(1); + } + + List seekMenuDTOList = new ArrayList<>(); + for (String menuId : selectMenuIdList) { + for (MenuDTO menuDTO : menuDTOList) { + List menuDTOS = menuDTO.seekMenu(menuId); + if (CollUtil.isNotEmpty(menuDTOS)){ + seekMenuDTOList.addAll(menuDTOS); + } + } + } + + return seekMenuDTOList; + } + + + } diff --git a/src/main/java/com/supervision/police/service/impl/SystemUserServiceImpl.java b/src/main/java/com/supervision/police/service/impl/SystemUserServiceImpl.java index 53102f7..ac46b65 100644 --- a/src/main/java/com/supervision/police/service/impl/SystemUserServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/SystemUserServiceImpl.java @@ -2,15 +2,15 @@ package com.supervision.police.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.police.domain.SystemUser; -import com.supervision.police.domain.SystemUserRoleRelation; +import com.supervision.police.dto.MenuDTO; import com.supervision.police.dto.user.*; +import com.supervision.police.service.SystemMenuService; import com.supervision.police.service.SystemUserRoleRelationService; import com.supervision.police.service.SystemUserService; import com.supervision.police.mapper.SystemUserMapper; @@ -39,6 +39,8 @@ public class SystemUserServiceImpl extends ServiceImpl roleMenuDTOS = userRoleRelationManageService.listUserRoleMenu(systemUser.getId()); + if (CollUtil.isNotEmpty(roleMenuDTOS)){ + List menuDTOS = menuService.treeMenuList(); + List menuBySelect = menuService.filterMenuBySelect(menuDTOS,roleMenuDTOS.stream().map(RoleMenuDTO::getMenuId).toList()); + loginResVO.setPermission(menuBySelect.stream().map(MenuDTO::getLabelCode).toList()); + } // 设置用户token信息 loginResVO.setToken(new UserInfoDTO(systemUser));