自定义待办管理-视图脚本(Tasks,DataView,Templater)

Task View 脚本使用说明

1 功能介绍

Task View 是一个用于 Obsidian 的任务管理视图脚本,它提供了一个灵活的界面来查看和管理你的任务。主要功能包括:

  • 多种视图:默认支持 Todo、日报、周报、每日视图等多种任务查看方式
  • 自定义按钮(重点):可以自由添加、删除、修改按钮,实现个性化的任务查询与功能集成
  • 灵活的查询:支持使用 Tasks 插件语法进行复杂的任务查询
  • 周视图导航:可以方便地在不同周之间切换,查看每周的任务
  • 日期选择:支持通过周选择器快速跳转到特定周
  • 高亮显示:今日按钮和每日按钮会根据当前日期自动高亮
  • 调试模式:可以控制是否打印查询语句调试信息

必须的插件依赖

  • Dataview:需要开启 dataviewjs 将脚本粘贴到里边
  • Tasks:提供待办查询

功能强化插件依赖

  • Templater:提供新增待办按钮功能实现

2 视频演示与脚本下载

taskView演示与脚本下载

3 脚本部署步骤

3.1 基础功能

  1. 安装 Dataview 插件并开启 dataviewjs
  2. 安装 tasks 插件
  3. 创建 dataviewjs 代码块
  4. 自定义编辑 TaskView 脚本中用户配置区域
  5. 将 TaskView 脚本粘贴进去
  6. 切换阅读视图

3.2 增强功能

3.3 新增待办集成

  1. 安装 Templater 插件
  2. 创建模板 module_insertTask
  3. 自定义编辑 TaskView 脚本中用户配置区域 Templater 配置部分
  4. 点击 ✚ 触发新增待办流程

module_insertTask 逻辑是创建对应的文档作为存放不同类型的待办

注意 module_insertTask:

  • 需要检查修改用户配置项中笔记文件夹路径
  • 存放待办的笔记需要有键为 types,值为 task 的文档属性
  • 待办中标签的值来源于文档属性中的别名 aliases 的值否则默认为 #task

4 配置选项

4.1 界面配置

ui: {
    fontSize: 0.7,                    // 字体大小
    weekStartDay: 1,                  // 周开始日:0=周日, 1=周一
}

4.2 Templater 配置

templater: {
    homePage: "HomePage",             // 首页文件路径名称,或一个不会删除的md文件
    moduleInsertTask: "module_insertTask", // Templater 任务插入模板名称
}

4.3 公共查询配置

commonQuery: {
    includePaths: [],                 // 包含路径(为空表示不限制)
    excludePaths: ["Templates"],      // 排除路径
    enabled: true,                    // 是否启用公共配置
    hideBacklink: true,               // 是否隐藏 backlink
    groupByTag: false,                // 是否按标签分组
    groupByStatus: false,             // 是否按状态分组
    excludeFilesWithChars: [],        // 排除包含特定字符的文件
    limit: 100,                       // 查询结果限制
}

4.4 调试配置

debug: {
    printQuery: true,                 // 是否打印查询语句调试信息
}

4.5 按钮配置

按钮配置是 Task View 最核心的部分,你可以自由添加、删除、修改按钮。每个按钮必须包含以下字段:

  • id:按钮唯一标识符
  • label:按钮显示文本
  • type:按钮类型(custom, nav, action, input)
  • position:按钮位置(top, bottom)
  • order:按钮排序(数值越小越靠前)
  • useCommonConfig:是否使用公共配置
  • query:查询语句(仅 custom 类型需要)
  • description:按钮描述

4.6 星期配置

daysOfWeek: ["周一", "周二", "周三", "周四", "周五", "周六", "周天"]

4.7 默认视图

defaultView: "todo",                 // 按钮 id 或 "daily"
  • 可以设置为任意按钮的 id,或者 “daily” 表示每日视图
  • 如果设置的 id 不存在,会自动回退到 todo 按钮

4.8 每日按钮查询模板

dailyQuery: "{(done on {{date}}) OR (happens on {{date}}) OR (CANCELLED on {{date}}) OR (created on {{date}})}"
  • 可用变量:{{date}} - 当前选中的日期

5 按钮类型

5.1 custom 类型

  • 用途:自定义查询按钮,如 Todo、日报、本周等

  • 示例

    {
        id: "dailyReport",
        label: "日报",
        type: "custom",
        position: "top",
        order: 2,
        useCommonConfig: true,
        query: "done on {{today}}",
        description: "显示今日完成的任务",
    }
    

