Add one-way task completion and exportable pet identity cards
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
const { secure, toast } = require("./api");
|
||||
const { localDate } = require("./date");
|
||||
|
||||
function apply(page, ids) {
|
||||
const tasks = page.data.tasks.map((task) =>
|
||||
ids.includes(task.id) ? { ...task, completed: true } : task,
|
||||
);
|
||||
page.setData({
|
||||
tasks,
|
||||
done: tasks.filter((t) => t.completed).length,
|
||||
undoneCount: tasks.filter((t) => !t.completed).length,
|
||||
});
|
||||
if (wx.vibrateShort) wx.vibrateShort({ type: "light", fail() {} });
|
||||
}
|
||||
|
||||
async function complete(page, task) {
|
||||
if (
|
||||
!task ||
|
||||
task.completed ||
|
||||
page.data.completingAll ||
|
||||
page.data.taskBusyIds.length
|
||||
)
|
||||
return;
|
||||
const date = page.data.date || localDate();
|
||||
page.setData({ taskBusyIds: [task.id] });
|
||||
try {
|
||||
await secure("/tasks/" + task.id + "/completion", "PUT", {
|
||||
date,
|
||||
completed: true,
|
||||
});
|
||||
if (page.data.date && page.data.date !== date) return;
|
||||
apply(page, [task.id]);
|
||||
wx.showToast({ title: "照顾好了,记下一份陪伴", icon: "success" });
|
||||
} catch (error) {
|
||||
toast(error);
|
||||
} finally {
|
||||
page.setData({ taskBusyIds: [] });
|
||||
}
|
||||
}
|
||||
|
||||
async function completeAll(page) {
|
||||
if (page.data.completingAll || page.data.taskBusyIds.length) return;
|
||||
const tasks = page.data.tasks.filter((t) => !t.completed);
|
||||
if (!tasks.length) return;
|
||||
const date = page.data.date || localDate();
|
||||
page.setData({ completingAll: true });
|
||||
try {
|
||||
const confirmation = await wx.showModal({
|
||||
title: "都照顾好了吗?",
|
||||
content: `将 ${date} 的 ${tasks.length} 项待办记为完成,完成后不能撤销。`,
|
||||
confirmText: "全部完成",
|
||||
confirmColor: "#b95738",
|
||||
});
|
||||
if (!confirmation.confirm) return;
|
||||
// The API accepts bounded batches; avoid partial completion of larger lists.
|
||||
if (tasks.length > 200) throw new Error("任务较多,请分项完成后再试");
|
||||
await secure("/tasks/completions", "PUT", {
|
||||
date,
|
||||
task_ids: tasks.map((t) => t.id),
|
||||
});
|
||||
if (page.data.date && page.data.date !== date) return;
|
||||
apply(
|
||||
page,
|
||||
tasks.map((t) => t.id),
|
||||
);
|
||||
wx.showToast({ title: "日常照顾全部完成", icon: "success" });
|
||||
} catch (error) {
|
||||
toast(error);
|
||||
} finally {
|
||||
page.setData({ completingAll: false });
|
||||
}
|
||||
}
|
||||
module.exports = { complete, completeAll };
|
||||
Reference in New Issue
Block a user