Commit Graph

104 Commits

Author SHA1 Message Date
555012f248 feat(盲盒): 价值感改造一期前端 —— 待解锁任务 / 宝宝周记 / 集齐奖励 / 下周预告 (v26100107)
- 待解锁:错过的周 + 三个工具任务(进度、去完成跳应用、解锁按钮),卡册格子 🔒
- 翻卡层加「宝宝周记」;卡册点开带周记与宝宝的话
- 卡册顶部集齐奖励:三段 + 全集,差 N 张 / 待发放 / 已发放 / 填收货信息
- 集齐庆祝弹层 + 收货信息表单(POST /blindbox/claim)
- 本周已开时显示下周卡片剪影 + 倒计时;横幅优先提示可解锁 / 离 XX 大奖还差 N 张

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 03:15:16 +00:00
ec87d36db2 fix(首页): 按下「孕期体重」等工具卡时卡片被撑长 (v26100106)
.bento .mini-card>*:not(.mc-art) 把点击时插入的涟漪 .rp 也改成 position:relative,
涟漪(卡宽 2.1 倍的圆)变成占位元素,flex 列布局的体重卡从 232px 撑到 ~590px。排除 .rp。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 02:47:28 +00:00
1fa565ff2f fix(首页): 禁止双指缩放和双击放大,页面固定 (v26100105)
viewport 加 user-scalable=no / maximum-scale=1;iOS 微信忽略该设置,
JS 再拦 gesture 事件与多指 touchmove;html 也加 touch-action:manipulation

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 02:40:34 +00:00
15dabcea5f style(首页): 孕期小知识字号放大,正文 14px、小卡 13px (v26100104)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 02:36:23 +00:00
9013a84dea fix(首页): 删除妈妈的树洞 / 预览页不再自动跳上次应用 / 「我的」加盲盒卡册常驻入口 (v26100103)
- 妈妈的树洞整块删除(HTML/CSS/JS),需要恢复看 git 历史
- 预览页 /mama-box-preview/ 跳过冷启动恢复上次应用,避免一打开链接就跳到孕检日历
- 「我的」设置与服务里加「我的孕期卡册 N/37」,与首页横幅同一入口;未建档/未到孕周时隐藏

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 02:21:09 +00:00
70c9786f15 feat(首页): 此刻卡换应用 logo / 树洞星夜版 / 孕期小知识带孕周并压缩 (v26100102)
- 此刻:今日三项与动态的图标换成对应应用的 logo(取 App 表 logo,后台换即生效);
  消消乐、盲盒用本站同风格 logo(assets/img/429ffcba0d6e.svg、b0087c3c012a.svg)
- 妈妈的树洞重做为星夜版:深夜天幕 + 剪影树 + 旋转发光的漩涡树洞;每条心事化成天上一颗星(位置按时间戳固定);
  扔进去时字逐个被吸进漩涡、洞口爆亮、新星射上天空;整块比旧版更矮。心事仍只存本机,热线兜底不变
- 孕期小知识:标题改「孕 N 周 · 今日孕期小知识」,右侧「本周第 N 天」;今日卡与圆点收紧,四张小卡改一行横滑(点开看全文)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 02:10:13 +00:00
c414a7ff8f feat(首页): 孕期盲盒横幅 + 盲盒页(开盒动画/翻卡/卡册/概率公示)+「此刻,孕妈们在做什么」卡 (v26100101)
- 横幅:顶部大图下方,按 /blindbox 状态切换文案(可开 / 补开 / 下周倒计时 / 填预产期引导),礼盒晃动 + 扫光
- 盲盒页:开盒舞台(光芒旋转、礼盒悬浮,开启时越晃越烈→盖子飞起→白光+彩纸→3D 翻卡),闪卡镭射光;
  卡册按孕早/中/晚期分组,补发标「补」,错过的周可补开;规则与概率说明由接口下发
- 此刻卡:大数字进入视口时数上去、每分钟平滑刷新;今日三项可点进工具;匿名动态每 3 秒上翻
- 新增 14 张周卡插画(其余孕周先用本周水果占位)
- AGENTS.md §4.12 登记模拟数据例外(决策人/日期/期限 2026-12-31)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 01:44:44 +00:00
4c550882fe fix(预览): 示例数据文案缩短,避免孕检日历、体重卡折行 (v26093025)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 17:13:34 +00:00
da740ba07e feat(预览): 预览页五张工具卡填一组示例数据 (v26093024)
只在 /mama-box-preview/ 路径下生效,用于看排版效果;正式首页 /mama-box/ 不受影响,
照旧显示真实数据或「--」(AGENTS §4.2 不造假数据)。示例数据按 tool-cards 接口结构
直接喂给 applyRemoteCards:数胎动 12 次、体重 58.2kg、糖耐 10月8日、估重约 1250g、宫缩间隔 5分20秒。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 17:13:01 +00:00
555befc08b style(首页工具卡): 水印图标整体缩小约 20% (v26093023)
透明度、角度、右下角出血的摆法不变,只按比例缩小尺寸和出血量。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 17:09:35 +00:00
53b208e3a5 style(首页工具卡): 图标改成白色半透明水印,降低视觉干扰 (v26093022)
用户反馈五个彩色图标抢眼、满屏都是图标。图标只作装饰,统一改为:
- 白色单色 SVG(彩色细节改用镂空),28% 透明度;
- 放大并转 -12°,斜压在卡片右下角、出血到卡边外,退成卡面底纹;
- 孕期体重卡的秤也改为右下角水印,标题和数字居中;文字层统一压在水印之上。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 17:06:48 +00:00
a7e71fda2d feat(首页): 删掉孕期每日小打卡;工具卡图标只留 LOGO 里的图形并改矢量 (v26093021)
- 删除首页「孕期每日小打卡」模块:HTML、.daily-check/.dc-* 样式、renderDaily 及产后收起逻辑、
  三张专用图标。工具区重新成为首页第一块(首块间距规则本就按 :first-child 走)。
