index.js 2.24 KB
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
  }
})