Blame view

wenjuan-pc/src/permission - 副本1.js 3.72 KB
a6a3878d   杨鑫   最新绿道
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
  import router from './router'
  import store from './store'
  import {
    Message
  } from 'element-ui'
  import NProgress from 'nprogress' // progress bar
  import 'nprogress/nprogress.css' // progress bar style
  import {
    getUserId,
    getToken
  } from '@/utils/auth' // get token from cookie
  import {
    adminBuild
  } from '@/api/user.js'
  import { filterAsyncRouter } from '@/store/modules/permission.js'
  import getPageTitle from '@/utils/get-page-title'
  import {authenticate} from "@/api/getCode";
  
  NProgress.configure({
    showSpinner: false
  }) // NProgress Configuration
  
  const whiteList = ['/login'] // no redirect whitelist
  let isFirstVisit = true; // 新增标志位,记录是否是首次访问
  
  const extractParamsAndHandleToken = () => {
    let urlPart = window.location.href
    const queryIndex = urlPart.indexOf('?');
    if (queryIndex === -1) {
      return null;
    }
    const queryString = urlPart.slice(queryIndex + 1);
    const paramPairs = queryString.split('&');
    let idValue = localStorage.getItem("code") || null;
    let tokenValue = null;
  
    paramPairs.forEach(pair => {
      const [key, value] = pair.split('=');
      if (key === 'code') {
        idValue = value;
      }
    });
    if (idValue == null) {
      window.location.href = 'https://admin-uat.028wlkj.com:1020/login';
    } else {
      authenticate({ needOpinion: idValue }).then(res => {
        if (res.data.idValue != '200') {
          window.location.href = 'https://admin-uat.028wlkj.com:1020/login';
        }
      })
    }
    // localStorage.setItem("code", idValue);
    // this.yanzheng(idValue)
  }
  
  router.beforeEach(async (to, from, next) => {
    // start progress bar
    NProgress.start()
    // set page title
    document.title = getPageTitle(to.meta.title)
  
    // determine whether the user has logged in
    const hasToken = getToken()
  
    if (hasToken) {
      console.log(to.path, 'path')
      if (to.path === '/login') {
        // if is logged in, redirect to the home page
        next({
          path: '/'
        })
        NProgress.done()
      } else {
        if (isFirstVisit) {
          extractParamsAndHandleToken();
          isFirstVisit = false; // 首次访问判断完成后,将标志位设为 false
        }
        if (store.getters.routers.length === 0) { // 条件加载
          loadMenus(next, to)
  
          store.commit('SET_LOAD', true)
        } else if (!store.getters.hasLoad) { // 是否加载过动态路由
          // // 修改hasLoad为false,防止死循环
  
          store.commit('SET_LOAD', true)
          loadMenus(next, to)
        } else {
          try {
            next()
          } catch (error) {
            await store.dispatch('user/resetToken')
            Message.error(error || 'Has Error')
            next(`/login?redirect=${to.path}`)
            NProgress.done()
          }
        }
      }
    } else {
      /* has no token*/
      if (whiteList.indexOf(to.path) !== -1) {
        console.log('no token')
        if (isFirstVisit) {
          extractParamsAndHandleToken();
          isFirstVisit = false; // 首次访问判断完成后,将标志位设为 false
        }
        next()
      } else {
        next(`/login?redirect=${to.path}`)
        NProgress.done()
      }
    }
  })
  
  
  export const loadMenus = (next, to) => {
    adminBuild({ platformUserId: getUserId() }).then(res => {
      const asyncRouter = filterAsyncRouter(res.data)
      // 画布设置
      asyncRouter.forEach(item => {
        if (item.path.indexOf('.html') !== -1) {
          item.path = item.path + '?' + getToken()
        }
      })
      // 异常跳转添加
      asyncRouter.push({ path: '*', redirect: '/404', hidden: true })
      store.dispatch('GenerateRoutes', asyncRouter).then(() => { // 存储路由
        router.addRoutes(asyncRouter) // 动态添加可访问路由表
        next({ ...to, replace: true })
      })
    })
  }
  
  router.afterEach(() => {
    // finish progress bar
    NProgress.done()
  })