From e10a7791a2c115caa722ba8ebca40c24e162055f Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Tue, 13 Oct 2026 14:58:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=BC=94=E7=A4=BA=E6=A8=A1=E5=BC=8F):=20?= =?UTF-8?q?=E6=BC=94=E7=A4=BA=E6=A8=A1=E5=BC=8F=E4=B8=8B=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=92=8C=E6=8F=90=E4=BA=A4=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E9=9C=B2=E5=87=BA=E5=88=AB=E4=BA=BA=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E2=80=94=E2=80=94=E6=8A=95=E5=B1=8F=E8=A3=85?= =?UTF-8?q?=E6=88=90=E5=AD=A6=E7=94=9F=E6=97=B6=EF=BC=8C=E5=92=8C=E5=AD=A6?= =?UTF-8?q?=E7=94=9F=E7=9C=8B=E5=88=B0=E7=9A=84=E4=B8=80=E6=A0=B7=E6=98=AF?= =?UTF-8?q?=E3=80=8C=E5=88=AB=E4=BA=BA=E7=9A=84=E4=BB=A3=E7=A0=81=E7=9C=8B?= =?UTF-8?q?=E4=B8=8D=E5=88=B0=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../src/oj/submission/components/SubmissionView.vue | 6 ++++++ apps/web/src/oj/submission/list.vue | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/web/src/oj/submission/components/SubmissionView.vue b/apps/web/src/oj/submission/components/SubmissionView.vue index 1329832..b478cd4 100644 --- a/apps/web/src/oj/submission/components/SubmissionView.vue +++ b/apps/web/src/oj/submission/components/SubmissionView.vue @@ -78,6 +78,12 @@ async function load(quiet = false) { try { const res = await getSubmission(currentId.value, true) if (seq !== loadSeq) return + // 演示模式(超管装成学生投屏):后端照样给了别人的代码,学生是看不到的,这里也挡掉 + if (userStore.demoMode && res.userId !== userStore.user?.id) { + detail.value = null + state.value = "forbidden" + return + } detail.value = res state.value = "ok" if (judging.value) timer = setTimeout(() => load(true), 2000) diff --git a/apps/web/src/oj/submission/list.vue b/apps/web/src/oj/submission/list.vue index 31af119..b075c68 100644 --- a/apps/web/src/oj/submission/list.vue +++ b/apps/web/src/oj/submission/list.vue @@ -167,7 +167,7 @@ async function listSubmissions() { const res = await fetchPage() if (seq !== requestSeq) return if (mode) flowcharts.value = res.results as FlowchartSubmissionListItem[] - else submissions.value = res.results as SubmissionListItem[] + else submissions.value = asSeenByStudent(res.results as SubmissionListItem[]) total.value = res.total unknownProblems.value = res.unknownProblems newCount.value = 0 @@ -671,6 +671,16 @@ function languageText(row: SubmissionListItem) { } /** 学生看别人的那几行:名字淡一档、带一把锁(自己的看不了是题单那道闸,另说) */ +/** + * 演示模式(超管把界面装成学生投屏):后端认的还是超管,每一行都给了 showLink。 + * 学生是看不到别人代码的,投屏时也不该露出来 —— 别人的行一律当成看不到 + */ +function asSeenByStudent(rows: SubmissionListItem[]) { + if (!userStore.demoMode) return rows + const me = userStore.user?.id + return rows.map((row) => (row.userId === me ? row : { ...row, showLink: false })) +} + function othersRow(row: SubmissionListItem) { return !row.showLink && row.userId !== userStore.user?.id }