feat: 排行榜虚拟领奖台 + 勋章对齐与尺寸统一

- 领奖台数据不足 3 名时显示虚拟空位(虚线轮廓+虚位以待)
- 领奖台勋章与昵称对齐改为等高盒结构性修复(移除 margin 盲推)
- 全 app 成就勋章图标尺寸统一为 30rpx(前三名/列表/设置页/记录页一致)
- 勋章 SVG 按包围盒精确居中(utils/icons.js)
- 设置页/记录页勋章展示配套调整
This commit is contained in:
2026-08-04 11:23:48 +08:00
parent bce796d893
commit b52db87ddf
17 changed files with 690 additions and 67 deletions
+19 -1
View File
@@ -67,6 +67,7 @@ Page({
icons: iconsMod.build(),
nickName: '',
avatarUrl: '',
unlockedBadges: [],
// Dark mode
darkModePref: 'system',
darkModeOptions: [
@@ -125,10 +126,27 @@ Page({
plans: buildPlansList(storage.getCustomPlans()),
nickName: profile.nickname || '',
avatarUrl: profile.avatarUrl || '',
darkModePref: darkMod.getPref()
darkModePref: darkMod.getPref(),
// 已解锁勋章:个人资料昵称旁展示(主题色版,浅底可见)
unlockedBadges: this._getUnlockedBadges()
})
},
/**
* 已解锁勋章列表 = 累计去重训练日达到阈值的 badge。
* iconFill 是 icons.build 生成的主题色变体 keyicons.js PATHS.*Fill)。
*/
_getUnlockedBadges() {
try {
const totalDays = storage.getTotalStats().totalDays
return config.trainingDayBadges
.filter(b => totalDays >= b.days)
.map(b => ({ ...b, iconFill: b.icon + 'Fill' }))
} catch (e) {
return []
}
},
applyThemeToPage() {
themeMod.applyThemeToPage(this)
},