实验排课修复
This commit is contained in:
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user