课程/教学班归档

This commit is contained in:
biss committed 2026-09-12 10:32:06 +08:00
1 parent df87aa16d3
commit e165964a77
6 files changed
+111 -27

No files matched your search

+1 -1
View File
@@ -692,7 +692,7 @@ onMounted(async () => {
<el-table-column label="操作" width="130" align="right">
<template #default="{ row }">
<el-button v-if="row.sheet" type="primary" text :icon="EditPen" @click="openDetail(row)">打开成绩单</el-button>
<el-button v-else type="primary" text :icon="Plus" @click="openCreate(row)">建立成绩单</el-button>
<el-button v-else type="primary" text :icon="Plus" :disabled="row.taskStatus !== 'Published'" @click="openCreate(row)">建立成绩单</el-button>
</template>
</el-table-column>
</el-table>
+10 -10
View File
@@ -928,7 +928,7 @@ onMounted(async () => {
<div v-for="session in row.sessions" :key="session.id" class="student-session-option">
<div><b>{{ formatSessionTime(session) }}</b><span>{{ session.campusName }} · {{ session.buildingName }} {{ session.classroomName }} · 指导:{{ session.instructorNames?.join('、') || '待指定' }}</span></div>
<el-button v-if="session.canManage" size="small" text @click="showParticipants(row, session)">预约名单</el-button>
<el-button v-if="session.canManage && session.status !== 'Cancelled'" size="small" text type="danger" @click="cancelSession(row, session)">{{ row.status === 'Draft' ? '删除' : '取消' }}</el-button>
<el-button v-if="session.canManage && session.status !== 'Cancelled'" size="small" text type="danger" :disabled="row.teachingTaskStatus !== 'Published'" @click="cancelSession(row, session)">{{ row.status === 'Draft' ? '删除' : '取消' }}</el-button>
</div>
</div>
</el-popover>
@@ -945,18 +945,18 @@ onMounted(async () => {
<el-table-column label="操作" width="244" fixed="right" align="right">
<template #default="{ row }">
<template v-if="row.status === 'Draft'">
<el-button size="small" text @click="openEditProject(row)">编辑</el-button>
<el-button size="small" text type="danger" @click="deleteProject(row)">删除</el-button>
<el-button size="small" text :disabled="row.teachingTaskStatus !== 'Published'" @click="openEditProject(row)">编辑</el-button>
<el-button size="small" text type="danger" :disabled="row.teachingTaskStatus !== 'Published'" @click="deleteProject(row)">删除</el-button>
<el-button
size="small"
type="primary"
:disabled="row.arrangementMode === 'Centralized' ? !row.scheduleEntry : !row.sessions.some((item: any) => item.status !== 'Cancelled')"
:disabled="row.teachingTaskStatus !== 'Published' || (row.arrangementMode === 'Centralized' ? !row.scheduleEntry : !row.sessions.some((item: any) => item.status !== 'Cancelled'))"
@click="publishProject(row)"
>发布</el-button>
</template>
<template v-else-if="row.status === 'Published'">
<el-button size="small" text @click="openCorrectPublishedProject(row)">修正内容</el-button>
<el-button size="small" text @click="closeProject(row)">关闭项目</el-button>
<el-button size="small" text :disabled="row.teachingTaskStatus !== 'Published'" @click="openCorrectPublishedProject(row)">修正内容</el-button>
<el-button size="small" text :disabled="row.teachingTaskStatus !== 'Published'" @click="closeProject(row)">关闭项目</el-button>
</template>
<el-button
v-if="row.status !== 'Closed' && row.arrangementMode === 'SelfScheduled'"
@@ -1028,12 +1028,12 @@ onMounted(async () => {
</div>
<el-tag :type="sessionTagType(session)" size="small" effect="plain">余 {{ session.remainingCount }} / {{ session.capacity }}</el-tag>
<el-button v-if="row.myBooking?.experimentSessionId === session.id" size="small" type="success" :icon="Check" disabled>已预约</el-button>
<el-button v-else size="small" type="primary" plain :disabled="row.status !== 'Published' || !!row.myBooking || session.remainingCount <= 0" @click="book(row, session)">预约</el-button>
<el-button v-else size="small" type="primary" plain :disabled="row.status !== 'Published' || row.teachingTaskStatus !== 'Published' || !!row.myBooking || session.remainingCount <= 0" @click="book(row, session)">预约</el-button>
</div>
<el-empty v-if="!row.sessions.length" :image-size="42" description="暂无有效实验场次" />
</div>
</el-popover>
<el-button v-if="row.myBooking && row.status === 'Published'" size="small" text type="danger" @click="cancelBooking(row)">取消</el-button>
<el-button v-if="row.myBooking && row.status === 'Published' && row.teachingTaskStatus === 'Published'" size="small" text type="danger" @click="cancelBooking(row)">取消</el-button>
</template>
<span v-else class="table-muted">无需预约</span>
</template>
@@ -1067,11 +1067,11 @@ onMounted(async () => {
</div>
<el-tag :type="sessionTagType(session)" size="small" effect="plain">余 {{ session.remainingCount }} / {{ session.capacity }}</el-tag>
<el-button v-if="row.myBooking?.experimentSessionId === session.id" size="small" type="success" disabled>已预约</el-button>
<el-button v-else size="small" type="primary" plain :disabled="row.status !== 'Published' || !!row.myBooking || session.remainingCount <= 0" @click="book(row, session)">预约</el-button>
<el-button v-else size="small" type="primary" plain :disabled="row.status !== 'Published' || row.teachingTaskStatus !== 'Published' || !!row.myBooking || session.remainingCount <= 0" @click="book(row, session)">预约</el-button>
</article>
</div>
<span v-else class="table-muted">暂无有效实验场次</span>
<el-button v-if="row.myBooking && row.status === 'Published'" class="mobile-cancel-booking" size="small" text type="danger" @click="cancelBooking(row)">取消预约</el-button>
<el-button v-if="row.myBooking && row.status === 'Published' && row.teachingTaskStatus === 'Published'" class="mobile-cancel-booking" size="small" text type="danger" @click="cancelBooking(row)">取消预约</el-button>
</template>
</div>
</article>
+4 -3
View File
@@ -779,12 +779,12 @@ onUnmounted(() => {
v-for="task in tasks"
:key="task.id"
type="button"
:class="{ active: selectedTask?.id === task.id }"
:class="{ active: selectedTask?.id === task.id, 'is-archived': task.status === 'Closed' }"
@click="selectTask(task)"
>
<span>{{ task.courseCode }} · {{ task.taskNumber }}</span>
<b>{{ task.courseName }}</b>
<small>{{ task.termName }} · {{ task.studentCount }} 名学生 · {{ task.sheetCount }} 张考勤表</small>
<small>{{ task.termName }} · {{ task.studentCount }} 名学生 · {{ task.sheetCount }} 张考勤表{{ task.status === 'Closed' ? ' · 已归档' : '' }}</small>
</button>
<el-empty v-if="!tasks.length" description="没有可点名的教学班" />
<el-pagination
@@ -810,7 +810,7 @@ onUnmounted(() => {
<strong>{{ selectedTask.courseName }}</strong>
<span>{{ selectedTask.taskNumber }} · {{ selectedTask.studentCount }} 名学生</span>
</div>
<el-button type="primary" :icon="Plus" @click="openCreate">新建考勤表</el-button>
<el-button type="primary" :icon="Plus" :disabled="selectedTask.status !== 'Published'" @click="openCreate">新建考勤表</el-button>
</header>
<div class="attendance-sheet-filters">
<el-input
@@ -1344,6 +1344,7 @@ onUnmounted(() => {
background: #e9f3f5;
border-left: 3px solid #176b87;
}
.attendance-task-list button.is-archived { opacity: .58; }
.attendance-task-list button > span {
color: var(--teal);
font: 700 10px/1.2 Consolas, monospace;