From a8b83ba762c7d3a9937a351d687c286b544c935f Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Mon, 28 Sep 2026 13:18:58 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E9=A2=98=E7=9B=AE):=20=E6=AF=94?= =?UTF-8?q?=E8=B5=9B=E5=92=8C=E9=A2=98=E5=8D=95=E6=94=B9=E7=94=A8=E9=A2=98?= =?UTF-8?q?=E5=BA=93=E9=82=A3=E4=B8=AA=E7=BC=96=E8=BE=91=E5=99=A8=E2=80=94?= =?UTF-8?q?=E2=80=94=E9=A2=98=E5=8D=95=E9=87=8C=E7=9A=84=E6=B1=82=E5=8A=A9?= =?UTF-8?q?=E7=BB=88=E4=BA=8E=E6=8E=A5=E5=BE=97=E4=B8=8A=EF=BC=8C=E4=B8=80?= =?UTF-8?q?=E9=94=AE=E6=8D=A2=E4=B8=AD=E6=96=87=E6=A0=87=E7=82=B9=E4=B9=9F?= =?UTF-8?q?=E8=83=BD=E7=94=A8=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 比赛和题单原来用的是另一个精简版编辑器(BasicEditor),没有协作绑定、也没有 错误标记扩展:题单里学生点「求助」,老师接单后编辑器绑不上;比赛和题单里 「把中文标点都换成英文」点了没反应、出错行也不标红。三种入口统一成 ProblemEditor, 删掉 BasicEditor。流程图仍然只在题库入口出现(语言列表那道闸没动)。 Co-Authored-By: Claude Opus 5.5 --- .../src/oj/problem/components/BasicEditor.vue | 71 ------------------- apps/web/src/oj/problem/detail.vue | 15 ++-- apps/web/src/oj/problem/utils/editTrace.ts | 4 +- 3 files changed, 9 insertions(+), 81 deletions(-) delete mode 100644 apps/web/src/oj/problem/components/BasicEditor.vue diff --git a/apps/web/src/oj/problem/components/BasicEditor.vue b/apps/web/src/oj/problem/components/BasicEditor.vue deleted file mode 100644 index 04dfb2d..0000000 --- a/apps/web/src/oj/problem/components/BasicEditor.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - diff --git a/apps/web/src/oj/problem/detail.vue b/apps/web/src/oj/problem/detail.vue index 72b1e6e..b50649b 100644 --- a/apps/web/src/oj/problem/detail.vue +++ b/apps/web/src/oj/problem/detail.vue @@ -8,11 +8,12 @@ import { useScreenModeStore } from "shared/store/screenMode" import { useMyFlowchartStore } from "shared/store/myFlowchart" import { useUserStore } from "shared/store/user" -// 抽成具名 loader,便于进页面时与接口并行预取编辑器 chunk +// 抽成具名 loader,便于进页面时与接口并行预取编辑器 chunk。 +// 题库、比赛、题单三种入口用的是同一个编辑器:原来比赛和题单用的是另一个精简版, +// 没有协作、也没有错误标记,于是题单里「求助」老师接不上、「把中文标点都换成英文」 +// 点了没反应(见 docs/specs/2026-09-28-problem-page-redesign-design.md 第 10 节) const loadProblemEditor = () => import("./components/ProblemEditor.vue") -const loadContestEditor = () => import("./components/BasicEditor.vue") const ProblemEditor = defineAsyncComponent(loadProblemEditor) -const BasicEditor = defineAsyncComponent(loadContestEditor) const EditorForTest = defineAsyncComponent(() => import("./components/EditorForTest.vue")) const ProblemContent = defineAsyncComponent(() => import("./components/ProblemContent.vue")) const ProblemInfo = defineAsyncComponent(() => import("./components/ProblemInfo.vue")) @@ -71,8 +72,6 @@ const tabOptions = computed(() => { const currentTab = ref("content") -const isPublicProblemRoute = computed(() => route.name === "problem") - watch( [() => route.query.tab, () => tabOptions.value], ([rawTab]) => { @@ -103,7 +102,7 @@ async function init() { myFlowchartStore.hide() // 并行预取右侧编辑器 chunk(CodeMirror ~370K+), // 避免等 getProblem 返回后才串行下载,编辑器才迟迟出现 - ;(isPublicProblemRoute.value ? loadProblemEditor : loadContestEditor)() + loadProblemEditor() try { const res = await getProblem(problemID, contestID) problem.value = res @@ -188,7 +187,7 @@ watch( @@ -232,7 +231,7 @@ watch( - + diff --git a/apps/web/src/oj/problem/utils/editTrace.ts b/apps/web/src/oj/problem/utils/editTrace.ts index 8276619..1459d17 100644 --- a/apps/web/src/oj/problem/utils/editTrace.ts +++ b/apps/web/src/oj/problem/utils/editTrace.ts @@ -5,8 +5,8 @@ import type { SubmissionTrace } from "@oj2/contract" * 编辑过程信号的采集,随提交一起报给后端(落进 `submission_trace`)。 * 字段含义见契约的 `submissionTraceSchema`。**只数字符数和次数,不留任何按键内容。** * - * 是模块单例而不是 Pinia store:编辑器(ProblemEditor / BasicEditor 里)和 - * 提交按钮(Form → SubmitCode)是兄弟组件,得共用一份计数;而 CodeMirror 的 + * 是模块单例而不是 Pinia store:编辑器(ProblemEditor 里)和 + * 提交按钮(EditorToolbar → SubmitCode)是兄弟组件,得共用一份计数;而 CodeMirror 的 * 扩展对象一旦经过 store 就会被包成响应式代理,facet 靠身份比较,代理过的扩展 * 直接失效。计数本身也不需要响应式。 *