- 顶部新增 commit 清单表 - 每项补 root cause / 修复要点 / 验收 checklist - 当前阻塞项明确归属 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
11 KiB
11 KiB
test-0415 反馈问题 — 修复方案与执行计划
源:
docs/Testing/test-0415.md维护:本文档为执行表,每修一项更新【状态】与【验收】列。 工作量符号:S ≤ 1d,M = 2–3d,L = 1 周,XL = 1 周以上(涉及功能开发/产品对齐)。 最近更新:2026-05-03 P0 全部完成
0. 优先级排序与分阶段
| 阶段 | 目标 | 包含项 | 状态 |
|---|---|---|---|
| P0 当前迭代 | 已交付功能的 BUG 修复,影响主链路 | 4-1, 4-2, 4-3, 5-1, 6-1, 6-2, 6-3, 3-1 | ✅ 8/8 已修复,待 QA 现场回归 |
| P0+ 信息不足 | 反馈描述不清,需测试同学补充信息 | 4-3b | 🟡 阻塞 |
| P1 下一迭代 | 性能/体验优化,需要后端/Prompt 调优 | 3-2, 3-3, 3-4, 2-1, 2-2 | ⏳ 待启动 |
| P2 待立项 | 整块新功能,需产品/排期对齐 | 1-1(打卡:任务/福利/邀请), 5-2(一键借鉴) | 🔴 待 PRD |
0.1 已交付 commit 清单(fix/test-feedback-0403 分支)
| 项 | Commit | 摘要 |
|---|---|---|
| 4-1 食物图片归一化 | e9c2404 |
ToolFoodServiceImpl.normalizeImageForOutput 处理 3 类历史脏数据 |
| 4-2 按分类配置兜底默认图 | 6187a92 |
8 类 emoji+背景色映射,零新增图片资源 |
| 4-3 列表闪烁 | c089e8c |
空数组初始化 + foodLoaded 骨架占位 |
| 3-1 AI 营养师语音录入 | 82735a5 |
跳过 OSS 上传(mp3 被图片接口拒绝),改用 base64 一句话识别 |
| 5-1 社区关注状态不持久 | 5c0beec |
getDetail 补 isFollowed 字段,未登录默认 false |
| 6-1 购物车不可进入 | 33602ea |
switchTab → navigate(cart 未注册为 tabBar 页) |
| 6-2 联系客服失效 | f36f8ff |
小程序也存 chatUrl;空值兜底 toast;chatConfig 缺省值 |
| 6-3 下单流程 | 2c91cfe |
提交订单与拉起支付分离,跳转支付页支持二次支付 |
一、打卡模块
1-1 任务/福利/邀请功能未开发 — XL,P2
- 现状:
pages/tool/checkin.vue仅有发布打卡。 - 方案:拆 3 个子需求立项,每个独立设计文档:
- 打卡任务:每日/每周任务 + 完成进度 + 奖励发放(积分或优惠券)。需要
v2_checkin_task表 +/api/front/tool/checkin/tasks/*接口。 - 福利领取:连续打卡 N 天解锁福利(优惠券/积分)。复用
coupon与user_integral模块。 - 邀请好友:分享拉新,被邀请人完成首次打卡发奖。复用现有分享与 H5 路由。
- 打卡任务:每日/每周任务 + 完成进度 + 奖励发放(积分或优惠券)。需要
- 测试:每个子需求按 PRD 编写 E2E 用例,Playwright 覆盖。
- 验收:打卡 → 任务自动达成 → 福利可领 → 邀请链接被新用户使用后返奖。
- 状态:⏸ 待产品立项
二、食谱计算器模块
2-1 算法推荐准确性无校验 — M,P1
- 方案:
- 引入「校验规则集」JSON 配置(如:能量±10%、钾≤限值、磷钙比 1.0–1.5),后端在生成推荐后过滤。
- 加
/api/front/tool/calculator/validate接口给前端 mock 校对。 - 把 5 例标杆病例(医生标注)做单元测试基准。
- 验收:5 例基准全部通过;运行时不再出现钾/磷越限的推荐。
- 状态:⏳ P1
2-2 无操作历史记录 — M,P1
- 方案:
- 后端建
v2_calculator_history(user_id, input_json, result_json, created_at)。 POST /api/front/tool/calculator/calculate同步落库。- 新增
GET /history与「我的历史」页面,复用列表组件。
- 后端建
- 验收:计算 3 次后,历史页倒序展示 3 条,详情可重新载入参数。
- 状态:⏳ P1
三、AI 营养师模块
3-1 语音录入失效 — 已修复 ✓(82735a5)
- 根因:录音 mp3 被上传到
/api/front/upload/imageOuter(图片专用接口),后端uploadValidate用图片扩展名白名单校验,mp3 被拒。 - 修复:跳过 OSS 上传,本地读 base64 直接调用
/api/front/tencent/asr/sentence-recognition(sourceType=1),适用 ≤60s 的录音上限。 - 验收:
- 微信小程序录 5–15s 中文 → 文本回写输入框
- iOS / 安卓两端各成功 3 次
- 状态:✓ 代码已上,待 QA 真机回归
3-2 AI 文字回复响应慢 — M,P1
- 方案:
- 后端流式:检查
commit 58ea764修复是否回归,确保 SSE 不被网关缓冲(X-Accel-Buffering: no)。 - 前端:首字节立即停 loading 圈,逐 token 渲染。
- 监控接入:记录 TTFB 与 token/s,目标 TTFB < 1.5s。
- 后端流式:检查
- 验收:连续 5 条对话 P95 TTFB < 1.5s;首句出现到完整回复 ≤ 6s。
- 状态:⏳ P1
3-3 TTS 朗读延迟过高 — S,P1
- 方案:
- 把全文播放改为「分句缓冲,首句生成完即播」。
- Coze TTS 已具备分段返回,前端拼接队列即可。
- 验收:从点击播放到首句出声 ≤ 1.5s。
- 状态:⏳ P1
3-4 图文问答未基于上传图识别 — M,P1
- 假设:Coze multimodal 入参未把
image_url透传,或 prompt 里没引用图片。 - 方案:
- 后端
LLMServiceImpl在 message 里附content_type=image_url多模态字段。 - prompt 模板加入「请基于用户上传的图片回答」指令。
- 后端
- 验收:上传一张番茄图,AI 应识别为番茄并给出对应饮食建议;负样本(非食物图)应回应「不是食物」。
- 状态:⏳ P1
四、食物百科 & 健康知识
4-1 部分页面图片不显示 — 已修复 ✓(e9c2404)
- 根因:DB 里食物
image存了 3 类形态:相对crmebimage/...、双层 host 前缀脏数据、AI 生成的纯 OSS URL。前端getFoodImage只能正确处理纯 http URL,前两类显示失败。 - 修复:
ToolFoodServiceImpl.normalizeImageForOutput输出端归一化:定位crmebimage/片段 → 剥前缀 →prefixImage拼单层 cdnUrl;AI URL 透传。 - 验收:
- 列表页 / 详情页 / 相似推荐三处图片全部显示(后端已 01:21 重启)
- 至少包含 1 条历史脏数据样本验证
- 状态:✓ 代码与后端均已生效,待现场回归
4-2 按分类配置兜底默认图 — 已修复 ✓(6187a92)
- 根因:仅
food-placeholder.svg一张通用占位。 - 修复:8 个分类(
grain/vegetable/fruit/meat/seafood/dairy/bean/nut)各对应 emoji + 浅色背景;categoryType优先匹配,回落到中文category关键字推断。 - 验收:
- 故意把数据 image 置空,列表页按分类显示对应 emoji
- 分类无法识别时回落到通用 🍽️ 浅灰底
- 状态:✓ 代码已上,待现场回归
4-3 列表页面闪烁 — 已修复 ✓(c089e8c)
- 根因:
foodList初始化为 6 条 figma.com mock 数据,首屏先渲染拉不到的 figma 图片,再被 API 替换 → 闪烁。 - 修复:空数组初始化 +
foodLoaded标记 + 骨架占位;同时收纳scroll-view高度修复(BUG-003)。 - 验收:
- Chrome DevTools Slow 3G 模式刷新无 figma 残影
- Offline 模式不展示 mock 数据
- 状态:✓ 已上 fix/test-feedback-0403
4-3b UI 适配 bug — 信息不足
- 方案:要求测试同学补充:机型/分辨率、截图、复现步骤。否则无法定位。
- 状态:🟡 等待信息
五、社区模块
5-1 关注功能失效 — 已修复 ✓(5c0beec)
- 根因:后端
getDetail仅回传isLiked/isCollected,漏isFollowed字段。每次进入帖子页按钮都重置为「+ 关注」,用户重复点击 follow → unfollow,状态看似无效。 - 修复:补充
isFollowed查询;未登录场景三个状态都默认 false。 - 验收:A 关注 B → 退出 B 帖子页 → 重进 → 按钮显示「已关注」;再点 → 切回「+ 关注」并持久化。
- 状态:✓ 代码已上,待后端重启 + 现场回归
5-2 一键借鉴打卡仅做跳转 — L,P2
- 方案:
- 前端:「借鉴」按钮跳到打卡发布页时携带
referId。 - 后端:发布打卡接口接受
referId,在v2_checkin上记录原始打卡 ID 形成引用关系。 - 列表页展示「借鉴自 @xxx」徽章。
- 前端:「借鉴」按钮跳到打卡发布页时携带
- 验收:B 在 A 的打卡上点「借鉴」→ 发布页预填 A 的食物 → 提交后社区 B 的打卡显示「借鉴自 A」。
- 状态:⏸ P2
六、商城模块
6-1 购物车不可进入 — 已修复 ✓(33602ea)
- 根因:
order_addcart未注册为 tabBar 页,但商品详情页底部购物车<navigator open-type='switchTab'>用了switchTab→ 静默失败;pages/user/index.vueswitchTab/navigateTo 黑名单逻辑也搞反了。 - 修复:商品详情
open-type='navigate';用户中心黑/白名单纠正,仅user/index与goods_cate走 switchTab。 - 验收:
- 商品详情底部点购物车图标 → 进 cart 列表页
- 个人中心其他菜单跳转正常
- 状态:✓ 代码已上,待现场回归
6-2 联系客服失效 — 已修复 ✓(f36f8ff)
- 根因:①
chatUrl仅 H5/APP-PLUS 写入 vuex,小程序拿不到;②chatConfig缓存为 null 时模板 v-if 取属性报错;③chatUrl空值时仍跳到 web_page 显示空白。 - 修复:去掉
#ifdef;wxChatService空值兜底 toast「客服暂未配置」;chatConfig取不到给默认对象。 - 验收:
- 未先访问商城首页直接进「我的」点客服 → 给出明确 toast
- 访问过商城后客服入口正常打开
- 微信客服按钮
open-type='contact'在 wx_chat_independent='open' 时生效(需小程序后台配置)
- 状态:✓ 前端代码已上;如客服仍打不开,需要运营在小程序后台开通客服功能
6-3 下单流程 bug — 已修复 ✓(2c91cfe)
- 根因:
onCreate在orderCreate成功后立即调用getOrderPay→requestPayment,强制弹支付;用户取消后留在 confirm 页,二次支付走的是同一函数链,体验割裂。 - 修复:
onCreate改为redirectTo /pages/order/order_payment,由用户主动点「去支付」;payment()else 分支同步纠正。order_payment自带重试/取消处理。 - 验收:
- 提交订单不弹支付,跳到
order_payment页 - 手动「去支付」→ 弹起支付,取消 → 仍在
order_payment,再点「去支付」可重新拉起 - DB 中只有 1 条
store_order记录(不会重复落单)
- 提交订单不弹支付,跳到
- 状态:✓ 代码已上,待现场回归
执行节奏
按 P0 → P1 → P2 推进,每修完一项:
在 test-0415.md 行尾追加→ 改为本文件维护已修复 commit:<sha>- 更新本文件状态列与验收勾选
- push 到
fix/test-feedback-0403,由 QA 现场回归确认
当前阻塞 / 下一步
| 阻塞项 | 谁来推 |
|---|---|
| 后端 sophia profile 重启(让 4-1, 5-1 后端代码生效) | 你(IDEA 重启 PID 17597) |
| QA 现场回归 P0 8 项(按各项验收勾选清单) | 测试同学 |
| 4-3b UI bug 复现信息(机型/分辨率/截图) | 测试同学 |
| P1 启动(3-2, 3-3, 3-4, 2-1, 2-2) | 你确认顺序后我执行 |
| P2 PRD(1-1 打卡, 5-2 一键借鉴) | 产品 |