feat(盲盒): 价值感改造一期前端 —— 待解锁任务 / 宝宝周记 / 集齐奖励 / 下周预告 (v26100107)

- 待解锁:错过的周 + 三个工具任务(进度、去完成跳应用、解锁按钮),卡册格子 🔒
- 翻卡层加「宝宝周记」;卡册点开带周记与宝宝的话
- 卡册顶部集齐奖励:三段 + 全集,差 N 张 / 待发放 / 已发放 / 填收货信息
- 集齐庆祝弹层 + 收货信息表单(POST /blindbox/claim)
- 本周已开时显示下周卡片剪影 + 倒计时;横幅优先提示可解锁 / 离 XX 大奖还差 N 张

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 03:15:16 +00:00
parent ec87d36db2
commit 555012f248
3 changed files with 252 additions and 9 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:26100106 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<!-- V:26100107 缓存版本标记:改 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 第四节) -->
@@ -1437,6 +1437,20 @@
<button class="bx-open" id="bxOpen" type="button"></button>
<div class="bx-misc" id="bxMisc"></div>
</div>
<!-- 下周预告:下一孕周卡片的剪影 + 倒计时(营造等待感)。本周已开、且还没到 40 周时显示 -->
<div class="bx-next hide" id="bxNext">
<div class="bx-next-img" id="bxNextImg" aria-hidden="true"></div>
<div class="bx-next-t"><b id="bxNextW"></b><span id="bxNextS"></span></div>
<div class="bx-next-cd"><b id="bxNextD"></b><span>天后开启</span></div>
</div>
<!-- 待解锁(2026-10-01 价值感改造):参与之后漏开的周不再白送,完成一个孕期工具任务解锁一周。
任务是否完成由服务端查数胎动每日足迹核验(GET /blindbox 的 tasks),解锁 POST /blindbox/unlock -->
<div class="bx-lock hide" id="bxLock">
<div class="bx-lock-h"><span class="bx-lock-ico" aria-hidden="true">🔒</span>
<div><b>错过的 <em id="bxLockN"></em> 周待解锁</b><p>用一次孕期小工具,就能解锁一周补开</p></div></div>
<div class="bx-chips" id="bxLockChips"></div>
<div class="bx-tasks" id="bxTasks"></div>
</div>
<div class="bx-pend hide" id="bxPend">
<div class="bx-pend-t">还有 <b id="bxPendN"></b> 个盲盒等你打开 <em>错过的周会一直保留到孕 40 周</em></div>
<div class="bx-chips" id="bxChips"></div>
@@ -1447,6 +1461,8 @@
<span class="bx-cnt"><b id="bxGot">0</b>/<span id="bxAll">37</span></span>
</div>
<div class="bx-prog"><i id="bxBar"></i></div>
<!-- 分段集齐奖励:孕早/中/晚期各一段 + 37 张全集。达成即记账,兜豆系统上线前由工作人员人工发放 -->
<div class="bx-goal" id="bxGoal"></div>
<p class="bx-anote" id="bxAnote"></p>
<div id="bxGroups"></div>
</section>
@@ -1468,6 +1484,7 @@
</div>
</div>
<p class="bx-dev" id="bxDev"></p>
<div class="bx-diary" id="bxDiary"></div>
<div class="bx-reward" id="bxReward"></div>
<button class="bx-keep" id="bxKeep" type="button"></button>
</div>
@@ -1668,6 +1685,31 @@
① 昵称和宝宝小名并成一行 .fld-row(省 78px);
② 这个弹窗里的大头像从 92px 收到 76px(见 css 的 #modalProfile .av-big)。
再往里加字段之前,先回来把这笔账重算一遍。 -->
<!-- 盲盒 · 集齐全集的实物奖励:收货信息。POST /api/mp/public/mama-box/blindbox/claim -->
<section class="modal" id="modalBxAddr" role="dialog" aria-modal="true" aria-labelledby="modalBxAddrTitle">
<div class="modal-head">
<h3 id="modalBxAddrTitle">领取孕期纪念礼</h3>
<button class="modal-x" data-modal="close" aria-label="关闭">
<svg viewBox="0 0 24 24" width="15" height="15" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/></svg>
</button>
</div>
<p class="bx-addr-tip">恭喜集齐 37 张宝宝卡!填好收货信息,工作人员会在 7 个工作日内为你寄出。</p>
<div class="fld-row">
<label class="fld"><span>收货人</span><input id="bxAddrName" type="text" maxlength="20" placeholder="姓名"></label>
<label class="fld"><span>手机号</span><input id="bxAddrPhone" type="tel" maxlength="20" placeholder="手机号"></label>
</div>
<label class="fld"><span>收货地址</span><input id="bxAddrAddr" type="text" maxlength="120" placeholder="省市区 + 详细地址"></label>
<div class="modal-foot"><button class="dl-btn main" id="bxAddrSave">提交</button></div>
</section>
<!-- 盲盒 · 分段集齐达成的庆祝弹层(内容由 app.js showPrize() 填) -->
<section class="modal bx-prize" id="modalBxPrize" role="dialog" aria-modal="true" aria-labelledby="bxPrizeT">
<div class="bx-prize-ico" aria-hidden="true">🏆</div>
<h3 id="bxPrizeT"></h3>
<p id="bxPrizeP"></p>
<div class="modal-foot"><button class="dl-btn main" id="bxPrizeOk">太好了</button></div>
</section>
<section class="modal" id="modalProfile" role="dialog" aria-modal="true" aria-labelledby="modalProfileTitle">
<div class="modal-head">
<h3 id="modalProfileTitle">我的资料</h3>