"use client"; import { useEffect, useState } from "react"; import { HomeBootOverlay } from "@/app/components/HomeBootOverlay"; import styles from "../vip.module.css"; import { LoginForm } from "./LoginForm"; type LoginModalProps = { open: boolean; onClose: () => void; onVerify: (userId: string) => Promise; onVerifyByEmail?: ( email: string, password: string, user_id?: string ) => Promise; onSuccess: () => void; }; export function LoginModal({ open, onClose, onVerify, onVerifyByEmail, onSuccess }: LoginModalProps) { const [verifyOverlay, setVerifyOverlay] = useState(false); useEffect(() => { if (open) { document.body.style.overflow = "hidden"; } else { document.body.style.overflow = ""; setVerifyOverlay(false); } return () => { document.body.style.overflow = ""; }; }, [open]); useEffect(() => { if (!open) return; const onKeyDown = (e: KeyboardEvent) => { if (e.key === "Escape" && !verifyOverlay) onClose(); }; window.addEventListener("keydown", onKeyDown); return () => window.removeEventListener("keydown", onKeyDown); }, [open, onClose, verifyOverlay]); const handleSuccess = () => { // 勿先 onClose:父级会把 open 设为 false,弹窗卸载会清掉全屏 loading,应在 reload 前保持验证中态 onSuccess(); }; if (!open) return null; return ( <>
e.stopPropagation()} >

登录

{verifyOverlay ? ( ) : null} ); }