预览站示例模式 demo=1:孕29周、示例脚印、来信角标2、兜豆2000、档案带demo (v26100452)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<title>兜爸心选 · 孕育陪伴</title>
|
<title>兜爸心选 · 孕育陪伴</title>
|
||||||
<!-- V:26100451 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
|
<!-- V:26100452 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
|
||||||
<link rel="stylesheet" href="mama-box.css">
|
<link rel="stylesheet" href="mama-box.css">
|
||||||
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
|
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
|
||||||
<!-- 共享助手:授权/跳商城/位置上报(分享卡片同步,见 docs/h5-auth-standard.md 第四节) -->
|
<!-- 共享助手:授权/跳商城/位置上报(分享卡片同步,见 docs/h5-auth-standard.md 第四节) -->
|
||||||
|
|||||||
42
js/app.js
42
js/app.js
@@ -3,7 +3,7 @@
|
|||||||
(function () {
|
(function () {
|
||||||
'use strict';
|
'use strict';
|
||||||
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
|
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
|
||||||
var VER = '26100451';
|
var VER = '26100452';
|
||||||
const $ = (s, c) => (c || document).querySelector(s);
|
const $ = (s, c) => (c || document).querySelector(s);
|
||||||
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));
|
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));
|
||||||
|
|
||||||
@@ -265,6 +265,17 @@
|
|||||||
}
|
}
|
||||||
/* ② 后退重载:脚本会重跑,init() 里调;① bfcache:整页不重载,挂在文件末尾已有的 pageshow 上 */
|
/* ② 后退重载:脚本会重跑,init() 里调;① bfcache:整页不重载,挂在文件末尾已有的 pageshow 上 */
|
||||||
|
|
||||||
|
/* ================= 示例模式(2026-10-05) =================
|
||||||
|
用户:「把首页的示例生成出来,用 29 周;所有该呈现的都呈现;脚印、底 tab 宝宝来信的圈都加示例;兜豆默认 2000;
|
||||||
|
档案页现有的示例(含 40 周旅程图)都保留」。用途:演示 / 截图 / 给人看完整首页。
|
||||||
|
⚠️ 只在**预览路径 + 网址显式带 demo=1**(?demo=1 或 #…&demo=1)时打开。正式首页 /mama-box/ 永远走不到 ——
|
||||||
|
AGENTS §4.2 不造假数据,2026-09-22 出过写死演示值被所有用户看到的事故;示例绝不能靠「接口没回来就兜底」触发。
|
||||||
|
打开后覆盖的只有展示:孕 29 周 0 天(预产期按今天倒推)、脚印 4 条 + 宝宝气泡、来信角标 2、兜豆 2000、档案 Tab 带 ?demo=1。
|
||||||
|
其余模块(工具卡示例、此刻、悄悄话、小知识、商城商品、福利)本来就有数据或预览示例,照常显示。 */
|
||||||
|
const DEMO = location.pathname.indexOf('/mama-box-preview/') === 0 &&
|
||||||
|
(/[?&]demo=1(&|$)/.test(location.search) || hashParam('demo') === '1');
|
||||||
|
const DEMO_WEEK = 29;
|
||||||
|
|
||||||
/* 2026-10-01 用户要求「档案」Tab 改跳孕期档案 H5(会话 19875b1b 提供)。
|
/* 2026-10-01 用户要求「档案」Tab 改跳孕期档案 H5(会话 19875b1b 提供)。
|
||||||
⚠️ 对方说明:目前是设计演示版(写死演示数据),还不读 URL 参数;接真实数据时按 ?openid=&unionid= 读,
|
⚠️ 对方说明:目前是设计演示版(写死演示数据),还不读 URL 参数;接真实数据时按 ?openid=&unionid= 读,
|
||||||
所以这里照旧拼上。无 return_url,返回靠宿主自带返回。原来跳的是 /chanjian-rili/(孕检日历)。 */
|
所以这里照旧拼上。无 return_url,返回靠宿主自带返回。原来跳的是 /chanjian-rili/(孕检日历)。 */
|
||||||
@@ -276,6 +287,7 @@
|
|||||||
const q = [];
|
const q = [];
|
||||||
if (oid) q.push('openid=' + encodeURIComponent(oid));
|
if (oid) q.push('openid=' + encodeURIComponent(oid));
|
||||||
if (uid) q.push('unionid=' + encodeURIComponent(uid));
|
if (uid) q.push('unionid=' + encodeURIComponent(uid));
|
||||||
|
if (DEMO) q.push('demo=1'); // 示例模式:成长档案也出它自己的示例(含 40 周旅程图)
|
||||||
if (q.length) u += '?' + q.join('&');
|
if (q.length) u += '?' + q.join('&');
|
||||||
reportLastApp(ARCHIVE_H5, 'chengzhangdangan');
|
reportLastApp(ARCHIVE_H5, 'chengzhangdangan');
|
||||||
reportHostLocation(u);
|
reportHostLocation(u);
|
||||||
@@ -763,7 +775,7 @@
|
|||||||
let _laixinUnread = null; // 最近一次未读结果;建档状态变化时靠它重算
|
let _laixinUnread = null; // 最近一次未读结果;建档状态变化时靠它重算
|
||||||
function renderLetterReminder() {
|
function renderLetterReminder() {
|
||||||
const badge = $('#tabBadge');
|
const badge = $('#tabBadge');
|
||||||
const r = _laixinUnread;
|
const r = DEMO ? { ok: true, unread: 2, unreadLetters: 1, unreadReplies: 1 } : _laixinUnread; // 示例模式:圈 2
|
||||||
if (state.pregEmpty || !r || r.ok === false || !(Number(r.unread) > 0)) {
|
if (state.pregEmpty || !r || r.ok === false || !(Number(r.unread) > 0)) {
|
||||||
if (badge) badge.classList.remove('show');
|
if (badge) badge.classList.remove('show');
|
||||||
hideLetterCard();
|
hideLetterCard();
|
||||||
@@ -3218,6 +3230,13 @@
|
|||||||
if (pg.result.due) { const d = parseDay(pg.result.due); if (d) state.due = d; }
|
if (pg.result.due) { const d = parseDay(pg.result.due); if (d) state.due = d; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (DEMO) { // 示例模式:固定孕 29 周 0 天,预产期 = 今天 + (280 - 203) 天
|
||||||
|
state.postpartum = false; state.pregEmpty = false;
|
||||||
|
state.week = DEMO_WEEK; state.day = 0;
|
||||||
|
const t = new Date(); t.setHours(0, 0, 0, 0);
|
||||||
|
state.due = new Date(t.getTime() + (TERM - DEMO_WEEK * 7) * DAY_MS);
|
||||||
|
if (!state.babyName) state.babyName = '小汤圆';
|
||||||
|
}
|
||||||
// 统一回刷依赖这些 state 的展示
|
// 统一回刷依赖这些 state 的展示
|
||||||
syncPregnancy();
|
syncPregnancy();
|
||||||
if (plHook) setTimeout(plHook, 0); // 「此刻」按孕周重拉(setTimeout:等下面 syncStaticDates 把 #calNext 算好)
|
if (plHook) setTimeout(plHook, 0); // 「此刻」按孕周重拉(setTimeout:等下面 syncStaticDates 把 #calNext 算好)
|
||||||
@@ -4781,7 +4800,21 @@
|
|||||||
⚠️ 模块显隐只有 fpRender 一个 owner(原来 syncPregnancy 也直接改 display,会撞竞态)。 */
|
⚠️ 模块显隐只有 fpRender 一个 owner(原来 syncPregnancy 也直接改 display,会撞竞态)。 */
|
||||||
let _fpMode = 'pending'; // pending(加载中) | rows | guide | hide
|
let _fpMode = 'pending'; // pending(加载中) | rows | guide | hide
|
||||||
let _fpData = null; // 接口 result(events / digest / lead / unused…)
|
let _fpData = null; // 接口 result(events / digest / lead / unused…)
|
||||||
function fpApply(mode, r) { _fpMode = mode; _fpData = r || null; fpRender(); if (plHook) plHook(); }
|
function fpApply(mode, r) {
|
||||||
|
if (DEMO) { // 示例模式:固定一组脚印 + 宝宝气泡(不再追加下面 fpRender 里的预览示例行)
|
||||||
|
mode = 'rows';
|
||||||
|
r = {
|
||||||
|
events: [
|
||||||
|
{ at: '08:10', label: '称体重 58.2 kg,本周 +0.3 kg' },
|
||||||
|
{ at: '09:20', label: '数胎动,宝宝动了 12 次' },
|
||||||
|
{ at: '12:40', label: '查了「孕期能不能吃」:杨梅' },
|
||||||
|
{ at: '15:05', label: '记一次血糖 5.6 mmol/L(餐后 2 小时)' },
|
||||||
|
],
|
||||||
|
digest: { text: '妈妈今天好认真呀!我动了 12 下,你都数到啦~下午记得多喝点水,晚上我们一起听故事。' },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
_fpMode = mode; _fpData = r || null; fpRender(); if (plHook) plHook();
|
||||||
|
}
|
||||||
function fpRender() {
|
function fpRender() {
|
||||||
const tl = document.querySelector('.today-line'), steps = $('#tlSteps'), guide = $('#tlGuide');
|
const tl = document.querySelector('.today-line'), steps = $('#tlSteps'), guide = $('#tlGuide');
|
||||||
const _cd = $('#fpCalD');
|
const _cd = $('#fpCalD');
|
||||||
@@ -4826,7 +4859,7 @@
|
|||||||
/* ⚠️ 示例脚印(2026-10-03 用户:「多放两个脚印示例,数胎动、数宫缩、称体重」)——**只在预览环境**
|
/* ⚠️ 示例脚印(2026-10-03 用户:「多放两个脚印示例,数胎动、数宫缩、称体重」)——**只在预览环境**
|
||||||
(路径含 mama-box-preview,或 hash 带 fpdemo=1)追加,用来看多条时的排版;正式版不会出现,不冒充真记录。
|
(路径含 mama-box-preview,或 hash 带 fpdemo=1)追加,用来看多条时的排版;正式版不会出现,不冒充真记录。
|
||||||
确认样式后整段删掉即可。 */
|
确认样式后整段删掉即可。 */
|
||||||
if (/mama-box-preview/.test(location.pathname) || hashParam('fpdemo') === '1') {
|
if (!DEMO && (/mama-box-preview/.test(location.pathname) || hashParam('fpdemo') === '1')) {
|
||||||
rows.push(
|
rows.push(
|
||||||
{ at: '09:20', label: '数胎动,宝宝动了 12 次', detail: '', app: '' },
|
{ at: '09:20', label: '数胎动,宝宝动了 12 次', detail: '', app: '' },
|
||||||
{ at: '11:05', label: '数宫缩 3 次,间隔约 8 分钟', detail: '', app: '' },
|
{ at: '11:05', label: '数宫缩 3 次,间隔约 8 分钟', detail: '', app: '' },
|
||||||
@@ -5159,6 +5192,7 @@
|
|||||||
return fetch(DOU_API + '/dou/summary', { headers: { Authorization: 'Bearer ' + tok } })
|
return fetch(DOU_API + '/dou/summary', { headers: { Authorization: 'Bearer ' + tok } })
|
||||||
.then(function (r) { if (r.status === 401) douToken = ''; return r.ok ? r.json() : null; });
|
.then(function (r) { if (r.status === 401) douToken = ''; return r.ok ? r.json() : null; });
|
||||||
}).then(function (sum) {
|
}).then(function (sum) {
|
||||||
|
if (DEMO) sum = Object.assign({}, sum || {}, { balance: 2000 }); // 示例模式:兜豆默认 2000
|
||||||
if (!sum || typeof sum.balance !== 'number') return;
|
if (!sum || typeof sum.balance !== 'number') return;
|
||||||
return dropP.then(function (d) {
|
return dropP.then(function (d) {
|
||||||
const now = d && d.server_time ? new Date(d.server_time).getTime() : Date.now();
|
const now = d && d.server_time ? new Date(d.server_time).getTime() : Date.now();
|
||||||
|
|||||||
Reference in New Issue
Block a user