Skip to content

useProgress

代码演示

js
import { useProgress } from '@/hooks'
import { whiteList } from '@/router/config'
import { useAppStore, useUserStore } from '@/store'
import router from '@/router'

const progress = useProgress()

function checkPath(path) {
    return ['/'].includes(path)
}

router.beforeEach((to, from, next) => {
    const { meta } = to
    const { title } = meta
    const appStore = useAppStore()
    const userStore = useUserStore()
    const isLogin = userStore.isLogin
    const complete = appStore.complete

    progress.start()

    // 设置标题
    document.title = title ? `${title} - ${import.meta.env.VITE_TITLE}` : import.meta.env.VITE_TITLE

    if (whiteList.includes(to.name)) {
        // 在白名单
        next()
    } else {
        // 判断当前登录状态
        if (isLogin) {
            // 已登录
            if (complete) {
                // 初始化完成
                if (checkPath(to.path)) {
                    userStore.goIndex({ welcomeMsg: false }).catch(() => {
                        userStore.logout()
                        next({ name: 'login', replace: true })
                    })
                } else {
                    next()
                }
            } else {
                // 初始化未加载完成
                appStore.init().then(() => {
                    next({ ...to, replace: true })
                })
            }
        } else {
            // 未登录
            const query = {}
            if (!checkPath(to.path)) {
                query.redirect = encodeURIComponent(location.href)
            }
            next({
                name: 'login',
                replace: true,
                query,
            })
        }
    }
})

router.afterEach(() => {
    progress.done()
})

本文档内容版权为 XYAdmin 作者所有,保留所有权利。