import { defineStore } from 'pinia'; import { computed, ref, watch, } from 'vue'; import sheep from '@/sheep'; import $share from '@/sheep/platform/share'; import { isEmpty, cloneDeep, clone } from 'lodash'; import cart from './cart'; import app from './app'; import { showAuthModal, showSubscribeModal, cancelAutoSign, autoSign } from '@/sheep/hooks/useModal'; import UserApi from '@/sheep/api/member/user'; import PayWalletApi from '@/sheep/api/pay/wallet'; import OrderApi from '@/sheep/api/trade/order'; import CouponApi from '@/sheep/api/promotion/coupon'; import { isAndroid,getAndroidJiGuangId } from '@/sheep/hooks/useApp' import { t, setLanguage } from '@/locale'; const android = computed(() => isAndroid()); const androidJiGuangId = computed(() => getAndroidJiGuangId()); // 默认用户信息 const defaultUserInfo = { avatar: '', // 头像 nickname: '', // 昵称 gender: 0, // 性别 mobile: '', // 手机号 point: 0, // 佣金 username:'', //用户名 socialStatusLevel: "", socialStatusLevelName: "", socialStatusPoint: 0, socialUpNeed: 0, }; // 默认钱包信息 const defaultUserWallet = { integralDO: { currentQuota: 0, // 当前佣金 highQuota: 0, //最高佣金 freezeQuota: 0, //冻结佣金 consumptionPoints:0//消费分 }, descNo: 0, //用户直推人人数 descPrice: 0, //团队昨日贡献值 descTotalPrice: 0, // 团队历史总贡献值 } // 默认订单、优惠券等其他资产信息 const defaultNumData = { unusedCouponCount: 0, orderCount: { allCount: 0, unpaidCount: 0, undeliveredCount: 0, deliveredCount: 0, uncommentedCount: 0, afterSaleCount: 0, }, }; const user = defineStore({ id: 'user', state: () => ({ userInfo: clone(defaultUserInfo), // 用户信息 userWallet: clone(defaultUserWallet), // 用户钱包信息 isLogin: !!uni.getStorageSync('token'), // 登录状态 numData: cloneDeep(defaultNumData), // 用户其他数据 lastUpdateTime: 0, // 上次更新时间 }), actions: { // 获取用户信息 async getInfo() { const { code, data } = await UserApi.getUserInfo(); if (code !== 0) { return; } // console.log("user.js data",data) this.userInfo = data; return Promise.resolve(data); }, // 获得用户钱包 async getWallet() { const { code, data } = await PayWalletApi.getDuserInfo(); if (code !== 0) { return; } // 如果是安卓设备,判断是否注册极光推送 if(android.value){ // 如果后台没返回或者返回来的跟从webview中传来的不一致,拿最新的webview中的拿 if(!data.androidRegisterId || data.androidRegisterId !== androidJiGuangId.value){ await UserApi.updateAndroidJiGuangId(androidJiGuangId.value || '') } } this.userWallet = data; // 为什么要加1 因为这里返回来的人员不包括自身 this.userWallet.descNo = data.descNo + 1 uni.setStorageSync('isSign', data.isSign); }, // 获取订单、优惠券等其他资产信息 getNumData() { OrderApi.getOrderCount().then(res => { if (res.code === 0) { this.numData.orderCount = res.data; } }); CouponApi.getUnusedCouponCount().then(res => { if (res.code === 0) { this.numData.unusedCouponCount = res.data; } }); }, // 添加分享记录 // TODO 非繁人:整理下; async addShareLog(params) { const { error } = await userApi.addShareLog(params); if (error === 0) uni.removeStorageSync('shareLog'); }, // 设置 token async 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); await this.loginAfter(); if (!this.userInfo.language) { const language = uni.getStorageSync('userLanguage') //从缓存中拿到当前的语言 await UserApi.updateUser({language}) setLanguage(language) }else{ setLanguage(this.userInfo.language) } // 用户未绑定公众号,则弹出绑定公众号的弹窗 const openid = await sheep.$platform.useProvider('wechat').getOpenid(true); if(!openid) { uni.showModal({ title: t('common.letcgo'), content: t('common.not_bound_wechat'), confirmText: t('common.bind'), success: function(res) { if (res.confirm) { sheep.$platform.useProvider('wechat').bind() } }, }); } } 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(); this.getWallet(); this.getNumData(); return this.userInfo; }, // 重置用户默认数据 resetUserData() { // 清空 token this.setToken(); // 清空用户相关的缓存 this.userInfo = clone(defaultUserInfo); this.userWallet = clone(defaultUserWallet); this.numData = cloneDeep(defaultNumData); // 清空购物车的缓存 cart().emptyList(); // console.log("重制用户数据 取消自动签到") // 取消自动签到 cancelAutoSign() // 删掉缓存中的isSign uni.removeStorageSync('isSign'); uni.removeStorageSync('openid'); }, // 登录后,加载各种信息 // TODO 非繁人:整理下; async loginAfter() { // 加载用户信息 await this.updateUserData(); // 加载购物车 cart().getList(); // 登录后设置全局分享参数 $share.getShareInfo(); // 自动签到 autoSign(); // 提醒绑定手机号 // if (app().platform.bind_mobile && !this.userInfo.mobile) { // showAuthModal('changeMobile'); // } // 添加分享记录 // TODO 非繁人:整理下; const shareLog = uni.getStorageSync('shareLog'); if (!isEmpty(shareLog)) { this.addShareLog({ ...shareLog, }); } setTimeout(async() => { const openid = await sheep.$platform.useProvider('wechat').getOpenid(true); if(!this.userInfo.subscribe && openid) { // 用户未关注,则弹出关注公众号的弹窗 // console.log("user.js loginAfter() 当前用户未关注,弹出关注公众号的弹窗") showSubscribeModal(); } }, 800); }, // 登出系统 async logout() { this.resetUserData(); return !this.isLogin; } }, persist: { enabled: true, strategies: [{ key: 'user-store', }, ], }, }); export default user;