Study/web/src/store/module/user.js

97 lines
2.5 KiB
JavaScript

import { login } from '@/api/user'
import { jsonInBlacklist } from '@/api/jwt'
import router from '@/router/index'
import variables from '@/style/element_visiable.scss'
export const user = {
namespaced: true,
state: {
userInfo: {
uuid: '',
nickName: '',
headerImg: '',
authority: '',
sideMode : 'dark',
theme: variables.colorPrimary,
},
token: ''
},
mutations: {
setUserInfo(state, userInfo) {
// 这里的 `state` 对象是模块的局部状态
state.userInfo = userInfo
},
setToken(state, token) {
// 这里的 `state` 对象是模块的局部状态
state.token = token
},
NeedInit(state) {
state.userInfo = {}
state.token = ''
sessionStorage.clear()
router.push({ name: 'Init', replace: true })
},
LoginOut(state) {
state.userInfo = {}
state.token = ''
sessionStorage.clear()
router.push({ name: 'Login', replace: true })
window.location.reload()
},
ResetUserInfo(state, userInfo = {}) {
state.userInfo = { ...state.userInfo,
...userInfo
}
},
CHANGETHEME: (state, value) => {
state.theme = value
},
CHANGESIDEMODE: (state ,val) => {
state.sideMode = val
}
},
actions: {
async LoginIn({ commit, dispatch, rootGetters, getters }, loginInfo) {
const res = await login(loginInfo)
if (res.code === 0) {
commit('setUserInfo', res.data.user)
commit('setToken', res.data.token)
await dispatch('router/SetAsyncRouter', {}, { root: true })
const asyncRouters = rootGetters['router/asyncRouters']
router.addRoutes(asyncRouters)
// const redirect = router.history.current.query.redirect
// console.log(redirect)
// if (redirect) {
// router.push({ path: redirect })
// } else {
router.push({ name: getters['userInfo'].authority.defaultRouter })
// }
return true
}
},
async LoginOut({ commit }) {
const res = await jsonInBlacklist()
if (res.code === 0) {
commit('LoginOut')
}
},
changeTheme({ commit }, data) {
commit('CHANGETHEME', data)
},
changeSideMode({ commit },data) {
commit('CHANGESIDEMODE',data)
}
},
getters: {
userInfo(state) {
return state.userInfo
},
token(state) {
return state.token
},
getSideMode(state) {
return state.sideMode
}
}
}