From 1039a11bbfe245edef4dd6b2f86201515046078a Mon Sep 17 00:00:00 2001 From: chpark Date: Tue, 12 May 2026 23:47:35 +0900 Subject: [PATCH] =?UTF-8?q?feat(mobile):=20=EC=95=88=EB=93=9C=EB=A1=9C?= =?UTF-8?q?=EC=9D=B4=EB=93=9C=20=EB=92=A4=EB=A1=9C=EA=B0=80=EA=B8=B0=20?= =?UTF-8?q?=EC=9D=B4=EC=A4=91=ED=99=95=EC=9D=B8=20+=20=EB=AA=A8=EB=B0=94?= =?UTF-8?q?=EC=9D=BC=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8A=A4=ED=94=8C?= =?UTF-8?q?=EB=9E=98=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - src/components/back-button-guard.tsx 신규: standalone(PWA/TWA) 모드에서만 작동 · 첫 뒤로가기 → sweetalert2 toast("한 번 더 누르면 앱이 종료됩니다") 표시 · 2초 안에 두 번째 뒤로가기 → history.back() 으로 native back 위임 → 앱 종료 · 일반 브라우저(non-standalone) 사용자에게는 영향 없음 - src/app/layout.tsx 의 RootLayout 에 BackButtonGuard 마운트 - src/app/(auth)/m/login/page.tsx 에 1.5초 스플래시 overlay 추가 · 모모 로고 + "모모유통 ERP" + spinner ("로딩 중...") · z-60 fixed inset-0, 1.5s 후 opacity fade-out Co-Authored-By: Claude Opus 4.7 (1M context) --- src/app/(auth)/m/login/page.tsx | 33 +++++++++++++ src/app/layout.tsx | 2 + src/components/back-button-guard.tsx | 72 ++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 src/components/back-button-guard.tsx diff --git a/src/app/(auth)/m/login/page.tsx b/src/app/(auth)/m/login/page.tsx index 2e55d4f..2d8c267 100644 --- a/src/app/(auth)/m/login/page.tsx +++ b/src/app/(auth)/m/login/page.tsx @@ -15,6 +15,7 @@ export default function MobileLoginPage() { const [loading, setLoading] = useState(false); const [remember, setRemember] = useState(true); const [saveCreds, setSaveCreds] = useState(false); + const [splash, setSplash] = useState(true); useEffect(() => { try { @@ -29,6 +30,12 @@ export default function MobileLoginPage() { } }, []); + // 스플래시: 1.5 초 후 자연스럽게 fade-out + useEffect(() => { + const t = setTimeout(() => setSplash(false), 1500); + return () => clearTimeout(t); + }, []); + const handleSubmit = async (e: FormEvent) => { e.preventDefault(); if (!userId || !password) { @@ -70,6 +77,31 @@ export default function MobileLoginPage() { }; return ( + <> + {/* 스플래시 — 1.5초 동안 표시 후 fade-out */} +
+
+
+ MOMO +

모모유통 ERP

+

유통 업무 통합 관리

+
+ + 로딩 중... +
+
+
+
+ ); } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 2074d27..191a33c 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,5 +1,6 @@ import type { Metadata, Viewport } from "next"; import Script from "next/script"; +import BackButtonGuard from "@/components/back-button-guard"; import "./globals.css"; export const metadata: Metadata = { @@ -43,6 +44,7 @@ export default function RootLayout({ /> + {children}