import { useState, useEffect } from 'react' import { Title, Image, Cursor, StudyGuideModal } from '@/components' import { SuccessAlert } from '@/components/layout' import { getBackgroundImage, getPublicPath, getStaticImage } from '@/lib/utils' import { useNavigate, useParams } from 'react-router-dom' import ChoiceDialog1 from './scene2/ChoiceDialog1' import ChoiceDialog2 from './scene2/ChoiceDialog2' import QuizDialog from './scene2/QuizDialog' import { useHuangyanpeiStore, saveHuangyanpeiStore, loadHuangyanpeiStore, } from '@/store/huangyanpeiStore' import { useCursorController } from '@/hooks/useCursorController' const starName = 'huangyanpei' const HuangyanpeiReflectionScene2 = () => { const navigate = useNavigate() const { moduleName } = useParams<{ moduleName: string }>() const [showGuideModal, setShowGuideModal] = useState(true) const [showDialog1, setShowDialog1] = useState(false) const [showDialog2, setShowDialog2] = useState(false) const [choice2, setChoice2] = useState<'铁工科' | '商科' | null>(null) const [showCompleteGuide, setShowCompleteGuide] = useState(false) // 题目显示状态(ChoiceDialog1关闭后) const [showQuiz, setShowQuiz] = useState(false) // 题目成功提示状态 const [showQuizSuccess, setShowQuizSuccess] = useState(false) // 使用持久化的reflection cursor状态 const scene = 'scene2' const { markReflectionCursorVisited, getVisitedReflectionCursors, setReflectionRoute, reflectionScene2Choice, setReflectionScene2Choice, hasShownReflectionCompletionGuide, markReflectionCompletionGuideShown, } = useHuangyanpeiStore() // 从 store 获取已完成的cursor,转换为 Set 用于兼容现有代码 const visitedCursors = getVisitedReflectionCursors(scene) const visited = new Set(visitedCursors) const { isEnabled } = useCursorController({ initialEnabled: [1], dependencies: { 2: [1] }, visited: visitedCursors, }) const progressCount = visited.size const total = 2 const completed = progressCount >= total const subtitle = completed ? '已完成' : `${progressCount}/${total}` const subtitleClassName = completed ? 'text-[#fff998] [text-shadow:_0_8px_8px_rgba(0,0,0,0.35),_0_0_16px_rgba(0,0,0,0.25)]' : undefined // 进入页面时读取缓存中的 choice2 useEffect(() => { let mounted = true const syncChoice2FromCache = async () => { await loadHuangyanpeiStore() if (!mounted) { return } const latestChoice2 = useHuangyanpeiStore.getState().reflectionScene2Choice if (latestChoice2) { setChoice2(latestChoice2) } } void syncChoice2FromCache() return () => { mounted = false } }, []) // 本地状态与 store 中的 choice2 保持同步 useEffect(() => { if (reflectionScene2Choice && reflectionScene2Choice !== choice2) { setChoice2(reflectionScene2Choice) } }, [reflectionScene2Choice, choice2]) // 两个任务都完成后,显示完成提示(仅一次) useEffect(() => { if (completed && choice2 && !hasShownReflectionCompletionGuide(scene)) { const timer = setTimeout(() => { setShowCompleteGuide(true) markReflectionCompletionGuideShown(scene) saveHuangyanpeiStore() }, 500) return () => clearTimeout(timer) } }, [ completed, choice2, scene, hasShownReflectionCompletionGuide, markReflectionCompletionGuideShown, ]) // 处理完成提示的继续按钮点击 const handleCompleteGuideContinue = () => { setShowCompleteGuide(false) // 根据选择决定导航目标 if (choice2 === '铁工科') { setReflectionRoute('reflection3') saveHuangyanpeiStore() navigate(`/${moduleName}/${starName}/reflection3`) } else if (choice2 === '商科') { setReflectionRoute('reflection4') saveHuangyanpeiStore() navigate(`/${moduleName}/${starName}/reflection4`) } } if (!moduleName) { return null } return (