From 3276f479281a5b8cb629bbc6ab162a919cacf8b7 Mon Sep 17 00:00:00 2001 From: yangbin <1796443586@qq.com> Date: Tue, 25 Aug 2026 17:20:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=99=E5=AD=A6=E4=B8=9A=E5=8A=A1=EF=BC=9A?= =?UTF-8?q?=E6=95=99=E5=AD=A6=E5=9C=BA=E5=9C=B0=E9=87=8C=E7=9A=84=E6=95=99?= =?UTF-8?q?=E5=AD=A6=E5=9C=BA=E5=9C=B0=E7=B1=BB=E5=9E=8B=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E6=A1=86=20=E5=8F=8D=E5=90=91=E8=A6=86=E7=9B=96=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/teachBusiness/venue/index.vue | 49 ++++++++++++++----- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/frontend/src/views/teachBusiness/venue/index.vue b/frontend/src/views/teachBusiness/venue/index.vue index 766ce1cb0..b494473a2 100644 --- a/frontend/src/views/teachBusiness/venue/index.vue +++ b/frontend/src/views/teachBusiness/venue/index.vue @@ -199,7 +199,8 @@ import { addClassroom, deleteClassroom, updateClassroom, - listClassroom + listClassroom, + listAllClassroom } from '@/api/teachBusiness/classroom' export default { @@ -215,6 +216,7 @@ export default { ty: '' }, tableData: [], + jxcdlxOptions: [], total: 0, pageNum: 1, pageSize: 20, @@ -230,20 +232,42 @@ export default { } } }, - computed: { - /** 教学场地类型下拉:由已加载数据中的去重值动态生成,避免硬编码 */ - jxcdlxOptions() { - const set = new Set() - this.tableData.forEach(row => { - if (row.jxcdlx) set.add(row.jxcdlx) - }) - return Array.from(set) - } - }, created() { + this.loadVenueTypeOptions() this.fetchList() }, methods: { + /** + * 独立加载全部场地类型,避免查询结果收窄后下拉候选项同步丢失。 + */ + loadVenueTypeOptions() { + return listAllClassroom().then(response => { + this.jxcdlxOptions = this.collectVenueTypes(response.data || []) + }).catch(() => { + // 全量接口异常时保留已收集选项,避免影响列表的基本查询功能。 + this.mergeVenueTypeOptions(this.tableData) + }) + }, + + collectVenueTypes(classrooms) { + const venueTypes = new Set() + classrooms.forEach(classroom => { + const venueType = classroom.jxcdlx && String(classroom.jxcdlx).trim() + if (venueType) { + venueTypes.add(venueType) + } + }) + + return Array.from(venueTypes).sort((first, second) => first.localeCompare(second, 'zh-CN')) + }, + + mergeVenueTypeOptions(classrooms) { + const venueTypes = new Set(this.jxcdlxOptions) + this.collectVenueTypes(classrooms).forEach(venueType => venueTypes.add(venueType)) + this.jxcdlxOptions = Array.from(venueTypes) + .sort((first, second) => first.localeCompare(second, 'zh-CN')) + }, + /* ---------- 列表加载 ---------- */ fetchList() { this.loading = true @@ -260,6 +284,7 @@ export default { listClassroom(params).then(response => { const data = response.data || {} this.tableData = data.records || [] + this.mergeVenueTypeOptions(this.tableData) this.total = data.total || 0 }).catch(() => { this.tableData = [] @@ -324,6 +349,7 @@ export default { req.then(() => { this.$message.success(isEdit ? '修改成功' : '新增成功') this.dialog.visible = false + this.loadVenueTypeOptions() this.fetchList() }).catch(() => {}).finally(() => { this.dialog.submitting = false @@ -341,6 +367,7 @@ export default { return deleteClassroom(row.id) }).then(() => { this.$message.success('删除成功') + this.loadVenueTypeOptions() this.fetchList() }).catch(() => {}) },