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<List<MenuDTO>> listMenu() { - List<MenuDTO> menuDTOS = menuService.listMenu(); + public R<List<MenuDTO>> treeMenuList() { + List<MenuDTO> 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<MenuDTO> floatMenu(){ + List<MenuDTO> menuDTOS = new ArrayList<>(); + menuDTOS.add(this); + if (CollUtil.isNotEmpty(this.children)){ + for (MenuDTO child : this.children) { + menuDTOS.addAll(child.floatMenu()); + } + } + return menuDTOS; + } + + public List<MenuDTO> seekMenu(String menuId) { + List<MenuDTO> menuDTOS = new ArrayList<>(); + if (this.getId().equals(menuId)) { + menuDTOS.add(this); + return menuDTOS; + } + + if (CollUtil.isNotEmpty(this.children)) { + for (MenuDTO child : this.children) { + List<MenuDTO> 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<SystemMenu> { + + List<MenuDTO> treeMenuList(); + + List<MenuDTO> treeMenuList(List<MenuDTO> menuDTOList); + List<MenuDTO> listMenu(); + + /** + * 根据选中的菜单id过滤菜单 + * @param menuDTOList 菜单列表 + * @param selectMenuIdList 选中的菜单id列表 + * @return + */ + List<MenuDTO> filterMenuBySelect(List<MenuDTO> menuDTOList, List<String> 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<SystemMenuMapper, SystemM implements SystemMenuService{ @Override - public List<MenuDTO> listMenu() { + public List<MenuDTO> treeMenuList() { + List<MenuDTO> menuDTOS = listMenu(); + return treeMenuList(menuDTOS); + } - List<SystemMenu> systemMenuList = super.list(); - if (CollUtil.isEmpty(systemMenuList)){ + @Override + public List<MenuDTO> treeMenuList(List<MenuDTO> menuDTOList) { + + if (CollUtil.isEmpty(menuDTOList)){ return new ArrayList<>(); } - List<MenuDTO> menuDTOList = systemMenuList.stream().map(MenuDTO::new).toList(); for (MenuDTO menuDTO : menuDTOList) { List<MenuDTO> 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<MenuDTO> listMenu() { + return super.list().stream().map(MenuDTO::new).toList(); + } + + @Override + public List<MenuDTO> filterMenuBySelect(List<MenuDTO> menuDTOList, List<String> selectMenuIdList) { + if (CollUtil.isEmpty(menuDTOList) || CollUtil.isEmpty(selectMenuIdList)){ + return new ArrayList<>(1); + } + + List<MenuDTO> seekMenuDTOList = new ArrayList<>(); + for (String menuId : selectMenuIdList) { + for (MenuDTO menuDTO : menuDTOList) { + List<MenuDTO> 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<SystemUserMapper, SystemU private final SystemUserRoleRelationService userRoleRelationManageService; + private final SystemMenuService menuService; + @Override public LoginResVO login(LoginReqVO reqVO) { @@ -55,7 +57,12 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU loginResVO.setRoleList(userRoleRelationManageService.listUserRoleByUserIdList(CollUtil.newArrayList(systemUser.getId()))); // 设置用户权限信息 - loginResVO.roleMenuDTOSetPermission(userRoleRelationManageService.listUserRoleMenu(systemUser.getId())); + List<RoleMenuDTO> roleMenuDTOS = userRoleRelationManageService.listUserRoleMenu(systemUser.getId()); + if (CollUtil.isNotEmpty(roleMenuDTOS)){ + List<MenuDTO> menuDTOS = menuService.treeMenuList(); + List<MenuDTO> menuBySelect = menuService.filterMenuBySelect(menuDTOS,roleMenuDTOS.stream().map(RoleMenuDTO::getMenuId).toList()); + loginResVO.setPermission(menuBySelect.stream().map(MenuDTO::getLabelCode).toList()); + } // 设置用户token信息 loginResVO.setToken(new UserInfoDTO(systemUser));