import { createRouter, createWebHistory } from 'vue-router' import Login from '@/views/Login.vue' import Page404 from '@/views/error/404.vue' import Layout from '@/components/Layout/index.vue' import Dashboard from '@/views/desktop/index.vue' import bigScreen from '@/views/screen/index.vue' // 扫描规则保持不变 const modules = import.meta.glob('../views/**/index.vue', { eager: false, import: 'default' }) const generateRoutes = () => { const routes = [] Object.entries(modules).forEach(([filePath, module]) => { const excludePaths = [ 'views/Login.vue', 'views/desktop/index.vue', 'views/error/', 'views/screen/', ] if (excludePaths.some(path => filePath.includes(path))) { return } const routePath = filePath .replace('../views', '') .replace('.vue', '') .toLowerCase() const routeName = routePath .split('/') .filter(Boolean) .map(seg => seg.charAt(0).toUpperCase() + seg.slice(1)) .join('') routes.push({ path: routePath, name: routeName || 'SystemRoleIndex', component: module }) }) return routes } const routes = [ { path: '/', redirect: '/login' }, { path: '/login', name: 'Login', component: Login, meta: { isPublic: true } }, { path: '/bigScreen', name: 'bigScreen', component: bigScreen, meta: { requiresAuth: true } }, { path: '/', component: Layout, meta: { requiresAuth: true }, children: [ { path: 'dashboard', name: 'Dashboard', component: Dashboard }, ...generateRoutes() ] }, { path: '/:pathMatch(.*)*', name: 'Page404', component: Page404 } ] const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL || '/'), routes, scrollBehavior() { return { top: 0 } } }) router.beforeEach((to, from, next) => { if (to.meta.isPublic) { next() return } try { const token = localStorage.getItem('token') if (token && token.trim() !== '') { next(); } else { next({ path: '/login', query: { redirect: to.fullPath } }); } } catch (error) { next('/login'); } }) export default router