fix: copy_last模式试用期工资被上月工资条覆盖

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>
This commit is contained in:
selfrelease
2026-08-16 13:16:42 +08:00
parent 83b4b37de0
commit 37649419c4
+5 -2
View File
@@ -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