- detail 顶部 favbtn 浮窗(需避让胶囊、丑)移除,改为底部 addbar 内与 CTA 并排的方形按钮 - fc-icon 新增 filled 属性:收藏态实心心形(Lucide 描边图标默认 fill=none,filled=true 时 fill=stroke 变实心) - 收藏按钮美化:圆角 24rpx 方形 + 发丝边框,未收藏描边(text-2)、已收藏实心(accent)+ accent-soft 底色 + accent-ring 边框 + 点按 scale 反馈 - detail.js 清理 favRight/favTop 胶囊避让逻辑(不再需要)
82 lines
3.3 KiB
Plaintext
82 lines
3.3 KiB
Plaintext
<view class="page" wx:if="{{exercise}}">
|
||
<navbar title="{{exercise.displayName || exercise.name}}" show-back />
|
||
|
||
<view class="hero">
|
||
<image
|
||
wx:if="{{heroSrc && !heroError}}"
|
||
class="hero__img"
|
||
src="{{heroSrc}}"
|
||
mode="aspectFill"
|
||
lazy-load="true"
|
||
binderror="onHeroError" />
|
||
<view wx:else class="hero__ph"><fc-icon name="dumbbell" size="72" color="var(--text-3)" /></view>
|
||
<!-- 上层叠一个动图播放器:Canvas 逐帧播放 GIF(微信 image 不播 GIF) -->
|
||
<gif-player wx:if="{{heroGif}}" class="hero__gif" src="{{heroGif}}" />
|
||
</view>
|
||
|
||
<view class="body section">
|
||
<view class="name">{{exercise.displayName || exercise.name}}</view>
|
||
|
||
<view class="metas">
|
||
<view class="meta"><view class="meta__k">部位</view><view class="meta__v">{{exercise.bodyPartLabel}}</view></view>
|
||
<view class="meta"><view class="meta__k">器械</view><view class="meta__v">{{exercise.equipmentLabel}}</view></view>
|
||
<view class="meta"><view class="meta__k">目标</view><view class="meta__v gold-text">{{exercise.targetLabel}}</view></view>
|
||
<view class="meta"><view class="meta__k">类型</view><view class="meta__v">{{exercise.typeLabel}}</view></view>
|
||
</view>
|
||
|
||
<view class="block" wx:if="{{exercise.muscleGroupLabel}}">
|
||
<view class="block__h eyebrow">主要肌群</view>
|
||
<view class="chips">
|
||
<text class="tag tag--gold">{{exercise.muscleGroupLabel}}</text>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="block" wx:if="{{exercise.secondaryMusclesLabels.length}}">
|
||
<view class="block__h eyebrow">协同肌群</view>
|
||
<view class="chips">
|
||
<text wx:for="{{exercise.secondaryMusclesLabels}}" wx:key="*this" class="tag">{{item}}</text>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="block" wx:if="{{exercise.instructionSteps.zh.length}}">
|
||
<view class="block__h eyebrow">动作步骤</view>
|
||
<view class="steps">
|
||
<view class="step" wx:for="{{exercise.instructionSteps.zh}}" wx:key="index">
|
||
<view class="step__n">{{index + 1}}</view>
|
||
<view class="step__t">{{item}}</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="block" wx:if="{{exercise.instructions.zh}}">
|
||
<view class="block__h eyebrow">要点提示</view>
|
||
<view class="tips">{{exercise.instructions.zh}}</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="section" wx:if="{{related.length}}">
|
||
<view class="block__h eyebrow">相关推荐</view>
|
||
<scroll-view scroll-x class="hscroll">
|
||
<view class="hscroll__item" wx:for="{{related}}" wx:key="id">
|
||
<exercise-card exercise="{{item}}" compact catch:tap="onExercise" />
|
||
</view>
|
||
</scroll-view>
|
||
</view>
|
||
|
||
<view class="addbar">
|
||
<view class="addbar__inner">
|
||
<view class="fav {{favorited ? 'fav--on' : ''}}" hover-class="fav--hover" bindtap="onToggleFav">
|
||
<fc-icon name="heart" size="40" color="{{favorited ? 'var(--accent)' : 'var(--text-2)'}}" filled="{{favorited}}" />
|
||
</view>
|
||
<view class="cta" bindtap="onAdd">{{ planId ? '加入该计划' : '加入计划' }}</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view wx:else class="empty-page">
|
||
<view class="topbar" style="padding-top: {{statusBarHeight}}px;">
|
||
<view class="topbar__back" bindtap="onBack">‹</view>
|
||
</view>
|
||
<view class="empty">{{ loading ? '加载中…' : '未找到该动作' }}</view>
|
||
</view>
|