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