5.2 nav 类型

  • 用途:导航按钮,用于页面导航操作

  • 示例

    {
        id: "today",
        label: "今日",
        type: "nav",
        position: "top",
        order: 7,
        action: "today",
        description: "跳转到今天",
    }
    

5.3 action 类型

  • 用途:动作按钮,用于执行特定操作

  • 示例

    {
        id: "createTask",
        label: "✚",
        type: "action",
        position: "top",
        order: 8,
        action: "createTask",
        description: "创建新任务",
    }
    

5.4 input 类型

  • 用途:输入控件,如周选择器

  • 示例

    {
        id: "weekInput",
        label: "week",
        type: "input",
        position: "top",
        order: 5,
        description: "周次选择器",
    }
    

6 使用方法

6.1 基本操作

  • 点击按钮:直接点击对应按钮即可查看相应的任务视图
  • 周导航:使用 “←” 和 “→” 按钮在不同周之间切换
  • 今日视图:点击 “今日” 按钮快速返回今天的视图
  • 周选择器:使用周选择器输入框可以快速跳转到特定周
  • 每日按钮:点击周一至周天的按钮查看对应日期的任务

6.2 自定义按钮

要添加自定义按钮,只需在 buttons 数组中添加新的按钮配置对象即可。例如,添加一个显示所有已完成任务的按钮:

{
    id: "completed",
    label: "已完成",
    type: "custom",
    position: "top",
    order: 4,
    useCommonConfig: true,
    query: "done",
    description: "显示所有已完成的任务",
}

6.3 查询语法

Task View 使用 Tasks 插件的查询语法,支持以下变量:

  • {{today}} - 今天的日期(YYYY-MM-DD 格式)
  • {{date}} - 当前选中的日期(YYYY-MM-DD 格式)
  • {{week}} - 当前选中的周(YYYY-[W]WW 格式)

7 常见问题

7.1 如何添加新的按钮?

USER_CONFIG.buttons 数组中添加一个新的按钮配置对象即可。例如:

{
    id: "upcoming",
    label: "即将到期",
    type: "custom",
    position: "top",
    order: 4,
    useCommonConfig: true,
    query: "happens before in 7 days",
    description: "显示未来7天内到期的任务",
}

7.2 如何禁用公共配置?

有两种方式:

  1. 全局禁用:设置 commonQuery.enabled: false
  2. 按钮级别禁用:在按钮配置中设置 useCommonConfig: false

7.3 如何修改默认视图?

USER_CONFIG 中修改 defaultView 值为按钮 id 即可。例如:

  • defaultView: "todo" - 默认显示 todo 视图
  • defaultView: "dailyReport" - 默认显示日报视图
  • defaultView: "week" - 默认显示本周视图
  • defaultView: "daily" - 默认显示每日视图

7.4 如何调整按钮顺序?

修改按钮配置中的 order 值,数值越小越靠前。

7.5 如何隐藏查询语句调试信息?

USER_CONFIG.debug 中设置 printQuery: false 即可。

7.6 如何新增一个公共配置项

例如:添加新的公共配置项,按照完成日期排序显示

首先确认 tasks 插件语法如下

sort by done

在公共查询配置中新增 isSortByDoneDate 选项默认开启

commonQuery: {
    ...// 其他省略
    isSortByDoneDate: true, 
},

buildCommonQuery() 方法中添加新的 if 分支

if (cq.isSortByDoneDate) {
    query += "sort by done\n";
}

8 注意事项

  • 脚本依赖 Dataview 插件,使用前请确保已安装并启用 Dataviewjs
  • 脚本依赖于 Tasks 插件,使用前请确保已安装并启用 Tasks 插件
  • 创建任务功能依赖于 Templater 插件,使用前请确保已安装并启用 Templater 插件
  • 查询语句使用 Tasks 插件的语法,请参考 Tasks 插件文档了解更多查询语法
  • 按钮的 id 必须唯一,否则可能会导致冲突

9 参考链接

本脚本基于熊猫别熬夜噗~ 大佬的脚本进行的二次开发

原帖:基于DataviewJS的Tasks查询每周的任务

二开主要的点是自定义按钮配置,想要什么查询,想要集成其他插件或功能,自己一配置就好

1 个赞

看着是可以按照任务的不同状态进行自定义对吧,就在 button 组底下添加吗??
我看你这个是不同的标签分类了

状态我一般就只用完成和未完成,所以不太熟悉,标签分组我是加到公共配置了,按理说只要tasks语法能实现的这个脚本就可以渲染,加一个按钮,把query配置好就行,你想要什么样的效果也可以说说看,可以一起试着加一加

公共配置好像是有按状态分组的,改成 true 就行