Files
MHXY_WEB_VUE/frontend/src/stores/admin.ts
2026-01-04 17:19:04 +08:00

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
}
})