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: {{date:YYYY-MM-DD}}
due: {{date+7d:YYYY-MM-DD}}
priority: 高
tags: [任务, 会议]
related-meeting: [[会议记录/2026-06-09]]
---
# {{title}}
## 来源会议
[[会议记录/2026-06-09]]
## 会议决议
1.
## 执行要求
- [ ]
- [ ]
## 进度
- [ ] 方案设计
- [ ] 评审确认
- [ ] 实施执行
- [ ] 结果汇报
## 负责人
@
## 时间节点
| 节点 | 日期 | 状态 |
|------|------|------|
| 方案完成 | {{date+3d:YYYY-MM-DD}} | ⏳ |
| 评审会议 | {{date+5d:YYYY-MM-DD}} | ⏳ |
| 实施完成 | {{date+7d:YYYY-MM-DD}} | ⏳ |项目里程碑模板
markdown
---
type: milestone
created: {{date:YYYY-MM-DD}}
project: {{project}}
tags: [里程碑]
---
# 🎯 里程碑:{{title}}
## 概述
> 里程碑目标描述
## 关联任务
```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: 任务笔记太多难以管理?
- 按项目或时间分类到子文件夹
- 使用 Dataview 建立索引视图
- 定期归档已完成的任务笔记