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 }