From 9cd93f267b721e159391f24210378b699bdca1a6 Mon Sep 17 00:00:00 2001 From: zq <136432190602163.com> Date: Sun, 4 Jan 2026 13:54:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=90=9C=E7=B4=A2=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E6=A1=86=E9=87=8D=E5=A4=8D=E8=AF=B7=E6=B1=82=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/clientSet/searchInput.vue | 93 +++++++++++++++++++------------- src/views/super/paiban/college.vue | 48 +++++++++++++++-- 2 files changed, 98 insertions(+), 43 deletions(-) diff --git a/src/components/clientSet/searchInput.vue b/src/components/clientSet/searchInput.vue index 70d1a39..b6bab03 100644 --- a/src/components/clientSet/searchInput.vue +++ b/src/components/clientSet/searchInput.vue @@ -8,6 +8,7 @@ :loading="loading" @select="handleSelect" @input="handleInput" + @clear="handleManualClear" :clearable="clearable" :size="size" :disabled="disabled" @@ -78,7 +79,19 @@ loading: false, timeout: null, lastSearchKeyword: '', - schoolList: [] + schoolList: [], + // 新增:记录最后一次有效选择 + lastValidSelection: null + } + }, + + mounted() { + // 初始化时记录当前选择 + if (this.selectedSchoolId && this.value) { + this.lastValidSelection = { + id: this.selectedSchoolId, + name: this.value + } } }, @@ -89,13 +102,10 @@ methods: { /** * 异步搜索学校 - * @param {string} queryString 搜索关键字 - * @param {Function} callback 回调函数 */ async querySearchAsync(queryString, callback) { const keyword = queryString.trim() - // 如果搜索内容为空或与上次相同,直接返回 if (!keyword || keyword === this.lastSearchKeyword) { callback([]) return @@ -104,7 +114,6 @@ this.lastSearchKeyword = keyword this.loading = true - // 使用防抖 clearTimeout(this.timeout) this.timeout = setTimeout(async () => { try { @@ -122,8 +131,6 @@ /** * 搜索学校API调用 - * @param {string} keyword 搜索关键字 - * @returns {Promise} 学校列表 */ async searchSchools(keyword) { try { @@ -143,66 +150,76 @@ /** * 处理选择事件 - * @param {Object} item 选中的学校对象 */ handleSelect(item) { - // 派发选中事件 + console.log('选中学校:', item) + + // 更新记录 + this.lastValidSelection = { + id: item.id, + name: item.name + } + this.$emit('select', item) - // 更新选中的学校ID this.$emit('update:selectedSchoolId', item.id) - // 更新输入框显示的值 this.$emit('input', item.name) this.$emit('change', item) }, /** - * 处理输入事件 - * @param {string} value 输入的值 + * 处理输入事件 - 安全版本 */ handleInput(value) { + console.log('输入变化:', value, '当前选中:', this.selectedSchoolId) + + // 只更新显示的值 this.$emit('input', value) - // 如果输入框被清空,触发清空事件 - if (!value) { - this.$emit('clear') - this.$emit('update:selectedSchoolId', null) - this.lastSearchKeyword = '' - } + + // 重要:这里不自动触发清空 + // 清空只会在 handleManualClear 中触发 + }, + handleManualClear() { + console.log('用户手动清空') + this.clearSelection() + }, + clearSelection() { + console.log('执行清空操作') + this.$emit('input', '') + this.$emit('update:selectedSchoolId', null) + this.$emit('clear') + this.lastSearchKeyword = '' + this.lastValidSelection = null }, - - /** - * 手动设置选中的学校 - * @param {Object} school 学校对象 - */ setSelectedSchool(school) { if (school && school.id && school.name) { + this.lastValidSelection = { + id: school.id, + name: school.name + } this.$emit('input', school.name) this.$emit('update:selectedSchoolId', school.id) this.$emit('select', school) } }, - - /** - * 清空选择 - */ clear() { - this.$emit('input', '') - this.$emit('update:selectedSchoolId', null) - this.$emit('clear') - this.lastSearchKeyword = '' + this.clearSelection() }, - /** - * 手动触发搜索 - * @param {string} keyword 搜索关键字 - * @returns {Promise} 学校列表 - */ async triggerSearch(keyword) { return await this.searchSchools(keyword || this.value) + }, + + /** + * 恢复上一次的有效选择 + */ + restoreLastSelection() { + if (this.lastValidSelection) { + this.setSelectedSchool(this.lastValidSelection) + } } } } -