import { defineStore } from 'pinia'; import { loginApi, getUserInfo, doLogout } from '/@/api/user.ts'; import { TOKEN_KEY, USER_INFO_KEY } from '/@/enum/cacheEnum.ts'; import { getBaseLogin, PageEnum } from '/@/enum/pageEnum.ts'; import { getAuthCache, setAuthCache } from '/@/utils/auth.ts'; import { useRouter } from 'vue-router'; import { LoginInfo, LoginParams, UserInfo } from '/@/store/modules/storeType.ts'; const router = useRouter(); export const useUserStore = defineStore({ id: 'app-user', state: () => ({ token: '', userInfo: null, //登录返回信息 loginInfo: null, }), getters: { getUserInfo(): UserInfo { return (this.userInfo && Object.keys(this.userInfo).length > 0) || getAuthCache(USER_INFO_KEY) || {}; }, getLoginInfo(): LoginInfo { return this.loginInfo || {}; }, getToken(): string { return this.token || getAuthCache(TOKEN_KEY); }, }, actions: { setToken(info: string | undefined) { this.token = info ? info : ''; setAuthCache(TOKEN_KEY, info); }, setUserInfo(info: UserInfo | null) { this.userInfo = info; setAuthCache(USER_INFO_KEY, info); }, setLoginInfo(info: LoginInfo | null) { this.loginInfo = info; }, /** * 登录事件 */ async login(params: LoginParams) { try { const { goHome = true, mode, ...loginParams } = params; const data = await loginApi(loginParams, mode); const { token, userInfo } = data.result; // save token this.setToken(token, false); this.setUserInfo(userInfo); return { userInfo }; } catch (error) { return Promise.reject(error); } }, /** * 登录完成处理 * @param goHome */ async afterLoginAction(goHome?: boolean, data?: any): Promise { if (!this.getToken) return null; //获取用户信息 const userInfo = await this.getUserInfoAction(); const { multi_depart, departs } = data; await this.setLoginInfo({ multi_depart, departs, isLogin: true }); return data; }, /** * @desc 获取用户信息 */ async getUserInfoAction() { if (!this.getToken) { return null; } // @ts-ignore const { userInfo } = await getUserInfo(); if (userInfo) { this.setUserInfo(userInfo); } return userInfo; }, /** * @desc 退出登录 */ async logout(goLogin = false) { if (this.getToken) { try { await doLogout(); } catch { console.log('注销Token失败'); } } this.setToken(''); this.setUserInfo(null); this.setLoginInfo(null); console.log('goLogin', goLogin); let path = getBaseLogin(); goLogin && router.replace({ path: path }); }, }, });