| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="row.basicSalary = parseNum(row.basicSalary)" /> |
| | | @input="calculateRow(row)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="白班天数" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="handleDaysChange(row)" /> |
| | | @input="calculateRow(row)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="夜班天数" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="handleDaysChange(row)" /> |
| | | @input="calculateRow(row)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="餐补" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="row.otherIncome = parseNum(row.otherIncome)" /> |
| | | @input="calculateRow(row)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="社保个人" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="row.socialPersonal = parseNum(row.socialPersonal)" /> |
| | | @input="calculateRow(row)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="公积金个人" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="row.fundPersonal = parseNum(row.fundPersonal)" /> |
| | | @input="calculateRow(row)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="其他支出" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="row.otherDeduct = parseNum(row.otherDeduct)" /> |
| | | @input="calculateRow(row)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="社保补缴" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="row.socialSecurityRetroactive = parseNum(row.socialSecurityRetroactive)" /> |
| | | @input="calculateRow(row)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="工资个税" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="row.salaryTax = parseNum(row.salaryTax)" /> |
| | | @input="calculateRow(row)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="应发工资" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="row.grossSalary = parseNum(row.grossSalary)" /> |
| | | disabled /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="应扣工资" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="row.deductSalary = parseNum(row.deductSalary)" /> |
| | | disabled /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="实发工资" |
| | |
| | | type="number" |
| | | placeholder="0" |
| | | size="small" |
| | | @input="row.netSalary = parseNum(row.netSalary)" /> |
| | | disabled /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="备注" |
| | |
| | | }); |
| | | }; |
| | | |
| | | const handleDaysChange = row => { |
| | | const calculateRow = row => { |
| | | // 确保所有数值字段为数字 |
| | | row.basicSalary = parseNum(row.basicSalary); |
| | | row.dayDays = parseNum(row.dayDays); |
| | | row.nightDays = parseNum(row.nightDays); |
| | | row.otherIncome = parseNum(row.otherIncome); |
| | | row.socialPersonal = parseNum(row.socialPersonal); |
| | | row.fundPersonal = parseNum(row.fundPersonal); |
| | | row.otherDeduct = parseNum(row.otherDeduct); |
| | | row.socialSecurityRetroactive = parseNum(row.socialSecurityRetroactive); |
| | | row.salaryTax = parseNum(row.salaryTax); |
| | | |
| | | // 夜班补贴计算:夜班天数 * 标准 |
| | | // 1. 计算夜班补贴:夜班天数 * 标准 |
| | | row.nightAmount = row.nightDays * subsidyStandard.value.nightAmount; |
| | | |
| | | // 餐补计算:仅限回族,(白班 + 夜班) * 标准 |
| | | // 注意:nation 可能是字典值,这里假设 "回族" 是直接存储的字符串或需要根据字典判断 |
| | | // 之前的 BasicInfoSection.vue 中民族是下拉框,通常存储的是字典的 value 或 label |
| | | // 这里先简单判断包含 "回" 字,或者您可以根据具体字典值调整 |
| | | // 2. 计算餐补:仅限回族,(白班 + 夜班) * 标准 |
| | | if (row.nation && (row.nation === "回族" || row.nation.includes("回"))) { |
| | | row.mealAmount = |
| | | (row.dayDays + row.nightDays) * subsidyStandard.value.mealAmount; |
| | | } else { |
| | | row.mealAmount = 0; |
| | | } |
| | | |
| | | // 3. 计算应发工资 = 基本工资 + 餐补 + 夜班补助 + 其他收入 |
| | | row.grossSalary = |
| | | row.basicSalary + row.mealAmount + row.nightAmount + row.otherIncome; |
| | | |
| | | // 4. 计算应扣工资 = 社保个人 + 公积金个人 + 其他支出 + 社保补缴 + 工资个税 |
| | | row.deductSalary = |
| | | row.socialPersonal + |
| | | row.fundPersonal + |
| | | row.otherDeduct + |
| | | row.socialSecurityRetroactive + |
| | | row.salaryTax; |
| | | |
| | | // 5. 计算实发工资 = 应发工资 - 应扣工资 |
| | | row.netSalary = row.grossSalary - row.deductSalary; |
| | | }; |
| | | const taxTableData = ref([ |
| | | { level: 1, range: "不超过36000元", rate: 3, quickDeduction: 0 }, |