修改实验页面设计

This commit is contained in:
2026-08-09 19:53:36 +08:00 Unverified
parent 97aa23bc64
commit d05b6df9f5
+70
View File
@@ -713,7 +713,69 @@ onMounted(async () => {
</div> </div>
</header> </header>
<div class="project-group-projects"> <div class="project-group-projects">
<el-table v-if="!isStudent" :data="group.projects" class="project-table" size="small">
<el-table-column width="46" align="center">
<template #default="{ row }">
<el-checkbox
v-if="row.status === 'Draft'"
:model-value="selectedProjectIds.includes(row.id)"
@change="toggleProjectSelection(row.id, $event)"
aria-label="选择实验项目"
/>
</template>
</el-table-column>
<el-table-column label="实验项目" min-width="220">
<template #default="{ row }">
<div class="table-project-name">
<b>{{ row.code }} · {{ row.name }}</b>
<small v-if="row.description">{{ row.description }}</small>
</div>
</template>
</el-table-column>
<el-table-column label="实验课次 / 场次" min-width="280">
<template #default="{ row }">
<div v-if="row.arrangementMode === 'Centralized' && row.scheduleEntry" class="table-schedule">
<b> {{ row.scheduleEntry.projectWeek ?? `${row.scheduleEntry.startWeek}${row.scheduleEntry.endWeek}` }} · 星期 {{ row.scheduleEntry.dayOfWeek }} · {{ row.scheduleEntry.startPeriod }}{{ row.scheduleEntry.startPeriod + row.scheduleEntry.periodCount - 1 }} </b>
<small>{{ row.scheduleEntry.campusName }} · {{ row.scheduleEntry.buildingName }} {{ row.scheduleEntry.classroomName }}</small>
</div>
<div v-else-if="row.sessions.length" class="table-schedule">
<b>{{ row.sessions.length }} 个开放场次</b>
<small>{{ row.sessions.map((session: any) => formatSessionTime(session)).join('') }}</small>
</div>
<span v-else class="table-muted">尚未安排</span>
</template>
</el-table-column>
<el-table-column label="方式" width="100" align="center">
<template #default="{ row }"><el-tag :type="row.arrangementMode === 'Centralized' ? 'primary' : 'success'" effect="plain">{{ modeMeta[row.arrangementMode].label }}</el-tag></template>
</el-table-column>
<el-table-column label="状态" width="88" align="center">
<template #default="{ row }"><el-tag :type="row.status === 'Published' ? 'success' : row.status === 'Closed' ? 'info' : 'warning'">{{ statusLabels[row.status] }}</el-tag></template>
</el-table-column>
<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"
type="primary"
:disabled="row.arrangementMode === 'Centralized' ? !row.scheduleEntry : !row.sessions.some((item: any) => item.status !== 'Cancelled')"
@click="publishProject(row)"
>发布</el-button>
</template>
<el-button v-else-if="row.status === 'Published'" size="small" text @click="closeProject(row)">关闭项目</el-button>
<el-button
v-if="row.status !== 'Closed' && row.arrangementMode === 'SelfScheduled'"
size="small"
text
type="primary"
@click="openSession(row)"
>安排场次</el-button>
</template>
</el-table-column>
</el-table>
<article <article
v-else
v-for="project in group.projects" v-for="project in group.projects"
:key="project.id" :key="project.id"
class="project-card" class="project-card"
@@ -1306,6 +1368,14 @@ onMounted(async () => {
.project-group-task { display: grid; justify-items: end; gap: 3px; color: #5c7481; font-size: 11px; text-align: right; } .project-group-task { display: grid; justify-items: end; gap: 3px; color: #5c7481; font-size: 11px; text-align: right; }
.project-group-task b { color: #365364; font-size: 12px; } .project-group-task b { color: #365364; font-size: 12px; }
.project-group-projects { display: grid; gap: 0; padding: 0; } .project-group-projects { display: grid; gap: 0; padding: 0; }
.project-table { --el-table-border-color: #dce5ea; --el-table-header-bg-color: #f7fafb; --el-table-row-hover-bg-color: #f6fafb; width: 100%; }
.project-table :deep(th.el-table__cell) { padding: 8px 0; color: #617986; font-size: 11px; font-weight: 650; }
.project-table :deep(td.el-table__cell) { padding: 9px 0; vertical-align: top; }
.table-project-name, .table-schedule { display: grid; gap: 4px; min-width: 0; }
.table-project-name b { color: var(--lab-ink); font-size: 13px; }
.table-project-name small, .table-schedule small { overflow: hidden; color: #667f8d; font-size: 11px; line-height: 1.45; text-overflow: ellipsis; white-space: nowrap; }
.table-schedule b { color: #365364; font-size: 12px; font-weight: 600; }
.table-muted { color: #8b9aa4; font-size: 12px; }
.project-card { .project-card {
overflow: hidden; overflow: hidden;
border: 0; border: 0;