9.3 KiB
9.3 KiB
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/factor,clamp 到 [48,96],抵消系统缩放使数字视觉恒定。pages/index/index.wxml:target-time增加style="font-size: {{targetTimeFontSize}}rpx;"。pages/index/index.wxss:.target-time加white-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.mainreturn 前收集 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.js:data 加listMode:'month';refresh()新增displayList(month 模式=monthRecords即所选月逐条记录,recent 模式=全局 top-30historyList);新增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-hint补margin-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 调微信 API,curl 自动走 HTTPS_PROXY;5 工具: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.json的mcpServers.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.js:data 加appArticleUrl/showArticleGuide;新增onOpenArticle/onCloseArticle/onCopyArticle(wx.setClipboardData 复制链接+toast,复用 onCopyWechat 同款交互)。pages/settings/settings.wxml:「关于」卡片加「功能介绍」about-row(bindtap 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.js:articleUrl替换为officialAccount: '爱咖啡的人'。pages/settings/settings.js:data 删除appArticleUrl/showArticleGuide,加appOfficialAccount: config.officialAccount;删除onOpenArticle/onCloseArticle/onCopyArticle,新增onCopyOfficialAccount(wx.setClipboardData 复制公众号名 + toast「已复制,去微信搜索关注」)。pages/settings/settings.wxml:「关于」的「功能介绍」about-row 改成「公众号」行,value={{appOfficialAccount}},bindtap=onCopyOfficialAccount;删除末尾 article-guide 底部 sheet 弹窗。pages/settings/settings.wxss:删除全部.article-guide-*无用样式。
- 校验:
node --checksettings.js/config.js 通过;grep 确认无 article-guide/articleUrl/showArticleGuide 残留。 - 约定:公众号名称后续若变更,只改
config.js的officialAccount即可。
提交流程:git push 到 github 的可用配置(本机)
- 本机有本地代理
HTTPS_PROXY=http://127.0.0.1:59305,github.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 文章),已成功 push(70b87d4..3e1d3bd)。.DS_Store/.workbuddy/保持未跟踪、不提交。