From 1f90ac5021422296d9e3451957fd71c24e6f46b9 Mon Sep 17 00:00:00 2001 From: freedakgmail Date: Wed, 19 Aug 2026 07:19:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20monthlySalary=20=E5=A7=8B=E7=BB=88?= =?UTF-8?q?=E7=94=B1=20baseSalary=20+=20performanceSalary=20=E8=AE=A1?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - updateEmployeeSchema 加上 baseSalary/performanceSalary 字段(Zod strip 问题) - updateEmployee: 只要传了 baseSalary 或 performanceSalary 就自动计算 monthlySalary - 不再依赖前端传 monthlySalary,后端自动用 base + perf 计算总额 --- backend/src/services/contract.service.ts | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/backend/src/services/contract.service.ts b/backend/src/services/contract.service.ts index ae9210e..a3ce120 100644 --- a/backend/src/services/contract.service.ts +++ b/backend/src/services/contract.service.ts @@ -688,20 +688,17 @@ export async function updateEmployee(orgId: string, id: string, data: any) { if (data.name !== undefined) updateData.name = data.name if (data.department !== undefined) updateData.department = data.department if (data.hireDate !== undefined) updateData.hireDate = new Date(data.hireDate) - if (data.monthlySalary !== undefined) { + if (data.baseSalary !== undefined || data.performanceSalary !== undefined) { const oldSalary = Number(decrypt(employee.monthlySalary)) || 0 - // 如果同时传了 baseSalary 和 performanceSalary,自动计算 monthlySalary = base + perf - const baseNum = data.baseSalary !== undefined ? Number(data.baseSalary) || 0 : null - const perfNum = data.performanceSalary !== undefined ? Number(data.performanceSalary) || 0 : null - const newSalary = (baseNum !== null && perfNum !== null) ? baseNum + perfNum : (Number(data.monthlySalary) || 0) + // monthlySalary 始终由 baseSalary + performanceSalary 计算 + const baseNum = data.baseSalary !== undefined ? Number(data.baseSalary) || 0 + : (employee.baseSalary ? Number(decrypt(employee.baseSalary)) || 0 : 0) + const perfNum = data.performanceSalary !== undefined ? Number(data.performanceSalary) || 0 + : (employee.performanceSalary ? Number(decrypt(employee.performanceSalary)) || 0 : 0) + const newSalary = baseNum + perfNum updateData.monthlySalary = encrypt(String(newSalary)) - // 同步更新工资结构 - if (data.baseSalary !== undefined) { - updateData.baseSalary = encrypt(String(Number(data.baseSalary) || 0)) - } - if (data.performanceSalary !== undefined) { - updateData.performanceSalary = encrypt(String(Number(data.performanceSalary) || 0)) - } + if (data.baseSalary !== undefined) updateData.baseSalary = encrypt(String(baseNum)) + if (data.performanceSalary !== undefined) updateData.performanceSalary = encrypt(String(perfNum)) // 记录薪资变更 if (oldSalary !== newSalary) { const now = new Date()