mi-assessment/uniapp/store/user.js
2026-02-09 14:45:06 +08:00

90 lines
1.8 KiB
JavaScript

/**
* 用户状态管理模块
*/
import { defineStore } from 'pinia'
import {
getToken, setToken, removeToken,
getUserInfo, setUserInfo, removeUserInfo
} from '../utils/storage.js'
export const useUserStore = defineStore('user', {
state: () => ({
token: getToken() || '',
userId: 0,
nickname: '',
avatar: ''
}),
getters: {
/**
* 是否已登录
*/
isLoggedIn: (state) => !!state.token && state.token.length > 0
},
actions: {
/**
* 登录 - 设置token和用户信息
*/
login(loginData) {
const { token, userInfo } = loginData
this.token = token
setToken(token)
if (userInfo) {
this.updateUserInfo(userInfo)
}
},
/**
* 登出 - 清除所有用户状态
*/
logout() {
this.token = ''
removeToken()
this.userId = 0
this.nickname = ''
this.avatar = ''
removeUserInfo()
},
/**
* 更新用户信息
*/
updateUserInfo(userInfo) {
if (!userInfo) return
if (userInfo.userId !== undefined) this.userId = userInfo.userId
if (userInfo.nickname !== undefined) this.nickname = userInfo.nickname
if (userInfo.avatar !== undefined) this.avatar = userInfo.avatar
setUserInfo({
userId: this.userId,
nickname: this.nickname,
avatar: this.avatar
})
},
/**
* 从存储恢复用户状态
*/
restoreFromStorage() {
const token = getToken()
const userInfo = getUserInfo()
if (token) {
this.token = token
}
if (userInfo) {
this.userId = userInfo.userId || 0
this.nickname = userInfo.nickname || ''
this.avatar = userInfo.avatar || ''
}
}
}
})