import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router' import { TOKEN_KEY } from '../api/http' import AdminLayout from '../layouts/AdminLayout.vue' const routes: RouteRecordRaw[] = [ { path: '/login', name: 'login', component: () => import('../views/Login.vue'), }, { path: '/h5/verify/login', name: 'h5-verify-login', component: () => import('../views/h5/VerifyLogin.vue'), }, { path: '/h5/verify/scan', name: 'h5-verify-scan', component: () => import('../views/h5/VerifyScan.vue'), }, { path: '/m/verify/login', name: 'm-verify-login', component: () => import('../views/h5/VerifyLogin.vue'), }, { path: '/m/verify', name: 'm-verify-scan', component: () => import('../views/h5/VerifyScan.vue'), }, { path: '/', name: 'admin-layout', component: AdminLayout, children: [], }, ] export const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes, }) function isMobileVerifyPath(path: string) { return path.startsWith('/h5/verify') || path.startsWith('/m/verify') } router.beforeEach(async (to) => { const token = localStorage.getItem(TOKEN_KEY) if (to.path === '/login') { if (token) { const { getFirstMenuPath } = await import('./dynamicAdminRoutes') return { path: await getFirstMenuPath(), replace: true } } return true } if (isMobileVerifyPath(to.path)) { return true } if (!token) { return '/login' } const dyn = await import('./dynamicAdminRoutes') if (!dyn.isDynamicRoutesRegistered()) { await dyn.registerDynamicAdminRoutes(router) const p = to.path.replace(/\/$/, '') || '/' if (p === '/' || p === '') { return { path: await dyn.getFirstMenuPath(), replace: true } } return { path: to.fullPath, replace: true } } const allowed = dyn.getCachedAllowedPaths() const p = to.path.replace(/\/$/, '') || '/' if (allowed && allowed.size > 0 && !allowed.has(p)) { return { path: dyn.pickDefaultPath(allowed), replace: true } } if (p === '/' || p === '') { return { path: await dyn.getFirstMenuPath(), replace: true } } return true })