125 lines
3.3 KiB
JavaScript
125 lines
3.3 KiB
JavaScript
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
|