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 29f379d54..10465d09b 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 @@ -24,6 +24,8 @@ */ package cn.stylefeng.roses.kernel.system.api; +import java.util.List; + /** * 菜单api * @@ -42,4 +44,12 @@ public interface MenuServiceApi { */ boolean hasMenu(String appCode); + /** + * 获取当前用户所拥有菜单对应的appCode列表 + * + * @author fengshuonan + * @date 2021/4/21 15:40 + */ + List getUserAppCodeList(); + } diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuRequest.java index 2ece1acdb..b2f74bd5c 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuRequest.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuRequest.java @@ -140,6 +140,11 @@ public class SysMenuRequest extends BaseRequest { */ private String antdvLinkUrl; + /** + * 查询时传递:是否查询所有的菜单,true-所有的 + */ + private Boolean totalMenus = false; + /** * 获取主页左侧菜单列表(适配Antd Vue的版本) */ diff --git a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/controller/SysAppController.java b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/controller/SysAppController.java index dc41d7f87..08b499336 100644 --- a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/controller/SysAppController.java +++ b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/controller/SysAppController.java @@ -30,12 +30,14 @@ import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppRequest; +import cn.stylefeng.roses.kernel.system.modular.app.entity.SysApp; import cn.stylefeng.roses.kernel.system.modular.app.service.SysAppService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.List; /** * 系统应用控制器 @@ -143,4 +145,16 @@ public class SysAppController { return new SuccessResponseData(); } + /** + * 获取应用列表,用于顶部应用列表 + * + * @author fengshuonan + * @date 2021/4/21 15:31 + */ + @GetResource(name = "获取应用列表,用于顶部应用列表", path = "/sysMenu/getTopAppList") + public ResponseData getTopAppList() { + List userTopAppList = sysAppService.getUserTopAppList(); + return new SuccessResponseData(userTopAppList); + } + } diff --git a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/SysAppService.java b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/SysAppService.java index 59ae99c61..cab30766b 100644 --- a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/SysAppService.java +++ b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/SysAppService.java @@ -25,8 +25,8 @@ package cn.stylefeng.roses.kernel.system.modular.app.service; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; -import cn.stylefeng.roses.kernel.system.modular.app.entity.SysApp; import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppRequest; +import cn.stylefeng.roses.kernel.system.modular.app.entity.SysApp; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -114,4 +114,12 @@ public interface SysAppService extends IService { */ void updateActiveFlag(SysAppRequest sysAppParam); + /** + * 获取用户的顶部app导航列表 + * + * @author fengshuonan + * @date 2021/4/21 15:34 + */ + List getUserTopAppList(); + } diff --git a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/impl/SysAppServiceImpl.java b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/impl/SysAppServiceImpl.java index 793835489..72741f2b1 100644 --- a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/impl/SysAppServiceImpl.java +++ b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/impl/SysAppServiceImpl.java @@ -166,6 +166,25 @@ public class SysAppServiceImpl extends ServiceImpl impleme this.updateById(currentApp); } + @Override + public List getUserTopAppList() { + + // 获取用户拥有的appCode列表 + List userAppCodeList = menuApi.getUserAppCodeList(); + + // 根据appCode获取对应的app详情 + LambdaQueryWrapper wrapper = this.createWrapper(null); + wrapper.in(SysApp::getAppCode, userAppCodeList); + + // 仅查询code和name + wrapper.select(SysApp::getAppName, SysApp::getAppCode); + + // 根据激活顺序排序 + wrapper.orderByDesc(SysApp::getActiveFlag); + + return this.list(wrapper); + } + @Override public Set getAppsByAppCodes(Set appCodes) { HashSet simpleDicts = new HashSet<>(); 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 9b0bfa2ab..a21d6fe82 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 @@ -280,15 +280,19 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public List getLeftMenusAntdv(SysMenuRequest sysMenuRequest) { - String appCode = sysMenuRequest.getAppCode(); - - // 获取默认激活的应用 - if (ObjectUtil.isEmpty(appCode)) { - appCode = appServiceApi.getActiveAppCode(); + // 不分应用查询菜单 + List currentUserMenus = null; + if (sysMenuRequest.getTotalMenus() != null && sysMenuRequest.getTotalMenus()) { + currentUserMenus = this.getCurrentUserMenus(null); + } + // 根据应用查询菜单 + else { + String appCode = sysMenuRequest.getAppCode(); + if (ObjectUtil.isEmpty(appCode)) { + appCode = appServiceApi.getActiveAppCode(); + } + currentUserMenus = this.getCurrentUserMenus(appCode); } - - // 获取应用对应的菜单 - List currentUserMenus = this.getCurrentUserMenus(appCode); return AntdMenusFactory.createTotalMenus(currentUserMenus); } @@ -442,6 +446,23 @@ public class SysMenuServiceImpl extends ServiceImpl impl return !list.isEmpty(); } + @Override + public List getUserAppCodeList() { + + LambdaQueryWrapper queryWrapper = createWrapper(null); + queryWrapper.select(SysMenu::getAppCode); + queryWrapper.groupBy(SysMenu::getAppCode); + + // 非超级管理员获取自己的菜单 + if (!LoginContext.me().getSuperAdminFlag()) { + List currentUserMenuIds = this.getCurrentUserMenuIds(); + queryWrapper.in(SysMenu::getMenuId, currentUserMenuIds); + } + + List list = this.list(queryWrapper); + return list.stream().map(SysMenu::getAppCode).collect(Collectors.toList()); + } + /** * 获取系统菜单 *