/** * EventDetail - 事件详情页面 * 使用 DynamicNewsDetailPanel 组件展示事件详情 */ import React, { useState, useEffect } from 'react'; import { useParams, useSearchParams } from 'react-router-dom'; import { Box, Spinner, Center, } from '@chakra-ui/react'; import { decodeEventId } from '@/utils/idEncoder'; import { eventService } from '@/services/eventService'; import { DynamicNewsDetailPanel } from '@components/EventDetailPanel'; import { logger } from '@/utils/logger'; import ErrorPage from '@/components/ErrorPage'; const EventDetail = () => { const { eventId: pathEventId } = useParams(); const [searchParams] = useSearchParams(); // 优先从查询参数获取加密 ID,兼容旧的路径参数 const encodedId = searchParams.get('id'); const eventId = encodedId ? decodeEventId(encodedId) : pathEventId; // 状态 const [eventData, setEventData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // 加载事件基础数据 useEffect(() => { const loadEventData = async () => { if (!eventId) { setError('无效的事件ID'); setLoading(false); return; } try { setLoading(true); setError(null); const response = await eventService.getEventDetail(eventId); setEventData(response.data); } catch (err) { logger.error('EventDetail', 'loadEventData', err, { eventId }); setError(err.message || '加载事件数据失败'); } finally { setLoading(false); } }; loadEventData(); }, [eventId]); // 加载状态 if (loading) { return (
); } // 错误状态 if (error) { return ( window.location.reload()} showBack showHome homePath="/community" /> ); } // 主内容 return ( ); }; export default EventDetail;