- 五张工具卡图标去掉 LOGO 外面的圆角方块 / 圆环底,只留里面的图形,全部改成 SVG:
  数胎动小脚丫、胎儿估重表盘、数宫缩波形直接取自工具页原 SVG;
  孕期体重(原图 128px webp)、孕检日历(原图 100px png)原图太小放大发糊,照原图配色重画为矢量。
- 图标位置微调,避开「记录」按钮和标题。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 17:00:21 +00:00
d164688743 feat(首页工具卡): 图标换成各工具页左上角的 LOGO (v26093020)
- 五张卡的扁平图标换成点进去那个工具页左上角的 LOGO 原图(透明 PNG):
  数胎动 .brand-logo、孕期体重 img.brand-logo、孕检日历 .hero-brand i、胎儿估重 .lg、数宫缩 svg.brand-logo。
- 孕检日历原图四角有锯齿缺口,补成连续圆角。
- LOGO 不再出血到卡边外,统一离右下角约 10px、挂同一档投影;尺寸按卡片空间重新摆放,
  避开「记录」按钮和标题。卡片底色、版式、跳转、数据回填不变。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:50:21 +00:00
37bdfa6f24 feat(首页工具卡): 图标改扁平化,卡底色跟随各工具页色系 (v26093019)
- 五个图标(小脚丫 / 体重秤 / 台历 / 秤盘小豆宝宝 / 秒表)重画为扁平 SVG:白色 + 同色系实色块,
  去掉渐变、阴影、高光和 3D 大眼睛;去掉插画的 drop-shadow。
- 卡底色改成点进去的工具页同色系、稍深一档:数胎动陶土橙、孕期体重珊瑚粉、孕检日历草绿、
  胎儿估重雾蓝、数宫缩薰衣草紫(取自各页 theme-color / 主色,见 CSS 注释)。
- 「记录」按钮字色跟数胎动卡改成陶土橙。版式、跳转、数据回填不变。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:33:42 +00:00
4a7eb92864 feat(首页工具卡): 五张卡按参考图改版——糖果色底 + 白字 + 3D 大眼萌物插画 (v26093018)
- 数胎动 / 孕期体重 / 孕检日历 / 胎儿估重 / 数宫缩:饱和渐变底(蓝 / 粉 / 绿 / 紫 / 蓝紫)+ 白色粗标题,
  插画换成自画 SVG 萌物(小脚丫 / 体重秤 / 台历 / 秤盘小豆宝宝 / 秒表),立体光泽、黑色大眼珠带高光。
- 只换皮:高度账、排布、data-mini 跳转、各 id 数据回填不变;「更多工具」出口保持灰米。
- 「记录」按钮改白底蓝字并压在插画上;告警态在彩色底上改亮黄字(原 --alert 红看不清)。
- 数宫缩卡原曲线插画 72f41378ef8e.png 已无引用,删除;其余旧 PNG 仍被「每日小打卡」使用,保留。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:23:36 +00:00
c73a1419ec feat(首页头图): 孕25周换母婴作图 v7 GIF——改回侧身闭眼睡、正脸可见 (v26093017)
- 用户否了 v6 的背对造型,素材换 v7:回到 v5 姿势(侧身、闭眼睡、小手在嘴边),画风稍卡通、脐带更清晰。
- 构图和囊位置同 v6,接入方式和摆位数全部沿用(静帧 .88 铺底 + GIF 截 450×450 整高块叠加)。
  v7 宝宝动作实测离截块中心最远 ≈168px < 遮罩实心半径 180px;首帧和背景对齐误差 ≈3.5(GIF 抖动噪点级)。
- 底色兜底 #dc8569(=新图左缘色)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:16:10 +00:00
8c25d5fc74 feat(首页头图): 孕25周换母婴作图 v6 GIF——宝宝背对镜头、脐带更明显 (v26093016)
- 素材换母婴作图 v6(替代 v5 的 mp4):卡通动漫风宝宝背对镜头不露脸,脐带从囊壁右上方垂下、全程不动;
  画幅从 1280×736 变 16:9。
- 背景 = v6 静帧缩 .88、截取块中心 (656,360) 摆到 (1240,375),囊完整不裁;
  <video> 换成 <img>:原 GIF 截 450×450 整高块(含宝宝全部动作),object-fit:cover 铺满 .hero-baby,
  首帧和背景对齐误差 ≈3.7(GIF 抖动噪点级)。加载完淡入,没加载出来停在静帧。
- 宝宝不露脸了,嘴边的小气泡连同样式一起去掉;底色兜底 #df856a。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:02:41 +00:00
488989d82c feat(首页头图): 孕25周换母婴作图 v5——不规则羊水囊、去胎盘、囊壁细脐带 (v26093015)
- 素材换母婴作图 v5(替代 v4):羊水囊改不规则有机形状,去掉囊顶胎盘,
  脐带从囊壁右上方细细淡淡垂向宝宝身前、全程不动;宝宝吸手指时头部 ±15px 低头抬头。
- v5 的囊比 v4 的圆宽,背景缩放 .93→.90、囊心摆到 (1240,375),囊右缘不再被切;
  叠加视频以囊心 (661,381) 截 660×660→400×400,54KB;.hero-baby 摆位按新几何重算,
  首帧和背景对齐误差 ≈2.4(压缩噪点级)。嘴边气泡起点跟着挪到新嘴位。底色兜底 #de8868。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 13:47:20 +00:00
05ce51300e feat(首页): 新增「宝宝消消乐」游戏推广入口 (v26093014)
- 工具托盘正下方一张糖果色大卡:「新游戏」角标 + 名字 + 玩法一句话 + 跳动的「开始玩」,
  右侧 3×3 待产用品小棋盘循环演示三连消除,角上星星闪烁。
- 点击走 jumpApp() 跳 https://beian3.douba.top/myxx/index.html(游戏由「母婴消消」维护,
  不需要身份参数,多带无害);GAME_URL 为空时整块隐藏。
- 动效在 prefers-reduced-motion 下关闭;页面隐藏时棋盘动画暂停。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 13:29:07 +00:00
9a1ad1fb93 feat(首页): 新增「孕期小知识」和「妈妈的树洞」两个模块 (v26093013)
孕期小知识(工具区下方):
- 按真实孕周 + 天数显示「今日小知识」大卡,右上角本周水果 emoji 缓慢浮动;
  底部 7 个圆点 = 本周第 1–7 天,今天高亮呼吸、以前可回看、以后锁着(明天见)。
