import React, { useState, useEffect, useCallback } from 'react';
import { Card, Row, Col, Descriptions, Avatar, Tag, Table, Statistic, Spin, message } from 'antd';
import { UserOutlined } from '@ant-design/icons';
import { useParams, useNavigate } from 'react-router-dom';
import { applicationAPI } from '../../services/api';
import dayjs from 'dayjs';
const VolunteerDetail = () => {
const { id } = useParams();
const navigate = useNavigate();
const [loading, setLoading] = useState(false);
const [volunteerDetail, setVolunteerDetail] = useState(null);
const [activityRecords, setActivityRecords] = useState([]);
// 获取志愿者详情数据
const fetchVolunteerDetail = useCallback(async () => {
try {
setLoading(true);
const response = await applicationAPI.getApplicationById(id);
if (response.code === 0) {
const data = response.data;
// 转换状态显示
const statusMap = {
'0': '待审核',
'1': '审核通过',
'2': '审核不通过'
};
// 设置志愿者基本信息
setVolunteerDetail({
id: data.id,
name: data.name,
phone: data.phone,
idCard: data.idCard,
status: statusMap[data.status] || data.status,
totalPoints: data.applicationsCount?.points || 0,
activities: data.applicationsCount?.activityNum || 0,
serviceHours: data.applicationsCount?.serviceHours || 0,
});
// 设置活动记录数据
const activities = data.activitiesList?.map(item => ({
key: item.id || Math.random(),
activityName: item.title,
date: item.createTime ? dayjs(item.createTime).format('YYYY-MM-DD') : '',
points: item.earnedPoints || 0,
status: item.status === '1' ? '已报名' : item.status === '2' ? '已签到' : item.status === '3' ? '已签退' : '未知',
})) || [];
setActivityRecords(activities);
} else {
message.error('获取志愿者详情失败');
navigate(-1);
}
} catch (error) {
console.error('获取志愿者详情失败:', error);
message.error('获取志愿者详情失败');
navigate(-1);
} finally {
setLoading(false);
}
}, [id, navigate]);
// 页面初始化加载数据
useEffect(() => {
if (id) {
fetchVolunteerDetail();
}
}, [id, fetchVolunteerDetail]);
const activityColumns = [
{
title: '活动名称',
dataIndex: 'activityName',
key: 'activityName',
},
{
title: '参与日期',
dataIndex: 'date',
key: 'date',
},
{
title: '获得积分',
dataIndex: 'points',
key: 'points',
render: (points) => +{points},
},
{
title: '状态',
dataIndex: 'status',
key: 'status',
render: (status) => {
const statusColorMap = {
'已报名': 'blue',
'已签到': 'green',
'已签退': 'purple',
'未知': 'default',
};
return
查看志愿者的详细信息和活动记录