diff --git a/src/interface/common/route.ts b/src/interface/common/route.ts index 019d382f6..b2e54151b 100644 --- a/src/interface/common/route.ts +++ b/src/interface/common/route.ts @@ -18,6 +18,7 @@ export type RouteKey = | 'document_vue' | 'document_vite' | 'document_naive' + | 'document_project' | 'plugin' | 'plugin_map' | 'plugin_video' diff --git a/src/layouts/common/GlobalMenu/index.vue b/src/layouts/common/GlobalMenu/index.vue index 2a3b9860c..fd740ab19 100644 --- a/src/layouts/common/GlobalMenu/index.vue +++ b/src/layouts/common/GlobalMenu/index.vue @@ -22,6 +22,7 @@ import type { MenuOption } from 'naive-ui'; import { useThemeStore, useAppStore } from '@/store'; import { menus } from '@/router'; import { GlobalMenuOption } from '@/interface'; +import { isUrl } from '@/utils'; const theme = useThemeStore(); const app = useAppStore(); @@ -49,7 +50,11 @@ function getActiveKeysInMenus(menu: GlobalMenuOption) { function handleUpdateMenu(_key: string, item: MenuOption) { const menuItem = item as GlobalMenuOption; - router.push(menuItem.routePath); + if (isUrl(menuItem.routePath)) { + window.open(menuItem.routePath, '__blank'); + } else { + router.push(menuItem.routePath); + } } function handleUpdateExpandedKeys(keys: string[]) { diff --git a/src/router/constant/index.ts b/src/router/constant/index.ts index c6a4e68fa..a5abd7c22 100644 --- a/src/router/constant/index.ts +++ b/src/router/constant/index.ts @@ -107,6 +107,14 @@ const routeConstMap = new Map([ title: 'naive文档' } ], + [ + 'document_project', + { + name: 'document_project', + path: 'https://docs.soybean.pro/', + title: '项目文档(外链)' + } + ], [ 'plugin', { diff --git a/src/router/modules/document.ts b/src/router/modules/document.ts index 3110b5403..6ea74e90a 100644 --- a/src/router/modules/document.ts +++ b/src/router/modules/document.ts @@ -1,5 +1,5 @@ import type { RouteRecordRaw } from 'vue-router'; -import { BasicLayout } from '@/layouts'; +import { BasicLayout, BlankLayout } from '@/layouts'; import { DocumentVue, DocumentVite, DocumentNaive } from '@/views'; import { routeName, routePath, routeTitle } from '../constant'; @@ -45,6 +45,16 @@ const document: RouteRecordRaw = { title: routeTitle('document_naive'), fullPage: true } + }, + { + name: routeName('document_project'), + path: routePath('document_project'), + component: BlankLayout, + meta: { + requiresAuth: true, + title: routeTitle('document_project'), + fullPage: true + } } ] }; diff --git a/src/utils/router/menus.ts b/src/utils/router/menus.ts index 1cd260bac..bab361573 100644 --- a/src/utils/router/menus.ts +++ b/src/utils/router/menus.ts @@ -47,3 +47,10 @@ export function transformRouteToMenu(routes: RouteRecordRaw[]) { }); return globalMenu; } + +/** 判断路由是否为Url链接 */ +export function isUrl(path: string): boolean { + const reg = + /(((^https?:(?:\/\/)?)(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)((?:\/[+~%/.\w-_]*)?\??(?:[-+=&;%@.\w_]*)#?(?:[\w]*))?)$/; + return reg.test(path); +}