hberp/hb_client/src/store/modules/user.js

147 lines
3.4 KiB
JavaScript

import { login, logout, getInfo } from '@/api/user'
import { getCount } from '@/api/workflow'
import { refreshToken } from '@/api/user'
import { getToken, setToken, removeToken} from '@/utils/auth'
import { resetRouter } from '@/router'
const getDefaultState = () => {
return {
token: getToken(),
name: '',
refresh: '',
avatar: '',
count: {},
perms: []
}
};
const state = getDefaultState();
const mutations = {
RESET_STATE: (state) => {
Object.assign(state, getDefaultState())
},
SET_TOKEN: (state, token) => {
state.token = token
},
SET_REFRESH: (state, refresh) => {
state.refresh = refresh
},
SET_NAME: (state, name) => {
state.name = name
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
},
SET_PERMS: (state, perms) => {
state.perms = perms
},
SET_COUNT: (state, count) => {
state.count = count
}
};
const actions = {
// user login
login({ commit }, userInfo) {
const { username, password } = userInfo;
return new Promise((resolve, reject) => {
login({ username: username.trim(), password: password }).then(response => {
const { data } = response;
commit('SET_TOKEN', data.access);
commit('SET_REFRESH', data.refresh);
sessionStorage.setItem('refresh',data.refresh);
setToken(data.access);
resolve()
}).catch(error => {
reject(error)
})
})
},
// get user info
getInfo({ commit, state }) {
return new Promise((resolve, reject) => {
getInfo(state.token).then(response => {
const { data } = response;
sessionStorage.setItem('userId',data.id);
if (!data) {
this.$router.push({name:'login',params:{}});
reject('验证失败,重新登陆.');
}
const { perms, name, avatar } = data;
// perms must be a non-empty array
if (!perms || perms.length <= 0) {
reject('没有任何权限!')
}
commit('SET_PERMS', perms);
commit('SET_NAME', name);
commit('SET_AVATAR', avatar);
resolve(data)
}).catch(error => {
reject(error)
})
})
},
// user logout
logout({ commit, state }) {
return new Promise((resolve, reject) => {
logout(state.token).then(() => {
removeToken();// must remove token first
resetRouter();
commit('RESET_STATE');
resolve()
}).catch(error => {
reject(error)
})
})
},
// remove token
resetToken({ commit },data) {
return new Promise(resolve => {
removeToken(); // must remove token first
commit('RESET_STATE');
commit('SET_TOKEN', data.access);
setToken(data.access);
resolve()
})
},
setSize({ commit }, size) {
commit('SET_SIZE', size)
},
getCount({ commit }) {
return new Promise((resolve, reject) => {
getCount({}).then((res) => {
commit('SET_COUNT', res.data);
resolve()
}).catch(error => {
reject(error)
})
})
}
,
refreshToken({ commit },ref) {
return new Promise((resolve, reject) => {
refreshToken({refresh:ref}).then((res) => {
const { data } = res;
removeToken();
commit('SET_TOKEN', data.access);
setToken(data.access);
resolve()
}).catch(error => {
reject(error)
})
})
}
}
export default {
namespaced: true,
state,
mutations,
actions
}