feat(FamilyRank): 在排名卡片中显示步数并优化样式
添加步数显示到排名卡片中,使用千位分隔符格式化数字 重构排名卡片布局,调整高度和样式以更好展示信息 新增 formatStepsForList 方法用于列表中的步数格式化
Showing
1 changed file
with
44 additions
and
18 deletions
| 1 | <!-- | 1 | <!-- |
| 2 | * @Date: 2025-09-01 13:07:52 | 2 | * @Date: 2025-09-01 13:07:52 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-09-01 13:43:56 | 4 | + * @LastEditTime: 2025-09-01 14:46:59 |
| 5 | * @FilePath: /lls_program/src/pages/FamilyRank/index.vue | 5 | * @FilePath: /lls_program/src/pages/FamilyRank/index.vue |
| 6 | * @Description: 文件描述 | 6 | * @Description: 文件描述 |
| 7 | --> | 7 | --> |
| ... | @@ -39,7 +39,10 @@ | ... | @@ -39,7 +39,10 @@ |
| 39 | </view> | 39 | </view> |
| 40 | <view class="family-name">{{ topRanks[1]?.familyName }}</view> | 40 | <view class="family-name">{{ topRanks[1]?.familyName }}</view> |
| 41 | <view class="leader-name">大家长:{{ topRanks[1]?.leaderName }}</view> | 41 | <view class="leader-name">大家长:{{ topRanks[1]?.leaderName }}</view> |
| 42 | - <view class="rank-number">2</view> | 42 | + <view class="rank-number"> |
| 43 | + <view class="rank-num">2</view> | ||
| 44 | + <view class="steps-in-rank">{{ formatSteps(topRanks[1]?.steps) }}</view> | ||
| 45 | + </view> | ||
| 43 | </view> | 46 | </view> |
| 44 | 47 | ||
| 45 | <!-- 第一名 --> | 48 | <!-- 第一名 --> |
| ... | @@ -50,7 +53,10 @@ | ... | @@ -50,7 +53,10 @@ |
| 50 | </view> | 53 | </view> |
| 51 | <view class="family-name">{{ topRanks[0]?.familyName }}</view> | 54 | <view class="family-name">{{ topRanks[0]?.familyName }}</view> |
| 52 | <view class="leader-name">大家长:{{ topRanks[0]?.leaderName }}</view> | 55 | <view class="leader-name">大家长:{{ topRanks[0]?.leaderName }}</view> |
| 53 | - <view class="rank-number">1</view> | 56 | + <view class="rank-number"> |
| 57 | + <view class="rank-num">1</view> | ||
| 58 | + <view class="steps-in-rank">{{ formatSteps(topRanks[0]?.steps) }}</view> | ||
| 59 | + </view> | ||
| 54 | </view> | 60 | </view> |
| 55 | 61 | ||
| 56 | <!-- 第三名 --> | 62 | <!-- 第三名 --> |
| ... | @@ -61,7 +67,10 @@ | ... | @@ -61,7 +67,10 @@ |
| 61 | </view> | 67 | </view> |
| 62 | <view class="family-name">{{ topRanks[2]?.familyName }}</view> | 68 | <view class="family-name">{{ topRanks[2]?.familyName }}</view> |
| 63 | <view class="leader-name">大家长:{{ topRanks[2]?.leaderName }}</view> | 69 | <view class="leader-name">大家长:{{ topRanks[2]?.leaderName }}</view> |
| 64 | - <view class="rank-number">3</view> | 70 | + <view class="rank-number"> |
| 71 | + <view class="rank-num">3</view> | ||
| 72 | + <view class="steps-in-rank">{{ formatSteps(topRanks[2]?.steps) }}</view> | ||
| 73 | + </view> | ||
| 65 | </view> | 74 | </view> |
| 66 | </view> | 75 | </view> |
| 67 | 76 | ||
| ... | @@ -83,7 +92,7 @@ | ... | @@ -83,7 +92,7 @@ |
| 83 | </view> | 92 | </view> |
| 84 | </view> | 93 | </view> |
| 85 | <view class="steps-info"> | 94 | <view class="steps-info"> |
| 86 | - <view class="steps">{{ formatSteps(item.steps) }}</view> | 95 | + <view class="steps">{{ formatStepsForList(item.steps) }}</view> |
| 87 | </view> | 96 | </view> |
| 88 | </view> | 97 | </view> |
| 89 | </view> | 98 | </view> |
| ... | @@ -103,7 +112,7 @@ | ... | @@ -103,7 +112,7 @@ |
| 103 | </view> | 112 | </view> |
| 104 | </view> | 113 | </view> |
| 105 | <view class="my-rank-right"> | 114 | <view class="my-rank-right"> |
| 106 | - <view class="my-steps">{{ formatSteps(myRank.steps) }}</view> | 115 | + <view class="my-steps">{{ formatStepsForList(myRank.steps) }}</view> |
| 107 | <view class="rank-status">{{ myRank.status }}</view> | 116 | <view class="rank-status">{{ myRank.status }}</view> |
| 108 | </view> | 117 | </view> |
| 109 | </view> | 118 | </view> |
| ... | @@ -131,12 +140,16 @@ const switchTab = (tab) => { | ... | @@ -131,12 +140,16 @@ const switchTab = (tab) => { |
| 131 | * @returns {string} 格式化后的步数 | 140 | * @returns {string} 格式化后的步数 |
| 132 | */ | 141 | */ |
| 133 | const formatSteps = (steps) => { | 142 | const formatSteps = (steps) => { |
| 134 | - if (steps >= 10000) { | 143 | + return steps ? steps.toLocaleString() : '0' |
| 135 | - return (steps / 10000).toFixed(1) + 'w' | 144 | +} |
| 136 | - } else if (steps >= 1000) { | 145 | + |
| 137 | - return (steps / 1000).toFixed(1) + 'k' | 146 | +/** |
| 138 | - } | 147 | + * 格式化步数显示(用于列表显示,使用千位分隔符格式) |
| 139 | - return steps.toString() | 148 | + * @param {number} steps - 步数 |
| 149 | + * @returns {string} 格式化后的步数 | ||
| 150 | + */ | ||
| 151 | +const formatStepsForList = (steps) => { | ||
| 152 | + return steps ? steps.toLocaleString() : '0' | ||
| 140 | } | 153 | } |
| 141 | 154 | ||
| 142 | // 前三名数据 | 155 | // 前三名数据 |
| ... | @@ -328,15 +341,28 @@ const myRank = ref({ | ... | @@ -328,15 +341,28 @@ const myRank = ref({ |
| 328 | width: 160rpx; | 341 | width: 160rpx; |
| 329 | height: 200rpx; | 342 | height: 200rpx; |
| 330 | display: flex; | 343 | display: flex; |
| 344 | + flex-direction: column; | ||
| 331 | align-items: center; | 345 | align-items: center; |
| 332 | justify-content: center; | 346 | justify-content: center; |
| 333 | - font-size: 48rpx; | ||
| 334 | - font-weight: bold; | ||
| 335 | - color: white; | ||
| 336 | position: relative; | 347 | position: relative; |
| 337 | background: linear-gradient(135deg, #4A90E2 0%, #357ABD 100%); | 348 | background: linear-gradient(135deg, #4A90E2 0%, #357ABD 100%); |
| 338 | border-radius: 20rpx 20rpx 0 0; | 349 | border-radius: 20rpx 20rpx 0 0; |
| 339 | box-shadow: 0 8rpx 16rpx rgba(0, 0, 0, 0.2); | 350 | box-shadow: 0 8rpx 16rpx rgba(0, 0, 0, 0.2); |
| 351 | + | ||
| 352 | + .rank-num { | ||
| 353 | + font-size: 48rpx; | ||
| 354 | + font-weight: bold; | ||
| 355 | + color: white; | ||
| 356 | + margin-bottom: 12rpx; | ||
| 357 | + } | ||
| 358 | + | ||
| 359 | + .steps-in-rank { | ||
| 360 | + font-size: 35rpx; | ||
| 361 | + font-weight: 600; | ||
| 362 | + color: white; | ||
| 363 | + text-align: center; | ||
| 364 | + line-height: 1.2; | ||
| 365 | + } | ||
| 340 | } | 366 | } |
| 341 | 367 | ||
| 342 | &.second { | 368 | &.second { |
| ... | @@ -351,7 +377,7 @@ const myRank = ref({ | ... | @@ -351,7 +377,7 @@ const myRank = ref({ |
| 351 | 377 | ||
| 352 | .rank-number { | 378 | .rank-number { |
| 353 | width: 220rpx; | 379 | width: 220rpx; |
| 354 | - height: 180rpx; | 380 | + height: 200rpx; |
| 355 | background: linear-gradient(135deg, #C0C0C0 0%, #A0A0A0 100%); | 381 | background: linear-gradient(135deg, #C0C0C0 0%, #A0A0A0 100%); |
| 356 | } | 382 | } |
| 357 | } | 383 | } |
| ... | @@ -369,7 +395,7 @@ const myRank = ref({ | ... | @@ -369,7 +395,7 @@ const myRank = ref({ |
| 369 | 395 | ||
| 370 | .rank-number { | 396 | .rank-number { |
| 371 | width: 220rpx; | 397 | width: 220rpx; |
| 372 | - height: 240rpx; | 398 | + height: 260rpx; |
| 373 | background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%); | 399 | background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%); |
| 374 | } | 400 | } |
| 375 | } | 401 | } |
| ... | @@ -386,7 +412,7 @@ const myRank = ref({ | ... | @@ -386,7 +412,7 @@ const myRank = ref({ |
| 386 | 412 | ||
| 387 | .rank-number { | 413 | .rank-number { |
| 388 | width: 220rpx; | 414 | width: 220rpx; |
| 389 | - height: 160rpx; | 415 | + height: 180rpx; |
| 390 | background: linear-gradient(135deg, #CD7F32 0%, #B8860B 100%); | 416 | background: linear-gradient(135deg, #CD7F32 0%, #B8860B 100%); |
| 391 | } | 417 | } |
| 392 | } | 418 | } | ... | ... |
-
Please register or login to post a comment