import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router' import { setupRouterGuard } from './guard' import { basicRoutes, EMPTY_ROUTE, NOT_FOUND_ROUTE } from './routes' import { getToken, isNullOrWhitespace } from '@/utils' import { usePermissionStore } from '@/store' const isHash = false export const router = createRouter({ history: isHash ? createWebHashHistory('/') : createWebHistory('/'), routes: basicRoutes, scrollBehavior: () => ({ left: 0, top: 0 }), }) export async function setupRouter(app) { await addDynamicRoutes() setupRouterGuard(router) app.use(router) } export async function addDynamicRoutes() { const token = getToken() // 没有token情况 if (isNullOrWhitespace(token)) { router.addRoute(EMPTY_ROUTE) return } // 有token的情况 try { const permissionStore = usePermissionStore() const accessRoutes = permissionStore.generateRoutes() accessRoutes.forEach((route) => { !router.hasRoute(route.name) && router.addRoute(route) }) router.hasRoute(EMPTY_ROUTE.name) && router.removeRoute(EMPTY_ROUTE.name) router.addRoute(NOT_FOUND_ROUTE) } catch (error) { console.error(error) throw error } } export function getRouteNames(routes) { return routes.map((route) => getRouteName(route)).flat(1) } function getRouteName(route) { const names = [route.name] if (route.subMenu && route.subMenu.length) { names.push(...route.subMenu.map((item) => getRouteName(item)).flat(1)) } return names }