- 添加 Gemini 2.5 Flash 对话接口(流式+非流式) - 添加 NanoBanana 图像生成/编辑接口 - 添加 Sora2 视频生成接口(文生视频、图生视频、去水印) - 移除 models-integration 子项目(功能已迁移至主后端) - 新增测试文档和 Playwright E2E 配置 - 更新前端页面和 API 接口 - 更新后端配置和日志处理
43 lines
2.7 KiB
Plaintext
43 lines
2.7 KiB
Plaintext
|
||
BUG-008 已按你的要求修好,修改总结如下。
|
||
|
||
---
|
||
|
||
## 1. 逻辑与数据流(已确认)
|
||
|
||
- **`postData.nutritionStats`**:在 `data()` 里初始化为 `[]`;在 `formatPostData()` 里由 `buildNutritionStatsFromDetailData(data)` 得到并赋值。
|
||
- **加载入口**:`loadPostData(id)` 调 `getCommunityDetail(id)`,再用返回的 `data` 做 `formatPostData(data)`。
|
||
- **后端社区详情**:返回 `nutritionDataJson`、`checkInRecordId`,**没有** `nutritionStats` 数组。
|
||
`buildNutritionStatsFromDetailData` 已支持:
|
||
- `nutritionStats` / `nutrition_stats`
|
||
- `nutritionDataJson` / `nutrition_data_json`(解析出 calories、protein、potassium、phosphorus)
|
||
- `dietaryData` / `mealData` / `dietary_data` / `meal_data`
|
||
- **打卡详情**:当详情里没有营养数据但有 `checkInRecordId` 时,会再调 `getCheckinDetail(checkInRecordId)`;返回里有 `actualEnergy`、`actualProtein`,已用 `buildNutritionStatsFromCheckinDetail` 转成 `[{label, value}, ...]` 并写回 `postData.nutritionStats`。
|
||
|
||
---
|
||
|
||
## 2. 实际修改内容
|
||
|
||
**(1)用打卡详情补全营养数据并等待完成**
|
||
|
||
- 原来:`fillNutritionStatsFromCheckin(data.checkInRecordId)` 未 `await`,页面先渲染,营养卡常为空。
|
||
- 现在:在「无营养数据 + 有 checkInRecordId」时改为 **`await this.fillNutritionStatsFromCheckin(data.checkInRecordId)`**,在加载结束前就拿到打卡详情并填好 `nutritionStats`,营养卡能稳定显示。
|
||
|
||
**(2)显示条件改为“只看数组长度”且做防御**
|
||
|
||
- 要求:v-if 用 `nutritionStats.length > 0`,不依赖后端是否返回某字段。
|
||
- 实现:
|
||
- 增加计算属性 **`nutritionStatsLength`**:
|
||
`(postData && postData.nutritionStats)` 且为数组时返回 `length`,否则为 `0`,避免 `nutritionStats` 未定义时报错。
|
||
- 营养统计卡片的 v-if 改为:**`v-if="nutritionStatsLength > 0"`**。
|
||
这样显示只依赖「当前页面的 nutritionStats 数组是否有项」,与后端字段名无关。
|
||
|
||
---
|
||
|
||
## 3. 未改动的部分(已符合需求)
|
||
|
||
- 后端无 `nutritionStats` 时,已通过「打卡详情」的 `actualEnergy`、`actualProtein` 等计算并填充 `nutritionStats`(格式 `[{label:'蛋白质', value:'56g'}, ...]`),无需再改。
|
||
- 后端有 `nutritionDataJson` 等不同命名时,`buildNutritionStatsFromDetailData` 里已有多种字段名和 `dietaryData`/`mealData` 的兼容,无需额外映射修改。
|
||
|
||
当前逻辑是:先尝试从详情/`nutritionDataJson`/饮食数据得到 `nutritionStats`;若仍为空且存在 `checkInRecordId`,则 **await** 拉取打卡详情并据此填充;展示上只用 **`nutritionStatsLength > 0`** 控制营养卡显示。
|