feat: 清理无用的 MacOS 文件和更新组件,提升代码整洁性
- 删除多个无用的 MacOS 生成文件,减少项目冗余。 - 在 layout 组件中添加 ScaledPortal 和相关类型,增强组件功能。 - 更新 puzzleData 中的学校名称,确保信息准确性。 - 调整 internalization 组件中的提示文本,提升用户体验。 - 在多个场景中引入新的选择题和成功提示,增强学习互动性。
This commit is contained in:
1 parent
a365964f54
commit
45dd648d21
60 files changed
+558
-63
No files matched your search
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user