mama-box 9.19 需求: 资料弹窗去兑换码闸门、底tab改回宝宝来信、我的页卡片改兜爸心选商城 (v26092001)
资料详情页(需求 1.1/1.2): - #modalWx 删掉兑换码输入框与「以后再说」「解锁全部资料」两颗按钮,is-gate/is-gift/is-done 三模式合并成单态(唯一出口是右上角 .modal-x);二维码下方文案改需求指定句 - 需求方确认「扫码加顾问 → 回复领资料 → 顾问直接发资料」,故「解锁」概念整体取消 死代码清理(D1 的连带): - 删 PAN/PAN_DEFAULT 网盘链接表、panOf、WX_CODE/wxCodeOK、givePan、#modalPan 弹窗、 state.wxUnlocked/WXOK_KEY、syncUnlockCopy、fetchRemoteConfig - 删「已领」整套:state.resGot/RESGOT_KEY/isGot/列表「已领 ✓」标与筛选 chip/详情页「再拿一次链接」 底 tab(需求 2,D2=C): - 「兜爸心选」→「宝宝来信」,图标换回 ic-letter,点击改走 jumpApp 跳第三方 H5 mp.yizhezhe.com/laixin/(App 表 identifier=laixin,取不到时兜底硬编码) - 红点 #tabBadge 挪回该 tab;角标数据源改为 box_app 封装的 /laixin/unread (syncLaixinBadge,ok=false 时保持现状,不把红点抹掉) 其它: - 我的页卡片「兜爸心选」→「兜爸心选商城」(需求 3) - 内置来信屏 #screen-letter 与 box_app /letters 链路保留不动,但不再有底 tab 入口
This commit is contained in:
158
index.html
158
index.html
@@ -7,7 +7,7 @@
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<title>兜爸心选 · 孕育陪伴</title>
|
||||
<!-- V:26091802 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
|
||||
<!-- V:26092001 缓存版本标记:改 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 第四节) -->
|
||||
@@ -18,10 +18,7 @@
|
||||
<div class="phone" id="phone">
|
||||
<nav class="tabbar" id="tabbar">
|
||||
<button class="tab is-active" data-tab="home">
|
||||
<!-- ⚠️ 未读红点 #tabBadge 本批(第九批)从原「宝宝来信」tab 挪到这里:
|
||||
那枚 tab 改成了商城入口(见下方 #tabMall),把信件未读红点挂在商城里会误导。
|
||||
挪动是纯 DOM 位置调整,syncLetterCounts/applyRemote* 仍只按 id 取,JS 一行没改。 -->
|
||||
<span class="t-ico ic-home"></span><span class="t-badge" id="tabBadge"></span><span class="t-txt">首页</span>
|
||||
<span class="t-ico ic-home"></span><span class="t-txt">首页</span>
|
||||
</button>
|
||||
<button class="tab" data-tab="archive">
|
||||
<span class="t-ico ic-archive"></span><span class="t-txt">档案</span>
|
||||
@@ -29,16 +26,18 @@
|
||||
<button class="tab tab-fab" data-sheet="open">
|
||||
<span class="fab"><img src="assets/img/69818ea975da.png" alt="" aria-hidden="true"></span><span class="t-txt">记一下</span>
|
||||
</button>
|
||||
<button class="tab" id="tabMall">
|
||||
<!-- ⚠️ 本批(第九批)按用户要求,把原「宝宝来信」这枚底 tab 改成「兜爸心选」商城入口。
|
||||
⚠️ 与「档案」tab 同款:**不挂 data-tab**,点了直接走 goMall() 跳小程序原生商城页
|
||||
(switchTab /pages/goods_cate/goods_cate),所以它**没有** is-active 高亮态,
|
||||
也不参与 go() 的 tab 高亮切换。
|
||||
⚠️ 来信屏 #screen-letter **没有被删**:它仍在 swipe() 的 order 里,左右滑动还能进;
|
||||
只是底 tab 不再提供入口(用户本批明确选择「保留屏幕、滑动仍可进入」)。
|
||||
想再把这枚 tab 挂回来信之前先去问,别自己动。
|
||||
⚠️ 未读红点已挪到「首页」tab(原 #tabBadge 的位置),别再挂回这枚商城 tab。 -->
|
||||
<span class="t-ico ic-shop"></span><span class="t-txt">兜爸心选</span>
|
||||
<button class="tab" id="tabLetter">
|
||||
<!-- ⚠️ 2026-09-19(9.19 需求第 2 条):这枚 tab 从「兜爸心选」商城入口改回「宝宝来信」。
|
||||
与第九批那次改动**方向相反**,但落点不同:这次不是切回内置来信屏,
|
||||
而是跳**第三方「宝宝来信」H5**(mp.yizhezhe.com/laixin/)。
|
||||
⚠️ 因此依旧**不挂 data-tab**:它不参与 go() 的 tab 高亮切换,也不切 #screen-letter。
|
||||
点了走 jumpApp()(同页 location.href + query 带 openid/unionid),
|
||||
与其它 H5 应用(宫格、工具卡)完全一致 —— 见 app.js 的 #tabLetter 绑定。
|
||||
⚠️ 内置来信屏 #screen-letter **仍在**(swipe 的 order 里,左右滑动还能进),
|
||||
它的未读数(box_app /letters)与这枚 tab 的角标**不是同一套数**:
|
||||
角标 owner 是 laixin 的 /laixin/unread,见 syncLaixinBadge()。
|
||||
⚠️ 红点 #tabBadge 挂在这枚 tab 上(第九批曾挪到「首页」,现已挪回)。 -->
|
||||
<span class="t-ico ic-letter"></span><span class="t-badge" id="tabBadge"></span><span class="t-txt">宝宝来信</span>
|
||||
</button>
|
||||
<button class="tab" data-tab="me">
|
||||
<span class="t-ico ic-me"></span><span class="t-txt">我的</span>
|
||||
@@ -357,12 +356,13 @@
|
||||
<span class="sb-row"><span class="sb-faces" aria-hidden="true"><i></i><i></i><i></i><i></i><i></i><i></i></span><i class="sb-got">9.6 万妈妈已领取</i><span class="pill-free">免费</span></span>
|
||||
</button>
|
||||
</div>
|
||||
<!-- ⚠️ 那句话包在 <span id="shelfLeadTxt"> 里,是为了给 syncUnlockCopy()
|
||||
一个**只含文字**的靶子。旁边「查看全部 ›」是个 <a data-open>,
|
||||
它的点击监听是 init 时一次性绑上去的;谁要是图省事对整个 <p>
|
||||
写 innerHTML,链接会连同监听被静默换掉 —— 看着一模一样,就是点不动。
|
||||
这里写的是「还没解锁」那一版,解锁过的用户由 init() 刷成另一句。 -->
|
||||
<p class="unlock"><span id="shelfLeadTxt"><b>128</b> 份孕育资料等你来领</span> · <a data-open="detailResList">查看全部 ›</a></p>
|
||||
<!-- ⚠️ 这句话现在是**静态文案**(2026-09-19 9.19 需求:兑换码闸门取消,
|
||||
不再有「已解锁/未解锁」两版口径,原来那个给 syncUnlockCopy() 用的
|
||||
#shelfLeadTxt 靶子和该函数一起删了)。
|
||||
旁边「查看全部 ›」是个 <a data-open>,它的点击监听是 init 时一次性
|
||||
绑上去的 —— 谁要是图省事对整个 <p> 写 innerHTML,链接会连同监听被静默
|
||||
换掉(看着一模一样,就是点不动),别再引入这种写法。 -->
|
||||
<p class="unlock"><b>128</b> 份孕育资料等你来领 · <a data-open="detailResList">查看全部 ›</a></p>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1022,7 +1022,7 @@
|
||||
</span>
|
||||
<span class="wx-main">
|
||||
<span class="wx-head">
|
||||
<span class="wx-title">兜爸心选</span>
|
||||
<span class="wx-title">兜爸心选商城</span>
|
||||
<span class="wx-lim">母婴 · 好物</span>
|
||||
</span>
|
||||
<span class="wx-sub">为宝宝甄选的母婴好物,值得认真挑一挑</span>
|
||||
@@ -1190,8 +1190,8 @@
|
||||
⚠️ 里面这张示意图**绝不能带 .wx-qr 类**。冒烟测试有一条钉着
|
||||
「全页只有一处二维码」,蹭了那个类名会当场变红 —— 而且它也确实
|
||||
不是二维码。用独立的 .rlg-fig。
|
||||
⚠️ 已解锁的用户看不到这条 banner,由 syncUnlockCopy() 挂 .hide 完成。
|
||||
服务卡则**不**跟着藏,理由写在服务卡那段注释里。
|
||||
⚠️ 2026-09-19:兑换码闸门取消后不再有「已解锁」状态,所以这条 banner
|
||||
**恒显示**(原来 syncUnlockCopy() 会按解锁态给它挂 .hide,已删除)。
|
||||
换真图:把 .rlg-fig 整个 <svg> 换成一个 img,类名照旧写 rlg-fig,
|
||||
CSS 一行不用动(.rlg-fig 同时管 svg 和 img)。
|
||||
⚠️ 这里**不要**写出图片路径的字面量 —— build.js 的 ASSET_RE
|
||||
@@ -1273,10 +1273,10 @@
|
||||
⚠️ 必须是 <span>:外层 .rl-gift 本身是 <button>,按钮套按钮非法。 -->
|
||||
<span class="rlg-cta">立即免费领取</span>
|
||||
</button>
|
||||
<!-- 静态值写「还没解锁」那一版,解锁过的用户由 syncUnlockCopy() 改口。
|
||||
<!-- 静态文案(原「还没解锁 / 已解锁」两版已随闸门一起取消)。
|
||||
「首次领取需添加顾问微信」这句必须提前说:让人一路读到底、点了
|
||||
「立即领取」才撞上二维码,是把条件藏到最后一步才亮出来。 -->
|
||||
<p class="rl-lead" id="rlLead"><b>128</b> 份资源按孕周持续更新 · 首次领取需添加顾问微信</p>
|
||||
<p class="rl-lead"><b>128</b> 份资源按孕周持续更新 · 首次领取需添加顾问微信</p>
|
||||
<div class="chips-row" id="resChips">
|
||||
<button class="chip is-active" data-rescat="all">全部</button>
|
||||
<button class="chip" data-rescat="产检">产检</button>
|
||||
@@ -1286,11 +1286,10 @@
|
||||
<button class="chip" data-rescat="心理">心理</button>
|
||||
<!-- 收藏不是分类而是筛选,所以默认排在最后。但一旦用户有了收藏,
|
||||
renderResList() 会把它挪到「全部」后面并带上数量 —— 常用的东西
|
||||
不该让人横向滑到头才找得着。这里写的是「还没收藏过」时的样子 -->
|
||||
不该让人横向滑到头才找得着。这里写的是「还没收藏过」时的样子。
|
||||
⚠️ 原来的「✓ 已领」chip 已删除:9.19 需求取消了「立即领取即到手」
|
||||
这个动作(资料由顾问在微信里发),H5 侧没有「已领」这个概念了。 -->
|
||||
<button class="chip chip-fav" data-rescat="fav">★ 收藏</button>
|
||||
<!-- 「已领」同理,也是筛选不是分类。领过东西之后它会被挪到「全部」后面
|
||||
(比收藏还靠前 —— 回来找提取码比回来翻收藏更常发生) -->
|
||||
<button class="chip chip-got" data-rescat="got">✓ 已领</button>
|
||||
</div>
|
||||
<div class="res-list" id="resList"></div>
|
||||
<p class="unlock" id="resEmptyHint"></p>
|
||||
@@ -1563,52 +1562,29 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ================= 百度网盘领取 =================
|
||||
资源本体放在网盘上,详情页只负责呈现内容;点「立即领取」才把
|
||||
链接和提取码给出来。链接与提取码在 js 顶部的 PAN 表里配置
|
||||
(后台改那一处就行,页面不用动)。 -->
|
||||
<section class="modal" id="modalPan" role="dialog" aria-modal="true" aria-labelledby="modalPanTitle">
|
||||
<div class="modal-head">
|
||||
<h3 id="modalPanTitle">资源已为你准备好</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="modal-lead">《<b id="panTitle">糖耐检查全攻略</b>》已上传到百度网盘,复制下面的链接到浏览器或网盘 App 打开即可。</p>
|
||||
<div class="pan-box">
|
||||
<div class="pan-row">
|
||||
<span class="pan-k">网盘链接</span>
|
||||
<!-- readonly 而不是纯文本:iOS 上长按可直接「全选 / 拷贝」 -->
|
||||
<input class="pan-v" id="panUrl" type="text" readonly value="">
|
||||
</div>
|
||||
<div class="pan-row">
|
||||
<span class="pan-k">提取码</span>
|
||||
<input class="pan-v code" id="panCode" type="text" readonly value="">
|
||||
</div>
|
||||
</div>
|
||||
<p class="pan-note">链接长期有效。若提示「链接已失效」,可在「帮助与反馈」里联系我们补发。</p>
|
||||
<div class="modal-foot">
|
||||
<button class="dl-btn ghost" id="panCopy">复制链接和提取码</button>
|
||||
<button class="dl-btn main" id="panOpen">打开网盘</button>
|
||||
</div>
|
||||
</section>
|
||||
<!-- ================= 百度网盘领取(已下线) =================
|
||||
⚠️ 2026-09-19(9.19 需求 1.2 + 需求方确认):资料改由企业微信顾问**直接发放**,
|
||||
H5 不再发网盘链接和提取码 —— 原来这个 #modalPan 弹窗、js 里的 PAN/PAN_DEFAULT
|
||||
链接表、givePan()、「已领」标记已整块删除。要恢复「H5 自己发链接」,
|
||||
得先回问需求方(那等于把「解锁」概念加回来)。
|
||||
⚠️ 后端 /api/mp/public/mama-box/config 里的 pan / panDefault / wxCode 三个字段
|
||||
也随之失效(box_app 侧后续清理)。 -->
|
||||
|
||||
<!-- ================= 加企业微信顾问 =================
|
||||
三个入口共用这一个壳,模式由 openWx() 挂类名决定:
|
||||
gift —— 「我的」页服务卡 + 资源库顶部那条试用装 banner。
|
||||
**没有兑换码输入框**:这两处主打的是免费领试用装,
|
||||
顾问会把资料兑换码连同试用装一起发给用户,码在闸门那儿填。
|
||||
gate —— 点「立即领取」被拦下时。**只有这里有输入框**。
|
||||
done —— 已解锁的人再从 gift 那两个入口进来。
|
||||
⚠️ 静态类写 is-gift(原来是 is-card)。默认态因此从「显示输入框」
|
||||
变成「不显示」—— 万一有人绕过 openWx() 直接 openModal('modalWx'),
|
||||
他看到的是一张二维码,而不是一个怎么填都不对的码框。
|
||||
⚠️ 2026-09-19(9.19 需求 1.1 / 1.2):这个弹窗从「兑换码闸门」简化成**纯提示**。
|
||||
改动前后:
|
||||
· 删掉兑换码输入框 + 「以后再说」「解锁全部资料」两颗按钮(需求 1.2);
|
||||
· 原来的 is-gate / is-gift / is-done 三模式**合并成单态** —— 不再有「解锁」
|
||||
这个状态,弹窗只负责把人引导到顾问那儿,资料由顾问在微信里直接发(需求方确认);
|
||||
· 二维码下方文案改成需求指定的「请添加资料小助手,回复『领资料』」(需求 1.1)。
|
||||
三个入口(资料详情「立即领取」、「我的」页服务卡、资源库试用装 banner)
|
||||
共用这一个壳、同一句话,openWx() 不再按入口改写文案。
|
||||
⚠️ data-autofocus="off":这个弹窗的主角是中间那张二维码,用户第一件事
|
||||
是举起另一台手机去扫它。默认的自动聚焦会把输入法键盘顶起来,
|
||||
正好盖住二维码下半截 —— 人得先把键盘收掉才能扫。 -->
|
||||
<section class="modal wx-modal is-gift" id="modalWx" data-autofocus="off"
|
||||
正好盖住二维码下半截 —— 人得先把键盘收掉才能扫。
|
||||
⚠️ 弹窗**没有底部按钮**:唯一出口是右上角 .modal-x(外加遮罩 / Esc)。
|
||||
别把「优化掉没有按钮的头部」这种想法落到这颗叉上 —— 那会把人关在弹窗里。 -->
|
||||
<section class="modal wx-modal" id="modalWx" data-autofocus="off"
|
||||
role="dialog" aria-modal="true" aria-labelledby="wxTitle">
|
||||
<div class="modal-head">
|
||||
<!-- 兜底写「宝宝的」;填过小名的由 syncBabyWords() 刷成小名。
|
||||
@@ -1621,10 +1597,10 @@
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<!-- 静态兜底写 gift 那一版(和上面的静态类 is-gift 配套):
|
||||
运行时三种模式的文案都由 openWx() 改写,这里只保证「万一没走 openWx」
|
||||
时读到的是一句说得通的话,而不是一句要人填码、却没有码框的话。 -->
|
||||
<p class="modal-lead" id="wxLead">扫码添加顾问,说一句「领试用装」就帮你登记,每人限领一份。她也会把资源库的兑换码一并发给你 —— 到资源库点「立即领取」时填进去。</p>
|
||||
<!-- 单态文案:说清「加顾问 → 说一句领资料 → 她直接发」,不要求用户填任何东西。
|
||||
⚠️ 称呼是「顾问」(与标题一致);二维码下方那句按需求原文写「资料小助手」。
|
||||
这一处不一致是需求方明确保留的(见改动清单 D3),别顺手「统一」。 -->
|
||||
<p class="modal-lead" id="wxLead">扫码添加顾问,说一句「领资料」,她会把资料直接发给你。</p>
|
||||
<div class="wx-qr-box">
|
||||
<!-- ⚠️ 这是**占位**二维码,扫不出任何东西。
|
||||
|
||||
@@ -1659,34 +1635,8 @@
|
||||
<rect x="14" y="45" width="72" height="14" rx="4" fill="rgba(243,236,230,.94)"/>
|
||||
<text x="50" y="54.6" text-anchor="middle" font-size="8.4" font-weight="700" fill="#9A8B80">示例二维码 · 待替换</text>
|
||||
</svg>
|
||||
<p class="wx-qr-cap">长按识别,或截图后用微信扫一扫</p>
|
||||
</div>
|
||||
<div class="wx-form">
|
||||
<!-- ⚠️ placeholder 里绝不能写出真码("例如 MAMA2025" 这种)。
|
||||
这道闸门换的就是「用户去加一次顾问」,把答案印在输入框里,
|
||||
等于门开着、旁边立个牌子写「请敲门」。 -->
|
||||
<label class="fld"><span>顾问发给你的兑换码</span>
|
||||
<input class="wx-code" id="wxCode" type="text" maxlength="16"
|
||||
autocomplete="off" autocapitalize="characters" spellcheck="false"
|
||||
placeholder="添加顾问后向她索取"></label>
|
||||
<!-- 空着也占一行高(CSS 里的 min-height):红字冒出来时弹窗不会往下跳一格,
|
||||
跳一下的话,用户正要按的「解锁」按钮会在他手指落下前挪走位置 -->
|
||||
<p class="wx-err" id="wxErr"></p>
|
||||
</div>
|
||||
<!-- is-done 和 is-gift **两种**模式下,上面整个 .wx-form 和右边这颗
|
||||
「解锁全部资料」都会被 CSS 收起来:
|
||||
done —— 对已经解锁的人再要一次兑换码,是在问一个他已经回答过的问题;
|
||||
gift —— 那两个入口卖的是免费试用装,摆一个码框等于在福利前面收门票。
|
||||
剩下的左键文案由 openWx() 按模式改写(done「知道了」/ gate「以后再说」)。
|
||||
⚠️ gift 模式没有左键:整条 .modal-foot 被 `.is-gift .modal-foot{display:none}`
|
||||
收起来了(原来那颗「先不领」按用户要求删了)。gift 的退路是右上角那颗
|
||||
.modal-x —— 删按钮前专门确认过它在,测试里也钉了一条,别把它「优化」掉。
|
||||
⚠️ 收起来的只是**样式**,#wxOk 的监听还在。所以 app.js 里那个处理器
|
||||
开头有一句「不是 gate 模式就 return」的 guard —— 别以为 display:none
|
||||
就等于点不到,jsdom 里 dispatchEvent 照样叫得醒它。 -->
|
||||
<div class="modal-foot">
|
||||
<button class="dl-btn ghost" id="wxLater" data-modal="close">以后再说</button>
|
||||
<button class="dl-btn main" id="wxOk">解锁全部资料</button>
|
||||
<!-- 需求 1.1 指定的文案,逐字照抄(直角引号沿用站内习惯) -->
|
||||
<p class="wx-qr-cap">请添加资料小助手,回复「领资料」</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user