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 @@
@@ -100,7 +134,7 @@ function reset() {
@drop="onDrop(idx)"
>
⠿
- {{ line.text }}
+
@@ -112,10 +146,40 @@ function reset() {
/>
-
+
提交
重置
+
+
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"
/>
-
+