Commit Graph

50 Commits

Author SHA1 Message Date
2356f33b47 chore: 忽略 App 签名证书 keystore/(私钥不入库) 2026-11-11 10:54:54 +08:00
f3648d5cef docs(AGENTS): 补远程仓库地址与 App 分支约定
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-26 17:09:25 +08:00
b45a190a59 chore: 入库生产基线(2026-10-26 工作树快照)
- 含首页壳/容器页/授权页/分享图/首页配置等此前未入库的在途改动
- 新增未跟踪的 pages/index/mall.vue(第 5 个 tabBar 页,pages.json 已引用)
- 排除本地备份文件(*.bak* / *.origin-bak)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-26 17:07:49 +08:00
91f1ee849c feat(分享图): 反查数据源换 /api/mp/public/share-images(含下架应用)—— mama-box/laixin 可配自定义转发图
- APPS_API 换 box_app 专用反查接口(不再被 isPublished=1 过滤卡住)
- 缓存 key bump share_apps_index → v2(旧缓存只有上架应用,残留 1h)
- shareCard.js 首次入库(此前为未跟踪文件);文档同步数据流与缓存说明
2026-09-23 16:59:55 +08:00
dcc84dd7b7 docs(AGENTS): 补 §4.3 —— 回到首页要清 last_app(首页壳 + mama-box 两侧互补)
- 表格列出三条返回路径分别由谁清、判定依据是什么
- 明确禁止「mama-box 每次加载都清」(会把恢复落点加载误清,毁掉记录)
- 首页壳只在重载目标命中 /mama-box 时清
2026-09-22 11:58:12 +08:00
da18d9685e docs(AGENTS): 补 §4.2 —— 显式落地后点「小房子」回首页不能被恢复逻辑再送回去
- 记录用户实测现象:扫码进应用 → 点小房子 → 被 last_app 恢复送回应用 → 左上角变成返回箭头
- 修法两层缺一不可:① App.onLaunch 按 option.path 置 restoreArmed(首页壳一次性消费);
  ② 判定「不恢复」的那一轮加载(含显式落地落点、onShow 重载、retryLoad)都要带 #norestore=1
- §6 自测补「扫码入口」用例,并说明 Console 过滤 [enter-app] 可看完整判定链
2026-09-22 11:49:06 +08:00
b06a617f13 docs(AGENTS): 新增 AGENTS.md —— 小程序(宿主)侧开发约定与踩坑(跨仓约定指向 box_app/AGENTS.md)
- 两个宿主页 / mixin / App.vue / 授权页 / 引导页 的职责地图,发布方式(HBuilderX→微信审核)
- 硬约定:宿主页共用 mixin、身份走 query 授权结果走 hash、fail-closed、分享深链脱敏、
  分享图按 webViewUrl 当场解析、tabBar 全局状态、恢复/落地走容器页、只有 options.url 算显式落地
- 踩坑:热启动(点胶囊关闭后再进)不触发 onLoad —— 恢复逻辑不能只写在 onLoad;
  onShow 无条件重载会把用户踢回首页(用 App.onShow 时间戳区分热启动与切 tab)
- 提醒:mixins/shareCard.js 未被 git 跟踪,提交时别漏
2026-09-22 11:08:41 +08:00
e99b4a475c fix(身份): 宿主页「拿到 openid 才加载 H5」+ 复用 App.vue 并行登录(不重复换 code)
背景(2026-09-20 线上排查):删掉小程序缓存重进时 H5 以访客态加载(孕周 `--`、档案空、
跳应用不带 openid,实测跳授权示例是裸 URL)。服务端证据:该设备只打了 `/api/mp/apps`,
没有任何带 openid 的 profile/pregnancy 调用 —— 宿主那次没注入身份,不是数据丢了。

根因:
1) App.vue 静默授权只处理 token 分支:v2/wechat/silence_auth 对新用户 / 强制绑定手机号返回
   {auth_login:1, key, openid, unionid}(无 token),openid 被丢掉;且 res.data.userInfo 缺失时
   取 .uid 会抛异常把后续 commit 一起带走。
2) 两个宿主页只从 store.openid / 缓存 OPENID / JWT 读身份,读不到就匿名加载(首页壳不等不重试,
   容器页 _finalizeUrl / _fetchOpenidAndLoad 兜底)。

