100 lines
3.3 KiB
JavaScript
100 lines
3.3 KiB
JavaScript
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 }
|
|
})
|