import React, { useState, useEffect, useCallback } from 'react'; import { Card, Row, Col, Descriptions, Button, Tag, Avatar, Space, Spin, message } from 'antd'; import { useNavigate, useParams } from 'react-router-dom'; import { UserOutlined, ArrowLeftOutlined } from '@ant-design/icons'; import dayjs from 'dayjs'; import { activityUserAPI } from '../../services/api'; const RegistrationDetail = () => { const navigate = useNavigate(); const { id } = useParams(); const [registrationDetail, setRegistrationDetail] = useState(null); const [loading, setLoading] = useState(false); // 获取报名详情数据 const fetchRegistrationDetail = useCallback(async () => { try { setLoading(true); const response = await activityUserAPI.getRegistrationById(id); if (response.code === 0) { const data = response.data; // 转换数据格式以适配前端显示 const transformedData = { id: data.id, volunteerName: data.userName, // userName -> volunteerName phone: data.userPhone, // userPhone -> phone registerTime: data.createTime ? dayjs(data.createTime).format('YYYY-MM-DD HH:mm') : '', // 格式化报名时间 checkInLocation: data.checkinLocation || '', // checkinLocation -> checkInLocation checkInTime: data.checkinTime ? dayjs(data.checkinTime).format('YYYY-MM-DD HH:mm') : '', // 格式化签到时间 checkOutLocation: data.checkoutLocation || '', // checkoutLocation -> checkOutLocation checkOutTime: data.checkoutTime ? dayjs(data.checkoutTime).format('YYYY-MM-DD HH:mm') : '', // 格式化签退时间 status: (data.status === 1 || data.status === '1') ? '1' : (data.status === 2 || data.status === '2') ? '2' : (data.status === 3 || data.status === '3') ? '3' : '未知', // 状态映射 serviceHours: data.serviceHours || 0, // 服务时长 earnedPoints: data.earnedPoints || 0, // 获得积分 activityTitle: data.volActivities?.title || '', // 活动名称 activityCategory: data.volActivities?.categoryDesc || '', // 活动分类 activityStartTime: data.volActivities?.startTime ? dayjs(data.volActivities.startTime).format('YYYY-MM-DD HH:mm') : '', // 活动开始时间 activityEndTime: data.volActivities?.endTime ? dayjs(data.volActivities.endTime).format('YYYY-MM-DD HH:mm') : '', // 活动结束时间 activityLocation: data.volActivities?.location || '', // 活动地点 activityPoints: data.volActivities?.points || 0, // 活动积分 originalData: data, }; setRegistrationDetail(transformedData); } else { message.error('获取报名详情失败'); navigate(-1); } } catch (error) { console.error('获取报名详情失败:', error); message.error('获取报名详情失败'); navigate(-1); } finally { setLoading(false); } }, [id, navigate]); // 页面初始化加载数据 useEffect(() => { if (id) { fetchRegistrationDetail(); } }, [id, fetchRegistrationDetail]); const getStatusColor = (status) => { const colorMap = { '1': 'blue', '2': 'green', '3': 'purple', '未知': 'default', }; return colorMap[status] || 'default'; }; const getStatusText = (status) => { const statusMap = { '1': '已报名', '2': '已签到', '3': '已签退', '未知': '未知', }; return statusMap[status] || status; }; const handleBack = () => { navigate(-1); }; if (loading) { return (
查看志愿者报名详细信息,管理服务时长和积分