import { defineStore } from 'pinia'; import {Local, Session} from '/@/utils/storage'; import { getUserInfo, login, loginByMobile, loginBySocial, refreshTokenApi } from '/@/api/login/index'; import { useMessage } from '/@/hooks/message'; import { initUserTableConfigs } from '/@/api/admin/usertable'; /** * @function useUserInfo * @returns {UserInfosStore} */ export const useUserInfo = defineStore('userInfo', { state: (): UserInfosState => ({ userInfos: { userName: '', photo: '', time: 0, roles: [], roleCodes: [], authBtnList: [], }, }), actions: { /** * 统一写入 token 到缓存(登录成功、URL 参数 token 等共用) * @param token 访问令牌 * @param refreshToken 刷新令牌,可选 */ setTokenCache(token: string, refreshToken?: string) { Session.set('token', token); if (refreshToken != null && refreshToken !== '') { Session.set('refresh_token', refreshToken); } }, /** * 登录方法 * @function login * @async * @param {Object} data - 登录数据 * @returns {Promise} */ async login(data:any) { data.grant_type = 'password'; data.scope = 'server'; return new Promise((resolve, reject) => { login(data) .then((res) => { this.setTokenCache(res.access_token, res.refresh_token); Local.remove('roleCode'); Local.remove('roleName'); Local.remove('roleId'); resolve(res); }) .catch((err) => { useMessage().error(err?.msg || '系统异常请联系管理员'); reject(err); }); }); }, /** * 手机登录方法 * @function loginByMobile * @async * @param {Object} data - 登录数据 * @returns {Promise} */ async loginByMobile(data) { return new Promise((resolve, reject) => { loginByMobile(data.mobile, data.code) .then((res) => { this.setTokenCache(res.access_token, res.refresh_token); resolve(res); }) .catch((err) => { useMessage().error(err?.msg || '系统异常请联系管理员'); reject(err); }); }); }, /** * 社交账号登录方法 * @function loginBySocial * @async * @param {string} state - 状态 * @param {string} code - 代码 * @returns {Promise} */ async loginBySocial(state, code) { return new Promise((resolve, reject) => { loginBySocial(state, code) .then((res) => { this.setTokenCache(res.access_token, res.refresh_token); resolve(res); }) .catch((err) => { useMessage().error(err?.msg || '系统异常请联系管理员'); reject(err); }); }); }, /** * 刷新token方法 * @function refreshToken * @async * @returns {Promise} */ async refreshToken() { return new Promise((resolve, reject) => { const refreshToken = Session.get('refresh_token'); refreshTokenApi(refreshToken) .then((res) => { this.setTokenCache(res.access_token, res.refresh_token); resolve(res); }) .catch((err) => { useMessage().error(err.msg); reject(err); }); }); }, /** * 获取用户信息方法 * @function setUserInfos * @async */ async setUserInfos() { await getUserInfo().then((res) => { const userInfo: any = { user: res.data.sysUser, time: new Date().getTime(), roles: res.data.roles, roleCodes: res.data.roleCodes || [], authBtnList: res.data.permissions, }; this.userInfos = userInfo; // 初始化用户表格配置(登录后获取一次所有配置并保存到本地) initUserTableConfigs().catch((err) => { console.error('初始化用户表格配置失败:', err); }); }); }, }, });