Commit Graph

26 Commits

Author SHA1 Message Date
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
31163448da style(今日脚印): 引导占位改用 AI 气泡那套语言(白气泡 + 竖线圆点),不再横跨整块 (v26092218)
用户反馈:原来那张横跨整块的白卡「放在这有点突兀」,要求按 AI 气泡的样式、用白色背景实现。

- 标记改为与 .ai-bubble **同构**:空 .ab-badge 占位(宽度 = --tl-time)+ .ab-dot + .ab-body >
  .tl-guide-bubble。于是圆点落在**同一条竖线**上,与时间轴/落款行对齐。
- 样式:白底 + 1px --line 描边 + 4px/16px 圆角 + 指向竖线的尖角。
  ⚠️ 白底必须带描边:AI 气泡靠暖渐变区分,白气泡压白底只剩阴影会糊成一片。
  ⚠️ 尖角用「旋转 45° 的小方块 + 同色描边」(纯 border 三角做不出描边)。
  ⚠️ 文案层级:lead(上游引导语)走 15px/600 主文案,下面那行提示走 12.5px 次要色,芯片左对齐。
- 行为不变(文案仍来自接口 lead,芯片仍来自 unused[] 且可点)。

本地验证:guide 模式渲染为竖线上的白气泡(版式已截图确认)、rows 模式不受影响、无 JS 异常。
2026-09-23 01:02:51 +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
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
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
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
31d153b513 refactor(来信): 彻底删除内置来信屏及全部功能代码,来信整体由第三方 laixin 承接(v26092006)
「宝宝来信」功能已全部由第三方应用 laixin(mp.yizhezhe.com/laixin/)承接,
mama-box 只保留两个入口/提醒,二者逻辑一行未改:
· 底 tab「宝宝来信」#tabLetter → openLetterApp() 跳 laixin
· 首页提醒卡 #homeLetter + 底 tab 红点 #tabBadge → syncLaixinReminder()/applyLaixinReminder()
  (读 /api/mp/public/laixin/unread)

删除的界面:#screen-letter(来信列表屏)、#detailLetter(来信详情)、
#detailCard(来信分享卡)、#fabWrite(写回信钮)、#modalReply(回信弹窗)。

删除的代码:LETTERS 数据与 stampLetters/renderLetters/filterLetters/buildThread/
renderLetterDetail/openLetter/curLetter/kidText/kidEl、本地延迟投递队列全套
(store/pending、deliverDue、deliverBabyReply、deliverVoiceLetter、语音信)、
syncLetterCounts、信箱头像换图 pickBabyAvatar、回信提交、applyRemoteLetters
(H5 从此不再请求 box_app 的 /mama-box/letters)、滑动 order 里的 letter、
go() 里 #fabWrite 的开关、state.{unread,letterFilter,curLetter,replyCount,babyAvatar}
以及随之无调用方的 fillBaby()。

保留(删前逐个 grep 确认仍有调用方):babyWord()、backAt()(stampAiLogs 在用)、
el()(档案海报在用)、.segmented(档案页在用)、.letter-card(首页提醒卡在用)、
档案页「珍贵时刻」里仅以文案提及来信的装饰卡。

CSS:删掉来信专用规则块与随之失效的变量(--font-round 等);净变化 -2396/+93 行。
2026-09-20 02:47:24 +08:00
aa53d5c6e6 mama-box 9.19 需求: 资料弹窗去兑换码闸门、底tab改回宝宝来信、我的页卡片改兜爸心选商城 (v26092001)
资料详情页(需求 1.1/1.2):
- #modalWx 删掉兑换码输入框与「以后再说」「解锁全部资料」两颗按钮,is-gate/is-gift/is-done
  三模式合并成单态(唯一出口是右上角 .modal-x);二维码下方文案改需求指定句
- 需求方确认「扫码加顾问 → 回复领资料 → 顾问直接发资料」,故「解锁」概念整体取消

死代码清理(D1 的连带):
- 删 PAN/PAN_DEFAULT 网盘链接表、panOf、WX_CODE/wxCodeOK、givePan、#modalPan 弹窗、
  state.wxUnlocked/WXOK_KEY、syncUnlockCopy、fetchRemoteConfig
