From cb05cf104404fdb1e74c3fed14c821ec1ff8b59d Mon Sep 17 00:00:00 2001 From: scottpan <43121650@qq.com> Date: Thu, 5 Mar 2026 11:28:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=B8=96=E5=AD=90?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E8=90=A5=E5=85=BB=E6=95=B0=E6=8D=AE=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E6=97=B6=E6=97=A0=E6=B3=95=E4=BB=8E=E6=89=93=E5=8D=A1?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E8=A1=A5=E5=85=85=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题原因: - nutritionDataJson 为 "{}" 时生成 4 项都是 "-" 的数组 - 因为 length===4 而非 0,未触发从打卡详情补数据逻辑 修复内容: - 空对象 {} 返回 [],触发后续补数据逻辑 - 全为 "-" 的无效数据也返回 [] - 兼容 check_in_record_id 下划线命名 - 当 checkInRecordId 存在且营养数据为空时,自动从打卡详情补充 由 Cursor CLI 检测并修复 --- msh_single_uniapp/pages/tool/post-detail.vue | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/msh_single_uniapp/pages/tool/post-detail.vue b/msh_single_uniapp/pages/tool/post-detail.vue index c6e532b..91c01a9 100644 --- a/msh_single_uniapp/pages/tool/post-detail.vue +++ b/msh_single_uniapp/pages/tool/post-detail.vue @@ -334,8 +334,9 @@ export default { // 格式化帖子数据 this.formatPostData(data) - // 若详情接口未返回营养数据且有关联打卡记录,则根据打卡详情补充营养统计(等待完成后再结束加载) - const checkInId = data.checkInRecordId != null ? (Number(data.checkInRecordId) || data.checkInRecordId) : null + // 若详情接口未返回有效营养数据且有关联打卡记录,则根据打卡详情补充营养统计(等待完成后再结束加载) + const rawCheckInId = data.checkInRecordId ?? data.check_in_record_id + const checkInId = rawCheckInId != null ? (Number(rawCheckInId) || rawCheckInId) : null if (this.postData.nutritionStats.length === 0 && checkInId != null) { await this.fillNutritionStatsFromCheckin(checkInId) } @@ -395,8 +396,17 @@ export default { value: s.value != null ? String(s.value) : '-' })).filter(s => s.label) } - // 2b) 对象格式:兼容后端 fill-nutrition 的 energyKcal/proteinG/potassiumMg/phosphorusMg 及常见命名 - return this.buildNutritionStatsFromNutritionObject(nutritionData) + // 2b) 对象格式:空对象 "{}" 视为无营养数据,返回 [] 以便走打卡详情/服务端填充 + if (!Array.isArray(nutritionData) && Object.keys(nutritionData).length === 0) { + return [] + } + // 2c) 有键的对象:兼容后端 fill-nutrition 的 energyKcal/proteinG 等 + const statsFromJson = this.buildNutritionStatsFromNutritionObject(nutritionData) + // 若解析后全部为占位符 "-",视为无效数据,返回 [] 以便走打卡/服务端填充 + if (statsFromJson.length > 0 && statsFromJson.every(s => s.value === '-')) { + return [] + } + return statsFromJson } catch (e) { // ignore }