diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/MenuServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/MenuServiceApi.java index 7dffb3aed..37264b396 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/MenuServiceApi.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/MenuServiceApi.java @@ -136,4 +136,15 @@ public interface MenuServiceApi { */ List getTotalMenuButtonIdList(AntdvFrontTypeEnum antdvFrontTypeEnum); + /** + * 获取当前用户拥有的菜单类型 + *

+ * 判断是拥有前台菜单,还是后台菜单,还是都有 + * + * @param menuIds 用户所拥有的的所有菜单集合 + * @author fengshuonan + * @date 2022/10/13 21:38 + */ + AntdvFrontTypeEnum getUserMenuType(List menuIds); + } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java index 7c86a291a..0cbfdfe5d 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java @@ -547,6 +547,35 @@ public class SysMenuServiceImpl extends ServiceImpl impl return menuButtonDTOS; } + @Override + public AntdvFrontTypeEnum getUserMenuType(List menuIds) { + + // 用户没有菜单,默认只返回前台菜单类型 + if (ObjectUtil.isEmpty(menuIds)) { + return AntdvFrontTypeEnum.FRONT; + } + + // 判断菜单中有多少种类的菜单 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(SysMenu::getAntdvFrontType); + queryWrapper.in(SysMenu::getMenuId, menuIds); + List sysMenuList = this.list(queryWrapper); + + // 获取各类菜单的数量 + long frontTypes = sysMenuList.stream().filter(sysMenu -> AntdvFrontTypeEnum.FRONT.getCode().equals(sysMenu.getAntdvFrontType())).count(); + long backendTypes = sysMenuList.stream().filter(sysMenu -> AntdvFrontTypeEnum.BACKEND.getCode().equals(sysMenu.getAntdvFrontType())).count(); + + if (frontTypes > 0 && backendTypes > 0) { + return AntdvFrontTypeEnum.TOTAL_SHOW; + } else if (frontTypes > 0) { + return AntdvFrontTypeEnum.FRONT; + } else if (backendTypes > 0) { + return AntdvFrontTypeEnum.BACKEND; + } + + return AntdvFrontTypeEnum.FRONT; + } + @Override public List getCurrentUserMenus(List appCodeList, Boolean layuiVisibleFlag, Integer antdvFrontType) {