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 })