From b4b96b0da3422bec5043d3528a9dfdc4a91a7255 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Tue, 4 Aug 2026 21:25:21 -0600 Subject: [PATCH] =?UTF-8?q?fix(learn):=20=E4=BF=AE=E5=A4=8D=E5=A1=AB?= =?UTF-8?q?=E7=A9=BA=E9=A2=98=E4=BB=A3=E7=A0=81=E9=AB=98=E4=BA=AE=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1=EF=BC=8C=E5=8E=BB=E9=87=8D=E9=AB=98=E4=BA=AE=E4=B8=8E?= =?UTF-8?q?=E6=B4=97=E7=89=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ExerciseFill.vue 之前未导入 exercise-highlight.css,若某课只含 fill 类型练习(不加载 ExerciseSort),高亮代码会渲染成无色纯文本 - ExerciseFill/ExerciseSort 改为复用 useCodeHighlight 的 highlight()/highlightLines(),删除各自重复的 hljs 注册与 escapeHtml 实现 - 新增 useShuffle.ts,供 ExerciseSort/ExerciseMatch/ExerciseGroup 共用洗牌逻辑,替代三处几乎逐字相同的实现 Co-Authored-By: Claude Sonnet 5 --- src/oj/learn/components/ExerciseFill.vue | 25 +---- src/oj/learn/components/ExerciseGroup.vue | 10 +- src/oj/learn/components/ExerciseMatch.vue | 10 +- src/oj/learn/components/ExerciseSort.vue | 114 +++------------------- src/oj/learn/composables/useShuffle.ts | 9 ++ 5 files changed, 28 insertions(+), 140 deletions(-) create mode 100644 src/oj/learn/composables/useShuffle.ts diff --git a/src/oj/learn/components/ExerciseFill.vue b/src/oj/learn/components/ExerciseFill.vue index 34aba3f..9979ec3 100644 --- a/src/oj/learn/components/ExerciseFill.vue +++ b/src/oj/learn/components/ExerciseFill.vue @@ -1,11 +1,7 @@ - - diff --git a/src/oj/learn/composables/useShuffle.ts b/src/oj/learn/composables/useShuffle.ts new file mode 100644 index 0000000..9b77a45 --- /dev/null +++ b/src/oj/learn/composables/useShuffle.ts @@ -0,0 +1,9 @@ +// Fisher–Yates 洗牌,返回新数组,不修改原数组 +export function shuffle(arr: T[]): T[] { + const a = [...arr] + for (let i = a.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)) + ;[a[i], a[j]] = [a[j], a[i]] + } + return a +}