# uni-app 患者动态加载失败显示问题与修复 ## 问题现象 在医生首页的患者动态模块中,当接口调用失败时,页面显示“暂无患者动态”,这会误导用户认为没有患者动态数据,而不是加载失败。用户无法区分是成功获取但无数据,还是网络错误或其他原因导致的加载失败。 ## 原因分析 代码中 `fetchPatientActivities` 函数在 catch 块中设置 `patientActivities.value = []`,与成功但无数据时的处理相同。模板只检查 `patientActivities.length === 0` 来显示“暂无患者动态”,没有区分失败状态。 ## 解决办法 1. **添加错误状态变量**: - 新增 `patientActivitiesError` ref,用于标记加载是否失败。 2. **更新加载逻辑**: - 在 `fetchPatientActivities` 中,成功时设置 `patientActivitiesError.value = false`。 - 失败时设置 `patientActivitiesError.value = true`。 3. **修改模板显示**: - 成功但无数据:`v-if="patientActivities.length === 0 && !patientActivitiesError"` 显示“暂无患者动态”。 - 加载失败:`v-if="patientActivitiesError"` 显示“加载失败,请重试”并提供重试按钮。 4. **添加样式**: - 为错误提示和重试按钮定义 CSS 样式。 ## 代码示例 ```javascript // 添加状态变量 const patientActivitiesError = ref(false) // 更新获取函数 const fetchPatientActivities = async () => { try { patientActivitiesLoading.value = true patientActivitiesError.value = false // ... 接口调用 } catch (err) { patientActivitiesError.value = true patientActivities.value = [] } finally { patientActivitiesLoading.value = false } } ``` ```vue 暂无患者动态 加载失败,请重试 重试 ``` ## 经验总结 在开发中,UI 状态管理需要仔细区分不同场景(如加载中、成功无数据、失败),避免单一状态导致的用户体验问题。建议: - 使用多个状态变量来精确控制显示逻辑。 - 失败时提供明确的错误提示和恢复操作(如重试按钮)。 - 参考现有代码模式,确保一致性。