- 评阅页:全班学生列表(提交状态、得分、是否已评阅);选中学生的代码(只读)、自动评分结果、 规范提示(代码里用到的默认名字控件、注释行数)、老师评分项打分和评语,"保存并看下一个" - "运行他的程序":新标签页里打开学生的提交,可以操作实训台,改动不保存 - 学生能看到老师的各项得分和评语;作业列表显示总分 - 班级管理页"成绩"标签页:学生 × 作业的总分,点分数进入评阅;单个作业和全班成绩导出 CSV - 老师增删评分项后,已打的分按新的评分项对齐 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
// 自动评分的结果:服务器给学生程序逐项检查后返回,学生提交后立即能看到。
|
|
|
|
export interface CheckResult {
|
|
/** 检查项名称,对应书上评价表的功能项,如"能实时显示入侵数据" */
|
|
title: string
|
|
passed: boolean
|
|
/** 不通过的原因:期望看到什么、实际是什么 */
|
|
message?: string
|
|
}
|
|
|
|
export interface GradeResult {
|
|
/** 编译没通过时所有项都不通过 */
|
|
compiled: boolean
|
|
results: CheckResult[]
|
|
/** 评分用时(毫秒) */
|
|
ms: number
|
|
}
|
|
|
|
// ---------- 作业 ----------
|
|
|
|
/** 学生的起点:blank 空白工程(从界面做起),ui 界面已做好(只写代码) */
|
|
export type StartMode = 'blank' | 'ui'
|
|
|
|
/** 分值:自动评分项按规则顺序各自的分值;老师评分项(界面、注释、命名等)由老师打分 */
|
|
export interface Scoring {
|
|
auto: number[]
|
|
manual: { title: string; points: number }[]
|
|
}
|
|
|
|
export interface Assignment {
|
|
id: number
|
|
classId: number
|
|
className: string
|
|
sampleId: string
|
|
title: string
|
|
startMode: StartMode
|
|
/** 截止时间(毫秒时间戳),null 表示不限 */
|
|
deadline: number | null
|
|
createdAt: number
|
|
/** 自动评分项的名称,和 scoring.auto 一一对应 */
|
|
checkTitles: string[]
|
|
scoring: Scoring
|
|
}
|
|
|
|
export interface Submission {
|
|
id: number
|
|
status: 'pending' | 'done' | 'error'
|
|
result: GradeResult | null
|
|
/** 自动评分得分(通过的项的分值之和) */
|
|
autoScore: number | null
|
|
createdAt: number
|
|
/** 排队评分时前面还有几份 */
|
|
queueAhead?: number
|
|
}
|
|
|
|
/** 老师评阅:老师评分项各自的得分(null 表示还没打分,和 scoring.manual 一一对应)和评语 */
|
|
export interface Review {
|
|
scores: (number | null)[]
|
|
comment: string
|
|
updatedAt: number
|
|
}
|