宣传部义工时长记录系统 · 数据导出报告
义工数据汇总导出 | 生成时间:{utc8DateTimeStamp()}
{preview.users?.length ? (
01 部员名册({preview.users.length} 人)
[i + 1, u.class, u.name, u.volunteer_no || '-', u.group_name || '-'])} />
) : null}
{preview.activities?.length ? (
02 活动列表({preview.activities.length} 个)
[i + 1, a.title, formatDateRange(a.start_time, a.end_time), a.groups_name || '全部'])} />
) : null}
{preview.hours?.length ? (
03 全部时长明细({preview.hours.length} 条)
[i + 1, h.class, h.name, h.volunteer_no || '-', h.group_name || '-', h.activity_title, Number(h.hours || 0).toFixed(2), h.remark || '-'])} />
) : null}
{preview.user_totals?.length ? (
04 部员总时长排行
[i + 1, u.class, u.name, u.volunteer_no || '-', u.group_name || '-', u.activity_count, Number(u.total_hours || 0).toFixed(2)])} />
) : null}
{preview.user_activities?.length ? (
05 部员参加的活动
{preview.user_activities.map(u => (
{u.class} {u.name}
义工号:{u.volunteer_no || '—'}
{u.group_name ? 工作组:{u.group_name} : null}
共 {u.activities.length} 次活动
{u.activities.length === 0 ? (
未参与任何活动
) : (
[a.title, formatDateRange(a.start_time, a.end_time), Number(a.hours || 0).toFixed(2), a.remark || '-'])} />
)}
))}
) : null}
{preview.activity_matrix?.activities?.length ? (
06 活动时长总表(矩阵)
{preview.activity_matrix.users.length} 人 × {preview.activity_matrix.activities.length} 活动
| 部员 |
义工号 |
{preview.activity_matrix.activities.map((a, i) => (
{a.title}
{String(a.start_time || '').slice(0, 10)}
|
))}
总时长 |
{preview.activity_matrix.users.map((u, ri) => (
| {u.name} |
{u.volunteer_no || '-'} |
{preview.activity_matrix!.activities!.map((a, i) => {
const v = Number(u[String(a.id)] || 0);
const cls = v > 0
? 'text-primary-700 font-semibold bg-primary-50/40'
: 'text-gray-400';
return (
{v > 0 ? v.toFixed(2) : '—'}
|
);
})}
{Number(u._total || 0).toFixed(2)}
|
))}
) : null}