refactor: ES6+ modernization + 2 bugfixes

- var→const/let, function→arrow/class across all 13 JS files
- Timer: prototype→class with ES6 getters
- plan days: IIFE→Array.from declarative generation
- storage/plan: unified formatDate via util.js
- Bugfix: getPlanDay now filters by planId (plan switch accuracy)
- Bugfix: getTodayRecord searches all months (cross-month boundary)
- WXML/WXSS unchanged; public API unchanged
This commit is contained in:
2026-06-04 16:29:25 +08:00
parent ff2700c067
commit 8c7f633541
13 changed files with 404 additions and 494 deletions
+27 -48
View File
@@ -1,73 +1,52 @@
var plans = {
const { formatDate } = require('./util')
const plans = {
beginner: {
id: 'beginner',
name: '初级 (7天)',
totalDays: 7,
description: '适合初学者,从30秒起步',
days: [
{ day: 1, target: 30 },
{ day: 2, target: 40 },
{ day: 3, target: 50 },
{ day: 4, target: 60 },
{ day: 5, target: 70 },
{ day: 6, target: 80 },
{ day: 7, target: 90 }
]
days: Array.from({ length: 7 }, (_, i) => ({ day: i + 1, target: 30 + i * 10 }))
},
intermediate: {
id: 'intermediate',
name: '中级 (14天)',
totalDays: 14,
description: '有一定基础,从60秒起步',
days: [
{ day: 1, target: 60 }, { day: 2, target: 60 },
{ day: 3, target: 75 }, { day: 4, target: 75 },
{ day: 5, target: 90 }, { day: 6, target: 90 },
{ day: 7, target: 105 }, { day: 8, target: 105 },
{ day: 9, target: 120 }, { day: 10, target: 120 },
{ day: 11, target: 135 }, { day: 12, target: 135 },
{ day: 13, target: 150 }, { day: 14, target: 150 }
]
days: Array.from({ length: 14 }, (_, i) => {
const pair = Math.floor(i / 2)
return { day: i + 1, target: 60 + pair * 15 }
})
},
advanced: {
id: 'advanced',
name: '高级 (30天)',
totalDays: 30,
description: '挑战自我,从90秒起步',
days: (function () {
var arr = []
for (var i = 1; i <= 30; i++) {
arr.push({ day: i, target: 90 + Math.floor((i - 1) / 3) * 15 })
}
return arr
})()
days: Array.from({ length: 30 }, (_, i) => ({
day: i + 1,
target: 90 + Math.floor(i / 3) * 15
}))
}
}
function getPlan(planId) {
return plans[planId] || plans.beginner
const getPlan = (planId) => plans[planId] || plans.beginner
const getTodayTarget = (planId, currentDay) => {
const plan = getPlan(planId)
const day = plan.days.find(d => d.day === currentDay)
return day ? day.target : plan.days[0].target
}
function getTodayTarget(planId, currentDay) {
var plan = getPlan(planId)
for (var i = 0; i < plan.days.length; i++) {
if (plan.days[i].day === currentDay) return plan.days[i].target
}
return plan.days[0].target
}
function getPlanDay(planId, records) {
var plan = getPlan(planId)
var now = new Date()
var today = now.getFullYear() + '-' +
('0' + (now.getMonth() + 1)).slice(-2) + '-' +
('0' + now.getDate()).slice(-2)
var dates = {}
records.forEach(function (r) {
if (r.date !== today) dates[r.date] = true
})
var trainedDays = Object.keys(dates).length
const getPlanDay = (planId, records) => {
const plan = getPlan(planId)
const today = formatDate(new Date())
const trainedDays = new Set(
records
.filter(r => r.date !== today && r.planId === planId)
.map(r => r.date)
).size
return Math.min(trainedDays + 1, plan.totalDays)
}
module.exports = { plans: plans, getPlan: getPlan, getTodayTarget: getTodayTarget, getPlanDay: getPlanDay }
module.exports = { plans, getPlan, getTodayTarget, getPlanDay }