mi-assessment/uniapp/store/user.js
zpc 4387b15de0 feat(mine): 完成我的页面改造
- 实现未登录/已登录两种状态样式
- 添加常用功能入口:我的订单、往期测评、联系我们、邀请新用户
- 添加其他功能入口:关于、用户协议、隐私政策、退出登录
- 实现退出登录二次确认弹窗
- 修复 uni.scss 中 SCSS 导入路径问题
- 整理 .gitignore 文件,移除 unpackage 构建目录
2026-02-10 00:12:01 +08:00

141 lines
3.4 KiB
JavaScript

/**
* 用户状态管理模块
*/
import { defineStore } from 'pinia'
import {
getToken, setToken, removeToken,
getRefreshToken, setRefreshToken, removeRefreshToken,
getUserInfo, setUserInfo, removeUserInfo
} from '../utils/storage.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
})
},
/**
* 从存储恢复用户状态
*/
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
}
}
}
})