- 新增"查当周"按钮,计算当周周一至周日的加班总工时 - 新增 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>
105 lines
3.0 KiB
Markdown
105 lines
3.0 KiB
Markdown
# 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
|