v26110463 孕周福利对齐数胎动后台最终字段(cat/read_text/claim_text/pack_*/body),恢复分类筛选;预览也跟 giftEnabled 开关(用户:隐藏福利模块,?gift=1 临时看);福利卡头像挤字判断修正

This commit is contained in:
deploy
2026-11-05 10:34:50 +00:00
parent 8202c77ad9
commit 1a5bf8eeb0
27 changed files with 131 additions and 121 deletions

View File

@@ -3,7 +3,7 @@
(function () {
'use strict';
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
var VER = '26110462';
var VER = '26110463';
const $ = (s, c) => (c || document).querySelector(s);
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));
@@ -2656,10 +2656,11 @@
/* ================= 孕育资源库:列表页 + 内容页 ================= */
/* 2026-11-05 起「孕N周专属福利」资料由数胎动后台维护(taidong.douba.top/admin 左侧「孕周专属福利」,会话 375797cf)。
公开列表 GET /taidong/api/public/week-perks → {items:[{id,week_from,week_to,title,subtitle,cover,images,detail,price,sort}]},
公开列表 GET /taidong/api/public/week-perks → {items:[{key,title,cat,tint,desc,read_text,claim_text,cover,images,week_from,week_to,
pack_fmt,pack_items,body:[{h,p}],price,sort,detail}]}(week_from=week_to=0 = 全孕期),
只含已上架、不含网盘地址;兑换走 box_app /resources/{id}/claim(服务端去对方取链接 + 扣豆,价格以对方为准)。
原来写死的 8 份资料(book/food… + 正文 body + 内容清单 PACK)全部删除;列表为空 / 本周没有 → 整个福利区块隐藏(对方要求)。
RES[id] = {img,title,desc,detail,images,price,wf,wt,tint},RES_ORDER 按 sort。 */
原来写死的 8 份资料已按原 key 导入对方后台,这里不再内置;列表为空 / 本周没有 / 接口出错 → 整个福利区块隐藏。
RES[key] = {img,title,cat,desc,read,claim,detail,images,fmt,items,body,price,wf,wt,tint},RES_ORDER 按 sort。 */
const RES = {};
const RES_ORDER = [];
const TINTS = ['o', 'g', 'p', 'b'];
@@ -2673,11 +2674,14 @@
Object.keys(RES).forEach(k => { delete RES[k]; });
RES_ORDER.length = 0;
items.forEach((it, n) => {
const id = String(it.id);
const id = String(it.key || it.id);
const arr = v => Array.isArray(v) ? v : [];
RES[id] = {
img: it.cover || '', title: it.title || '', desc: it.subtitle || '', detail: it.detail || '',
images: Array.isArray(it.images) ? it.images : [], price: +it.price || 0,
wf: +it.week_from || 0, wt: +it.week_to || 0, tint: TINTS[n % 4]
img: it.cover || '', title: it.title || '', cat: it.cat || '', desc: it.desc || it.subtitle || '',
read: it.read_text || '', claim: it.claim_text || '', detail: it.detail || '',
images: arr(it.images), fmt: arr(it.pack_fmt), items: arr(it.pack_items),
body: arr(it.body).map(b => [b && b.h || '', b && b.p || '']), price: +it.price || 0,
wf: +it.week_from || 0, wt: +it.week_to || 0, tint: TINTS.indexOf(it.tint) >= 0 ? it.tint : TINTS[n % 4]
};
RES_ORDER.push(id);
});
@@ -2705,7 +2709,7 @@
'<img class="sb-cover" src="' + escR(r.img) + '" alt="" aria-hidden="true">' +
'<span class="sb-title">' + escR(r.title) + '</span>' +
'<span class="sb-desc">' + escR(r.desc) + '</span>' +
'<span class="sb-row"><span class="sb-faces" aria-hidden="true"></span><i class="sb-got">宝妈都在领</i>' +
'<span class="sb-row"><span class="sb-faces" aria-hidden="true"></span><i class="sb-got">' + escR(r.claim || '宝妈都在领') + '</i>' +
'<span class="pill-free">' + (got ? '已兑换' : r.price > 0 ? r.price + ' 豆兑' : '免费领') + '</span></span></button>';
}).join('');
$$('.shelf-book', shelf).forEach(b => b.addEventListener('click', () => openPanel('detailRes', b)));
@@ -2743,6 +2747,7 @@
'<span class="ri-body"><span class="ri-title">' + escR(r.title) + '</span>' +
'<span class="ri-desc">' + escR(r.desc) + '</span>' +
'<span class="ri-row">' +
(r.cat ? '<em class="ri-cat">' + escR(r.cat) + '</em>' : '') +
'<em class="ri-ga">' + wkTxt(r) + '</em>' +
'<em class="pill-free">' + (resGot.indexOf(k) >= 0 ? '已兑换' : priceTxt(r)) + '</em>' +
'</span></span></button>';
@@ -2767,7 +2772,7 @@
/* fav 不是分类,是「只看收藏过的」,所以单走一支 */
const fav = state.resCat === 'fav';
const keys = fav ? RES_ORDER.filter(isFav)
: RES_ORDER.slice(); // 11-05 后台资料没有分类字段,分类 chip 已隐藏,只剩「全部 / 收藏」
: RES_ORDER.filter(k => state.resCat === 'all' || RES[k].cat === state.resCat);
$('#resList').innerHTML = keys.map(resCardHTML).join('');
bindResCards($('#resList'));
$('#resEmptyHint').textContent = keys.length
@@ -2789,18 +2794,22 @@
state.resKey = RES[key] ? key : RES_ORDER[0];
$('#rdImg').src = r.img;
$('#rdCover').className = 'rd-cover ' + r.tint;
$('#rdCat').textContent = wkTxt(r);
$('#rdCat').textContent = r.cat || wkTxt(r);
$('#rdTitle').textContent = r.title;
$('#rdDesc').textContent = r.desc;
$('#rdMeta').innerHTML = '<span>适用 ' + wkTxt(r) + '</span><span>' + (r.price > 0 ? r.price + ' 兜豆兑换' : '免费领取') + '</span>';
/* 「这份资料里有什么」= 后台填的多行详情(一行一段)+ 详情图 */
$('#rdMeta').innerHTML = [r.read, r.claim, wkTxt(r)].filter(Boolean).map(m => '<span>' + escR(m) + '</span>').join('');
/* 「这份资料里有什么」= 文件形式标签 + 内容清单 + 补充说明(多行,一行一段)+ 详情图;正文 body 放「内容抢先看」 */
const paras = r.detail.split(/\n+/).map(t => t.trim()).filter(Boolean);
$('#rdPack').innerHTML = (paras.length || r.images.length) ? '<h3 class="d-sec">这份资料里有什么</h3>' +
'<div class="rp-box">' + paras.map(t => '<p class="rp-p">' + escR(t) + '</p>').join('') +
$('#rdPack').innerHTML = (r.fmt.length || r.items.length || paras.length || r.images.length) ? '<h3 class="d-sec">这份资料里有什么</h3>' +
'<div class="rp-box">' +
(r.fmt.length ? '<div class="rp-fmt">' + r.fmt.map(f => '<span>' + escR(f) + '</span>').join('') + '</div>' : '') +
(r.items.length ? '<ul class="rp-list">' + r.items.map(t => '<li>' + escR(t) + '</li>').join('') + '</ul>' : '') +
paras.map(t => '<p class="rp-p">' + escR(t) + '</p>').join('') +
r.images.map(u => '<img class="rp-img" src="' + escR(u) + '" alt="" loading="lazy">').join('') +
'<p class="rp-how">' + (r.price > 0 ? '<b>' + r.price + '</b> 兜豆兑换,' : '免费领取,') +
'马上给你网盘地址和提取码,复制去下载;领过的再点也能看' + (r.price > 0 ? ',不重复扣豆' : '') + '。</p></div>' : '';
$('#rdBody').innerHTML = '';
'马上给你网盘地址和提取码,复制去下载;领过的再点也能看' + (r.price > 0 ? ',不重复扣豆' : '') + '。</p></div>' +
(r.body.length ? '<h3 class="d-sec">内容抢先看</h3>' : '') : '';
$('#rdBody').innerHTML = r.body.map(b => '<h4>' + escR(b[0]) + '</h4><p>' + escR(b[1]) + '</p>').join('');
$('#rdMore').innerHTML = RES_ORDER
.filter(k => k !== state.resKey).slice(0, 3).map(resCardHTML).join('');
bindResCards($('#rdMore'));

