提交 7bae4c37 编写于 作者: V vben

fix(menu): fix externalLink not work

上级 e921e7b9
...@@ -3,6 +3,7 @@ import type { MenuModule, Menu, AppRouteRecordRaw } from '/@/router/types'; ...@@ -3,6 +3,7 @@ import type { MenuModule, Menu, AppRouteRecordRaw } from '/@/router/types';
import { findPath, forEach, treeMap, treeToList } from '/@/utils/helper/treeHelper'; import { findPath, forEach, treeMap, treeToList } from '/@/utils/helper/treeHelper';
import { cloneDeep } from 'lodash-es'; import { cloneDeep } from 'lodash-es';
import { isUrl } from '/@/utils/is';
export function getAllParentPath(treeData: any[], path: string) { export function getAllParentPath(treeData: any[], path: string) {
const menuList = findPath(treeData, (n) => n.path === path) as Menu[]; const menuList = findPath(treeData, (n) => n.path === path) as Menu[];
...@@ -39,7 +40,7 @@ export function transformMenuModule(menuModule: MenuModule): Menu { ...@@ -39,7 +40,7 @@ export function transformMenuModule(menuModule: MenuModule): Menu {
const menuList = [menu]; const menuList = [menu];
forEach(menuList, (m) => { forEach(menuList, (m) => {
joinParentPath(menuList, m); !isUrl(m.path) && joinParentPath(menuList, m);
}); });
return menuList[0]; return menuList[0];
} }
...@@ -58,7 +59,8 @@ export function transformRouteToMenu(routeModList: AppRouteModule[]) { ...@@ -58,7 +59,8 @@ export function transformRouteToMenu(routeModList: AppRouteModule[]) {
return treeMap(routeList, { return treeMap(routeList, {
conversion: (node: AppRouteRecordRaw) => { conversion: (node: AppRouteRecordRaw) => {
const { meta: { title, icon } = {} } = node; const { meta: { title, icon } = {} } = node;
joinParentPath(routeList, node);
!isUrl(node.path) && joinParentPath(routeList, node);
return { return {
name: title, name: title,
icon, icon,
......
...@@ -89,12 +89,17 @@ export async function getFlatChildrenMenus(children: Menu[]) { ...@@ -89,12 +89,17 @@ export async function getFlatChildrenMenus(children: Menu[]) {
function basicFilter(routes: RouteRecordNormalized[]) { function basicFilter(routes: RouteRecordNormalized[]) {
return (menu: Menu) => { return (menu: Menu) => {
const matchRoute = routes.find((route) => { const matchRoute = routes.find((route) => {
if (route.meta.externalLink) {
return true;
}
if (route.meta) { if (route.meta) {
if (route.meta.carryParam) { if (route.meta.carryParam) {
return pathToRegexp(route.path).test(menu.path); return pathToRegexp(route.path).test(menu.path);
} }
if (route.meta.ignoreAuth) return false; if (route.meta.ignoreAuth) return true;
} }
return route.path === menu.path; return route.path === menu.path;
}); });
......
...@@ -15,7 +15,7 @@ const menu: MenuModule = { ...@@ -15,7 +15,7 @@ const menu: MenuModule = {
name: 'routes.demo.iframe.doc', name: 'routes.demo.iframe.doc',
}, },
{ {
path: 'docExternal', path: 'https://vvbin.cn/doc-next/',
name: 'routes.demo.iframe.docExternal', name: 'routes.demo.iframe.docExternal',
}, },
], ],
......
...@@ -33,11 +33,11 @@ const iframe: AppRouteModule = { ...@@ -33,11 +33,11 @@ const iframe: AppRouteModule = {
}, },
}, },
{ {
path: 'docExternal', path: 'https://vvbin.cn/doc-next/',
name: 'DocExternal', name: 'DocExternal',
component: IFrame, component: IFrame,
meta: { meta: {
externalLink: 'https://vvbin.cn/doc-next/', externalLink: true,
title: 'routes.demo.iframe.docExternal', title: 'routes.demo.iframe.docExternal',
}, },
}, },
......
...@@ -17,7 +17,7 @@ export interface RouteMeta { ...@@ -17,7 +17,7 @@ export interface RouteMeta {
// Jump address // Jump address
frameSrc?: string; frameSrc?: string;
// Outer link jump address // Outer link jump address
externalLink?: string; externalLink?: boolean;
// current page transition // current page transition
transitionName?: string; transitionName?: string;
...@@ -28,6 +28,7 @@ export interface RouteMeta { ...@@ -28,6 +28,7 @@ export interface RouteMeta {
// Carrying parameters // Carrying parameters
carryParam?: boolean; carryParam?: boolean;
// Used internally to mark single-level menus
single?: boolean; single?: boolean;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册