mirror of
https://github.com/vbenjs/vben-admin-thin-next.git
synced 2025-02-02 18:08:40 +08:00
fix(menu): fix externalLink not work
This commit is contained in:
parent
e921e7b98f
commit
7bae4c3752
@ -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,
|
||||
|
@ -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;
|
||||
});
|
||||
|
||||
|
@ -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',
|
||||
},
|
||||
],
|
||||
|
@ -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',
|
||||
},
|
||||
},
|
||||
|
3
src/router/types.d.ts
vendored
3
src/router/types.d.ts
vendored
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user