import { createRouter, createWebHashHistory } 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' import { useUserStore } from '@/stores/user' import { ElMessage } from 'element-plus' const modules = import.meta.glob('../views/**/{index,list}.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: '/login', name: 'Login', component: Login, meta: { isPublic: true } }, { path: '/bigScreen', name: 'bigScreen', component: bigScreen, meta: { requiresAuth: true } }, { path: '/', redirect: '/login' }, { path: '/layout', component: Layout, meta: { requiresAuth: true }, children: [ { path: '/dashboard', name: 'Dashboard', component: Dashboard }, ...generateRoutes(), { path: '/:pathMatch(.*)*', name: 'Layout404', component: Page404 } ] }, { path: '/:pathMatch(.*)*', name: 'Page404', component: () => import('@/views/error/404.vue'), meta: { requiresAuth: true } } ] const router = createRouter({ history: createWebHashHistory(import.meta.env.BASE_URL || './'), routes, scrollBehavior() { return { top: 0 } } }) router.beforeEach((to, from, next) => { if (to.meta.isPublic) { next() return } const userStore = useUserStore() try { if (userStore.isLoggedIn()) { next() } else { ElMessage.warning('请先登录后再操作!') next({ path: '/login', query: { redirect: to.fullPath }, replace: true }) } } catch (error) { console.error('路由守卫校验失败:', error) ElMessage.error('登录状态校验失败,请重新登录!') next({ path: '/login', replace: true }) } }) export default router