View File

@@ -44,7 +44,7 @@ window.mbGiftFaces = function () {
function fit() {
[].forEach.call(box, function (f) {
var got = f.parentNode.querySelector('.sb-got'), ims = f.children, k = ims.length;
function tight() { return got && got.scrollWidth > got.clientWidth + 1; }
function tight() { return got && got.scrollWidth > got.clientWidth; }
for (var m = 5; m <= 9 && tight(); m++) [].forEach.call(ims, function (im, x) { if (x) im.style.marginLeft = -m + 'px'; }); /* 先叠紧一点(最多压 9px),还放不下再减个数 */
while (k > 2 && tight()) ims[--k].style.display = 'none';
});

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=26110462'; fs.onload = fs.onerror = init; document.body.appendChild(fs); }
else { var fs = document.createElement('script'); fs.src = 'guangchang/feed.js?v=26110463'; 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=26110462';
var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = 'js/gch/v4.css?v=26110463';
document.head.appendChild(l);
var s = document.createElement('script'); s.src = 'js/gch/v4.js?v=26110462';
var s = document.createElement('script'); s.src = 'js/gch/v4.js?v=26110463';
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 = '26110462';
var V = '26110463';
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 = '26110462';
var V = '26110463';
var isWx = /MicroMessenger/i.test(navigator.userAgent || '');
var waiting = [], loading = false;
function ready(cb) {

View File

@@ -21,8 +21,9 @@
'html.gift-off .shelf.gift2{display:none!important}';
(document.head || de).appendChild(st);
/* 11-05 用户:「预览页面要放出来,正式上线的可以先隐藏」→ 预览站不跟 giftEnabled,一直显示;正式站照开关 */
var pvSite = /\/mama-box-preview\//.test(location.pathname);
/* 11-05 用户先说「预览页面要放出来」(预览不跟开关),同日又说「把底部的孕周福利模块隐藏起来」→ 预览也跟 giftEnabled 走;
预览站想临时看效果用 ?gift=1 */
var pvSite = /\/mama-box-preview\//.test(location.pathname) && /[?&#]gift=1/.test(location.search + location.hash);
if (!pvSite) try { de.classList.toggle('gift-off', localStorage.getItem('mmbox.gift.v1') === '0'); } catch (e) {}
if (!pvSite) fetch('/api/mp/public/mama-box/config', { cache: 'no-store' })
.then(function (r) { return r.json(); })