feat: 首页顶部加头像昵称问候 + 循环训练秒数步进改为±10

This commit is contained in:
2026-08-11 11:46:51 +08:00
parent ca1793b4c0
commit 938a7d1276
4 changed files with 58 additions and 20 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ module.exports = {
version: 'v3.2',
/** 最后更新日期,外显在设置页「关于」 */
updatedAt: '2026-08-04',
updatedAt: '2026-08-11',
/** 开发者名称 / 微信号,设置页点击可复制 */
developer: '三口一瓶',
+8 -1
View File
@@ -15,6 +15,10 @@ Page({
todayDone: false,
todayDuration: 0,
todayTargetText: '',
// 顶部问候区的用户资料(头像 + 昵称),来自 storage.getProfile()。
// 空则回退占位(人形图标 + "运动达人"),settings 改完回首页即刷新。
nickName: '',
avatarUrl: '',
// Ring number font size in rpx. WeChat auto-scales text by the user's
// font-size setting (fontSizeScaleFactor) but does NOT scale rpx box
// dimensions — so on a real device with enlarged system font the 84rpx
@@ -153,6 +157,7 @@ Page({
// 分段格子(每天一格)只在计划天数 <= 10 时用;更长则退化为里程碑连续条,避免格子过密
const useSegments = plan.totalDays > 0 && plan.totalDays <= 10
const planDays = useSegments ? Array.from({ length: plan.totalDays }, (_, i) => i) : []
const profile = storage.getProfile()
this.setData({
theme,
icons: iconsMod.build(theme),
@@ -166,7 +171,9 @@ Page({
planTotal: plan.totalDays,
planProgress,
useSegments,
planDays
planDays,
nickName: profile.nickname || '',
avatarUrl: profile.avatarUrl || ''
})
},
+16 -9
View File
@@ -1,12 +1,19 @@
<view class="container page-enter" style="{{themeStyle}}">
<!-- 顶部问候 -->
<!-- 顶部问候:头像 + "昵称,准备好了吗?" -->
<view class="greeting-row">
<view class="greeting-text">
<image class="greeting-icon" src="{{todayDone ? icons.successFill : icons.emojiFill}}" mode="aspectFit"></image>
<text class="greeting-title">{{todayDone ? '太棒了!' : '准备好了吗?'}}</text>
<!-- 圆形头像:无头像时回退人形图标占位 -->
<view class="greeting-avatar {{avatarUrl ? 'has-avatar' : ''}}">
<image
class="greeting-avatar-img"
src="{{avatarUrl || icons.peopleFill}}"
mode="{{avatarUrl ? 'aspectFill' : 'aspectFit'}}"
></image>
</view>
<view class="greeting-main">
<text class="greeting-title">{{nickName || '运动达人'}}{{todayDone ? '太棒了!' : '准备好了吗?'}}</text>
<text class="greeting-sub">{{todayDone ? '继续保持这个势头' : '今天的平板支撑等着你'}}</text>
</view>
<text class="greeting-sub">{{todayDone ? '继续保持这个势头' : '今天的平板支撑等着你'}}</text>
</view>
<!-- 连续打卡卡片:火焰连胜 + 分段进度 -->
@@ -172,9 +179,9 @@
<view class="circuit-row">
<text class="circuit-row-label">每组时长</text>
<view class="stepper">
<view class="stepper-btn" data-field="hold" data-delta="-5" bindtap="onCircuitStep"></view>
<view class="stepper-btn" data-field="hold" data-delta="-10" bindtap="onCircuitStep"></view>
<text class="stepper-val">{{cHold}}秒</text>
<view class="stepper-btn" data-field="hold" data-delta="5" bindtap="onCircuitStep">+</view>
<view class="stepper-btn" data-field="hold" data-delta="10" bindtap="onCircuitStep">+</view>
</view>
</view>
@@ -190,9 +197,9 @@
<view class="circuit-row">
<text class="circuit-row-label">组间休息</text>
<view class="stepper">
<view class="stepper-btn" data-field="rest" data-delta="-5" bindtap="onCircuitStep"></view>
<view class="stepper-btn" data-field="rest" data-delta="-10" bindtap="onCircuitStep"></view>
<text class="stepper-val">{{cRest}}秒</text>
<view class="stepper-btn" data-field="rest" data-delta="5" bindtap="onCircuitStep">+</view>
<view class="stepper-btn" data-field="rest" data-delta="10" bindtap="onCircuitStep">+</view>
</view>
</view>
+33 -9
View File
@@ -1,33 +1,57 @@
/* ---- greeting ---- */
.greeting-row {
display: flex;
align-items: center;
gap: 20rpx;
padding: 16rpx 8rpx 24rpx;
animation: cardIn 0.4s ease both;
}
.greeting-text {
/* 圆形头像:外层 overflow:hidden + 内层 image border-radius:50% 双保险,
避免远程(cloud://)头像裁不出圆角而露直角。无头像时显示人形图标占位,
加浅色底让占位更有质感;有头像时去掉底,避免深色头像边缘露白缝。 */
.greeting-avatar {
width: 88rpx;
height: 88rpx;
flex-shrink: 0;
border-radius: 50%;
overflow: hidden;
background: var(--bg-soft);
display: flex;
align-items: center;
margin-bottom: 8rpx;
justify-content: center;
}
.greeting-icon {
width: 44rpx;
height: 44rpx;
margin-right: 12rpx;
.greeting-avatar-img {
width: 100%;
height: 100%;
border-radius: 50%;
display: block;
}
.greeting-avatar.has-avatar {
background: transparent;
}
.greeting-main {
flex: 1;
min-width: 0;
}
.greeting-title {
display: block;
font-size: 40rpx;
font-weight: 700;
color: var(--text);
line-height: 1.2;
line-height: 1.3;
}
.greeting-sub {
display: block;
font-size: 26rpx;
color: var(--text-secondary);
margin-left: 60rpx;
line-height: 1;
margin-top: 4rpx;
line-height: 1.2;
}
/* ---- header card ---- */