From 9a613a8f1127c4d604f40fabfb28e3f02bdf454e Mon Sep 17 00:00:00 2001 From: dasosann Date: Thu, 10 Sep 2026 15:15:06 +0900 Subject: [PATCH 01/10] =?UTF-8?q?faetY:=20=EB=A3=B0=EB=A0=9B=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=ED=8E=B8=EC=9D=98=EC=A0=90=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/roulette/_components/RouletteHeader.tsx | 8 ++- .../_components/RouletteResultModal.tsx | 1 + .../free/_components/ScreenRouletteFree.tsx | 2 + app/roulette/special/[amount]/page.tsx | 68 +++++++++---------- 4 files changed, 44 insertions(+), 35 deletions(-) diff --git a/app/roulette/_components/RouletteHeader.tsx b/app/roulette/_components/RouletteHeader.tsx index 6236338..3377580 100644 --- a/app/roulette/_components/RouletteHeader.tsx +++ b/app/roulette/_components/RouletteHeader.tsx @@ -1,6 +1,7 @@ "use client"; import { BackButton } from "@/components/ui/BackButton"; +import { useRouter } from "next/navigation"; import React from "react"; type RouletteHeaderProps = { @@ -9,9 +10,14 @@ type RouletteHeaderProps = { }; const RouletteHeader = ({ title, sidebar }: RouletteHeaderProps) => { + const router = useRouter(); + return (
- + router.push("/roulette")} + /> {title && (
diff --git a/app/roulette/_components/RouletteResultModal.tsx b/app/roulette/_components/RouletteResultModal.tsx index 75839a3..0b4b8a9 100644 --- a/app/roulette/_components/RouletteResultModal.tsx +++ b/app/roulette/_components/RouletteResultModal.tsx @@ -118,6 +118,7 @@ export default function RouletteResultModal({ src={imageSrc} alt={item.label} fill + priority className="object-contain drop-shadow-[0px_6.25px_25px_rgba(0,0,0,0.14)]" />
diff --git a/app/roulette/free/_components/ScreenRouletteFree.tsx b/app/roulette/free/_components/ScreenRouletteFree.tsx index b29516e..e7e8e27 100644 --- a/app/roulette/free/_components/ScreenRouletteFree.tsx +++ b/app/roulette/free/_components/ScreenRouletteFree.tsx @@ -1,5 +1,6 @@ "use client"; import React, { useRef, useState } from "react"; +import { useRouter } from "next/navigation"; import { CircleAlert } from "lucide-react"; import RouletteHeader from "../../_components/RouletteHeader"; import Button from "@/components/ui/Button"; @@ -14,6 +15,7 @@ import RouletteResultModal from "../../_components/RouletteResultModal"; const MOCK_REMAINING_CHANCES = 1; const ScreenRouletteFree = () => { + const router = useRouter(); const remainingChances = MOCK_REMAINING_CHANCES; const hasChances = remainingChances > 0; diff --git a/app/roulette/special/[amount]/page.tsx b/app/roulette/special/[amount]/page.tsx index df747ed..6a72322 100644 --- a/app/roulette/special/[amount]/page.tsx +++ b/app/roulette/special/[amount]/page.tsx @@ -40,23 +40,21 @@ export default function SpecialAmountPage({ {/* 닫기 버튼 */} -
- -
+ router.push("/roulette/special")} + className="text-color-gray-400 mt-[60px] mr-5 mb-4 cursor-pointer self-end transition-opacity hover:opacity-80" + />
{/* 축하 메시지 */} -

- 당첨을 축하해요! +

+ 특별 보상에
+ 당첨됐어요!

{/* 당첨 금액 */} -

+

{displayAmount}원

@@ -64,9 +62,7 @@ export default function SpecialAmountPage({
- - 상품권 - + 상품권
@@ -86,36 +82,34 @@ export default function SpecialAmountPage({ {/* Way 1 */}
-
- - 방법 1 +
+ + 수령 방법 1
- - 마이페이지 확인 + + 부스에서 인증하기
-

- 마이페이지 - 내 아이템에서 상품권을 확인하세요. +

+ 코마 부스에 방문하여 화면과 닉네임을 보여주세요

{/* Way 2 */}
-
- - 방법 2 +
+ + 수령 방법 2
- - 현장 데스크 교환 + + 인스타그램 인증
-

- { - "축제 기간 중 총학생회 부스에 방문하여\n당첨 화면을 보여주고 실물 상품권으로 교환하세요." - } +

+ {"코마 공식 인스타그램 DM으로 \n화면과 닉네임을 보내주세요"}

@@ -125,11 +119,17 @@ export default function SpecialAmountPage({ {/* 하단 영역 (버튼 + 유의사항) */}
- +
- - - 결제 취소 시 지급된 보상이 회수될 수 있어요 + + + 준비 수량 소진 시 동일 가치 이상의 아이템으로 대체될 수 있어요
From 5f4080ab377cd821e7cfcc3ed1a792e7c3203741 Mon Sep 17 00:00:00 2001 From: dasosann Date: Fri, 11 Sep 2026 11:58:34 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/roulette/_components/RouletteHeader.tsx | 26 ++++++++++++++++----- app/roulette/special/[amount]/page.tsx | 11 +++++---- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/app/roulette/_components/RouletteHeader.tsx b/app/roulette/_components/RouletteHeader.tsx index 3377580..d43072f 100644 --- a/app/roulette/_components/RouletteHeader.tsx +++ b/app/roulette/_components/RouletteHeader.tsx @@ -1,23 +1,37 @@ "use client"; import { BackButton } from "@/components/ui/BackButton"; -import { useRouter } from "next/navigation"; +import { useRouter, usePathname } from "next/navigation"; import React from "react"; type RouletteHeaderProps = { title?: React.ReactNode; sidebar?: React.ReactNode; + onBack?: () => void; }; -const RouletteHeader = ({ title, sidebar }: RouletteHeaderProps) => { +const RouletteHeader = ({ title, sidebar, onBack }: RouletteHeaderProps) => { const router = useRouter(); + const pathname = usePathname(); + + const handleBack = () => { + if (onBack) { + onBack(); + return; + } + + // 메인 허브 화면(/roulette)에서는 이전 방문 페이지로 이동 + if (pathname === "/roulette") { + router.back(); + } else { + // 무료/스페셜 등 하위 룰렛 화면에서는 룰렛 메인 허브로 이동 + router.push("/roulette"); + } + }; return (
- router.push("/roulette")} - /> + {title && (
diff --git a/app/roulette/special/[amount]/page.tsx b/app/roulette/special/[amount]/page.tsx index 6a72322..0751a6e 100644 --- a/app/roulette/special/[amount]/page.tsx +++ b/app/roulette/special/[amount]/page.tsx @@ -40,11 +40,14 @@ export default function SpecialAmountPage({
{/* 닫기 버튼 */} - router.push("/roulette/special")} - className="text-color-gray-400 mt-[60px] mr-5 mb-4 cursor-pointer self-end transition-opacity hover:opacity-80" - /> + aria-label="닫기" + className="mt-[60px] mr-5 mb-4 flex h-8 w-8 cursor-pointer items-center justify-center self-end rounded-md transition-opacity hover:opacity-80 focus-visible:ring-2 focus-visible:ring-gray-400 focus-visible:outline-none" + > +