Files
FM-OHS/README.md
fengbh b74978d2dc 新增查当周按钮,代码重构与数据分离
- 新增"查当周"按钮,计算当周周一至周日的加班总工时
- 新增 createQueryButton 工厂函数,消除月按钮重复代码
- 修复 calculateTimeDifference 返回字符串导致 NaN 的 bug
- 修复 sumOfSecondColumn/get_work_time 缺少空值保护的 bug
- 修复 isWorkDay 中 == 改为 ===
- var 统一为 const/let,提取 QUERY_DELAY_MS 常量
- 提取 getCustomMonthRange 中重复的 formatLocal
- 按钮增加 cursor:pointer 样式
- 数据与代码分离:main.template.js(~300行)+ build.py 自动组装 main.js
- update.py/comp_json.py 支持命令行年份参数,默认当年
- comp_json.py 增加去重逻辑
- 更新 README 为 GitHub 开源项目风格,含快速上手和每年更新章节

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 19:11:13 +08:00

105 lines
3.0 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.
# FM-OHS
复旦微加班时间统计 —— 一个运行在金蝶 EAS HR 考勤页面上的 [Tampermonkey][tm] 用户脚本,自动计算并显示加班工时。
[tm]: https://www.tampermonkey.net/
## 功能
- **加班自动计算**:工作日按 17:20 后计算,非工作日(周末/节假日)按全天计算
- **内置节假日数据库**:根据工作日数据自动识别调休日、法定节假日
- **多维度查询**:支持当月、上月、当周等一键查询
- **结果直显**:加班时数直接写入考勤表格,非工作日绿色高亮
## 快速上手
### 1. 安装脚本管理器
任选其一:
- [Tampermonkey](https://www.tampermonkey.net/index.php?locale=zh)(推荐)
- [脚本猫](https://docs.scriptcat.org/)
### 2. 安装脚本
前往 [Greasy Fork - 复旦微加班时间统计][gf] 点击安装。
[gf]: https://greasyfork.org/zh-CN/scripts/542984-%E5%A4%8D%E6%97%A6%E5%BE%AE%E5%8A%A0%E7%8F%AD%E6%97%B6%E9%97%B4%E7%BB%9F%E8%AE%A1
### 3. 使用
打开金蝶 EAS HR 考勤页面,菜单栏会自动出现 6 个按钮:
| 按钮 | 功能 |
|------|------|
| 统计加班时间 | 直接计算当前表格中的加班工时 |
| 查当月 | 查询当月考勤周期21 日至次月 20 日) |
| 查上月 | 查询上月考勤周期 |
| 查上上月 | 查询两个月前的考勤周期 |
| 查上上上月 | 查询三个月前的考勤周期 |
| 查当周 | 查询当周(周一至周日) |
## 每年更新
节假日数据每年需要更新一次。API 每天限 5 次调用,因此设计为一年调用一次后持久化。
### 前置条件
- Python 3.x
- `requests` 库:`pip install requests`
### 更新步骤
```bash
# 1. 抓取新年节假日数据(修改 update.py 中的 year 参数为目标年份)
python update.py
# 2. 合并到数据库并自动构建 main.js
python comp_json.py
# 3. 将生成的 main.js 内容更新到 Greasy Fork 或手动安装到 Tampermonkey
```
`comp_json.py` 会自动将新数据合并到 `data.json`,然后调用 `build.py` 生成包含完整数据的 `main.js`
## 开发
### 项目结构
```
FM-OHS/
├── main.template.js # 脚本代码模板(~300 行,可读可维护)
├── main.js # 构建产物,由 build.py 生成(提交到 Greasy Fork
├── data.json # 节假日数据(唯一数据源)
├── build.py # 构建脚本:将 data.json 注入模板 → main.js
├── update.py # 从 API 抓取年度节假日数据
├── comp_json.py # 合并新数据到 data.json 并自动构建
└── holidays_2026.json # 2026 年原始 API 响应数据
```
### 修改代码
1. 编辑 `main.template.js`(不需要碰 `main.js`
2. 运行 `python build.py` 生成 `main.js`
3. 在浏览器中加载 `main.js` 验证
### 数据格式
`data.json` 中的每条记录:
```json
{
"year": 2026,
"date": 20260101,
"week": 4,
"workday": 1,
"holiday": 88
}
```
关键字段:`workday`1 = 工作日2 = 非工作日),`date`YYYYMMDD 格式)。
## License
MIT