|
|
|
@ -11,11 +11,26 @@ export function getModulesKey() { |
|
|
|
return Object.keys(modules).map((item) => item.replace('/src/views/', '').replace('.vue', '')) |
|
|
|
return Object.keys(modules).map((item) => item.replace('/src/views/', '').replace('.vue', '')) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function normalizeUrl(url: string) { |
|
|
|
|
|
|
|
if (/^https?:\/\//i.test(url)) return url |
|
|
|
|
|
|
|
return "https://" + url |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function genExternalPath(menu: any) { |
|
|
|
|
|
|
|
return `/external/${menu.id}` |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function createRouteRecord(menus) { |
|
|
|
export function createRouteRecord(menus) { |
|
|
|
return menus.map(menu => { |
|
|
|
return menus.map(menu => { |
|
|
|
|
|
|
|
const isExternal = !!menu.openOutside |
|
|
|
|
|
|
|
console.log("============menu==============") |
|
|
|
|
|
|
|
console.log(menu) |
|
|
|
const routeRecord: RouteRecordRaw = { |
|
|
|
const routeRecord: RouteRecordRaw = { |
|
|
|
path: menu.paths, |
|
|
|
// ✅ 外链用站内 path,占位
|
|
|
|
name: Symbol(menu.paths), |
|
|
|
path: isExternal ? genExternalPath(menu) : menu.paths, |
|
|
|
|
|
|
|
// ✅ name 用字符串,别用 Symbol
|
|
|
|
|
|
|
|
name: isExternal ? `external-${menu.id ?? menu.menuName}` : (menu.name ?? menu.paths), |
|
|
|
meta: { |
|
|
|
meta: { |
|
|
|
hidden: !menu.isShow, |
|
|
|
hidden: !menu.isShow, |
|
|
|
keepAlive: !!menu.isCache, |
|
|
|
keepAlive: !!menu.isCache, |
|
|
|
@ -23,19 +38,18 @@ export function createRouteRecord(menus) { |
|
|
|
perms: menu.perms, |
|
|
|
perms: menu.perms, |
|
|
|
icon: menu.icon, |
|
|
|
icon: menu.icon, |
|
|
|
type: menu.menuType, |
|
|
|
type: menu.menuType, |
|
|
|
openOutside:menu.openOutside, |
|
|
|
openOutside: menu.openOutside, |
|
|
|
openNewPage: menu.openNewPage |
|
|
|
openNewPage: menu.openNewPage, |
|
|
|
} |
|
|
|
// ✅ 把真正外链放到 meta.url
|
|
|
|
|
|
|
|
url: isExternal ? normalizeUrl(menu.paths) : undefined, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
// ✅ 外链用一个固定组件
|
|
|
|
|
|
|
|
component: isExternal |
|
|
|
|
|
|
|
? () => import("@/views/ExternalLink.vue") |
|
|
|
|
|
|
|
: (menu.menuType === MenuEnum.CATALOGUE ? LAYOUT : loadRouteView(menu.component)), |
|
|
|
} |
|
|
|
} |
|
|
|
switch (menu.menuType) { |
|
|
|
|
|
|
|
case MenuEnum.CATALOGUE: |
|
|
|
if (menu.children?.length) { |
|
|
|
routeRecord.component = LAYOUT |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
case MenuEnum.MENU: |
|
|
|
|
|
|
|
routeRecord.component = loadRouteView(menu.component) |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (menu.children.length) { |
|
|
|
|
|
|
|
routeRecord.children = createRouteRecord(menu.children) |
|
|
|
routeRecord.children = createRouteRecord(menu.children) |
|
|
|
} |
|
|
|
} |
|
|
|
return routeRecord |
|
|
|
return routeRecord |
|
|
|
|