import axios from 'axios' import type { ResponseData } from '@/types/api' import { toast } from 'vue-sonner' const apiClient = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL || '', timeout: 15000, headers: { 'Content-Type': 'application/json', }, }) apiClient.interceptors.request.use((config) => { const token = localStorage.getItem('admin_token') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }) apiClient.interceptors.response.use( (response) => { const data = response.data as ResponseData if (data.success === false) { toast.error(data.message || '操作失败') return Promise.reject(new Error(data.message || '操作失败')) } return response }, (error) => { if (error.response?.status === 401) { localStorage.removeItem('admin_token') window.location.href = '/login' return Promise.reject(error) } const message = error.response?.data?.message || error.message || '网络请求失败' toast.error(message) return Promise.reject(error) }, ) export default apiClient