import { ActionContext, ActionTree, GetterTree, Module, MutationTree } from 'vuex' import { api } from '@/api' import { InitAppUserInfoOutput } from '@/api/swagger' import store, { RootState } from '@/store' import * as Auth from '@/util/auth' interface ILoginInfoState { token?: string info?: UserInfo } export type UserInfo = InitAppUserInfoOutput const mutations: MutationTree = { setToken(state: ILoginInfoState, token: string) { state.token = token }, setInfo(state: ILoginInfoState, info: UserInfo) { state.info = info }, logout(state: ILoginInfoState) { state.info = void 0 state.token = void 0 // oidcLogout(); }, } const actions: ActionTree = { logged(context: ActionContext, token: string) { if (context.state.info) { if (window.__POWERED_BY_QIANKUN__) { Auth.setToken(token) context.commit('setToken', token) } return Promise.resolve(token) } return new Promise((resolve, reject) => { if (token) { Auth.setToken(token) context.commit('setToken', token) return api.get('/api/App/Init', { client: 1 }).then((res) => { store.commit('menu/init', res.data) context.commit('setInfo', res.data.userInfo) resolve(token) }) } else { reject() } }) }, logout(context: ActionContext) { return new Promise((resolve: any) => { Auth.removeToken() store.commit('menu/clear') context.commit('setToken', '') context.commit('setInfo', {}) context.commit('logout') resolve() }) }, } const getters: GetterTree = {} const loginInfoState: ILoginInfoState = { token: undefined, info: undefined, } const user: Module = { namespaced: true, state: loginInfoState, mutations, actions, getters, } export default user