feat: 清理无用的 MacOS 文件和更新组件,提升代码整洁性

- 删除多个无用的 MacOS 生成文件,减少项目冗余。
- 在 layout 组件中添加 ScaledPortal 和相关类型,增强组件功能。
- 更新 puzzleData 中的学校名称,确保信息准确性。
- 调整 internalization 组件中的提示文本,提升用户体验。
- 在多个场景中引入新的选择题和成功提示,增强学习互动性。
This commit is contained in:
zhongyidian committed 2026-02-01 14:37:14 +08:00
1 parent a365964f54
commit 45dd648d21
60 files changed
+558 -63

No files matched your search

+69 -17
View File
@@ -7,7 +7,6 @@ import {
type VideoRef,
type DragFillResult,
LetterToChenyun,
StudyGuideModal,
EndingOverlay,
} from "@/components";
import { getBackgroundImage, getPublicPath, getStaticImage } from "@/lib/utils";
@@ -37,11 +36,15 @@ type QuizAnchor = {
// 星名固定为 chenyun
const starName = "chenyun";
// 通用提示文案
const MULTIPLE_DEFAULT_ERROR =
"你的选择还不够全面哦~请你再想想吧!";
// 锚点数据:可根据实际视频时长调整 time
const QUIZ_ANCHORS: QuizAnchor[] = [
{
id: "quiz-1",
time: Math.ceil(5.52 * 60), //5.52分钟
time: 60 * 5 + 52, //5.52分钟
title: "题目1",
prompt: "陈云经济思想的核心内容指的是(\xa0\xa0\xa0\xa0)。",
type: "multiple",
@@ -54,11 +57,11 @@ const QUIZ_ANCHORS: QuizAnchor[] = [
{ value: "C", label: "正确的处理好计划与市场的关系", isCorrect: true },
{ value: "D", label: "经济建设的目的论", isCorrect: true },
],
explanation: "鸟笼比喻是正确的处理好计划与市场的关系的一个发展阶段",
explanation: "鸟笼比喻是陈云提出的一个比喻。请你再想想吧!",
},
{
id: "quiz-2",
time: Math.ceil(10.01 * 60),
time: 60 * 10 + 1, //10.01分钟
title: "题目2",
prompt: "陈云说过以下哪些话能着重体现出他的经济思想?",
type: "multiple",
@@ -76,6 +79,7 @@ const QUIZ_ANCHORS: QuizAnchor[] = [
isCorrect: true,
},
],
explanation: "你的选择还不够全面哦~请你再想想吧!",
},
{
id: "quiz-3",
@@ -95,6 +99,39 @@ const QUIZ_ANCHORS: QuizAnchor[] = [
{ id: "blank-3", label: "____" },
],
},
{
id: "quiz-4",
time: 60 * 5 + 21, // 5:21
title: "题目4",
prompt: "以下哪些陈云的生活小事值得我们学习?",
type: "multiple",
options: [
{ value: "A", label: "光盘行动,不浪费粮食", isCorrect: true },
{ value: "B", label: "打了 32 个补丁的棉坎肩他穿了 38 年", isCorrect: true },
{ value: "C", label: "2-3 厘米长的铅笔头仍然留用", isCorrect: true },
{ value: "D", label: "搓肥皂时关闭水龙头,节约用水", isCorrect: true },
],
explanation: MULTIPLE_DEFAULT_ERROR,
},
{
id: "quiz-5",
time: 60 * 16 + 23, // 16:23
title: "题目5",
prompt: "新时代的青年要从陈云身上学习哪些精神品质?",
type: "multiple",
options: [
{ value: "A", label: "谦虚谨慎,实事求是的工作作风", isCorrect: true },
{ value: "B", label: "勤俭朴素,艰苦奋斗的优良作风", isCorrect: true },
{ value: "C", label: "密切联系群众,关心群众生活", isCorrect: true },
{
value: "D",
label: "只唯上的工作作风",
isCorrect: false,
explanation: "\"只唯上\"的工作作风与陈云同志实事求是的精神相悖。请你再想想吧!",
},
],
explanation: MULTIPLE_DEFAULT_ERROR,
},
];
const ChenyunInternalization = () => {
@@ -103,7 +140,6 @@ const ChenyunInternalization = () => {
// 获取碎片动画触发方法
const { triggerPuzzleAnimation } = usePuzzleAnimation();
const [activeSuccess, setActiveSuccess] = useState<string | null>(null);
const [successContent, setSuccessContent] = useState<string>("");
const [resumeCallback, setResumeCallback] = useState<(() => void) | null>(
null
);
@@ -171,6 +207,7 @@ const ChenyunInternalization = () => {
once: true,
afterResume: "remove",
render: ({ resume }) => {
// 拖拽题:处理选项拖拽与校验
const handleDragChange = (val: DragFillResult[]) => {
setDragQuizValues((prev) => ({ ...prev, [item.id]: val }));
setDragQuizErrors((prev) => ({ ...prev, [item.id]: "" }));
@@ -187,13 +224,12 @@ const ChenyunInternalization = () => {
if (isCorrect) {
setActiveSuccess(item.id);
setSuccessContent("回答正确,请继续探索。");
setResumeCallback(() => resume);
} else {
setDragQuizErrors((prev) => ({
...prev,
[item.id]:
"再想一想,不唯上才是陈云的工作作风,不是只唯上!",
"这不是陈云的工作作风。请你再想想吧!",
}));
}
};
@@ -217,10 +253,9 @@ const ChenyunInternalization = () => {
<SuccessAlert
visible={activeSuccess === item.id}
title="恭喜你, 选择正确!"
content={successContent}
content="回答正确,请继续探索。"
onContinue={() => {
setActiveSuccess(null);
setSuccessContent("");
triggerPuzzleAnimation(16);
setDragQuizValues((prev) => {
const next = { ...prev };
@@ -261,13 +296,32 @@ const ChenyunInternalization = () => {
label: `${opt.value}. ${opt.label}`,
}))}
correctAnswer={correctAnswers}
errorMessage={
item.explanation || "再思考一下,注意选择所有正确答案。"
}
errorMessage={(selectedValues) => {
// 题目1:选到“鸟笼比喻(B)”给专属提示;否则未选全给“还不够全面”提示
if (item.id === "quiz-1") {
if (selectedValues.includes("B")) {
return (
item.explanation ||
"鸟笼比喻是陈云提出的一个比喻。请你再想想吧!"
);
}
return MULTIPLE_DEFAULT_ERROR;
}
// 题目5:选到“D”给专属提示;否则未选全给“还不够全面”提示
if (item.id === "quiz-5") {
if (selectedValues.includes("D")) {
const pickedD = item.options.find(
(o) => o.value === "D"
);
return pickedD?.explanation || MULTIPLE_DEFAULT_ERROR;
}
return MULTIPLE_DEFAULT_ERROR;
}
return item.explanation || MULTIPLE_DEFAULT_ERROR;
}}
onSubmit={(values: string[], isCorrect: boolean) => {
if (isCorrect) {
setActiveSuccess(item.id);
setSuccessContent("回答正确,请继续探索。");
if (item.id === "quiz-1") triggerPuzzleAnimation(15);
setResumeCallback(() => resume);
}
@@ -275,11 +329,10 @@ const ChenyunInternalization = () => {
/>
<SuccessAlert
visible={activeSuccess === item.id}
title="恭喜你, 选择正确!"
content={successContent}
// title="恭喜你, 选择正确!"
// content="回答正确,请继续探索。"
onContinue={() => {
setActiveSuccess(null);
setSuccessContent("");
const cb = resumeCallback;
setResumeCallback(null);
cb?.();
@@ -302,7 +355,6 @@ const ChenyunInternalization = () => {
[
activeSuccess,
resumeCallback,
successContent,
dragQuizValues,
dragQuizErrors,
triggerPuzzleAnimation,