import { defineStore } from 'pinia' import { ref, computed } from 'vue' import { login as loginApi, getUserInfo } from '@/api/auth' import type { LoginRequest, User } from '@/types' export const useUserStore = defineStore( 'user', () => { const token = ref(localStorage.getItem('token') || '') const userInfo = ref(null) const isLoggedIn = computed(() => !!token.value) const isAdmin = computed(() => userInfo.value?.role === 0) const isDealer = computed(() => userInfo.value?.role === 1) // 登录 const login = async (loginForm: LoginRequest) => { const res = await loginApi(loginForm) token.value = res.token localStorage.setItem('token', res.token) await fetchUserInfo() } // 获取用户信息 const fetchUserInfo = async () => { if (token.value) { try { userInfo.value = await getUserInfo() } catch (error) { console.error('获取用户信息失败', error) logout() } } } // 退出登录 const logout = () => { token.value = '' userInfo.value = null localStorage.removeItem('token') } return { token, userInfo, isLoggedIn, isAdmin, isDealer, login, fetchUserInfo, logout } }, { persist: true } )