code996 icon indicating copy to clipboard operation
code996 copied to clipboard

feat: 添加多格式报告导出和浏览器打开功能

Open h7ml opened this issue 1 month ago • 5 comments

📝 功能说明

本 PR 为 code996 添加了强大的报告导出和分享功能。

✨ 新增功能

1. 多格式报告导出 (--format / -f)

支持导出为 5 种精美格式:

格式 特点 适用场景
📄 TXT Unicode 艺术边框 终端查看、日志记录
📝 Markdown 表格和徽章 GitHub/文档分享
🎨 HTML 渐变背景、交互卡片 浏览器查看、邮件
🖼️ SVG 矢量图、可缩放 高质量图片
📸 PNG 1200x800 位图 演示文稿、社交媒体

2. 浏览器打开 (--open / -o)

  • 自动在系统默认浏览器中打开可视化分析链接
  • 跨平台支持(macOS/Windows/Linux)
  • 使用 `open-web-browser` 包保证兼容性

3. Vercel URL 生成

  • 每次分析完成自动生成包含完整数据的可视化链接
  • URL 包含时间范围、提交数据、格式参数
  • 终端友好显示,方便手动复制

🎨 样式优化

HTML 报告

  • 紫色渐变背景(#667eea → #764ba2)
  • 玻璃态效果(backdrop-filter)
  • 交互式卡片布局,悬停动画
  • 响应式设计,支持移动端
  • 根据 996 指数显示不同颜色

Markdown 报告

  • 使用表格展示核心指标
  • 根据分数自动显示相应 Emoji
  • 分层信息展示(核心指标/工作分布/加班分析)
  • GitHub 风格,完美渲染

TXT 报告

  • Unicode 艺术边框(╔═╗ ║ ╚═╝)
  • Emoji 图标分类信息
  • 清晰的分层结构
  • 终端友好显示

SVG/PNG 报告

  • 1200x800 高分辨率
  • 渐变背景和投影效果
  • 信息可视化展示
  • 适合演示和分享

📦 技术实现

依赖更新

  • ✅ 新增 `[email protected]` - 跨平台浏览器打开
  • ✅ 添加 TypeScript 类型声明

代码结构

src/
├── cli/
│   ├── index.ts              # 新增 --format 和 --open 参数
│   └── commands/
│       ├── analyze.ts        # 集成导出和浏览器打开
│       └── report/
│           └── exporter.ts   # 美化所有输出模板
├── utils/
│   └── url-generator.ts      # URL 生成和浏览器打开
└── __tests__/
    ├── exporter.test.ts      # 导出功能测试
    └── url-generator.test.ts # URL 生成测试

测试覆盖

  • ✅ 21 个测试用例全部通过
  • ✅ url-generator: 9 个测试
  • ✅ exporter: 12 个测试
  • ✅ 覆盖所有格式和边界情况

📖 使用示例

# 基础导出
code996 -f html                    # 导出为精美的 HTML 报告
code996 -f md                      # 导出为 Markdown 格式
code996 -f png                     # 导出为 PNG 图片

# 自动打开浏览器
code996 --open                     # 分析并在浏览器打开
code996 -f html -o                 # 导出 HTML 并打开浏览器

# 组合使用
code996 -y 2024 -f html -o         # 分析2024年,导出并打开
code996 trend -f png               # 趋势分析导出为图片
code996 --self -f md -o            # 分析自己的数据并分享

📄 文档更新

  • ✅ 更新 README 添加新功能说明
  • ✅ 添加使用示例和效果预览
  • ✅ 更新帮助文档

✅ 测试结果

PASS src/__tests__/url-generator.test.ts
  URL Generator
    generateVercelUrl
      ✓ 应该生成包含时间范围的 URL
      ✓ 应该正确编码星期数据
      ✓ 应该正确编码小时数据
      ✓ 应该包含 format 参数
      ✓ 应该使用默认 format 为 txt
      ✓ 应该处理空的时间范围
      ✓ 应该支持不同的 format 类型
    printVercelUrl
      ✓ 应该打印 URL
      ✓ 应该包含提示信息

PASS src/__tests__/exporter.test.ts
  Report Exporter
    ✓ 12 个测试全部通过

Test Suites: 2 passed, 2 total
Tests:       21 passed, 21 total

🔍 变更文件

  • `src/cli/index.ts` - 添加 --format 和 --open 命令行参数
  • `src/cli/commands/analyze.ts` - 集成导出和浏览器打开功能
  • `src/cli/commands/report/exporter.ts` - 美化所有输出模板
  • `src/utils/url-generator.ts` - 优化使用 open-web-browser
  • `src/types/open-web-browser.d.ts` - 添加类型声明
  • `package.json` - 添加 open-web-browser 依赖
  • `README.md` - 更新文档说明
  • `src/tests/exporter.test.ts` - 添加导出功能测试
  • `src/tests/url-generator.test.ts` - 添加 URL 生成测试

📸 效果预览

生成的报告文件保存在当前工作目录:

  • `report.txt` - 文本报告(Unicode 艺术边框)
  • `report.md` - Markdown 报告(表格和 Emoji)
  • `report.html` - HTML 网页(渐变背景、交互卡片)
  • `report.svg` - SVG 矢量图(高质量可缩放)
  • `report.png` - PNG 图片(1200x800)

特别说明

  • ✅ 所有测试已通过,代码质量有保障
  • ✅ 跨平台兼容,支持 macOS/Windows/Linux
  • ✅ 向后兼容,不影响现有功能
  • ✅ 代码已编译成功,可以安全合并
  • ✅ 遵循项目现有代码规范

感谢您审阅此 PR!如有任何问题或建议,请随时提出。🙏

h7ml avatar Nov 20 '25 10:11 h7ml

你的导出功能很棒!我是计划支持导出多格式的。

不过有个不幸的消息,你现在参考的代码已经很落后了,实际上目前的主要代码在dev分支,dev分支已经有很多新功能了,预计在周五晚上会有一波合并(实际上这周到下周每天还会大量频繁更新,建议等频繁更新结束后再重新评估提交PR)

另外关于打开为网页功能,我是准备基于 https://github.com/hellodigua/code996-web 这个项目继续做的,到时候可能会有一波代码合并。

嗯……

hellodigua avatar Nov 20 '25 11:11 hellodigua

什么样的情况和场景下会需要导出多格式

h7ml avatar Nov 20 '25 11:11 h7ml

html是大概率要做的,报告展示的好看点是个强需求,另外txt/md的报告也需要,可能需要作为留档存在,其他的需求其实没那么强

hellodigua avatar Nov 20 '25 11:11 hellodigua

html是大概率要做的,报告展示的好看点是个强需求,另外txt/md的报告也需要,可能需要作为留档存在,其他的需求其实没那么强

LGTM

h7ml avatar Nov 20 '25 11:11 h7ml

html是大概率要做的,报告展示的好看点是个强需求,另外txt/md的报告也需要,可能需要作为留档存在,其他的需求其实没那么强

png 和 svg 一般的项目报告和年终总结也许需要。我是考虑到基于报告化,和实用性。

h7ml avatar Nov 20 '25 11:11 h7ml