- 四张马卡龙小卡:宝宝这周(带大小比喻)/ 妈妈身体 / 吃点什么 / 这周留心,进入视口依次浮上来。
- 内容 assets/data/preg-tips.json:孕 4–40 周,每周 4 句 + 每天 1 条,共 259 条,按需 fetch。
- 只在 /pregnancy 确认真实孕周后显示(pregEmpty === false 且非产后),不拿默认孕周配内容。

妈妈的树洞(今日脚印下方):
- 心事只存本机 localStorage(mmbox.treehole.v1,最多 200 条),不上传;按用户选定不做回应,
  只有纸团飞进树洞 + 树冠晃动 + 「已收好」动画;可展开「我的心事」回看、删除。
- 出现明显轻生字眼时,在「已收好」下加一行 12356 心理援助热线(兜底);卡底常驻一行求助提示。

动效在 prefers-reduced-motion 下关闭。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 13:23:00 +00:00
9ea9f3c50f feat(首页): 新增「孕期每日小打卡」——按钮带状态小标签 (v26093012)
- 首页正文最上面加一块「孕期每日小打卡」:数胎动 / 称体重 / 产检三行,
  每行右侧一枚状态标签,点整行进对应应用(复用 data-mini + MINI_APP_MAP + jumpApp)。
- 标签来自工具卡同一个接口(applyRemoteCards → renderDaily),不另打请求:
  今日已记 N 次 / 今天还没记;今日已称 / 今天还没称(按接口 day 判今天);
  距 NT 还有 7 天 / 今天糖耐检查 / 待补记 / 看产检安排。
  抬头右端「今日已完成 x/2」(只数胎动、体重两件每日事)。
