fix: 修复开发/测试包模拟进度被易班同步覆盖的问题

进度模拟面板写入 puzzleStore 后,App 启动时易班同步会将其覆盖;
现在在同步完成后按 sessionStorage 中保存的模式重放模拟进度,
确保测试包的"到达某故居/全流程完成"调试入口生效。

同时纳入近期未提交的页面、组件、资源与环境变量改动。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
zhongyidianandClaude Opus 4.7 committed 2026-05-23 10:19:36 +08:00
1 parent 6d40e19346
commit 49ecabbf3a
155 files changed
+1956 -724

No files matched your search

+65 -2
View File
@@ -1,14 +1,37 @@
import { getBackgroundImage, getStaticImage } from '@/lib/utils'
import { Image } from '@/components'
import { useState } from 'react'
import { AnimatePresence, motion } from 'framer-motion'
import { getBackgroundImage, getPublicPath, getStaticImage } from '@/lib/utils'
import { Image, Video } from '@/components'
import { useNavigate } from 'react-router-dom'
const Home = () => {
const navigate = useNavigate()
const [showIntroVideo, setShowIntroVideo] = useState(false)
return (
<div
className="w-full h-full bg-cover bg-center bg-no-repeat"
style={{ backgroundImage: getBackgroundImage('home/首页底图') }}
>
{/* 课程简介 */}
<AnimatePresence>
{!showIntroVideo && (
<motion.div
className="absolute right-0 top-0"
initial={{ opacity: 0, scale: 0.92, x: 24 }}
animate={{ opacity: 1, scale: 1, x: 0 }}
exit={{ opacity: 0, scale: 0.92, x: 24 }}
transition={{ duration: 0.22, ease: 'easeOut' }}
>
<Image
src={getStaticImage('home/课程简介')}
button
onClick={() => setShowIntroVideo(true)}
/>
</motion.div>
)}
</AnimatePresence>
<Image
onClick={() => {
navigate('/menu')
@@ -17,6 +40,46 @@ const Home = () => {
button
src={getStaticImage('home/首页-进入')}
/>
<AnimatePresence>
{showIntroVideo && (
<motion.div
className="absolute inset-0 z-50 flex items-center justify-center bg-black/65"
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
transition={{ duration: 0.28, ease: 'easeInOut' }}
>
<motion.div
className="relative w-full h-full overflow-hidden bg-black"
initial={{ opacity: 0, scale: 1.04 }}
animate={{ opacity: 1, scale: 1 }}
exit={{ opacity: 0, scale: 1.02 }}
transition={{ duration: 0.32, ease: [0.25, 0.46, 0.45, 0.94] }}
>
<Video
className="w-full h-full"
src={getPublicPath('video/intro.mp4')}
autoPlay
controls
/>
<motion.div
className="absolute right-0 top-0 z-10"
initial={{ opacity: 0, scale: 0.92, x: 24 }}
animate={{ opacity: 1, scale: 1, x: 0 }}
exit={{ opacity: 0, scale: 0.92, x: 24 }}
transition={{ duration: 0.22, ease: 'easeOut', delay: 0.08 }}
>
<Image
src={getStaticImage('home/点击关闭')}
button
onClick={() => setShowIntroVideo(false)}
/>
</motion.div>
</motion.div>
</motion.div>
)}
</AnimatePresence>
</div>
)
}