import { useState, useEffect, useMemo, useCallback } from "react"; import { AnimatePresence, motion } from "framer-motion"; import { cn, getStaticImage } from "@/lib/utils"; import { Image, StudyGuideModal } from "@/components"; import { SuccessAlert } from "@/components/layout"; export interface ChoiceDialog2Props { /** 是否可见 */ visible?: boolean; /** 关闭回调 */ onClose?: () => void; /** 选择回调 */ onSelect?: (choice: "铁工科" | "商科") => void; } /** * 第二个选择弹窗:背景图选择 * - 使用蒙版遮罩作为背景 * - 显示两个选择:10_008(箭头指向右边)和旋转后的背景图 */ const ChoiceDialog2 = ({ visible = true, onClose, onSelect, }: ChoiceDialog2Props) => { const maskSrc = getStaticImage("components/蒙版遮罩"); const backSrc = getStaticImage("components/关闭"); const choiceSrc = getStaticImage("huangyanpei/reflection/scene2/10_008"); const [mounted, setMounted] = useState(false); const [showGuide, setShowGuide] = useState(false); const [showSuccessAlert, setShowSuccessAlert] = useState(false); const [selectedChoice, setSelectedChoice] = useState< "铁工科" | "商科" | null >(null); // SSR 兼容 useEffect(() => { setMounted(true); }, []); useEffect(() => { if (visible) { setShowGuide(true); setShowSuccessAlert(false); setSelectedChoice(null); } else { setShowGuide(false); } }, [visible]); const handleClose = useCallback( (e: React.MouseEvent) => { e.stopPropagation(); onClose?.(); }, [onClose] ); const handleChoiceClick = useCallback((choice: "铁工科" | "商科") => { setSelectedChoice(choice); setShowSuccessAlert(true); }, []); const handleSuccessAlertContinue = useCallback(() => { setShowSuccessAlert(false); if (selectedChoice) { onSelect?.(selectedChoice); } onClose?.(); }, [selectedChoice, onSelect, onClose]); // 样式 const overlayStyle = useMemo( () => ({ position: "fixed", inset: 0, zIndex: 9999, pointerEvents: "none", }), [] ); if (!mounted) return null; const content = ( {visible && (
{/* 背景蒙版 */} {maskSrc && ( )} setShowGuide(false)} verticalAlign="center" > 在浦东中学,你可以选未来的方向啦!不管选哪个,黄先生都会支持,因为“三百六十行,行行出状元”! {/* 返回按钮 */} {onClose && ( 返回 )} {/* 内容区域 */}
{/* 选择A:铁工科(箭头指向左边) */}
handleChoiceClick("铁工科")} > {/* 标签A */}
A
{/* 箭头按钮 - 需要旋转180度使其指向左边 */}
铁工科 {/* 文字覆盖层 */}
铁工科
{/* 选择B:商科(箭头指向右边) */}
handleChoiceClick("商科")} > {/* 标签B */}
B
{/* 箭头按钮 */}
商科 {/* 文字覆盖层 */}
商科
)}
); return content; }; export default ChoiceDialog2;