 longandCursor
|
e104249707
|
style(metronome): 脚印改用 SVG 矢量,单笔成型告别卡通感
div 拼接(椭圆+5 个圆)无论怎么调都摆脱不了"青蛙脚"既视感,
根本原因是 div 画不出曲线轮廓。改用 SVG path 单笔成型:
- 新增 static/training/footprint.svg(775B)
· path 一笔走完:前足→足弓凹陷→脚跟,模拟真实脚印拓印
· 5 个脚趾用 ellipse + rotate 转角,大小递减(7.2→3.8rpx)
· 内侧(拇趾侧)凹陷、外侧饱满,符合解剖学
· 单色 #e2e8f0 fill-opacity 0.92,接近湿沙脚印质感
- metronome.vue:
· 模板:删 heel + 5×toe,改用 image src=footprint.svg
· CSS:删除 70+ 行 heel/toe 位置定位,只保留 footprint 容器
· 左脚保持 scaleX(-1) 镜像,动画 keyframe 不变
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 12:45:17 +08:00 |
|
 longandCursor
|
9b6d9ce007
|
refactor(metronome): 整体视觉重设计 - 现代极简风
脚印拟真化:
- 颜色 鲜绿 → 浅白(rgba 241,245,249,0.92),降低饱和不再卡通
- 形状更紧凑:脚趾紧贴脚掌、大小递减弧形排布(22→18→16→14→12rpx)
- 不规则 border-radius 模拟真实脚印轮廓
- 移除多余渐变和厚重 box-shadow
布局重组(卡片化):
- 走路区域 + 配速 badge + 状态提示 → walker-card 统一卡片
- BPM 调节 + 拍号选择 → control-card 统一卡片
- 卡片背景 rgba(255,255,255,0.035) + 1rpx 描边,有 backdrop-blur
- 移除独立 hint 区,合并到 walker-card 顶部
控件精修:
- BPM 步进按钮 高度 120→96rpx,字号 44→38rpx,圆角更小
- 拍号选择器改为 iOS 风药丸式 segmented control,放在右侧
- 主圆 460→420rpx,BPM 字号 200→180rpx,腾出空间给下方
- "速度"标签 → "BPM"(更专业)
配速 badge 智能变色:
- <100 BPM 绿(健走)
- 100-129 黄(快走)
- 130-169 橙(慢跑)
- ≥170 红(快跑)
设计 token 抽取:
- 在 SCSS 顶部定义 $bg-grad / $card-bg / $text-* / $brand 等变量
- 圆角统一:卡片 28rpx, 按钮 20rpx, 药丸 999rpx
- 间距统一:卡片间距 28rpx, 控件间隔 14rpx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 12:18:29 +08:00 |
|
 longandCursor
|
69da8066a6
|
feat(metronome): 节拍器下方加脚步行走动画
- 节拍器圆下方新增"脚印踏步"动画区域
· 纯 CSS+SVG-like(div 拼接),不依赖 canvas/Lottie/视频
· 左右脚交替踏步,起脚时落地阴影变小变淡,落地时变大变浓
· 1 拍 1 步,左右各占半周期(animation-delay 错相 0.5)
- 跟节拍器同步:CSS 变量 --step-duration = 60000/bpm,BPM 改了
步频立刻跟着变;暂停时 animation-play-state 自动停
- 智能配速提示:
· <70 BPM 慢走 · 适合热身
· 70-99 健走 · 日常配速
· 100-129 快走 · 心率提升
· 130-169 慢跑 · 进入有氧
· ≥170 快跑 · 高强度
- 重构 ringStyle/coreStyle 为统一 rootStyle,挂在根节点用
CSS 变量级联(--beat-duration / --step-duration)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 12:10:44 +08:00 |
|
 longandCursor
|
edc9993403
|
fix(metronome): 修复 iOS 真机静音键模式下无声音
iOS 微信小程序的 InnerAudioContext 默认会受系统侧边静音键影响,
单实例 obeyMuteSwitch = false 在 iOS 上不可靠,必须调用全局
API setInnerAudioOption 才能正常发声。
- App.vue onLaunch 调用 uni.setInnerAudioOption({
obeyMuteSwitch: false, mixWithOther: true })
- useMetronome.preload() 进页面时再调一次保险
- AudioPool.play() 改用 stop() + play() 替代 seek(0) + play(),
iOS 上 seek(0) 不一定能复位播放进度
- 预热改用 volume 0.01 极小音量替代 volume 0,iOS 上音量为 0
可能不会真正完成音频解码
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 11:48:16 +08:00 |
|
 longandCursor
