feat(前台): 顶栏可以输入题号直达;首页列出班里最近一次课一起做的题和自己的完成情况
Deploy / deploy (push) Canceled after 0s

课上老师报题号、全班去找,是 2025 秋七成非比赛提交的来路,界面上原本没有它的入口。

- 顶栏(桌面端)加题号框,首页「找题」同一套逻辑:题号对上直接进题,否则去列表搜
- 新接口 GET /me/class-activity:同班同一天 ≥5 人做过的题,取最近 7 天里最近的一天,
  附带我自己的状态与班里通过人数;首页据此显示「今天班里在做」卡片,没有就不占位

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-09-27 20:58:15 +08:00
1 parent d07459928d
commit 039992dc86
7 files changed
+279 -8

No files matched your search

+24
View File
@@ -63,10 +63,34 @@ export const classComparisonResponseSchema = z.object({
hasTimeRange: z.boolean(),
})
/**
* 「班里在做」:同班同一天有好几个人做的题,基本就是老师在课上点名的那几道。
* `day` 是东八区日历日;最近 7 天都没有这样的题时为 null,`problems` 为空。
*/
export const classActivityProblemSchema = z.object({
problemDisplayId: z.string(),
title: z.string(),
/** 那天做过这道题的同班人数(含自己) */
userCount: z.number().int(),
/** 其中那天通过了的人数 */
acceptedCount: z.number().int(),
/** 我自己在题库里(不含比赛)做这道题的状态,不限那一天 */
myStatus: z.enum(["accepted", "tried", "none"]),
})
export const classActivitySchema = z.object({
className: z.string().nullable(),
day: z.string().nullable(),
problems: z.array(classActivityProblemSchema),
})
export type ClassRankItem = z.infer<typeof classRankItemSchema>
export type ClassUserRank = z.infer<typeof classUserRankSchema>
export type ClassComparison = z.infer<typeof classComparisonSchema>
export type ClassComparisonResponse = z.infer<typeof classComparisonResponseSchema>
export type ClassActivity = z.infer<typeof classActivitySchema>
export type ClassActivityProblem = z.infer<typeof classActivityProblemSchema>
export type ClassUserRankItem = z.infer<typeof classUserRankItemSchema>
export type ClassComparisonRequest = z.infer<typeof classComparisonRequestSchema>