fix(课堂任务): 后台改一节不再把它排到同一分钟布置的另一节前面;学生管理员算进统计的课

- 后台「改」时刻只填到分,原来一保存就把布置时刻截成整分:先画流程图、紧接着再开一节写代码,
  只改了做什么,「今天最后一节」就换回了画流程图那节。没改时刻就留着原来的
- 数据统计「一行一节课」只数 Regular User,学生管理员的提交不算,和「做完 / 全班」的花名册对不上
- 学生「老师改了这节课」:画流程图改成写 C、先画再写改成写代码,原来写「语言 改成 C语言」,
  看不出不用画了;现在写「做法 改成 写代码 · C语言」
- 学生课堂标题按每道题合起来的要求写:先画流程图、再用这几道题写代码时,不再只写「用 C语言做」
- 先画再写的题,切到别的题再回来不再被拽回画布(原来只记最后一道题)
- 课堂任务顶上写代码的课也写「写代码」;讲错误的弹层开着时不再因为 15 秒刷新换了个人

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-11-03 09:26:39 +08:00
1 parent b09d479893
commit c3f1413545
7 files changed
+67 -25

No files matched your search

+16 -3
View File
@@ -1,9 +1,22 @@
import { LESSON_MODE_LABEL } from '@oj2/contract'
import { LESSON_MODE_LABEL, type LessonMode } from '@oj2/contract'
import { defineStore } from 'pinia'
import { getClassActivity } from 'shared/api'
import { LANGUAGE_SHOW_VALUE } from 'utils/constants'
import type { ClassActivity, ClassActivityProblem } from 'utils/types'
/**
* 学生这边这节课做什么:按每道题合起来的要求算(后端 todaySteps 把今天几节里同一道题的要求并在一起),
* 不直接用 `mode` —— 那是今天最后布置的那一节的。先布置画流程图、再「用这几道题写代码」,
* 最后一节是写代码,但还没画完的照样要画,标题只写「用 C语言做」就漏了画图。
* 推断出来的课为 null
*/
export function activityMode(activity: ClassActivity | null | undefined): LessonMode | null {
if (!activity?.mode) return null
const draw = activity.problems.some((item) => item.draw !== null)
const code = activity.problems.some((item) => item.code !== null)
return draw && code ? 'both' : draw ? 'flowchart' : code ? 'code' : activity.mode
}
/** 同一节课里来回换题不用每次都重拉;过了这么久再进题目页就重拉一次 */
const STALE_MS = 2 * 60 * 1000
@@ -89,8 +102,8 @@ export const useLessonStore = defineStore('lesson', () => {
* 以前布置的)为空。写代码是默认的,不写出来
*/
const languageText = computed(() => {
const mode = activity.value?.mode
const language = activity.value?.language
const mode = activityMode(activity.value)
const language = mode === 'flowchart' ? null : activity.value?.language
return [mode && mode !== 'code' ? LESSON_MODE_LABEL[mode] : '', language ? LANGUAGE_SHOW_VALUE[language] : ''].filter(Boolean).join(' · ')
})