import Vue from 'vue' import Vuex from 'vuex' import app from './modules/app' import permission from './modules/permisssion' import { login, logout } from '@/api/user' import { getToken, setToken, removeToken } from '@/utils/auth' import { NAME, USER_TYPE, USER_ID, USER_PASS } from '@/utils/mappingData' Vue.use(Vuex) export default new Vuex.Store({ state: { token: getToken(), name: sessionStorage.getItem(NAME), roles: JSON.parse(sessionStorage.getItem(USER_TYPE)) || '', userId: sessionStorage.getItem(USER_ID), resetRouterTemp: '', userpass: JSON.parse(sessionStorage.getItem(USER_PASS)) || '' }, mutations: { SET_TOKEN: (state, token) => { state.token = token setToken(token) }, SET_NAME: (state, name) => { sessionStorage.setItem(NAME, name) state.name = name }, SET_USER_ID: (state, userId) => { sessionStorage.setItem(USER_ID, userId) state.userId = userId }, SET_ROLES: (state, userType) => { state.roles = userType sessionStorage.setItem(USER_TYPE, JSON.stringify(userType)) }, SET_ROUTER_TEMP(state, payload) { state.resetRouterTemp = payload }, SET_USERPASS(state, payload) { state.userpass = payload sessionStorage.setItem(USER_PASS, payload) } }, actions: { async login({ dispatch, commit }, userinfo) { try { const { username, password } = userinfo const res = await login({ username: username.trim(), password: password }) if (res.code === 0) { commit('SET_ROLES', res.result.roleCode) commit('SET_NAME', res.result.name) commit('SET_USER_ID', res.result.username) commit('SET_TOKEN', res.result.token) } return res } catch (error) { console.log(error) } }, // remove token resetToken({ commit }) { return new Promise(resolve => { removeToken() sessionStorage.clear() resolve() }) }, async logout({ dispatch, commit }) { try { const res = await logout() dispatch('resetToken') return res } catch (error) { console.log(error) } } }, modules: { app, permission } })