改法:
- App.vue:补「无 token 但有 openid」分支(SET_OPENID + 缓存,unionid 同理);userInfo 判空;
  **并把这次静默登录的 promise 挂到 globalData._silenceAuthPromise**(供宿主页复用,见下)。
- mixins/webviewHost.js:新增
  · _silenceAuthOpenid()(wx.login → v2/wechat/silence_auth,兼容 auth_login/userInfo/JWT 三种
    openid 来源,拿到即落 store + 缓存,带 8s 超时保险丝);
  · _awaitHostLogin(timeout)(等 App.vue 那次登录结束,**不重复换 code**)。
- 两个宿主页统一 fail-closed「拿到 openid 才加载」,并且**第 1 次先 await App.vue 的并行登录**、
  命中缓存就直接加载;之后才自己取。**网络尝试上限 3 → 2,退避 600×n → 固定 500ms**
  (实测:code2session 约 200–300ms,重复换一次就是白花这个钱;最坏等待从 ~3.5s 降到 ~1–2.5s)。
- 首页壳:读不到身份就不设 webUrl(停在小程序自己的加载屏,文案分「取身份中/失败/页面加载失败」三态);
  2 次仍失败 → 「未获取到微信身份」+「重新获取身份」。
- 容器页:三条失败分支(有 token 无 openid 的重试失败、无 token 无 openid、onShow 仍无 openid)
  全部改走 _ensureIdentityThenLoad();删除本页重复实现的 _fetchOpenidAndLoad;新增兜底屏
  (以前 url 为空是白屏)。非可信域(商城自身域名等)不注入身份、照常直接加载。
- utils/util.js:注释里的方法名同步(_fetchOpenidAndLoad → _ensureIdentityThenLoad)。

⚠️ 提交同时包含这两处**此前已存在的未提交 WIP**(同文件、改动交织):pages/annex/web_view/index.vue
   的 mixin 重构(handleMessage→handleHostMessage 等 4 处 handler 改名)与 pages/index/index.vue
   的两行 tabBar 调整。
⚠️ 刻意 fail-closed:CRMEB silence_auth 整体不可用时会停在失败屏而不是降级加载。
⚠️ 未动 manifest.json 版本号(见另一次改动:已统一为 0.3.6 / 36)。
2026-09-20 23:50:31 +08:00
c216865852 feat(user-center): 授权页 submitAuth 带 unionid(用户中心身份键,预留功能)
- 新增 getUnionid()(store/Cache 'UNIONID')
- POST /auth/profile 增加 unionid 参数:box_app 授权成功自动推送用户中心并回写 openid→unionid 映射
- 没拿到 unionid 也不影响授权(后端映射兜底)
- 配套:box_app 1269058(已部署);需重新发版生效
2026-09-19 17:41:02 +08:00
6f033db7d4 fix(auth): 链路B原生面板回传基址 —— requestProfile 消息带 href 优先用作面板基址
- 面板弹出=requestProfile 消息送达;同一条消息带 href(H5 发起面板时的当前地址)
  → 提交后按它回传,不赌 shareHref 的 postMessage 派发时机(宫格换应用后可能旧地址)
- 不带 href 时回退调用处基址(shareHref || webUrl || MAMA_HOME),向后兼容
- 配套协议:h5-auth-standard.md §4.2 requestProfile 增加 href(推荐带)

需重新发版生效
2026-09-19 17:14:12 +08:00
3df3e08252 fix(auth): 授权回传落点改确定性通道 —— backUrl 经 navigateTo query 传递
- 授权页 onLoad 读 options.backUrl(H5 发起授权时带上的当前地址),成功时写进
  __AUTH_RESULT__.backUrl
- consumeAuthResult 优先用 res.backUrl 做回传基址(不再赌 postMessage 派发时机:
  微信只在后退/销毁/分享时批量派发,宫格 location.href 换应用后 shareHref 可能
  还是上一个应用的地址 → 授权后被踢回 mama-box 首页)
- 配套:mama-box wx-auth.js requestProfile / goAuth 已带 backUrl(mama-box d39e52c)