|
8f14f3190e
|
fix(metronome): 修复第二拍延迟两倍间隔的 bug
drift correction 逻辑写反了:
drift = now - nextTickAt (此时为负数,下一拍还在未来)
nextDelay = intervalMs - drift ❌ = 2 × intervalMs
正确做法直接计算"目标时刻距现在还有多久":
nextDelay = nextTickAt - now ✅
现象:点击开始,第一拍立即响,但第二拍要等两倍拍间隔才响。
现在第一拍响完就立刻按 BPM 节奏进入第二拍。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 11:44:06 +08:00 |
|
long
|
71a3c63182
|
Update .gitignore
|
2026-05-25 11:33:01 +08:00 |
|
 longandCursor
|
d10678763f
|
revert(uniapp): 移除训练模块,代码已迁至 TUICallKit-Vue3
之前 6 个 commit 误把节拍器/练一练训练模块加在 uniapp 项目,
实际目标项目是 TUICallKit-Vue3(甄养堂主壳)。本提交清理 uniapp
项目所有相关改动:
- 删除 hooks/useMetronome.ts、useTrainingSession.ts、
useVoiceCoach.ts、useTrainingBgm.ts
- 删除 pages/training/* 与 components/dev-training-entry/
- 删除 static/training/* 与 scripts/generate-voice.mjs
- 还原 pages.json、pages/index/index.vue、pages/user/user.vue
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 11:29:03 +08:00 |
|
 longandCursor
|
2beace89f4
|
feat(TUICallKit-Vue3): 迁入节拍器与练一练训练模块
之前误将训练模块加在 uniapp 项目,实际目标项目是 TUICallKit-Vue3
(甄养堂主小程序壳),整体迁入:
- hooks/useMetronome.ts 节拍器(音频实例池+预热,无冷启动延迟)
- hooks/useTrainingSession.ts 训练 Session 状态机
- hooks/useVoiceCoach.ts 语音教练队列
- hooks/useTrainingBgm.ts 训练/休息 BGM 切换+渐变
- pages/training/index.vue 练一练主页(器械跟练)
- pages/training/metronome.vue 独立节拍器(老人友好版,
中央圆即开始/暂停按钮,纯 CSS 几何 icon,大字大按钮)
- pages/training/components/exercise-anim.vue CSS 动作动画
- pages/training/exercises.ts 5 个器械动作预设
- static/training/audio/*.mp3 3 种 click 音色(MIT 协议)
- scripts/generate-voice.mjs MiMo TTS 批量生成语音脚本
- pages.json 注册 pages/training/index 与 pages/training/metronome
- 「我的」页加 DevTrainingEntry 悬浮入口,生产环境自动隐藏
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 11:28:55 +08:00 |
|
 longandCursor
|
e5d0d7db93
|
style(training/metronome): 优化中央圆 UI,移除顶部拍点指示
- 移除顶部 .beat-bar 4 个圆点指示器,界面更简洁
- 中央圆按钮重新设计:
· "速度"标签下方居中放置纯 CSS 几何绘制的大 ▶/⏸ 图标
(icon-play 70rpx 三角形 / icon-pause 22rpx×84rpx 双竖条),
跨机型一致、不再依赖 emoji 字符
· 移除"开始/暂停"文字 + 药丸样式背景,保留 icon 即可识别
· 圆心使用更深的渐变和内/外阴影,质感更立体
· 增加第二层 ring 错相 0.4 周期播放,呼吸感更连续
- 状态提示文案调整:"点击" → "轻点"
- 顶部 padding 收紧 60rpx → 20rpx,圆体上下居中更平衡
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 11:18:30 +08:00 |
|
 longandCursor
|
35a42078ce
|
feat(training/metronome): 修复冷启动延迟 + 老人友好 UI
- useMetronome 改用音频实例池(默认 4 个 InnerAudioContext 轮流播放),
并在创建时静音预热,解决重新开始第一拍延迟 100-300ms 的问题;
同时也避免快 BPM 时上一拍未播完导致的丢音
- 暴露 preload(),节拍器页面 onShow 时主动预加载
- 移除 useMetronome 的 tapTempo 接口
- 重写节拍器页面:
· 中央大圆即"开始/暂停"按钮(老人一眼就懂的交互)
· 移除 Tap Tempo、滑块、速度术语
· 仅保留 -10/-1/+1/+10 大步进按钮调速
· 拍号简化为 2/3/4 拍三选项
· 大字号 BPM(200rpx) + 高对比度配色
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 11:02:15 +08:00 |
|
 longandCursor
|
e8e28d19fb
|
chore(uniapp): 内置 3 种节拍器 click 音色(MIT 协议)
- 来源:johnnysn/chrono-bump 开源节拍器项目(MIT License)
- click.mp3 (3.4KB) 默认标准节拍音
- click-soft.mp3 (4.2KB) 柔和音色备选
- click-wood.mp3 (4.6KB) 木鱼质感,节拍器页用作重音 accent
- 节拍器页接入 accent 音色:第 1 拍用 click-wood,后续用 click,听感更专业
- README 注明来源、协议、替换说明
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 10:53:31 +08:00 |
|
 longandCursor
|
163e40c73f
|
feat(uniapp): 节拍器独立工具页面
- 新增 /pages/training/metronome 节拍器页面:
· 中心大脉冲圆 + 重音变色(绿→金)
· 拍号选择 1/4 ~ 6/8,第 1 拍重音视觉指示
· BPM 滑块 (40-240) + 一键 ±1/±5 步进
· Tap Tempo(连续 2-5 次点击自动测速)
· 速度术语提示(Largo / Andante / Allegro 等)
· 屏幕常亮、切后台自动暂停
- useMetronome 新增 setAccentEvery / tapTempo 方法,支持 accentSrc 重音音色
- 训练页右上角加节拍器入口
- DEV 悬浮按钮升级为可展开菜单(练一练 + 节拍器)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 10:48:06 +08:00 |
|
 longandCursor
|
d46cfff079
|
feat(uniapp): 加开发用「练一练」悬浮入口
- 新组件 dev-training-entry:右下角圆形悬浮按钮,带 DEV 标签
- 仅在 isDevMode() 为真时显示,上线打包自动隐藏
- 挂载到首页和个人中心,方便快速跳转 /pages/training/index 测试
后续走装修系统给 user 页配「练一练」服务图标后即可移除此组件
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 10:37:23 +08:00 |
|
 longandCursor
|
275a7a550d
|
feat(uniapp): 新增「练一练」器械跟练模块 MVP
- 节拍器 hook (useMetronome):setInterval + 漂移自校正,60-200 BPM 误差 <30ms
- 训练状态机 hook (useTrainingSession):组数/次数/休息阶段编排
- 语音引导 hook (useVoiceCoach):队列播放,关联节拍回调报数
- BGM hook (useTrainingBgm):训练/休息双音轨手写淡入淡出
- 5 个动作预设:哑铃弯举/推举/侧平举、握力环、健身环卷腹
- CSS 动画组件 exercise-anim:动画时长由 BPM 通过 CSS 变量驱动
- TTS 生成脚本 generate-voice.mjs:调小米 MiMo TTS 自动出 39 段语音
- 静态资源目录占位与素材准备说明
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-25 10:34:45 +08:00 |
|
Your Name
|
5430fe0417
|
更新
|
2026-05-22 18:00:22 +08:00 |
|
long
|
f314e2e271
|
Merge branch 'new-miniapp'
|
2026-05-22 17:55:54 +08:00 |
|
Your Name
|
a4fb55d164
|
更新
|
2026-05-22 17:13:24 +08:00 |
|
Your Name
|
295c8f0623
|
Merge branch 'master' into master-5-22
|
2026-05-22 17:06:55 +08:00 |
|
long
|
4b749a1ee0
|
Merge branch 'cursor/self-input-stats'
|
2026-05-22 17:02:27 +08:00 |
|
 longandCursor
|
679e61057b
|
fix(stats/self_input): 唯一索引含 delete_time,软删后可重新录入
去掉「同日+同渠道」全局唯一,回到按录入人判重;唯一索引补 delete_time 避免软删占键导致 1062;错误提示带冲突记录 ID,迁移脚本兼容多次执行。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-22 17:01:58 +08:00 |
|
Your Name
|
7f7b8f0a64
|
更新
|
2026-05-22 16:57:34 +08:00 |
|
long
|
7e94c5dfd7
|
Merge branch 'cursor/self-input-stats'
|
2026-05-22 16:45:37 +08:00 |
|
long
|
003810114b
|
debug
|
2026-05-22 16:45:28 +08:00 |
|
Your Name
|
37c5849103
|
更新
|
2026-05-22 14:20:30 +08:00 |
|
long
|
55521b8e11
|
Merge branch 'cursor/self-input-stats'
|
2026-05-22 12:07:36 +08:00 |
|
 longandCursor
|
e4f181e4fe
|
fix(stats/self_input): 渠道字典、财务脱敏与同日同渠道全局唯一
自媒体来源改推广渠道字典;非白名单隐藏账户消耗/ROI;部门展示完整路径;业绩与消耗按日期+渠道全局去重。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-22 12:02:12 +08:00 |
|
 longandCursor
|
bba989c0af
|
fix(stats/self_input): 修复保存不入库/路由 404,补全部门与自媒体来源下拉
- 模型去掉 defaultSoftDelete=0,避免 ThinkPHP 软删过滤导致新增记录"隐形"
- 菜单 paths 改相对路径并新增「自录数据统计」目录,迁移已有菜单
- Lists/Overview 补部门关联、支持按部门筛选
- 数据权限改由 self_input_stats_view_all_roles 白名单 + DataScope 控制,
编辑/删除完全交给按钮权限校验(移除"仅本人可改"硬限制)
- 新增 /stats.self_input/mediaSourceOptions 接口,统计页/账户消耗页/录入弹窗
共用 useMediaSourceOptions + MediaSourceSelect,去重动态加载
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-22 11:47:15 +08:00 |
|
Your Name
|
d5e0ba04b7
|
更新
|
2026-05-22 11:19:18 +08:00 |
|
Your Name
|
22ec53c070
|
更新
|
2026-05-22 11:15:59 +08:00 |
|
 longandCursor
|
183b6a1acf
|
feat(stats): 新增自录转化统计模块
支持后台用户手动录入个人业绩与账户消耗,独立计算转化指标,接入 DataScope 数据权限。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-22 09:17:16 +08:00 |
|
Your Name
|
49c8c95966
|
更新
|
2026-05-21 14:41:43 +08:00 |
|
Your Name
|
c7c264497e
|
修复bug
|
2026-05-21 14:38:31 +08:00 |
|
long
|
436f69c272
|
fix: support both exclusive and public resources for logged in users, include flags in quick returns
|
2026-05-21 14:36:02 +08:00 |
|
long
|
dc72a8ccaf
|
fix: getResourceList never returns -1, uses flags for disabled/expired tokens to keep guest mode working
|
2026-05-21 10:25:15 +08:00 |
|
long
|
499c969233
|
fix: distinguish disabled users from invalid tokens - disabled users see public resources as guest, only truly invalid tokens trigger re-login
|
2026-05-21 10:13:33 +08:00 |
|
long
|
3b44300216
|
fix: return code -1 when disabled user has token in getResourceList, triggers frontend logout
|
2026-05-21 10:08:15 +08:00 |
|
long
|
8bb7b5d30a
|
feat: add inline switch toggle for account status in user list
|
2026-05-21 10:01:58 +08:00 |
|
long
|
4c3becf33e
|
feat: use project standard search bar pattern for asset pages, add title/phone/date filters
|
2026-05-21 09:54:59 +08:00 |
|
long
|
a42fc6453a
|
feat: add resource edit functionality and time range filter in admin panel
|
2026-05-21 09:49:30 +08:00 |
|
long
|
dad06304f1
|
feat: make user_ids optional in admin resource form, unlinked resources become public
|
2026-05-21 09:47:44 +08:00 |
|
long
|
03b80310f6
|
feat: add public resource support, usage filtering, and recordDownload API
|
2026-05-20 18:24:04 +08:00 |
|
long
|
8d015fa962
|
fix: dual-write token (DB+cache) and dual-read with fallback, works with or without SQL migration
|
2026-05-20 17:54:21 +08:00 |
|
long
|
f639ef2fbb
|
feat: add time dimension filter (today/3d/7d/30d) to resource list
|
2026-05-20 17:38:28 +08:00 |
|
long
|
ea8e6d7c1b
|
fix: switch asset token from file cache to database for reliability + always redirect on token invalid
|
2026-05-20 17:22:12 +08:00 |
|
Your Name
|
ba1c067dce
|
Merge branch 'master' into bug-5-20
|
2026-05-20 17:15:51 +08:00 |
|
Your Name
|
5e96fda88f
|
更新
|
2026-05-20 17:14:27 +08:00 |
|
long
|
076cd0fcf9
|
fix: add changePassword to notNeedLogin for asset token auth
|
2026-05-20 17:13:26 +08:00 |
|
long
|
44e97861d2
|
fix: use OSS direct upload for video and audio in resource admin
|
2026-05-20 16:59:19 +08:00 |
|
Your Name
|
93e6d02ce4
|
更新
|
2026-05-20 16:53:19 +08:00 |
|
long
|
60cb2b80cd
|
feat: add dedicated change password api and fix token expire code
|
2026-05-20 16:53:08 +08:00 |
|