diff --git a/src/app/recruit/core/completed/page.tsx b/src/app/recruit/core/completed/page.tsx index 2981862..9d96f5b 100644 --- a/src/app/recruit/core/completed/page.tsx +++ b/src/app/recruit/core/completed/page.tsx @@ -1,6 +1,7 @@ 'use client' import Link from 'next/link' +import { useSearchParams } from 'next/navigation' import { GdgLogo, GdgButton } from '@/components/ui/design-system' function Bullet({ children }: { children: React.ReactNode }) { @@ -15,17 +16,28 @@ function Bullet({ children }: { children: React.ReactNode }) { } export default function RecruitCoreCompleted() { + const searchParams = useSearchParams() + const isClosed = searchParams.get('status') === 'closed' + return (
{/* Header */}
-

Core Member 지원 완료

+

+ {isClosed ? 'Core Member 지원 마감' : 'Core Member 지원 완료'} +

{/* Content Sections - Step 2 UI 이관 */}
+
+ {isClosed + ? '코어 지원 기간이 종료되어 더 이상 지원서를 제출할 수 없습니다.' + : '지원이 정상적으로 완료되었습니다. 이후 일정은 아래 안내를 확인해 주세요.'} +
+

모집 일정

diff --git a/src/app/recruit/core/page.tsx b/src/app/recruit/core/page.tsx index 9dfa92d..ddf8ed7 100644 --- a/src/app/recruit/core/page.tsx +++ b/src/app/recruit/core/page.tsx @@ -61,6 +61,7 @@ const TEAM_OPTIONS = [ { id: 'TECH', label: 'TECH' }, { id: 'PR_DESIGN', label: 'PR·DESIGN' } ] as const +const CORE_RECRUIT_DEADLINE = '2026-03-14T23:59:59+09:00' const unwrapPrefill = (raw: unknown): PrefillPayload | null => { if (!raw || typeof raw !== 'object') return null @@ -202,6 +203,7 @@ export default function RecruitCore() { const [isSubmitting, setIsSubmitting] = useState(false) const [scheduleChecked, setScheduleChecked] = useState(false) const [agreementChecked, setAgreementChecked] = useState(false) + const isRecruitClosed = Date.now() > new Date(CORE_RECRUIT_DEADLINE).getTime() const [formData, setFormData] = useState({ name: '', @@ -242,6 +244,19 @@ export default function RecruitCore() { }, [currentStep, formData, scheduleChecked, agreementChecked]) useEffect(() => { + if (!isRecruitClosed) { + return + } + + alert('코어 지원 기간이 종료되었습니다.') + router.replace('/recruit/core/completed?status=closed') + }, [isRecruitClosed, router]) + + useEffect(() => { + if (isRecruitClosed) { + return + } + let active = true const fetchPrefill = async () => { @@ -278,7 +293,7 @@ export default function RecruitCore() { return () => { active = false } - }, [apiClient, router]) + }, [apiClient, isRecruitClosed, router]) const validateStep = (step: RecruitStep) => { const nextErrors: Record = {} @@ -399,6 +414,12 @@ export default function RecruitCore() { const handleSubmit = async (event: FormEvent) => { event.preventDefault() + if (isRecruitClosed) { + alert('코어 지원 기간이 종료되었습니다.') + router.replace('/recruit/core/completed?status=closed') + return + } + if (!validateStep(currentStep)) return if (currentStep < 3) {