需重新发版生效
2026-09-19 16:56:00 +08:00
67eaae0ceb fix(auth): 授权回传落点写死 MAMA_HOME + 假成功判据 → 宫格应用授权死循环
- 首页壳 onShow consumeAuthResult:回传基址改为 shareHref(H5 发起授权前
  reportLocation 上报的当前地址)|| webUrl || MAMA_HOME —— 此前写死 MAMA_HOME,
  宫格 location.href 换应用后(webUrl 数据未变),授权结果被送回 mama-box,
  目标应用(孕检日历等)永远收不到 phone,弹层复现
- 首页壳 else 分支的 ?t= 重载同样以 shareHref 为基址(不再把宫格应用用户踢回 mama-box)
- 首页壳 submitAuth(原生面板)同步改用当前 H5 地址
- 授权页成功判据:提交了 code 时必须核对 result.phone 非空才写 __AUTH_RESULT__/
  提示成功 —— 配合 box_app 后端 400 如实报错(box_app commit e6b98e7)

需重新发版生效
2026-09-18 19:36:39 +08:00
d276956a76 chore(home): 提交首页 web-view 壳的既有工作区改动(兜爸心选 H5 宿主页,与线上一致) 2026-09-18 19:36:26 +08:00
ad30f3eb01 feat(auth): 共享授权页 pages/annex/auth/index + web_view 宿主授权面板与回传(__AUTH_RESULT__ → H5 hash) 2026-09-09 22:51:57 +08:00
0f4a0f75a5 docs: 分享图片获取逻辑(box_app → 小程序 web_view) 2026-08-15 18:15:35 +08:00
d9263d2ea2 feat: 微信审核适配 — 移除提现/分销页面 + 分享图片预取 + 登录链路修复
- pages.json 移除 14 个提现/分销页面注册(user_cash/user_spread/spreadData/promoter/distributor),文件保留可恢复
- template4.vue 隐藏'立即提现'区块(用户中心可见入口,分销功能已关闭)
- record.vue 抽奖记录移除提现收款跳转(改 toast 提示)
- web_view 分享图片:太阳码/点击应用时从 box_app 预取 shareImageUrl,H5 postMessage 传图优先
- web_view _fetchOpenidAndLoad 兼容老用户响应(openid 从 userInfo/JWT 兜底解析)并写回缓存
- App.vue 移除 expired=[object Promise] 无意义日志
2026-08-15 16:36:49 +08:00
aa67806030 fix: 退出登录保留 openid/unionid — 微信匿名标识永久稳定,退出后跳 H5 不丢失身份 2026-07-31 14:46:33 +08:00
45aade9a7a debug: silenceAuth 增加成功/失败响应日志,验证新用户 openid 获取 2026-07-31 12:09:35 +08:00
a600dc05f7 fix: 冷启动竞态 — 无 token 时延迟重试等待静默授权,仍无则匿名直达 2026-07-31 11:37:35 +08:00
3455a834c4 debug: 增加免授权直达 H5 流程调试日志 [auth-flow] 2026-07-31 11:32:02 +08:00
edb084bd7a feat: 免授权直达 H5 — 无 token 不再跳登录页,按需授权(requireAuth 返回后刷新身份) 2026-07-31 11:25:39 +08:00
96571fee73 fix: 修复 community.vue 多余花括号 2026-07-30 19:21:54 +08:00
5d1e3d5285 chore: 移除 discoverIndex 全部引用(tabBar + 跳转链接) 2026-07-30 19:15:21 +08:00
14d2d1e4e2 fix: 删除自定义字体改用系统字体,减少主包体积 2026-07-30 13:18:51 +08:00
ed3e5f22ec fix: 太阳码 scene 解析支持 &ch=渠道参数,identifier 用 split('&')[0] 分割 2026-07-30 12:39:44 +08:00
ec6a5dd956 fix: 首页和我的应用排序按 seq 排列 2026-07-29 20:27:36 +08:00
8c9613044c cleanup(web_view): 隐藏调试浮层,清除 DEBUG 日志 2026-07-09 13:45:15 +08:00
865f68e415 fix(web_view): scene 值先 decodeURIComponent 再匹配
微信 wxacode.getUnlimited 返回的 scene 值中 = 被编码为 %3D
导致 scene="app%3Dpregnancy" 无法匹配 indexOf('app=')

