实验排课修复

This commit is contained in:
2026-08-09 14:20:19 +08:00 Unverified
parent c692002676
commit fa528baf33
+35 -5
View File
@@ -90,6 +90,12 @@ const filteredRows = computed(() => {
.filter(Boolean).some((value) => String(value).toLowerCase().includes(q)), .filter(Boolean).some((value) => String(value).toLowerCase().includes(q)),
) )
}) })
const currentPage = ref(1)
const pageSize = ref(20)
const pagedRows = computed(() => filteredRows.value.slice(
(currentPage.value - 1) * pageSize.value,
currentPage.value * pageSize.value,
))
const venueNatureOptions = [ const venueNatureOptions = [
{ value: 1, label: '普通教室' }, { value: 1, label: '普通教室' },
{ value: 2, label: '实验室' }, { value: 2, label: '实验室' },
@@ -99,8 +105,17 @@ const venueNatureOptions = [
{ value: 32, label: '体育场地' }, { value: 32, label: '体育场地' },
{ value: 64, label: '艺术场地' }, { value: 64, label: '艺术场地' },
] ]
const venueNatureLabel = (value: number) => venueNatureOptions const venueNatureValue = (value: unknown) => {
.filter((item) => (Number(value) & item.value) !== 0) if (typeof value === 'number') return value
if (typeof value !== 'string') return 0
const names: Record<string, number> = {
GeneralClassroom: 1, Laboratory: 2, TrainingRoom: 4, ComputerLab: 8,
LanguageLab: 16, SportsVenue: 32, ArtsVenue: 64,
}
return value.split(',').reduce((sum, name) => sum | (names[name.trim()] ?? 0), 0)
}
const venueNatureLabel = (value: unknown) => venueNatureOptions
.filter((item) => (venueNatureValue(value) & item.value) !== 0)
.map((item) => item.label) .map((item) => item.label)
.join('、') || '未设置' .join('、') || '未设置'
@@ -116,7 +131,7 @@ function resetForm(row?: Row) {
capacity: 60, roomType: '普通教室', teachingVenueNatures: [1], equipment: '', capacity: 60, roomType: '普通教室', teachingVenueNatures: [1], equipment: '',
}, row ?? {}) }, row ?? {})
if (active.value === 'classrooms') { if (active.value === 'classrooms') {
const value = Number((row as any)?.teachingVenueNature ?? 1) const value = venueNatureValue((row as any)?.teachingVenueNature ?? 1)
form.teachingVenueNatures = venueNatureOptions form.teachingVenueNatures = venueNatureOptions
.filter((item) => (value & item.value) !== 0) .filter((item) => (value & item.value) !== 0)
.map((item) => item.value) .map((item) => item.value)
@@ -125,6 +140,7 @@ function resetForm(row?: Row) {
async function load() { async function load() {
loading.value = true loading.value = true
currentPage.value = 1
try { try {
rows.value = (await http.get(`/base-data/${active.value}`)).data rows.value = (await http.get(`/base-data/${active.value}`)).data
} catch (error) { } catch (error) {
@@ -290,6 +306,11 @@ onMounted(async () => {
await Promise.all([load(), loadReferences()]) await Promise.all([load(), loadReferences()])
}) })
watch(
() => keyword.value,
() => { currentPage.value = 1 },
)
watch( watch(
() => route.meta.baseGroup, () => route.meta.baseGroup,
async () => { async () => {
@@ -363,7 +384,7 @@ watch(
<div v-if="active === 'terms'" class="term-mobile-list"> <div v-if="active === 'terms'" class="term-mobile-list">
<article <article
v-for="row in filteredRows" v-for="row in pagedRows"
:key="row.id" :key="row.id"
:class="academicTermRowClass(row)" :class="academicTermRowClass(row)"
> >
@@ -406,7 +427,7 @@ watch(
<el-table <el-table
v-loading="loading" v-loading="loading"
:data="filteredRows" :data="pagedRows"
:row-class-name="termTableRowClass" :row-class-name="termTableRowClass"
class="data-table" class="data-table"
:class="{ 'term-desktop-table': active === 'terms' }" :class="{ 'term-desktop-table': active === 'terms' }"
@@ -472,6 +493,15 @@ watch(
</el-table-column> </el-table-column>
<template #empty><el-empty description="暂无数据,点击右上角开始新增" /></template> <template #empty><el-empty description="暂无数据,点击右上角开始新增" /></template>
</el-table> </el-table>
<el-pagination
v-if="filteredRows.length > pageSize"
v-model:current-page="currentPage"
v-model:page-size="pageSize"
class="table-pagination"
layout="total, sizes, prev, pager, next"
:page-sizes="[20, 50, 100]"
:total="filteredRows.length"
/>
</section> </section>
<el-dialog v-model="dialogVisible" :title="`${editingId ? '编辑' : '新增'}${title}`" width="560px"> <el-dialog v-model="dialogVisible" :title="`${editingId ? '编辑' : '新增'}${title}`" width="560px">