- 删「已领」整套:state.resGot/RESGOT_KEY/isGot/列表「已领 ✓」标与筛选 chip/详情页「再拿一次链接」

底 tab(需求 2,D2=C):
- 「兜爸心选」→「宝宝来信」,图标换回 ic-letter,点击改走 jumpApp 跳第三方 H5
  mp.yizhezhe.com/laixin/(App 表 identifier=laixin,取不到时兜底硬编码)
- 红点 #tabBadge 挪回该 tab;角标数据源改为 box_app 封装的 /laixin/unread
  (syncLaixinBadge,ok=false 时保持现状,不把红点抹掉)

其它:
- 我的页卡片「兜爸心选」→「兜爸心选商城」(需求 3)
- 内置来信屏 #screen-letter 与 box_app /letters 链路保留不动,但不再有底 tab 入口
2026-09-20 01:36:06 +08:00
60bc63a870 mama-box 首页与底tab 第九批: 卡2 生长曲线→数宫缩(gongsuopinlv), 档案tab跳孕检日历, 来信tab改兜爸心选商城(购物袋图标+红点移到首页), 隐藏专属福利; 工具链接统一 mp 业务域名 (v26091601) 2026-09-16 16:34:28 +08:00
e2d6489393 版本号移入「关于妈妈盒子」页底部(renderSetting about分支), 删全站固定底标 (v26090811) 2026-09-08 10:58:01 +08:00
e8fba64a91 统一表单输入框最小高度50px(iOS date控件偏矮) (v26090732) 2026-09-08 03:28:57 +08:00
2b87d3cfda 预产期空值时隐藏原生日期提示(due-empty 文字透明), 只显示占位层 (v26090731) 2026-09-08 03:17:47 +08:00
915459f21a 预产期占位改为锚定输入框垂直居中, 修复 iOS webview 下错位 (v26090730) 2026-09-08 03:16:28 +08:00
8f78f5b433 我的资料: 预产期空值占位「- 年 - 月 - 日」(原生date不支持placeholder, 叠加文字层) (v26090729) 2026-09-08 03:11:52 +08:00
4301a8865c 退出登录移到「设置与服务」末尾(退出授权登录, 仅已授权显示), 删用户卡右上角退出图标 (v26090728) 2026-09-08 03:04:12 +08:00
46fbc70da3 来信页空数据双态: 未完善资料→引导去完善(打开资料弹窗), 已完善无信→普通空提示 (v26090725) 2026-09-08 02:36:09 +08:00
672655b022 弹层全部孕期工具宫格限4行x4列, 超出宫格内滚动+细滚动条 (v26090723) 2026-09-08 01:53:19 +08:00
f2eb903eff 纠正: 应用列表渲染到「记一下」弹层的全部孕期工具宫格(#appsGrid), 首页 bento 恢复原样 (v26090722) 2026-09-08 01:51:09 +08:00
90f28b8ec9 首页工具区替换为已上架应用宫格: /api/mp/apps 动态渲染(排除授权示例), 点击带身份跳转, 前8个+展开收起 (v26090719) 2026-09-08 01:42:03 +08:00
91db3873ee mama-box: 退出按钮改卡片右上角绝对定位 + 仅已登录(userName)时显示 (v26090707) 2026-09-07 23:42:30 +08:00
3b52b1c222 mama-box: 我的页 — 去掉右上角商城图标; 退出登录改资料卡右上角图标按钮; 商城卡去掉甄选好物角标 (v26090706) 2026-09-07 23:31:22 +08:00
24d5e07cd0 mama-box: 我的页加「退出登录」按钮 + 授权卡改 navigateTo 授权页(替代非实时 postMessage) 2026-09-07 21:09:57 +08:00
0a199f352c box_app: serve mama-box at /mama-box/ (align with mp.yizhezhe.com subdirectory apps); mount /mama-box, drop /apps+/assets; _img_url & init_mamabox URL → /mama-box/ 2026-09-07 15:47:42 +08:00