diff --git a/backend/src/routes/roster.routes.ts b/backend/src/routes/roster.routes.ts index d3689d7..e13b5de 100644 --- a/backend/src/routes/roster.routes.ts +++ b/backend/src/routes/roster.routes.ts @@ -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, },