frontend layout and infrastructure
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
import { api } from '@/utils/request'
|
||||
|
||||
export interface UserInfo {
|
||||
id: number
|
||||
username: string
|
||||
email: string
|
||||
role: string
|
||||
status: number
|
||||
}
|
||||
|
||||
export const useUserStore = defineStore('user', () => {
|
||||
const token = ref<string | null>(localStorage.getItem('access_token'))
|
||||
const refreshToken = ref<string | null>(localStorage.getItem('refresh_token'))
|
||||
const user = ref<UserInfo | null>(null)
|
||||
|
||||
const isLoggedIn = computed(() => !!token.value)
|
||||
const isAdmin = computed(() => user.value?.role === 'admin')
|
||||
const username = computed(() => user.value?.username || '')
|
||||
|
||||
function setToken(accessToken: string, newRefreshToken: string) {
|
||||
token.value = accessToken
|
||||
refreshToken.value = newRefreshToken
|
||||
localStorage.setItem('access_token', accessToken)
|
||||
localStorage.setItem('refresh_token', newRefreshToken)
|
||||
}
|
||||
|
||||
function setUser(info: UserInfo) {
|
||||
user.value = info
|
||||
localStorage.setItem('user', JSON.stringify(info))
|
||||
}
|
||||
|
||||
async function fetchCurrentUser() {
|
||||
const data = await api.get<UserInfo>('/api/v1/auth/me')
|
||||
setUser(data)
|
||||
return data
|
||||
}
|
||||
|
||||
function logout() {
|
||||
token.value = null
|
||||
refreshToken.value = null
|
||||
user.value = null
|
||||
localStorage.removeItem('access_token')
|
||||
localStorage.removeItem('refresh_token')
|
||||
localStorage.removeItem('user')
|
||||
}
|
||||
|
||||
// 初始化:从 localStorage 恢复用户信息
|
||||
const savedUser = localStorage.getItem('user')
|
||||
if (savedUser) {
|
||||
try {
|
||||
user.value = JSON.parse(savedUser)
|
||||
} catch {
|
||||
user.value = null
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
token,
|
||||
refreshToken,
|
||||
user,
|
||||
isLoggedIn,
|
||||
isAdmin,
|
||||
username,
|
||||
setToken,
|
||||
setUser,
|
||||
fetchCurrentUser,
|
||||
logout,
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user