100 lines
2.8 KiB
JavaScript
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' });
|
|
});
|
|
}
|
|
})
|