/** * 用户状态管理模块 */ import { defineStore } from 'pinia' import { getToken, setToken, removeToken, getRefreshToken, setRefreshToken, removeRefreshToken, getUserInfo, setUserInfo, removeUserInfo } from '../utils/storage.js' import { getUserInfo as fetchUserInfoApi } from '../api/user.js' /** 用户等级常量 */ export const USER_LEVEL = { NORMAL: 1, // 普通用户 PARTNER: 2, // 合伙人 CHANNEL: 3 // 渠道合伙人 } export const useUserStore = defineStore('user', { state: () => ({ token: getToken() || '', refreshToken: getRefreshToken() || '', userId: 0, uid: '', nickname: '', avatar: '', phone: '', userLevel: USER_LEVEL.NORMAL }), getters: { /** * 是否已登录 */ isLoggedIn: (state) => !!state.token && state.token.length > 0, /** * 是否是合伙人(合伙人或渠道合伙人) */ isPartner: (state) => state.userLevel >= USER_LEVEL.PARTNER, /** * 是否是渠道合伙人 */ isChannelPartner: (state) => state.userLevel === USER_LEVEL.CHANNEL }, actions: { /** * 登录 - 设置token和用户信息 * @param {Object} loginData - 登录数据 * @param {string} loginData.token - 访问令牌 * @param {string} loginData.refreshToken - 刷新令牌 * @param {Object} loginData.userInfo - 用户信息 */ login(loginData) { const { token, refreshToken, userInfo } = loginData this.token = token setToken(token) if (refreshToken) { this.refreshToken = refreshToken setRefreshToken(refreshToken) } if (userInfo) { this.updateUserInfo(userInfo) } }, /** * 登出 - 清除所有用户状态 */ logout() { this.token = '' this.refreshToken = '' removeToken() removeRefreshToken() this.userId = 0 this.uid = '' this.nickname = '' this.avatar = '' this.phone = '' this.userLevel = USER_LEVEL.NORMAL removeUserInfo() }, /** * 更新用户信息 * @param {Object} userInfo - 用户信息 */ updateUserInfo(userInfo) { if (!userInfo) return if (userInfo.userId !== undefined) this.userId = userInfo.userId if (userInfo.uid !== undefined) this.uid = userInfo.uid if (userInfo.nickname !== undefined) this.nickname = userInfo.nickname if (userInfo.avatar !== undefined) this.avatar = userInfo.avatar if (userInfo.phone !== undefined) this.phone = userInfo.phone if (userInfo.userLevel !== undefined) this.userLevel = userInfo.userLevel setUserInfo({ userId: this.userId, uid: this.uid, nickname: this.nickname, avatar: this.avatar, phone: this.phone, userLevel: this.userLevel }) }, /** * 从服务器获取用户信息 * 登录后、App启动时、下拉刷新时调用 */ async fetchUserInfo() { try { const res = await fetchUserInfoApi() if (res && res.code === 0 && res.data) { const d = res.data this.updateUserInfo({ userId: d.Id ?? d.id, uid: d.Uid ?? d.uid, nickname: d.Nickname ?? d.nickname, avatar: d.Headimg ?? d.headimg, phone: d.Mobile ?? d.mobile, userLevel: d.Vip ?? d.vip ?? USER_LEVEL.NORMAL }) } } catch (e) { console.warn('获取用户信息失败:', e) } }, /** * 从存储恢复用户状态 */ restoreFromStorage() { const token = getToken() const refreshToken = getRefreshToken() const userInfo = getUserInfo() if (token) { this.token = token } if (refreshToken) { this.refreshToken = refreshToken } if (userInfo) { this.userId = userInfo.userId || 0 this.uid = userInfo.uid || '' this.nickname = userInfo.nickname || '' this.avatar = userInfo.avatar || '' this.phone = userInfo.phone || '' this.userLevel = userInfo.userLevel || USER_LEVEL.NORMAL } } } })