切换后,其他学期自动变为历史态;已归档学期进一步弱化。所有主要学期选择器统一默认当前,并显示“当前 / 历史 / 已归档”。[academicTerms.ts (line 1)](/E:/jiaowu/web/src/utils/academicTerms.ts:1) 桌面使用分层表格,390px 手机端改为独立学期卡片,操作不会再挤压表格。[BaseDataView.vue (line 211)](/E:/jiaowu/web/src/views/BaseDataView.vue:211) 归档定义为“历史显示状态”,不是成绩冻结:补考成绩仍可录入并回写,已发布成绩仍可走成绩更正审批。 已加入 SQLite 开发迁移、MySQL 正式迁移和切换/归档/撤销测试。[20260726143000_AcademicTermArchiving.cs (line 1)](/E:/jiaowu/src/Jiaowu.Api/Infrastructure/Persistence/Migrations/MySql/20260726143000_AcademicTermArchiving.cs:1)
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
export interface AcademicTermLike {
|
|
id: string
|
|
name: string
|
|
isCurrent?: boolean
|
|
isArchived?: boolean
|
|
isEnabled?: boolean
|
|
hasPublishedTimetable?: boolean
|
|
}
|
|
|
|
export function academicTermLabel(term: AcademicTermLike): string {
|
|
if (term.isCurrent) return `${term.name} · 当前`
|
|
if (term.isArchived) return `${term.name} · 已归档`
|
|
return `${term.name} · 历史`
|
|
}
|
|
|
|
export function academicTermOptionClass(term: AcademicTermLike): string {
|
|
if (term.isCurrent) return 'academic-term-option academic-term-option--current'
|
|
if (term.isArchived) return 'academic-term-option academic-term-option--archived'
|
|
return 'academic-term-option academic-term-option--historical'
|
|
}
|
|
|
|
export function defaultAcademicTermId(
|
|
terms: AcademicTermLike[],
|
|
requirePublishedTimetable = false,
|
|
): string | undefined {
|
|
const usable = requirePublishedTimetable
|
|
? terms.filter((term) => term.hasPublishedTimetable)
|
|
: terms
|
|
return usable.find((term) => term.isCurrent)?.id
|
|
?? usable.find((term) => !term.isArchived)?.id
|
|
?? usable[0]?.id
|
|
}
|
|
|
|
export function academicTermRowClass(term: {
|
|
isCurrent?: boolean
|
|
isArchived?: boolean
|
|
}): string {
|
|
if (term.isCurrent) return 'academic-term-row academic-term-row--current'
|
|
if (term.isArchived) return 'academic-term-row academic-term-row--archived'
|
|
return 'academic-term-row academic-term-row--historical'
|
|
}
|