From d1d149c3a06c33b828647c5c80a1025925320deb Mon Sep 17 00:00:00 2001 From: Euni4U <958079825@qq.com> Date: Fri, 4 Apr 2025 16:57:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E6=9C=9F=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Medical-examination-vehicle.vue | 262 +++++++++++++++--- 1 file changed, 216 insertions(+), 46 deletions(-) diff --git a/src/views/Department-entry/Medical-examination-vehicle.vue b/src/views/Department-entry/Medical-examination-vehicle.vue index fbaed2b..bb12c49 100644 --- a/src/views/Department-entry/Medical-examination-vehicle.vue +++ b/src/views/Department-entry/Medical-examination-vehicle.vue @@ -20,7 +20,13 @@ > 同步 - + 刷新列表 @@ -29,39 +35,65 @@
- + 待检查 已检查 已打印
+ +
+ +
+
-
-
- {{ patient.pname }} - {{ patient.medicalSn }} - - {{ getStatusText(patient) }} - -
- +
+
+
{ // 获取搜索结果 const res = await PatientApi.getPatientInfoByMedicalSn(searchQuery.value) - // 根据返回的数据结构调整处理逻辑 + + // 检查返回的数据 if (res) { - // 检查返回的是单个对象还是列表 - patients.value = res - total.value = res.length + if (Array.isArray(res)) { + patients.value = res + total.value = res.length + } else if (res.list && Array.isArray(res.list)) { + patients.value = res.list + total.value = res.total || res.list.length + } else { + console.warn('搜索返回的数据格式不符合预期:', res) + patients.value = [] + total.value = 0 + } } else { + console.warn('搜索返回的数据为空') patients.value = [] total.value = 0 } @@ -575,8 +618,16 @@ const handleLocalSearch = async () => { loading.close() } catch (error) { console.error('搜索患者失败:', error) - ElMessage.error('搜索患者失败') - loading.close() + if (error.response) { + console.error('服务器响应错误:', error.response) + ElMessage.error(`搜索失败: ${error.response.status} ${error.response.statusText}`) + } else if (error.request) { + console.error('请求错误:', error.request) + ElMessage.error('网络请求失败,请检查网络连接') + } else { + console.error('其他错误:', error.message) + ElMessage.error('搜索失败: ' + error.message) + } } } @@ -596,11 +647,25 @@ const getPatientList = async () => { const res = await PatientApi.getPatientPage(params) - if (res.list && res.list.length > 0) { - patients.value = res.list - originalPatients.value = res.list - total.value = res.total + if (res) { + // 检查返回的数据结构 + if (Array.isArray(res.list)) { + patients.value = res.list + originalPatients.value = res.list + total.value = res.total || res.list.length + } else if (Array.isArray(res)) { + // 如果直接返回数组 + patients.value = res + originalPatients.value = res + total.value = res.length + } else { + console.warn('返回的数据格式不符合预期:', res) + patients.value = [] + originalPatients.value = [] + total.value = 0 + } } else { + console.warn('返回的数据为空') patients.value = [] originalPatients.value = [] total.value = 0 @@ -609,7 +674,17 @@ const getPatientList = async () => { loading.close() } catch (error) { console.error('获取患者列表出错:', error) - ElMessage.error('获取患者列表失败') + // 检查错误类型 + if (error.response) { + console.error('服务器响应错误:', error.response) + ElMessage.error(`服务器错误: ${error.response.status} ${error.response.statusText}`) + } else if (error.request) { + console.error('请求错误:', error.request) + ElMessage.error('网络请求失败,请检查网络连接') + } else { + console.error('其他错误:', error.message) + ElMessage.error('获取患者列表失败: ' + error.message) + } } } @@ -1387,8 +1462,9 @@ const handleRefresh = async (e) => { biochemical: { summary: '' } } - // 清空搜索栏 + // 清空搜索栏和日期范围 searchQuery.value = '' + dateRange.value = [] // 重置状态筛选 statusFilter.value = '0' @@ -2054,37 +2130,56 @@ const filteredPatients = computed(() => { return result }) -// 添加状态筛选变化处理函数 -const handleStatusFilterChange = async (value) => { - statusFilter.value = value - // 重置选中的患者 - selectedPatient.value = null // 清空选中的患者 - searchQuery.value = '' // 清空搜索词 - pageNo.value = 1 // 重置页码为第一页 +// 添加加载状态 +const loading = ref(false) +// 添加防抖处理的状态切换函数 +const debouncedStatusChange = debounce(async (value) => { try { + loading.value = true const params = { - pageNo: pageNo.value, + pageNo: 1, // 重置为第一页 pageSize: pageSize.value, isprint: null } // 根据不同的状态值设置不同的查询参数 if (value === '2') { - // 已打印状态,查询 isprint 为 1 的数据 params.isprint = 1 } else { - // 其他状态,使用 status 字段查询 params.status = value } - const res = await PatientApi.getPatientPage(params) + // 添加超时处理 + const timeoutPromise = new Promise((_, reject) => { + setTimeout(() => reject(new Error('请求超时')), 10000) // 10秒超时 + }) + + const fetchPromise = PatientApi.getPatientPage(params) + + const res = await Promise.race([fetchPromise, timeoutPromise]) + patients.value = res.list total.value = res.total + selectedPatient.value = null + searchQuery.value = '' + dateRange.value = [] } catch (error) { console.error('获取患者列表失败:', error) - ElMessage.error('获取患者列表失败') + if (error.message === '请求超时') { + ElMessage.error('请求超时,请稍后重试') + } else { + ElMessage.error('获取患者列表失败') + } + } finally { + loading.value = false } +}, 300) // 300ms的防抖延迟 + +// 修改状态筛选变化处理函数 +const handleStatusFilterChange = (value) => { + statusFilter.value = value + debouncedStatusChange(value) } // 添加检查是否已完成的响应式引用 @@ -2384,6 +2479,36 @@ const getDoctorList = async () => { ElMessage.error('获取医生列表失败') } } + +// 添加日期范围选择相关的响应式引用 +const dateRange = ref([]) + +// 添加日期范围变化处理函数 +const handleDateRangeChange = async (val) => { + try { + const params = { + pageNo: pageNo.value, + pageSize: pageSize.value, + isprint: 1 // 保持已打印状态 + } + + // 只有在有日期范围时才添加日期条件 + if (val && val.length === 2) { + const [startDate, endDate] = val + params.printTimeRange = [ + startDate ? `${startDate} 00:00:00` : null, + endDate ? `${endDate} 23:59:59` : null + ] + } + + const res = await PatientApi.getPatientPage(params) + patients.value = res.list + total.value = res.total + } catch (error) { + console.error('按日期获取患者列表失败:', error) + ElMessage.error('获取患者列表失败') + } +}