123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- 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
|