Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e4abbc1645
commit
3ca3b42997
5 files changed
+36
-11
No files matched your search
@@ -66,7 +66,7 @@ function studentCondition(value: string | null) {
|
||||
/**
|
||||
* 方块格:一个班的学生 × 这门课的每一课,打开过没有、学完没有(练一练全对)。
|
||||
*
|
||||
* 不选班就按排名页同一套规则猜老师在教哪个班(`defaultClassFor`);也能传年级前缀,
|
||||
* 不选班就猜老师在教哪个班(`defaultClassFor`);也能传年级前缀,
|
||||
* 但一个年级两三百行方块,页面上主要还是按班看。
|
||||
*/
|
||||
adminLearnRoutes.get("/learn-analytics/board", requireTeacher, async (c) => {
|
||||
|
||||
@@ -24,6 +24,7 @@ import {
|
||||
classDetail,
|
||||
classPk,
|
||||
defaultClassFor,
|
||||
lessonClassFor,
|
||||
loadEntrants,
|
||||
PK_MAX_CLASSES,
|
||||
pkPartner,
|
||||
@@ -75,7 +76,7 @@ function periodStart(period: RankPeriod) {
|
||||
|
||||
/**
|
||||
* 这次请求看的是哪个班 / 哪个年级。学生只能看自己的班和年级;老师用 `className` 选,
|
||||
* 不给就猜(`defaultClassFor`)。返回 undefined 表示该报「没有班级」。
|
||||
* 不给就取最近布置过作业的班(`lessonClassFor`)。返回 undefined 表示该报「没有班级」。
|
||||
*/
|
||||
async function resolveGroup(
|
||||
user: AppEnv["Variables"]["user"],
|
||||
@@ -84,7 +85,7 @@ async function resolveGroup(
|
||||
): Promise<string | null | undefined> {
|
||||
if (scope === "all") return null
|
||||
let className = user?.className || null
|
||||
if (isTeacherOrAbove(user)) className = requested || (await defaultClassFor(user!.id))
|
||||
if (isTeacherOrAbove(user)) className = requested || (await lessonClassFor(user!.id))
|
||||
if (!className) return undefined
|
||||
return scope === "class" ? className : className.slice(0, 2)
|
||||
}
|
||||
|
||||
@@ -538,17 +538,26 @@ export async function classPk(
|
||||
}
|
||||
|
||||
/**
|
||||
* 老师打开排名页(和后台「自学情况」)默认看哪个班:自己最近布置过作业的班 → 最近一周交题人数最多的班。
|
||||
* 不记老师上次选的:统计面板吃过那个亏(上一节课的班悄悄留在框里)。
|
||||
* 老师自己最近布置过作业的班。老师账号没有班级,这是唯一能说明「这是他的班」的数据;
|
||||
* 排名页点「本班」只认这个,猜不出就交给前端(用上次选的班,没有就停在全部)。
|
||||
*/
|
||||
export async function defaultClassFor(teacherId: number) {
|
||||
export async function lessonClassFor(teacherId: number) {
|
||||
const [lesson] = await db
|
||||
.select({ className: schema.classLesson.className })
|
||||
.from(schema.classLesson)
|
||||
.where(eq(schema.classLesson.createdBy, teacherId))
|
||||
.orderBy(desc(schema.classLesson.day), desc(schema.classLesson.updatedAt))
|
||||
.limit(1)
|
||||
if (lesson) return lesson.className
|
||||
return lesson?.className ?? null
|
||||
}
|
||||
|
||||
/**
|
||||
* 后台「自学情况」和班级 PK 默认看哪个班:自己最近布置过作业的班 → 最近一周交题人数最多的班。
|
||||
* 不记老师上次选的:统计面板吃过那个亏(上一节课的班悄悄留在框里)。
|
||||
*/
|
||||
export async function defaultClassFor(teacherId: number) {
|
||||
const lesson = await lessonClassFor(teacherId)
|
||||
if (lesson) return lesson
|
||||
|
||||
const users = countDistinct(schema.submission.userId)
|
||||
const [busiest] = await db
|
||||
|
||||
Reference in new issue
Block a user