Files
sundynix-plant-mp/pages/tasks/index.js
T
2026-02-04 14:02:31 +08:00

100 lines
2.8 KiB
JavaScript

// pages/tasks/index.js
import { MOCK_TASKS_DATA } from '../../utils/mockData';
Page({
data: {
tasks: [],
groupedTasks: [],
progress: 0,
completingTask: null,
remark: ''
},
onLoad() {
this.setData({ tasks: MOCK_TASKS_DATA });
this.processTasks();
},
onShow() {
if (typeof this.getTabBar === 'function' &&
this.getTabBar()) {
this.getTabBar().setData({ selected: 1 });
}
},
processTasks() {
const { tasks } = this.data;
// Calculate Progress (Simulated)
const completedCount = 3; // Mocked existing completed
const initialTotal = MOCK_TASKS_DATA.length + completedCount;
const currentCompleted = completedCount + (MOCK_TASKS_DATA.length - tasks.length);
const progress = Math.min(100, Math.round((currentCompleted / initialTotal) * 100));
// Grouping
const groups = {};
tasks.forEach(task => {
if (!groups[task.plantName]) {
groups[task.plantName] = {
plantName: task.plantName,
plantImage: task.plantImage,
tasks: [],
hasOverdue: false
};
}
groups[task.plantName].tasks.push(task);
if (task.isOverdue) groups[task.plantName].hasOverdue = true;
});
// Sorting
const sortedGroups = Object.values(groups).sort((a, b) => {
if (a.hasOverdue && !b.hasOverdue) return -1;
if (!a.hasOverdue && b.hasOverdue) return 1;
return 0;
});
this.setData({
groupedTasks: sortedGroups,
progress
});
},
handleTaskClick(e) {
// e.currentTarget.dataset.task might differ if TDesign changes event structure,
// but 'data-task' on t-button works similarly in Miniprogram.
const task = e.currentTarget.dataset.task;
this.setData({
completingTask: task,
remark: ''
});
},
onPopupVisibleChange(e) {
// Handle both TDesign event and manual close tap
const visible = e.detail ? e.detail.visible : e.currentTarget.dataset.visible;
if (!visible) {
this.setData({ completingTask: null });
}
},
onRemarkInput(e) {
this.setData({ remark: e.detail.value });
},
handleConfirmComplete() {
if (!this.data.completingTask) return;
const taskId = this.data.completingTask.id;
// Filter out the completed task
const newTasks = this.data.tasks.filter(t => t.id !== taskId);
this.setData({
tasks: newTasks,
completingTask: null
}, () => {
this.processTasks();
wx.showToast({ title: '已完成', icon: 'success' });
});
}
})