quality_frontend/platform/base/src/store/modules/user.ts

83 lines
1.8 KiB
TypeScript

import {loginApi, getInfoApi, loginOutApi, login} from "@/api/user";
import { ActionContext } from "vuex";
export interface userState {
token: string;
info: object;
}
const state = (): userState => ({
token: "", // 登录token
info: {}, // 用户信息
});
// getters
const getters = {
token(state: userState) {
return state.token;
},
};
// mutations
const mutations = {
tokenChange(state: userState, token: string) {
state.token = token;
},
infoChange(state: userState, info: object) {
state.info = info;
},
};
// actions
const actions = {
// login by login.vue
login(
{ commit, dispatch }: ActionContext<userState, userState>,
params: any
) {
return new Promise((resolve, reject) => {
login(params)
.then((res) => {
console.log(res)
commit("tokenChange", res.data.token);
dispatch("getInfo", { token: res.data.token }).then((infoRes) => {
resolve(res.data.token);
});
})
.catch((err) => {
reject(err);
});
});
},
// get user info after user logined
getInfo({ commit }: ActionContext<userState, userState>, params: any) {
return new Promise((resolve, reject) => {
getInfoApi(params).then((res) => {
commit("infoChange", res.data.info);
resolve(res.data.info);
});
});
},
// login out the system after user click the loginOut button
loginOut({ commit }: ActionContext<userState, userState>) {
loginOutApi()
.then((res) => {})
.catch((error) => {})
.finally(() => {
localStorage.removeItem("tabs");
localStorage.removeItem("vuex");
sessionStorage.removeItem("vuex");
location.reload();
});
},
};
export default {
namespaced: true,
state,
actions,
getters,
mutations,
};