import { defineStore } from 'pinia' import { ref, computed } from 'vue' import { getSystemConfig } from '@/api/user' export const useUserStore = defineStore('user', () => { const token = ref(localStorage.getItem('token') || '') const username = ref(localStorage.getItem('username') || '') const userId = ref(localStorage.getItem('userId') || null) const nickname = ref(localStorage.getItem('nickname') || '') const signature = ref(localStorage.getItem('signature') || '') const avatar = ref(localStorage.getItem('avatar') || '') const phone = ref(localStorage.getItem('phone') || '') const email = ref(localStorage.getItem('email') || '') const storageUsed = ref(Number(localStorage.getItem('storageUsed')) || 0) const storageLimit = ref(Number(localStorage.getItem('storageLimit')) || 0) const isLoggedIn = computed(() => !!token.value) const setToken = (newToken) => { token.value = newToken localStorage.setItem('token', newToken) } const setUser = (user) => { if (user.id) { userId.value = user.id localStorage.setItem('userId', user.id) } if (user.username) { username.value = user.username localStorage.setItem('username', user.username) } if (user.nickname) { nickname.value = user.nickname localStorage.setItem('nickname', user.nickname) } if (user.signature !== undefined) { signature.value = user.signature || '' localStorage.setItem('signature', user.signature || '') } if (user.avatar !== undefined) { avatar.value = user.avatar || '' localStorage.setItem('avatar', user.avatar || '') } if (user.phone !== undefined) { phone.value = user.phone || '' localStorage.setItem('phone', user.phone || '') } if (user.email !== undefined) { email.value = user.email || '' localStorage.setItem('email', user.email || '') } if (user.storageUsed !== undefined) { storageUsed.value = Number(user.storageUsed) || 0 localStorage.setItem('storageUsed', storageUsed.value) } if (user.storageLimit !== undefined) { storageLimit.value = Number(user.storageLimit) || 0 localStorage.setItem('storageLimit', storageLimit.value) } } const fetchStorageLimit = async () => { try { const res = await getSystemConfig() if (res.data?.storageLimitBytes) { storageLimit.value = res.data.storageLimitBytes localStorage.setItem('storageLimit', storageLimit.value) } } catch (e) { console.error('获取存储配额失败', e) } } const logout = () => { token.value = '' username.value = '' userId.value = null nickname.value = '' signature.value = '' avatar.value = '' phone.value = '' email.value = '' storageUsed.value = 0 storageLimit.value = 0 localStorage.removeItem('token') localStorage.removeItem('username') localStorage.removeItem('userId') localStorage.removeItem('nickname') localStorage.removeItem('signature') localStorage.removeItem('avatar') localStorage.removeItem('phone') localStorage.removeItem('email') localStorage.removeItem('storageUsed') localStorage.removeItem('storageLimit') } return { token, username, userId, nickname, signature, avatar, phone, email, storageUsed, storageLimit, isLoggedIn, setToken, setUser, fetchStorageLimit, logout } })