123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- import Cookies from 'js-cookie'
- import router from './router'
- import store from './store'
- import Vue from 'vue'
- import {
- Message
- } from 'element-ui'
- import NProgress from 'nprogress'
- import 'nprogress/nprogress.css'
- import {
- cookGetToken,
- localSetToken,
- getToken,
- removeToken
- } from '@/utils/auth'
- import {
- wxAuth
- } from '@/utils/wx-auth-two.js';
- NProgress.configure({
- showSpinner: false
- })
- function hasPermission(roles, permissionRoles) {
- if (roles.indexOf('admin') >= 0) return true
- if (!permissionRoles) return true
- return roles.some(role => permissionRoles.indexOf(role) >= 0)
- }
- // 免登名单
- const whiteList = ['/invite_new_company', '/create_company', '/login', '/loginTransfer', '/noAccess', '/loginbytoken', '/reg', '/forgetPwd', '/resetPwd', '/android', '/demo', '/swiperShow', '/autoLogin'] // no redirect whitelist
- const stopPath = ['/login', '/noAccess']
- router.beforeEach((to, from, next) => {
- if (Vue.$httpRequestList.length > 0) { //强行中断时才向下执行
- Vue.$httpRequestList.forEach(item => {
- item('interrupt'); //给个标志,中断请求
- })
- }
- if(stopPath.indexOf(to.path) !== -1){
- next()
- }else{
- // NProgress.start()
- if(cookGetToken()){
- if(getToken() !== cookGetToken()){
- store.commit('SET_DELETE_USER', {})
- store.commit('SET_TOKEN', cookGetToken())
- localStorage.setItem('Admin-Token', cookGetToken())
- init(to, next)
- }else{
- init(to, next)
- }
- // localSetToken(cookGetToken())
- // Cookies.remove('Admin-Token')
- }else if (getToken()) {
- if (!store.state.user.token) store.commit("SET_TOKEN", getToken());
- init(to, next)
- } else {
- if (whiteList.indexOf(to.path) !== -1 || window.location.href.indexOf('loginbytoken/') !== -1) { // 在免登录白名单,直接进入
- next()
- } else {
- window.location.href = process.env.BASE_API//直接重新授权
- // next('/login') // 否则全部重定向到登录页
- // NProgress.done()
- }
- }
- }
- })
- function init(to, next) {
- store.dispatch('get_point_types').then((res) => {})
- store.dispatch('get_site_info').then((res) => {})
- store.dispatch('get_employee_map').then((res) => {}) // 取得员工列表的地图
- store.dispatch('get_dept_tree').then((res) => {}) // 获取部门树型结构列表
- if (to.path === '/login') {
- next({
- path: '/'
- })
- // NProgress.done()
- } else {
- if (!store.getters.user_info.id) { // 判断当前用户是否已拉取完user_info信息
- store.dispatch('GetUserInfo').then(res => { // 拉取user_info
- // 设置title
- document.title = ''
- const mo_list = []
- res.data['mo_list'] = []
- for (const i in mo_list) {
- res.data['mo_list'].push(mo_list[i].code)
- }
- const roles = ['admin']
- store.dispatch('GenerateRoutes', {
- roles
- }).then(() => {
- // 增加动态权限列表,在这里发送一个请求,得到路由
- const addRouters = []
- for (const item in store.getters.addRouters) {
- const obj = []
- for (const ritem in store.getters.addRouters[item].children) {
- if (res.data.mo_list.indexOf(store.getters.addRouters[item].children[ritem].name) >= 0 || store.getters.addRouters[item].children[ritem].hidden === true || store.getters.addRouters[item].children[ritem].common === true) {
- obj.push(store.getters.addRouters[item].children[ritem])
- }
- obj.push(store.getters.addRouters[item].children[ritem])
- }
- if (obj.length > 0) {
- const _R = store.getters.addRouters[item]
- _R['children'] = obj
- addRouters.push(_R)
- }
- }
- router.addRoutes(addRouters) // 动态添加可访问路由表
- next({
- ...to,
- replace: true
- }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
- })
- }).catch((err) => {
- console.log('GetUserInfo-------------err')
- if(getToken()){
- next('/login')
- }
- // console.log(err)
- // localStorage.clear()
- // sessionStorage.clear()
- // Cookies.remove('Admin-Token')
- // if(err.code == 4444){
- // router.push({
- // path: '/noAccess',
- // query: {
- // msg: err.msg
- // }
- // })
- // }
- // return
-
- // console.log(err)
- // 登出
- // store.dispatch('LogOut')
- })
- } else {
- // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
- if (hasPermission(store.getters.roles, to.meta.roles)) {
- // removeToken()
- wxAuth('', next);
- // next()
- // NProgress.start()
- } else {
- next({
- path: '/401',
- replace: true,
- query: {
- noGoBack: true
- }
- })
- // NProgress.start()
- }
- }
- }
- }
- router.afterEach((to, from) => {
- console.log(to)
- // NProgress.done() // finish progress bar
- })
|