api.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import axios from 'axios'
  2. import type { TripFormData, TripPlanResponse } from '@/types'
  3. const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8000'
  4. const apiClient = axios.create({
  5. baseURL: API_BASE_URL,
  6. timeout: 120000, // 2分钟超时
  7. headers: {
  8. 'Content-Type': 'application/json'
  9. }
  10. })
  11. // 请求拦截器
  12. apiClient.interceptors.request.use(
  13. (config) => {
  14. console.log('发送请求:', config.method?.toUpperCase(), config.url)
  15. return config
  16. },
  17. (error) => {
  18. console.error('请求错误:', error)
  19. return Promise.reject(error)
  20. }
  21. )
  22. // 响应拦截器
  23. apiClient.interceptors.response.use(
  24. (response) => {
  25. console.log('收到响应:', response.status, response.config.url)
  26. return response
  27. },
  28. (error) => {
  29. console.error('响应错误:', error.response?.status, error.message)
  30. return Promise.reject(error)
  31. }
  32. )
  33. /**
  34. * 生成旅行计划
  35. */
  36. export async function generateTripPlan(formData: TripFormData): Promise<TripPlanResponse> {
  37. try {
  38. const response = await apiClient.post<TripPlanResponse>('/api/trip/plan', formData)
  39. return response.data
  40. } catch (error: any) {
  41. console.error('生成旅行计划失败:', error)
  42. throw new Error(error.response?.data?.detail || error.message || '生成旅行计划失败')
  43. }
  44. }
  45. /**
  46. * 健康检查
  47. */
  48. export async function healthCheck(): Promise<any> {
  49. try {
  50. const response = await apiClient.get('/health')
  51. return response.data
  52. } catch (error: any) {
  53. console.error('健康检查失败:', error)
  54. throw new Error(error.message || '健康检查失败')
  55. }
  56. }
  57. export default apiClient