diff --git a/index.html b/index.html index 7f5396e..b67ad55 100644 --- a/index.html +++ b/index.html @@ -7,7 +7,7 @@ 兜爸心选 · 孕育陪伴 - + @@ -309,7 +309,7 @@ - 孕妈悄悄话 + 孕妈悄悄话本周话题 @@ -1813,6 +1813,7 @@ +

不显示昵称和头像,只有同孕期的妈妈能看到。她们会给你一个抱抱。

diff --git a/js/app.js b/js/app.js index 5e64c11..e0f691e 100644 --- a/js/app.js +++ b/js/app.js @@ -3,7 +3,7 @@ (function () { 'use strict'; /* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */ - var VER = '26100198'; + var VER = '26100199'; const $ = (s, c) => (c || document).querySelector(s); const $$ = (s, c) => Array.from((c || document).querySelectorAll(s)); @@ -3340,6 +3340,26 @@ const oid = () => hashParam('openid'); const list = () => (data && data.list) || []; + /* ---------- 每周话题(2026-10-02 用户:「一周一个主题,要么大家也不知道说什么」)---------- + 一条 = 从 from(北京时间那周的周一)起生效,直到下一条的 from;所以表里永远取「from ≤ 今天」的最后一条, + 没配新话题时沿用上一周的,不会空着。换话题 = 往表尾追加一条。 + 后端将来若在 /whisper 返回 theme(同结构),以后端为准。 + presets 只是「不知道说什么?点一句」的示范句,发出去时不在服务端预设库里 → 照常走微信内容安全审核。 */ + const WH_THEMES = [ + { from: '2026-09-28', name: '对宝宝说的话', + tip: '把想对 TA 说的话,悄悄放进星空', + say: '对宝宝说一句悄悄话', ph: '宝宝,妈妈想对你说……', + presets: ['宝宝,妈妈每天都在数着日子等你', '你踢我的时候,是在跟妈妈打招呼吗', '不管你长什么样,妈妈都一样爱你', + '慢慢长,不着急,妈妈在这儿等你', '等你出来,带你去看海', '爸爸天天对着肚子讲话,你听到了吗'] }, + ]; + function theme() { + if (data && data.theme && data.theme.name) return data.theme; + const d = new Date(Date.now() + 8 * 3600e3).toISOString().slice(0, 10); + let t = null; + WH_THEMES.forEach(x => { if (x.from <= d) t = x; }); + return t; + } + /* ---------- 首页入口:一句轮播 ---------- */ function roll() { const l = list().filter(x => !x.mine); @@ -3354,10 +3374,13 @@ /* 用户:「同孕周悄悄话改成 30 周孕妈悄悄话」—— 周数跟着她自己的孕周走 */ const nm = data && data.week ? data.week + '周孕妈悄悄话' : '孕妈悄悄话'; $('#weName').textContent = nm; - entry.setAttribute('aria-label', '打开' + nm); + const th = theme(); + $('#weTopic').textContent = th ? th.name : ''; + entry.classList.toggle('has-topic', !!th); + entry.setAttribute('aria-label', '打开' + nm + (th ? ',本周话题:' + th.name : '')); $('#weRoll').textContent = l.length ? '“' + l[0].text + '”' : ''; ri = 0; - $('#weGo').innerHTML = '去看看'; + $('#weGo').innerHTML = (th ? '去说一句' : '去看看') + ''; clearInterval(rollT); if (l.length > 1) rollT = setInterval(() => { if (!document.hidden && !page.classList.contains('show')) roll(); }, 4000); } @@ -3645,6 +3668,9 @@ $('#whpTag').textContent = data ? '孕 ' + data.week + ' 周 · 前后一周的妈妈' : ''; /* 2026-10-02 用户:「每个星星都是孕妈的一句话,类似这个感觉,替换掉今晚多少句悄悄话」→ 标题不再报条数 */ $('#wskTitle').innerHTML = '
每一颗星星,
都是一位孕妈的一句话

' + (night ? '今晚' : '今天') + ',她们和你一样在等宝宝来

'; + const th = theme(); + if (th) $('#wskTitle').insertAdjacentHTML('beforeend', '
本周话题' + esc(th.name) + '' + esc(th.tip || '') + '
'); + $('#whSay').firstElementChild.textContent = th && th.say ? th.say : '说一句悄悄话'; paintDeco(); paintSky(l); paintList(l); @@ -3766,7 +3792,12 @@ ta.value = ''; ta.maxLength = data.maxLen || 40; cnt(); - $('#whPresets').innerHTML = (data.presets || []).map(t => '').join(''); + const th = theme(); + $('#whMTitle').textContent = th && th.say ? th.say : '说一句悄悄话'; + $('#whMTopic').textContent = th ? '本周话题:' + th.name : ''; + $('#whMTopic').style.display = th ? '' : 'none'; + ta.placeholder = th && th.ph ? th.ph : '今天想对谁说点什么?'; + $('#whPresets').innerHTML = ((th && th.presets && th.presets.length) ? th.presets : (data.presets || [])).map(t => '').join(''); $('#whLeft').textContent = '今天还能说 ' + data.left + ' 句'; openModal('modalWhisper'); }); diff --git a/mama-box.css b/mama-box.css index e3bcfdf..87a823b 100644 --- a/mama-box.css +++ b/mama-box.css @@ -4204,3 +4204,23 @@ a.skip:focus{left:16px;top:16px} @media (prefers-reduced-motion:reduce){#tabLetter.has-new .t-ico{animation:none}} /* 档案的小脚丫:脚趾圆点在脚掌外面,选中时不反白、跟主体同色 */ .tab[data-tab="archive"].is-active .t-svg .td{fill:currentColor} + +/* ================= 悄悄话 · 每周话题(2026-10-02)================= + 首页入口三行:小字「30周孕妈悄悄话」/ 本周话题(金色小签 + 话题名)/ 一句轮播;右边「去说一句」。 + 全屏页标题下一张话题签;「说一句」弹窗顶上一行话题。话题表在 app.js WH_THEMES。 */ +.we-topic{display:none;align-items:center;gap:6px;min-width:0} +.wh-entry.has-topic .we-topic{display:flex} +.we-topic em{flex:none;font-style:normal;font-size:10px;font-weight:800;letter-spacing:.5px;color:#4A2E1E; + background:linear-gradient(120deg,#FFE2B8,#FFB98F);padding:1px 6px;border-radius:5px;line-height:15px} +.we-topic strong{font-size:15px;font-weight:900;letter-spacing:.5px;color:#FFE7C7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} +.wh-entry.has-topic .we-txt{gap:3px} +.wh-entry.has-topic .we-roll{font-size:12.5px;font-weight:500;color:rgba(255,244,232,.78)} +.wh-entry.has-topic .we-go{color:#FFE2B8;font-weight:700} + +.wsk-topic{display:inline-flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:4px 8px;margin-top:12px;padding:8px 14px; + border-radius:14px;background:rgba(255,255,255,.08);box-shadow:inset 0 0 0 1px rgba(255,226,184,.25)} +.wsk-topic em{font-style:normal;font-size:11px;font-weight:800;color:#4A2E1E;background:linear-gradient(120deg,#FFE2B8,#FFB98F);padding:1px 7px;border-radius:6px} +.wsk-topic b{font-size:16px;font-weight:900;color:#FFE7C7;letter-spacing:1px} +.wsk-topic span{flex-basis:100%;font-size:12px;color:rgba(255,255,255,.6);letter-spacing:.5px} + +.wh-m-topic{margin:0 0 6px;font-size:13px;font-weight:800;color:#C2667A}