diff --git a/src/router/helper/menuHelper.ts b/src/router/helper/menuHelper.ts index 850b411975d385afc83360c0872591ca6f9e9db1..9c5913265f099f85c15683cd67701c6fc39dd1f5 100644 --- a/src/router/helper/menuHelper.ts +++ b/src/router/helper/menuHelper.ts @@ -3,6 +3,7 @@ import type { MenuModule, Menu, AppRouteRecordRaw } from '/@/router/types'; import { findPath, forEach, treeMap, treeToList } from '/@/utils/helper/treeHelper'; import { cloneDeep } from 'lodash-es'; +import { isUrl } from '/@/utils/is'; export function getAllParentPath(treeData: any[], path: string) { const menuList = findPath(treeData, (n) => n.path === path) as Menu[]; @@ -39,7 +40,7 @@ export function transformMenuModule(menuModule: MenuModule): Menu { const menuList = [menu]; forEach(menuList, (m) => { - joinParentPath(menuList, m); + !isUrl(m.path) && joinParentPath(menuList, m); }); return menuList[0]; } @@ -58,7 +59,8 @@ export function transformRouteToMenu(routeModList: AppRouteModule[]) { return treeMap(routeList, { conversion: (node: AppRouteRecordRaw) => { const { meta: { title, icon } = {} } = node; - joinParentPath(routeList, node); + + !isUrl(node.path) && joinParentPath(routeList, node); return { name: title, icon, diff --git a/src/router/menus/index.ts b/src/router/menus/index.ts index 295bc40841b5ec5ada3923be5afaa4038b0e8846..cffa03181a5fc2776838d273aa01807fccf5d34b 100644 --- a/src/router/menus/index.ts +++ b/src/router/menus/index.ts @@ -89,12 +89,17 @@ export async function getFlatChildrenMenus(children: Menu[]) { function basicFilter(routes: RouteRecordNormalized[]) { return (menu: Menu) => { const matchRoute = routes.find((route) => { + if (route.meta.externalLink) { + return true; + } + if (route.meta) { if (route.meta.carryParam) { return pathToRegexp(route.path).test(menu.path); } - if (route.meta.ignoreAuth) return false; + if (route.meta.ignoreAuth) return true; } + return route.path === menu.path; }); diff --git a/src/router/menus/modules/demo/iframe.ts b/src/router/menus/modules/demo/iframe.ts index 6e94b6da5d2f96e55025b99daf7bfadcf436a808..6af3505d00710d32255cfae36178055fa5b87578 100644 --- a/src/router/menus/modules/demo/iframe.ts +++ b/src/router/menus/modules/demo/iframe.ts @@ -15,7 +15,7 @@ const menu: MenuModule = { name: 'routes.demo.iframe.doc', }, { - path: 'docExternal', + path: 'https://vvbin.cn/doc-next/', name: 'routes.demo.iframe.docExternal', }, ], diff --git a/src/router/routes/modules/demo/iframe.ts b/src/router/routes/modules/demo/iframe.ts index f586dbf8d102deaac6d0c9e2f5944a5614885ced..8f23dd80ff44688b62007f72226615016657a5b9 100644 --- a/src/router/routes/modules/demo/iframe.ts +++ b/src/router/routes/modules/demo/iframe.ts @@ -33,11 +33,11 @@ const iframe: AppRouteModule = { }, }, { - path: 'docExternal', + path: 'https://vvbin.cn/doc-next/', name: 'DocExternal', component: IFrame, meta: { - externalLink: 'https://vvbin.cn/doc-next/', + externalLink: true, title: 'routes.demo.iframe.docExternal', }, }, diff --git a/src/router/types.d.ts b/src/router/types.d.ts index 95d408a9c1356d4d826902f758fe0fde774afd54..671339a0b771c6b652aaa9123c658940f6750eda 100644 --- a/src/router/types.d.ts +++ b/src/router/types.d.ts @@ -17,7 +17,7 @@ export interface RouteMeta { // Jump address frameSrc?: string; // Outer link jump address - externalLink?: string; + externalLink?: boolean; // current page transition transitionName?: string; @@ -28,6 +28,7 @@ export interface RouteMeta { // Carrying parameters carryParam?: boolean; + // Used internally to mark single-level menus single?: boolean; }