- 接口没回、访客态保留中性提示,不写数字;产后态整块收起。
- 首块间距规则改为 .home-body>:first-child,工具托盘并入块间 16px。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 13:10:04 +00:00
62b23af323 feat(首页头图): 孕25周换 v4 用户确认版——胎盘在囊顶、胎发、颜色回调 (v26093011)
- 素材换母婴作图 v4(用户已在作图会话确认画面):颜色比 v3 深一档(囊外 #DB8263~#E38E6E),
  胎盘移到囊顶、脐带从上方细细垂下、接肚子端被腿挡住;头部重画带细软胎发;浮动 ≤7px。
- 背景、囊视频按同一流程重做(囊心 667,368),视频 66KB;底色兜底改 #de8968。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 13:04:51 +00:00
bca92312f8 feat(首页头图): 孕25周宝宝换 Q 版卡通、整体提亮 (v26093010)
- 素材换母婴作图 v3:Q 版卡通宝宝(圆脸、闭眼笑、粉嫩,无写实纹理),浅暖桃底;
  脐带/胎盘固定、无孕肚、镜头固定、正倒放首尾同帧等 v2 要求保留,整体晃动已防抖。
- 背景、囊视频按同一流程重做(囊心 664,368),视频 74KB。
- 背景变浅,左侧压字暖色层 .14→.20,底色兜底改 #eaa485。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 10:33:19 +00:00
983191a752 feat(首页头图): 换母婴作图 v2 孕25周视频——脐带连囊壁胎盘、镜头固定、暖底 (v26093009)
- 素材 yun25w-loop.mp4 v2:胎盘在囊内壁左下,脐带全程固定,接肚子那头被腿挡住;
  无孕肚;镜头固定;本身正放+倒放首尾同帧,直接 loop。
- 背景 = 视频第 1 帧缩 .93、囊心摆 (1250,375),左/上/下按边缘色补齐并宽羽化(455d2517fafd.jpg)。
- 视频只截羊水囊 660×660 → 400×400(f20175ae1170.mp4,95KB),宽羽化遮罩叠在背景同位置;
  与背景同源同帧,边缘无缝。去掉单独的静态囊图层。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 10:10:45 +00:00
d5ee5c8654 fix(首页头图): 羊水囊边缘和外部背景柔和过渡,去掉割裂感 (v26093008)
- 静态囊图边缘改为 r232→300 平滑羽化,底图在囊外加一圈很柔的暖光,把囊壁化进底色。
- 去掉 .hero-sac 的 CSS 椭圆遮罩(横竖半径不同,把囊壁左右削掉、上下留着,是割裂的主因)。
- 视频遮罩放宽为 74%→96%,和静态囊壁柔和叠合,镜头推近时也不出边。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 09:30:17 +00:00
9bb3c5a533 feat(首页头图): 背景改暖桃橙,和羊水同色调顺下来 (v26093007)
- 头图底子从暗紫玫瑰改成取自囊内羊水的暖桃橙渐变,光晕和散景光点同步改暖、调淡;
  左侧天数卡那块也是同一色调。压字渐变改成很淡的暖色(.14)。
- 静态囊图按新底子重新合成(视频不变)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 09:23:51 +00:00
f21af1e25b feat(首页头图): 羊水囊不再动,改成囊里的宝宝自己动(吸手指、蹬腿) (v26093006)
- 去掉整层浮动和整图「胎动」扭动(用户:球不要动,要里面的宝宝动)。
- 母婴作图的 25w.mp4 取前 10s,只截囊内 600×600,正放 + 倒放拼成 20s 无缝循环,
  400×400 / 288KB(assets/video/b6476cfce328.mp4),遮罩只露囊内,叠在静态囊图上。
- 静态囊图换成视频第 1 帧(70812d56ec5f.jpg),视频淡入时画面对得上;放不了就停在静态图。
- 微信 iOS 等 WeixinJSBridgeReady 再 play();页面隐藏时暂停;减少动态效果下不放。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 09:20:13 +00:00
b69a02e570 chore(首页): 先关掉顶部「未获取到微信身份」黄色提示条 (v26093005)
产品要求先不展示。只在 showIdNotice() 入口加开关 ID_NOTICE_ENABLED=false,
判定逻辑、标记、重试按钮都保留;没身份时改为 console.warn,排查不受影响。
恢复展示:把开关改回 true。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 09:16:30 +00:00
d2c04194fa feat(首页头图): 宝宝单独成层,加「胎动」——时不时扭一下、蹬一下 (v26093004)
- 头图拆两层:散景光点底子 7dfe5be4e828.jpg(背景,不动)+ 羊水囊宝宝 bc6367fcad38.jpg
  (从同一张合成图原样切出,按橙区高 H 换算摆回原位,径向遮罩羽化边缘)。
- 外壳慢浮 6s;图片「胎动」7.3s 一轮:大半时间静止,突然小幅转动 + 位移,随后再轻蹬一下。
  两个周期错开,不像固定节拍。嘴边气泡挂在同一层,跟着宝宝一起动。
- prefers-reduced-motion 下全部停住。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 09:14:27 +00:00
a0119760ed feat(首页头图): 去掉孕肚、宝宝缩小、左侧提亮,四周改散景光点 (v26093003)
- 孕肚弧线太写实(用户反馈有巨物感),只从原图抠出羊水囊 + 宝宝,缩到约 8 成放在右侧。
- 底子按原图色调重铺紫玫瑰渐变,比上一版亮;囊后一圈柔和暖光晕保留包裹感,周围散景光点。
- 左侧压字渐变从 .5 降到 .22,明显变浅。
- 嘴边气泡锚点按新图重新定位(右 0.408H、顶 0.491H)。
- 新图 assets/img/ab3c7e20811a.jpg(1560×750,59KB),替换上一版预览图 4cd9891cec31.jpg。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 08:01:18 +00:00
44e20cb0c3 feat(首页头图): 孕25周整图铺成头图背景,左侧顺原图色调延伸 (v26093002)
- 橙色渐变底 + 右上角圆形宝宝图 → 整张孕25周图(孕肚弧线 + 羊水囊宝宝)作 .home-hero 背景,
  右对齐、高度=头图高;左侧按原图左缘色调横向补出暗粉紫,屏宽 ≤520 都铺得满。
  叠一层左深右透渐变压住孕肚亮边,保证左侧白字可读。头图高度 250 与底部椭圆弧不变。
- 去掉右上角圆形图(上一版预览的 dd05df88ab23.png)和三团橙色光斑;
  嘴边气泡改挂在零尺寸锚点上,按背景图里嘴的位置定位,不再整体浮动。
- 新图 assets/img/4cd9891cec31.jpg(1560×750,84KB)。旧正式图 b00c707f7b1f.png 保留。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 07:45:05 +00:00
12fcc037dc feat(首页头图): 顶部宝宝主图换成孕25周图 (v26093001)
原图 25w-original.png(1536x864 横图,来自母婴作图)以羊水囊为中心裁 760x760 正方形,
套圆形透明遮罩后缩到 379x379,与旧图同尺寸(显示宽 189.5px 的 2 倍图),头图布局账不变。
文件名按规则取内容 md5 前 12 位;旧图 b00c707f7b1f.png 保留,避免缓存着旧 HTML 的用户图裂。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 01:48:41 +00:00
d0fcc1e988 fix(今日脚印): 判据改用 used —— 「用过但没留下记录」不再错显示「还没有脚印」(v26092219)
接口方 2026-09-23 排查回复纠正了我方一处真实口径错误(原话:lead 只在当天 used 为空时才有值;
你们 H5 是用 results 是否为空判断的,建议改用 used 是否为空;used 非空但没 results 时显示应用名列表即可)。

我方原来的逻辑:`events.length ? rows : guide` —— events 来自 results,于是「今天用过应用但没留下记录」
的日子会走引导,页面上就出现「还没有脚印」与气泡里那句「今天用了 1 个工具,还没有留下具体记录。」
自相矛盾(用户截图里正是这个现象)。

改动:
- 分支判据改为 `used`:used 空 → 引导(含上游查无此人);used 非空 → 时间轴。
- 时间轴补「用过但没留下记录」的应用行:按 first_at(收口成北京 HH:MM 的 used[].at)出一行
  「13:37 孕检日历」,与真实记录行按时间合并排序、最多 8 行。
- 引导芯片改用上游带回的 `url`(2026-09-23 起它只推我们已上架的应用、并带 url,
  接口方原话「有 url 就直接跳,不用再对 App 表」);App 表只作兜底,identifier 仍用于 last_app 上报。

本地验证(桩后端五种返回):rows→事件行;**usedonly→应用行 09:10 数胎动 / 13:37 孕检日历,且不再出现引导**;
guide→上游 lead + 可点芯片;degraded / 接口 500→整块不显示。无 JS 异常。
2026-09-23 03:36:57 +08:00
bef4b02040 chore(mama-box): 补 v26092218 的 VER bump —— 上一提交漏了 js/app.js,导致 V 与 VER 不同步 2026-09-23 01:02:59 +08:00
77fb75796d feat(今日脚印): AI 气泡改说真话 —— 文案取接口 digest,引导取 lead+unused (v26092217)
配合 box_app 的 B 方案(今日脚印换源到数胎动用户面 /user/daily/footprint)。
接口现在一次给全:事件 + digest(气泡文案)+ lead/unused(引导),于是首页不用再编数据。

- **AI 气泡**:文案由 fpRender() 从 `digest.text` 写入(真实文案,宝宝口气的 AI 句子),
  `digest.warn` 为真时整句标红(.ai-warn)。取不到 digest 就整颗气泡收起。
  ⚠️ index.html 里那句写死的「妈妈,今天你数到我动了 3 次…」已删除 —— 它对任何用户都显示,
     而且把 today 的假次数和真实时间轴摆在同一屏。现在这条规则是 **data-driven**(有文案才显示),
     不再靠"有没有事件"猜。
- **引导占位**:文案用接口的 `lead`(如「宝妈,先从这几件事记起吧。」),应用用 `unused[]` ——
  能对上 App 表的渲染成**可点芯片**(点击 jumpApp 进该应用),对不上(如不在 App 表的宝宝来信)只显示名字。
- **三种显隐模式**(fpRender 是模块显隐的唯一 owner):
    rows  拿到事件 → 时间轴;guide 一条都没有(上游查无此人 / kind=fallback 今天没活动 /
    只浏览没产出记录)→ 引导;hide 接口读不到 / degraded → 整块不显示。
  原来「有档案但今天没记」的「还没有足迹」空态并入 guide(上游的 lead + 推荐应用比一句空态有用)。
- 删掉不再使用的 emptyFootprintStep()。

本地验证(桩后端,五种返回 × 资料延迟):rows → 时间轴 + 气泡显示**真实 digest 文案**;
guide → 上游 lead + 芯片(数胎动/胎儿估重可点、宝宝来信纯文本);linked=false → 引导兜底标题;
degraded / 接口 500 → 整块不显示。全程无 JS 异常。
2026-09-23 00:19:00 +08:00
0f72863d10 fix(今日脚印): 未建档也显示引导 —— 去掉 pregEmpty 硬门槛 (v26092216)
产品口径(2026-09-22):未建档(没填孕产期)不再整块隐藏今日脚印,照接口结论显示 ——
无档案 → 引导占位(「还没有你的脚印 / 去「数胎动」记一笔…」)、有档案 → 事件或空态、
读不到 → 不显示。于是新用户首页也能看到"去记一笔"的引导。

- fpRender():删掉 `state.pregEmpty || state.postpartum` 那道硬门槛(原来未建档/产后一律不显示)。
- applyRemoteFootprint():删掉 `if (state.pregEmpty) { fpApply('hide') }` 那一跳。
- **AI 气泡的条件反而收紧**:只有「**已建档** + 拿到真实事件」才显示 —— 气泡里的次数是写死的
  演示文案(「今天你数到我动了 3 次」),未建档时页面本来满屏占位,再挂一句假次数就是在说假话;
  也避免出现「还没有足迹」与「动了 3 次」同屏矛盾。

本地全矩阵验证(桩后端 × 0.4s 资料延迟;四种接口结论 × 已建档/未建档):
  已建档 rows→模块+事件+气泡 / empty→「还没有足迹」无气泡 / guide→引导无气泡 / degraded→隐藏
  未建档 rows→模块+事件+**无气泡** / empty→「还没有足迹」无气泡 / **guide→引导无气泡** / degraded→隐藏
全程无 JS 异常。
2026-09-23 00:05:18 +08:00
d7410500cf fix(加载顺序): 远程数据按依赖顺序取 —— 身份 → 资料(含上游同步)→ 应用数据 (v26092215)
产品口径:上游有档案且有预产期时,页面应按 ①身份(openid/unionid/phone) → ②用户资料
(box_app /profile,会从上游同步预产期/小名/宝宝名)→ ③应用数据(今日足迹等)这个顺序加载。

- applyRemoteProfile() 改为**返回 Promise**(访客分支与已跑过也返回已决议的 Promise),
  init() 里改为 `Promise.race([applyRemoteProfile(), 10s 超时]).then(() => { 应用数据 })`:
  显式等 ② 落地再取 ③(资料库/记录/内容、今日脚印、首页工具卡、来信未读)。
  ⚠️ 加兜底超时的原因:② 万一挂住(上游不响应),③ 也必须照常发出,别让首页空等。
  ⚠️ 原来这五个 fetch 一起发、谁先回来谁写 DOM —— 竞态都是这么来的(今日脚印整块显隐被
     profile 回来后又翻回去;来信提示的红点与卡各写一份判据)。顺序化后两者都收敛。

为什么这条重要(与今日脚印的显隐口径直接相关):上游有预产期时,第 ② 步会把预产期同步进来
(方案 A:读时同步覆盖),state.pregEmpty 因此为 false → 今日脚印不会被「未建档」门槛挡住。
即「上游有档案且有预产期」与「mama-box 未建档」不会同时成立(除非第 ② 步失败/超时)。

本地验证(桩后端,profile 故意延迟 0.6s 以观察顺序):
  已建档(上游有预产期)→ 请求顺序 profile/pregnancy 先、footprint/tool-cards/laixin 后,
  今日脚印整块显示并渲染 2 条真实事件;未建档 → 同样先取资料,今日脚印按口径隐藏。均无 JS 异常。
2026-09-22 23:59:57 +08:00
dedce247e9 fix(今日脚印): 读不到不编数据 —— 四种显隐模式收口到 fpRender(唯一 owner)(v26092214)
产品口径(2026-09-22):
  · **无档案**(上游查无此人 / 本地未关联)→ 显示引导占位(#tlGuide:「还没有你的脚印 /
    去「数胎动」记一笔,这里就会长出你今天的脚印」)
  · **有档案** → 必须从接口读;**读不到就不显示**(整块 .today-line 收起),不再回退演示行

改动:
- index.html:删掉 4 条**写死的演示行**(胎动 12 次 / 体重 58.2kg / 产检提醒 / 睡前散步 20 分钟)——
  它们只在「接口读不到」时露出来,等于上游一抖页面就开始编数据。换成一行中性「正在获取今天的脚印…」
  +新增 #tlGuide 引导块,并在注释里写明四种模式与判定。
- 新增 fpApply()/fpRender():模块显隐**只有一个 owner**(pending / rows / empty / guide / hide,
  外加「未建档 / 产后」硬门槛优先于接口结论)。
  ⚠️ 之前 syncPregnancy 也直接改 .today-line 的 display,两个 owner 撞出竞态 —— 实测「有档案 +
  上游故障(degraded)」会被 profile 回来后重新显示出来(该收起的没收起)。现在 syncPregnancy 两处
  都只调 fpRender()。
- 没有真实事件时给 .today-line 挂 .no-ai,AI 气泡一并收起:那句「今天你数到我动了 3 次」是写死的
  演示文案,今天没记 / 未关联 / 读不到时显示它就是在说假话。拿到真实事件时才显示气泡
  (把那个数字接到真实次数属另一件事,等产品定文案)。

本地验证(桩后端,五种模式各跑一遍,并把 profile 延迟 1.5s 以复现前面那个竞态):
  rows → 模块显示 + 真实事件 + 气泡显示;empty → 「还没有足迹」+ 无气泡;
  guide → 引导块显示 + 时间轴收起 + 无气泡;degraded → **整块不显示**;
  fail(接口 500) → **整块不显示**;未建档 → 整块不显示。全程无 JS 异常。
2026-09-22 23:48:44 +08:00
d1fff2c248 feat(首页卡): 5 张工具卡改读 box_app 封装的真实数据(接口优先、失败回退本地)(v26092213)
数据源:GET /api/mp/public/mama-box/tool-cards(box_app 封装数胎动平台的 app-cards,
H5 不直连上游、不持有 token)。此前这 5 张卡各自为政:数胎动读本地 records(mama-box 早就不自记
胎动,常年 0)、体重恒 `--`、孕检日历本地按预产期推算、数宫缩显本地孕周、胎儿估重静态文案。

- 新增 applyRemoteCards() / applyRemoteCardsFetch():按 `slot` 落 DOM
  (kick→#kickTodayHome、fweight/curve→.mc-sub、weight→#weightVal、cal→#calNext);
  上游字符串一律 textContent,**绝不用 innerHTML**(同 footprint 的写法)。
- 优先级 = **接口优先、失败回退本地**。两个来源并行返回、先后不定,所以用 cardsOwned 旗子定序,
  而不是赌顺序:#kickTodayHome 让位给卡片接口;#calNext 让位(卡片接口与孕检日历应用同一套排期,
  还支持"改过预约日以预约日为准");curve 卡写值后**摘掉 data-wk**,否则 syncStaticDates 的
  [data-wk] 循环会把它覆盖回孕周。
- 卡片点击与名称仍以 App 表为准(MINI_APP_MAP + APP_BY_ID,AGENTS §4.4);接口的 appId/path 仅诊断
  (上游 app_id 是 URL slug,与 identifier 刻意不同)。
- 版式:固定高度 bento 只留一个状态位 → `.bento .mc-sub` 单行省略;数宫缩那列文本宽仅 ≈73px,
  有数据时改显紧凑 value(「4分12秒」,否则上游 text「最近间隔 4分12秒」会被省略掉数字);
  孕检日历放宽到两行(过期未记时上游给「待补记 9月26日」,一行会把日期省掉)。
- 新增 `.mc-extra`:只有 kick / weight 两张有富余竖空间,用来放上游 sub
  (「2 段 · 最近 13:00」/「较孕前 +11.7 kg · 9月22日」);fweight/cal/curve 是固定高度、放不下第二行,
  注释写明要加得先重排 .bento 那笔高度账(158+10+64=232)。
- warn → `.is-warn` 标红(新增 --alert token):胎动偏低 / 宫缩达临产阈值 / 产检过期未记。
- 体重卡:有值时写 value + 小字 unit(不会出现「-- kg」),无值保持中性 `--`。

本地验证(无头浏览器 + 桩后端):接口成功 → kick=12(覆盖本地 records 的 3)、weight=58.7kg +
「较孕前…」、cal=9月26日、curve=4分12秒、kick 标红、无 JS 异常;接口 ok=false → 全部回退本地
(kick=3 / weight=-- / curve 恢复 data-wk),页面不变空。
2026-09-22 23:01:51 +08:00
06f76b4df4 feat(身份): 同源身份缓存兜底 —— H5「返回首页」裸跳不再丢 openid/unionid (v26092212)
问题(实测孕检日历,第三方应用):页面里的「返回首页」是**页面自己发起的同源跳转**,
宿主的 <web-view src> 属性没变 → _applyIdentity() 不触发 → mama-box 的 URL 上没有身份
→ 只能显示「身份不完整」;而 retryIdentity() 只是 location.replace(自己 + 缓存戳),
同一条没有身份的 URL 重载,**永远救不回来**。而且该应用会主动把 openid/phone 从自己的
URL 上擦掉(防分享链接冒名,理由见它的注释)—— 所以那一跳**不可能**带上身份。

做法(方案已与产品确认;在架 12 个应用实测全在 mp.yizhezhe.com,同源共享 storage):
- js/wx-auth.js:新增 identity()(URL 优先 → 同源 sessionStorage 兜底,命中缓存打一条
  日志便于排查)、rememberIdentity()、goHome();并在**库载入时自动采一次**身份 ——
  接入方无需改代码,只要引了本库(孕检日历就引了,且它是绝对地址 + ETag 兜底,
  我们改库即可自动生效),宿主注入过的身份就会被存下来。
- js/app.js:hashParam() 对 openid/unionid 两键加同样的缓存回落(其余参数不受影响)。

三条纪律(写在 wx-auth.js 顶部,改前先读):
① URL 永远权威:URL 带 openid 就无条件覆盖缓存(否则切号/换人会串号);
② 只在本 origin 有效:外链应用读不到,所以「跳转要带身份」的规范不能删,缓存只兜底;
③ 只存 openid/unionid(身份键),不碰 token/手机号/昵称头像。
选 sessionStorage 而非 localStorage:同一次会话内够用,且随标签页结束即失效,暴露窗口小。

验证(本地同源:/app 模拟第三方页 + /mama-box 同一 origin):
  模拟应用页自动写缓存 → 裸跳 /mama-box/ → 提示条不显示、日志出现、按缓存身份拉数据;
  回归:无缓存且无身份 → 提示条照旧显示(fail-closed 保留);URL 带身份 → 缓存被写下且不显示提示条。
2026-09-22 21:36:52 +08:00
3ab8af2bf5 fix(来信提示): 未填孕产期不显示「宝宝来信」提示 —— 卡与红点同一次判定一起收 (v26092211)
产品口径(2026-09-22):**没填孕产期(pregEmpty)就不该出现宝宝来信提示**,
显示了不合理。这条**覆盖**了代码里原先那条决定(「来信与建档是两件事,故意不看
pregEmpty」)—— 那条当时是为了修「红点有、卡没有」,方向反了,见下。

做法:把首页卡与底 tab 红点收进**唯一渲染入口** renderLetterReminder(),用同一个
判据同时决定两处(pregEmpty 是硬门槛 → 建档后看 unread > 0 → 上游降级保持现状),
并把最近一次未读结果存进 _laixinUnread,供建档状态变化时重算:
  · syncLaixinReminder():拿到结果后交给 render(不再自己 toggle 红点);
  · syncPregnancy():未建档分支与建档分支各调一次 render。
于是无论 laixin 与 /profile 谁先回来,都收敛到同一结果(时序无关)。

顺带消掉上一版残留的竞态:此前红点与卡各写一份判据 —— laixin 先回来(亮红点 + 显示卡)、
/profile 后回来(只藏卡),就得到「红点有、卡没有」。现在同源同判。
另外把已不存在的 applyLaixinReminder() 的注释引用一并改掉(js + index.html 共 3 处)。

无头浏览器 + 桩后端实测(profile 延迟 0 / 1.5 / 3s,覆盖两种返回顺序):
  未建档 unread=1 → 卡与红点**都无**(三档一致)
  已建档 unread=1 → **都有**(确认没把建档用户一起关掉)
  已建档 unread=0 → 都无
  访客(无 openid)→ 都无
2026-09-22 21:20:46 +08:00
ab8a3a5ea0 fix(占位/来信): 工具卡演示占位归中性 + 档案屏空态 + 修来信「红点有、卡没有」(v26092210)
一、占位数据(新用户实测)
- 首页工具卡:孕期体重「58.2kg」是写死的演示值(后端也确无体重数据源,
  GET /records 只给当日聚合)→ 改中性占位 '--';数胎动「今天 3 次」默认
  3 在访客态/records 失败时没人覆盖 → HTML 默认 '--'、state.kickToday 改 0。
- 孕检日历 #calNext:init 先按内置默认(预产期=今天+3月 → 孕27周)写下
  演示日期,而 pregEmpty 分支只清 [data-ga]/[data-wk] 两种钩子、**漏了它**
  (它没有这两种属性),applyRemoteProfile 又提前 return → 假日期留在首页。
  两条空态分支各补一行显式归 '--'。
- 档案屏「成长数据」:三张统计卡 + 体重曲线 + 双顶径/股骨长/腹围等测量值
  全部无接口数据源,空态(未建档/产后)整块隐藏改显示引导;#favCount 从
  写死的 18 改为按 DOM 里点亮的星标实时统计(18 与屏幕上的 6 张对不上)。
  ⚠️ 该屏真机到不了(go('archive') 无条件跳 chanjian-rili),属防御性改动。
- **明确不动**的两处真实数据,都已加注释防止再被当演示值删掉:
  · 指南区「128 份孕育资料」= 后端准备总数(按孕周陆续发放,目前上架 8 份,
    其余可扫码找小助手索要)——「数字与列表条数不符」是对的;
  · 三张卡「12.8 / 20.4 / 9.6 万妈妈已领取」= 真实领取量(手工同步的静态文案)。

二、宝宝来信「tab 红点有、首页提醒卡没有」
根因:syncPregnancy 的未建档分支里那句 hideLetterCard() 只藏卡、**不动 #tabBadge**,
而它旁边的理由(「applyLaixinReminder 里也判 pregEmpty」)是错的 —— 后者明确
故意不看 pregEmpty(来信与建档是两件事,历史上加过一版就是这个症状)。
于是 laixin 先回来(亮红点 + 显示卡)、/profile 后回来(走该分支)时,卡被藏回去、
红点留下。定时复现:profile 延迟 1.5s 必现(卡内文案已写好却带 .hide,即「先显示后被藏」);
同时返回则正常。删掉那句后 0/1.5/3s 三档都一致;未读 0 与访客态仍两者都收。
2026-09-22 21:12:19 +08:00
307f6182e4 feat(记一下/顾问码): 隐藏未实现的「今天已使用」快捷区 + 顾问二维码换真图 (v26092207)
记一下弹层:
- 日期/「今天已记 N 条」那行 + 「今天已使用」快捷区(数胎动/孕期体重/胎心记录)
  功能尚未实现、数据是写死的演示值,按要求先整体隐藏。
- 只挂 .tbd-hide,**不删 DOM**:js 里 $('#quickKick') 没有判空,且
  #kickCount / #todayCount / #noteWhen 会被回填,删掉会直接抛错。
- dedupeApps 在快捷区隐藏时跳过:否则首个可见小标题会变成没有指代对象的
  「其他孕期工具」;renderAppGrid 补写 data-toast,避免点「共 N 个」时退回
  index.html 里写死的「共 16 个」。

企业微信顾问二维码:
- 占位 svg(is-stub)换成真图 assets/img/4834fe8d686a.png。
  文件名 = 文件内容 md5 前 12 位,与该目录另外 34 张图一致(内容寻址,换码即换 URL)。
- .wx-qr 挂在元素本身、svg/img 通吃,CSS 未改;14px 圆角只裁到四角白色静默区,
  切不到码点。
2026-09-22 20:25:58 +08:00
849cf7a521 feat(孕期): 产后态不再显示「孕 42 周」,改「宝宝已出生 N 天」(v26092205)
上游 journey_stage=postpartum / 有 baby_birth_date 时,后端 /pregnancy 返回 postpartum=true
且 week=null。H5 侧补齐:

- applyRemoteProfile:**先判 postpartum 再判 empty/week==null**
  (产后返回体的 week 也是 null,落错分支会给已生产用户弹「完善孕期信息」)
- syncPregnancy:新增产后分支(文案集中在这里)
  · hero:孕周位「已出生」+ 清空紧邻的「孕周」标签 + 出生天数 / 「来到这个世界」
  · 我的孕期卡:宝宝已出生 N 天 · 记录宝宝的成长时光(进度 100%)
  · 档案页:宝宝已出生 N 天 · 孕期陪伴已结束;[data-ga]/[data-wk] 归 '--'
- 拦住 syncPregnancy 之后按 state.week 重算的链(syncStaticDates):
  week=null 会算出「看着正常但全错」的日期
- fillProfileForm:产后不再按已过的预产期回填「孕 42 周」,孕周两格留空并锁住
- renderPoster:week 为 null 时不再拼出「第 null 周档案」,退化成完整档案

⚠️ 文案(首页/孕期卡/档案页三处)如需调整只改 syncPregnancy 的产后分支
版本 v26092204 → v26092205
2026-09-22 13:37:05 +08:00
4c4c00f636 fix(档案): 保存资料失败要提示 —— 配合后端「先推上游、失败即 400 不落库」(v26092204)
后端方案 A:PUT /profile 改预产期/昵称时先推上游用户中心,推失败返回 400 且不落库。
原来这里 .then() 不看响应、.catch() 静默 —— 用户会以为保存成功,下次加载被上游值覆盖回去
("改了没生效")。现在:非 200 或网络失败都 toast 提示,且不触发 bustReload。

- §4 硬约定新增第 9 条,说明这个接口的失败语义,避免以后又把失败吞掉
- 版本 v26092203 → v26092204
2026-09-22 13:23:06 +08:00
2c55e6737e fix(宿主恢复): 返回首页时清除 last_app —— 不再冷启动被送回刚退出的应用 (v26092203)
问题(用户实测):进入 H5 应用(如孕期血糖记录)→ 退回 mama-box 首页 →
再冷启动进小程序,又被送回那个应用。记录的是「最后进入的 H5 应用」,
用户已经回到首页了,首页才是最后待的地方 → 必须清掉。

- clearLastAppOnBackHome():DELETE /api/mp/public/last-app?openid=
- 只认「这次是返回回到本页」三种情形,**不能每次加载都清**(宿主恢复会把本页当返回落点加载,
  那时清掉会毁掉刚用上的记录):
    ① bfcache 恢复 → 复用文件末尾已有的 pageshow 监听(persisted=true)
    ② 后退导致整页重载 → navigation.type === 'back_forward'(init() 里判)
    ③ 从应用页 location.href 回本页 → document.referrer 是 https://mp.yizhezhe.com/<app>/
- 宿主恢复/落点那两次加载都是 navigate + referrer 空 → 不会误清
- 版本 v26092202 → v26092203
2026-09-22 11:56:25 +08:00
79c1971cd6 feat(宿主恢复): 支持 #norestore=1 —— 小程序首页壳已决策时不再自行恢复 (v26092202)
档 3:首页壳自己读 last_app 并直接进容器页(不加载 mama-box、无首页闪屏)。
此时 mama-box 只是它留在身后的「返回落点」,必须禁止再自行恢复 —— 否则
mama-box 会在容器页底下把落点也换成目标应用,back 回不到首页。

- 收到 #norestore=1:既不跳,也先用 sessionStorage 闸门占住,
  免得后续宿主 ?t= 重载(不带该标记)时又跳一次
- 无该标记时行为不变:浏览器直访 / 首页壳取数失败回落加载时仍是兜底恢复
- 版本 v26092201 → v26092202
2026-09-22 05:19:07 +08:00
8c6b18c5e1 feat(宿主恢复): 换应用上报 last_app + 首屏恢复上次 H5 应用 (v26092201)
需求:小程序里进入某个 H5 应用后退出小程序,再次冷启动要恢复那个应用。

- jumpApp / goArchiveH5 跳转前 reportLastApp():navigator.sendBeacon 上报**净地址**
  (实时、由浏览器保证投递,不依赖微信 postMessage 的延迟批量派发)
- init() 首屏 resumeLastApp():sessionStorage 一次性闸门内 GET /api/mp/public/last-app,
  命中就带当前 openid/unionid location.replace 过去 —— 冷启动才恢复,
  同一会话切回首页 tab / 宿主 ?t= 重载都不会再跳;replace 不留 history、back 不会来回弹
- 宫格 / 工具卡 / 宝宝来信 / 孕检日历入口补 identifier,便于服务端在架校验
- 抽出 withIdentity(),jumpApp 行为不变(身份仍走 query,不追加 hash)
- 版本 v26092009 → v26092201
2026-09-22 05:11:24 +08:00
3b70f63dce fix(身份): bustReload 重载时拼回 hash —— 退出登录/首次完善资料后不再丢身份误报未获取身份 (v26092009) 2026-09-21 14:04:54 +08:00
932e42e050 fix(身份): 宿主未注入 openid 时给出可见提示 + jumpApp 带 __no_identity 标记 (v26092008)
背景(2026-09-20 线上排查):小程序首页壳拿不到 openid 时会**匿名加载**本页,
页面照常渲染但全是占位(孕周 `--`、档案查不到),而跳应用时 jumpApp 因为没有身份
就跳**裸 URL** —— 从商城返回首页加载本页时很容易被误判成「数据丢了」。
根因在小程序侧(App.vue 丢掉无 token 分支的 openid;首页壳没有像 web_view 那样的
silenceAuthNoLogin 兜底),H5 这侧先做**可见 + 可观测**两件缓解:

· 新增顶部提示条(#idNotice):仅在没有 openid 时显示,文案「未获取到微信身份,
  页面数据可能不完整」;带「重试」按钮(location.replace 换 URL 重载,重试过一次后
  文案升级为「请退出小程序后重新进入」,状态落 sessionStorage,活过那次跳转)。
  有身份加载时(applyRemoteProfile 拿到 openid)自动隐藏。
  ⚠️ 刻意不做自动轮询/自动 reload:宿主只在它自己重设 web-view src 或 onShow 时注入身份,
     页面自己刷同一 URL 并不会让身份出现,反而可能循环。
· jumpApp():一个身份都没有时显式带 `__no_identity=1` —— 目标应用能区分「宿主没注入身份」
  与「参数被平台丢了」,nginx/后端日志里也能一眼查到(排查 openid 为空的关键指纹)。

验证(本地代理 + 浏览器):访客态提示可见且默认文案正确;有 openid 时隐藏;
点重试后 URL 变 `?t=…`、提示仍在且文案升级;点宫格:无身份 → `…/?__no_identity=1`,
有身份 → `?openid=…&unionid=…`(无标记);卡片/红点/资源库 8 份/弹窗/我的页/tab 顺序
全部回归正常,errors 与 console 为空。
2026-09-20 23:08:26 +08:00