美文网首页
VUE添加路由进度条

VUE添加路由进度条

作者: ThemisHoo | 来源:发表于2021-08-12 14:52 被阅读0次

    npm install --save nprogress

    import NProgress from 'nprogress' // progress bar
    import 'nprogress/nprogress.css' // progress bar style
    NProgress.configure({ showSpinner: false })
    
    router.beforeEach(async (to, from, next) => {
      NProgress.start()
    
      let userToken = getCookie('User-Token') || '';
      // console.log(userToken, 'User-Token-router')
      if (!userToken) {
        // clearAllCookie();
        return window.location.href = `${process.env.VUE_APP_LOGIN_URL}?return_url=${window.location}`
      }
    
      // 登录直接放行
      if(to.name == 'login') {
        NProgress.done()
       return next()
      }
    
       // 白名单
       let whiteList = ['login', '404', 'notauth'] //404
    
       let isRouterWhiter = whiteList.some(item => {
         return item === to.name
       })
       if(isRouterWhiter) {
        NProgress.done()
         return next()
       }
    
      // 获取权限
      let getAuth = JSON.parse(getCookie('menus_auth')) || ''
      // console.log(getAuth, '--cookie中的menus_auth')
      let authList = []
      function checkList(list) {
        list.forEach(element => {
          authList.push(element.componentName)
          if(element.children.length > 0) {
            checkList(element.children)
          }
        });
      }
      if(getAuth.length !== 0 && getAuth != '') {
        checkList(getAuth)
      }else {
        const { data } = await queryUserPerTree(process.env.VUE_APP_SOURCE)
        // console.log(data)
        if(parseInt(data.code) === 200) {
          setCookie("menus_auth", JSON.stringify(data.data) || "", 1);
          getAuth = data.data
          // console.log(getAuth, '--获取的menus_auth')
          checkList(getAuth)
        }
      }
      
      let isRouter = authList.some(item => {
        return item === to.name
      })
      // console.log(isRouter, '--是否有此路由')
      // console.log(authList, '--获取到的权限')
      // console.log(to.name, '--当前跳转的路由')
      if(isRouter) {
        NProgress.done()
       return next()
      }else if(!isRouter && authList.length > 0){
        let aL = authList.filter(e => {return e != ''})
        NProgress.done()
       return next({name: aL[0]})
      }else {
        NProgress.done()
       return next('/notauth')
      }
    })
    
    router.afterEach(() => {
        // finish progress bar
        NProgress.done()
    })
    
    

    相关文章

      网友评论

          本文标题:VUE添加路由进度条

          本文链接:https://www.haomeiwen.com/subject/eoxdwktx.html