import { useState, useEffect } from 'react' import { ExhibitOverlay, Title, Image, Cursor, Video, GuideSteps, GuideStepsItem, MultipleChoiceQuizPanel, } from '@/components' import { getBackgroundImage, getStaticImage, getPublicPath } from '@/lib/utils' import { useNavigate, useParams } from 'react-router-dom' import { useChenyunStore, saveChenyunStore } from '@/store/chenyunStore' import { usePuzzleAnimation } from '@/contexts/PuzzleAnimationContext' import { useCursorController } from '@/hooks/useCursorController' import SuccessAlert from '@/components/layout/alert/success-alert' import ScaledPortal from '@/components/layout/ScaledPortal' // starName 固定为 chenyun const starName = 'chenyun' // 展品 ID 与资源路径映射 const exhibitSrcMap: Record<1 | 2 | 3, string> = { 1: 'chenyun/place5/场景5展品1', 2: 'chenyun/place5/场景5展品2', 3: 'chenyun/place5/场景5展品3', } // 展品描述映射(目前未使用,后续如需在展品弹窗中显示可恢复) // const exhibitDescriptionMap: Record<1 | 2 | 3, string> = { // 1: "", // 2: "延安时期因为国民党的封锁,陕甘宁边区经济困难。陈云转战陕甘宁边区主持财经工作,他遇到了很多经济难题。1944年新春伊始,陈云开始担任西北财经办事处副主任,工作转到财经方面,这是陈云以主要精力从事领导经济工作的开始。当时,陕甘宁边区在国民党严密封锁下,财经状况严峻,边区物价猛涨,老百姓日常生活必需的布匹和粮食十分缺乏。国民党顽固派封锁边区,企图“不让一粒粮、一尺布进入边区”,同时千方百计阻止边区食盐出口。", // 3: "", // }; const ChenyunPlace5 = () => { const navigate = useNavigate() const { moduleName } = useParams<{ moduleName: string }>() // 获取碎片动画触发方法 const { triggerPuzzleAnimation } = usePuzzleAnimation() const [activeExhibitId, setActiveExhibitId] = useState<1 | 2 | 3 | null>(null) // 使用持久化的访问状态 const place = 'place5' const { markExhibitVisited, getVisitedExhibits, setLastVisitedPlace } = useChenyunStore() useEffect(() => { setLastVisitedPlace(place) }, [setLastVisitedPlace]) // 从 store 获取已访问的展品,转换为 Set 用于兼容现有代码 const visitedExhibits = getVisitedExhibits(place) const visited = new Set(visitedExhibits) const { isEnabled } = useCursorController({ initialEnabled: [1, 2], dependencies: { 3: [1, 2] }, visited, }) const [videoVisible3, setVideoVisible3] = useState(false) const [quiz3Visible, setQuiz3Visible] = useState(false) const [successAlert3Visible, setSuccessAlert3Visible] = useState(false) // 展品1引导对话 const [guideVisible, setGuideVisible] = useState(false) const [guideStep, setGuideStep] = useState(0) const handleOpenExhibit = (index: 1 | 2 | 3) => { if (index === 3) { // 展品3:播放视频,不打开展品 setVideoVisible3(true) return } if (index === 2) { setGuideVisible(true) setGuideStep(0) } setActiveExhibitId(index) } const progressCount = visited.size const total = 3 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 return (