import { ref } from "vue"; import { defineStore } from "pinia"; import $share from "@/peach/platform/share"; import { isEmpty, cloneDeep, clone } from "lodash"; // 默认用户信息 const defaultUserInfo = { avatar: "", // 头像 nickname: "", // 昵称 gender: 0, // 性别 mobile: "", // 手机号 point: 0, // 积分 }; // 默认钱包信息 const defaultWallet = { balance: 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(clone(defaultUserInfo)); const userWallet = ref(clone(defaultWallet)); const userNumData = ref(cloneDeep(defaultNumData)); const isLogin = ref(!!uni.getStorageSync("token")); const lastUpdateTime = ref(0); function getUserInfo() {} function getWallet() {} 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 = clone(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 getUserInfo(); getWallet(); getNumData(); return userInfo.value; } function loginAfter() { updateUserData(); $share.getShareInfo(); } function logOut() { resetUserData(); return !isLogin.value; } return { userInfo, isLogin, setToken, logOut, }; }, { persist: true, strategies: [ { key: "user-store", }, ], } ); export default useUserStore;