学年学期页面新增“设为当前”“归档”“撤销归档”,当前学期不能归档、删除或直接取消;已归档学期需先撤销才能重新设为当前。[BaseDataController.cs (line 286)](/E:/jiaowu/src/Jiaowu.Api/Controllers/BaseDataController.cs:286)

切换后,其他学期自动变为历史态;已归档学期进一步弱化。所有主要学期选择器统一默认当前,并显示“当前 / 历史 / 已归档”。[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)
This commit is contained in:
2026-07-26 11:14:05 +08:00 Unverified
parent 3b73292d93
commit c91d826169
32 changed files with 752 additions and 73 deletions
+3 -5
View File
@@ -7,6 +7,7 @@ import { GridComponent, LegendComponent, TitleComponent, TooltipComponent } from
import { CanvasRenderer } from 'echarts/renderers'
import { downloadApiFile } from '../api/excel'
import http from '../api/http'
import { academicTermLabel, academicTermOptionClass, defaultAcademicTermId } from '../utils/academicTerms'
echarts.use([BarChart, LineChart, PieChart, TitleComponent, TooltipComponent, LegendComponent, GridComponent, CanvasRenderer])
@@ -367,10 +368,7 @@ onMounted(async () => {
courseCategories.value = catRes.data
classroomBuildings.value = bRes.data
classroomCampuses.value = campRes.data
if (terms.value.length > 0) {
const cur = terms.value.find((t: any) => t.isCurrent) ?? terms.value[terms.value.length - 1]
globalTermId.value = cur.id
}
globalTermId.value = defaultAcademicTermId(terms.value) ?? ''
loadStudentStats()
})
</script>
@@ -385,7 +383,7 @@ onMounted(async () => {
</div>
<div class="page-actions">
<el-select v-model="globalTermId" placeholder="选择学期" style="width:220px" clearable @change="() => { loadStudentStats(); loadGradeStats(); loadPassRateStats(); loadWorkloadStats(); loadClassroomStats() }">
<el-option v-for="t in terms" :key="t.id" :label="t.name" :value="t.id" />
<el-option v-for="t in terms" :key="t.id" :label="academicTermLabel(t)" :value="t.id" :class="academicTermOptionClass(t)" />
</el-select>
</div>
</section>