feat(ui): 记录页月份联动与多项 UI 美化/修复
- records: 底部列表与月份选择器联动,新增 [本月|最近] 分段控件;标题/空态随模式切换 - leaderboard: 领奖台布局(冠军居中+皇冠)、次数标注于底座且三档水平对齐;头像 cloud:// 批量预解析提速(云函数需重新部署) - index/timer: 主色底图标改白色变体修复隐形;目标数字按微信字体缩放补偿真机遮挡 - settings: 配色方案横滑渐变色卡;头像上传前压缩至 200px - theme: 新增 teal 主题;暗黑背景统一对齐 - 圆形头像双保险(image 自身 border-radius)修复月/年榜方图 注: cloudfunctions/leaderboard 改动须在开发者工具重新部署才生效。
This commit is contained in:
@@ -17,6 +17,7 @@ Page({
|
||||
currentMonth: new Date().getMonth() + 1,
|
||||
monthRecords: [],
|
||||
historyList: [],
|
||||
listMode: 'month',
|
||||
showDayDetail: false,
|
||||
dayDetail: {},
|
||||
icons: iconsMod.build()
|
||||
@@ -76,6 +77,8 @@ Page({
|
||||
maxDurationText: util.formatDuration(stats.maxDuration),
|
||||
monthRecords: records,
|
||||
historyList,
|
||||
listMode: this.data.listMode || 'month',
|
||||
displayList: (this.data.listMode || 'month') === 'month' ? records : historyList,
|
||||
loading: false
|
||||
})
|
||||
},
|
||||
@@ -104,6 +107,13 @@ Page({
|
||||
this.refresh()
|
||||
},
|
||||
|
||||
onToggleListMode(e) {
|
||||
const mode = e.currentTarget.dataset.mode
|
||||
if (!mode || mode === this.data.listMode) return
|
||||
this.setData({ listMode: mode })
|
||||
this.refresh()
|
||||
},
|
||||
|
||||
onDayTap(e) {
|
||||
const { year, month, day } = e.detail
|
||||
const dateStr = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`
|
||||
|
||||
@@ -75,22 +75,26 @@
|
||||
<view class="history-header">
|
||||
<view class="history-title-wrap">
|
||||
<image class="history-title-icon" src="{{icons.formFill}}" mode="aspectFit"></image>
|
||||
<text class="section-title">最近记录</text>
|
||||
<text class="section-title">{{listMode === 'month' ? currentYear + '年' + currentMonth + '月记录' : '最近记录'}}</text>
|
||||
</view>
|
||||
<view class="rec-seg">
|
||||
<view class="rec-seg-item {{listMode === 'month' ? 'active' : ''}}" data-mode="month" bindtap="onToggleListMode">本月</view>
|
||||
<view class="rec-seg-item {{listMode === 'recent' ? 'active' : ''}}" data-mode="recent" bindtap="onToggleListMode">最近</view>
|
||||
</view>
|
||||
<text class="history-hint" wx:if="{{historyList.length > 0}}">长按可删除</text>
|
||||
</view>
|
||||
<view wx:if="{{historyList.length === 0}}" class="empty-state">
|
||||
<text class="history-hint" wx:if="{{displayList.length > 0}}">长按可删除</text>
|
||||
<view wx:if="{{displayList.length === 0}}" class="empty-state">
|
||||
<view class="empty-illus">
|
||||
<view class="empty-illus-body"></view>
|
||||
<view class="empty-illus-arm empty-illus-arm--l"></view>
|
||||
<view class="empty-illus-arm empty-illus-arm--r"></view>
|
||||
<view class="empty-illus-bubble">开始</view>
|
||||
</view>
|
||||
<text class="empty-text">还没有训练记录</text>
|
||||
<text class="empty-sub">完成第一次训练,开启你的坚持!</text>
|
||||
<text class="empty-text">{{listMode === 'month' ? '本月还没有训练记录' : '还没有训练记录'}}</text>
|
||||
<text class="empty-sub">{{listMode === 'month' ? '换个有训练的月份看看吧' : '完成第一次训练,开启你的坚持!'}}</text>
|
||||
</view>
|
||||
<view class="history-list">
|
||||
<view class="history-item" wx:for="{{historyList}}" wx:key="id" data-id="{{item.id}}" bindlongpress="onLongPressDelete">
|
||||
<view class="history-item" wx:for="{{displayList}}" wx:key="id" data-id="{{item.id}}" bindlongpress="onLongPressDelete">
|
||||
<image class="history-item-icon"
|
||||
src="{{item.duration >= 120 ? icons.hotFill : item.duration >= 60 ? icons.likeFill : icons.roundCheckFill}}"
|
||||
mode="aspectFit"
|
||||
|
||||
@@ -109,6 +109,32 @@
|
||||
.history-hint {
|
||||
font-size: 22rpx;
|
||||
color: var(--text-secondary);
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
|
||||
/* segmented control: [本月 | 最近] in the records history header.
|
||||
Mirrors the .period-seg language used on the leaderboard/settings pages. */
|
||||
.rec-seg {
|
||||
display: flex;
|
||||
background: var(--bg-soft);
|
||||
border-radius: 999rpx;
|
||||
padding: 4rpx;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.rec-seg-item {
|
||||
padding: 8rpx 24rpx;
|
||||
font-size: 24rpx;
|
||||
color: var(--text-secondary);
|
||||
border-radius: 999rpx;
|
||||
transition: background 0.25s ease, color 0.25s ease, box-shadow 0.25s ease;
|
||||
}
|
||||
|
||||
.rec-seg-item.active {
|
||||
background: var(--card-bg);
|
||||
color: var(--primary);
|
||||
font-weight: 600;
|
||||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.10);
|
||||
}
|
||||
|
||||
.empty-state {
|
||||
@@ -256,7 +282,7 @@
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.day-detail-body {
|
||||
/* 暗黑下 body(#1C1C1E)与页面(#0F0F12)都偏深,加深阴影 + 微亮描边拉开层次 */
|
||||
/* 暗黑下 body(#26262B)与页面(#131316)都偏深,加深阴影 + 微亮描边拉开层次 */
|
||||
box-shadow: 0 16rpx 48rpx rgba(0, 0, 0, 0.6), 0 0 0 1rpx rgba(255, 255, 255, 0.06);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user