Skip to content

TaskNotes 插件高级使用案例

本文介绍 TaskNotes 的进阶用法,涵盖自动化工作流、跨插件联动、数据可视化和团队协作。

自动化工作流

Templater 任务笔记生成

创建笔记时自动生成任务笔记:

markdown
<%*
const taskTitle = await tp.system.prompt("任务名称:");
const taskDue = await tp.system.prompt("截止日期 (YYYY-MM-DD):");
const taskPriority = await tp.system.suggester(
  ["高", "中", "低"],
  ["高", "中", "低"]
);
const taskProject = await tp.system.prompt("所属项目:");

// 创建任务笔记
const noteName = taskTitle.replace(/\s+/g, '-').toLowerCase();
const notePath = `Tasks/Notes/${noteName}.md`;

const template = `---
id: task-${moment().format('YYYYMMDD-HHmmss')}
created: ${tp.date.now("YYYY-MM-DD")}
due: ${taskDue}
priority: ${taskPriority}
project: ${taskProject}
tags: [任务, ${taskProject}]
---

# ${taskTitle}

## 任务描述


## 执行计划
- [ ] 步骤 1
- [ ] 步骤 2
- [ ] 步骤 3

## 相关资源
-

## 备注

`;

await tp.file.create_new(template, noteName, false);
-%>

任务到期提醒

javascript
// 任务到期前自动发送提醒
module.exports = {
  // 使用 Obsidian Tasks 插件的到期检查
  check: () => {
    const today = moment();
    const tasks = app.plugins.getPlugin('tasks-plugin').getTasks();
    
    tasks.forEach(task => {
      if (task.due) {
        const daysUntil = moment(task.due).diff(today, 'days');
        
        if (daysUntil === 1) {
          new Notice(`⚠️ 任务 "${task.text}" 明天到期!`);
        } else if (daysUntil === 0) {
          new Notice(`🚨 任务 "${task.text}" 今天到期!`);
        } else if (daysUntil < 0) {
          new Notice(`❗ 任务 "${task.text}" 已过期!`);
        }
      }
    });
  }
};

跨插件联动

与 Dataview 深度联动

任务网络可视化

dataview
```dataview
TABLE 
  file.link AS 任务笔记,
  file.frontmatter.due AS 截止日期,
  file.frontmatter.priority AS 优先级,
  length(file.outlinks) AS 关联数,
  length(file.inlinks) AS 被引用数
FROM "Tasks/Notes"
WHERE file.frontmatter.due >= date(today)
SORT file.frontmatter.priority DESC
LIMIT 20

#### 任务依赖分析

```dataview
TABLE 
  file.link AS 任务,
  file.frontmatter.due AS 截止,
  filter(file.outlinks, l => l.path.includes("Tasks/Notes")) AS 依赖任务
FROM "Tasks/Notes"
WHERE length(filter(file.outlinks, l => l.path.includes("Tasks/Notes"))) > 0

与 Timeline 插件联动

在时间线中显示任务笔记:

markdown
<!-- Timeline 插件语法 -->
- 2026-06-15: [[Tasks/Notes/project-doc|项目文档撰写]] 完成
- 2026-06-20: [[Tasks/Notes/code-review|代码评审]] 截止
- 2026-06-25: [[Tasks/Notes/deployment|部署上线]] 发布

与 Kanban 插件联动

在看板中展示任务笔记:

markdown
# 任务看板

## 🔴 紧急
- [ ] 任务 A ⏭️ [[Tasks/Notes/task-a]]
- [ ] 任务 B ⏭️ [[Tasks/Notes/task-b]]

## 🟡 进行中
- [ ] 任务 C ⏭️ [[Tasks/Notes/task-c]]
- [ ] 任务 D ⏭️ [[Tasks/Notes/task-d]]

## 🟢 就绪
- [ ] 任务 E ⏭️ [[Tasks/Notes/task-e]]

数据可视化

任务进度仪表盘

dataview
```dataview
TABLE 
  "进度" AS 状态,
  length(filter(file.tasks, t => t.completed)) AS 已完成,
  length(filter(file.tasks, t => !t.completed)) AS 待完成,
  round(length(filter(file.tasks, t => t.completed)) / length(file.tasks) * 100, 0) AS 完成率
FROM "Tasks/Notes"
WHERE file.frontmatter.due <= date(today) + dur(7 days)
GROUP BY file.frontmatter.project
```

甘特图视图

dataview
TABLE 
  file.link AS 项目,
  file.frontmatter.start AS 开始,
  file.frontmatter.due AS 截止,
  date(file.frontmatter.due) - date(file.frontmatter.start) AS 周期天,
  length(filter(file.tasks, t => t.completed)) AS 完成
