import { useEffect, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import Button from '../../components/Button'; import DataTable from '../../components/DataTable'; import Brand from '../../components/Brand'; import { usersApi, errMsg } from '../../api'; import { formatDateRange } from '../../utils/export'; import type { UserDetail } from '../../types'; import { IconClock, IconArrowLeft } from '../../components/Icons'; export default function UserDashboard() { const { id } = useParams(); const navigate = useNavigate(); const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); useEffect(() => { if (!id) return; setLoading(true); usersApi.detail(Number(id)).then(d => { setData(d); setLoading(false); }).catch(e => { setError(errMsg(e, '加载失败')); setLoading(false); }); }, [id]); if (loading) return
加载中...
; if (error) return

{error}

; if (!data) return null; return (

个人义工时长总览

姓名
{data.name}
班级
{data.class || '—'}
义工号
{data.volunteer_no || '—'}
所属工作组
{data.group_name || '—'}
累计义工时长
{Number(data.total_hours || 0).toFixed(2)} 小时
参与活动数
{data.activities.length} 次

参与活动明细

{r.title} }, { key: 'time', title: '活动时间', render: (r: any) => formatDateRange(r.start_time, r.end_time) }, { key: 'hours', title: '时长(小时)', render: (r: any) => {Number(r.hours || 0).toFixed(2)} }, { key: 'remark', title: '备注', render: (r: any) => r.remark || '—' }, ]} data={data.activities} rowKey={(r: any) => r.id} emptyText="暂无参与的活动记录" />
); }