You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.6 KiB

2 weeks ago
import { defineStore } from 'pinia';
export const useUserStore = defineStore('user', {
state: () => ({
loginRes: uni.getStorageSync('loginRes') || null, // 存储登录响应数据
userInfo: uni.getStorageSync('userInfo') || null, // 用户信息
token: uni.getStorageSync('token') || null // 认证令牌
}),
getters: {
isLoggedIn: (state) => !!state.token,
userId: (state) => state.userInfo?.userId || null
},
actions: {
/**
* 设置登录响应数据
* @param {Object} data - 登录响应数据
*/
setLoginRes(data) {
this.loginRes = data;
uni.setStorageSync('loginRes', data);
},
/**
* 设置用户信息
* @param {Object} userInfo - 用户信息
*/
setUserInfo(userInfo) {
this.userInfo = userInfo;
uni.setStorageSync('userInfo', userInfo);
},
/**
* 设置认证令牌
* @param {String} token - 认证令牌
*/
setToken(token) {
this.token = token;
uni.setStorageSync('token', token);
},
/**
* 清除所有用户数据
*/
clearUserData() {
this.loginRes = null;
this.userInfo = null;
this.token = null;
uni.removeStorageSync('loginRes');
uni.removeStorageSync('userInfo');
uni.removeStorageSync('token');
},
/**
* 更新用户信息
* @param {Object} updates - 要更新的用户信息字段
*/
updateUserInfo(updates) {
this.userInfo = { ...this.userInfo, ...updates };
uni.setStorageSync('userInfo', this.userInfo);
}
}
});