/* * @Description: app actions * @Author: ZY * @Date: 2020-12-23 10:25:37 * @LastEditors: scy😊 * @LastEditTime: 2021-01-29 08:46:37 */ import {ActionContext, ActionTree} from 'vuex' import {RootState} from '../../' import {UserState} from './state' import {Mutations} from './mutations' import {UserMutationTypes} from './mutation-types' import {UserActionTypes} from './action-types' import {getUserInfo, loginApi, loginOutApi} from '../../../api/passport' import {removeToken, setToken} from "../../../utils/auth"; import {store} from "../../"; import {ElMessageBox} from "element-plus"; import {AppMutationTypes} from "../app/mutation-types"; type AugmentedActionContext = { commit( key: K, payload: Parameters[1], ): ReturnType } & Omit, 'commit'> export interface Actions { [UserActionTypes.ACTION_LOGIN]( { commit }: AugmentedActionContext, userInfo: { username: string, password: string } ): void [UserActionTypes.ACTION_GET_USER_INFO]( { commit }: AugmentedActionContext, param: { token: string } ): void [UserActionTypes.ACTION_LOGIN_OUT]( { commit }: AugmentedActionContext, ): void } export const actions: ActionTree & Actions = { login( { commit,dispatch }: AugmentedActionContext, params: { username: string, password: string } ) { return new Promise((resolve, reject) => { loginApi(params) .then(res => { setToken('Bearer ' + res.content.token) commit(UserMutationTypes.SET_TOKEN, 'Bearer ' + res.content.token) dispatch(UserActionTypes.ACTION_GET_USER_INFO, {token: res.content.token}) .then(res => { resolve(res) }) }).catch(err => { reject(err) }) }) }, async getInfo({ commit }: AugmentedActionContext, params: { token: string}) { return new Promise((resolve, reject) => { getUserInfo(params) .then(res => { console.log("login respone") console.log(res) const menus = res.content.menus.filter(i => i.path === store.getters[AppMutationTypes.GetModuleCode]) if(menus.length==0) { ElMessageBox.confirm('你无权使用本系统,请使用别的账号重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' } ) .finally(()=>{ store.dispatch('logout') }); return; } const moduleMenus = menus[0].children?menus[0].children:menus; commit(UserMutationTypes.SET_USERINFO, res.content.user) commit(UserMutationTypes.SET_ROLES, res.content.roles) commit(UserMutationTypes.SET_USERINFO, res.content.user) commit(UserMutationTypes.SET_MENUS, res.content.menus) commit(UserMutationTypes.SET_MODULE_MENUS, moduleMenus) resolve() }) }) }, logout( { commit }: AugmentedActionContext ) { commit(UserMutationTypes.SET_LOGOUT,'') removeToken(); } }