初始化项目
This commit is contained in:
commit
60c416e553
79 files changed
+5609
No files matched your search
@@ -0,0 +1,57 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, computed } from 'vue'
|
||||
import { login as loginApi, getUserInfo, logout as logoutApi } from '@/api/auth'
|
||||
import type { LoginRequest, User } from '@/types'
|
||||
|
||||
export const useUserStore = defineStore(
|
||||
'user',
|
||||
() => {
|
||||
const token = ref<string>(localStorage.getItem('token') || '')
|
||||
const userInfo = ref<User | null>(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
|
||||
}
|
||||
)
|
||||
Reference in new issue
Block a user