feat(ui): 记录页月份联动与多项 UI 美化/修复
- records: 底部列表与月份选择器联动,新增 [本月|最近] 分段控件;标题/空态随模式切换 - leaderboard: 领奖台布局(冠军居中+皇冠)、次数标注于底座且三档水平对齐;头像 cloud:// 批量预解析提速(云函数需重新部署) - index/timer: 主色底图标改白色变体修复隐形;目标数字按微信字体缩放补偿真机遮挡 - settings: 配色方案横滑渐变色卡;头像上传前压缩至 200px - theme: 新增 teal 主题;暗黑背景统一对齐 - 圆形头像双保险(image 自身 border-radius)修复月/年榜方图 注: cloudfunctions/leaderboard 改动须在开发者工具重新部署才生效。
This commit is contained in:
+6
-1
@@ -75,6 +75,9 @@ const getPlan = (planId, customPlans) => {
|
||||
|
||||
const getTodayTarget = (planId, currentDay) => {
|
||||
const plan = getPlan(planId)
|
||||
// 防御:计划数据损坏(planId 无效 / days 为空)时直接返回 0,
|
||||
// 避免 plan.days[0] 为 undefined 后访问 .target 抛出崩溃。
|
||||
if (!plan.days || plan.days.length === 0) return 0
|
||||
const day = plan.days.find(d => d.day === currentDay)
|
||||
return day ? day.target : plan.days[0].target
|
||||
}
|
||||
@@ -95,7 +98,9 @@ const getPlanDay = (planId, records, planStartDate, customPlans) => {
|
||||
return true
|
||||
})
|
||||
|
||||
const trainedDays = new Set(eligibleRecords.map(r => r.date)).size
|
||||
// 用 dateOnly 去重:r.date 带时分秒,同一天多次训练必须算作"1 天",
|
||||
// 否则会被当成分属两天而错误跳过计划进度。
|
||||
const trainedDays = new Set(eligibleRecords.map(r => dateOnly(r.date))).size
|
||||
return Math.min(trainedDays + 1, plan.totalDays)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user