From b439d99d55f594cd56cf06463a9f328812e25df4 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期二, 20 十月 2026 00:25:39 +0800
Subject: [PATCH] feat: 添加加班时长和加班工资功能,支持手动输入并重新计算应发工资

---
 src/views/personnelManagement/monthlyStatistics/components/formDia.vue |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/src/views/personnelManagement/monthlyStatistics/components/formDia.vue b/src/views/personnelManagement/monthlyStatistics/components/formDia.vue
index 7248566..eccbd9d 100644
--- a/src/views/personnelManagement/monthlyStatistics/components/formDia.vue
+++ b/src/views/personnelManagement/monthlyStatistics/components/formDia.vue
@@ -163,6 +163,25 @@
                         @input="row.hourlySalary = parseNum(row.hourlySalary)" />
             </template>
           </el-table-column>
+          <el-table-column label="鍔犵彮鏃堕暱"
+                           minWidth="110">
+            <template #default="{ row }">
+              <el-input :model-value="formatHours(row.overtimeHours)"
+                        placeholder="0.00"
+                        size="small"
+                        disabled />
+            </template>
+          </el-table-column>
+          <el-table-column label="鍔犵彮宸ヨ祫"
+                           minWidth="110">
+            <template #default="{ row }">
+              <el-input v-model.number="row.overtimePay"
+                        type="number"
+                        placeholder="0"
+                        size="small"
+                        @input="handleOvertimePayInput(row)" />
+            </template>
+          </el-table-column>
           <el-table-column label="鍏朵粬鏀跺叆"
                            minWidth="110">
             <template #default="{ row }">
@@ -455,6 +474,11 @@
     return isNaN(n) ? 0 : n;
   }
 
+  // 鍔犵彮鏃堕暱鎸夊皬鏃跺睍绀猴紝鍥哄畾涓や綅灏忔暟
+  function formatHours(v) {
+    return parseNum(v).toFixed(2);
+  }
+
   function parseNullableNum(v) {
     if (v === "" || v == null) return null;
     const n = Number(v);
@@ -470,6 +494,8 @@
     basicSalary: 0,
     pieceSalary: 0,
     hourlySalary: 0,
+    overtimeHours: 0,
+    overtimePay: 0,
     otherIncome: 0,
     socialPersonal: 0,
     fundPersonal: 0,
@@ -499,6 +525,8 @@
     basicSalary: parseNum(source?.basicSalary ?? fallback.basicSalary),
     pieceSalary: parseNum(source?.pieceSalary ?? fallback.pieceSalary),
     hourlySalary: parseNum(source?.hourlySalary ?? fallback.hourlySalary),
+    overtimeHours: parseNum(source?.overtimeHours ?? fallback.overtimeHours),
+    overtimePay: parseNum(source?.overtimePay ?? fallback.overtimePay),
     otherIncome: parseNum(source?.otherIncome ?? fallback.otherIncome),
     socialPersonal: parseNum(source?.socialPersonal ?? fallback.socialPersonal),
     fundPersonal: parseNum(source?.fundPersonal ?? fallback.fundPersonal),
@@ -550,6 +578,7 @@
       basicSalary: parseNum(row.basicSalary),
       pieceSalary: parseNum(row.pieceSalary),
       hourlySalary: parseNum(row.hourlySalary),
+      overtimePay: parseNum(row.overtimePay),
       otherIncome: parseNum(row.otherIncome),
       otherDeduct: parseNum(row.otherDeduct),
       socialSupplementAmount: parseNullableNum(row.socialSupplementAmount),
@@ -572,6 +601,12 @@
   const handleSalaryInput = row => {
     row.basicSalary = parseNum(row.basicSalary);
     row.otherIncome = parseNum(row.otherIncome);
+    requestEmployeeRecalculate(row);
+  };
+
+  // 鍔犵彮宸ヨ祫锛堟墜濉級锛氶噸鏂拌绠楀簲鍙戝伐璧勩�佷釜绋庡拰瀹炲彂宸ヨ祫
+  const handleOvertimePayInput = row => {
+    row.overtimePay = parseNum(row.overtimePay);
     requestEmployeeRecalculate(row);
   };
 
@@ -896,6 +931,8 @@
         basicSalary: parseNum(e.basicSalary),
         pieceSalary: parseNum(e.pieceSalary),
         hourlySalary: parseNum(e.hourlySalary),
+        overtimeHours: parseNum(e.overtimeHours),
+        overtimePay: parseNum(e.overtimePay),
         otherIncome: parseNum(e.otherIncome),
         socialPersonal: parseNum(e.socialPersonal),
         fundPersonal: parseNum(e.fundPersonal),

--
Gitblit v1.9.3