This commit is contained in:
Putoo
2026-04-27 14:17:52 +08:00
parent 4463f9e810
commit c55a104573
16 changed files with 168 additions and 88 deletions

View File

@@ -3,72 +3,58 @@
* 管理用户登录信息、Token等核心状态
*/
import { defineStore } from 'pinia'
import type { IUserInfo } from '~/types/user'
// 仓库命名规范use+业务域+Store
export const useUserStore = defineStore('user', {
// 1. 原始状态:仅存基础数据,不做任何计算、判断
state: () => ({
userInfo: null as IUserInfo | null,
state: () => ({
token: '',
isLoading: false as boolean
refToken:"",
sid:""
}),
// 2. 只读计算属性:封装派生逻辑,全局只读
getters: {
//判断是否登录主页
isLoginAccount: (state) => !!state.sid,
// 判断是否登录
isLogin: (state) => !!state.token,
// 获取用户ID
userId: (state) => state.userInfo?.id ?? 0,
//token
getToken:(state)=>state.token??"",
// 格式化用户昵称
userNickname: (state) => state.userInfo?.nickname || state.userInfo?.username || '未知用户',
// 刷新token
getRefToken: (state) => state.refToken??"",
// 获取用户头像
userAvatar: (state) => state.userInfo?.avatar || '',
// 获取用户角色
userRole: (state) => state.userInfo?.role || 'user'
// 账号
getSid: (state) => state.sid?? '',
},
// 3. 唯一状态修改入口所有状态变更必须走actions
actions: {
// 设置用户信息与Token
setUserInfo(data: IUserInfo, token: string) {
this.userInfo = data
this.token = token
this.isLoading = false
setToken( token: string,refToken :string) {
this.token = token,
this.refToken = refToken
},
// 仅更新Token
setToken(token: string) {
this.token = token
setSid(sid: string) {
this.sid = sid
},
// 退出登录:清空用户状态
clearUserInfo() {
this.userInfo = null
this.token = ''
this.isLoading = false
},
// 设置登录加载态
setLoginLoading(loading: boolean) {
this.isLoading = loading
},
// 更新用户信息(部分更新)
updateUserInfo(partialData: Partial<IUserInfo>) {
if (this.userInfo) {
this.userInfo = { ...this.userInfo, ...partialData }
}
this.token = '',
this.refToken='',
this.sid=''
}
},
// 4. 持久化配置仅缓存核心状态token + userInfo
persist: {
storage: piniaPluginPersistedstate.localStorage(),
pick: ['token', 'userInfo']
pick: ['token','refToken', 'sid']
}
})