修复主题恢复与勋章状态
This commit is contained in:
@@ -3,6 +3,7 @@ const util = require('../../utils/util')
|
||||
const themeMod = require('../../utils/theme')
|
||||
const iconsMod = require('../../utils/icons')
|
||||
const config = require('../../config')
|
||||
const { getBadgeProgress, getBadgeCelebration } = require('../../utils/badge-state')
|
||||
|
||||
Page({
|
||||
data: {
|
||||
@@ -79,7 +80,6 @@ Page({
|
||||
const totalDays = stats.totalDays
|
||||
const badgeDefs = config.trainingDayBadges
|
||||
const n = badgeDefs.length
|
||||
const maxDays = badgeDefs[n - 1].days
|
||||
const TRACK_PAD = 4 // 首尾留白,保证首尾节点/标签不溢出
|
||||
const segWidth = n > 1 ? (100 - TRACK_PAD * 2) / (n - 1) : 0
|
||||
const posOf = (i) => TRACK_PAD + i * segWidth
|
||||
@@ -88,17 +88,7 @@ Page({
|
||||
unlocked: totalDays >= b.days,
|
||||
pos: Math.round(posOf(i) * 10) / 10
|
||||
}))
|
||||
let badgeProgress
|
||||
if (totalDays <= 0) {
|
||||
badgeProgress = 0
|
||||
} else if (totalDays >= maxDays) {
|
||||
badgeProgress = 100
|
||||
} else {
|
||||
let i = 0
|
||||
while (i < n - 1 && totalDays >= badgeDefs[i + 1].days) i++
|
||||
const ratio = (totalDays - badgeDefs[i].days) / (badgeDefs[i + 1].days - badgeDefs[i].days)
|
||||
badgeProgress = Math.round((posOf(i) + ratio * segWidth) * 10) / 10
|
||||
}
|
||||
const badgeProgress = getBadgeProgress(badgeDefs, totalDays)
|
||||
|
||||
// 单枚解锁庆祝反馈:对比持久化"已见解锁集合",只庆祝新增勋章。
|
||||
// 首次运行(无存储)仅初始化集合,避免老用户一打开就被历史勋章刷屏。
|
||||
@@ -319,9 +309,8 @@ Page({
|
||||
wx.setStorageSync(KEY, unlockedDays)
|
||||
return null
|
||||
}
|
||||
const prevSet = new Set(prev)
|
||||
const newly = unlockedDays.filter(d => !prevSet.has(d))
|
||||
wx.setStorageSync(KEY, unlockedDays)
|
||||
const { newly, seen } = getBadgeCelebration(prev, unlockedDays)
|
||||
wx.setStorageSync(KEY, seen)
|
||||
if (newly.length === 0) return null
|
||||
const names = newly.map(d => {
|
||||
const b = config.trainingDayBadges.find(x => x.days === d)
|
||||
|
||||
Reference in New Issue
Block a user