Your Name
|
01bc355bed
|
更新
|
2026-06-01 10:01:59 +08:00 |
|
Your Name
|
1b746b46c0
|
更新
|
2026-06-01 09:59:32 +08:00 |
|
Your Name
|
ceb313b1a7
|
更新
|
2026-06-01 09:38:44 +08:00 |
|
long
|
576ab05681
|
Merge branch 'mini-sport'
|
2026-05-29 18:17:58 +08:00 |
|
long
|
132a17b946
|
update
|
2026-05-29 18:17:44 +08:00 |
|
Your Name
|
75dfaa0dcd
|
Merge branch 'master' into master-5-28
|
2026-05-29 17:11:08 +08:00 |
|
Your Name
|
e83dd07553
|
更新
|
2026-05-29 17:08:57 +08:00 |
|
long
|
c589bfa647
|
1
|
2026-05-29 15:59:14 +08:00 |
|
Your Name
|
17ad153821
|
更新
|
2026-05-29 14:45:56 +08:00 |
|
long
|
e4312ab5d1
|
update
|
2026-05-29 12:12:07 +08:00 |
|
long
|
7f4fad7b62
|
update
|
2026-05-29 12:05:22 +08:00 |
|
 longandCursor
|
9b5cd5b2b9
|
优化握力环训练页:内联视频舞台并修复小程序兼容与完成浮层布局。
将示范视频从自定义组件移至页面主体,避免 mp 端 vOn/ref 崩溃;奖励特效改为 prop 信号驱动,完成弹层移出 page 容器修复右侧裁切,并修正后台音频配置与 CLI 热重载监听。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-29 10:59:17 +08:00 |
|
Your Name
|
94e787ae80
|
更新
|
2026-05-29 09:28:38 +08:00 |
|
Your Name
|
7b46204454
|
更新
|
2026-05-29 09:28:27 +08:00 |
|
long
|
9f3db8f281
|
update
|
2026-05-28 17:44:30 +08:00 |
|
long
|
6cb8688587
|
Merge branch 'feat/vite-build'
|
2026-05-28 15:28:16 +08:00 |
|
long
|
0e5b5beb9c
|
增加 cli 启动命令
npm run dev:mp-weixin
|
2026-05-28 15:27:45 +08:00 |
|
long
|
8d635bb7ed
|
update
|
2026-05-28 15:10:06 +08:00 |
|
Your Name
|
0f974be7a1
|
Merge branch 'master-5-27' into master-5-28
|
2026-05-28 14:46:50 +08:00 |
|
Your Name
|
2b1ce61e72
|
更新
|
2026-05-28 14:41:50 +08:00 |
|
long
|
6efc340bd8
|
Merge branch 'master' of https://gitee.com/v_cms/zyt
|
2026-05-28 14:33:38 +08:00 |
|
long
|
c435e6ae4e
|
Update main.js
|
2026-05-28 14:33:31 +08:00 |
|
Your Name
|
dfb8838ecc
|
发布按
|
2026-05-28 12:21:53 +08:00 |
|
Your Name
|
7f08771dd0
|
更新
|
2026-05-28 12:18:14 +08:00 |
|
long
|
afd88714ec
|
Merge branch 'mini-sport'
|
2026-05-28 11:49:41 +08:00 |
|
long
|
bb21825c16
|
ADD total_open_rate
增加开口率
|
2026-05-28 11:49:23 +08:00 |
|
 longandClaude Opus 4.7
