diff --git a/apps/web/public/images/survey-modal/arrow-right.svg b/apps/web/public/images/survey-modal/arrow-right.svg new file mode 100644 index 00000000..035a61cf --- /dev/null +++ b/apps/web/public/images/survey-modal/arrow-right.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/images/survey-modal/bg-vector.svg b/apps/web/public/images/survey-modal/bg-vector.svg new file mode 100644 index 00000000..99e2b6e2 --- /dev/null +++ b/apps/web/public/images/survey-modal/bg-vector.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/images/survey-modal/checkbox-circle.svg b/apps/web/public/images/survey-modal/checkbox-circle.svg new file mode 100644 index 00000000..3cce0f57 --- /dev/null +++ b/apps/web/public/images/survey-modal/checkbox-circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/web/public/images/survey-modal/top-logo.svg b/apps/web/public/images/survey-modal/top-logo.svg new file mode 100644 index 00000000..d1a12e3f --- /dev/null +++ b/apps/web/public/images/survey-modal/top-logo.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/src/components/modal/SurveyModal.tsx b/apps/web/src/components/modal/SurveyModal.tsx index 6c5c0bb9..4144d415 100644 --- a/apps/web/src/components/modal/SurveyModal.tsx +++ b/apps/web/src/components/modal/SurveyModal.tsx @@ -1,5 +1,6 @@ "use client"; +import Image from "next/image"; import { useEffect, useState } from "react"; import { toast } from "@/lib/zustand/useToastStore"; import ModalBase from "./ModalBase"; @@ -12,6 +13,7 @@ type SurveyModalProps = { const SurveyModal = ({ isOpen, onClose, onCloseForWeek }: SurveyModalProps) => { const [dontShowForWeek, setDontShowForWeek] = useState(false); + const surveyUrl = "https://forms.gle/BtdziNrV7gRPLpDt5"; // 모달이 열릴 때마다 체크박스 상태 초기화 useEffect(() => { @@ -32,109 +34,116 @@ const SurveyModal = ({ isOpen, onClose, onCloseForWeek }: SurveyModalProps) => { const handleSurveyClick = () => { try { - const newWindow = window.open("https://forms.gle/MgygciRxAqfXSWJb6", "_blank", "noopener,noreferrer"); + const newWindow = window.open(surveyUrl, "_blank", "noopener,noreferrer"); if (!newWindow) { // 팝업이 차단된 경우 - toast.error( - "팝업 차단으로 설문을 열 수 없습니다. 새 탭에서 수동으로 https://forms.gle/MgygciRxAqfXSWJb6 를 열어주세요.", - ); + toast.error(`팝업 차단으로 설문을 열 수 없습니다. 새 탭에서 수동으로 ${surveyUrl} 를 열어주세요.`); } } catch (error) { // 예외 발생 시 - toast.error("설문 링크를 열 수 없습니다. 수동으로 https://forms.gle/MgygciRxAqfXSWJb6 를 열어주세요."); + toast.error(`설문 링크를 열 수 없습니다. 수동으로 ${surveyUrl} 를 열어주세요.`); } }; return ( -
-
- {/* 파란색 그라디언트 헤더 */} -
- {/* 배경 장식 원들 */} -
-
- -
-
- 교환학생 지원 결과 안내 &
- 만족도 조사 -
-
더욱 풍부한 콘텐츠와 혜택을 기대하세요!
- - {/* 자세히 보기 버튼 */} - -
-
- - {/* 하단 영역 */} -
-
-

안녕하세요, 솔커 모의지원을 이용해 주신 여러분! 💙

- -

드디어 기다리던 지원 결과가 공개되었습니다. 여기까지 준비해온 여러분 모두 고생 많으셨습니다 👏👏

- -

- 더 나은 서비스 제공을 위해 여러분의 소중한 피드백이 필요합니다. 피드백 남겨주시고 커피 쿠폰 받아가세요 - ☕️ -

- -
-

👉 만족도 조사 참여하기

-

• 소요 시간: 약 3분

-

• 응답 기한: 10월 31까지

-
- -

- 결과와 관계없이 지금까지의 노력이 큰 의미가 있습니다. -
- 솔커가 진심으로 응원합니다! 🌟 🚀✨ -

-
-
- - {/* 하단 컨트롤 */} -
-
diff --git a/apps/web/src/lib/zustand/useSurveyModalStore.ts b/apps/web/src/lib/zustand/useSurveyModalStore.ts index b31e9376..e4250b32 100644 --- a/apps/web/src/lib/zustand/useSurveyModalStore.ts +++ b/apps/web/src/lib/zustand/useSurveyModalStore.ts @@ -1,6 +1,8 @@ import { create } from "zustand"; const SURVEY_MODAL_STORAGE_KEY = "surveyModal_hideUntil"; +const SURVEY_START_AT_KST = Date.parse("2026-03-14T00:00:00+09:00"); +const SURVEY_END_AT_KST = Date.parse("2026-03-31T23:59:59+09:00"); interface SurveyModalState { /** 모달 표시 여부 */ @@ -49,10 +51,10 @@ export const useSurveyModalStore = create((set) => ({ // 로그인 페이지에서는 모달을 표시하지 않음 if (isLoginPage) return; - // 10월 31일까지만 모달 표시 (2025년 10월 31일 23:59:59) - const surveyEndDate = new Date("2025-10-31T23:59:59").getTime(); - if (Date.now() > surveyEndDate) { - return; // 설문 기간이 지났으면 모달 표시 안 함 + // 한국시간 기준 설문 진행 기간(2026-03-14 00:00:00 ~ 2026-03-31 23:59:59)에만 모달 표시 + const now = Date.now(); + if (now < SURVEY_START_AT_KST || now > SURVEY_END_AT_KST) { + return; } let hideUntil: string | null = null;