/** @format */ import { ref } from 'vue' import { defineStore } from 'pinia' import { useCommonStore } from './common' import { loginApi, logoutApi } from '~/api/model/user' interface LoginRequestData { email: string password: string type: 'google' | 'email' } export const useUserStore = defineStore( 'user', () => { const userInfo = shallowRef() const token = shallowRef() const isLogin = computed(() => !!token.value) const avatar = computed(() => userInfo.value?.avatar) const nickname = computed(() => userInfo.value?.email) /** 登录操作 */ const login = async (params: LoginRequestData) => { try { const data: any = await loginApi(params) const { token: userToken, userInfo: userDataInfo } = data userInfo.value = userDataInfo token.value = userToken ElMessage({ message: 'Login success', type: 'success', plain: true, }) const commonStore = useCommonStore() commonStore.pushAccount({ email: userDataInfo.email, name: userDataInfo.annualPurchaseAmount, type: params.type }) } catch (error) { return Promise.reject(error) } } /** 退出登录操作 */ const logout = async () => { try { if (token.value) { await logoutApi() document.cookie = 'user=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/' ElMessage({ message: 'Exit successful', type: 'success', plain: true, }) } } finally { token.value = null userInfo.value = undefined const router = useRouter() router.push('/') } } return { userInfo, token, login, logout, isLogin, avatar, nickname } }, { persist: true, }, )