fix: 在职/离职状态改为根据解聘日期动态计算

- 花名册列表 API: include terminations,根据解聘日期<=今天判断RESIGNED
- 员工详情 API: 同样动态计算 status
- 证据链 API: 同样动态计算 status
- 不再依赖数据库中静态的 status 字段
- 吴芳等解聘日期在未来的员工将正确显示为在职
This commit is contained in:
freedakgmail
2026-07-23 17:14:37 +08:00
parent 9a4e8da0a0
commit e6b5ac5989
+9 -2
View File
@@ -26,6 +26,7 @@ router.get('/', authMiddleware, async (req: AuthRequest, res, next) => {
orderBy: { createdAt: 'desc' },
include: {
contracts: { orderBy: { createdAt: 'desc' }, take: 1 },
terminations: { orderBy: { terminationDate: 'desc' }, take: 1 },
_count: {
select: {
disciplinaryRecords: true,
@@ -38,6 +39,8 @@ router.get('/', authMiddleware, async (req: AuthRequest, res, next) => {
},
},
})
const today = new Date()
today.setHours(0, 0, 0, 0)
const result = employees.map((e) => {
const latestContract = e.contracts[0] || null
const contractInfo = latestContract
@@ -59,7 +62,7 @@ router.get('/', authMiddleware, async (req: AuthRequest, res, next) => {
id: e.id,
name: e.name,
department: e.department,
status: e.status,
status: e.terminations.some((t) => t.terminationDate <= today) ? 'RESIGNED' : 'ACTIVE',
hireDate: e.hireDate,
gender: e.gender,
phone: e.phone,
@@ -98,10 +101,14 @@ router.get('/:id/profile', authMiddleware, async (req: AuthRequest, res, next) =
return res.status(404).json({ success: false, error: { code: 'NOT_FOUND', message: '员工不存在' } })
}
const { monthlySalary, bankAccount, idCardNumber, ...rest } = employee
const today = new Date()
today.setHours(0, 0, 0, 0)
const dynamicStatus = employee.terminations.some((t) => t.terminationDate <= today) ? 'RESIGNED' : 'ACTIVE'
res.json({
success: true,
data: {
...rest,
status: dynamicStatus,
monthlySalary: safeDecrypt(monthlySalary),
bankAccount: bankAccount ? safeDecrypt(bankAccount).toString() : null,
idCardNumber: idCardNumber ? safeDecrypt(idCardNumber).toString() : null,
@@ -251,7 +258,7 @@ router.get('/:id/evidence-chain', authMiddleware, async (req: AuthRequest, res,
name: empName,
department: empDept,
hireDate,
status: employee.status,
status: employee.terminations.some((t) => t.terminationDate <= new Date()) ? 'RESIGNED' : 'ACTIVE',
gender: employee.gender,
phone: employee.phone,
},