const store = require('../../utils/store.js'); const api = require('../../utils/api.js'); function todayStr() { const d = new Date(); const p = (n) => (n < 10 ? '0' + n : '' + n); return d.getFullYear() + '-' + p(d.getMonth() + 1) + '-' + p(d.getDate()); } function mapTask(t) { return { id: t.id, title: t.title, sub: t.description, priority: t.priority, done: t.done, sheet: t.sheet_type, }; } Page({ data: { pet: {}, summary: { greeting: '', insights: [], week: [], advice: '', health_pct: 0, health_status: '正常' }, tasks: [], firstArticle: null, selectedDate: '', taskLabel: '今日任务', todayDate: '', sheetShow: false, sheetType: '', }, onLoad() { this.setData({ todayDate: todayStr() }); this._unsub = store.subscribe((pet) => { this.setData({ pet }); this.loadAll(); }); }, onUnload() { if (this._unsub) this._unsub(); }, onShow() { if (typeof this.getTabBar === 'function' && this.getTabBar()) { this.getTabBar().setData({ selected: 0 }); } store .ready() .then(() => { this.setData({ pet: store.getPet() }); this.loadAll(); }) .catch((e) => wx.showToast({ title: e.message || '加载失败', icon: 'none' })); }, loadAll() { this.loadSummary(); this.loadTasks(); if (!this.data.firstArticle) { api .listArticles() .then((list) => { if (list && list[0]) { this.setData({ firstArticle: { icon: list[0].icon, title: list[0].title, desc: list[0].description } }); } }) .catch(() => {}); } }, loadSummary() { const id = store.currentPetId(); if (!id) return; api .homeSummary(id) .then((summary) => this.setData({ summary })) .catch(() => {}); }, loadTasks() { const id = store.currentPetId(); if (!id) return; const date = this.data.selectedDate || this.data.todayDate; api .getTasks(id, date) .then((tasks) => this.setData({ tasks: (tasks || []).map(mapTask) })) .catch(() => {}); }, onTapDay(e) { const { date, active } = e.currentTarget.dataset; if (!date) return; const parts = date.split('-'); this.setData({ selectedDate: date, taskLabel: active ? '今日任务' : +parts[1] + '月' + +parts[2] + '日', }); this.loadTasks(); }, backToToday() { this.setData({ selectedDate: this.data.todayDate, taskLabel: '今日任务' }); this.loadTasks(); }, onTapTask(e) { const i = e.currentTarget.dataset.index; const t = this.data.tasks[i]; if (t.sheet) { this.openSheetType(t.sheet); return; } api .toggleTask(t.id) .then((res) => { this.setData({ [`tasks[${i}].done`]: res.done }); this.loadSummary(); }) .catch(() => {}); }, completeTasks() { const id = store.currentPetId(); if (!id) return; api .completeAllTasks(id) .then((tasks) => { this.setData({ tasks: (tasks || []).map(mapTask) }); this.loadSummary(); }) .catch(() => {}); }, openSheet(e) { this.openSheetType(e.currentTarget.dataset.type); }, openSheetType(type) { this.setData({ sheetType: type, sheetShow: true }); }, closeSheet() { this.setData({ sheetShow: false }); this.loadAll(); }, onSheetSave() {}, onAddPet() { this.openSheetType('addPet'); }, onEditPet() { this.openSheetType('editPet'); }, onFab() { this.openSheetType('ai'); }, goProfile() { wx.navigateTo({ url: '/pages/profile/profile' }); }, goLearn() { wx.navigateTo({ url: '/pages/learn/learn' }); }, goRecord() { wx.switchTab({ url: '/pages/record/record' }); }, });