From 9b6d9ce00700331bd0b50ff6fdf3644542ad8a38 Mon Sep 17 00:00:00 2001 From: long <452591453@qq.com> Date: Mon, 25 May 2026 12:18:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor(metronome):=20=E6=95=B4=E4=BD=93?= =?UTF-8?q?=E8=A7=86=E8=A7=89=E9=87=8D=E8=AE=BE=E8=AE=A1=20-=20=E7=8E=B0?= =?UTF-8?q?=E4=BB=A3=E6=9E=81=E7=AE=80=E9=A3=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 脚印拟真化: - 颜色 鲜绿 → 浅白(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 --- TUICallKit-Vue3/pages/training/metronome.vue | 621 +++++++++++-------- 1 file changed, 354 insertions(+), 267 deletions(-) diff --git a/TUICallKit-Vue3/pages/training/metronome.vue b/TUICallKit-Vue3/pages/training/metronome.vue index 3a0aaa50..50c9b96b 100644 --- a/TUICallKit-Vue3/pages/training/metronome.vue +++ b/TUICallKit-Vue3/pages/training/metronome.vue @@ -1,15 +1,13 @@ @@ -89,9 +97,9 @@ import { onShow, onHide } from '@dcloudio/uni-app' import { useMetronome } from '@/hooks/useMetronome' const METER_OPTIONS = [ - { label: '2 拍', value: 2 }, - { label: '3 拍', value: 3 }, - { label: '4 拍', value: 4 }, + { label: '2', value: 2 }, + { label: '3', value: 3 }, + { label: '4', value: 4 }, ] const metronome = useMetronome({ @@ -142,16 +150,22 @@ const statusHint = computed(() => { const cur = ((beatIndex.value - 1) % accentEvery.value) + 1 return `第 ${cur} 拍 / 共 ${accentEvery.value} 拍` } - return '轻点圆圈开始' + return '轻点中央圆点开始' }) const walkerTip = computed(() => { - if (!isPlaying.value) return '开始后跟节奏踏步' - if (bpm.value < 70) return '慢走 · 适合热身' - if (bpm.value < 100) return '健走 · 日常配速' - if (bpm.value < 130) return '快走 · 心率提升' - if (bpm.value < 170) return '慢跑 · 进入有氧' - return '快跑 · 高强度' + if (bpm.value < 70) return '慢走 · 热身' + if (bpm.value < 100) return '健走 · 日常' + if (bpm.value < 130) return '快走 · 提速' + if (bpm.value < 170) return '慢跑 · 有氧' + return '快跑 · 高强' +}) + +const badgeClass = computed(() => { + if (bpm.value < 100) return 'badge-mild' + if (bpm.value < 130) return 'badge-mid' + if (bpm.value < 170) return 'badge-strong' + return 'badge-hot' }) onShow(() => { @@ -171,52 +185,73 @@ onUnmounted(() => {