修复:先 decodeURIComponent(option.scene) 再检查
2026-07-08 21:14:33 +08:00
026938b59e Revert "chore(user): 个人中心底部添加版本号 v26070801"
This reverts commit 52d5d53e52.
2026-07-08 19:24:16 +08:00
52d5d53e52 chore(user): 个人中心底部添加版本号 v26070801 2026-07-08 19:23:27 +08:00
9e32fa920f Revert "chore(user): 个人中心底部添加版本号 v26070801"
This reverts commit 48de85260f.
2026-07-08 19:20:43 +08:00
48de85260f chore(user): 个人中心底部添加版本号 v26070801 2026-07-08 19:20:01 +08:00
e2ec214ae1 cleanup: 移除测试按钮和调试日志,准备发布 2026-07-08 18:53:14 +08:00
4dc3c68808 test(web_view): 添加 ?app=identifier 参数跳过 scene 直接解析 2026-07-08 18:48:47 +08:00
985538d957 test(web_view): 添加 ?app=identifier 参数模式
测试用:navigateTo 传 ?app=pregnancy 直接触发 _resolveAppScene
跳过 scene 参数被微信拦截的问题,验证整个 app 解析链路:
  _resolveAppScene("pregnancy", option)
  → 调 box_app /api/mp/apps
  → 匹配 identifier=pregnancy
  → 拿到 App.url
  → 加载 H5

+ 测试按钮改为 ?app=pregnancy
2026-07-08 18:47:45 +08:00
61caf4eb50 test(web_view): 测试按钮直接传 H5 URL 并加调试日志
不再依赖 scene/wxscene 参数传递(参数名可能被微信拦截)
改为直接传 ?url=encoded_h5_url
同时 web_view onLoad 打印所有 option 参数供排错
2026-07-08 18:40:18 +08:00
0e9ce6f7d6 fix(web_view): 改用 wxscene 避免 scene 被微信拦截
微信小程序的 navigateTo 会把 `scene` 参数名当作保留字段
(只由扫码填充),导致 `option.scene` 为空。
改用 wxscene,同时在 web_view onLoad 中兼容检查两者。
2026-07-08 18:29:08 +08:00
fa74238186 fix(user): 将 goWxacodeTest 移至 methods 块内
修复 "Page does not have a method 'goWxacodeTest'" 错误
原因是 goWxacodeTest 之前被放在了 export default 顶层,
不在 methods: {} 块内,Vue 2 不识别
2026-07-08 18:25:39 +08:00
92069bf5df fix(user): 恢复 user-my-apps 组件引用
修复如下问题:
1. 重新添加 <user-my-apps> 模板标签(之前被 git checkout 丢弃)
2. 添加 import userMyApps
3. 在 components 注册 userMyApps
2026-07-08 18:22:49 +08:00
e0a44cf6e3 fix(user): 测试按钮增加底部外间距,避免被导航 tab 遮挡
dev-test-section padding-bottom 从 30rpx 增至 120rpx
确保按钮在 tab 上方完整可见
2026-07-08 18:14:35 +08:00
5079289a84 feat(user): 个人中心底部添加太阳码扫码测试按钮
新增测试按钮用于模拟太阳码扫码跳转流程:
  scene=app=pregnancy 触发 _resolveAppScene
  → 调 box_app /api/mp/apps 查 H5 URL
  → 加载孕育无忧 web-view

改动:
  - pages/user/index.vue 模板: 底部添加测试按钮(根 view 内)
  - pages/user/index.vue script: goWxacodeTest 方法
  - pages/user/index.vue style: 按钮样式(紫色虚线边框)

HBuilderX 需重新编译后可用
2026-07-08 17:58:16 +08:00
f18a21ea73 refactor(web_view): 把 _resolveAppScene 和 _initWebView 移到 methods 块内
HBuilderX 编译错误"Unexpected token (350:0)"
根因:Vue 2 Options API 要求所有方法在 methods: { ... } 块内
之前把这两个方法放在 export default 顶层,违反规范

修复:把 _resolveAppScene 和 _initWebView 移到 methods 块开头

Node.js --check 验证:语法通过
2026-07-08 17:45:58 +08:00
ccd6380c4b fix(web_view): 补回 export default 关闭括号
build error: Unexpected token (350:0)
原因:之前修复时连续删多了,export default {...} 块本身没有关闭

