From 67a23c51c821f05fe91b825952f92256276598c4 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Thu, 23 Apr 2026 02:31:57 -0600 Subject: [PATCH] fix --- src/App.vue | 8 ++- .../tutorial/components/ExerciseManager.vue | 45 +++++------- src/oj/learn/components/ExerciseMcq.vue | 36 ++++++---- src/oj/learn/components/ExerciseSort.vue | 70 ++++++++++++++++++- src/oj/learn/components/ExerciseWidget.vue | 4 +- src/oj/learn/index.vue | 4 +- 6 files changed, 115 insertions(+), 52 deletions(-) diff --git a/src/App.vue b/src/App.vue index baf7621..a7a3ff0 100644 --- a/src/App.vue +++ b/src/App.vue @@ -58,8 +58,10 @@ provide("hljs", hljsInstance) :date-locale="dateZhCN" :hljs="hljsInstance" > - - - + + + + + diff --git a/src/admin/tutorial/components/ExerciseManager.vue b/src/admin/tutorial/components/ExerciseManager.vue index 7527547..b41572c 100644 --- a/src/admin/tutorial/components/ExerciseManager.vue +++ b/src/admin/tutorial/components/ExerciseManager.vue @@ -21,8 +21,7 @@ const mcqQuestion = ref("") const mcqOptions = ref(["", ""]) const mcqAnswer = ref(0) -const sortQuestion = ref("") -const sortLines = ref(["", ""]) +const sortCode = ref("") async function load() { exercises.value = await getAdminExercises(props.tutorialId) @@ -37,8 +36,7 @@ function openCreate() { mcqQuestion.value = "" mcqOptions.value = ["", ""] mcqAnswer.value = 0 - sortQuestion.value = "" - sortLines.value = ["", ""] + sortCode.value = "" showForm.value = true } @@ -53,8 +51,7 @@ function openEdit(ex: Exercise) { mcqAnswer.value = d.answer } else { const d = ex.data as ExerciseSortData - sortQuestion.value = d.question - sortLines.value = [...d.lines] + sortCode.value = d.lines.join("\n") } showForm.value = true } @@ -63,7 +60,10 @@ async function save() { const data = formType.value === "mcq" ? { question: mcqQuestion.value, options: mcqOptions.value, answer: mcqAnswer.value } - : { question: sortQuestion.value, lines: sortLines.value } + : { + question: "将下列代码行排列为正确顺序", + lines: sortCode.value.split("\n").filter((l) => l.trim() !== ""), + } try { if (editingId.value) { @@ -169,7 +169,7 @@ function typeName(type: string) { diff --git a/src/oj/learn/components/ExerciseMcq.vue b/src/oj/learn/components/ExerciseMcq.vue index 120a3c7..9b49b13 100644 --- a/src/oj/learn/components/ExerciseMcq.vue +++ b/src/oj/learn/components/ExerciseMcq.vue @@ -5,26 +5,35 @@ const props = defineProps<{ exercise: Exercise }>() const data = computed(() => props.exercise.data as ExerciseMcqData) const selected = ref(null) -const submitted = ref(false) +const correct = ref(false) +const wrong = ref(false) function select(idx: number) { - if (!submitted.value) selected.value = idx + if (correct.value) return + selected.value = idx + wrong.value = false } function submit() { - if (selected.value === null) return - submitted.value = true + if (selected.value === null || correct.value) return + if (selected.value === data.value.answer) { + correct.value = true + wrong.value = false + } else { + wrong.value = true + selected.value = null + } } function reset() { selected.value = null - submitted.value = false + correct.value = false + wrong.value = false } -function optionType(idx: number): "default" | "success" | "error" { - if (!submitted.value) return "default" - if (idx === data.value.answer) return "success" - if (idx === selected.value) return "error" +function optionType(idx: number): "default" | "primary" | "success" { + if (correct.value && idx === data.value.answer) return "success" + if (idx === selected.value) return "primary" return "default" } @@ -46,6 +55,7 @@ function optionType(idx: number): "default" | "success" | "error" { :type="optionType(idx)" :secondary="optionType(idx) !== 'default'" :tertiary="optionType(idx) === 'default'" + :strong="idx === selected" :style="{ justifyContent: 'flex-start', width: '100%', textAlign: 'left' }" @click="select(idx)" > @@ -57,9 +67,9 @@ function optionType(idx: number): "default" | "success" | "error" { @@ -67,7 +77,7 @@ function optionType(idx: number): "default" | "success" | "error" { 提交 diff --git a/src/oj/learn/components/ExerciseSort.vue b/src/oj/learn/components/ExerciseSort.vue index 4bef42a..6507f70 100644 --- a/src/oj/learn/components/ExerciseSort.vue +++ b/src/oj/learn/components/ExerciseSort.vue @@ -1,7 +1,13 @@ + + diff --git a/src/oj/learn/components/ExerciseWidget.vue b/src/oj/learn/components/ExerciseWidget.vue index e516cd5..b678b2d 100644 --- a/src/oj/learn/components/ExerciseWidget.vue +++ b/src/oj/learn/components/ExerciseWidget.vue @@ -4,10 +4,10 @@ import { Exercise } from "utils/types" const ExerciseMcq = defineAsyncComponent(() => import("./ExerciseMcq.vue")) const ExerciseSort = defineAsyncComponent(() => import("./ExerciseSort.vue")) -defineProps<{ exercise: Exercise }>() +defineProps<{ exercise: Exercise; lang?: string }>() diff --git a/src/oj/learn/index.vue b/src/oj/learn/index.vue index f4830f5..6e323e8 100644 --- a/src/oj/learn/index.vue +++ b/src/oj/learn/index.vue @@ -34,7 +34,7 @@ :theme="isDark ? 'dark' : 'light'" :model-value="seg.content" /> - + @@ -74,7 +74,7 @@ :theme="isDark ? 'dark' : 'light'" :model-value="seg.content" /> - +