# 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