Files
zgty-mas-m/sheep/store/user.js
2025-09-30 00:08:23 +08:00

128 lines
3.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { defineStore } from 'pinia';
import $share from '@/sheep/platform/share';
import { clone, cloneDeep } from 'lodash-es';
import app from './app';
import UserApi from '@/sheep/api/system/user';
import AuthUtil from '@/sheep/api/system/auth';
import sheep from '@/sheep';
// 默认用户信息
const defaultUserInfo = {
avatar: '', // 头像
nickname: '', // 昵称
gender: 0, // 性别
mobile: '', // 手机号
};
// 默认钱包信息
const defaultUserWallet = {
balance: 0, // 余额
};
const user = defineStore({
id: 'user',
state: () => ({
userInfo: clone(defaultUserInfo), // 用户信息
userWallet: clone(defaultUserWallet), // 用户钱包信息
isLogin: !!uni.getStorageSync('token'), // 登录状态
lastUpdateTime: 0, // 上次更新时间
}),
actions: {
// 获取用户信息
async getInfo() {
const { code, data } = await UserApi.getUserInfo();
if (code !== 0) {
return;
}
this.userInfo = data;
return Promise.resolve(data);
},
// 设置 token
setToken(token = '', refreshToken = '') {
if (token === '') {
this.isLogin = false;
uni.removeStorageSync('token');
uni.removeStorageSync('refresh-token');
} else {
this.isLogin = true;
uni.setStorageSync('token', token);
uni.setStorageSync('refresh-token', refreshToken);
this.loginAfter();
}
return this.isLogin;
},
// 更新用户相关信息 (手动限流5 秒之内不刷新)
async updateUserData() {
if (!this.isLogin) {
this.resetUserData();
return;
}
// 防抖5 秒之内不刷新
const nowTime = new Date().getTime();
if (this.lastUpdateTime + 5000 > nowTime) {
return;
}
this.lastUpdateTime = nowTime;
// 获取最新信息
await this.getInfo();
return this.userInfo;
},
// 重置用户默认数据
resetUserData() {
// 清空 token
this.setToken();
// 清空用户相关的缓存
this.userInfo = clone(defaultUserInfo);
this.userWallet = clone(defaultUserWallet);
},
// 登录后,加载各种信息
async loginAfter() {
await this.updateUserData();
// 登录后设置全局分享参数
$share.getShareInfo();
// 提醒绑定手机号
if (app().platform.bind_mobile && !this.userInfo.mobile) {
sheep.$router.go('/pages/login/index', { authType: 'changeMobile' });
}
// 绑定推广员
$share.bindBrokerageUser();
},
// 登出系统
async logout(callApi = false) {
try {
// 如果需要调用服务器登出接口
if (callApi && this.isLogin) {
await AuthUtil.logout();
}
} catch (error) {
console.error('调用登出接口失败:', error);
// 即使服务器登出失败,也继续执行本地登出
} finally {
// 重置本地用户数据
this.resetUserData();
}
return !this.isLogin;
},
},
persist: {
enabled: true,
strategies: [
{
key: 'user-store',
},
],
},
});
export default user;