From 37649419c4f41368cae062528b7c1d650bccc47c Mon Sep 17 00:00:00 2001 From: selfrelease Date: Sun, 16 Aug 2026 13:16:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20copy=5Flast=E6=A8=A1=E5=BC=8F=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E6=9C=9F=E5=B7=A5=E8=B5=84=E8=A2=AB=E4=B8=8A=E6=9C=88?= =?UTF-8?q?=E5=B7=A5=E8=B5=84=E6=9D=A1=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bug: copy_last模式下试用期判定后被prevPayslip.baseSalary无条件覆盖, 导致试用期员工复制上月批次时仍用转正工资而非probationSalary。 修复: 试用期判定优先,仅非试用期时才用上月工资条baseSalary。 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- backend/src/routes/payroll2.routes.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/src/routes/payroll2.routes.ts b/backend/src/routes/payroll2.routes.ts index fa9bd2f..9821d40 100644 --- a/backend/src/routes/payroll2.routes.ts +++ b/backend/src/routes/payroll2.routes.ts @@ -358,12 +358,15 @@ router.post('/batches', async (req: AuthRequest, res: Response, next: NextFuncti // 试用期且 probationSalary > 0 → 用试用期工资;否则用转正工资 const batchMonthEnd = new Date(`${month}-28T23:59:59`) // 月末近似 const latestContract = emp.contracts?.[0] - if (isInProbation(latestContract, batchMonthEnd) && latestContract.probationSalary > 0) { + const inProbation = isInProbation(latestContract, batchMonthEnd) + if (inProbation && latestContract.probationSalary > 0) { baseSalary = latestContract.probationSalary + } else if (prevPayslip) { + // 非试用期:优先用上月工资条的基本工资(保持薪资连续性) + baseSalary = prevPayslip.baseSalary } else if (emp.monthlySalary) { try { baseSalary = Number(decrypt(emp.monthlySalary)) || 0 } catch { baseSalary = Number(emp.monthlySalary) || 0 } } - if (prevPayslip) baseSalary = prevPayslip.baseSalary overtimePay = overtime?.totalPay || 0 allowance = prevPayslip?.allowance || 0 deduction = prevPayslip?.deduction || 0