"use client" import { useState, useEffect } from 'react' import { Badge } from './ui/badge' import { Button } from './ui/button' import { Alert, AlertDescription } from './ui/alert' import { Wifi, WifiOff, RefreshCw, Settings } from 'lucide-react' import api from '@/lib/api' export function ApiStatus() { const [isOnline, setIsOnline] = useState(false) const [isLoading, setIsLoading] = useState(true) const [useRealApi, setUseRealApi] = useState(process.env.NEXT_PUBLIC_USE_REAL_API === 'true') const [apiUrl, setApiUrl] = useState('') useEffect(() => { if (useRealApi) { setApiUrl(process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8080/api/v1') } else { setApiUrl(process.env.NEXT_PUBLIC_MOCK_API_URL || 'http://localhost:3001/api') } }, [useRealApi]) const checkApiStatus = async () => { setIsLoading(true) try { if (useRealApi) { // 检查后端 API 健康状态 await api.get('/health') } else { // 检查 Mock API await api.get('/photos') } setIsOnline(true) } catch (error) { setIsOnline(false) console.error('API检查失败:', error) } finally { setIsLoading(false) } } useEffect(() => { checkApiStatus() // 每30秒检查一次API状态 const interval = setInterval(checkApiStatus, 30000) return () => clearInterval(interval) }, [useRealApi]) const toggleApiMode = () => { const newMode = !useRealApi setUseRealApi(newMode) // 在生产环境中,这里应该通过其他方式切换,而不是修改环境变量 if (typeof window !== 'undefined') { localStorage.setItem('useRealApi', newMode.toString()) } } if (process.env.NODE_ENV === 'production') { return null // 生产环境不显示此组件 } return (
{isLoading ? ( ) : isOnline ? ( ) : ( )} {useRealApi ? '后端API' : 'Mock API'}
{apiUrl}
) }