2026-04-18 17:16:49 +08:00
|
|
|
<view class="page">
|
|
|
|
|
<scroll-view scroll-y class="content">
|
|
|
|
|
<view class="heading">
|
|
|
|
|
<text class="title">成就墙</text>
|
|
|
|
|
<text class="subtitle">把你的每一次坚持都挂在墙上</text>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view class="hero-card">
|
|
|
|
|
<view class="hero-glow"></view>
|
|
|
|
|
<view class="hero-row">
|
|
|
|
|
<view>
|
2026-04-19 11:56:49 +08:00
|
|
|
<text class="hero-num">{{unlocked}}</text>
|
|
|
|
|
<text class="hero-label">已点亮勋章 / {{total}}</text>
|
2026-04-18 17:16:49 +08:00
|
|
|
</view>
|
|
|
|
|
<view class="hero-badge">🏆</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
|
2026-04-19 11:56:49 +08:00
|
|
|
<view wx:if="{{loading}}" class="empty-state">
|
|
|
|
|
<text class="empty-title">加载中...</text>
|
|
|
|
|
<text class="empty-subtitle">正在同步成就数据</text>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view wx:elif="{{error}}" class="error-banner">
|
|
|
|
|
<text class="error-text">{{error}}</text>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view wx:elif="{{!list.length}}" class="empty-state">
|
|
|
|
|
<text class="empty-title">暂无成就</text>
|
|
|
|
|
<text class="empty-subtitle">继续复习和打卡后会逐渐解锁</text>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view wx:else class="grid">
|
|
|
|
|
<block wx:for="{{list}}" wx:key="id">
|
|
|
|
|
<view class="item {{item.is_unlocked ? 'accent-primary' : 'accent-secondary'}}">
|
|
|
|
|
<view class="item-icon">🏅</view>
|
|
|
|
|
<text class="item-title">{{item.achievement_name}}</text>
|
|
|
|
|
<text class="item-sub">{{item.progress_value}} / {{item.target_value}}</text>
|
|
|
|
|
</view>
|
|
|
|
|
</block>
|
2026-04-18 17:16:49 +08:00
|
|
|
</view>
|
|
|
|
|
</scroll-view>
|
|
|
|
|
</view>
|