import { defineStore } from 'pinia' import { ref } from 'vue' import type { AdminInfo } from '@/types' import { getToken, setToken, removeToken, setRefreshToken, removeRefreshToken } from '@/utils/auth' import { login, logout, getInfo } from '@/api/login' import type { LoginParams } from '@/types' export const useUserStore = defineStore('user', () => { const token = ref(getToken() || '') const userInfo = ref(null) async function loginAction(loginForm: LoginParams) { const res = await login(loginForm) if (res.code === 200 && res.data) { // 新 API 返回 token 和 admin const { token: accessToken, refreshToken, admin } = res.data token.value = accessToken setToken(accessToken) if (refreshToken) { setRefreshToken(refreshToken) } // 设置用户信息 if (admin) { userInfo.value = admin } } return res } async function getUserInfo() { const res = await getInfo() if (res.code === 200 && res.data) { userInfo.value = res.data } return res } async function logoutAction() { try { await logout() } finally { token.value = '' userInfo.value = null removeToken() removeRefreshToken() } } function resetToken() { token.value = '' userInfo.value = null removeToken() removeRefreshToken() } return { token, userInfo, loginAction, getUserInfo, logoutAction, resetToken } })