Files
wx_pbzc/.workbuddy/memory/2026-07-22.md
T
2026-07-29 11:05:03 +08:00

9.3 KiB
Raw Blame History

2026-07-22 工作日志

修复:首页「今日目标」数字在真机被圆圈遮挡

  • 现象:模拟器正常,真机(用户开了系统/微信字体缩放)大字号下数字超出固定圆形 .target-ring(280rpx, overflow:hidden) 被裁切。
  • 根因:微信按 fontSizeScaleFactor 自动放大所有文字(含 rpx 字号),但不放大 rpx 盒子尺寸 → 真机文字变大、容器不变 → 溢出裁切。模拟器跑标准档(1.0)不重现。
  • 改动:
    • pages/index/index.js:新增 targetTimeFontSize(默认 84) 数据;onLoad_readFontScale(),用 wx.getAppBaseInfo().fontSizeScaleFactor(回退 getSystemInfoSync().fontSizeSetting/17)反向补偿 84/factorclamp 到 [48,96],抵消系统缩放使数字视觉恒定。
    • pages/index/index.wxmltarget-time 增加 style="font-size: {{targetTimeFontSize}}rpx;"
    • pages/index/index.wxss.target-timewhite-space:nowrap(防换行顶出)。
  • 校验:node --check index.js 通过。
  • 此坑记入 MEMORY.md(微信字体缩放导致文字溢出固定盒子)。

修复:同上改动导致模拟器数字变小

  • 现象:真机修复后正常,但模拟器「今日目标」数字又变小/不正常。
  • 根因:模拟器 getAppBaseInfo().host.env === 'devtools',会原样返回手机真实缩放倍率(如 1.3)却渲染时不放大文字;真机才会放大。之前的补偿把字号缩成 84/1.3≈65rpx,模拟器按 65 渲染→偏小。
  • 改动:pages/index/index.js _readFontScale() 增加判断——host.env === 'devtools' 时跳过补偿、直接用 84rpx 设计字号;仅真机/PC 微信才做 84/factor 补偿。
  • 校验:node --check index.js 通过。devtools 不对称坑补入 MEMORY.md。

优化:排行榜头像延迟(批准实施 ①②)

  • 措施①云函数预解析:cloudfunctions/leaderboard/index.js 新增模块级 _resolveAvatars(urls),在 exports.main return 前收集 ranked+myEntry 的全部 avatarUrl,过滤 cloud:// 的批量调 cloud.getTempFileURL({fileList}) 换成临时 https URL(按 50/批分页;失败 catch 降级保留原 fileID)。前端 <image> 不再在渲染时做 getTempFileURL 往返。
  • 措施②上传压缩:pages/settings/settings.js_uploadAvatar 上传前先 _compressAvatar(filePath)wx.compressImage({quality:80, compressedWidth:200}) 把 chooseAvatar 原图压到最长边 200px;失败/不支持(旧基础库/devtools)回退原图,上传不崩。
  • 校验:node --check 两文件均通过。
  • ⚠️ 部署要求:leaderboard 云函数改动必须重新部署才能生效(前端 settings.js 改了重新编译即可,对之后上传的头像生效;已存旧 cloud:// 头像由云函数预解析加速)。两者互补。

优化:记录页底部列表与月份选择器联动(方案 B 分段切换)

  • 现象:切月份时日历热力图会变,但下方「最近记录」列表不变(它绑的是全局 top-30 historyList,与月份无关)。
  • 改动(pages/records/):
    • records.jsdata 加 listMode:'month'refresh() 新增 displayListmonth 模式=monthRecords 即所选月逐条记录,recent 模式=全局 top-30 historyList);新增 onToggleListMode(e)data-mode 切模式后 refresh()。切月时 listMode 保持不变。
    • records.wxml:历史卡片头部加 [本月|最近] 分段控件(.rec-seg,复用排行榜/设置页 .period-seg 视觉语言);标题动态为 {{year}}年{{month}}月记录最近记录;列表 wx:for="{{displayList}}";空态文案随模式切换(本月→"本月还没有训练记录/换个有训练的月份看看吧")。
    • records.wxss:新增 .rec-seg/.rec-seg-item/.rec-seg-item.active 样式;.history-hintmargin-bottom:8rpx
  • 校验:node --check records.js 通过。
  • 注:getRecordsByMonth(monthKey) 返回该月逐条记录且存储时已按最新在前排序,故月份联动零额外数据成本。日历热力图仍用 monthRecords,不受 listMode 影响。

内容产出:公众号文章(产品介绍)

  • 用户要求写公众号文章并发送草稿箱。确认:环境无微信公众号 connector/MCP、无 appid/appsecret,且本机对外 TLS 不稳(同 git push 的 SSL_ERROR_SYSCALL),无法真发草稿箱。用户选择「产品介绍 + 先成稿自行发布」。
  • 产出:docs/公众号文章_平板支撑小程序.md(约 1200 字,面向健身/普通用户,含封面/配图建议注释与文末二维码占位)。结构:痛点引入 → 训练计时 → 首页打卡 → 排行榜领奖台 → 记录日历 → 个性化主题 → 为什么是它 → CTA。所有功能点均基于真实已实现功能,未编造。
  • 注:「小程序名称」为占位,需用户替换实际上架名;发布方式:复制 markdown 到公众号编辑器(或转 HTML 富文本粘贴)。

