feat(提交详情): 单独打开的一条提交改成左边代码、右边为什么错 + 这道题交的每一次
Deploy / deploy (push) Canceled after 0s

- 原来不显示是哪道题、时间只到日、答案错误不说为什么,测试点表 5 行一模一样
- 右边摆题目页那块例子对比(输入 / 正确输出 / 他的输出,差的字标红),编译失败、运行时错误同提交列表右栏的说法,代码里标出那一行
- 「这道题交了 N 次」常驻右栏,← → 一次次翻,看他是怎么改对的;题单藏着的那几次点不进
- 老师:「他的全部提交」和「⋯」(复制两项、重新判题);测试点方块悬停看用时和内存;判题中自己刷新
- 别人的代码、链接不对原来一直转圈,现在说清楚是哪种;自己在题单布置期内的照样看得到是哪道题、什么结果
- 后端详情多给题目名、班级、题单,`?attempts=1` 带上同题的每一次;看不到别人的回 403 而不是 404;提交者本人也拿得到 contestId(比赛里的题号是比赛自己的)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-13 01:00:22 +08:00
1 parent 4240a451e4
commit df76e7f101
8 files changed
+1000 -269

No files matched your search

+25
View File
@@ -224,9 +224,34 @@ export const submissionDetailSchema = z.object({
* `Missing required param "problemID"`。
*/
problemDisplayId: z.string(),
problemTitle: z.string(),
/** 提交者**现在**的班级(和提交列表同口径);已删号的为 null */
className: z.string().nullable(),
/** 从哪个题单交的,同列表的 problemSet */
problemSet: z.object({ id: z.number().int(), title: z.string() }).nullable(),
/**
* false = 自己的这份代码在题单布置期内先藏着(见后端 problemSetLockCutoffs):code 为空串、
* statisticInfo / info 为空对象,其余照给,页面照样摆出是谁、哪道题、什么结果。
* 别人的代码看不到时不走这里,直接 403
*/
showLink: z.boolean(),
/** 通过了几个测试点,口径见 caseSummarySchema */
caseSummary: caseSummarySchema,
/**
* 同一个人在同一道题、同一场比赛(或都不在比赛里)交过的每一次,按时间先后。只有带
* `?attempts=1` 时才给(独立的提交详情页用),否则为 null —— 题目页每判完一次都要拉一遍
* 详情,用不着这一串。showLink 的口径同上,题单藏着的那几次点不进去
*/
attempts: z
.array(
z.object({
id: z.string(),
createTime: z.string(),
result: judgeStatusSchema,
showLink: z.boolean(),
}),
)
.nullable(),
})
/**