var Timer = require('../../utils/timer') var storage = require('../../utils/storage') var planMod = require('../../utils/plan') var themeMod = require('../../utils/theme') Page({ data: { theme: { primary: '#FF6B35', primaryLight: '#FF8C5A', primaryBg: '#FFF3ED', primaryRgb: '255,107,53' }, themeStyle: '', duration: 60, remaining: 60, status: 'idle', isRunning: false, isPaused: false, isCompleted: false, overtime: 0, todayTarget: 0, planDay: 1, isFreeMode: false }, onLoad: function (options) { themeMod.applyThemeToPage(this) var target var planDay = 1 var isFreeMode = false if (options && options.free) { target = parseInt(options.free) || 60 isFreeMode = true } else { var settings = storage.getSettings() var records = [] var allRecords = storage.getRecords() Object.keys(allRecords).forEach(function (key) { records = records.concat(allRecords[key]) }) var plan = planMod.getPlan(settings.planId) planDay = planMod.getPlanDay(settings.planId, records) target = planMod.getTodayTarget(settings.planId, Math.min(planDay, plan.totalDays)) } this.setData({ duration: target, remaining: target, todayTarget: target, planDay: isFreeMode ? 0 : Math.min(planDay, 99), isFreeMode: isFreeMode }) var self = this this._timer = new Timer({ onTick: function (tick) { self.setData({ remaining: tick.remaining > 0 ? tick.remaining : 0, overtime: tick.remaining <= 0 ? tick.elapsed - self.data.duration : 0 }) }, onComplete: function () { self.setData({ status: 'completed', isCompleted: true }) if (storage.getSettings().vibrate) { try { wx.vibrateLong() } catch (e) {} } wx.showToast({ title: '目标完成! 太棒了!', icon: 'success', duration: 2000 }) } }) }, onUnload: function () { if (this._timer) this._timer.stop() }, onStart: function () { if (this.data.isPaused) { this._timer.resume() this.setData({ isRunning: true, isPaused: false, status: 'running' }) return } if (this.data.isRunning) return this._timer.start(this.data.duration) this.setData({ isRunning: true, status: 'running' }) }, onPause: function () { if (!this.data.isRunning || this.data.isPaused) return this._timer.pause() this.setData({ isPaused: true, status: 'paused' }) }, onStop: function () { var self = this wx.showModal({ title: '结束训练', content: '确定要结束本次训练吗?', success: function (res) { if (res.confirm) self.finishTraining() } }) }, finishTraining: function () { var elapsed = this._timer.stop() var today = storage.getToday() storage.saveRecord({ date: today, duration: elapsed, planId: storage.getSettings().planId, day: this.data.planDay }) storage.updateStreak(today) wx.showToast({ title: '已记录 ' + elapsed + '秒', icon: 'none', duration: 1500 }) setTimeout(function () { wx.navigateBack() }, 1500) } })