|
c3e4dfa479
|
feat(training): 握力环训练全面优化 - 音效集成 + 沉浸式画布 + Canvas 2D
## 主要改动
### 1. 音效集成
- 集成 4 个捏碎音效(鸡蛋/核桃/易拉罐/气球)
- 集成背景音乐 BGM + 右上角开关按钮
- 修复音效 URL 空值时的崩溃问题
- useMetronome 新增 volume 参数(默认 1.0)
- 节拍音量调小至 0.35,避免木鱼声过大
### 2. 画布升级到 Canvas 2D 接口
- 解决微信小程序 canvas-id 接口的警告
- 支持同层渲染,可与其他元素正常叠加
- 使用 requestAnimationFrame 替代 setTimeout
- DPR 自适应,Retina 屏幕高清渲染
### 3. 粒子特效差异化升级
- 4 种物品各自独立配色和形状
- 🥚 鸡蛋: 蛋黄黄+白色,圆形,中速
- 🌰 核桃: 4 种棕色,方形/三角/长方形,重粒
- 🥫 易拉罐: 5 种银色,长方形,快速
- 🎈 气球: 8 色彩虹,小颗粒,飘浮(低重力)
- 新增双层冲击波效果
- 粒子旋转动画(方形/三角形/长方形)
- 多形状粒子绘制(circle/square/triangle/rect)
### 4. 沉浸式画布重新设计
- 画布占屏幕 60vh(min 720rpx, max 900rpx)
- 背景与页面无缝融合(#f8fafc)
- 中心 1400rpx 大放射光晕,营造空间感
- 握力环放大至 520rpx,内圈 280rpx
- 完全移除浮动气泡(性能优化)
### 5. 视觉与体验优化
- 主题色改回青绿色(#14b8a6),握力环保持粉色突出
- 训练完成卡片大改造:
- 大号 emoji 跳动动画
- 统计项加入图标(💪⏱️🔥)
- 食物对照可视化(emoji + 数量,最多 3 个)
- 食物库扩展到 7 种(糖果/饼干/巧克力/苹果/香蕉/米饭/可乐)
- BPM 数字大号显示(80rpx 深粉色)
- 实时统计栏增加分隔线和顶部彩色高光
### 6. 性能优化(低配机器友好)
- 静态背景渐变(0 性能消耗)
- 单层中心光晕(无动画)
- 外发光仅在播放时启用
- GPU 加速(will-change + transform/opacity)
- 移除 backdrop-filter(高消耗)
### 7. Bug 修复
- crush-canvas 的 \$scope of null 错误
- 进入页面时音效预热不再发声(静音预热)
- 修复 walnut emoji 错用花生(🥜→🌰)
- 弹窗遮挡粒子动画(延迟 1200ms 显示弹窗)
### 8. 文档
- 新增音效采集清单(grip-ring-audio-shopping-list.md)
## 修改文件
- grip-ring.vue: 主页面,音效集成、UI 重设计、食物对照
- grip-ring-canvas.vue: 沉浸式画布、握力环主体
- crush-canvas.vue: Canvas 2D 升级、差异化粒子系统
- useMetronome.ts: 音量参数支持
- dev-training-entry/index.vue: 入口配置微调
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-28 11:35:43 +08:00 |
|
Your Name
|
33f8f669ad
|
更新
|
2026-05-28 10:50:21 +08:00 |
|
long
|
3ebe3c58c8
|
Update metronome.vue
|
2026-05-27 18:27:25 +08:00 |
|
 longandClaude Opus 4.7
|
0225e9f971
|
feat(training): 握力环页面简化重构
## 主要改动
### 1. 连续训练模式
- 移除组数/休息逻辑,只统计总次数和时长
- 训练持续进行直到用户手动暂停
- 实时显示次数、时长、消耗糖分
### 2. 递进式奖励系统
- 鸡蛋(8-12次) → 核桃(15-20次) → 易拉罐(25-30次) → 气球(40-50次)
- 每个奖励在区间内随机触发
- 奖励按顺序递进,不会跳级
- 捏碎粒子特效 + 奖励弹窗
### 3. 糖分计算与食物对比
- 公式: (MET × 体重 × 时长) / 4
- MET = 3.5, 体重 = 60kg
- 食物对比: 苹果/香蕉/米饭/巧克力/可乐
### 4. 视觉设计优化
- 真实握力环造型(完整圆环 + 中空 + 握点)
- 立体渐变和纹理效果
- 挤压动画(训练时整体缩放)
- 简洁交互(整个环可点击,无中心按钮)
### 5. 问题修复
- 修复进入页面时音效预热响声(静音预热)
- 暂时禁用音效URL(避免404错误)
- 修复捏碎特效层级问题
## 技术实现
- 新增: grip-ring.vue (主页面)
- 新增: grip-ring-canvas.vue (画布组件)
- 修改: useMetronome.ts (静音预热)
- 修改: exercises.ts (移除握力环)
- 修改: index.vue (添加头部链接)
- 修改: dev-training-entry/index.vue (添加菜单入口)
- 修改: pages.json (添加路由)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-27 18:26:45 +08:00 |
|
Your Name
|
4f066b560e
|
gengx
|
2026-05-27 18:11:26 +08:00 |
|
Your Name
|
13f58a5fdc
|
更新
|
2026-05-27 17:44:50 +08:00 |
|
Your Name
|
36be8fedad
|
更新
|
2026-05-27 17:29:27 +08:00 |
|
long
|
b9d2541b32
|
chore: record session journal - 握力环训练趣味化
|
2026-05-27 16:53:33 +08:00 |
|
 longandClaude Opus 4.7
|
261f8315de
|
feat(training): 握力环训练趣味化 - 捏碎特效 + 卡路里统计
## 新增功能
### 1. Canvas 粒子捏碎特效
- 新建 crush-canvas.vue 组件(透明叠加层)
- 4 种捏碎物品:鸡蛋🥚、核桃🥜、易拉罐🥫、气球🎈
- 粒子物理模拟:径向扩散 + 重力 + 空气阻力 + 生命值衰减
- 性能优化:固定 60fps 时间步长,粒子边界清理
### 2. 随机触发逻辑
- 平均每 8-12 次随机触发捏碎特效
- 在握力环压缩峰值(scale 0.65)时触发
- 随机选择 4 种物品之一
- 资源清理:训练暂停/结束时清理所有定时器
### 3. 卡路里统计与完成页面
- 标准 MET 公式计算卡路里(MET = 3.5,默认 60kg)
- 5 种食物自动匹配(苹果、鸡蛋、巧克力、香蕉、米饭)
- 完成页面显示:组数、次数、时长、卡路里、食物对比
- 样式设计:浅色清爽风格,绿色渐变卡片
### 4. 预留接口
- useTTS.ts:预留 MiMo TTS 语音鼓励接口
## 技术实现
- Canvas 粒子系统:20-30 个粒子,物理模拟流畅
- 类型安全:完整的 TypeScript 类型定义
- 性能优化:固定时间步长、边界清理、资源管理
- 响应式布局:适配不同屏幕尺寸
## 相关任务
Task: .trellis/tasks/05-27-grip-ring-gamification
PRD: prd.md
Research: research/calorie-calculation.md
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-27 16:52:41 +08:00 |
|
long
|
ffe4849c27
|
Merge branch 'master' into mini-sport
|
2026-05-27 16:34:13 +08:00 |
|
Your Name
|
19af50c344
|
更新
|
2026-05-27 15:50:54 +08:00 |
|
long
|
012830de4a
|
1
|
2026-05-27 14:47:29 +08:00 |
|
Your Name
|
8b0fcd7050
|
更新
|
2026-05-26 18:15:56 +08:00 |
|
Your Name
|
57e4892140
|
更新
|
2026-05-26 18:11:58 +08:00 |
|
Your Name
|
95fff1262b
|
更新
Merge branch 'master' into master-5-24
|
2026-05-26 18:09:41 +08:00 |
|
Your Name
|
0dd9cdcba9
|
更新功能
|
2026-05-26 18:05:48 +08:00 |
|
Your Name
|
5b233fb0ab
|
更新
|
2026-05-26 11:23:43 +08:00 |
|
long
|
3325be0622
|
feat(metronome): 双引擎(BgAudio 档位+InnerAudio 自定义)+音频迁移 CDN
- 档位模式用 BackgroundAudioManager+预合成循环 mp3, 锁屏可继续播放
- 自定义模式保留 InnerAudio, 支持任意 BPM(40~240)/拍号(2/3/4), 仅前台
- UI 折叠区区分两种模式, preset 默认进, 点"⚙ 自定义节奏"切换
- 音频资产全部迁移到腾讯云 COS, 删除本地 6 个 mp3/jpg (-210KB)
- server 上传白名单补 mp3/wav/m4a/aac/amr/wma 格式
|
2026-05-26 11:15:15 +08:00 |
|
Your Name
|
9af5c5be63
|
Merge branch 'master' into master-5-24
|
2026-05-26 09:43:48 +08:00 |
|
 longandCursor
|
0e46bf8e0d
|
feat(metronome): 升级到 BackgroundAudioManager,iOS 真后台播放
iOS 微信小程序硬限制:
InnerAudioContext 切到后台/锁屏一定被挂起,
即使配置 requiredBackgroundModes 也无效。
唯一支持 iOS 真后台的音频 API 是 BackgroundAudioManager。
新增预合成档位音轨(ffmpeg 拼接 click + click-wood):
- loop_80bpm_2.mp3 慢走 6.0s 4 周期循环 (72 KB)
- loop_110bpm_2.mp3 健走 5.45s 5 周期循环 (66 KB)
- loop_130bpm_2.mp3 快走 5.54s 6 周期循环 (67 KB)
- cover.jpg 200×200 emerald 占位封面 (474B)
新 hook training/hooks/useMetronomeBg.ts:
- 封装 uni.getBackgroundAudioManager() 单例
- 必填 metadata: title/coverImgUrl/singer/epname/webUrl
- onEnded 重赋 src 实现循环 (BgAudio 无原生 loop 属性)
- onPause 同步 isPlaying,用户从锁屏控制条点暂停 UI 自动同步
- 暴露 playLoop(id)/pause/resume/stop API
metronome.vue 改造:
- 切换为 useMetronomeBg,移除右下角微调和拍号选择
(预合成 mp3 改不了 BPM/拍号,要么砍要么扩 9 个 mp3)
- 中央圆按钮逻辑:
· 未选档位 → 默认开"健走"
· 选了档位且在播 → 暂停
· 选了档位且暂停 → 恢复
- 视频 playbackRate 跟当前档位 BPM 同步(80→0.65× / 110→0.89× / 130→1.05×)
- 加底部提示"🔒 锁屏可继续播放,放兜里走也能听到"
- onHide 不 stop,onUnmounted 才 stop(避免锁屏控制条挂死)
副作用:
- 锁屏/通知栏会显示带封面+暂停按钮的音乐控制条(老人友好)
- 切档位有 200~500ms 延迟 (用户主动操作可接受)
- 不再支持任意 BPM 微调 (3 档已覆盖大部分场景)
旧的 useMetronome.ts 暂时保留,如 BgAudio 真机验证 OK 再清理。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-26 09:39:33 +08:00 |
|
 longandCursor
|
b93313d935
|
docs(training): 沉淀 BgAudio 设计备忘到 README
记录未来做健身模块时上 BackgroundAudioManager 的完整方案,
避免再调研一次。包含:
- 引擎选择对照表(BGM 用 BgAudio / 短音用 InnerAudio)
- BackgroundAudioManager 7 条限制清单
- 健身模块推荐架构(双引擎共存)
- 必备资产清单(BGM mp3 + 200×200 封面)
- BgAudio API 速查 + 场景切换模式代码
- 节拍器为何不一并升级的判断依据
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-26 09:27:56 +08:00 |
|
 longandCursor
|
c1dfb01f53
|
fix(metronome): 切后台/小窗后节拍声继续(放兜里也能听)
两层原因都修:
1. 微信限制(声明后台音频权限):
InnerAudioContext 默认在小程序进后台时被强制暂停。
必须显式声明 requiredBackgroundModes,iOS 才允许后台继续发声。
- manifest.json mp-weixin 全局加 requiredBackgroundModes:["audio"]
- pages.json 节拍器页 style 也加,双保险
说明:Android 大部分情况无需此声明也能后台,iOS 必需。
2. 代码层(onHide 不再主动 stop):
原 onHide 里 if(isPlaying) stop() 会在切后台/小窗时
立刻把节拍器自己关掉,跟需求相反。
新策略:
- onHide 留空 → 切后台/小窗时节拍器继续工作
- onUnmounted 才真正 stop + 释放屏幕常亮 → 用户主动离开
节拍器页(navigateBack/重启)时清理资源
实际场景:健走时把手机塞口袋,锁屏或切到微信聊天,
节拍声依然继续响,无需把手机一直拿着看。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-26 09:19:19 +08:00 |
|
 longandCursor
|
3f999b312d
|
tweak(metronome): 三档位拍数统一改为 2 拍
慢走/健走/快走 三档 accent 从 4 → 2:
- 走路场景天然是左-右双脚交替的 2 拍循环
- 重音落在每一步的"主脚"(默认左脚),节奏感更贴合步态
- 4 拍听感像跑步进行曲,2 拍才是健走/慢跑实际节奏
需要 3/4 拍号的可在右下角微调里手动切换。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-26 09:05:31 +08:00 |
|
 longandCursor
|
50abe5dece
|
refactor: 训练模块整体迁入分包,减小主包体积
主包超出 2MB 上限无法上传发布版,把训练相关全部移到独立分包。
目录调整:
- pages/training/* → training/pages/*
- hooks/use{Metronome,VoiceCoach,TrainingSession,TrainingBgm}.ts
→ training/hooks/*
- static/training/* → training/static/*
- 主包 hooks/ 目录已清空,所有 use* 都被分包独占
引用路径更新:
- 分包内 hook import 用相对路径 ../hooks/xxx,不依赖 @/ alias
- 资源路径 /static/training/audio/click.mp3
→ /training/static/audio/click.mp3
- useMetronome 默认 clickSrc / useVoiceCoach VOICE_BASE
/ useTrainingBgm BGM_BASE 全部对齐新路径
pages.json:
- 主包 pages 移除 training/index 和 training/metronome
- subPackages 新增 root="training",含 pages/index 和 pages/metronome
- 跟现有 TUIKit / doctor 分包风格一致
调用方:
- components/dev-training-entry navigateTo URL 更新成
/training/pages/metronome (此组件留在主包,主包跳分包是合法操作)
文档/工具同步:
- training/static/README.md 路径示例改为 training/static/...
- scripts/generate-voice.mjs VOICE_DIR 与提示输出对齐新路径
Git mv 检测到的全是 rename(R),历史完整保留。
分包总体 80K(pages 44K + hooks 20K + static 16K),主包瘦身明显。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-26 09:00:01 +08:00 |
|