import { createRouter, createWebHistory } from 'vue-router' import Temp404 from '@/views/global/temp/404.vue' import RouterView from '@/layout/router-view.vue' // @ts-ignore import Layout from '@/layout/index.vue' import { useAppStore, useMenuStore } from '@/stores' const routes = [ { path: '/:pathMatch(.*)*', name: 'NotFound', component: Temp404 }, { name: 'root', path: '/', component: Layout, redirect: '/home', children: [], }, { name: 'login', path: '/login', component: () => import('@/views/global/login/index.vue'), meta: {}, }, { name: 'home', path: '/home', component: () => import('@/views/study/home/index.vue'), meta: { isMenu: true, title: '首页', fa: 'fa-home', theme: 'main', }, }, ] const router = createRouter({ // @ts-ignore history: createWebHistory(import.meta.env.BASE_URL), routes, }) const hasLogin = (import.meta as any).env.VITE_LOGIN_MUST === 'Y' router.beforeEach((to, from, next) => { document.title = to.meta?.title || (import.meta as any).env.VITE_TITLE const isLogin = to.name === 'login' const inviteQuery = to.name === 'invite' ? to.query : {} const AppStore = useAppStore() AppStore.loadingStart() if ( isLogin && !AppStore.userInfo && !localStorage.getItem((import.meta as any).env.VITE_TOKEN) ) { next() AppStore.loadingEnd() } else { if (hasLogin) { if (AppStore.userInfo) { isLogin ? next({ name: 'root' }) : next() AppStore.loadingEnd() } else { if (localStorage.getItem((import.meta as any).env.VITE_TOKEN)) { AppStore.initUserInfo() .then(() => { isLogin ? next({ name: 'root' }) : next({ path: to.path, query: to.query }) }) .catch((e) => { localStorage.removeItem((import.meta as any).env.VITE_TOKEN) next({ name: 'login', query: inviteQuery }) }) .finally(() => { AppStore.loadingEnd() }) } else { next({ name: 'login', query: inviteQuery }) AppStore.loadingEnd() } } } else { next() AppStore.loadingEnd() } } }) export const initRoutes = () => { const MenuStore = useMenuStore() return new Promise((resolve, reject) => { setTimeout(() => { MenuStore.initRoutes(MenuStore.mockApi) resolve(null) }, 2000) }) } export default router