import { ref } from 'vue' import { defineStore } from 'pinia' import $share from '@/peach/platform/share' import $router from '@/peach/router' import UserUtil from '@/peach/api/member/user' import { isEmpty, cloneDeep, clone } from 'lodash' // 默认用户信息 const defaultUserInfo = { avatar: '', // 头像 nickname: '', // 昵称 mobile: '', // 手机号 point: 0, // 积分 particulars: null, } // 默认钱包信息 const defaultWallet = { balance: 0, // 余额 totalExpense: 0, // 总消费 totalRecharge: 0, // 总充值 } // 默认订单信息 const defaultNumData = { unusedCouponCount: 0, orderCount: { allCount: 0, unpaidCount: 0, undeliveredCount: 0, deliveredCount: 0, uncommentedCount: 0, afterSaleCount: 0, }, } const useUserStore = defineStore( 'user', () => { const userInfo = ref(cloneDeep(defaultUserInfo)) const userWallet = ref(clone(defaultWallet)) const userNumData = ref(cloneDeep(defaultNumData)) const isLogin = ref(!!uni.getStorageSync('token')) const lastUpdateTime = ref(0) const lastRoutePage = ref(null) async function getUserInfo() { let res = await UserUtil.getUserInfo() userInfo.value = res.data } async function getWallet() { let res = await UserUtil.getWalletInfo() userWallet.value = res.data } function getNumData() {} function setToken(token, refreshToken) { if (token === '') { isLogin.value = false uni.removeStorageSync('token') uni.removeStorageSync('refresh-token') } else { isLogin.value = true uni.setStorageSync('token', token) uni.setStorageSync('refresh-token', refreshToken) // 成功后处理 loginAfter() } return isLogin.value } function resetUserData() { setToken('') userInfo.value = cloneDeep(defaultUserInfo) userWallet.value = clone(defaultWallet) userNumData.value = cloneDeep(defaultNumData) } async function updateUserData() { const nowTime = new Date().getTime() if (lastUpdateTime.value + 5000 > nowTime) { return } lastUpdateTime.value = nowTime await Promise.all([getUserInfo(), getWallet(), getNumData()]) return userInfo.value } async function loginAfter() { await updateUserData() $share.getShareInfo() $router.go('/pages/index/index') } function logOut() { resetUserData() return !isLogin.value } return { userInfo, userWallet, isLogin, setToken, logOut, loginAfter, lastRoutePage, } }, { persist: { enabled: true, strategies: [ { key: 'user-store', }, ], }, } ) export default useUserStore