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, 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, 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) { 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, };