任务看板

// ==== 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);

本周回顾