fix: monthlySalary 始终由 baseSalary + performanceSalary 计算

- updateEmployeeSchema 加上 baseSalary/performanceSalary 字段(Zod strip 问题)
- updateEmployee: 只要传了 baseSalary 或 performanceSalary 就自动计算 monthlySalary
- 不再依赖前端传 monthlySalary,后端自动用 base + perf 计算总额
This commit is contained in:
freedakgmail
2026-08-19 07:19:37 +08:00
parent 8d7cc79620
commit 1f90ac5021
+9 -12
View File
@@ -688,20 +688,17 @@ export async function updateEmployee(orgId: string, id: string, data: any) {
if (data.name !== undefined) updateData.name = data.name if (data.name !== undefined) updateData.name = data.name
if (data.department !== undefined) updateData.department = data.department if (data.department !== undefined) updateData.department = data.department
if (data.hireDate !== undefined) updateData.hireDate = new Date(data.hireDate) 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 const oldSalary = Number(decrypt(employee.monthlySalary)) || 0
// 如果同时传了 baseSalary performanceSalary,自动计算 monthlySalary = base + perf // monthlySalary 始终由 baseSalary + performanceSalary 计算
const baseNum = data.baseSalary !== undefined ? Number(data.baseSalary) || 0 : null const baseNum = data.baseSalary !== undefined ? Number(data.baseSalary) || 0
const perfNum = data.performanceSalary !== undefined ? Number(data.performanceSalary) || 0 : null : (employee.baseSalary ? Number(decrypt(employee.baseSalary)) || 0 : 0)
const newSalary = (baseNum !== null && perfNum !== null) ? baseNum + perfNum : (Number(data.monthlySalary) || 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)) updateData.monthlySalary = encrypt(String(newSalary))
// 同步更新工资结构 if (data.baseSalary !== undefined) updateData.baseSalary = encrypt(String(baseNum))
if (data.baseSalary !== undefined) { if (data.performanceSalary !== undefined) updateData.performanceSalary = encrypt(String(perfNum))
updateData.baseSalary = encrypt(String(Number(data.baseSalary) || 0))
}
if (data.performanceSalary !== undefined) {
updateData.performanceSalary = encrypt(String(Number(data.performanceSalary) || 0))
}
// 记录薪资变更 // 记录薪资变更
if (oldSalary !== newSalary) { if (oldSalary !== newSalary) {
const now = new Date() const now = new Date()