fix(来信提示): 未填孕产期不显示「宝宝来信」提示 —— 卡与红点同一次判定一起收 (v26092211)

产品口径(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)→ 都无
This commit is contained in:
2026-09-22 21:20:46 +08:00
parent ab8a3a5ea0
commit 3ab8af2bf5
2 changed files with 57 additions and 41 deletions

View File

@@ -7,7 +7,7 @@
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>兜爸心选 · 孕育陪伴</title>
<!-- V:26092210 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<!-- V:26092211 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<link rel="stylesheet" href="mama-box.css">
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<!-- 共享助手:授权/跳商城/位置上报(分享卡片同步,见 docs/h5-auth-standard.md 第四节) -->
@@ -131,8 +131,9 @@
</div>
<!-- 宝宝来信提醒卡。**数据源是 laixin(第三方「宝宝来信」应用)**,
由 js 里的 syncLaixinReminder() → applyLaixinReminder() 唯一负责显隐与文案
(拉 /api/mp/public/laixin/unread,unread > 0 才显示、带 .has-new 小红点)。
由 js 里的 syncLaixinReminder()(拉数)→ renderLetterReminder()(渲染)唯一负责显隐与文案
(拉 /api/mp/public/laixin/unread;**未建档一律不提示**,建档后 unread > 0 才显示,
卡与底 tab 红点由同一次判定同时落 —— 2026-09-22 产品口径)。
点击 = 跳 laixin,与底 tab「宝宝来信」同落点(app.js 里绑的是 openLetterApp)。
⚠️ 2026-09-20:这张卡**默认就是收起的**(标记里直接带 .hide,
@@ -147,7 +148,7 @@
<span class="lc-envwrap"><img class="lc-env" src="assets/img/02cf420f0d07.png" alt="" aria-hidden="true"></span>
<div class="lc-body">
<!-- ⚠️ 这段只是**兜底**(正常情况下用户看不到:卡默认 .hide,
有未读时由 applyLaixinReminder() 改写成「小汤圆来信」+ 通用提醒文案)。
有未读时由 renderLetterReminder() 改写成「宝宝来信」+ 通用提醒文案)。
改这几行时连着那边一起看,否则会出现「HTML 里写着一套、屏幕上是另一套」。
⚠️ 上一批这里短暂叫过「宝宝的新消息」,本批随整条线退回「来信」。 -->
<div class="lc-title" id="lcTitle">宝宝来信</div>
@@ -156,7 +157,7 @@
</div>
</button>
<!-- 来信卡收起来时由 hideLetterCard() / applyLaixinReminder() 给 #homeBody 挂 .no-letter,
<!-- 来信卡收起来时由 hideLetterCard() / renderLetterReminder() 给 #homeBody 挂 .no-letter,
把下面第一块(.tool-dock)的上间距补回来。
⚠️ 2026-09-20:它**默认就带 .no-letter**(与 #homeLetter 默认带 .hide 配套,
首屏按「没有来信卡」排版,避免数据回来时布局跳一下)。