54 lines
1.4 KiB
TypeScript

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<UserInfo>(null)
const loginStatus = ref<boolean>(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
}
)