diff --git a/frontend/src/views/teachBusiness/venue/index.vue b/frontend/src/views/teachBusiness/venue/index.vue index 766ce1cb..b494473a 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(() => {}) },