@ -48,29 +48,55 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
@@ -48,29 +48,55 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
@Override
public List < MenuVo > buildMenuRoute ( List < Menu > menus ) {
return buildMenuRoute ( menus , null ) ;
}
public List < MenuVo > buildMenuRoute ( List < Menu > menus , MenuVo superMenuVo ) {
List < MenuVo > menuVoList = menus . stream ( ) . map ( menu - > {
MenuVo menuVo = new MenuVo ( ) ;
menuVo . setName ( menu . getName ( ) ) ;
menuVo . setComponent ( menu . getComponent ( ) ) ;
// 检测是否是根节点,0:代表根节点
if ( MenuEnum . MENU_0 . getValue ( ) . equals ( menu . getParentId ( ) ) & & ! ReUtil . isMatch ( RegexConstants . MATCHER_URL , menu . getPath ( ) ) ) {
menuVo . setComponent ( "Layout" ) ;
// 配置路由设置属性
MetaVo metaVo = new MetaVo ( ) ;
metaVo . setHideMenu ( MenuEnum . MENU_1 . getValue ( ) . equals ( menu . getHideMenu ( ) ) ) ;
metaVo . setIcon ( menu . getIcon ( ) ) ;
metaVo . setTitle ( menu . getName ( ) ) ;
metaVo . setKeepAlive ( menu . getKeepAlive ( ) . equals ( MenuEnum . MENU_1 . getValue ( ) ) ) ;
metaVo . setHideChildrenInMenu ( MenuEnum . MENU_1 . getValue ( ) . equals ( menu . getHideChildrenMenu ( ) ) ) ;
// 配置vue-router的规则根级前面必须加上/,要不然会报错
if ( MenuEnum . MENU_0 . getValue ( ) . equals ( menu . getParentId ( ) ) ) {
menuVo . setPath ( menu . getPath ( ) . startsWith ( "/" ) ? menu . getPath ( ) : "/" . concat ( menu . getPath ( ) ) ) ;
} else {
menuVo . setPath ( menu . getPath ( ) ) ;
}
// 菜单目录配置,支持多级子菜单
if ( StrUtil . equalsIgnoreCase ( MenuEnum . MENU_M . getValue ( ) , menu . getType ( ) ) ) {
if ( MenuEnum . MENU_0 . getValue ( ) . equals ( menu . getParentId ( ) ) ) {
menuVo . setComponent ( MenuEnum . COMPONENT_LAYOUT . getValue ( ) ) ;
String redirect = "/" . concat ( handleRouteRedirect ( menu ) ) ;
menuVo . setRedirect ( StrUtil . isNotBlank ( redirect ) ? redirect : MenuEnum . MENU_ROUTE_DEFAULT_URL . getValue ( ) ) ;
} else {
menuVo . setPath ( menu . getPath ( ) ) ;
menuVo . setComponent ( MenuEnum . COMPONENT_PARENT_LAYOUT . getValue ( ) ) ;
menuVo . setRedirect ( superMenuVo . getRedirect ( ) ) ;
}
// 配置路由设置属性
menuVo . setMeta ( new MetaVo ( )
. setTitle ( menu . getName ( ) )
. setIcon ( menu . getIcon ( ) )
. setHideMenu ( MenuEnum . MENU_1 . getValue ( ) . equals ( menu . getHideMenu ( ) ) )
. setKeepAlive ( menu . getKeepAlive ( ) . equals ( MenuEnum . MENU_1 . getValue ( ) ) ) ) ;
// 外链配置,自动识别填充IFRAME (两种模式,跳转页面)
} else if ( StrUtil . equalsIgnoreCase ( MenuEnum . MENU_C . getValue ( ) , menu . getType ( ) ) & & ReUtil . isMatch ( RegexConstants . MATCHER_URL , menu . getPath ( ) ) ) {
menuVo . setComponent ( MenuEnum . COMPONENT_IFRAME . getValue ( ) ) ;
// 外链配置 (两种模式,内嵌页面)
} else if ( StrUtil . equalsIgnoreCase ( MenuEnum . MENU_C . getValue ( ) , menu . getType ( ) ) & & ReUtil . isMatch ( RegexConstants . MATCHER_URL , menu . getComponent ( ) ) ) {
menuVo . setComponent ( MenuEnum . COMPONENT_IFRAME . getValue ( ) ) ;
metaVo . setFrameSrc ( menu . getComponent ( ) ) ;
}
menuVo . setMeta ( metaVo ) ;
List < Menu > childrenMenus = menu . getChildren ( ) ;
if ( childrenMenus ! = null & & childrenMenus . size ( ) > 0 & & MenuEnum . MENU_M . getValue ( ) . equals ( menu . getType ( ) ) ) {
menuVo . setChildren ( buildMenuRoute ( childrenMenus ) ) ;
menuVo . setChildren ( buildMenuRoute ( childrenMenus , menuVo ) ) ;
}
return menuVo ;
} ) . collect ( Collectors . toList ( ) ) ;
@ -132,5 +158,4 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
@@ -132,5 +158,4 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
return menuList ;
}
}