From 6161716d68c91256f8e7c48fea182ae8c3f46d74 Mon Sep 17 00:00:00 2001 From: jeremygan2021 Date: Tue, 24 Feb 2026 16:10:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E5=80=92=E8=AE=A1=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/activity/Detail.jsx | 38 ++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/activity/Detail.jsx b/frontend/src/pages/activity/Detail.jsx index a26395a..e1e890f 100644 --- a/frontend/src/pages/activity/Detail.jsx +++ b/frontend/src/pages/activity/Detail.jsx @@ -55,6 +55,41 @@ const ActivityDetail = () => { refetchOnMount: 'always', }); + const [countdown, setCountdown] = useState(''); + + useEffect(() => { + if (!activity) return; + + const updateCountdown = () => { + // 优先使用 signup_deadline,如果没有则使用 start_time + const targetTime = activity.signup_deadline || activity.start_time; + if (!targetTime) { + setCountdown('待定'); + return; + } + + const targetDate = new Date(targetTime); + const now = new Date(); + const diff = targetDate - now; + + if (diff <= 0) { + setCountdown('已截止'); + return; + } + + const days = Math.floor(diff / (1000 * 60 * 60 * 24)); + const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); + const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)); + + setCountdown(`${days}天 ${hours}小时 ${minutes}分`); + }; + + updateCountdown(); + // 每分钟更新一次 + const timer = setInterval(updateCountdown, 60000); + return () => clearInterval(timer); + }, [activity]); + // Auto-fill form fields when the signup form becomes visible useEffect(() => { if (signupFormVisible && user && activity?.signup_form_config) { @@ -405,8 +440,7 @@ const ActivityDetail = () => {
距离报名截止 - {/* Simple countdown placeholder */} - 3天 12小时 + {countdown || '计算中...'}