fix(演示模式): 演示模式下提交列表和提交详情不再露出别人的代码——投屏装成学生时,和学生看到的一样是「别人的代码看不到」
Deploy / deploy (push) Canceled after 0s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-13 14:58:35 +08:00
1 parent 10d2638c23
commit e10a7791a2
2 files changed
+17 -1

No files matched your search

@@ -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)
+11 -1
View File
@@ -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
}