修复:第 350 行 </script> 之前插入 `\t}` 关闭 export default

Node.js --check 验证:语法通过
2026-07-08 17:37:35 +08:00
6e3e2bb3ea fix(web_view): 补回 handleMessage 方法关闭逗号
build error: Unexpected token, expected "," (350:0)
原因:之前修复时手抖,handleMessage 方法 `}` 后缺 `,`
导致 export default 最后一个属性末尾不合法

修复:第 348 行 `}` → `},`

Node.js --check 验证:语法通过
2026-07-08 17:31:52 +08:00
2e97550a5c fix(web_view): 补回 _resolveAppScene 方法关闭括号
build error: Missing semicolon (163:22)
原因:之前修复时误删了 _resolveAppScene 方法的关闭 `},`
导致 _initWebView 紧接 uni.request 的 `});`,缺少 _resolveAppScene 关闭

修复:在 uni.request 关闭后插入 `\t\t},`

Node.js --check 验证:语法通过
2026-07-08 17:28:28 +08:00
e137841ec1 fix(web_view): 修正 export default 结构
build error: Unexpected token, expected "," (352:0)
原因:
  1. 在 onLoad 内部错误地多写了 `methods: {` 块
  2. 末尾有一个多余的 `}`

修复:
  - 删除错位的 `methods: {` 块
  - _resolveAppScene 和 _initWebView 现在作为 export default
    顶层方法(Vue 2 Options API 支持)
  - 删除末尾多余的 `}`
  - 转换回 CRLF 行尾(HBuilderX 期望)

CRMEB 应能正常 HBuilderX 编译。
2026-07-08 17:10:56 +08:00
c184108f45 feat(web_view): 太阳码 scene 解析支持 app=identifier
box_app /api/wxacode 新增 app=identifier 模式,scene 编码
"app=<identifier>"。CRMEB 收到后解析 scene,调 box_app
/api/mp/apps 找对应 H5 url,加载应用。

场景示例:
  太阳码 path=pages/annex/web_view/index
  太阳码 scene="app=pregnancy"
  → CRMEB 调 box_app /api/mp/apps
  → 遍历 items 找 identifier=pregnancy 的 App
  → 拿到 App.url
  → 注入到 web-view src
  → 加载孕育无忧 H5

兼容性:
  - 原 ?url=xxx 模式完全保留
  - scene 解析失败/响应异常时降级到 CRMEB 首页
  - 不影响原有分享/复制链接功能

实现细节:
  - 遍历 items 找 identifier(不依赖 items[0] 排序假设)
  - 找不到时回退 items[0](保底)
  - 未来 box_app 支持 ?identifier= 直接过滤时,CRMEB 端无需改动
2026-07-08 16:41:58 +08:00
69da6597d9 fix(web_view): 修复 H5 分享消息投递,废弃无效 uni.share()
- handleMessage share 分支:存储 H5 传来的分享数据,Toast 引导用户点击右上角原生分享
- onShareAppMessage / onShareTimeline:使用 H5 传来的 title/imageUrl/href
- 新增 shareSummary/shareImageUrl/shareHref data 属性
2026-07-02 19:54:53 +08:00
797724c01d feat(页面组件): 新增图片组件和页面顶部导航组件
- 新增 images.vue 图片组件,支持图片展示、链接跳转和二维码长按识别
- 新增 pageTopbar.vue 页面顶部导航组件,支持自定义标题、返回按钮和样式配置
- 在首页和专题页中注册并使用新增组件
- 优化 homeComb.vue 组件,添加选项卡轮播显示控制逻辑
- 添加 DIY 组件调试日志功能,便于开发调试
- 修复缓存读取空值时的默认值处理
2026-04-16 19:51:08 +08:00
a5c5d753b6 feat: 添加静态资源文件及基础组件
- 新增大量图片资源,包括图标、背景图、海报等,用于页面展示
- 添加字体文件及样式配置,支持自定义字体
- 引入 uni-ui 组件库,包括图标、弹窗、日期选择器等常用组件
- 添加网络状态监听、加密工具等基础工具函数
- 配置 Vuex 状态管理,包括购物车数量、热门搜索词等
- 增加页面组件,如用户协议、分销信息、提现状态等
- 配置项目构建和忽略文件,优化开发体验
2026-02-26 17:59:51 +08:00