160 lines
3.3 KiB
JavaScript
160 lines
3.3 KiB
JavaScript
// pages/countdown/countdown.js
|
|
const { getCountdown, showSuccess, showError } = require('../../utils/util.js')
|
|
const learningTracker = require('../../utils/learningTracker.js')
|
|
|
|
Page({
|
|
data: {
|
|
countdowns: [],
|
|
newEventName: '',
|
|
newEventDate: ''
|
|
},
|
|
|
|
onLoad() {
|
|
this.loadCountdowns()
|
|
},
|
|
|
|
onShow() {
|
|
// 开始跟踪学习时间
|
|
learningTracker.onPageShow('tools')
|
|
|
|
this.startTimer()
|
|
},
|
|
|
|
onHide() {
|
|
// 停止跟踪学习时间
|
|
learningTracker.onPageHide()
|
|
|
|
this.stopTimer()
|
|
},
|
|
|
|
onUnload() {
|
|
// 记录学习时长
|
|
learningTracker.onPageUnload()
|
|
|
|
this.stopTimer()
|
|
},
|
|
|
|
// 加载倒计时
|
|
loadCountdowns() {
|
|
let countdowns = wx.getStorageSync('countdowns') || []
|
|
|
|
// 默认示例数据
|
|
if (countdowns.length === 0) {
|
|
countdowns = [
|
|
{
|
|
id: 1,
|
|
name: '高等数学期末考试',
|
|
date: '2025-12-20',
|
|
color: '#FF6B6B'
|
|
},
|
|
{
|
|
id: 2,
|
|
name: '英语四级考试',
|
|
date: '2025-12-15',
|
|
color: '#4A90E2'
|
|
},
|
|
{
|
|
id: 3,
|
|
name: '课程设计答辩',
|
|
date: '2025-12-25',
|
|
color: '#50C878'
|
|
}
|
|
]
|
|
}
|
|
|
|
this.setData({ countdowns })
|
|
this.updateAllCountdowns()
|
|
},
|
|
|
|
// 开始定时器
|
|
startTimer() {
|
|
this.timer = setInterval(() => {
|
|
this.updateAllCountdowns()
|
|
}, 1000)
|
|
},
|
|
|
|
// 停止定时器
|
|
stopTimer() {
|
|
if (this.timer) {
|
|
clearInterval(this.timer)
|
|
this.timer = null
|
|
}
|
|
},
|
|
|
|
// 更新所有倒计时
|
|
updateAllCountdowns() {
|
|
const { countdowns } = this.data
|
|
const updated = countdowns.map(item => ({
|
|
...item,
|
|
...getCountdown(item.date)
|
|
}))
|
|
this.setData({ countdowns: updated })
|
|
},
|
|
|
|
// 事件名称输入
|
|
onNameInput(e) {
|
|
this.setData({ newEventName: e.detail.value })
|
|
},
|
|
|
|
// 日期选择
|
|
onDateChange(e) {
|
|
this.setData({ newEventDate: e.detail.value })
|
|
},
|
|
|
|
// 添加倒计时
|
|
onAddCountdown() {
|
|
const { newEventName, newEventDate, countdowns } = this.data
|
|
|
|
if (!newEventName.trim()) {
|
|
showError('请输入事件名称')
|
|
return
|
|
}
|
|
|
|
if (!newEventDate) {
|
|
showError('请选择日期')
|
|
return
|
|
}
|
|
|
|
const colors = ['#FF6B6B', '#4A90E2', '#50C878', '#F39C12', '#9B59B6']
|
|
|
|
const newCountdown = {
|
|
id: Date.now(),
|
|
name: newEventName.trim(),
|
|
date: newEventDate,
|
|
color: colors[Math.floor(Math.random() * colors.length)]
|
|
}
|
|
|
|
countdowns.push(newCountdown)
|
|
wx.setStorageSync('countdowns', countdowns)
|
|
|
|
this.setData({
|
|
countdowns,
|
|
newEventName: '',
|
|
newEventDate: ''
|
|
})
|
|
|
|
this.updateAllCountdowns()
|
|
showSuccess('添加成功')
|
|
},
|
|
|
|
// 删除倒计时
|
|
onDelete(e) {
|
|
const { id } = e.currentTarget.dataset
|
|
|
|
wx.showModal({
|
|
title: '确认删除',
|
|
content: '确定要删除这个倒计时吗?',
|
|
success: (res) => {
|
|
if (res.confirm) {
|
|
let { countdowns } = this.data
|
|
countdowns = countdowns.filter(item => item.id !== id)
|
|
wx.setStorageSync('countdowns', countdowns)
|
|
|
|
this.setData({ countdowns })
|
|
showSuccess('删除成功')
|
|
}
|
|
}
|
|
})
|
|
}
|
|
})
|