分组说明
收件箱:所有待办任务 <不含TODO标签> 本周任务:截止日期或计划日期为本周内 TODO:用户已发现问题,尚未提需求工单的任务 本周已完成:在本周内完成的任务
任务看板
// ==== 1. 分类定义 ========
const cardsContainer = document.createElement('div');
cardsContainer.className = 'cards-container';
let categories = [
{ name: "收件箱", query:
`(not done) AND (tags do not include #project/TODO)`,
color: "#ff9800" },
//{ name: "今天", query: ` (not done) AND ((scheduled on today) OR (due on today))`, tasks: todayTasks, color: "#ffffff" },
{ name: "本周任务", query:
` (not done) AND ((due this week) OR (scheduled this week)) `,
color: "#8bc34a" },
{ name: "TODO", query:
` (not done) AND (tags include #project/TODO)`,
color: "#bbbbbb" },
{ name: "本周已完成", query:
`done this week`,
color: "#9e9e9e" }
];
// 当前选中分类索引(用于高亮)
let currentIndex = 0;
// ==== 2. 渲染分类卡片 =========
categories.forEach((cat, index) => {
let card = cardsContainer.createDiv({ cls: "card" });
// 卡片点击事件:高亮并切换任务
card.onclick = () => {
currentIndex = index;
Array.from(cardsContainer.children).forEach((c, i) => {
c.classList.toggle("active", i === index);
});
showTasks(index);
};
// 标签文字
let labelDiv = card.createDiv({ cls: "label", text: cat.name });
// 下划线颜色
let underline = card.createDiv({ cls: "underline" });
underline.style.backgroundColor = cat.color;
});
// ==== 3. 构建任务显示区域 ===================================================
const taskListContainer = document.createElement('div');
taskListContainer.className = 'task-list';
// ==== 4. 渲染任务块 ===========
function showTasks(index) {
// 清空并重新挂载结构
dv.container.innerHTML = "";
dv.container.appendChild(cardsContainer);
dv.container.appendChild(taskListContainer);
let queryContainer = taskListContainer.createDiv();
// 构建任务查询代码块
let query = [
categories[index].query,
"sort by priority",
"short mode",
"exclude sub-items"
].join("\n");
// ✅ 构造完整 Markdown 代码块
let fullBlock = "```tasks\n" + query + "\n```";
// ✅ 插入查询语句(作为纯 Markdown 块,由 Obsidian Task 插件解析)
dv.paragraph(fullBlock, queryContainer);
}
// ==== 5. 默认加载“今天”分类 ====
currentIndex = 0;
Array.from(cardsContainer.children).forEach((c, i) => {
c.classList.toggle("active", i === currentIndex);
});
showTasks(currentIndex);