配置:微信公众号 MCP connector 骨架(真发草稿箱)

  • 用户选择「有公众号+凭据,帮我配」。已实现自定义 MCP server。
  • 脚本:~/.workbuddy/wx-mcp-server.js(纯 Node + curl 调微信 APIcurl 自动走 HTTPS_PROXY5 工具:get_access_token/md_to_html/upload_thumb/add_draft/publish_article)。凭据存 ~/.workbuddy/wx_credentials.json(占位模板,chmod 600,不进 mcp.json),token 缓存 ~/.workbuddy/wx_token.json
  • 合并进 ~/.workbuddy/.mcp.jsonmcpServers.wx-mcp(保留原 connector-proxy)。
  • 握手测试(initialize+tools/list)通过;网络探活 api.weixin.qq.com 直连 TLS 正常(返回 invalid appid,国内直连可达,与 github 国外被墙不同)。
  • 待用户:①填真实 appid/appsecret ②提供封面图(路径/URL)③确认公众号为认证服务号(drafts/add 权限)。之后用 publish_article 把 docs/公众号文章 发到草稿箱。
  • 注:实际 MCP 配置点在带点的 .mcp.json(系统说明的无点版不存在),以实际文件为准。

设置页:加「功能介绍」引导到公众号文章入口

  • 技术结论:微信小程序不支持直接点击跳转公众号文章(wx.navigateTo 只能跳内部页面;web-view 仅限已配置业务域名,且公众号文章 mp.weixin.qq.com/s/ 被禁)。故用「复制链接→微信打开」引导。
  • 实现(用户选方案 B 引导到公众号文章):
    • config.js:新增 articleUrl 常量(占位 https://mp.weixin.qq.com/s/REPLACE_WITH_ARTICLE_LINK,文章发到公众号后填真实永久链接)。
    • pages/settings/settings.jsdata 加 appArticleUrl/showArticleGuide;新增 onOpenArticle/onCloseArticle/onCopyArticlewx.setClipboardData 复制链接+toast,复用 onCopyWechat 同款交互)。
    • pages/settings/settings.wxml:「关于」卡片加「功能介绍」about-rowbindtap onOpenArticle);末尾加底部 sheet 引导弹窗(显示链接+复制按钮,仿 plan-editor 风格,style=themeStyle 跟随暗黑)。
    • pages/settings/settings.wxss:新增 .article-guide-* 样式(复用 --card-bg/--primary 等变量与 planEditorSlideUp 动画)。
  • 校验:node --check settings.js 通过;grep 确认 wxml/js/config 引用一致。
  • 待办:①把真实文章链接填进 config.articleUrl(需先把文章发到公众号拿永久链接,可走之前搭的 wx-mcp 草稿箱流程)②重新编译小程序验证弹窗。

设置页:「功能介绍」复制链接 → 直接显示公众号名称

  • 用户反馈复制链接打开太麻烦,改为在「关于」直接显示公众号名称,且名称定义在 config.js。
  • 改动:
    • config.jsarticleUrl 替换为 officialAccount: '爱咖啡的人'
    • pages/settings/settings.jsdata 删除 appArticleUrl/showArticleGuide,加 appOfficialAccount: config.officialAccount;删除 onOpenArticle/onCloseArticle/onCopyArticle,新增 onCopyOfficialAccountwx.setClipboardData 复制公众号名 + toast「已复制,去微信搜索关注」)。
    • pages/settings/settings.wxml:「关于」的「功能介绍」about-row 改成「公众号」行,value={{appOfficialAccount}}bindtap=onCopyOfficialAccount;删除末尾 article-guide 底部 sheet 弹窗。
    • pages/settings/settings.wxss:删除全部 .article-guide-* 无用样式。
  • 校验:node --check settings.js/config.js 通过;grep 确认无 article-guide/articleUrl/showArticleGuide 残留。
  • 约定:公众号名称后续若变更,只改 config.jsofficialAccount 即可。

提交流程:git push 到 github 的可用配置(本机)

  • 本机有本地代理 HTTPS_PROXY=http://127.0.0.1:59305github.com 经其透明转发。直接推会失败(沙箱无网 / HTTP/2 framing / TLS 握手失败)。
  • 可用命令(关键:必须 dangerouslyDisableSandbox 才能访问 127.0.0.1 的代理;并关掉 HTTP/2,否则代理报 framing 错误): git -c http.version=HTTP/1.1 push origin main(沙箱禁用 + 走 env 的 HTTPS_PROXY)。
  • 试过不可用的组合:显式 -c http.proxy=... -c https.proxy=... -c http.sslVersion=tlsv1.2 → 代理空响应;默认 HTTP/2 → framing 错误。
  • 本次提交 3e1d3bd(公众号名称改动 + docs 文章),已成功 push70b87d4..3e1d3bd)。.DS_Store/.workbuddy/ 保持未跟踪、不提交。