chore: 更新素材和组件优化

- 更新展品图片(鲁迅/毛泽东/孙中山/黄炎培/聂耳/张乐平故居)
- 新增点击查看图标、报纸素材
- 优化视频组件、拼图组件、展品组件
- 更新陈云音频资源
- 新增输入验证文档和工具函数
- 组件布局和动画优化

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
zhongyidianandClaude Opus 4.8 committed 2026-06-21 21:50:40 +08:00
1 parent 73d02eb62d
commit 73f6df92ce
130 files changed
+2345 -759

No files matched your search

@@ -453,6 +453,9 @@ const RongdeshengInternalization = () => {
anchors={anchors}
playsInline
controls
controlsOnReplay
skipKey="rongdesheng_internalization_video"
showReadonlyProgress
onCanPlay={handleVideoCanPlay}
onEnded={() => {
setShowVideo(false)
+8
View File
@@ -211,6 +211,8 @@ const RongdeshengPlace2 = () => {
autoPlay
playsInline
showSkipButton
skipKey="rongdesheng_place2_video1"
showReadonlyProgress
onEnded={handleVideoEnded}
onSkip={handleVideoEnded}
/>
@@ -222,6 +224,8 @@ const RongdeshengPlace2 = () => {
autoPlay
playsInline
showSkipButton
skipKey="rongdesheng_place2_video2"
showReadonlyProgress
onEnded={handleVideoEnded}
onSkip={handleVideoEnded}
/>
@@ -233,6 +237,8 @@ const RongdeshengPlace2 = () => {
autoPlay
playsInline
showSkipButton
skipKey="rongdesheng_place2_video3"
showReadonlyProgress
onEnded={handleVideoEnded}
onSkip={handleVideoEnded}
/>
@@ -244,6 +250,8 @@ const RongdeshengPlace2 = () => {
autoPlay
playsInline
showSkipButton
skipKey="rongdesheng_place2_video4"
showReadonlyProgress
onEnded={handleVideoEnded}
onSkip={handleVideoEnded}
/>
+2
View File
@@ -186,6 +186,8 @@ const RongdeshengPlace3 = () => {
autoPlay
playsInline
showSkipButton
skipKey="rongdesheng_place3_video"
showReadonlyProgress
onEnded={handleVideoEnded}
onSkip={handleVideoEnded}
/>
+4
View File
@@ -206,6 +206,8 @@ const RongdeshengPlace4 = () => {
autoPlay
playsInline
showSkipButton
skipKey="rongdesheng_place4_video1"
showReadonlyProgress
onEnded={handleVideoEnded}
onSkip={handleVideoEnded}
/>
@@ -218,6 +220,8 @@ const RongdeshengPlace4 = () => {
autoPlay
playsInline
showSkipButton
skipKey="rongdesheng_place4_video2"
showReadonlyProgress
onEnded={handleEndingVideoEnded}
onSkip={handleEndingVideoEnded}
/>
+14 -2
View File
@@ -2,7 +2,7 @@ import { Image, StudyGuideModal, Video } from '@/components'
import { useState } from 'react'
import { useNavigate, useParams } from 'react-router-dom'
import { getBackgroundImage, getPublicPath, getStaticImage } from '@/lib/utils'
import { useRongdeshengStore } from '@/store/rongdeshengStore'
import { saveRongdeshengStore, useRongdeshengStore } from '@/store/rongdeshengStore'
import { FinalScene } from './components/FinalScene'
import { HintPanel } from './components/HintPanel'
import { ModuleNavigation } from './components/ModuleNavigation'
@@ -214,6 +214,7 @@ const RongdeshengReflection = () => {
},
}))
markReflectionVideoViewed(currentModuleId, videoId)
saveRongdeshengStore()
setVideoPlayingState({ isPlaying: false, currentVideoId: null, currentVideoSrc: null })
}
@@ -225,6 +226,7 @@ const RongdeshengReflection = () => {
[currentModuleId]: { ...prev[currentModuleId], completed: true },
}))
markReflectionCompleted(currentModuleId)
saveRongdeshengStore()
if (currentModuleId === 'scene3') {
triggerPuzzleAnimation(14)
}
@@ -322,6 +324,12 @@ const RongdeshengReflection = () => {
src={videoPlayingState.currentVideoSrc}
autoPlay
showSkipButton
skipKey={
videoPlayingState.currentVideoId
? `rongdesheng_reflection_${videoPlayingState.currentVideoId}`
: undefined
}
showReadonlyProgress
onEnded={handleVideoEnded}
className="fixed inset-0 z-50 w-full h-full bg-black"
/>
@@ -378,8 +386,11 @@ const RongdeshengReflection = () => {
setCourseTimeProgress(20)
setFinalVideoStage('ended')
markReflectionFinalCompleted()
saveRongdeshengStore()
}}
onExit={() => {
navigate(`/${moduleName}/${starName}/home`)
}}
onExit={() => navigate(`/${moduleName}/${starName}/home`)}
/>
{/* 学习引导弹窗:首次进入时显示 */}
@@ -388,6 +399,7 @@ const RongdeshengReflection = () => {
onContinue={() => {
setShowGuide(false)
markReflectionGuideShown()
saveRongdeshengStore()
}}
audioSrc={getPublicPath('audio/rongdesheng/mp3_rongdesheng_31.mp3')}
firstLineIndent="2em"
@@ -85,8 +85,7 @@ export const MODULES: Module[] = [
resultContent:
'护厂抗争的胜利,是民族工业坚守爱国初心的体现,也是国人联合“反抗压迫、团结抗争”的印证!',
resultImage: 'rongdesheng/reflection/场景2结算',
wrongHint:
'荣氏兄弟坚守“实业救国”初心,拒绝洋行干涉企业经营,不愿民族产业沦为外资附庸!试试其他方案吧~',
wrongHint: '荣氏兄弟坚守“实业救国”初心,绝不会将民族产业拱手让人!试试其他方案吧~',
audio: { wrongHint: '' },
},
{
@@ -94,7 +93,7 @@ export const MODULES: Module[] = [
title: '民生坚守',
backgroundImage: 'rongdesheng/reflection/场景3选中',
question:
'时局动荡,棉花原料涨价,工厂盈利下滑,职工生活面临困难。荣德生面对既要维持生产,又要保障职工生活,该怎么做?',
'时局动荡,棉花原料涨价,工厂盈利下滑,职工生活面临困难。既要维持生产,又要保障职工生活,该怎么做?',
options: [
{ id: 'opt3-1', text: 'A.削减职工工资,降低运营成本', isCorrect: false },
{
@@ -176,7 +175,7 @@ export const MODULES: Module[] = [
title: '革新突围',
backgroundImage: 'rongdesheng/reflection/场景5选中',
question:
'抗战胜利后,洋纱、洋布卷土重来,申新设备陈旧、技术落后,面临产品竞争力不足的困境,荣德生如何通过技术革新让民族纱厂站稳脚跟?',
'抗战胜利后,洋纱、洋布卷土重来,申新设备陈旧、技术落后,面临产品竞争力不足的困境,如何通过技术革新让民族纱厂站稳脚跟?',
options: [
{
id: 'opt5-1',