From 37a6a97fbd051bd3c998fb491d0b93f1f2a714f0 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期一, 19 十月 2026 17:12:24 +0800
Subject: [PATCH] feat: 添加请假、缺勤、迟到、早退次数及手动扣工资功能,优化工资计算

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

diff --git a/src/views/personnelManagement/monthlyStatistics/components/formDia.vue b/src/views/personnelManagement/monthlyStatistics/components/formDia.vue
index 46515ed..67abcc0 100644
--- a/src/views/personnelManagement/monthlyStatistics/components/formDia.vue
+++ b/src/views/personnelManagement/monthlyStatistics/components/formDia.vue
@@ -249,6 +249,56 @@
                         @input="row.deductSalary = parseNum(row.deductSalary)" />
             </template>
           </el-table-column>
+          <el-table-column label="璇峰亣娆℃暟"
+                           minWidth="90">
+            <template #default="{ row }">
+              <el-input v-model.number="row.leaveCount"
+                        type="number"
+                        placeholder="鑷姩缁熻"
+                        size="small"
+                        @input="row.leaveCount = parseNum(row.leaveCount)" />
+            </template>
+          </el-table-column>
+          <el-table-column label="缂哄嫟娆℃暟"
+                           minWidth="90">
+            <template #default="{ row }">
+              <el-input v-model.number="row.absenceCount"
+                        type="number"
+                        placeholder="鑷姩缁熻"
+                        size="small"
+                        @input="row.absenceCount = parseNum(row.absenceCount)" />
+            </template>
+          </el-table-column>
+          <el-table-column label="杩熷埌娆℃暟"
+                           minWidth="90">
+            <template #default="{ row }">
+              <el-input v-model.number="row.lateCount"
+                        type="number"
+                        placeholder="鑷姩缁熻"
+                        size="small"
+                        @input="row.lateCount = parseNum(row.lateCount)" />
+            </template>
+          </el-table-column>
+          <el-table-column label="鏃╅��娆℃暟"
+                           minWidth="90">
+            <template #default="{ row }">
+              <el-input v-model.number="row.earlyCount"
+                        type="number"
+                        placeholder="鑷姩缁熻"
+                        size="small"
+                        @input="row.earlyCount = parseNum(row.earlyCount)" />
+            </template>
+          </el-table-column>
+          <el-table-column label="鎵e伐璧�"
+                           minWidth="110">
+            <template #default="{ row }">
+              <el-input v-model.number="row.manualDeduct"
+                        type="number"
+                        placeholder="0"
+                        size="small"
+                        @input="handleManualDeductInput(row)" />
+            </template>
+          </el-table-column>
           <el-table-column label="瀹炲彂宸ヨ祫"
                            minWidth="110">
             <template #default="{ row }">
@@ -264,7 +314,7 @@
                            minWidth="120">
             <template #default="{ row }">
               <el-input v-model="row.remark"
-                        placeholder="璇疯緭鍏�"
+                        placeholder="璇疯緭鍏ワ紝璇峰亣鍘熷洜鑷姩甯﹀叆"
                         size="small" />
             </template>
           </el-table-column>
@@ -428,6 +478,11 @@
     salaryTax: 0,
     grossSalary: 0,
     deductSalary: 0,
+    leaveCount: 0,
+    absenceCount: 0,
+    lateCount: 0,
+    earlyCount: 0,
+    manualDeduct: 0,
     netSalary: 0,
     remark: "",
   });
@@ -453,6 +508,11 @@
     salaryTax: parseNum(source?.salaryTax ?? fallback.salaryTax),
     grossSalary: parseNum(source?.grossSalary ?? fallback.grossSalary),
     deductSalary: parseNum(source?.deductSalary ?? fallback.deductSalary),
+    leaveCount: parseNum(source?.leaveCount ?? fallback.leaveCount),
+    absenceCount: parseNum(source?.absenceCount ?? fallback.absenceCount),
+    lateCount: parseNum(source?.lateCount ?? fallback.lateCount),
+    earlyCount: parseNum(source?.earlyCount ?? fallback.earlyCount),
+    manualDeduct: parseNum(source?.manualDeduct ?? fallback.manualDeduct),
     netSalary: parseNum(source?.netSalary ?? fallback.netSalary),
     remark: source?.remark ?? fallback.remark ?? "",
   });
@@ -493,6 +553,9 @@
       otherIncome: parseNum(row.otherIncome),
       otherDeduct: parseNum(row.otherDeduct),
       socialSupplementAmount: parseNullableNum(row.socialSupplementAmount),
+      manualDeduct: parseNum(row.manualDeduct),
+      lateCount: parseNum(row.lateCount),
+      earlyCount: parseNum(row.earlyCount),
       remark: row.remark ?? "",
     };
     recalcTimers.set(
@@ -509,6 +572,12 @@
   const handleSalaryInput = row => {
     row.basicSalary = parseNum(row.basicSalary);
     row.otherIncome = parseNum(row.otherIncome);
+    requestEmployeeRecalculate(row);
+  };
+
+  // 鎵e伐璧勶紙鎵嬪~锛夛細閲嶆柊璁$畻瀹炲彂宸ヨ祫
+  const handleManualDeductInput = row => {
+    row.manualDeduct = parseNum(row.manualDeduct);
     requestEmployeeRecalculate(row);
   };
 
@@ -835,6 +904,11 @@
         salaryTax: parseNum(e.salaryTax),
         grossSalary: parseNum(e.grossSalary),
         deductSalary: parseNum(e.deductSalary),
+        leaveCount: parseNum(e.leaveCount),
+        absenceCount: parseNum(e.absenceCount),
+        lateCount: parseNum(e.lateCount),
+        earlyCount: parseNum(e.earlyCount),
+        manualDeduct: parseNum(e.manualDeduct),
         netSalary: parseNum(e.netSalary),
         remark: e.remark ?? "",
       })),

--
Gitblit v1.9.3