# Dada Todo List
> 一款基于 Obsidian 笔记的待办与清单管理插件,全部基于纯 Markdown 复选框。任务就在你自己的笔记里——日记、收件箱、清单文件。无账号、无云端、无锁定。
[English](./README_en.md) · 简体中文
---
**Dada Todo List(达达清单)** 是一款基于 Obsidian 笔记的待办与清单管理插件。所有任务就是你笔记里的 Markdown 复选框(`- [ ]` / `- [x]`),插件负责把它们聚合起来,提供日历、时间轴、日程等多种视图和顺手的编辑体验。
### 🎯 这个插件适合你吗?
- 🙋 **你已经在用 Obsidian 管理待办** —— 任务散落在日记和各处笔记里,找起来靠搜索、看起来只有干巴巴的列表?装上它,你写过的每一行待办都会聚合成日历、时间轴、日程和清单,**数据一行都不用搬**,还在你原来的笔记里。
- 🌱 **你还没试过用 Obsidian 管理待办** —— 不必再注册第 N 个待办服务:你的库就是任务管理器,纯 Markdown 复选框、全本地、跟着笔记永久保存。从一行 `- [ ]` 开始,慢慢长出属于自己的任务系统。
### 💡 快速上手
1. 建议开启核心插件「**日记**」(设置 → 核心插件)——有日期的任务就存在你的每日笔记里;
2. 点击左侧栏的 ✅ 图标(或命令面板「打开 Dada Todo List」)打开面板;
3. 在任意一篇每日笔记里写下一行 `- [ ] 买牛奶 #生活`,面板里立刻就能看到。
### ✨ 功能特性
#### 🗓 六种视图,随意切换
| 视图 | 适合场景 |
|---|---|
| **日视图** | 聚焦一天:时间轴 + 凌晨列表 + 全天任务 |
| **周视图** | 一周七天并排时间轴,定时任务按泳道排布、互不遮挡 |
| **月视图** | 整月日历格:农历、节气、节日、法定节假日(休/班)一目了然 |
| **日程** | 按日期纵向滚动的议程:已延期 → 未来 7 天 → 更远 |
| **清单** | 按 `###` 标题分组管理清单文件,支持列表 / 分栏两种布局 |
| **列表** | 全部任务池:按标签、日期、清单、状态(已完成 / 已取消)多维筛选 |
#### ✏️ 顺手的任务编辑
- **标题内联语法**:直接写 `#标签` 和 `[文字](链接)`,渲染为可点击的标签胶囊与超链接
- **时间灵活**:单时间、时间段(开始 – 结束)、全天、**跨日期**(开始日期 – 结束日期,自动跨多天显示)四种形态一键切换
- **子任务**:无限层级缩进即子任务,弹窗内直接增删改
#### 🖱 效率操作
- **拖拽改期**:周 / 月视图之间拖拽任务即可改期;时间轴上还能拖动手柄精细调整开始 / 结束时间
- **Option/Alt + 拖拽 = 复制任务**:按住 Option(Mac)/ Alt 或 Ctrl(Windows·Linux)拖动任务,落点会新建一份副本、原任务保留。月视图中副本保持原开始 / 结束时刻只换日期;周 / 日时间轴中拖到哪格哪条即以该位置为新的开始时间(按原时长保留结束)
- **过期待办顺延**:一键把所有已过期任务顺延到今天(保留原时刻,全天任务保持全天)
- **Ctrl/⌘ + 点击**:直接跳转到任务所在的笔记并高亮定位
- **待办侧栏**:周 / 月视图左侧可展开「无日期 / 所有待办」列表,拖到日历即改期
#### 🔒 数据与隐私
- **纯 Markdown**:任务就是笔记里的复选框,插件删除后数据原样保留
- **全本地**:不依赖任何外部服务,不联网,天然适配各种同步方案
- **界面记忆**:视图、筛选等偏好存本机 localStorage,不污染 data.json、不触发云盘同步
#### 📂 数据访问说明
- **扫描文件列表**:插件会枚举库内 Markdown 文件的**路径与 frontmatter**,用于发现每日笔记与清单文件(清单通过标记全库识别);**只有**命中的日记(限加载范围内)、收件箱、清单文件会被读取正文,其余文件一概不碰。
- **localStorage**:仅存储非必要的界面偏好(当前视图、筛选状态、引导关闭标记等),只存在于本机、不含任何笔记内容、绝不联网同步;刻意不写入 `data.json`,避免频繁改写触发云盘同步服务。
#### 🌍 界面
- **中英双语**:跟随 Obsidian 界面语言自动切换
- **农历支持**:月视图 / 周视图表头显示农历、节气与节日,英文界面下同样可用
- **主题跟随**:配色全部走 Obsidian 原生变量,深浅色主题、自定义主题色都自动适配
### 🚀 安装
**手动安装**:下载 `main.js`、`styles.css`、`manifest.json` 三个文件,放入
`你的库/.obsidian/plugins/dada-todo-list/` 目录,然后在设置中启用第三方插件并开启本插件。
### 📁 数据存储
| 数据 | 位置 |
|---|---|
| 有日期的任务 | **日记文件夹**设置指定的文件夹(插件扫描其中文件名含日期的笔记),任务即这些笔记正文中的复选框 |
| 无日期的任务(收件箱) | 默认库根目录 `DadaTodoList.md`,可在设置中改为任意文件;不存在时启动自动创建 |
| 清单 | frontmatter `tags` 中包含 `todoList`(可改)的笔记,**全库识别**,不限目录 |
> 收件箱文件、清单 tag 标记与日记文件夹都是本插件的设置项。日记文件夹默认指向库根目录(扫描文件名含日期的笔记),可独立于核心「日记」插件使用。
### 📝 清单文件的写法
任意一篇笔记,只要 frontmatter `tags` 含有清单识别标记(默认 `todoList`)就会成为一份清单。文件里用 **`###` 三级标题作为分组依据**,清单视图按分组展示:
```markdown
---
tags:
- todoList
---
### 工作
- [ ] 完成季度汇报 #work
- [ ] 收集数据
- [ ] 制作图表
- [x] 回复客户邮件
### 生活
- [ ] 预约牙医
- [x] 给绿萝浇水
```
规则与技巧:
- **`###` 标题 = 分组名**,可增删改,无需任何额外配置;标题前的任务归入「未分组」
- **缩进的复选框 = 子任务**,层级不限
- 清单视图支持**列表 / 分栏**两种布局;**拖拽任务到其他分组**即可移动归属
- 每个分组标题旁有 **+ 按钮**可向该分组新增任务;侧栏实时显示各清单的总数与完成进度
- 一篇笔记就是一份清单,任务直接存在这篇笔记里——在编辑器里手动增删改,面板会自动刷新
### ⚙️ 设置
| 设置项 | 说明 |
|---|---|
| **打开位置** | 左侧栏 / 主工作区标签页 / 右侧栏 |
| **主题配色** | 时间轴、日历等任务块的配色方案:默认 / 莫兰迪 / 卡通果冻 / 春樱 / 夏木 / 秋枫 / 冬雪;按任务标题取色,相同标题颜色一致 |
| **显示农历与节假日** | 日 / 周 / 月视图中的农历、节气、节日及休 / 班标记,可关闭只显示公历 |
| **日记文件夹** | 存放日记(有日期任务)的文件夹,插件扫描该目录及子目录里文件名含日期的笔记;默认 `/` 表示库根目录 |
| **日记载入范围** | 仅加载最近 N 天的日记(近 30 / 90 / 180 天 / 一年 / 全部,默认全部)。笔记与任务较多时可调小以提升加载性能 |
| **收件箱文件** | 无日期任务的存放文件(相对库根目录的路径);更换路径时若旧文件还有任务,会主动询问是否整体迁移 |
| **清单文件 tag 标记** | frontmatter `tags` 含任一标记的笔记即清单文件,可配置多个 |
| **每周开始日** | 周视图起始列与月历首列以此为准,可选周日到周六,默认周一 |
| **时间轴显示范围** | 时间轴视图的起止小时(0:00 – 24:00),聚焦常用时段 |
| **完成任务时添加完成日期标记** | 勾选完成任务时,在任务行末尾追加完成日期(如 ✅ 2026-10-06)。默认开启,关闭后不再追加该标记,开始 / 结束等日期标记不受影响 |
### 🌐 语言
界面跟随 Obsidian 的语言设置(简体中文 / English)。切换 Obsidian 语言后重启即可生效。
---
## 💖 赞赏支持
如果这个插件对你有帮助,欢迎请作者喝杯咖啡,是我持续更新的动力~你也可以在 [我的小红书](https://xhslink.cn/o/2G9OTVU76WP) 找到我,分享使用技巧与更新动态。
微信赞赏 WeChat Pay
支付宝赞赏 Alipay
---
## 🛠 开发
```bash
npm install
npm run build # 生产构建(产物:dada-todo-list/main.js、styles.css、manifest.json)
npm run dev # 开发模式:监听 src/ 改动自动重建
```
本地调试:把测试库的插件目录软链到产物目录即可(目录名与插件 id 一致):
```bash
ln -s "$(pwd)/dada-todo-list" "你的库/.obsidian/plugins/dada-todo-list"
```
## 📄 License
MIT