1111
This commit is contained in:
@@ -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']
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user