diff --git a/docs/STATISTICS_FEATURE.md b/docs/STATISTICS_FEATURE.md new file mode 100644 index 0000000..47d9e90 --- /dev/null +++ b/docs/STATISTICS_FEATURE.md @@ -0,0 +1,259 @@ +# 统计分析系统功能说明 + +## 概述 + +本次实现了完整的统计分析系统,帮助用户通过可视化数据分析了解工作习惯,优化时间分配。 + +## 已实现的功能 + +### 1. 数据记录层 + +**文件**: `src/renderer/utils/StatisticsStore.js` + +- ✅ 自动记录每个番茄钟的完整信息(类型、时长、时间、关联任务) +- ✅ 使用 UUID 作为唯一标识符 +- ✅ 支持记录中断原因 +- ✅ 持久化存储到本地 JSON 文件 +- ✅ 提供数据导入/导出功能 + +**数据结构**: +```javascript +{ + id: "uuid", + type: "work" | "short-break" | "long-break", + duration: 25, // 分钟 + startTime: "2025-11-25T10:00:00.000Z", + endTime: "2025-11-25T10:25:00.000Z", + completed: true, + interrupted: false, + interruptReason: null, + taskName: null, + taskId: null +} +``` + +### 2. 统计分析层 + +**文件**: `src/renderer/utils/StatisticsAnalyzer.js` + +提供多维度数据分析: + +- ✅ **日统计**: 今日完成数、总时长、平均专注时长、完成率 +- ✅ **周统计**: 7天柱状图、最高效/最低效日识别 +- ✅ **月统计**: 趋势折线图、连续打卡天数 +- ✅ **历史总览**: 累计数据、当前连续打卡 +- ✅ **热力图数据**: 24小时×7天工作强度矩阵 +- ✅ **中断分析**: 识别主要干扰因素 +- ✅ **任务统计**: 按任务分组统计(为未来扩展准备) + +### 3. 状态管理 + +**文件**: `src/renderer/store/modules/Statistics.js` + +- ✅ Vuex 模块管理统计数据状态 +- ✅ 会话生命周期管理(开始、完成、中断) +- ✅ 多视图状态切换 +- ✅ 数据刷新和缓存 + +### 4. UI 组件 + +#### 中断记录对话框 +**文件**: `src/renderer/components/InterruptDialog.vue` + +- ✅ 预设常见中断原因(紧急事项、会议、电话等) +- ✅ 支持自定义输入 +- ✅ 优雅的动画效果 +- ✅ 可选记录(可跳过) + +#### 日统计视图 +**文件**: `src/renderer/components/statistics/Stats-day.vue` + +- ✅ 4个核心指标卡片 +- ✅ 今日时间线展示 +- ✅ 完成/中断状态可视化 +- ✅ 空状态提示 + +#### 周统计视图 +**文件**: `src/renderer/components/statistics/Stats-week.vue` + +- ✅ 汇总卡片(总完成、总时长、日均) +- ✅ 柱状图展示每日完成情况 +- ✅ 最高效/需加油日洞察 +- ✅ 每日详细数据列表 + +#### 月统计视图 +**文件**: `src/renderer/components/statistics/Stats-month.vue` + +- ✅ SVG 折线图展示趋势 +- ✅ 月历热力图视图 +- ✅ 连续打卡统计 +- ✅ 活跃天数计数 + +#### 历史总览 +**文件**: `src/renderer/components/statistics/Stats-history.vue` + +- ✅ 累计成就展示 +- ✅ 时间分布热力图 +- ✅ 中断原因分析 +- ✅ 里程碑成就系统(8个成就) + +#### 热力图组件 +**文件**: `src/renderer/components/statistics/Stats-heatmap.vue` + +- ✅ 24小时×7天矩阵 +- ✅ 5级颜色强度 +- ✅ 最高效时段/日识别 +- ✅ 交互式工具提示 + +#### 中断统计组件 +**文件**: `src/renderer/components/statistics/Stats-interruptions.vue` + +- ✅ 排名展示 +- ✅ 可视化进度条 +- ✅ 改进建议提示 + +#### 统计主组件 +**文件**: `src/renderer/components/drawer/Drawer-statistics.vue` + +- ✅ 标签导航(日/周/月/历史) +- ✅ 视图切换动画 +- ✅ 响应式布局 + +### 5. 集成到主应用 + +**修改的文件**: + +1. `src/renderer/components/timer/Timer.vue` + - ✅ 番茄钟开始时创建会话记录 + - ✅ 完成时标记为已完成 + - ✅ 重置/中断时弹出对话框 + +2. `src/renderer/components/drawer/Drawer.vue` + - ✅ 注册统计组件 + +3. `src/renderer/components/drawer/Drawer-menu.vue` + - ✅ 添加统计入口图标 + +4. `src/renderer/App.vue` + - ✅ 添加中断对话框组件 + +## 使用方法 + +### 基本使用 + +1. **启动番茄钟**: 自动创建会话记录 +2. **完成番茄钟**: 自动标记为已完成并保存 +3. **中断番茄钟**: 点击重置按钮会弹出对话框,可选择记录中断原因 +4. **查看统计**: 点击底部导航栏的统计图标进入统计页面 + +### 查看统计数据 + +- **今日**: 查看今天的工作情况和时间线 +- **本周**: 对比本周每天的效率 +- **本月**: 查看长期趋势和连续打卡 +- **历史**: 查看所有累计数据和成就 + +### 数据管理 + +统计数据自动保存在用户目录: +- Windows: `%APPDATA%/pomotroid/pomodoro-sessions.json` +- macOS: `~/Library/Application Support/pomotroid/pomodoro-sessions.json` +- Linux: `~/.config/pomotroid/pomodoro-sessions.json` + +## 技术特性 + +- 📊 **丰富的可视化**: 卡片、柱状图、折线图、热力图、日历视图 +- 💾 **可靠的持久化**: JSON 文件存储,支持导入导出 +- 🎨 **主题适配**: 自动适配应用主题色 +- ⚡ **高性能**: 数据计算在需要时才执行 +- 🔒 **数据安全**: 本地存储,不依赖网络 +- 🎯 **无感知记录**: 后台自动记录,不干扰工作流 + +## 未来扩展建议 + +1. **任务管理** + - 添加任务列表功能 + - 番茄钟关联具体任务 + - 按任务统计分析 + +2. **目标设定** + - 设置每日番茄钟目标 + - 目标达成提醒 + - 目标完成趋势 + +3. **数据导出** + - CSV 导出 + - PDF 报表生成 + - 图表导出 + +4. **云同步** + - 多设备数据同步 + - 数据备份 + +5. **高级分析** + - 效率趋势预测 + - 个性化建议 + - 对比分析 + +## 性能优化 + +- 使用 Vuex 缓存计算结果 +- 按需加载统计数据 +- 大数据集分页处理 +- 图表延迟渲染 + +## 兼容性 + +- ✅ Windows +- ✅ macOS +- ✅ Linux +- ✅ 支持所有现有主题 +- ✅ 响应式布局适配不同窗口大小 + +## 测试建议 + +1. **功能测试** + ``` + - 启动多个番茄钟并完成 + - 测试中断记录功能 + - 切换不同统计视图 + - 查看空数据状态 + ``` + +2. **边界测试** + ``` + - 大量数据性能(1000+ 会话) + - 日期边界(跨年、跨月) + - 连续打卡计算 + ``` + +3. **数据完整性** + ``` + - 应用重启后数据保留 + - 导入导出功能 + - 并发写入处理 + ``` + +## 已知问题和限制 + +- 不支持编辑历史记录 +- 删除数据需要手动操作文件 +- 热力图目前仅显示最近4周 + +## 成就系统 + +实现了8个里程碑成就: +1. 🌱 开始旅程 - 完成第一个番茄钟 +2. 🔟 初露锋芒 - 累计完成10个 +3. ⭐ 坚持不懈 - 累计完成50个 +4. 💯 百尺竿头 - 累计完成100个 +5. 🔥 坚持一周 - 连续打卡7天 +6. 💪 习惯养成 - 连续打卡30天 +7. ⏰ 专注达人 - 累计专注10小时 +8. 🏅 时间大师 - 累计专注100小时 + +--- + +**开发完成**: 2025年11月25日 +**版本**: 1.0.0 +**状态**: ✅ 功能完整,可投入使用 diff --git a/docs/STATISTICS_QUICKSTART.md b/docs/STATISTICS_QUICKSTART.md new file mode 100644 index 0000000..f3625dd --- /dev/null +++ b/docs/STATISTICS_QUICKSTART.md @@ -0,0 +1,180 @@ +# 统计分析系统 - 快速开始指南 + +## 安装依赖 + +由于所有功能都使用内置功能实现,不需要安装额外的依赖。 + +## 启动开发环境 + +```powershell +# 安装项目依赖(如果还没安装) +npm install + +# 启动开发服务器 +npm run dev +``` + +## 快速测试 + +### 1. 测试数据记录 + +1. 启动应用后,点击开始按钮启动一个番茄钟 +2. 等待几秒后点击重置按钮 +3. 会弹出中断原因对话框,选择一个原因或跳过 +4. 数据已被记录 + +### 2. 查看统计 + +1. 点击底部导航栏的**统计图标**(📊) +2. 默认显示"今日"统计视图 +3. 切换到"本周"、"本月"、"历史"查看不同维度的统计 + +### 3. 生成测试数据 + +为了更好地展示统计功能,建议创建一些测试数据: + +**方法1:手动创建** +- 完成多个番茄钟(正常完成或中断) +- 在不同时段进行,以便热力图有数据 + +**方法2:使用浏览器控制台** +打开开发者工具(F12),在控制台输入: + +```javascript +// 创建最近7天的测试数据 +const store = require('@/utils/StatisticsStore').getStatisticsStore() +const today = new Date() + +for (let day = 0; day < 7; day++) { + const date = new Date(today) + date.setDate(today.getDate() - day) + + // 每天随机创建3-8个番茄钟 + const count = Math.floor(Math.random() * 6) + 3 + + for (let i = 0; i < count; i++) { + const hour = Math.floor(Math.random() * 12) + 8 // 8-20点 + const session = { + id: Math.random().toString(36).substr(2, 9), + type: 'work', + duration: 25, + startTime: new Date(date.setHours(hour, 0, 0, 0)).toISOString(), + endTime: new Date(date.setHours(hour, 25, 0, 0)).toISOString(), + completed: Math.random() > 0.2, // 80%完成率 + interrupted: Math.random() < 0.2, + interruptReason: Math.random() < 0.2 ? ['紧急事项', '会议', '电话'][Math.floor(Math.random() * 3)] : null, + taskName: null, + taskId: null + } + store.data.sessions.push(session) + } +} + +store.saveData() +console.log('测试数据已生成!刷新统计页面查看。') +``` + +## 功能验证清单 + +- [ ] 番茄钟启动时创建会话记录 +- [ ] 番茄钟完成时正确标记 +- [ ] 重置时弹出中断对话框 +- [ ] 中断原因可选择或自定义 +- [ ] 今日统计显示正确 +- [ ] 周统计柱状图显示正确 +- [ ] 月统计折线图和日历显示正确 +- [ ] 历史总览显示累计数据 +- [ ] 热力图显示工作时段分布 +- [ ] 中断统计显示干扰因素 +- [ ] 成就系统根据数据解锁 +- [ ] 视图切换流畅 +- [ ] 数据持久化到文件 + +## 数据文件位置 + +统计数据保存在: +- **Windows**: `%APPDATA%/pomotroid/pomodoro-sessions.json` +- **macOS**: `~/Library/Application Support/pomotroid/pomodoro-sessions.json` +- **Linux**: `~/.config/pomotroid/pomodoro-sessions.json` + +## 调试技巧 + +### 查看当前会话 + +```javascript +// 在浏览器控制台 +this.$store.getters.currentSession +``` + +### 查看所有统计数据 + +```javascript +// 日统计 +this.$store.getters.dayStats + +// 周统计 +this.$store.getters.weekStats + +// 月统计 +this.$store.getters.monthStats + +// 历史统计 +this.$store.getters.historyStats +``` + +### 手动触发数据刷新 + +```javascript +this.$store.dispatch('refreshStats') +``` + +### 清空所有数据(谨慎使用) + +```javascript +this.$store.dispatch('clearAllData') +``` + +## 常见问题 + +### Q: 统计页面没有数据? +A: 确保已经完成或中断过至少一个工作番茄钟。休息时段不会被统计。 + +### Q: 热力图显示空白? +A: 热力图需要最近4周内有完成的番茄钟数据。 + +### Q: 成就没有解锁? +A: 检查是否满足成就条件,刷新历史页面查看。 + +### Q: 数据丢失了? +A: 检查用户数据目录下的 `pomodoro-sessions.json` 文件是否存在。 + +### Q: 如何备份数据? +A: 复制 `pomodoro-sessions.json` 文件到安全位置。 + +### Q: 如何恢复数据? +A: 将备份的 `pomodoro-sessions.json` 文件复制回用户数据目录。 + +## 性能建议 + +- 数据量超过1000条记录时,建议定期导出归档 +- 大量数据可能影响启动速度,可考虑实现数据分片 +- 复杂计算(如月视图)会在第一次加载时较慢,后续会使用缓存 + +## 下一步 + +1. 使用应用几天,积累真实数据 +2. 根据统计洞察调整工作习惯 +3. 关注中断原因,减少干扰 +4. 利用热力图找到最佳工作时段 +5. 设定并追踪连续打卡目标 + +## 贡献建议 + +如果发现问题或有改进建议: +1. 记录问题详情(截图、错误日志) +2. 提出功能改进建议 +3. 考虑优化用户体验的方案 + +--- + +**祝你使用愉快!保持专注,提升效率!🍅** diff --git a/src/index.ejs b/src/index.ejs index 5e51210..5d82469 100644 --- a/src/index.ejs +++ b/src/index.ejs @@ -2,6 +2,7 @@
+