permission.js
import router from './router'
import store from './store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
NProgress.configure({ showSpinner: false })
const whiteList = ['/login']
router.beforeEach((to, from, next) => {
NProgress.start()
if (to.path === '/login') {
return
}
if (whiteList.indexOf(to.path) !== -1) {
next();
return;
}
let token = localStorage.getItem('token')
if (token) {
let permissions = store.getters.permissions
if (!permissions || permissions.length === 0) {
store.dispatch('GetUserPermissions').then( async () => {
next({ ...to, replace: true })
}).catch(err => {
next('/login')
})
return
}
next()
} else {
next('/login')
}
})
router.afterEach(() => {
NProgress.done()
})
router.js
import Vue from "vue"
import Router from "vue-router"
Vue.use(Router)
export default new Router({
mode: "history",
scrollBehavior: () => ({ y: 0 }),
routes: [
{
path: "/login",
component: () => import("@/views/login")
}
]
})
store/index.js
import getters from './getters'
import permission from './modules/permission'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
permission
},
getters
})
export default store
store/getters
const getters = {
permissions: state => state.permissions.permissions
}
export default getters
store/modules/permission
const permission = {
state: {
permissions: []
},
mutations: {
SET_PERMISSIONS: (state, permissions) => {
state.permissions = permissions
}
},
actions: {
GetUserPermissions({ commit, state }) {
return new Promise((resolve, reject) => {
let params = {
id: 'xxx'
}
Api.getPermissionList(params).then(res => {
let permissions = res.permissionList;
if (!permissions || (Array.isArray(permissions) && permissions.length === 0)) {
let error = new Error;
error.message = '该用户权限未配置,请联系管理员'
reject(error)
return;
}
commit('SET_PERMISSIONS', res.permissionList);
resolve(res.permissionList)
}).catch(error => {
reject(error)
})
})
}
}
}