diff --git a/src/oj/learn/components/ExerciseMcq.vue b/src/oj/learn/components/ExerciseMcq.vue index 9f5a3c7..96d0a22 100644 --- a/src/oj/learn/components/ExerciseMcq.vue +++ b/src/oj/learn/components/ExerciseMcq.vue @@ -3,6 +3,7 @@ import { Exercise, ExerciseMcqData } from "utils/types" const props = defineProps<{ exercise: Exercise }>() const data = computed(() => props.exercise.data as ExerciseMcqData) +const isSingle = computed(() => data.value.answer.length === 1) const selected = ref>(new Set()) const correct = ref(false) @@ -12,8 +13,13 @@ const partial = ref(false) function select(idx: number) { if (correct.value) return const s = new Set(selected.value) - if (s.has(idx)) s.delete(idx) - else s.add(idx) + if (isSingle.value) { + s.clear() + if (!selected.value.has(idx)) s.add(idx) + } else { + if (s.has(idx)) s.delete(idx) + else s.add(idx) + } selected.value = s wrong.value = false partial.value = false @@ -30,6 +36,7 @@ function submit() { wrong.value = false partial.value = false } else { + selected.value = new Set() const hasIntersection = [...sel].some((v) => answer.has(v)) if (hasIntersection) { partial.value = true @@ -62,9 +69,9 @@ function optionType(idx: number): "default" | "primary" | "success" { >