import { defineStore } from 'pinia' import { ref } from 'vue' import { getUserInfoApi, UserInfo } from '@/service/user' import { Result } from '@/constants/result' export const useUserStore = defineStore( 'user', () => { const userInfo = ref(null) const loginStatus = ref(false) const getUserInfo = async () => { try { const result = await getUserInfoApi() if (result.errorCode === Result.Success.code) { userInfo.value = result.data loginStatus.value = true uni.setStorageSync('userInfo', userInfo.value) return new Result(result.errorCode, userInfo.value, result.errorMsg) } loginStatus.value = false return Result.Fail } catch (error) { const userInfoStorage = uni.getStorageSync('userInfo') if (userInfoStorage) { userInfo.value = userInfoStorage loginStatus.value = true return new Result(Result.Success.code, userInfo.value, Result.Success.message) } else { loginStatus.value = false return Result.Fail } } } const logout = () => { userInfo.value = null loginStatus.value = false uni.removeStorageSync('userInfo') uni.removeStorageSync('token') } return { userInfo, loginStatus, logout, getUserInfo } }, { persist: true } )