WeekToDo 个性化改造版
基于 WeekToDo 修改的个性化版本,覆盖任务用时统计、拖动与迁移区分、四象限视图、统计页面、打印优化、S3 手动同步等改造。所有改动均在原有架构内完成,未引入额外依赖。
与原版的差异
| 功能 | 原版 | 改造版 |
|---|---|---|
| 任务用时 | 无 | 记录起点与完成时刻,悬浮显示用时 |
| 拖动 / 迁移 | 只改所属日期 | 拖动可重置起点,系统迁移起点不变 |
| 迁移任务 | 无标识 | 紫色图标标识,统计页可筛选 |
| 上午 / 下午 | 不分组 | 按 13:00 分界,视觉分组 |
| 四象限视图 | 无 | 独立页面,按重要/紧急展示 |
| 统计页面 | 无 | 支持筛选、排序、周/月聚合、导出 CSV |
| 打印 | 整页打印 | A4 横版,只打印当前周 |
| S3 手动同步 | 仅在设置中 | 左侧图标栏一键推送 |
| 紧急阈值 | 无 | 可在设置中调整,默认 24 小时 |
功能说明
一、任务用时统计
| 字段 | 类型 | 说明 |
|---|---|---|
startDate | YYYYMMDD 或 null | 用时起点日期 |
startTime | HH:mm | 用时起点时刻,默认 09:00 |
completedAt | 时间戳 或 null | 完成时刻 |
起点规则:startDate 的日期 + startTime 的时刻(无则 09:00)。
显示规则:
- 未完成:终点 = 当前时间
- 已完成:终点 =
completedAt - 小于 48 小时:显示「X 小时」
- 大于等于 48 小时:显示「X 天」
交互:
- 鼠标悬浮任务:显示用时
- 任务详情弹窗:显示开始日期(只读)、开始时刻(可编辑)、完成时间、总用时
二、拖动与系统迁移的区分
「用户拖动任务」和「系统自动迁移未完成任务」在数据层都是修改 listId,但语义不同:
- 拖动:排期不合理,起点应跟着改
- 迁移:任务一直没完成,起点不应改
触发规则:
| 场景 | 是否弹窗 | 处理 |
|---|---|---|
| 日期列表之间拖动 | 弹窗询问 | 「重置」→ startDate = 新 listId;「保留」→ startDate 不变 |
| 日期列表 → 自定义列表 | 不弹窗 | startDate = null |
| 自定义列表 → 日期列表 | 不弹窗 | startDate = 新 listId |
| 系统迁移 | 不弹窗 | startDate 不变 |
三、迁移任务标识
新增字段 migratedFrom:
- 首次迁移写入来源日期
- 后续迁移不覆盖(保留最原始)
- 用户拖动不变
- 任务完成不清空
展示:
- 列表:紫色箭头图标,hover 显示「从 MM-DD 迁移」
- 悬浮面板:同样图标
- 统计页:「迁移来源」列 + 筛选器 + 汇总卡片「迁移数」
- 周总结:任务行加
[迁移自YYYYMMDD]标记,AI 单独一段总结
四、上午 / 下午分组
规则:
- 分界点:13:00
- 分组依据:
startTime(小于 13:00 → 上午;大于等于 13:00 → 下午) - 只对日期列表分组,自定义列表不分组
- 空组不显示标签
- 排序按项目原有规则
time 与 startTime 的联动(只在新建 / 复制时联动一次):
time有值 →startTime = timetime为空 → 按当前时间:小于 13:00 用09:00,大于等于 13:00 用13:00
之后两者独立,互不影响。
视觉:
- 上午标签:琥珀色
#f0a020 - 下午标签:靛蓝色
#4d9bff - 标签居中,左右带横线
五、四象限视图
判定规则:
| 象限 | 条件 |
|---|---|
| Q1 重要且紧急 | priorityLevel 为 L1 或 L2,且用时 > 阈值 |
| Q2 重要不紧急 | priorityLevel 为 L1 或 L2,且用时 ≤ 阈值 |
| Q3 紧急不重要 | 其它,且用时 > 阈值 |
| Q4 不重要不紧急 | 其它,且用时 ≤ 阈值 |
- 用时由
tasksHelper.getTaskDuration计算 - 阈值从设置读取,默认 24 小时,可在 8~168 之间调整
数据范围:
- 只统计日期列表
- 跟随主页当前显示周
- 排除
done和cancelled
视觉:
- 2×2 矩阵,四个象限拼成正方形
- 象限配色:红 / 蓝 / 橙 / 灰
- 卡片显示:优先级徽章 + 标题 +
time+ 迁移图标 - 点击卡片 → 打开任务详情弹窗
- 顶部有标题栏 + 返回按钮
六、统计页面
全屏 Modal,从左侧 bi-bar-chart-line 图标进入。
能力:
- 筛选:日期范围、完成状态、所属列表、是否迁移
- 排序:点表头切换
- 视图:明细 / 按周聚合 / 按月聚合
- 导出:CSV(带 BOM,避免 Excel 中文乱码)
- 汇总卡片:任务数、总时长、平均时长、迁移数
七、PDF 打印优化
目标:
- A4 横版
- 只打印当前周
- 标题大字写「周几」,下面小字写「MM月DD日」
实现:打印时动态生成只含当前周的简洁清单,打印完销毁。
呈现:
- 7 列网格布局
- 每天一列,标题 + 任务列表
- 已完成任务加删除线
time用小标签标出
八、S3 手动同步
左侧图标栏新增 bi-cloud-arrow-up 图标,位于「重新排序自定义列表」之后,只在 S3 已配置时显示。
行为:
- 点击 → 调
s3Sync.syncToS3()(不检查autoSync开关) - 图标旋转表示同步中,防止重复点击
- 成功 / 失败都用 Toast 提示
九、设置项扩展
新增:紧急阈值
- 位置:设置 → 常规
- 字段:
urgentThresholdHours - 默认:24
- 范围:8 ~ 168
- 单位:小时
- 存储:
configRepository(LocalStorage,不同步 S3) - 影响:只影响四象限视图的「紧急」判定
数据迁移
首次启动新版本时自动执行 startDateMigration。
幂等标记:config.startDateMigrated
迁移内容(遍历 IndexedDB 所有任务):
startDate未定义 → 补listId(日期列表)或null(自定义列表)startTime未定义 → 补"09:00"completedAt未定义 → 已完成补当天 20:00,未完成补nullmigratedFrom未定义 → 补null- 遇到
createdAt→ 直接删除
文件清单
修改:
src/helpers/tasksHelper.jssrc/helpers/initialDataCreator.jssrc/store/modules/todolist.store.jssrc/migrations/migrations.jssrc/repositories/configRepository.jssrc/components/toDoList.vuesrc/components/toDoItem.vuesrc/components/activeToDo.vuesrc/components/weeklySummary.vuesrc/components/layout/sideBar.vuesrc/views/toDoModal/toDoModal.vuesrc/views/configModal.vuesrc/App.vuesrc/assets/languages/zh-CN.jsonsrc/assets/languages/en.json
新建:
src/components/completionStats.vuesrc/components/confirmResetStartDate.vuesrc/components/quadrantView.vue
本地调试
环境要求:
- Node.js 16.x(项目依赖 node-sass,不支持 Node 20+)
- Yarn
启动:
yarn install
yarn run serve浏览器打开 http://localhost:8080,支持热重载。
构建:
yarn run build产物在 dist/ 目录。
Docker 部署
项目自带 Dockerfile(多阶段构建:Node 构建 + Nginx 托管)。原有 docker-compose.yml 只引用了远程镜像,不会根据本地代码重新构建。
更新流程:
- 在项目根目录构建本地镜像:
docker build -t weektodo-custom:1.0.0 .- 修改
docker-compose.yml里image指向本地镜像:
image: weektodo-custom:1.0.0- 重建容器:
docker compose down
docker compose up -d如果代码没更新,用 docker build --no-cache 强制重建。
使用方式
新建任务:
在日期列表的空白输入框中输入任务标题,回车。
- 如果当前时间小于 13:00 → 归入上午,起点 09:00
- 如果当前时间大于等于 13:00 → 归入下午,起点 13:00
- 如果设置了
time→ 起点 =time
编辑用时起点:
打开任务详情 → 点击「开始时刻」输入框 → 修改 → 保存。
拖动任务:
拖动任务到别的日期:
- 日期列表之间拖动 → 弹出「是否重置开始日期」询问
- 涉及自定义列表 → 自动处理,不弹窗
四象限视图:
点击左侧 bi-grid-3x3 图标 → 切换到四象限视图。
- 点击任务卡片 → 打开任务详情
- 点击左上角返回按钮 → 回到主页
- 再次点击图标 → 也可切换
统计页面:
点击左侧 bi-bar-chart-line 图标 → 打开统计页。
打印:
点击左侧三点菜单 → 「PDF/打印」→ A4 横版打印当前周。
S3 手动同步:
配置 S3 后,左侧出现 bi-cloud-arrow-up 图标,点击触发同步。
调整紧急阈值:
设置 → 常规 → 「紧急阈值」输入框,范围 8~168 小时。
许可
沿用原项目 GPL 许可。
致谢
原项目 WeekToDo AI版 由 xiuji008 开发。本改造版保留其开源精神与架构设计。




Comments | NOTHING