FROM "Tasks/Notes"
WHERE file.frontmatter.start
SORT file.frontmatter.start ASC

优先级矩阵

dataview
```dataview
TABLE 
  file.link AS 任务,
  file.frontmatter.priority AS 优先级,
  file.frontmatter.due AS 截止,
  file.frontmatter.effort AS 工作量
FROM "Tasks/Notes"
WHERE file.frontmatter.due
FLATTEN {
  "!!!": file.frontmatter.priority = "高" and file.frontmatter.effort = "大",
  "!!": file.frontmatter.priority = "高" and file.frontmatter.effort = "中",
  "!": file.frontmatter.priority = "中"
} AS 象限
SORT 象限 DESC

团队协作

任务分配系统

markdown
---
assignee: @张三
reviewer: @李四
status: 待审核
tags: [任务, 团队]
---

# 任务名称

## 分配信息

- **负责人**: @张三
- **审核人**: @李四
- **创建时间**: 2026-06-09
- **预计工时**: 8h

## 进度报告

### 2026-06-10
- 完成需求分析
- 开始设计文档

### 2026-06-11
- 完成初稿
- 提交审核

## 审核意见

> @李四: 文档结构清晰,建议补充 API 接口说明。

## 审核状态

- [ ] 代码审查
- [ ] 文档审核
- [x] 最终批准

项目周报自动生成

dataview
```dataview
TABLE 
  file.link AS 任务,
  file.frontmatter.assignee AS 负责人,
  file.frontmatter.due AS 截止,
  file.frontmatter.status AS 状态
FROM "Tasks/Notes"
WHERE file.frontmatter.due >= date(today) - dur(7 days)
WHERE file.frontmatter.due <= date(today) + dur(7 days)
SORT file.frontmatter.due ASC
```

高级模板

会议任务模板

markdown
---
type: meeting-task
created: &#123;&#123;date:YYYY-MM-DD&#125;&#125;
due: &#123;&#123;date+7d:YYYY-MM-DD&#125;&#125;
priority: 
tags: [任务, 会议]
related-meeting: [[会议记录/2026-06-09]]
---

# &#123;&#123;title&#125;&#125;

## 来源会议

[[会议记录/2026-06-09]]

## 会议决议

1. 

## 执行要求

- [ ] 
- [ ] 

## 进度

- [ ] 方案设计
- [ ] 评审确认
- [ ] 实施执行
- [ ] 结果汇报

## 负责人

@

## 时间节点

| 节点 | 日期 | 状态 |
|------|------|------|
| 方案完成 | &#123;&#123;date+3d:YYYY-MM-DD&#125;&#125; | ⏳ |
| 评审会议 | &#123;&#123;date+5d:YYYY-MM-DD&#125;&#125; | ⏳ |
| 实施完成 | &#123;&#123;date+7d:YYYY-MM-DD&#125;&#125; | ⏳ |

项目里程碑模板

markdown
---
type: milestone
created: &#123;&#123;date:YYYY-MM-DD&#125;&#125;
project: &#123;&#123;project&#125;&#125;
tags: [里程碑]
---

# 🎯 里程碑:&#123;&#123;title&#125;&#125;

## 概述

> 里程碑目标描述

## 关联任务

```dataview
TASK
FROM ""
WHERE contains(file.frontmatter.milestone, "{{title}}")
GROUP BY file.link

关键交付物

验收标准

  • [ ] 标准 1
  • [ ] 标准 2

风险点

风险影响应对措施

里程碑历史

日期状态说明
{{date:YYYY-MM-DD}}🟡 进行中启动

## 常见问题

### Q: 如何处理复杂的任务依赖?

使用任务笔记中的「前置任务」和「后续任务」字段明确依赖关系:

```markdown
## 依赖关系

**前置任务**:
- [[Tasks/Notes/task-requirements|需求分析]]

**后续任务**:
- [[Tasks/Notes/task-design|系统设计]]
- [[Tasks/Notes/task-testing|测试计划]]

Q: 如何批量更新任务笔记属性?

使用 QuickAdd 宏或 Templater 脚本批量处理:

javascript
// 批量更新截止日期
const files = app.vault.getFiles()
  .filter(f => f.path.startsWith('Tasks/Notes'))
  .filter(f => f.extension === 'md');

for (const file of files) {
  const content = await app.vault.read(file);
  if (content.includes('due: null')) {
    const updated = content.replace('due: null', `due: ${moment().add(7, 'days').format('YYYY-MM-DD')}`);
    await app.vault.modify(file, updated);
  }
}
new Notice(`已更新 ${files.length} 个任务笔记`);

Q: 任务笔记太多难以管理?

  1. 按项目或时间分类到子文件夹
  2. 使用 Dataview 建立索引视图
  3. 定期归档已完成的任务笔记