Skip to content

Conversation

@h7ml
Copy link

@h7ml h7ml commented Nov 20, 2025

📝 功能说明

本 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 高分辨率
  • 渐变背景和投影效果
  • 信息可视化展示
  • 适合演示和分享

📦 技术实现

依赖更新

  • ✅ 新增 `open-web-browser@0.1.1` - 跨平台浏览器打开
  • ✅ 添加 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!如有任何问题或建议,请随时提出。🙏

hellodigua and others added 4 commits November 20, 2025 15:37
新增 `-f, --format` 选项,支持将分析结果导出为多种格式,包括:
txt、md、html、svg 和 png。默认格式为 txt。
新增 `-f, --format` 选项支持多种导出格式(txt、md、html、svg、png),
新增 `-o, --open` 选项可在生成报告后自动调用浏览器打开对应的 Vercel 可视化链接。
同时添加了相关工具函数用于构建 URL 和跨平台打开浏览器。
✨ 新功能
- 新增 --format/-f 参数支持导出 txt/md/html/svg/png 格式报告
- 新增 --open/-o 参数自动在浏览器中打开可视化链接
- 美化所有输出模板(TXT/Markdown/HTML/SVG)
- 自动生成包含完整数据的 Vercel 可视化 URL

🎨 样式优化
- HTML: 渐变背景、交互式卡片、响应式设计
- Markdown: 表格展示、根据分数显示 Emoji
- TXT: Unicode 艺术边框、分层信息展示
- SVG/PNG: 1200x800 高分辨率、渐变和投影效果

📦 依赖更新
- 新增 open-web-browser 实现跨平台浏览器打开

📝 文档和测试
- 添加 url-generator 和 exporter 单元测试
- 更新 README 添加新功能说明
- 所有测试通过 (21 passed)

🔗 相关说明
- 支持所有命令的格式导出(analyze、trend)
- 文件保存在当前工作目录
- URL 参数包含完整的分析数据
@hellodigua
Copy link
Owner

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

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

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

嗯……

@h7ml
Copy link
Author

h7ml commented Nov 20, 2025

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

@hellodigua
Copy link
Owner

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

@h7ml
Copy link
Author

h7ml commented Nov 20, 2025

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

LGTM

@h7ml
Copy link
Author

h7ml commented Nov 20, 2025

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

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

@hellodigua hellodigua force-pushed the main branch 2 times, most recently from 2790df8 to a0ade95 Compare November 24, 2025 09:14
@hellodigua hellodigua force-pushed the main branch 2 times, most recently from 4a00618 to 5e6931f Compare December 9, 2025 13:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants