v26110261 预览:广场取消家庭婚姻/职场/经验分类只留全部+测一测,卡片加话题标签;首页广场右上角分类换成 slogan

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
deploy
2026-11-03 13:58:59 +00:00
parent 07f8227357
commit 8b19ad2d9e
10 changed files with 42 additions and 33 deletions

View File

@@ -367,8 +367,8 @@ mark{background:linear-gradient(transparent 62%,var(--c20) 0);color:inherit;padd
</div>
<div class="toast" id="toast"></div>
<script src="meta.js?v=26110260"></script>
<script src="tests.js?v=26110260"></script>
<script src="meta.js?v=26110261"></script>
<script src="tests.js?v=26110261"></script>
<script>
(function () {
'use strict';

View File

@@ -578,6 +578,12 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
.cbn.b-work{--bb:#D2E0F7;--bc:#4A7BD0}
.cbn.b-baby{--bb:#D6EFE7;--bc:#2E9B78}
.cbn.b-ceshi{--bb:#E8E0FC;--bc:#7A5BD6}
/* 11-03 卡片话题标签:标题下一行「#职场」「#经验分享」「#家庭婚姻」,像发布时带的话题 */
.nb .ntg{display:inline-block;margin:4px 0 0;padding:1px 7px;border-radius:6px;font-size:11px;font-weight:700;line-height:18px;background:#FFF0EC;color:#E2694A}
.nb .ntg.k-work{background:#EDF3FD;color:#4A7BD0}
.nb .ntg.k-baby{background:#E9F6F1;color:#2E9B78}
.nb .ntg.k-family{background:#FFEEF2;color:#E25C7A}
</style>
</head>
<body>
@@ -666,10 +672,10 @@ 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=26110260"></script>
<script src="data.js?v=26110260"></script>
<script src="feed.js?v=26110260"></script>
<script src="ceshi/meta.js?v=26110260"></script>
<script src="topics.js?v=26110261"></script>
<script src="data.js?v=26110261"></script>
<script src="feed.js?v=26110261"></script>
<script src="ceshi/meta.js?v=26110261"></script>
<script>
(function () {
'use strict';
@@ -735,7 +741,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=26110260').then(function (r) { return r.json(); }).then(function (j) {
fetch('cm.json?v=26110261').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) {
@@ -831,7 +837,8 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
else if (sty === 'tg') { r = Math.max(r, 1.2); ov = '<div class="tgt' + pos + '"><b><span>' + esc(n.title) + '</span></b></div>'; }
return '<button type="button" class="nc' + (sty ? ' s-' + sty : '') + '" data-id="' + n.id + '"><div class="cvw">' +
coverHTML(n, 'calc(var(--cw) * ' + r + ')') + ov + '</div>' +
'<div class="nb"><h3>' + esc(n.title) + '</h3><div class="nf"><img src="' + esc(avOf(n)) + '" alt="" loading="lazy"><span class="nm">' + esc(n.author) + '</span>' + likeHTML(n) + '</div></div></button>';
'<div class="nb"><h3>' + esc(n.title) + '</h3>' + (t && TAG_NAME[t.cat] ? '<span class="ntg k-' + t.cat + '">#' + TAG_NAME[t.cat] + '</span>' : '') +
'<div class="nf"><img src="' + esc(avOf(n)) + '" alt="" loading="lazy"><span class="nm">' + esc(n.author) + '</span>' + likeHTML(n) + '</div></div></button>';
}
/* ---------- 列表 ---------- */
@@ -839,7 +846,10 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
var cur = '', catF = '';
var UBAND = (function () { try { var g = JSON.parse(localStorage.getItem('mmbox.gcwk.v1') || 'null'); return !g ? -1 : g.pp ? 'pp' : g.w && window.GC_BAND ? window.GC_BAND('孕' + g.w + '周') : -1; } catch (e) { return -1; } })();
/* 11-01 用户:家庭+婚姻合成「家庭婚姻」,母婴改「经验」→ 三块(marriage 话题在 topics.js 里已并进 family) */
var CATS = [['', '全部', 'i-grid'], ['family', '家庭婚姻', 'i-home'], ['work', '职场', 'i-bag'], ['baby', '经验', 'i-baby'], ['ceshi', '测一测', 'i-spark']];
/* 11-03 用户:「家庭婚姻 / 职场 / 经验标签全部删除,只展示全部,所有内容放到全部里;每篇带一个话题标签(职场 / 经验分享…)」
→ 顶部只留「全部」+「测一测」(首页孕期百宝箱「趣味小测试」进的就是测一测);话题标签见 cardHTML 的 .ntg */
var CATS = [['', '全部', 'i-grid'], ['ceshi', '测一测', 'i-spark']];
var TAG_NAME = { family: '家庭婚姻', work: '职场', baby: '经验分享' };
var CAT_ORDER = ['family', 'work', 'baby'];
var CAT_NAME = { family: '家庭婚姻', work: '职场方向', baby: '孕育经验' };
var inCat = function (t) { return !catF || t.cat === catF; };
@@ -1101,7 +1111,7 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
function selectTopic(t, smooth) {
if (!TBY[t]) t = '';
cur = t;
if (t) catF = TBY[t].cat; /* 首页带 ?t= 进来 / 点详情里的话题标签:分类跟着切到该话题所属类 */
if (t) catF = ''; /* 11-03 分类标签取消:进话题时顶部停在「全部」 */
renderCats(); renderHead(); renderFeed();
history.replaceState(history.state, '', setQuery(cur, ''));
var sc = $('#sc'); if (smooth !== false) sc.scrollTop = 0;
@@ -1752,7 +1762,7 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
/* ---------- 启动 ---------- */
var deep = new URLSearchParams(location.search).get('n'), q0 = new URLSearchParams(location.search); /* 先读:selectTopic 会 replaceState 把 n 去掉 */
var c0 = new URLSearchParams(location.search).get('c');
if (CAT_ORDER.indexOf(c0) >= 0 || c0 === 'ceshi') catF = c0;
if (c0 === 'ceshi') catF = c0; /* 11-03 分类取消:旧链接 ?c=family / work / baby 一律落「全部」 */
selectTopic(param('t') && TBY[param('t')] ? param('t') : '', false);
if (deep && NBY[deep]) openNote(deep, false);
loadApproved();

View File

@@ -105,7 +105,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=26110260"></script>
<script src="../topics.js?v=26110261"></script>
<script>
(function () {
'use strict';

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:26110260 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<!-- V:26110261 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<link rel="stylesheet" href="mama-box.css">
<link rel="stylesheet" href="night.css">
<!-- 夜晚模式:首屏绘制前就按上次的选择加 class,避免先白后黑闪一下(开关在首页右上角 #nightBtn,逻辑见 app.js) -->
@@ -2521,16 +2521,16 @@
<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=26110260"></script>
<script src="guangchang/topics.js?v=26110261"></script>
<script src="js/app.js"></script>
<script src="js/kit.js?v=26110260"></script>
<script src="js/kit.js?v=26110261"></script>
<script>
/* 11-02 首页「孕妈广场」效果稿:地址带 ?gcv=1~6 时,把 #gcHome 换成 demo/gch/vN.css + vN.js 的版式并滚到这一块。
11-02 用户:「用第一版,放到预览页面上」;后改定彩色卡 → 不带参数也默认用 V6 合并版(广场卡堆 + 其他妈妈也在搜 + 测一测第 4 版彩色卡),不滚动、不显示效果稿角标 */
(function () {
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=26110260';
var n = m ? m[1] : '6', l = document.createElement('link'), s = document.createElement('script'), q = m ? Date.now() : 'v=26110261';
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;
@@ -2539,7 +2539,7 @@
/* 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=26110260'; bs.src = 'js/gch/brand.js?v=26110260';
bl.rel = 'stylesheet'; bl.href = 'js/gch/brand.css?v=26110261'; bs.src = 'js/gch/brand.js?v=26110261';
document.head.appendChild(bl); document.body.appendChild(bs);
}
})();
@@ -2550,7 +2550,7 @@
<script src="js/hero-fx.js"></script>
<!-- 2026-10-05 首页头图:宝宝时不时动一动小手小脚(独立文件,删掉这一行即下线) -->
<script src="js/baby-limbs.js?v=26101201"></script>
<script src="js/coach.js?v=26110260"></script>
<script src="js/coach.js?v=26110261"></script>
<script src="js/birth-flow.js?v=26110201"></script>
<!-- 禁止下拉回弹(2026-10-11 统一规则,与孕期体重同一段):竖向拖动时从手指下往上找还能朝该方向滚的容器,找不到才拦;横滑、双指、可滚列表不受影响 -->

View File

@@ -3,7 +3,7 @@
(function () {
'use strict';
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
var VER = '26110260';
var VER = '26110261';
const $ = (s, c) => (c || document).querySelector(s);
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));

View File

@@ -98,3 +98,7 @@
#gcHome.gv4 .g4-hand{width:46px;height:46px;margin-left:70px;border-radius:50%;display:grid;place-items:center;background:rgba(255,255,255,.92);box-shadow:0 6px 18px rgba(80,30,20,.28)}
#gcHome.gv4 .g4-hand svg{width:26px;height:26px;fill:none;stroke:#E2694A;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
#gcHome.gv4 .g4-hint b{padding:6px 12px;border-radius:99px;background:rgba(42,30,30,.72);color:#fff;font-size:12.5px;font-weight:700;letter-spacing:.5px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
/* 11-03 右上角分类取消 → 一句小 slogan(靠右、轻量,左边一个小爱心点缀) */
#gcHome.gv4 .g4-slg{margin-left:auto;display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;color:#C08A86;letter-spacing:.5px;white-space:nowrap}
#gcHome.gv4 .g4-slg i{width:9px;height:9px;flex:none;background:#F2879C;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z'/%3E%3C/svg%3E") center/contain no-repeat}
html.night #gcHome.gv4 .g4-slg{color:#B79A9E}

View File

@@ -9,7 +9,7 @@
var kfmt = function (n) { return n >= 10000 ? (n / 10000).toFixed(1).replace(/\.0$/, '') + '万' : n >= 1000 ? (n / 1000).toFixed(1).replace(/\.0$/, '') + 'k' : String(n); };
var ava = function (n) { return 'assets/img/mom/' + n + '.jpg'; };
var reduce = window.matchMedia && matchMedia('(prefers-reduced-motion: reduce)').matches;
var CAT_CN = { family: '家庭婚姻', work: '职场', baby: '经验' };
var CAT_CN = { family: '家庭婚姻', work: '职场', baby: '经验分享' }; /* 11-03 卡上话题标签同广场:经验 → 经验分享 */
var TOP = {}; T.forEach(function (t) { TOP[t.id] = t; });
/* 11-02 用户:广场帖子跟「其他妈妈也在搜」一样按孕周 6 段走 —— 多数是同阶段孕妈的帖子,穿插过来人(已生完)的。
帖子清单在 guangchang/feed.js(由 data.js 生成的轻量索引 + 排序函数 GC_ORDER),孕周取 app.js 广播的 window.__mbPreg。 */
@@ -42,7 +42,8 @@
sec.className = sec.className.replace(/\bgv\d\b/g, '') + ' gv4';
sec.innerHTML =
'<div class="g4-head"><h2 class="g4-title"><span>孕妈广场</span></h2>' +
'<span class="g4-cat" role="tablist" aria-label="话题分类"><button type="button" class="on" data-cat="">全部</button><button type="button" data-cat="family">家庭婚姻</button><button type="button" data-cat="work">职场</button><button type="button" data-cat="baby">经验</button></span></div>' +
/* 11-03 用户:首页孕妈广场右上角的分类(全部 / 家庭婚姻 / 职场 / 经验)取消,换一句小 slogan */
'<span class="g4-slg"><i></i>孕期路上,有人陪你聊</span></div>' +
/* 11-02 用户:「逛广场」单独挂在右边突兀 → 整行做成入口条(浅粉底,整条可点),右侧实心「进广场」 */
'<div class="g4-sub" role="button" tabindex="0"><span class="g4-avs" aria-hidden="true">' + ['p05', 'm07', 'p11', 'm16'].map(function (n) { return '<img src="' + ava(n) + '" alt="" loading="lazy">'; }).join('') + '</span><span class="g4-st">翻一翻,看看<b>其他妈妈</b>的故事</span><span class="g4-in">进广场<i>›</i></span></div>' +
'<div class="g4-stage"><div class="g4-deck" aria-live="polite"></div>' +
@@ -171,12 +172,6 @@
tags.addEventListener('click', function (e) { var b = e.target.closest('button[data-t]'); if (b) go(b.dataset.t); });
sec.querySelector('.g4-all').addEventListener('click', function () { go(''); });
sec.querySelector('.g4-sub').addEventListener('click', function () { go(''); });
sec.querySelector('.g4-cat').addEventListener('click', function (e) {
var b = e.target.closest('button[data-cat]');
if (!b || b.dataset.cat === cur) return; // 「全部」里滑块跟着卡片跳,所以按当前筛选判断,不按高亮判断
[].forEach.call(sec.querySelectorAll('.g4-cat button'), function (x) { x.classList.toggle('on', x === b); });
paint(b.dataset.cat);
});
/* 孕周变了(档案里改了 / 孕期数据晚到)→ 段变了才重排,免得翻到一半被打回第 1 张 */
var lastUB = userBand();
window.addEventListener('mb-preg', function () { var u = userBand(); if (u !== lastUB) { lastUB = u; paint(cur, true); } });
@@ -236,5 +231,5 @@
}
/* feed.js 首页默认不加载(index.html 只引了 topics.js),这里按需拉一次 */
if (window.GC_FEED) init();
else { var fs = document.createElement('script'); fs.src = 'guangchang/feed.js?v=26110260'; fs.onload = fs.onerror = init; document.body.appendChild(fs); }
else { var fs = document.createElement('script'); fs.src = 'guangchang/feed.js?v=26110261'; 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=26110260';
var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = 'js/gch/v4.css?v=26110261';
document.head.appendChild(l);
var s = document.createElement('script'); s.src = 'js/gch/v4.js?v=26110260';
var s = document.createElement('script'); s.src = 'js/gch/v4.js?v=26110261';
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');
if (!box) return;
var V = '26110260';
var V = '26110261';
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

@@ -68,7 +68,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=26110260').then(function (idx) {
getJSON('../_shared/idx.json?v=26110261').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; });
@@ -175,7 +175,7 @@
}
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=26110260').then(function (d) { L = d.c || []; paint(); }).catch(function () { paint(); });
getJSON('../_shared/cm/' + SLUG + '.json?v=26110261').then(function (d) { L = d.c || []; paint(); }).catch(function () { paint(); });
}
function extras(el) {