产品口径(2026-09-22):**没填孕产期(pregEmpty)就不该出现宝宝来信提示**, 显示了不合理。这条**覆盖**了代码里原先那条决定(「来信与建档是两件事,故意不看 pregEmpty」)—— 那条当时是为了修「红点有、卡没有」,方向反了,见下。 做法:把首页卡与底 tab 红点收进**唯一渲染入口** renderLetterReminder(),用同一个 判据同时决定两处(pregEmpty 是硬门槛 → 建档后看 unread > 0 → 上游降级保持现状), 并把最近一次未读结果存进 _laixinUnread,供建档状态变化时重算: · syncLaixinReminder():拿到结果后交给 render(不再自己 toggle 红点); · syncPregnancy():未建档分支与建档分支各调一次 render。 于是无论 laixin 与 /profile 谁先回来,都收敛到同一结果(时序无关)。 顺带消掉上一版残留的竞态:此前红点与卡各写一份判据 —— laixin 先回来(亮红点 + 显示卡)、 /profile 后回来(只藏卡),就得到「红点有、卡没有」。现在同源同判。 另外把已不存在的 applyLaixinReminder() 的注释引用一并改掉(js + index.html 共 3 处)。 无头浏览器 + 桩后端实测(profile 延迟 0 / 1.5 / 3s,覆盖两种返回顺序): 未建档 unread=1 → 卡与红点**都无**(三档一致) 已建档 unread=1 → **都有**(确认没把建档用户一起关掉) 已建档 unread=0 → 都无 访客(无 openid)→ 都无
117 KiB
117 KiB