49 lines
1.0 KiB
JavaScript
49 lines
1.0 KiB
JavaScript
import { defineStore } from 'pinia'
|
|
import { ref } from 'vue'
|
|
import { login as loginApi, getCurrentUser } from '@/api/auth'
|
|
import router from '@/router'
|
|
|
|
export const useUserStore = defineStore('user', () => {
|
|
const token = ref(localStorage.getItem('token') || '')
|
|
const userInfo = ref(null)
|
|
|
|
// 登录
|
|
async function login(username, password) {
|
|
try {
|
|
const res = await loginApi({ username, password })
|
|
token.value = res.access_token
|
|
localStorage.setItem('token', res.access_token)
|
|
return true
|
|
} catch (error) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
// 获取用户信息
|
|
async function getUserInfo() {
|
|
try {
|
|
const res = await getCurrentUser()
|
|
userInfo.value = res.data
|
|
return res.data
|
|
} catch (error) {
|
|
return null
|
|
}
|
|
}
|
|
|
|
// 登出
|
|
function logout() {
|
|
token.value = ''
|
|
userInfo.value = null
|
|
localStorage.removeItem('token')
|
|
router.push('/login')
|
|
}
|
|
|
|
return {
|
|
token,
|
|
userInfo,
|
|
login,
|
|
getUserInfo,
|
|
logout
|
|
}
|
|
})
|