feat: 工作日历/考勤管理重构/AI人力报告/工作台员工分布/筛选优化/导入导出增强
- 新增工作日历页面(月历视图、事件管理、自定义事件) - 考勤管理重构为6 Tab模块(班次/排班/每日出勤/月度报表/休假记录) - AI顾问新增人力报告Tab,支持流式生成+Word导出 - 工作台总览新增员工分布统计(性别/年龄/学历/司龄饼图)+部门成本拆分 - 花名册/合同/解聘补偿新增部门和状态筛选 - 薪税管理新增工资表导入模板下载、银行代发CSV导出 - 社保公积金支持多公积金账户类型显示 - 数据导出新增花名册/解聘记录导出,中文文件名编码修复 - 数据导入新增模板下载(员工/增减员/工资表)+错误日志导出 - 移除工作台日历卡片(已迁移至独立工作日历页面) - 新增20260728/20260729更新测试指导文档
This commit is contained in:
+38
-24
@@ -34,24 +34,30 @@
|
||||
|
||||
### 1. 模板下载 401 错误(对应第19项)
|
||||
|
||||
**根因**:前端 `Settings.tsx` 使用 `window.open()` 下载模板,新窗口不携带 JWT token,后端 `authMiddleware` 返回 401。
|
||||
**现状**:`Settings.tsx` 中的 `GET /import/template` 和 `GET /import/monthly-template` 已修复(使用 `fetch` + Authorization header)。但 `Money.tsx:657` 中下载工资表模板仍使用 `window.open('/api/v1/import/payroll-template', '_blank')`,新窗口不携带 JWT token,后端 `authMiddleware` 返回 401。
|
||||
|
||||
**修复方案**:前端改为 `fetch` + `Blob` 方式下载,携带 Authorization header。
|
||||
**修复方案**:将 `Money.tsx` 中的 `window.open()` 改为 `fetch` + `Blob` 方式下载,携带 Authorization header。
|
||||
|
||||
**涉及文件**:
|
||||
- `frontend/src/pages/Settings.tsx` — 修改下载模板按钮的 onClick 逻辑
|
||||
- 涉及3个端点:`GET /import/template`、`GET /import/payroll-template`、`GET /import/monthly-template`
|
||||
- `frontend/src/pages/Money.tsx:657` — 修改工资表模板下载按钮的 onClick 逻辑
|
||||
- 涉及端点:`GET /import/payroll-template`
|
||||
|
||||
**实现要点**:
|
||||
```typescript
|
||||
// 替换 window.open(url) 为:
|
||||
const res = await api.get('/import/template', { responseType: 'blob' })
|
||||
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
|
||||
const link = document.createElement('a')
|
||||
link.href = URL.createObjectURL(blob)
|
||||
link.download = 'import-template.xlsx'
|
||||
link.click()
|
||||
URL.revokeObjectURL(link.href)
|
||||
// Money.tsx 中替换 window.open() 为:
|
||||
const handleDownloadPayrollTemplate = async () => {
|
||||
const token = useAuthStore.getState().accessToken
|
||||
const res = await fetch('/api/v1/import/payroll-template', {
|
||||
headers: token ? { Authorization: `Bearer ${token}` } : {},
|
||||
})
|
||||
const blob = await res.blob()
|
||||
const url = URL.createObjectURL(blob)
|
||||
const a = document.createElement('a')
|
||||
a.href = url
|
||||
a.download = 'payroll-import-template.xlsx'
|
||||
a.click()
|
||||
URL.revokeObjectURL(url)
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
@@ -72,13 +78,15 @@ URL.revokeObjectURL(link.href)
|
||||
|
||||
### 3. 分页上限50条过少(对应第17项)
|
||||
|
||||
**现状**:前端 `Pagination.tsx` 默认 `pageSizeOptions = [10, 20, 50]`,最大选项仅50条。后端 `roster.routes.ts` 已支持 `Math.min(pageSize, 999)`,但其他路由(`audit.routes.ts`、`notification.routes.ts` 等)默认20条且无上限校验。
|
||||
|
||||
**修复方案**:
|
||||
- 前端 Pagination 组件 pageSize 选项增加 100、200 选项
|
||||
- 后端各列表接口 pageSize 上限从 50 调整为 200
|
||||
- 前端 Pagination 组件 `pageSizeOptions` 增加 100、200 选项
|
||||
- 后端各列表接口统一增加 `Math.min(pageSize, 200)` 上限校验
|
||||
|
||||
**涉及文件**:
|
||||
- `frontend/src/components/ui/Pagination.tsx` — pageSizeOptions 增加 100/200
|
||||
- 后端各路由文件中 `pageSize` 限制调整
|
||||
- `frontend/src/components/ui/Pagination.tsx:19` — `pageSizeOptions` 默认值改为 `[10, 20, 50, 100, 200]`
|
||||
- 后端各路由文件 — 统一增加 pageSize 上限校验(`roster.routes.ts` 已支持,其余需补充)
|
||||
|
||||
---
|
||||
|
||||
@@ -230,16 +238,22 @@ URL.revokeObjectURL(link.href)
|
||||
|
||||
## P2:增强优化
|
||||
|
||||
### 10. 工作台日历功能(对应第12项)
|
||||
### 10. 自定义工作日历功能(对应第12项)
|
||||
|
||||
**现状**:Dashboard 已有只读的"本月关键日期"列表(展示合同到期、试用期到期等系统自动生成的事件),但不支持自定义工作日历,HR 无法手动添加、编辑或管理日历事件。
|
||||
|
||||
**实施方案**:
|
||||
- Dashboard 页面增加日历组件
|
||||
- 日历事件来源:合同到期、试用期到期、社保公积金调基月、员工生日、考勤确认截止日
|
||||
- 点击日期查看当日事项列表
|
||||
- 新增 `CalendarEvent` 模型:标题、日期、类型(自定义/系统)、提醒、关联人
|
||||
- HR 可手动创建/编辑/删除日历事件(如会议、团建、培训、面试等)
|
||||
- 日历视图从列表升级为月历网格视图,支持点击日期添加事件
|
||||
- 系统自动事件与自定义事件合并展示,用颜色区分
|
||||
- 支持按类型筛选
|
||||
|
||||
**涉及文件**:
|
||||
- `frontend/src/pages/Dashboard.tsx` — 增加日历组件
|
||||
- `backend/src/routes/dashboard.routes.ts` — 新增 `GET /dashboard/calendar-events?month=YYYY-MM`
|
||||
- `backend/prisma/schema.prisma` — 新增 CalendarEvent 模型
|
||||
- `backend/src/routes/calendar.routes.ts` — 新建 CRUD 端点
|
||||
- `frontend/src/pages/Dashboard.tsx` — 日历列表升级为月历网格 + 自定义事件管理
|
||||
- `frontend/src/components/Calendar.tsx` — 新建日历组件
|
||||
|
||||
---
|
||||
|
||||
@@ -335,7 +349,7 @@ URL.revokeObjectURL(link.href)
|
||||
|
||||
| 优先级 | 编号 | 项目 | 预估工作量 |
|
||||
|--------|------|------|-----------|
|
||||
| P0 | 1 | 模板下载 401 修复 | 0.5天 |
|
||||
| P0 | 1 | 工资表模板下载 401 修复(仅剩 Money.tsx) | 0.5天 |
|
||||
| P0 | 2 | 花名册身份证号显示+筛选 | 1天 |
|
||||
| P0 | 3 | 分页上限扩展 | 0.5天 |
|
||||
| P0 | 7 | 批量导入参保城市 | 0.5天 |
|
||||
@@ -344,7 +358,7 @@ URL.revokeObjectURL(link.href)
|
||||
| P1 | 5 | 人事审批流程 | 3-5天 |
|
||||
| P1 | 6 | 薪资调薪审核+报表 | 3-5天 |
|
||||
| P1 | 9 | 多公积金比例账户 | 2天 |
|
||||
| P2 | 10 | 工作台日历 | 1-2天 |
|
||||
| P2 | 10 | 自定义工作日历 | 2-3天 |
|
||||
| P2 | 11 | 人力信息总览增强 | 2天 |
|
||||
| P2 | 12 | 人力成本分析维度 | 2-3天 |
|
||||
| P2 | 13 | 年度价值报告简化 | 1天 |
|
||||
|
||||
Reference in New Issue
Block a user