Files
todomonitor/需求.md
T

379 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 待办监控 - 需求文档
## 一、项目概述
**项目名称**:待办监控(Todo Monitor
**核心定位**:一个双视图的待办管理工具——在无限画布上用 Markdown 便签自由记录,一键切换为结构化的监控大屏,自动将便签整理为监控卡片。
**技术栈**
- **前端**:Web 应用(单页应用 SPA)
- **后端**:轻量后端服务(Node.js / Python 任选)
- **数据库**:SQLite(本地文件型数据库,零配置)
---
## 二、核心功能模块
### 2.1 双视图切换
应用包含两种核心视图,用户可一键切换:
| 视图 | 名称 | 用途 |
|------|------|------|
| 视图 A | **无限画布** | 自由创作区,添加便签、画框、拖拽布局 |
| 视图 B | **监控大屏** | 自动生成的结构化监控面板,展示所有待办项 |
**切换方式**:顶部导航栏提供「画布 / 大屏」切换按钮,切换时保留当前数据状态。
---
### 2.2 无限画布(Canvas View
#### 2.2.1 便签(Sticky Note
- **添加方式**:双击画布空白处 → 创建一张新便签
- **内容格式**Markdown 语法支持
- 标题(# ## ###
- 列表(- / 1.
- 复选框(- [ ] / - [x]
- 粗体、斜体、代码块等基础 Markdown
- **交互操作**
- 拖拽移动位置
- 拖拽右下角调整大小
- 双击进入编辑模式
- 右键菜单:删除、复制、修改颜色
- **便签解析引擎**(核心,用于生成监控卡片):
系统支持 **三种解析模式并存兼容**,按优先级自动识别:
**模式一:YAML Front Matter(最灵活,推荐)**
便签顶部用 `---` 包裹的 YAML 元数据块,适合结构化管理:
```markdown
---
title: 登录模块开发
status: 进行中
priority: 高
progress: 65
deadline: 2026-08-15
owner: 张三
tags: [前端, 核心模块]
type: task
---
正文内容...
```
**模式二:约定式 Markdown(最直观)**
无需学习语法,按约定结构书写自动识别:
- 第一行 `# 标题` → 卡片标题
- 二级标题 `## 子标题` → 卡片副标题
- `**状态:** 进行中` → 状态字段
- `**进度:** 60%` → 进度字段
- `**优先级:** 高` → 优先级字段
- `**截止:** 2026-08-15` → 截止日期
- `**负责人:** 张三` → 负责人字段
- `**标签:** #前端 #核心` → 标签字段
- `- [ ]` / `- [x]` 列表项 → 子任务列表
- 其他段落 → 卡片描述区
**模式三:行内快捷字段(最轻量)**
适合快速记录,直接在行内用特殊语法标记:
- `@状态(进行中)` → 状态字段
- `@进度(65%)` → 进度字段
- `@优先级(高)` → 优先级字段
- `@截止(2026-08-15)` → 截止日期
- `#标签名` → 标签(行内任意位置)
---
**支持的完整字段清单**
| 字段 | 类型 | 说明 | 卡片展示方式 |
|------|------|------|-------------|
| `title` | 字符串 | 卡片标题 | 卡片顶部大标题 |
| `subtitle` | 字符串 | 副标题 | 标题下方小字 |
| `status` | 枚举 | 待办/进行中/已完成/阻塞/延期 | 彩色状态标签 |
| `progress` | 数字 0-100 | 进度百分比 | 进度条 + 数字 |
| `priority` | 枚举 | 紧急/高/中/低 | 优先级角标 |
| `deadline` | 日期 | 截止日期 | 剩余天数/逾期提醒 |
| `startDate` | 日期 | 开始日期 | 时间线展示 |
| `owner` | 字符串 | 负责人 | 头像/名字标签 |
| `tags` | 数组 | 标签列表 | 底部标签云 |
| `type` | 枚举 | task/milestone/metric/countdown | 卡片类型 |
| `metric` | 数字 | 指标数值 | 大数字展示 |
| `target` | 数字 | 目标值 | 指标对比 |
| `link` | URL | 关联链接 | 跳转按钮 |
---
**卡片类型自动识别**(根据字段组合自动切换卡片样式):
- **任务卡(task)**:默认类型,含标题/状态/进度/子任务
- **里程碑卡(milestone)**:含截止日期,展示倒计时圆环
- **指标卡(metric**:含 metric + target 字段,展示大数字和达成率
- **倒计时卡(countdown)**:仅含截止日期,大号数字倒计时展示
- **项目卡(project)**:含多个子任务时,自动计算整体进度
---
**智能推断规则**(无需手动填写,系统自动计算):
1. **进度自动计算**:若存在子任务列表但未写 progress,自动按「已完成数/总数」计算进度百分比
2. **状态自动推断**
- 所有子任务已勾选 → 自动设为「已完成」
- 存在阻塞关键词(blocked/阻塞/卡壳)→ 自动设为「阻塞」
- 截止日期已过且未完成 → 自动标为「延期」
3. **剩余天数自动计算**:根据 deadline 自动计算还剩多少天,逾期显示红色
4. **状态颜色映射**
- 待办 → 灰色
- 进行中 → 蓝色
- 已完成 → 绿色
- 阻塞 → 橙色
- 延期 → 红色
5. **优先级颜色映射**
- 紧急 → 红色角标
- 高 → 橙色角标
- 中 → 蓝色角标
- 低 → 灰色角标
6. **标签自动提取**:正文中所有 `#标签` 自动提取为标签字段
#### 2.2.2 分组框(Group Frame
- **添加方式**:工具栏选择「画框」工具 → 在画布上拖拽绘制矩形区域
- **功能**:框内的所有便签自动归为一组
- **交互操作**
- 拖拽移动整个框(框内便签跟随移动)
- 拖拽边角调整大小
- 双击框标题修改分组名称
- 右键菜单:删除分组、修改颜色
- **规则**
- 便签中心落在框内 → 属于该组
- 一个便签只能属于一个组(以最上层框为准)
- 便签可拖出框 → 自动解除分组
#### 2.2.3 画布基础操作
- 滚轮缩放(Zoom in / out
- 按住空格 + 拖拽 → 平移画布
- 框选多个元素 → 批量移动/删除
- 撤销 / 重做(Ctrl+Z / Ctrl+Y
---
### 2.3 监控大屏(Dashboard View
#### 2.3.1 监控卡片(Monitor Card
- 每张便签对应一张监控卡片,卡片类型根据解析结果自动切换
- 卡片内容从 Markdown 智能解析生成,支持以下类型:
**通用卡片结构**(所有类型共有):
- **标题区**:卡片标题 + 副标题
- **状态标签**:彩色状态徽章(左上角)
- **优先级角标**:优先级标识(右上角)
- **底部标签云**:自动提取的标签
- **更新时间**:最后编辑时间
**任务卡(task**
- 进度条 + 百分比数字
- 可折叠子任务列表(支持直接勾选,勾选后自动同步回便签 Markdown)
- 描述区 Markdown 渲染
- 截止日期 + 剩余天数
**里程碑卡(milestone**
- 大号倒计时圆环(剩余天数)
- 截止日期完整显示
- 里程碑描述
- 关联任务数(同组内任务数)
**指标卡(metric**
- 超大号数字展示(当前值)
- 目标值对比(达成率百分比)
- 迷你趋势图(如有历史数据)
- 指标说明文字
**倒计时卡(countdown**
- 全屏式大号倒计时数字
- 目标日期与事件名称
- 进度条(从开始日期到截止日期)
**项目卡(project**
- 整体进度条(子任务自动汇总)
- 子任务完成数 / 总数
- 关键节点列表
- 项目描述
#### 2.3.2 分组展示
- 有分组的卡片 → 按分组排列,每组有标题栏
- 无分组的卡片 → 归入「未分组」区域
- 分组可折叠 / 展开
#### 2.3.3 大屏布局与交互
- 响应式卡片网格布局,卡片宽度自适应
- **排序维度**:状态 / 进度 / 优先级 / 截止日期 / 更新时间
- **筛选维度**
- 按状态筛选(多选)
- 按优先级筛选
- 按标签筛选(点击标签过滤)
- 按负责人筛选
- 按分组筛选
- **搜索功能**:标题/内容全文搜索
- **视图切换**
- 网格视图(默认,卡片网格)
- 列表视图(紧凑列表)
- 看板视图(按状态分列)
- **统计概览栏**:顶部展示全局统计
- 总任务数
- 进行中数量
- 已完成数量
- 逾期数量
- 整体完成率
---
## 三、数据模型设计
### 3.1 便签表(notes
```
- id: 唯一标识
- content: Markdown 内容(文本)
- x: 画布 X 坐标
- y: 画布 Y 坐标
- width: 宽度
- height: 高度
- color: 便签颜色
- group_id: 所属分组 ID(可为空)
- created_at: 创建时间
- updated_at: 更新时间
```
### 3.2 分组表(groups
```
- id: 唯一标识
- name: 分组名称
- x: 框 X 坐标
- y: 框 Y 坐标
- width: 框宽度
- height: 框高度
- color: 框颜色
- created_at: 创建时间
- updated_at: 更新时间
```
### 3.3 元数据表(meta
```
- key: 配置键
- value: 配置值
(用于存储画布缩放比例、当前视图等全局设置)
```
---
## 四、后端 API 设计
### 便签相关
- `GET /api/notes` — 获取所有便签
- `POST /api/notes` — 创建新便签
- `PUT /api/notes/:id` — 更新便签(内容/位置/大小)
- `DELETE /api/notes/:id` — 删除便签
### 分组相关
- `GET /api/groups` — 获取所有分组
- `POST /api/groups` — 创建新分组
- `PUT /api/groups/:id` — 更新分组(位置/大小/名称)
- `DELETE /api/groups/:id` — 删除分组
### 批量操作
- `POST /api/batch` — 批量更新(便签位置、分组归属等)
---
## 五、关键交互流程
### 流程 1:创建待办项
1. 用户切换到「无限画布」视图
2. 双击画布空白处 → 创建便签
3. 输入 Markdown 内容(标题、状态、进度、子任务)
4. 点击空白处保存 → 自动同步到后端
5. 切换到「监控大屏」→ 看到新生成的监控卡片
### 流程 2:创建分组
1. 在画布上选择「画框」工具
2. 拖拽绘制一个矩形区域
3. 将已有便签拖入框内(或在框内新建便签)
4. 切换到大屏 → 这些便签自动归为一组展示
### 流程 3:更新进度
- **方式 A**:在画布上编辑便签 Markdown 中的进度数字
- **方式 B**:在大屏上直接勾选子任务 → 自动计算进度并回写便签内容
---
## 六、技术实现要点
### 前端
- **画布渲染**:建议使用 Konva.js / Fabric.js 等 Canvas 库实现无限画布
- **Markdown 解析**marked.js + DOMPurify(防 XSS
- **状态管理**:本地状态 + 实时同步到后端
- **拖拽交互**:原生拖拽或库实现
### 后端
- 轻量 Web 框架(Express / FastAPI / Flask
- SQLite 数据库(better-sqlite3 / sqlite3
- RESTful API
- 简单的错误处理和数据校验
### 数据同步
- 编辑便签时防抖保存(输入停止 500ms 后自动保存)
- 拖拽位置实时更新(节流处理)
- 视图切换时从后端拉取最新数据
---
## 七、优先级建议
**P0(核心必做)**
1. 双视图切换框架
2. 便签的增删改查 + Markdown 渲染
3. 无限画布基础操作(拖拽、缩放、平移)
4. 便签解析引擎(约定式 Markdown 模式 + 基础字段)
5. 监控大屏 - 任务卡自动生成
6. 子任务勾选双向同步
7. SQLite 持久化存储
**P1(重要功能)**
1. 分组框功能 + 大屏分组展示
2. YAML Front Matter 解析模式
3. 行内快捷字段解析模式
4. 智能推断规则(进度自动计算、状态自动推断)
5. 状态/优先级颜色映射
6. 标签系统 + 标签筛选
7. 里程碑卡 / 指标卡 类型
8. 截止日期 + 剩余天数计算
9. 便签颜色自定义
**P2(锦上添花)**
1. 倒计时卡 / 项目卡 类型
2. 看板视图 / 列表视图
3. 统计概览栏
4. 撤销 / 重做
5. 高级筛选与搜索
6. 批量操作
7. 便签复制
8. 负责人字段
9. 关联链接跳转
**P3(自定义扩展)**
1. **自定义主题**
- 内置多套主题(亮色/暗色/护眼等)
- 支持自定义配色方案(主色、背景色、卡片色、文字色等)
- 主题可保存、切换、导入导出
- 便签颜色、分组框颜色均可自定义
2. **自定义 CSS**
- 提供全局自定义 CSS 输入框
- 支持针对特定元素(卡片、便签、大屏等)的样式覆盖
- CSS 实时预览,保存后立即生效
- 样式持久化存储到 SQLite
3. **自定义 JS**
- 提供用户脚本注入入口
- 支持编写自定义逻辑(如自动化规则、数据处理、第三方集成)
- 提供安全沙箱环境,限制危险 API 访问
- 脚本可启用/禁用,支持多个脚本管理
- 提供事件钩子(便签创建/更新/删除、视图切换等)供脚本监听