61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { ref } from 'vue'
|
|
import { login as loginApi } from '@/api/admin'
|
|
|
|
export const useAdminStore = defineStore('admin', () => {
|
|
const token = ref<string | null>(localStorage.getItem('admin_token'))
|
|
const userInfo = ref<any>(JSON.parse(localStorage.getItem('admin_userInfo') || 'null'))
|
|
|
|
const setToken = (newToken: string) => {
|
|
token.value = newToken
|
|
localStorage.setItem('admin_token', newToken)
|
|
}
|
|
|
|
const setUserInfo = (info: any) => {
|
|
userInfo.value = info
|
|
localStorage.setItem('admin_userInfo', JSON.stringify(info))
|
|
}
|
|
|
|
const clearToken = () => {
|
|
token.value = null
|
|
localStorage.removeItem('admin_token')
|
|
}
|
|
|
|
const clearUserInfo = () => {
|
|
userInfo.value = null
|
|
localStorage.removeItem('admin_userInfo')
|
|
}
|
|
|
|
const login = async (username: string, password: string) => {
|
|
try {
|
|
const response = await loginApi(username, password)
|
|
const data = response.data
|
|
if (data.success && data.data) {
|
|
setToken(data.data.token)
|
|
setUserInfo(data.data.user)
|
|
return { success: true, message: data.message || '登录成功' }
|
|
}
|
|
return { success: false, message: data.message || '登录失败' }
|
|
} catch (error: any) {
|
|
console.error('登录失败:', error)
|
|
return { success: false, message: error.response?.data?.message || '网络错误,请稍后重试' }
|
|
}
|
|
}
|
|
|
|
const logout = () => {
|
|
clearToken()
|
|
clearUserInfo()
|
|
}
|
|
|
|
return {
|
|
token,
|
|
userInfo,
|
|
setToken,
|
|
setUserInfo,
|
|
clearToken,
|
|
clearUserInfo,
|
|
login,
|
|
logout
|
|
}
|
|
})
|