登录时进行路由注册
const localRoutes: RouteRecordRaw[] = []
const files : Record<string,any> = import.meta.glob(
'../../router/main/**/*.ts',{
eager:true
}
)
for(const key in files){
const module = files[key]
localRoutes.push(module.default)
}
for(const menu of userMenus){
for(const submenu of menu.children){
const route = localRoutes.find(item => item.path === submenu.url)
if (route) router.addRoute('main',route)
}
}
map-menu.ts
import type { RouteRecordRaw } from 'vue-router'
function loadLocalRoutes() {
const localRoutes: RouteRecordRaw[] = []
const files: Record<string, any> = import.meta.glob('../router/main/**/*.ts', {
eager: true
})
for (const key in files) {
const module = files[key]
localRoutes.push(module.default)
}
return localRoutes
}
export let firstMenu: any = null
export function mapMenusToRoutes(userMenus: any[]) {
const localRoutes = loadLocalRoutes()
const routes: RouteRecordRaw[] = []
for (const menu of userMenus) {
for (const submenu of menu.children) {
const route = localRoutes.find((item) => item.path === submenu.url)
if (route) {
if (!routes.find((item) => item.path === menu.url)) {
routes.push({ path: menu.url, redirect: route.path })
}
routes.push(route)
}
if (!firstMenu && route) firstMenu = submenu
}
}
return routes
}
export function mapPathToMeun(path: string, userMenus: any[]) {
for (const menu of userMenus) {
for (const submenu of menu.children) {
if (submenu.url === path) {
return submenu
}
}
}
}
interface IBreadcrumbs {
name: string
path: string
}
export function mapPathToBreadCrumbs(path: string, userMenus: any[]) {
const breadcrumbs: IBreadcrumbs[] = []
for (const menu of userMenus) {
for (const submenu of menu.children) {
if (submenu.url === path) {
breadcrumbs.push({ name: menu.name, path: menu.path })
breadcrumbs.push({ name: submenu.name, path: submenu.path })
}
}
}
return breadcrumbs
}
const routes = mapMenusToRoutes(userMenus)
routes.forEach((route) => router.addRoute('main', route))