From b1557851aba670668b0fad9b8245fa5decf74c49 Mon Sep 17 00:00:00 2001 From: koreacomp5 Date: Thu, 9 Oct 2025 15:39:46 +0900 Subject: [PATCH] =?UTF-8?q?6.1=20Hero/=EA=B3=B5=EC=A7=80=20=EB=B0=B0?= =?UTF-8?q?=EB=84=88=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8(=EC=9E=90?= =?UTF-8?q?=EB=8F=99/=EC=88=98=EB=8F=99=20=EC=8A=AC=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EB=93=9C)=20o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/components/HeroBanner.tsx | 24 ++++++++++++++++++++++++ src/app/page.tsx | 2 ++ todolist.txt | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/app/components/HeroBanner.tsx diff --git a/src/app/components/HeroBanner.tsx b/src/app/components/HeroBanner.tsx new file mode 100644 index 0000000..9d98c63 --- /dev/null +++ b/src/app/components/HeroBanner.tsx @@ -0,0 +1,24 @@ +"use client"; +import { useEffect, useState } from "react"; + +const defaultSlides = [ + { id: 1, title: "공지사항", subtitle: "중요 공지 확인하기" }, + { id: 2, title: "이벤트", subtitle: "진행중인 이벤트" }, +]; + +export function HeroBanner() { + const [idx, setIdx] = useState(0); + useEffect(() => { + const t = setInterval(() => setIdx((i) => (i + 1) % defaultSlides.length), 3000); + return () => clearInterval(t); + }, []); + const slide = defaultSlides[idx]; + return ( +
+

{slide.title}

+

{slide.subtitle}

+
+ ); +} + + diff --git a/src/app/page.tsx b/src/app/page.tsx index 705ce97..87bd0de 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,9 +1,11 @@ import Image from "next/image"; import { QuickActions } from "@/app/components/QuickActions"; +import { HeroBanner } from "@/app/components/HeroBanner"; export default function Home() { return (
+
); diff --git a/todolist.txt b/todolist.txt index 3d7c76c..0feaded 100644 --- a/todolist.txt +++ b/todolist.txt @@ -33,7 +33,7 @@ 5.4 테마/다크모드 및 반응형 설정 o [메인 화면] -6.1 Hero/공지 배너 컴포넌트(자동/수동 슬라이드) +6.1 Hero/공지 배너 컴포넌트(자동/수동 슬라이드) o 6.2 최근/인기 글 리스트 및 무한스크롤 연동 6.3 권한 기반 빠른 액션 노출 제어 6.4 검색 바 및 결과 페이지 라우팅