fix: 修复帖子详情营养数据为占位符 '-' 时无法从打卡记录补充的问题
根本原因:
- buildNutritionStatsFromDetailData 返回 [{value: '-'}, ...] 而非 []
- loadPostData 用 length===0 判断,但 4 个 '-' 时 length=4,不会走打卡补数据
修复内容:
- 增加 hasValidNutritionStats() 判断,检测是否有至少一项非占位符
- rawStats 映射后若全为 '-' 则返回 []
- formatPostData 中若 nutritionStats 全为占位符则强制设为 []
- 只有无有效营养数据时才调用 fillNutritionStatsFromCheckin 和 fillNutritionFromServer
由 Cursor CLI 检测并修复
This commit is contained in:
@@ -338,14 +338,21 @@ export default {
|
||||
// 格式化帖子数据
|
||||
this.formatPostData(data)
|
||||
|
||||
// 判断是否有有效营养数据(有至少一项非占位符)
|
||||
const hasValidNutritionStats = () => {
|
||||
const arr = this.postData.nutritionStats
|
||||
if (!Array.isArray(arr) || arr.length === 0) return false
|
||||
return arr.some(s => s.value !== '-' && s.value !== '')
|
||||
}
|
||||
|
||||
// 若详情接口未返回有效营养数据且有关联打卡记录,则根据打卡详情补充营养统计(等待完成后再结束加载)
|
||||
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) {
|
||||
if (!hasValidNutritionStats() && checkInId != null) {
|
||||
await this.fillNutritionStatsFromCheckin(checkInId)
|
||||
}
|
||||
// T07: 营养仍为空时调用服务端填充接口
|
||||
if (this.postData.nutritionStats.length === 0) {
|
||||
// T07: 营养仍无有效数据时调用服务端填充接口
|
||||
if (!hasValidNutritionStats()) {
|
||||
await this.fillNutritionFromServer()
|
||||
}
|
||||
|
||||
@@ -381,10 +388,15 @@ export default {
|
||||
// 1) 后端直接返回的 stat 数组(兼容不同命名)
|
||||
const rawStats = data.nutritionStats || data.nutrition_stats
|
||||
if (Array.isArray(rawStats) && rawStats.length > 0) {
|
||||
return rawStats.map(s => ({
|
||||
const mapped = rawStats.map(s => ({
|
||||
label: s.label || s.name || '',
|
||||
value: s.value != null ? String(s.value) : '-'
|
||||
})).filter(s => s.label)
|
||||
// 若全部为占位符 "-",视为无有效数据,返回 [] 以便走打卡详情/服务端填充
|
||||
if (mapped.length > 0 && mapped.every(s => s.value === '-' || s.value === '')) {
|
||||
return []
|
||||
}
|
||||
return mapped
|
||||
}
|
||||
|
||||
// 2) nutritionDataJson / nutrition_data_json(兼容后端驼峰与下划线;含 fill-nutrition 的 energyKcal/proteinG/potassiumMg/phosphorusMg、打卡字段 actualEnergy/actualProtein)
|
||||
@@ -626,7 +638,11 @@ export default {
|
||||
|
||||
// 解析营养数据:支持多种后端字段名,以及从打卡数据计算
|
||||
let nutritionStats = this.buildNutritionStatsFromDetailData(data)
|
||||
|
||||
// 若全部为占位符 "-",视为无有效数据,避免占位数组阻塞后续打卡详情/服务端填充
|
||||
if (Array.isArray(nutritionStats) && nutritionStats.length > 0 && nutritionStats.every(s => s.value === '-' || s.value === '')) {
|
||||
nutritionStats = []
|
||||
}
|
||||
|
||||
// 提取纯文本内容
|
||||
let description = ''
|
||||
if (data.content) {
|
||||
|
||||
Reference in New Issue
Block a user