import { defineStore } from 'pinia' import { ref, computed } from 'vue' import type { UserDto } from '@/types/api' export type User = UserDto export const useUserStore = defineStore('user', () => { const token = ref(localStorage.getItem('token') || '') const userInfo = ref(null) // 判断是否已登录 const isAuthenticated = computed(() => !!token.value) // 判断是否为管理员 const isAdmin = computed(() => { return userInfo.value?.role === 'ADMIN' || localStorage.getItem('userRole') === 'ADMIN' }) function setToken(newToken: string) { token.value = newToken localStorage.setItem('token', newToken) } function setUserInfo(user: User) { userInfo.value = user localStorage.setItem('userInfo', JSON.stringify(user)) if (user.role) { localStorage.setItem('userRole', user.role) } } function logout() { token.value = '' userInfo.value = null localStorage.removeItem('token') localStorage.removeItem('userInfo') localStorage.removeItem('userRole') } function loadUserInfo() { const saved = localStorage.getItem('userInfo') if (saved) { try { userInfo.value = JSON.parse(saved) } catch (e) { console.error('Failed to parse user info:', e) localStorage.removeItem('userInfo') } } } return { token, userInfo, isAuthenticated, isAdmin, setToken, setUserInfo, logout, loadUserInfo } })