diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Menu.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Menu.java index 99184bb..b64e5ac 100644 --- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Menu.java +++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Menu.java @@ -127,6 +127,12 @@ public class Menu implements Serializable { @Schema(description = "是否打开新页面") private Integer isOpen; + /** + * 是否显示 + */ + @Schema(description = "是否显示") + private Integer isDisplay; + /** * 备注 */ diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/vo/MenuVO.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/vo/MenuVO.java index 2cddca1..1818eba 100644 --- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/vo/MenuVO.java +++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/vo/MenuVO.java @@ -101,4 +101,9 @@ public class MenuVO extends Menu implements INode { * 是否新窗口打开 */ private String isOpenName; + + /** + * 是否显示 + */ + private String isDisplayName; } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml index 43069ee..44dfdc5 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml +++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml @@ -15,6 +15,7 @@ + @@ -31,6 +32,7 @@ + diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java index f6e5669..e4058e4 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java @@ -72,6 +72,7 @@ public class MenuServiceImpl extends ServiceImpl implements IM private final ITopMenuSettingService topMenuSettingService; private final static String PARENT_ID = "parentId"; private final static Integer MENU_CATEGORY = 1; + private final static Integer MENU_DISPLAY = 1; @Override public List lazyList(Long parentId, Map param) { @@ -132,10 +133,22 @@ public class MenuServiceImpl extends ServiceImpl implements IM roleMenus.forEach(roleMenu -> recursion(allMenus, routes, roleMenu)); routes.sort(Comparator.comparing(Menu::getSort)); MenuWrapper menuWrapper = new MenuWrapper(); - List collect = routes.stream().filter(x -> Func.equals(x.getCategory(), 1)).collect(Collectors.toList()); + Map routeMap = routes.stream().collect(Collectors.toMap(Menu::getId, x -> x, (left, right) -> left)); + List collect = routes.stream() + .filter(x -> Func.equals(x.getCategory(), 1)) + .filter(x -> isDisplayMenu(x, routeMap)) + .collect(Collectors.toList()); return menuWrapper.listNodeVO(collect); } + private boolean isDisplayMenu(Menu menu, Map routeMap) { + if (!Func.equals(Func.toInt(menu.getIsDisplay(), MENU_DISPLAY), MENU_DISPLAY)) { + return false; + } + Menu parentMenu = routeMap.get(menu.getParentId()); + return parentMenu == null || isDisplayMenu(parentMenu, routeMap); + } + private void recursion(List allMenus, List routes, Menu roleMenu) { Optional menu = allMenus.stream().filter(x -> Func.equals(x.getId(), roleMenu.getParentId())).findFirst(); if (menu.isPresent() && !routes.contains(menu.get())) { @@ -306,6 +319,9 @@ public class MenuServiceImpl extends ServiceImpl implements IM if (menu.getParentId() == null) { menu.setParentId(BladeConstant.TOP_PARENT_ID); } + if (menu.getIsDisplay() == null) { + menu.setIsDisplay(MENU_DISPLAY); + } // 验证父节点类型(新增或父节点变更时) if (isNewMenu || menu.getParentId() != null) { diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/MenuWrapper.java b/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/MenuWrapper.java index ed11f4b..93af144 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/MenuWrapper.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/wrapper/MenuWrapper.java @@ -63,9 +63,11 @@ public class MenuWrapper extends BaseEntityWrapper { String category = DictCache.getValue(DictEnum.MENU_CATEGORY, Func.toInt(menuVO.getCategory())); String action = DictCache.getValue(DictEnum.BUTTON_FUNC, Func.toInt(menuVO.getAction())); String open = DictCache.getValue(DictEnum.YES_NO, Func.toInt(menuVO.getIsOpen())); + String display = Func.equals(Func.toInt(menuVO.getIsDisplay(), 1), 1) ? "显示" : "不显示"; menuVO.setCategoryName(category); menuVO.setActionName(action); menuVO.setIsOpenName(open); + menuVO.setIsDisplayName(display); return menuVO; } diff --git a/doc/sql/bladex/bladex.mysql.all.create.sql b/doc/sql/bladex/bladex.mysql.all.create.sql index bba2489..8edde9d 100644 --- a/doc/sql/bladex/bladex.mysql.all.create.sql +++ b/doc/sql/bladex/bladex.mysql.all.create.sql @@ -556,6 +556,7 @@ CREATE TABLE `blade_menu` ( `category` int NULL DEFAULT NULL COMMENT '菜单类型', `action` int NULL DEFAULT 0 COMMENT '操作按钮类型', `is_open` int NULL DEFAULT 1 COMMENT '是否打开新页面', + `is_display` int NULL DEFAULT 1 COMMENT '是否显示', `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件地址', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', `is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除', diff --git a/doc/sql/transport/transport.sql b/doc/sql/transport/transport.sql index 38ecdf2..be3aa2d 100644 --- a/doc/sql/transport/transport.sql +++ b/doc/sql/transport/transport.sql @@ -785,6 +785,7 @@ CREATE TABLE `blade_menu` ( `category` int(11) DEFAULT NULL COMMENT '菜单类型', `action` int(11) DEFAULT '0' COMMENT '操作按钮类型', `is_open` int(11) DEFAULT '1' COMMENT '是否打开新页面', + `is_display` int(11) DEFAULT '1' COMMENT '是否显示', `component` varchar(255) DEFAULT NULL COMMENT '组件地址', `remark` varchar(255) DEFAULT NULL COMMENT '备注', `is_deleted` int(11) DEFAULT '0' COMMENT '是否已删除', diff --git a/doc/sql/upgrade/bladex.mysql.upgrade.4.9.0.to.4.10.0.sql b/doc/sql/upgrade/bladex.mysql.upgrade.4.9.0.to.4.10.0.sql index b86c6ea..59d4101 100644 --- a/doc/sql/upgrade/bladex.mysql.upgrade.4.9.0.to.4.10.0.sql +++ b/doc/sql/upgrade/bladex.mysql.upgrade.4.9.0.to.4.10.0.sql @@ -4,6 +4,12 @@ INSERT INTO `blade_param` (`id`, `param_name`, `param_key`, `param_value`, `remark`, `create_user`, `create_dept`, `create_time`, `update_user`, `update_time`, `status`, `is_deleted`) VALUES (1123598819738675204, '账号锁定时长(分钟)', 'account.lockDuration', '30', '锁定时长', 1123598821738675201, 1123598813738675201, '2025-12-01 12:00:00', 1123598821738675201, '2025-12-01 12:00:00', 1, 0); +-- ----------------------------------- +-- 菜单新增是否显示字段 +-- ----------------------------------- +ALTER TABLE `blade_menu` ADD COLUMN `is_display` int NULL DEFAULT 1 COMMENT '是否显示' AFTER `is_open`; +UPDATE `blade_menu` SET `is_display` = 1 WHERE `is_display` IS NULL; + -- ---------------------------- -- 限流规则表 -- ----------------------------