Blame view

Antis.Erp.Plat/antis-ncc-admin/src/permission.js 3.75 KB
f946e9dd   hexiaodong   hhh
1
2
3
4
5
6
7
  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 { getToken, setToken } from '@/utils/auth'
  import getPageTitle from '@/utils/get-page-title'
1d4c7454   “wangming”   1
8
9
10
11
12
13
  import {
    hasTodoCenterAccess,
    isTodoCenterRoute,
    resolveWorkspacePath,
    resolveSafeFallbackPath
  } from '@/utils/menuAuth'
f946e9dd   hexiaodong   hhh
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  
  NProgress.configure({ showSpinner: false }) // NProgress Configuration
  
  const whiteList = ['/login', '/auth-redirect', '/jump'] // no redirect whitelist
  
  router.beforeEach(async (to, from, next) => {
    // start progress bar
    NProgress.start()
  
    // set page title
    document.title = getPageTitle(to.meta.title, to.meta.zhTitle)
  
    // determine whether the user has logged in
    const hasToken = getToken()
  
    if (hasToken) {
      if (store.getters.isLock && to.path !== '/lockScreen' && to.path !== '/login') {
        next({
          path: '/lockScreen'
        })
        NProgress.done()
      } else if (to.path === '/login') {
1d4c7454   “wangming”   1
36
        const menuList = store.getters.menuList || []
f946e9dd   hexiaodong   hhh
37
        next({
1d4c7454   “wangming”   1
38
          path: resolveWorkspacePath(menuList)
f946e9dd   hexiaodong   hhh
39
40
41
42
43
44
45
46
47
        })
        NProgress.done()
      } else {
        if (to.path === '/home') {
          if (to.query.token) {
            store.commit('user/SET_TOKEN', to.query.token)
            setToken(to.query.token)
          }
        }
1d4c7454   “wangming”   1
48
49
        const menuList = store.getters.menuList || []
        const hasMenu = menuList.length > 0
f946e9dd   hexiaodong   hhh
50
        if (hasMenu) {
1d4c7454   “wangming”   1
51
52
53
54
55
56
57
58
59
60
          if (isTodoCenterRoute(to.path) && !hasTodoCenterAccess(menuList)) {
            const fallback = resolveSafeFallbackPath(menuList)
            if (!isTodoCenterRoute(fallback) && fallback !== to.path) {
              next({ path: fallback, replace: true })
            } else {
              next({ path: '/home', replace: true })
            }
            NProgress.done()
            return
          }
f946e9dd   hexiaodong   hhh
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
          next()
        } else {
          try {
            // get user info
            let res = await store.dispatch('user/getInfo')
            const accessRoutes = await store.dispatch('permission/generateRoutes', res)
            // dynamically add accessible routes
            router.addRoutes(accessRoutes)
            // hack method to ensure that addRoutes is complete
            // set the replace: true, so the navigation will not leave a history record
            next({
              ...to,
              replace: true
            })
          } catch (error) {
            // remove token and go to login page to re-login
            await store.dispatch('user/resetToken')
            if (error && typeof(error) == 'string') Message.error(error || 'Has Error')
            next(`/login?redirect=${to.path}`)
            NProgress.done()
          }
        }
      }
    } else {
      /* has no token*/
      if (whiteList.indexOf(to.path) !== -1) {
        // in the free login whitelist, go directly
        next()
      } else if (to.path === '/home') {
        if (to.query.token) {
          store.commit('user/SET_TOKEN', to.query.token)
          setToken(to.query.token)
          const hasMenu = store.getters.menuList && store.getters.menuList.length > 0
          if (hasMenu) {
            next()
          } else {
            try {
              let res = await store.dispatch('user/getInfo')
              const accessRoutes = await store.dispatch('permission/generateRoutes', res)
              router.addRoutes(accessRoutes)
              next('/home')
            } catch (error) {
              next(`/login`)
              NProgress.done()
            }
          }
        } else {
          next(`/login`)
          NProgress.done()
        }
      } else {
        // other pages that do not have permissionEle to access are redirected to the login page.
        next(`/login?redirect=${to.path}`)
        NProgress.done()
      }
    }
  })
  
  router.afterEach(() => {
    // finish progress bar
    NProgress.done()
  })