lc
|
daed0cd719
|
feat(index): 首页随机姿势提示 + 移除冗余文案
- homeTip 从 config.postureTips 随机取一条,每次进首页换一条
- 移除圆环下方"平板支撑"单位文字,调整 ring 间距
|
2026-07-28 16:25:55 +08:00 |
|
lc
|
c5ae332cbe
|
feat(records): 训练勋章 UI 改造
- 勋章图标从 emoji 改为矢量 SVG 线性图标(utils/icons.js 新增 bolt/moon/diamond 路径及 white 变体)
- 命名改为累计语义(一周累计/半月累计/月度累计/双月累计/百日累计),并标注"非连续打卡"
- 进度条改回等距节点,解锁时填充正好抵达节点、满级满格
- 新增单枚解锁庆祝:持久化已见解锁集合,进入页面弹 toast + 节点 pop 动画
- 已解锁节点常驻显示勋章名 + 右上角 ✓ 角标,直观体现"已拥有"
- utils/storage.js 新增 totalDays(累计去重训练日),为勋章统计提供数据源
|
2026-07-28 16:25:55 +08:00 |
|
lc
|
75bad477b1
|
feat(records): 训练趋势图表 + 列表时长改 MM:SS
- 新增 trend-chart 柱状图组件(CSS,近7天/近6月切换)
- records 页加训练趋势卡片(统计卡片后)
- 训练记录列表时长从秒数改为 MM:SS 显示
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-28 11:19:07 +08:00 |
|
lc
|
faa49cff1c
|
feat(leaderboard): 下拉刷新动画图标
下拉刷新时顶部显示主题色旋转 spinner + "刷新中…"指示器,
仅下拉刷新显示(pullRefreshing),后台静默刷新保持无感。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-28 09:20:43 +08:00 |
|
lc
|
b42d080826
|
feat(leaderboard): 训练完强刷 + 下拉刷新 force
- 云函数 _fetchLatestByOpenid 支持 force 跳过实例缓存重新扫描
- 训练完成设 _lb_force_refresh 标志,下次打开排行榜强刷,新数据立即可见
- 下拉刷新带 force=true,拉取最新数据
- 平时常规打开仍走 5min 缓存 + 客户端乐观缓存,不增加无谓扫描
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-28 08:47:41 +08:00 |
|
lc
|
e2becc24aa
|
feat(ui): 排行榜与首页打卡卡片多项优化
排行榜性能:
- 客户端乐观缓存:进页面/切周期秒显旧数据,后台静默刷新,消除 2-3s 空白
- 云函数实例缓存 TTL 60s -> 5min,降低全表扫描频率
排行榜 UI:
- 空状态重设计:奖杯光环插画(径向光晕 + 闪光漂浮)
- 领奖台 slot 撑满对齐列表、金银铜底座配色、角标与昵称间距修复、底线对齐
首页打卡卡片:
- 火焰光晕脉动 + 72rpx 大数字 + 分段进度格子
- 计划 >10 天时进度退化为里程碑连续条
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-27 17:28:53 +08:00 |
|
liucheng
|
4b5f195a18
|
fix(index): 修复预设时长方块点击时布局跳变
preset-item 默认无 border,selected 加 2rpx border 致外宽变化,flex-wrap
重新换行(3行/2行/2列跳变)。加 box-sizing:border-box + 默认透明 border
占位,selected 只变色不改变外宽,布局稳定。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-25 15:13:19 +08:00 |
|
liucheng
|
03ea5881be
|
fix(index): 修复选预设时长时页面向上跳动
input 聚焦键盘弹起时点预设,onSelectPreset 清空 customInput 触发
adjust-position 重算导致页面上跳。点预设时先失焦 input 收键盘。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-25 15:09:31 +08:00 |
|
liucheng
|
983ae1b9cb
|
fix: 缓存击穿/play竞态/onUnload泄漏/清除数据UI/统计NaN
- leaderboard 云函数: _fetchLatestByOpenid 加 in-flight promise,并发请求复用同一次扫描,防缓存击穿
- voice: play 加序列号,丢弃过期播放,避免旧语音截断新语音
- timer: onUnload 补取消 _completionCountUp,系统返回手势不再泄漏动画定时器
- settings: 清除数据 setData 补 voiceGender/vibrateIntensity 重置,避免 UI 与存储不一致
- storage: getTotalStats 对 r.duration 防御(Number||0),避免脏数据产生 NaN 传染
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-25 15:01:51 +08:00 |
|
liucheng
|
41aa81083f
|
fix: tts fileID 校验归属 + 排行榜不下发他人 openid
- tts: client 传的 fileID 校验必须属于 tts-cache 目录,防伪造 cloud:// 换取他人私有文件
- leaderboard: ranked 去掉他人 openid 改用 isMe 标记,wxml 用 item.isMe 高亮
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-25 14:59:15 +08:00 |
|
liucheng
|
1c140bd503
|
fix: 修复 4 个正确性问题(分享秒数/主题同步/云推送定位/streak重算)
- timer: 完成弹窗存实际时长 completionActualElapsed,分享改用它,避免用动画值导致秒数错误
- theme: setTheme 补 _markLocalChanged,避免云恢复覆盖未同步的主题改动
- cloud: _doPush 重定位查询补 orderBy(updatedAt desc),与 pullAll 一致,避免命中最旧文档
- storage: deleteRecord 改用 recomputeStreak,修复删连续链中间某天 streak 虚高
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-25 14:51:09 +08:00 |
|
liucheng
|
b47a48259e
|
fix: 修复审查发现的 4 个高优先级问题
- plan: getTodayTarget 补 customPlans 参数,timer/index 调用点传值,修复自定义计划每日目标失效
- leaderboard: fetchRank 加请求序列号丢弃过期响应,修复快速切换周期竞态
- leaderboard 云函数:遍历记录加防御(r.date/duration/数组校验),避免单条脏数据崩溃全榜
- tts: _upload cloudPath 补 volume/speed,避免不同音量语速音频互相覆盖
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-25 14:48:09 +08:00 |
|
liucheng
|
16924d31db
|
perf(voice): 语音本地文件缓存 + 预加载,消除播放延迟
- 新增本地文件缓存层:downloadFile + saveFileSync 存持久本地文件,跨重启命中即出声
- _resolveSrc 三层优先:本地文件 -> 云函数 audioUrl -> 下载存本地
- 新增 preload(),timer 页 onLoad 后台预载全部语音
- 文件被清理自动回退重下载,下载失败回退临时 url
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-25 14:21:04 +08:00 |
|
liucheng
|
e682f07892
|
fix(leaderboard): 修复加载期空白页,加 loading 图标
- leaderboard.json 未注册 ui-skeleton,骨架屏不渲染致 loading 期空白
- 注册 ui-skeleton,骨架屏恢复 shimmer
- 骨架屏上方加主题色旋转加载图标 + "加载中…"
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-25 14:21:04 +08:00 |
|
liucheng
|
ed7029faf9
|
feat(timer): 训练超时与完成展示优化 (v3.0)
- 超时后圆环底环变绿,中心改显总训练时长(MM:SS 实时涨),移除 +Xs 小徽章
- 完成弹窗成绩由纯秒数改为分秒(如 1分23秒),>=60s 时缩字号防撑破卡片
- 修复结束确认弹窗停留期间计时器未暂停导致训练时长虚增:onStop 暂停、取消恢复、确认取暂停值
- progress-ring 新增 elapsed prop,remaining=0 时中心切显总时长
- 清理废弃的 overtime 字段与 .overtime-badge 样式
- 版本号 v2.9 -> v3.0,更新日期
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-25 11:36:32 +08:00 |
|
liucheng
|
e712741425
|
feat(share): 启用全站系统分享 + 完善分享文案配置
- 各 Page 补齐 onShareAppMessage/onShareTimeline,修复右上角转发/朋友圈按钮灰色
- ui-btn 透传 open-type,完成弹窗接入分享按钮
- config.share 集中维护文案,动态标题用 titleTemplate 占位符
- leaderboard 的 myEntry.rank 缺失时回退静态标题,避免出现"排第 undefined"
- 完成弹窗分享按钮高度对齐 88rpx,与同排按钮等高
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-25 11:03:02 +08:00 |
|
lc
|
3e1d3bd05e
|
fix(settings): 关于页直接展示公众号名称,去除复制链接引导
- config.js: articleUrl 替换为 officialAccount: '爱咖啡的人'
- settings: 关于页「功能介绍」改为「公众号」直接展示名称,点击复制名称便于微信搜索关注
- 移除复制链接的底部 sheet 弹窗及对应样式
|
2026-07-22 10:21:31 +08:00 |
|
lc
|
6176f2c341
|
feat(ui): 记录页月份联动与多项 UI 美化/修复
- records: 底部列表与月份选择器联动,新增 [本月|最近] 分段控件;标题/空态随模式切换
- leaderboard: 领奖台布局(冠军居中+皇冠)、次数标注于底座且三档水平对齐;头像 cloud:// 批量预解析提速(云函数需重新部署)
- index/timer: 主色底图标改白色变体修复隐形;目标数字按微信字体缩放补偿真机遮挡
- settings: 配色方案横滑渐变色卡;头像上传前压缩至 200px
- theme: 新增 teal 主题;暗黑背景统一对齐
- 圆形头像双保险(image 自身 border-radius)修复月/年榜方图
注: cloudfunctions/leaderboard 改动须在开发者工具重新部署才生效。
|
2026-07-22 09:36:22 +08:00 |
|
lc
|
1eff3d60c4
|
fix(ui): 多项 UI 修复 — 弹窗遮挡/按钮可见性/暗黑闪烁/云函数版本
- 计划编辑弹窗移出 .container 避免 fixed 降级 + 修复滚动
- dock bottom 40rpx→8rpx 紧贴底部, sheet padding 同步调整
- 计划编辑器取消/恢复默认按钮可见性修复(bg 匹配容器)
- ui-btn--danger 按钮可见性修复
- 清除确认弹窗跟随暗黑模式切换
- icons.js build() 中 Fill 路径覆盖 outlined 路径修复
- plan.js getPlanDay 忽略 customPlans 修复
- darkMode.js 冗余三元简化
- util.js fileToDataURI fallback 可读性提升
- theme.js: BASE_VARS 与 getThemeStyle 统一来源, 去 50ms navbar 延迟
- app.wxss: 移除 page transition 和 background-color 减少闪白
- 云函数 wx-server-sdk 版本统一 ~2.6.3, tts cloud.init 一致化
- 闪白问题: wx.setBackgroundColor 三层防护(onLaunch/applyThemeToPage/switchTab)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-10 09:40:04 +08:00 |
|
lc
|
d5121d349f
|
fix(dark): 调亮暗黑色调 + dock 跟随暗黑切换 + 图标文字放大
- theme/app.wxss: 暗黑背景 #0F0F12->#2C2C2E,卡片 #1C1C1E->#3A3A3C,
bg-soft/border 同步提亮,拉开卡片与背景对比(原太黑看不到卡片)
- custom-tab-bar: dock 注册 wx.onThemeChange,系统切暗黑/明亮实时跟随
(组件不在 getCurrentPages,app.js watchDarkMode 通知不到)
- custom-tab-bar: 新增 updateTheme,settings 手动切深色时通知 dock
- custom-tab-bar.wxss: dock 图标 44->50rpx,文字 20->23rpx,未激活
opacity 0.5->0.7(更醒目)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-09 15:02:17 +08:00 |
|
lc
|
afd2b72bcb
|
fix(ui): 根治真机弹窗 fixed 降级(移出 .container + pageIn 去 transform)
根因:.page-enter 的 pageIn 动画含 transform,即使 to: transform:none,
真机 fill-mode 没真正消除 transform,.container 仍是 fixed 的包含块。
记录页内容超一屏时 mask 降级相对 .container(高>>视口),flex 居中把
弹窗放到 .container 中心(视口外),真机看不到(模拟器宽松所以正常)。
- records: 日历详情弹窗移出 .container.page-enter,fixed 相对视口;
加 style themeStyle 拿暗黑变量
- app.wxss: pageIn keyframes 去掉 transform 只留 opacity 淡入,根治所有
页面(settings 计划编辑器/timer 完成弹窗)的 fixed 降级
- calendar-heatmap: onDayTap 的 find 用 Number(day) 修真机 dataset
字符串化导致 === 失败;移除诊断日志
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-09 14:41:34 +08:00 |
|
lc
|
885db8c18b
|
feat(timer): 训练中轮换姿势要领 + hint 字号调大
- 训练中 hint 每 12 秒轮换一条平板支撑姿势要领(收紧核心/肩膀放松/
别塌腰/别憋气等 10 条),替代固定文案,帮助持续纠正姿势
- 姿势文案与间隔移入 config.js(postureTips/tipInterval),统一管理
- hint 字号 28rpx -> 34rpx,图标 32rpx -> 36rpx,更易看清
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-09 11:04:37 +08:00 |
|
lc
|
ed16ac5efd
|
fix(vibrate): 修复旧用户震动失效 + 新增震动强度选项
根因:user_settings 早期无 vibrate 字段,getSettings 未兜底,
_remind 的 !s.vibrate 误判 undefined 为关闭,导致震动静默失效,
需手动操作开关才恢复。
- storage: getSettings 兜底 vibrate/voiceGuide/vibrateIntensity 默认值
- timer: !s.vibrate 改 === false,字段缺失视为开(与 voiceGuide 一致)
- timer: vibrate 按 vibrateIntensity 选 API(light/medium=vibrateShort,
heavy=vibrateLong),fail 回调辅助排查
- settings: 新增"震动强度"三档(短促/标准/强烈),默认强烈
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-09 10:36:14 +08:00 |
|
lc
|
a7ed017267
|
feat(voice): 语音参数移入 config.js + 设置页男女声切换
- config: 新增 tts.female/male 两组参数(voiceType/volume/speed),
直接改数字即可调音色,无需改逻辑代码
- storage: getSettings 兜底 voiceGender(旧用户迁移为女声)
- voice: 新增 _getTtsParams 读 config+性别;缓存 key 含完整参数,
改音色/音量/性别自动重新合成,无需手动清缓存
- settings: 训练偏好加"语音音色"segmented(女声/男声)
- tts 云函数: _synthesize 用传入 opts 合成;_upload 路径含 voiceType
(男/女不同文件);需重新部署
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-09 10:08:09 +08:00 |
|
lc
|
dd9cd1859c
|
feat(timer): 训练到目标时长不再自动结束,支持超长发挥
- Timer: 到时间触发 onGoalReached(提示)而非自动结束,elapsed/overtime
继续累加直到用户手动停止
- timer: onGoalReached 播 goal 语音 + goalReached 状态;finishTraining
补 complete 语音;完成弹窗显示"超长发挥 +X 秒"
- wxml: 超时 badge 训练中也显示;新增 goalReached hint 分支
- voice/tts: 新增 goal 语音 prompt(需部署 tts 云函数)
- config: 版本号 v2.5 -> v2.6
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-09 09:37:32 +08:00 |
|
lc
|
6fffc5aece
|
fix: 振动定时器清理、完成保存守卫、暗黑冷启动、头像云存储
- timer: 振动 setTimeout 入栈追踪,暂停/停止/卸载/重练统一清理,
避免页面销毁后残留震动(_clearVibrateTimers)
- timer: _saving 守卫统一到 _saveAndShowCompletion,自然完成与手动
结束两路径都防重复保存;修复 onTrainAgain 不重置会话状态导致
再练一次后第二次无语音/振动且保存被挡
- app.wxss: @media dark 补全 --text/--card-bg/--bg-soft/--border/
--success/--danger,冷启动即为完整深色,不再背景深卡片白的割裂闪烁
- settings: 头像优先上传云存储存 fileID,三级回退(fileID->base64->
临时URL),pushAll 不再每次传输图片字节
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-09 09:17:27 +08:00 |
|
lc
|
1d13b49682
|
fix: 修复头像存储、日历详情数据与弹窗定位问题
- settings: 补上缺失的 util 导入,onChooseAvatar 不再抛
ReferenceError,头像走 data URI 永久存储主路径
- records: 日历详情改用 dateOnly 比较,修复详情永远显示 0 次/0 时长
- records: 日历详情弹窗从 ui-modal 改为普通 view + fixed,
修复被底部 dock 遮挡/不居中;补暗黑阴影描边与滚动穿透处理
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-09 08:46:17 +08:00 |
|
lc
|
ac0db6118d
|
feat(ui): 全项目暗黑模式适配 — 加 theme 变量 + 替换全部硬编码颜色
新增主题变量 (light + dark 两套):
- --success-rgb / --danger / --danger-rgb (utils/theme.js)
全部硬编码 #XXX / rgba 颜色统一改主题变量:
- progress-ring 加 trackColor prop,默认 #EEEEEE
(canvas 不能直接读 CSS var,需要 caller 传字面颜色)
- ui-modal sheet 背景 #FFFFFF → var(--card-bg), 加底部 padding 避开 Dock TabBar
- ui-modal handle #DDD → var(--bg-soft)
- ui-btn --danger 文字 #E53935 → var(--danger), 边框 rgba(229,57,53,...) → rgba(var(--danger-rgb),...)
- calendar-heatmap 三个 #999/#333 文字色 → var(--text-secondary)/var(--text)
- index picker: preset/custom input 背景 #F5F5F5 → var(--bg-soft), label #666 → var(--text-secondary)
- index done-badge 绿色 → var(--success-rgb), pending-text #CCC → var(--text-secondary)
- records empty/hint #CCC/#E0E0E0 → var(--text-secondary), danger 红 → var(--danger)
- settings plan-editor-sheet 背景 #FFFFFF → var(--card-bg), avatar 背景, handle, editor-input, preview 全部跟进
- leaderboard 金/铜背景 #FFF7E6/#FFF1E6 → rgba 半透明 (dark mode 下不刺眼)
Tab bar inactive 图标重新根据 dark mode 切换颜色 (#999999 light / #98989F dark)
leaderboard.json 删除 backgroundColor: #F5F5F5 覆盖,让 theme.json 接管
故意保留:
- 各 .wxss 中渐变按钮上的 #FFFFFF 文字色
- 排行榜金/铜文字色 #FA8C16/#D46B08 (视觉符号约定)
- 各页 data 中 orange theme 默认值 (onShow 后被 themeMod 覆盖)
|
2026-07-08 15:22:09 +08:00 |
|
lc
|
326bc013fe
|
fix(timer): 完成页圆环覆盖弹窗 + 自定义确认 modal 替代 wx.showModal
训练完成的三个相关 bug:
1. progress-ring 圆环覆盖完成页弹窗 → @tap ring wx:if 让完成态时直接 unmount
2. 完成弹窗内按钮需要点 2 次才能响应 → completion-mask 加 catchtouchmove 拦截 touchmove
3. wx.showModal "结束训练" 系统弹窗在 stacking context 下 hit-test 不稳
根因: .timer-page.page-enter 永久保留 transform: translateY(0),
创建永久 stacking context,影响 native modal 的 WebView 部分 hit-test。
修法:
- 新增自定义 stop-confirm modal (catchtouchmove + 内部 catchtap + bindtap),
与 ui-modal/settings.plan-editor-mask 同模式,行为可靠
- completion-mask 用相同模式拦截 touchmove
- 顺便修 overtime-badge 暗色 (rgba(var(--success-rgb)))
|
2026-07-08 15:21:46 +08:00 |
|
lc
|
503f01f6e9
|
feat: 训练完成全屏弹窗 (大数字+countUp+超时+3按钮)
替换原来不显眼的 wx.showToast:
- 全屏遮罩 + 大圆角卡片,scale-in 弹性入场
- 大数字 180rpx countUp 从 0 滚到实际秒数(1.2s)
- 超时标签 +Xs 秒超时(OvertimePop 弹性出现,延迟 1.1s 等数字到末尾)
- 连续打卡显示 🔥
- 3 按钮:再来一次(留在当前页重置) / 查看记录(跳记录页) / 回到首页
- 装饰 emoji 圆形 1.6s 循环脉冲
- onComplete 触发时自动保存,不需要再手动点结束
|
2026-07-08 14:19:40 +08:00 |
|
lc
|
f052327276
|
feat: 训练完成后首页 streak 卡片高亮 3 秒
timer 记录保存时写 _last_train_at 时间戳,index onShow 检测
< 10s 的标记则触发 just-completed class,卡片脉冲 2 次 + 主题色
边框 + 阴影,3 秒后自动淡出。让'完成训练'的反馈在首页也可见。
|
2026-07-08 14:13:50 +08:00 |
|
lc
|
c0f7ca612c
|
feat: 切深色模式时高亮/卡片元素加颜色过渡动画
.rank-item / .period-tab / .theme-item / .plan-item 加
transition: background-color 0.3s ease + border-color 0.3s ease。
切深色时不再瞬间切换,有 300ms 流动感。
|
2026-07-08 14:13:20 +08:00 |
|
lc
|
96d92cfe10
|
feat: 完成训练分级庆祝 (normal/first/milestone/record)
- normal: 12 条彩带
- record (破个人纪录): 24 条 + 横幅"🏆 新纪录!X秒"
- milestone (连击 7/14/30/50/100/365 天): 32 条 + 横幅
- first (首次训练): 40 条 + 横幅"🎉 第一次训练"
横幅 3.5s 后自动淡出,彩带时长随等级递增(2.4s → 4s)。
|
2026-07-08 14:13:11 +08:00 |
|
lc
|
9bd4b8c2f4
|
feat: 记录页首次空状态显示引导卡
之前: totalSessions=0 时,用户看到 stats 显示 0次/0秒 + 空日历 + 空历史,
一整页'什么都没有'。
现在: 完全没记录时只显示一张大引导卡(插画+CTA'开始训练'),
有数据后才显示 3 个统计/日历/历史卡片。
|
2026-07-08 14:11:56 +08:00 |
|
lc
|
c41b3e138e
|
fix: 头像转 base64 持久化
WeChat chooseAvatar 返回的 wxfile:// 临时 URL 几天后失效,
头像会变灰。加 util.fileToDataURI 把临时文件读成 data URI
存到本地(限制 512KB,超出走降级方案),从根上解决。
|
2026-07-08 14:10:25 +08:00 |
|
lc
|
799d799bb9
|
fix: 深色模式下高亮/占位元素正确适配
修改:
- theme.js: 新增 --bg-soft 变量(浅色 #F0F0F0, 深色 #2C2C2E)
- settings.wxss: .theme-item.active / .plan-item.active
改用 rgba(var(--primary-rgb), 0.12) 替代 var(--primary-bg)
- leaderboard.wxss:
- .period-tabs 背景用 var(--card-bg) 替代 #FFFFFF
- .rank-num / .rank-avatar 用 var(--bg-soft) 替代硬编码灰
- .rank-item.is-me / .my-bar 用 rgba() 替代 var(--primary-bg)
根因: --primary-bg 是品牌色极浅版,深色模式下仍是浅色,
不适合做高亮底色。rgba() 在两种模式下都自适应。
|
2026-07-08 11:52:01 +08:00 |
|
lc
|
e0e5f6b449
|
feat: 设置页深色模式 3 档开关 (system/light/dark)
|
2026-07-08 11:39:32 +08:00 |
|
lc
|
5bbd84868a
|
feat: 空状态插画 (CSS 简笔平板支撑小人 + 主题色气泡)
|
2026-07-08 11:38:41 +08:00 |
|
lc
|
f3b825bdf9
|
feat: 排行榜行依次滑入动画 (前 10 行 60ms 错开)
|
2026-07-08 11:38:24 +08:00 |
|
lc
|
d192769dbe
|
feat: timer 完成全屏彩带动画 (10 条彩色碎片飘落)
|
2026-07-08 11:37:25 +08:00 |
|
lc
|
5d810fd058
|
feat: timer 页面接入 countUp 数字滚动 (load 时 0→duration)
|
2026-07-08 11:37:13 +08:00 |
|
lc
|
b41960d074
|
feat: records 页面接入骨架屏 + loading 状态
|
2026-07-08 11:36:06 +08:00 |
|
lc
|
f904870cbc
|
feat: leaderboard 页面接入骨架屏
|
2026-07-08 11:35:21 +08:00 |
|
lc
|
0bba403b00
|
feat: 页面级入场动画 (fade + translateY) 应用到 5 个页面
|
2026-07-08 11:33:29 +08:00 |
|
lc
|
6af09e4324
|
fix: 防连点产生重复训练记录 + 补充遗漏的状态重置
- finishTraining 添加 _saving 防重入,避免1.5秒延迟期间连点
- _init 补充 _last30Signaled/_last10Signaled 重置,修复
多次训练时语音提示丢失的bug
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-24 13:20:03 +08:00 |
|
lc
|
9578273906
|
fix: 移除榜单失败toast,避免无数据时误导用户以为云端故障
日榜无数据是正常业务场景(用户当天未训练),弹toast会
让用户误解为系统故障。本地fallback已提供足够的降级体验。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-24 12:30:51 +08:00 |
|
lc
|
46738dd7cd
|
fix: 榜单云函数失败时仅无数据才提示toast,避免已有数据时误弹
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-24 12:29:33 +08:00 |
|
lc
|
d817d5d012
|
fix: 13项数据存储与排行榜修复
致命修复:
- leaderboard: 日榜日期比较改用 dateOnly() 替代严格全等
- plan: 计划天数计算日期比较改用 dateOnly()
- cloud: pullAll 添加 orderBy('updatedAt','desc') 确保取最新文档避免数据丢失
严重修复:
- cloud: 新增 cancelPendingPush() 防止清除数据后被延迟推送复活
- settings: _doClearData 补充 user_profile 清除, 先取消推送再清除
- app: 云端同步改为时间戳比对策略, 支持跨设备拉取
- app: _restoreFromCloud 增加空数据保护和 profile 恢复
- storage: 记录ID改用时间戳+自增计数器确保唯一性
中等修复:
- cloud: init/_fetchOpenid 日志升级, 新增 syncStatus getter
- leaderboard云函数: 添加90天活跃过滤减少全表扫描
- storage: validateStreak 增加lastDate无记录时的通用修复
- leaderboard页面: 云函数失败时Toast提示用户而非静默降级
轻微修复:
- timer: onUnload 添加 voice.destroy() 释放音频上下文
- records: onLongPressDelete 委托给 onDeleteRecord 消除重复代码
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-24 12:22:54 +08:00 |
|
lc
|
47f718a129
|
feat: 训练开始时添加语音播报
|
2026-06-11 11:51:14 +08:00 |
|
lc
|
2e2594d154
|
feat: 修复清除数据、语音缓存、排行榜限制,新增项目配置文件
- 修复 cloud.clearAll 静默失败导致重启后数据恢复
- 清除数据弹窗改用自定义 ui-modal 替代 wx.showModal
- TTS 语音合成增加 fileID 持久化缓存,重启不再重新合成
- 排行榜限制前15名,maxRank 参数化到 config.js
- 新增 config.js 统一管理版本号/更新日期/开发者/排行榜限制
- progress-ring 消除 getSystemInfoSync 弃用警告
- voice.js 增加 InnerAudioContext 错误监听
- storage/util 完善用户资料、打卡日期精度、记录日志
|
2026-06-11 11:30:47 +08:00 |
|