v26110461 孕周专属福利资料改 3 兜豆兑换:详情页加「这份资料里有什么」、兑换后弹网盘地址可复制;去掉顾问二维码入口;修详情页正文被接口清空

This commit is contained in:
deploy
2026-11-05 10:23:35 +00:00
parent 8fa7ffebc9
commit 887b87dc82
25 changed files with 292 additions and 107 deletions

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<!-- 11-04 UGC 总开关关着时本页不展示,直接回首页(js/ugc.js) -->
<script src="../../js/ugc.js?v=26110460" data-guard></script>
<script src="../../js/ugc.js?v=26110461" data-guard></script>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
<meta name="format-detection" content="telephone=no">
<title>测一测 · 孕妈广场</title>
@@ -322,9 +322,9 @@ mark{background:linear-gradient(transparent 62%,var(--c20) 0);color:inherit;padd
</div>
<div class="toast" id="toast"></div>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="meta.js?v=26110460"></script>
<script src="tests.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script src="meta.js?v=26110461"></script>
<script src="tests.js?v=26110461"></script>
<script>
(function () {
'use strict';

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<!-- 11-04 UGC 总开关关着时本页不展示,直接回首页(js/ugc.js) -->
<script src="../js/ugc.js?v=26110460" data-guard></script>
<script src="../js/ugc.js?v=26110461" data-guard></script>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
<meta name="format-detection" content="telephone=no">
<title>孕妈广场</title>
@@ -903,13 +903,13 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
<div id="sheet" role="dialog" aria-modal="true"><i class="sg"></i><div class="sbd" id="sbd"></div></div>
<div class="toast" id="toast"></div>
<script src="topics.js?v=26110460"></script>
<script src="data.js?v=26110460"></script>
<script src="feed.js?v=26110460"></script>
<script src="../js/ava-pool.js?v=26110460"></script> <!-- 11-05 装饰头像分配表(各模块互不重复) -->
<script src="ceshi/meta.js?v=26110460"></script>
<script src="../js/share-card.js?v=26110460"></script>
<script src="../js/cm-pics.js?v=26110460"></script> <!-- 11-05 评论 / 回复带图 -->
<script src="topics.js?v=26110461"></script>
<script src="data.js?v=26110461"></script>
<script src="feed.js?v=26110461"></script>
<script src="../js/ava-pool.js?v=26110461"></script> <!-- 11-05 装饰头像分配表(各模块互不重复) -->
<script src="ceshi/meta.js?v=26110461"></script>
<script src="../js/share-card.js?v=26110461"></script>
<script src="../js/cm-pics.js?v=26110461"></script> <!-- 11-05 评论 / 回复带图 -->
<script>
(function () {
'use strict';
@@ -976,7 +976,7 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
var CMD = null, CMERR = false;
/* 头像编码:数字 = av/NNNN.webp(旧代码头像);'av:c012' = av/c012.webp(卡通/可爱卡通);'/…' = 站内绝对路径(内置头像库 /_bridge/avatars/);其余 = assets/img/mom/xxx.jpg */
var avP = function (a) { return typeof a === 'number' ? 'av/' + ('000' + a).slice(-4) + '.webp' : a.indexOf('av:') === 0 ? 'av/' + a.slice(3) + '.webp' : a.charAt(0) === '/' ? a : '../assets/img/mom/' + a + '.jpg'; };
fetch('cm.json?v=26110460').then(function (r) { return r.json(); }).then(function (j) {
fetch('cm.json?v=26110461').then(function (r) { return r.json(); }).then(function (j) {
CMD = j; if (openId && NBY[openId]) { renderComments(NBY[openId]); syncBar(NBY[openId]); }
}).catch(function () { CMERR = true; if (openId && NBY[openId]) renderComments(NBY[openId]); });
function commentsOf(n) {

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<!-- 11-04 UGC 总开关关着时本页不展示,直接回首页(js/ugc.js) -->
<script src="../../js/ugc.js?v=26110460" data-guard></script>
<script src="../../js/ugc.js?v=26110461" data-guard></script>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
<meta name="format-detection" content="telephone=no">
<title>我的投稿</title>
@@ -107,7 +107,7 @@ main{padding:6px 16px 0}
</div>
<div class="wb"><button type="button" id="write"><svg class="ic" viewBox="0 0 24 24"><path d="M12 20h9M16.5 3.5a2.1 2.1 0 013 3L7 19l-4 1 1-4z"/></svg>写新的故事</button></div>
<script src="../topics.js?v=26110460"></script>
<script src="../topics.js?v=26110461"></script>
<script>
(function () {
'use strict';

View File

@@ -8,8 +8,8 @@
<meta name="apple-mobile-web-app-capable" content="yes">
<title>兜爸心选 · 孕育陪伴</title>
<!-- 11-04 UGC 总开关(孕妈广场 + 测一测,后台 /box_bm/plaza 顶部切换),见 js/ugc.js -->
<script src="js/ugc.js?v=26110460"></script>
<!-- V:26110460 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<script src="js/ugc.js?v=26110461"></script>
<!-- V:26110461 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<link rel="stylesheet" href="mama-box.css">
<link rel="stylesheet" href="night.css">
<!-- 11-04 用户:「顶部图片上的倒计时先删除掉」→ 不加载 hero-cd.css / hero-cd.js(文件留着,加回这两行即恢复),头图回到原样式 -->
@@ -23,6 +23,31 @@
/* 11-05 用户:「消消乐 banner 左右要顶到两边,跟上下模块的距离再缩小几个像素,保持协调一致」→ 去掉外层内边距:左右和其他模块一样贴满(0~屏宽),上下只留模块间统一的 16px 缝(原来多出 8px);圆角跟其他模块一致 26px;同日三改:用户嫌圆角太大 → 16px */
#gamePromo{padding:0!important}
#gamePromo .gp-card{border-radius:16px;padding:10px 22px 10px 22px} /* 卡里内容往里收,和上下模块的内容左右对齐 */</style>
<style id="resDouCss">/* 2026-11-05 资料兜豆兑换 */
.shelf.gift2 .sb-row .pill-free,.res-item .pill-free{background:#FFF1E6!important;color:#E8743B!important}
.rp-box{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 14px 12px}
.rp-fmt{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.rp-fmt span{font-size:12px;font-weight:700;color:#E8743B;background:#FFF1E6;padding:4px 9px;border-radius:7px}
.rp-list{list-style:none;margin:0;padding:0}
.rp-list li{position:relative;padding:6px 0 6px 22px;font-size:14.5px;line-height:1.6;color:#4A403A}
.rp-list li::before{content:"";position:absolute;left:2px;top:12px;width:11px;height:6px;border-left:2.2px solid #E8743B;border-bottom:2.2px solid #E8743B;transform:rotate(-45deg)}
.rp-how{margin:10px 0 0;padding-top:10px;border-top:1px dashed var(--line);font-size:12.5px;line-height:1.7;color:var(--muted)}
.rp-how b{color:#E8743B}
html.night .rp-box{background:rgba(255,255,255,.06)}
html.night .rp-list li{color:#E8DFE8}
.rs-modal h3 .rs-n{color:#E8743B}
.rs-modal .rs-ico{line-height:0}
.rs-modal .rs-name{font-size:15px;font-weight:700;color:var(--ink);margin:6px 0 0}
.rs-modal .rs-sub{font-size:12.5px;color:var(--muted);margin:8px 0 0;line-height:1.6}
.rs-pan .rp-card{margin-top:12px;background:#FFF7F0;border:1px solid #FBDCC6;border-radius:12px;padding:12px}
.rs-pan .rp-k{font-size:12px;color:var(--muted)}
.rs-pan .rp-url{margin-top:4px;font-size:14px;font-weight:700;color:var(--ink);word-break:break-all;user-select:text;-webkit-user-select:text}
.rs-pan .rp-code{margin-top:8px;font-size:13px;color:var(--ink-2)}
.rs-pan .rp-code b{font-size:16px;color:#E8743B;letter-spacing:2px;user-select:text;-webkit-user-select:text}
.rs-pan .rp-code.hide{display:none}
.rs-pan .modal-foot .dl-btn{flex:1}
html.night .rs-pan .rp-card{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.12)}
</style>
</head>
<body>
<a class="skip" href="#screens">跳到内容</a>
@@ -881,7 +906,7 @@
<span class="gb-gift" aria-hidden="true"><svg viewBox="0 0 24 24" width="26" height="26"><rect x="4.5" y="10.5" width="15" height="9.5" rx="2" fill="#fff"/><rect x="3.2" y="7.4" width="17.6" height="4.2" rx="1.6" fill="#fff"/><rect x="11" y="7.4" width="2" height="12.6" fill="#F7745E"/><rect x="3.2" y="11" width="17.6" height="1" fill="#F7745E" opacity=".35"/><path d="M12 7.4C10.6 4.6 7.6 4.2 7.6 6.1c0 1.3 2.2 1.3 4.4 1.3zm0 0c1.4-2.8 4.4-3.2 4.4-1.3 0 1.3-2.2 1.3-4.4 1.3z" fill="none" stroke="#fff" stroke-width="1.6" stroke-linejoin="round"/><path d="M20 1.8l.5 1.3 1.3.5-1.3.5-.5 1.3-.5-1.3-1.3-.5 1.3-.5z" fill="#FFF3C4"/></svg></span>
<div class="gb-ht">
<h2 class="sh-title">孕<span data-wk="n">—</span>周专属福利</h2>
<p class="sh-note">这周用得上的孕育资料,<b>全部免费送</b></p>
<p class="sh-note">这周用得上的孕育资料,<b><span class="res-price-n">3</span> 兜豆就能领</b></p>
</div>
<button class="sh-all" data-open="detailResList">全部 ›</button>
</div>
@@ -916,21 +941,21 @@
<img class="sb-cover" src="assets/img/gift-book.png" alt="" aria-hidden="true">
<span class="sb-title">《糖耐检查全攻略》</span>
<span class="sb-desc">孕24-28周必看 · 附检查前饮食清单</span>
<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">12.8 万妈妈已领取</i><span class="pill-free">免费领</span></span>
<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">12.8 万妈妈已领取</i><span class="pill-free">3 豆兑</span></span>
</button>
<button class="shelf-book sb-food ripple" data-open="detailRes" data-res="food">
<span class="sb-tag">孕<span data-wk="n">—</span>周专属</span>
<img class="sb-cover" src="assets/img/gift-food.png" alt="" aria-hidden="true">
<span class="sb-title">孕期营养全书</span>
<span class="sb-desc">按孕周编排的一日三餐参考</span>
<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">20.4 万妈妈已领取</i><span class="pill-free">免费领</span></span>
<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">20.4 万妈妈已领取</i><span class="pill-free">3 豆兑</span></span>
</button>
<button class="shelf-book sb-music ripple" data-open="detailRes" data-res="music">
<span class="sb-tag">孕<span data-wk="n">—</span>周专属</span>
<img class="sb-cover" src="assets/img/gift-music.png" alt="" aria-hidden="true">
<span class="sb-title">胎教音乐合集</span>
<span class="sb-desc">30 首适合孕中期的舒缓曲目</span>
<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>
<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">3 豆兑</span></span>
</button>
</div>
<!-- ⚠️ 这句话现在是**静态文案**(2026-09-19 9.19 需求:兑换码闸门取消,
@@ -946,7 +971,7 @@
· 没上架的**并非拿不到** —— 扫码加小助手可以直接索要(见顾问二维码弹窗)。
所以「128 份等你来领」是邀请口径(含找小助手要的),跟「列表当前 8 条」
是两件事,**数字不一样是对的**,别再"修"。 -->
<p class="unlock"><i class="ul-gift" aria-hidden="true"></i>福利库还有 <b>128</b> 份资料等你领 · <a data-open="detailResList">查看全部 ›</a></p>
<p class="unlock"><i class="ul-gift" aria-hidden="true"></i>福利库还有 <b>128</b> 份资料陆续上架 · <a data-open="detailResList">查看全部 ›</a></p>
</section>
<!-- 孕期盲盒 · 首页细横幅(2026-10-01,需求文档 v1.0 三-7)。
@@ -1971,6 +1996,7 @@
<h1 class="rd-title" id="rdTitle">《糖耐检查全攻略》</h1>
<p class="rd-desc" id="rdDesc">孕24-28周必看 · 附检查前饮食清单</p>
<div class="rd-meta" id="rdMeta"></div>
<div id="rdPack"></div>
<div class="rd-body" id="rdBody"></div>
<h3 class="d-sec">相关推荐</h3>
<div class="res-list slim" id="rdMore"></div>
@@ -1982,7 +2008,7 @@
「其他」说的是和手上这份的关系,比页面名更能说清点下去会看到什么。 -->
<div class="rd-cta" id="rdCta">
<button class="dl-btn ghost" id="rdLib">其他资源</button>
<button class="dl-btn main" id="rdGet">立即领取</button>
<button class="dl-btn main" id="rdGet">3 兜豆兑换</button>
</div>
</section>
@@ -2505,6 +2531,43 @@
<div class="modal-foot"><button class="dl-btn main" id="bxPrizeOk">太好了</button></div>
</section>
<!-- 资料兑换(2026-11-05 用户:3 兜豆兑换 → 立刻弹网盘地址可复制;顾问二维码不用了)。逻辑见 app.js redeemRes() -->
<section class="modal bx-prize rs-modal" id="modalResBuy" data-autofocus="off" role="dialog" aria-modal="true" aria-labelledby="rbT">
<div class="bx-prize-ico rs-ico" aria-hidden="true"><svg viewBox="0 0 48 48" width="48" height="48"><rect x="9" y="6" width="28" height="36" rx="4" fill="#F7A06E"/><rect x="13" y="6" width="24" height="36" rx="3" fill="#FBC59E"/><path d="M18 15h13M18 21h13M18 27h8" stroke="#fff" stroke-width="2.4" stroke-linecap="round"/><circle cx="35" cy="35" r="8" fill="#E8743B"/><path d="M31.5 35l2.4 2.4 4-4.6" fill="none" stroke="#fff" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg></div>
<h3 id="rbT">用 <b class="rs-n" id="rbPrice">3</b> 兜豆兑换</h3>
<p class="rs-name" id="rbName"></p>
<p class="rs-sub" id="rbBal"></p>
<div class="modal-foot">
<button class="dl-btn ghost" data-modal="close">再想想</button>
<button class="dl-btn main" id="rbOk">确认兑换</button>
</div>
</section>
<section class="modal rs-modal rs-pan" id="modalResPan" data-autofocus="off" role="dialog" aria-modal="true" aria-labelledby="rpTitle">
<div class="modal-head">
<h3 id="rpTitle">兑换成功</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" id="rpLead"></p>
<div class="rp-card">
<div class="rp-k">网盘地址</div>
<div class="rp-url" id="rpUrl"></div>
<div class="rp-code" id="rpCodeRow">提取码 <b id="rpCode"></b></div>
</div>
<p class="rs-sub">兑换过的资料,回到详情页点「查看网盘地址」随时再看,不重复扣豆。</p>
<div class="modal-foot"><button class="dl-btn main" id="rpCopy">复制地址和提取码</button></div>
</section>
<section class="modal bx-prize rs-modal" id="modalResShort" data-autofocus="off" role="dialog" aria-modal="true" aria-labelledby="rsT">
<div class="bx-prize-ico rs-ico" aria-hidden="true"><svg viewBox="0 0 48 48" width="48" height="48"><ellipse cx="24" cy="25" rx="13" ry="16" fill="#F2B46B" transform="rotate(-18 24 25)"/><path d="M20 15c-3 5-3 13 2 19" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" opacity=".8"/><circle cx="36" cy="12" r="2" fill="#FBC59E"/><circle cx="11" cy="36" r="1.6" fill="#FBC59E"/></svg></div>
<h3 id="rsT">兜豆还差 <b class="rs-n" id="rsShort">3</b> 个</h3>
<p class="rs-sub">你现在有 <span id="rsBal">0</span> 兜豆,做做孕期任务就能攒够</p>
<div class="modal-foot">
<button class="dl-btn ghost" data-modal="close">知道了</button>
<button class="dl-btn main" id="rsGo">去攒兜豆</button>
</div>
</section>
<!-- 新人欢迎礼(2026-10-10):统一兜豆账本 welcome 规则首次发放时弹一次;豆数用接口返回的 granted -->
<section class="modal bx-prize wg-modal" id="modalWelcome" role="dialog" aria-modal="true" aria-labelledby="wgT">
<div class="bx-prize-ico" aria-hidden="true">🎁</div>
@@ -2623,13 +2686,13 @@
<script src="/_bridge/avatar-picker.js?v=26101105"></script>
<script src="/_bridge/hand-icons.js?v=26101202"></script>
<script src="js/zodiac-art.js"></script>
<script src="guangchang/topics.js?v=26110460"></script>
<script src="js/ava-pool.js?v=26110460"></script> <!-- 11-05 装饰头像分配表(各模块互不重复) -->
<script src="guangchang/topics.js?v=26110461"></script>
<script src="js/ava-pool.js?v=26110461"></script> <!-- 11-05 装饰头像分配表(各模块互不重复) -->
<script src="js/app.js"></script>
<script src="js/kit.js?v=26110460"></script>
<script src="js/kit.js?v=26110461"></script>
<!-- 11-05 用户:孕期百问加上跟趣味小测试一样的底部 Tab(孕期百问 / 记一下 / 返回首页)。挂在 #detailQA 里,面板关着时跟着滑出屏外;
「记一下」直接开首页自己的记一下弹层(z 95 盖在百问 z 80 上),「返回首页」= 关掉百问面板 -->
<script src="js/mb-tabbar.js?v=26110460"></script>
<script src="js/mb-tabbar.js?v=26110461"></script>
<script>
(function () {
var d = document.getElementById('detailQA'); if (!d || !window.MBTab) return;
@@ -2649,7 +2712,7 @@
if (gchDone || !window.__mbUgc) return; gchDone = true;
var m = location.search.match(/[?&]gcv=([1-6])(?:&|$)/);
if (!m) window.__gcDefault = 1;
var n = m ? m[1] : '6', l = document.createElement('link'), s = document.createElement('script'), q = m ? Date.now() : 'v=26110460';
var n = m ? m[1] : '6', l = document.createElement('link'), s = document.createElement('script'), q = m ? Date.now() : 'v=26110461';
var dir = n === '4' || n === '6' ? 'js/gch/' : 'demo/gch/'; /* 11-03 上正式:定稿 V6(含它套的 V4)并进 js/gch/,其余效果稿仍在 demo/ */
l.rel = 'stylesheet'; l.href = dir + 'v' + n + '.css?' + q;
s.src = dir + 'v' + n + '.js?' + q;
@@ -2664,19 +2727,19 @@
/* 11-02 品牌露出(用户定 4 处都要):默认加载,?brand=0 可关掉对比;11-03 已并进 js/gch/ */
if (!/[?&]brand=0/.test(location.search)) {
var bl = document.createElement('link'), bs = document.createElement('script');
bl.rel = 'stylesheet'; bl.href = 'js/gch/brand.css?v=26110460'; bs.src = 'js/gch/brand.js?v=26110460';
bl.rel = 'stylesheet'; bl.href = 'js/gch/brand.css?v=26110461'; bs.src = 'js/gch/brand.js?v=26110461';
document.head.appendChild(bl); document.body.appendChild(bs);
}
})();
</script>
<!-- 2026-10-03 首页彩蛋:宝宝在肚皮底下动(独立文件,删掉这一行即整体下线;开关在「隐私权限」) -->
<script src="js/bump.js?v=26110460"></script>
<script src="js/bump.js?v=26110461"></script>
<!-- 2026-10-04 首页头图:按孕周换宝宝 + 阳光水波(独立文件) -->
<script src="js/hero-fx.js"></script>
<!-- 2026-10-05 首页头图:宝宝时不时动一动小手小脚(独立文件,删掉这一行即下线) -->
<script src="js/baby-limbs.js?v=26110460"></script>
<script src="js/coach.js?v=26110460"></script>
<script src="js/birth-flow.js?v=26110460"></script>
<script src="js/baby-limbs.js?v=26110461"></script>
<script src="js/coach.js?v=26110461"></script>
<script src="js/birth-flow.js?v=26110461"></script>
<!-- 禁止下拉回弹(2026-10-11 统一规则,与孕期体重同一段):竖向拖动时从手指下往上找还能朝该方向滚的容器,找不到才拦;横滑、双指、可滚列表不受影响 -->
<script>

132
js/app.js
View File

@@ -3,7 +3,7 @@
(function () {
'use strict';
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
var VER = '26110460';
var VER = '26110461';
const $ = (s, c) => (c || document).querySelector(s);
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));
@@ -2729,6 +2729,41 @@
}
};
const RES_ORDER = ['book', 'food', 'music', 'report', 'sport', 'diet', 'sleep', 'med'];
/* 2026-11-05 用户:福利资料改「3 兜豆兑换 → 立刻弹网盘地址」,详情页要说清「这份资料里有什么」。
PACK = 文件形式 + 内容清单(AI 助手起草,用户待核对;网盘里实际文件变了要同步改这里)。
价格以接口 claim-status.price 为准,RES_PRICE 只是没拉到时的默认值。 */
let RES_PRICE = 3;
const PACK = {
book: { fmt: ['PDF · 18 页', '可打印'], items: ['糖耐检查流程图:3 次抽血的时间点一张图看懂', '检查前 3 天饮食清单(每天碳水够 150g 的吃法)', '检查当天携带物品清单', '结果对照表:空腹 / 1 小时 / 2 小时三个数怎么看', '万一超标:一周控糖食谱示例', '妈妈们最常问的 12 个问题'] },
food: { fmt: ['PDF · 86 页', '按孕周分章'], items: ['孕早 / 中 / 晚期分章节,每章先讲这阶段缺什么', '40 周每周一日三餐参考', '钙、铁、DHA、叶酸常见食物含量表', '孕期要少碰的食物清单', '加餐搭配 30 例'] },
music: { fmt: ['MP3 · 30 首', '共 96 分钟', '附听法说明'], items: ['古典小品 10 首', '轻钢琴 10 首', '自然音 10 首(雨声、溪流、鸟鸣)', '每日播放安排表:什么时候听、听多久', '音量和距离的注意事项'] },
report: { fmt: ['PDF · 6 页', '附可打印表格'], items: ['全孕期 13 次产检:时间 + 检查项目一览', '每次产检要带的东西', '「问医生」问题清单模板', '产检报告存放登记表'] },
sport: { fmt: ['PDF · 22 页', '动作图解'], items: ['快走、游泳、孕妇瑜伽、固定单车的要点', '12 个孕期瑜伽动作分步图解', '运动强度怎么把握', '必须避开的动作清单', '出现哪些情况要立刻停下'] },
diet: { fmt: ['PDF · 16 页', '附体重记录表'], items: ['孕前 BMI 对应的增重范围对照表', '每周体重记录表(可打印)', '正确称重的方法', '长得太快 / 太慢怎么调整'] },
sleep: { fmt: ['PDF · 14 页', '附助眠音频 5 段'], items: ['孕期失眠的 7 个改善方法', '左侧卧 + 垫枕头的睡姿图解', '睡前放松呼吸练习(音频)', '一周睡眠记录表'] },
med: { fmt: ['PDF · 12 页', '附自评量表'], items: ['情绪自评量表 + 计分说明', '需要警惕的信号清单', '情绪日记模板', '可以求助的渠道'] }
};
/* 已兑换的 key(来自 claim-status.resGot);兑换成功后本地追加 */
const resGot = [];
function loadResGot() {
const oid = hashParam('openid');
if (!oid) return Promise.resolve();
return fetch('/api/mp/public/mama-box/resources/claim-status?openid=' + encodeURIComponent(oid))
.then(r => r.ok ? r.json() : null).then(j => {
const x = j && j.result;
if (!x) return;
if (typeof x.price === 'number' && x.price > 0) RES_PRICE = x.price;
resGot.length = 0;
(x.resGot || []).forEach(k => resGot.push(k));
syncResPrice();
}).catch(() => {});
}
/* 首页书架 / 列表 / 详情页上所有「几兜豆」文案 */
function syncResPrice() {
$$('.shelf.gift2 .sb-row .pill-free').forEach(el => { el.textContent = RES_PRICE + ' 豆兑'; });
$$('.res-price-n').forEach(el => { el.textContent = RES_PRICE; });
setRdGet();
}
/* ⚠️ 2026-09-19(9.19 需求 1.2):这里原来有 PAN_DEFAULT / PAN 两张**百度网盘
链接表**、panOf()、以及企业微信兑换码 WX_CODE / wxCodeOK()。
@@ -2752,7 +2787,7 @@
'<span class="ri-row">' +
'<em class="ri-cat">' + r.cat + '</em>' +
'<em class="ri-ga">' + r.meta[2] + '</em>' +
'<em class="pill-free">免费</em>' +
'<em class="pill-free">' + (resGot.indexOf(k) >= 0 ? '已兑换' : RES_PRICE + ' 兜豆') + '</em>' +
'</span></span></button>';
}
function bindResCards(root) {
@@ -2800,6 +2835,12 @@
$('#rdTitle').textContent = r.title;
$('#rdDesc').textContent = r.desc;
$('#rdMeta').innerHTML = r.meta.map(m => '<span>' + m + '</span>').join('');
const pk = PACK[state.resKey];
$('#rdPack').innerHTML = pk ? '<h3 class="d-sec">这份资料里有什么</h3>' +
'<div class="rp-box"><div class="rp-fmt">' + pk.fmt.map(f => '<span>' + f + '</span>').join('') + '</div>' +
'<ul class="rp-list">' + pk.items.map(t => '<li>' + t + '</li>').join('') + '</ul>' +
'<p class="rp-how"><b class="res-price-n">' + RES_PRICE + '</b> 兜豆兑换,兑换后马上给你网盘地址和提取码,复制去下载;兑换过的再点也能看,不重复扣豆。</p></div>' +
'<h3 class="d-sec">内容抢先看</h3>' : '';
$('#rdBody').innerHTML = r.body
.map(p => '<h4>' + p[0] + '</h4><p>' + p[1] + '</p>').join('');
$('#rdMore').innerHTML = RES_ORDER
@@ -2814,7 +2855,7 @@
/* 底部左键已从「收藏」改成「资源库」,是个固定文案的导航按钮,不再需要回显。
⚠️ 右键「立即领取」原来会按 state.resGot 回显成「再拿一次链接」,
9.19 需求取消「已领」概念后改回**固定文案**(点它只是弹顾问二维码)。 */
$('#rdGet').textContent = '立即领取';
setRdGet();
$('#detailRes .detail-body').scrollTop = 0;
}
$('#resStar').addEventListener('click', function () {
@@ -2857,7 +2898,85 @@
顾问直接发资料」之后,闸门、兑换码、网盘弹窗整条链路都删了(连同 givePan()、
state.wxUnlocked、wxPending),这颗按钮现在只做一件事:弹二维码。
不存在「已解锁 / 未解锁」两种起点,所以这里也没有任何状态判断 —— 别再加回来。 */
$('#rdGet').addEventListener('click', () => { openWx(); });
/* 2026-11-05 用户改:「立即领取」→ 用兜豆兑换,兑换完立刻弹网盘地址(顾问二维码不要了)。
后端 POST /resources/{key}/claim:同份同人只扣一次,兑换过的再点直接回链接(spent=0)。 */
function setRdGet() {
const b = $('#rdGet');
if (!b) return;
const got = resGot.indexOf(state.resKey) >= 0;
b.textContent = got ? '查看网盘地址' : RES_PRICE + ' 兜豆兑换';
b.classList.toggle('is-got', got);
}
let resBusy = false;
function redeemRes(key) {
const oid = hashParam('openid'), uid = hashParam('unionid');
if (!oid) { toast('请从小程序里打开后再兑换'); return; }
if (resBusy) return;
resBusy = true;
const btn = $('#rbOk'); if (btn) btn.textContent = '兑换中…';
fetch('/api/mp/public/mama-box/resources/' + key + '/claim?openid=' + encodeURIComponent(oid) +
(uid ? '&unionid=' + encodeURIComponent(uid) : ''), { method: 'POST' })
.then(r => r.json().catch(() => null))
.then(j => {
const x = (j && j.result) || {};
if (j && j.code === 200 && x.pan && x.pan.url) {
if (resGot.indexOf(key) < 0) resGot.push(key);
setRdGet();
renderResList(state.resCat);
showPan(key, x.pan, x.spent > 0 ? x.spent : 0);
if (x.spent > 0) loadDou(); // 刷新「我的」页兜豆余额
} else if (j && j.code === 409 && x.insufficient) {
closeModal();
$('#rsShort').textContent = x.short || RES_PRICE;
$('#rsBal').textContent = typeof x.balance === 'number' ? x.balance : 0;
openModal('modalResShort');
} else {
closeModal();
toast((j && j.message) || '网络不太好,稍后再试');
}
})
.catch(() => { closeModal(); toast('网络不太好,稍后再试'); })
.then(() => { resBusy = false; if (btn) btn.textContent = '确认兑换'; });
}
function showPan(key, pan, spent) {
const r = RES[key] || {};
$('#rpTitle').textContent = spent ? '兑换成功' : '你的网盘地址';
$('#rpLead').textContent = (spent ? '已扣 ' + spent + ' 兜豆,' : '') + '复制下面的地址,打开浏览器或百度网盘 App 就能下载《' + String(r.title || '').replace(/[《》]/g, '') + '》';
$('#rpUrl').textContent = pan.url;
$('#rpCode').textContent = pan.code || '无';
$('#rpCodeRow').classList.toggle('hide', !pan.code);
openModal('modalResPan');
}
function copyText(t) {
if (navigator.clipboard && window.isSecureContext) return navigator.clipboard.writeText(t).catch(() => legacyCopy(t));
return Promise.resolve(legacyCopy(t));
}
function legacyCopy(t) {
const ta = document.createElement('textarea');
ta.value = t; ta.setAttribute('readonly', ''); ta.style.cssText = 'position:fixed;top:-99px;opacity:0';
document.body.appendChild(ta); ta.select(); ta.setSelectionRange(0, t.length);
try { document.execCommand('copy'); } catch (e) { /* 复制不了也给提示,用户可长按地址手动复制 */ }
ta.remove();
}
$('#rpCopy').addEventListener('click', () => {
const code = $('#rpCodeRow').classList.contains('hide') ? '' : $('#rpCode').textContent;
copyText($('#rpUrl').textContent + (code ? ' 提取码: ' + code : '')).then(() => toast('已复制,去浏览器或网盘 App 粘贴打开'));
haptic();
});
$('#rdGet').addEventListener('click', () => {
const key = state.resKey;
if (!hashParam('openid')) { toast('请从小程序里打开后再兑换'); return; }
if (resGot.indexOf(key) >= 0) { redeemRes(key); return; } // 兑换过:直接拿链接,不扣豆
const r = RES[key] || {};
$('#rbName').textContent = '《' + String(r.title || '').replace(/[《》]/g, '') + '》';
$('#rbPrice').textContent = RES_PRICE;
const n = $('#meDouN') && !$('#meDouBal').classList.contains('hide') ? $('#meDouN').textContent : '';
$('#rbBal').textContent = n ? '你现在有 ' + n + ' 兜豆' : '';
openModal('modalResBuy');
});
$('#rbOk').addEventListener('click', () => redeemRes(state.resKey));
$('#rsGo').addEventListener('click', () => { closeModal(); openExchange(); });
loadResGot();
/* ================= 企业微信顾问弹窗(单态) =================
三个入口共用这一个壳:「我的」页服务卡 #meWxCard、资源库顶部试用装 banner #rlGift、
@@ -2877,6 +2996,7 @@
⚠️ 走 openWx() 而不是挂 data-open="modalWx":那条通用通道直接调 openModal,
不经过这里 —— 今天两者等价,但留一个入口,以后要统一加埋点/清理只改一处。 */
$('#rlGift').addEventListener('click', () => openWx());
$('#rlGift').classList.add('hide'); // 2026-11-05 用户:不保留顾问二维码,资源库顶部这条 banner 一起藏(DOM 留着)
/* ⚠️ 2026-09-19(9.19 需求):这里原来有一个 syncUnlockCopy(),按「已解锁 / 未解锁」
把首页书架与资源库的两句引导语改成两个版本,并给资源库顶部试用装 banner 挂 .hide。
@@ -3961,10 +4081,12 @@
渲染(用 r.img)无需改动;正文(body)仍用本地(接口未下发,保证详情不空)。 */
function __applyResources(items) {
if (!items || !items.length) return;
/* 2026-11-05 修:原来先清空 RES 再取 old,内置正文 body 全丢了,详情页「内容」一直是空的 —— 先留一份旧表 */
var prev = Object.assign({}, RES);
Object.keys(RES).forEach(function (k) { delete RES[k]; });
var order = [];
items.forEach(function (it) {
var old = RES[it.key] || { body: [] };
var old = prev[it.key] || { body: [] };
RES[it.key] = {
img: it.imgUrl || old.img || '', cat: it.cat, tint: it.tint,
title: it.title, desc: it.desc, meta: it.meta || old.meta || [],

View File

@@ -244,5 +244,5 @@
}
/* feed.js 首页默认不加载(index.html 只引了 topics.js),这里按需拉一次 */
if (window.GC_FEED) init();
else { var fs = document.createElement('script'); fs.src = 'guangchang/feed.js?v=26110460'; fs.onload = fs.onerror = init; document.body.appendChild(fs); }
else { var fs = document.createElement('script'); fs.src = 'guangchang/feed.js?v=26110461'; fs.onload = fs.onerror = init; document.body.appendChild(fs); }
})();

View File

@@ -6,9 +6,9 @@
(function () {
var sec = document.getElementById('gcHome');
if (!sec) return;
var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = 'js/gch/v4.css?v=26110460';
var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = 'js/gch/v4.css?v=26110461';
document.head.appendChild(l);
var s = document.createElement('script'); s.src = 'js/gch/v4.js?v=26110460';
var s = document.createElement('script'); s.src = 'js/gch/v4.js?v=26110461';
s.onload = function () { if (sec.querySelector('.g4-foot')) merge(); else sec.addEventListener('gc4-ready', merge, { once: true }); }; /* v4 要先拉 feed.js 才渲染 */
document.body.appendChild(s);

View File

@@ -9,7 +9,7 @@
if (/[?&]kit=0(?:&|$)/.test(location.search)) return;
var box = document.getElementById('kit'), sec = document.getElementById('kitHome');
if (!box || !sec) return;
var V = '26110460';
var V = '26110461';
var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = 'js/kit.css?v=' + V; document.head.appendChild(l);
document.documentElement.classList.add('has-kit');

View File

@@ -8,7 +8,7 @@
postMessage 不是实时投递,微信在分享那一刻才派发,所以每次换内容都要再报一次;子页面没引 jweixin,这里按需加载。 */
(function (g) {
'use strict';
var V = '26110460';
var V = '26110461';
var isWx = /MicroMessenger/i.test(navigator.userAgent || '');
var waiting = [], loading = false;
function ready(cb) {

View File

@@ -62,7 +62,7 @@
'.tc-more{display:block;width:100%;margin-top:6px;height:40px;border:0;border-radius:99px;background:#F7F8FA;color:#4E5969;font-size:13px;font-weight:600}';
var SLUG = (location.pathname.match(/\/topic\/([^\/]+)\//) || [])[1] || '';
/* 11-04 微信转发图:每个专题一张 assets/share/t/<slug>.jpg(核心词大字 + logo),见 js/share-card.js */
if (SLUG) (function () { var s = document.createElement('script'); s.src = '../../js/share-card.js?v=26110460'; s.onload = function () { window.mbShare('../../assets/share/t/' + SLUG + '.jpg'); }; document.head.appendChild(s); })();
if (SLUG) (function () { var s = document.createElement('script'); s.src = '../../js/share-card.js?v=26110461'; s.onload = function () { window.mbShare('../../assets/share/t/' + SLUG + '.jpg'); }; document.head.appendChild(s); })();
var SK = 'mmbox.tp.v1', UK = (function () { var m = ((location.hash || '') + '&' + (location.search || '')).match(/[#?&]openid=([^&]*)/); return m ? decodeURIComponent(m[1]) : '_guest'; })();
function loadMe() { try { var a = JSON.parse(localStorage.getItem(SK) || '{}') || {}; var m = a[UK] || {}; m.cm = m.cm || {}; m.lk = m.lk || {}; return { a: a, m: m }; } catch (e) { return { a: {}, m: { cm: {}, lk: {} } }; } }
function saveMe(st) { try { st.a[UK] = st.m; localStorage.setItem(SK, JSON.stringify(st.a)); } catch (e) {} }
@@ -75,7 +75,7 @@
function getJSON(u) { return fetch(u, { cache: 'no-cache' }).then(function (r) { if (!r.ok) throw r.status; return r.json(); }); }
function related(box) {
getJSON('../_shared/idx.json?v=26110460').then(function (idx) {
getJSON('../_shared/idx.json?v=26110461').then(function (idx) {
var me = null; idx.forEach(function (x) { if (x[0] === SLUG) me = x; });
var tag = me ? me[2] : '', h = 0; for (var i = 0; i < SLUG.length; i++) h = (h * 31 + SLUG.charCodeAt(i)) >>> 0;
var rest = idx.filter(function (x) { return x[0] !== SLUG && (window.__mbUgc || ['ceshi', 'duiyou'].indexOf(x[0]) < 0); }); /* UGC 关着不推两个测试 */
@@ -199,18 +199,18 @@
}
fetch(API + '/comments?kind=topic&target=' + encodeURIComponent(SLUG) + (OID ? '&openid=' + encodeURIComponent(OID) : ''))
.then(function (r) { return r.json(); }).then(function (j) { if (j && j.code === 200) { RC = j.result; paint(); } }).catch(function () {});
getJSON('../_shared/cm/' + SLUG + '.json?v=26110460').then(function (d) { L = d.c || []; paint(); }).catch(function () { paint(); });
getJSON('../_shared/cm/' + SLUG + '.json?v=26110461').then(function (d) { L = d.c || []; paint(); }).catch(function () { paint(); });
}
function cmPicsReady(cb) {
if (window.MBCmPics) return cb();
var s = document.createElement('script'); s.src = '../../js/cm-pics.js?v=26110460'; s.onload = function () { if (window.MBCmPics) cb(); };
var s = document.createElement('script'); s.src = '../../js/cm-pics.js?v=26110461'; s.onload = function () { if (window.MBCmPics) cb(); };
document.head.appendChild(s);
}
function ugcReady() {
if (window.__mbUgcReady) return window.__mbUgcReady;
return new Promise(function (res) {
var u = document.createElement('script'); u.src = '../../js/ugc.js?v=26110460';
var u = document.createElement('script'); u.src = '../../js/ugc.js?v=26110461';
u.onload = function () { (window.__mbUgcReady || Promise.resolve(false)).then(res); };
u.onerror = function () { res(false); };
document.head.appendChild(u);

View File

@@ -11,8 +11,8 @@
月数按「自然月」数:从 max(出生月, 2025-01) 起,到满 3 周岁那个月之前为止(结果标「约」,以当地核定为准)。
最多填 3 个孩子;还没出生的填预产期先算。地方另有加码的(如部分城市每孩另发)不在这里算。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/calc.css?v=26110461">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<style>:root{--c:#E25C5C;--c2:#FF9A8A;--cbg:#FFEFED}.kid{position:relative;margin-top:12px;padding:12px;border-radius:14px;background:#FAF7F8}.kid .lb{display:flex;justify-content:space-between}.kid .rm{font-size:12.5px;font-weight:700;color:var(--m)}.add{display:block;width:100%;height:42px;margin-top:12px;border-radius:12px;border:1.5px dashed var(--c);color:var(--c);font-size:14px;font-weight:800}.kid .seg{margin-top:8px}</style>
</head>
<body>
@@ -46,7 +46,7 @@
<div class="tip"><b>地方可能另有补贴:</b>部分城市在国家 3600 元之外还另发生育补贴、育儿补贴,问一下当地卫健部门或看政务平台。</div>
<p class="foot">依据《育儿补贴制度实施方案》(2025)估算,月数折算以当地核定为准。</p>
</div>
<script src="../_shared/calc.js?v=26110460"></script>
<script src="../_shared/calc.js?v=26110461"></script>
<script>
(function () {
'use strict';
@@ -107,10 +107,10 @@
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/butie-js.jpg', '育儿补贴:每孩每年 3600 元,你家能领多少'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<!-- 11-04 UGC 总开关关着时本页不展示,直接回首页(js/ugc.js) -->
<script src="../../js/ugc.js?v=26110460" data-guard></script>
<script src="../../js/ugc.js?v=26110461" data-guard></script>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
<meta name="format-detection" content="telephone=no">
<title>测一测你是什么样的妈妈?</title>

View File

@@ -10,8 +10,8 @@
每次「查什么」只列常规项目,具体以产检医院安排为准。做完可以打勾(记在本机 mmbox.calc.chanjian)。
预产期优先用预产期计算器填过的值。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/calc.css?v=26110461">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<style>:root{--c:#2F86C9;--c2:#6CB6F0;--cbg:#EAF5FF}.tl .ck{flex:none;align-self:flex-start;height:28px;padding:0 10px;margin-top:1px;border-radius:99px;background:#F4F6F8;color:var(--m);font-size:12px;font-weight:800}.tl li.ok .ck{background:var(--c);color:#fff}.tl li.ok .m{opacity:.55}.tl li.ok .d{border-color:var(--c);background:var(--c);box-shadow:none}.tl .m span.it{margin-top:3px;color:var(--t)}</style>
</head>
<body>
@@ -37,7 +37,7 @@
<div class="tip"><b>要空腹的几次:</b>第一次建档抽血、糖耐(OGTT)一般要空腹,前一晚 10 点后别吃东西;具体看医院通知。<br><b>错过不能补的:</b>NT(11~13+6 周)、大排畸(20~24 周)、糖耐(24~28 周)都有时间窗口,提前预约。</div>
<p class="foot">按《孕前和孕期保健指南(2018)》常规时间排,具体项目和时间以产检医院安排为准。</p>
</div>
<script src="../_shared/calc.js?v=26110460"></script>
<script src="../_shared/calc.js?v=26110461"></script>
<script>
(function () {
'use strict';
@@ -94,10 +94,10 @@
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/chanjian-js.jpg', '产检时间表:每次产检哪天去、查什么'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<!-- 11-04 UGC 总开关关着时本页不展示,直接回首页(js/ugc.js) -->
<script src="../../js/ugc.js?v=26110460" data-guard></script>
<script src="../../js/ugc.js?v=26110461" data-guard></script>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
<meta name="format-detection" content="telephone=no">
<title>测一测:你家准爸爸是哪种队友?</title>

View File

@@ -11,8 +11,8 @@
计算:综合所得年度税表(3%~45%,年减除 6 万);应纳税所得 = 12 ×(月薪 − 个人五险一金 − 其他专项附加)− 60000,
省的税 = 不扣宝宝那项的税 − 扣了之后的税。不含年终奖单独计税、劳务报酬等,结果为估算。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/calc.css?v=26110461">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<style>:root{--c:#6C5BD6;--c2:#A595F2;--cbg:#F1EEFF}</style>
</head>
<body>
@@ -49,7 +49,7 @@
<p class="foot">按现行个税政策估算,未含年终奖单独计税等情况,以个税 App 实际计算为准。</p>
</div>
<script src="../_shared/calc.js?v=26110460"></script>
<script src="../_shared/calc.js?v=26110461"></script>
<script>
(function () {
'use strict';
@@ -82,10 +82,10 @@
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/geshui-js.jpg', '个税省多少:有宝宝一年能少交多少税'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -11,8 +11,8 @@
本省延长的天数是否由生育保险基金支付各地不一样,结果同时给出「按国家 98 天起」和「按本省合计」两个数。
津贴低于本人工资的,多数省份规定由单位补足差额 —— 填了本人月工资就算出差额。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/calc.css?v=26110461">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<style>:root{--c:#E0812A;--c2:#FFB067;--cbg:#FFF3E6}select.in{appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,#999 50%),linear-gradient(135deg,#999 50%,transparent 50%);background-position:calc(100% - 20px) 50%,calc(100% - 15px) 50%;background-size:5px 5px;background-repeat:no-repeat}</style>
</head>
<body>
@@ -47,7 +47,7 @@
<div class="tip"><b>生育津贴 ≠ 生育医疗费:</b>产检、住院分娩的费用另外按生育保险报销,不在这个数里。</div>
<p class="foot">按《社会保险法》《女职工劳动保护特别规定》常用算法估算,实际以当地医保部门核定为准。</p>
</div>
<script src="../_shared/calc.js?v=26110460"></script>
<script src="../_shared/calc.js?v=26110461"></script>
<script>
(function () {
'use strict';
@@ -86,10 +86,10 @@
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/jintie-js.jpg', '生育津贴计算器:产假期间能领多少钱'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -138,9 +138,9 @@ button{font:inherit;border:0;background:none;color:inherit;cursor:pointer}
})();
</script>
<!-- 11-05 用户:底部加上跟趣味小测试一样的 Tab(孕期计算器 / 记一下 / 返回首页) -->
<script src="../../js/mb-tabbar.js?v=26110460"></script>
<script src="../../js/mb-tabbar.js?v=26110461"></script>
<script>MBTab.init({ root: '../../', first: { t: '孕期计算器', ic: 'calc' } });</script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/jisuan.jpg', '孕期计算器:生娃花费、预产期、产假天数,一算就知道'); /* 11-04 微信转发图 */</script>
</body>
</html>

View File

@@ -10,8 +10,8 @@
对比用国家卫健委《中国居民营养与慢性病状况报告(2020 年)》18~44 岁平均身高:男 169.7 cm、女 158.0 cm。
身高约 70% 看遗传,营养、睡眠、运动影响剩下的部分 —— 结果只是参考范围。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/calc.css?v=26110461">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<style>:root{--c:#1F9BA8;--c2:#5FCBD3;--cbg:#E6F7F8}.sx{display:flex;gap:10px;margin-top:12px}.sx div{flex:1;padding:10px;border-radius:12px;background:rgba(255,255,255,.18)}.sx b{display:block;font-size:22px;font-weight:900;line-height:1.3}</style>
</head>
<body>
@@ -46,7 +46,7 @@
<p class="foot">按遗传靶身高公式估算,再按家族身高、作息和运动习惯小幅调整;实际身高受营养、睡眠、运动和疾病等影响,仅供参考。</p>
</div>
<script src="../_shared/calc.js?v=26110460"></script>
<script src="../_shared/calc.js?v=26110461"></script>
<script>
(function () {
'use strict';
@@ -89,10 +89,10 @@
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/shengao-js.jpg', '宝宝身高预测:长大后大概多高'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -11,8 +11,8 @@
各地规定不一,页面写「以当地为准」。很多地方已开通「新生儿出生一件事」联办(出生证 + 户口 + 医保 + 社保卡一次办)。
做完可以打勾(记在本机 mmbox.calc.shouxu);还没生的按预产期先排。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/calc.css?v=26110461">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<style>:root{--c:#4E7FD8;--c2:#86AEF2;--cbg:#EDF3FF}.tl .ck{flex:none;align-self:flex-start;height:28px;padding:0 10px;margin-top:1px;border-radius:99px;background:#F4F6F8;color:var(--m);font-size:12px;font-weight:800}.tl li.ok .ck{background:var(--c);color:#fff}.tl li.ok .m{opacity:.55}.tl li.ok .d{border-color:var(--c);background:var(--c);box-shadow:none}.tl li.late .m b em{background:#FFE8E6;color:#E0453A}.tl .m span.w{color:var(--t)}</style>
</head>
<body>
@@ -37,7 +37,7 @@
<div class="tip"><b>先查有没有「出生一件事」:</b>很多城市在支付宝、微信或当地政务 App 上能把出生医学证明、上户口、医保参保、社保卡一次办完,不用一趟趟跑。<br><b>要准备的:</b>爸妈身份证、户口本、结婚证、出生医学证明(宝宝名字定好再办)。</div>
<p class="foot">各地规定和截止时间不完全一样,以当地公安、医保、卫健部门要求为准。</p>
</div>
<script src="../_shared/calc.js?v=26110460"></script>
<script src="../_shared/calc.js?v=26110461"></script>
<script>
(function () {
'use strict';
@@ -88,10 +88,10 @@
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/shouxu-js.jpg', '出生后手续时间线:每件事截止哪天'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -11,8 +11,8 @@
顺带提示两种溶血风险:妈妈 Rh 阴性 + 爸爸 Rh 阳性(Rh 溶血,要查抗 D 抗体);妈妈 O 型 + 爸爸非 O 型(ABO 溶血,多数轻)。
顺式 AB(cis-AB)、孟买型等罕见情况不算,页面写明。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/calc.css?v=26110461">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<style>:root{--c:#D9475A;--c2:#FF8A96;--cbg:#FFEDEF}.bars{margin-top:12px}.bars div{display:flex;align-items:center;gap:8px;margin-top:6px}.bars b{flex:none;width:44px;font-size:16px}.bars i{flex:1;height:12px;border-radius:99px;background:rgba(255,255,255,.25);overflow:hidden}.bars i u{display:block;height:100%;border-radius:99px;background:#fff}.bars span{flex:none;width:52px;text-align:right;font-size:14px;font-weight:800}.bars .no{opacity:.45}</style>
</head>
<body>
@@ -44,7 +44,7 @@
<p class="foot">按常规遗传规律估算,不能用来做亲子鉴定;顺式 AB、孟买型等罕见血型不在计算范围。</p>
</div>
<script src="../_shared/calc.js?v=26110460"></script>
<script src="../_shared/calc.js?v=26110461"></script>
<script>
(function () {
'use strict';
@@ -98,10 +98,10 @@
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/xuexing-js.jpg', '宝宝血型推算:爸妈血型配宝宝会是什么型'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -71,7 +71,7 @@ button{cursor:pointer}
.tip b{color:var(--h)}
.foot{margin:14px 20px 0;font-size:12px;color:var(--m);text-align:center;line-height:1.6}
</style>
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
</head>
<body>
<svg style="position:absolute;width:0;height:0" aria-hidden="true"><symbol id="i-back" viewBox="0 0 24 24"><path d="M15 5l-7 7 7 7"/></symbol></svg>
@@ -188,10 +188,10 @@ button{cursor:pointer}
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/yuchanqi-js.jpg', '预产期计算器:宝宝哪天到?还有几天见面'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -9,8 +9,8 @@
价格是 2026 年市场行情的估算区间(月子中心 28 天套餐、金牌 / 普通月嫂 26 天、在家坐月子的食材营养 + 用品),按城市 × 档次取值,按天数折算;
不是报价,只帮用户比较三种方式的量级。改价格只改下面 P 表。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/calc.css?v=26110461">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<style>:root{--c:#C9658F;--c2:#F0A0C0;--cbg:#FCEEF4}</style>
</head>
<body>
@@ -37,7 +37,7 @@
<div class="tip"><b>看月子中心记得问清:</b>价格含不含宝宝护理、产后修复、家属餐和陪护床;护士是否 24 小时、一对几;有没有医护资质和儿科医生定期巡房。<br><b>请月嫂:</b>看健康证、育婴师证,最好先面试、试工,合同写清休息和换人规则。</div>
<p class="foot">价格为 2026 年市场行情估算,各地差别很大,以实际报价为准。</p>
</div>
<script src="../_shared/calc.js?v=26110460"></script>
<script src="../_shared/calc.js?v=26110461"></script>
<script>
(function () {
'use strict';
@@ -71,10 +71,10 @@
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/yuezi-js.jpg', '月子花费:月子中心、月嫂、在家坐各花多少'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -10,8 +10,8 @@
孕月按 4 周一个月(孕 1~10 月);孕早期 < 14 周、孕中期 14~27+6 周、孕晚期 ≥ 28 周;37 周足月、42 周过期。
宝宝像什么用全生态统一表 /common/baby-size.js(别自己维护)。预产期计算器填过的值直接拿来用。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/calc.css?v=26110461">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<style>:root{--c:#E2668E;--c2:#FF9DB8;--cbg:#FFEEF3}.bs{display:flex;align-items:center;gap:12px;margin-top:12px;padding:10px 12px;border-radius:12px;background:rgba(255,255,255,.18)}.bs i{font-style:normal;font-size:30px;line-height:1}.bs b{display:block;font-size:15px}.chk{display:flex;align-items:center;gap:10px;margin-top:10px}.chk .in{flex:1;margin:0}.chk b{flex:none;min-width:120px;text-align:right;font-size:15px;color:var(--c)}</style>
</head>
<body>
@@ -49,7 +49,7 @@
<div class="tip"><b>孕周以早孕 B 超为准:</b>月经不规律或记不清末次月经时,医生会按孕早期 B 超(头臀长)定孕周。这里算的是常规算法,仅供参考。</div>
<p class="foot">计算结果仅供参考,不能代替医生诊断。</p>
</div>
<script src="../_shared/calc.js?v=26110460"></script>
<script src="../_shared/calc.js?v=26110461"></script>
<script src="/common/baby-size.js?v=26101001"></script>
<script>
(function () {
@@ -109,10 +109,10 @@
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/yunzhou-js.jpg', '孕周计算器:今天孕几周几天,宝宝像什么'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -12,8 +12,8 @@
某一孕周的推荐范围 = 孕早期 0~2 kg + (孕周 − 13) × 每周范围,封顶到总范围。双胎按 IOM 2009(标准没覆盖双胎)。
只算范围不做记录(11-04 用户:记体重是另一个记录工具)。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110460">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<link rel="stylesheet" href="../_shared/calc.css?v=26110461">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<style>:root{--c:#2E9C6A;--c2:#6CCB9A;--cbg:#E8F7EF}.gauge{position:relative;height:10px;margin-top:14px;border-radius:99px;background:rgba(255,255,255,.28)}.gauge .ok{position:absolute;top:0;bottom:0;border-radius:99px;background:rgba(255,255,255,.65)}.gauge .me{position:absolute;top:50%;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;background:#fff;box-shadow:0 0 0 3px rgba(0,0,0,.15)}.glab{display:flex;justify-content:space-between;margin-top:4px;font-size:11.5px;opacity:.85}</style>
</head>
<body>
@@ -46,7 +46,7 @@
<div class="tip"><b>胖得太快或太慢都要留意:</b>增重过多容易妊娠糖尿病、巨大儿,过少可能影响宝宝发育。一周涨超过 1 公斤,或者突然腿脚、脸都肿,要尽快告诉医生。</div>
<p class="foot">依据 WS/T 801—2022《妊娠期妇女体重增长推荐值标准》;双胎参考美国医学研究所 IOM 2009。仅供参考。</p>
</div>
<script src="../_shared/calc.js?v=26110460"></script>
<script src="../_shared/calc.js?v=26110461"></script>
<script>
(function () {
'use strict';
@@ -95,10 +95,10 @@
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110460"></script>
<script src="../../js/share-card.js?v=26110461"></script>
<script>window.mbShare('../../assets/share/t/zengzhong-js.jpg', '孕期增重范围:孕期胖多少才合适'); /* 11-04 微信转发图 */</script>
<!-- 11-04 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110460"></script>
<script src="../_shared/wizard.js?v=26110461"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
</body>
</html>

View File

@@ -203,8 +203,8 @@ html.cm .key{margin-top:26px}
html.cm:not(.cm-all) .cm-more{display:flex;align-items:center;justify-content:center;gap:4px;margin:22px 20px 0;height:46px;border-radius:99px;background:var(--cbg);color:var(--c);font-size:14.5px;font-weight:700;width:calc(100% - 40px)}
</style>
<!-- 11-04 计算器模式(calc=1)走分步:一步一题、最后出结果,见 ../_shared/wizard.js -->
<link rel="stylesheet" href="../_shared/wizard.css?v=26110460">
<script src="../_shared/wizard.js?v=26110460"></script>
<link rel="stylesheet" href="../_shared/wizard.css?v=26110461">
<script src="../_shared/wizard.js?v=26110461"></script>
</head>
<body>
<svg class="hide" aria-hidden="true" xmlns="http://www.w3.org/2000/svg">