From 5952d34811ee82e797ef0070f84ff041381072a5 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 10 三月 2026 17:52:40 +0800
Subject: [PATCH] 新增采购退货单增加费用等数据

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

diff --git a/src/views/personnelManagement/monthlyStatistics/components/auditDia.vue b/src/views/personnelManagement/monthlyStatistics/components/auditDia.vue
new file mode 100644
index 0000000..48a41f0
--- /dev/null
+++ b/src/views/personnelManagement/monthlyStatistics/components/auditDia.vue
@@ -0,0 +1,216 @@
+<template>
+  <FormDialog
+    v-model="dialogVisible"
+    title="宸ヨ祫瀹℃牳"
+    width="900px"
+    @close="handleClose"
+  >
+    <!-- 宸ヨ祫琛ㄥ熀纭�淇℃伅 -->
+    <el-card shadow="never" style="margin-bottom: 16px;">
+      <template #header>
+        <span>宸ヨ祫琛ㄤ俊鎭�</span>
+      </template>
+      <el-descriptions :column="3" border>
+        <el-descriptions-item label="宸ヨ祫涓婚">{{ auditData?.salaryTitle || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="宸ヨ祫鏈堜唤">{{ auditData?.salaryMonth || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="宸ヨ祫鎬婚">楼 {{ formatMoney(auditData?.totalSalary) }}</el-descriptions-item>
+        <el-descriptions-item label="鏀粯閾惰">{{ auditData?.payBank || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="瀹℃牳浜�">{{ auditData?.auditUserName || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="澶囨敞">{{ auditData?.remark || '-' }}</el-descriptions-item>
+      </el-descriptions>
+    </el-card>
+
+    <!-- 鍛樺伐宸ヨ祫鏄庣粏 -->
+      <el-card shadow="never" style="margin-bottom: 16px;">
+        <template #header>
+          <span>鍛樺伐宸ヨ祫鏄庣粏</span>
+        </template>
+        <div v-if="!employeeList || employeeList.length === 0" style="text-align: center; padding: 20px; color: #909399;">
+          <div>鏆傛棤鍛樺伐宸ヨ祫鏄庣粏鏁版嵁</div>
+          <div style="font-size: 12px; margin-top: 5px;">鍛樺伐鏄庣粏鏁版嵁闇�瑕佸湪宸ヨ祫琛ㄧ敓鎴愭垨缂栬緫鏃舵墠浼氫繚瀛�</div>
+        </div>
+        <div v-else>
+          <el-table :data="employeeList" border max-height="300" style="width: 100%">
+            <el-table-column prop="staffName" label="鍛樺伐濮撳悕" width="100" />
+            <el-table-column prop="deptName" label="閮ㄩ棬" width="120" />
+            <el-table-column prop="basicSalary" label="鍩烘湰宸ヨ祫" width="100" align="right">
+              <template #default="{ row }">楼 {{ formatMoney(row.basicSalary) }}</template>
+            </el-table-column>
+            <el-table-column prop="pieceSalary" label="璁′欢宸ヨ祫" width="100" align="right">
+              <template #default="{ row }">楼 {{ formatMoney(row.pieceSalary) }}</template>
+            </el-table-column>
+            <el-table-column prop="hourlySalary" label="璁℃椂宸ヨ祫" width="100" align="right">
+              <template #default="{ row }">楼 {{ formatMoney(row.hourlySalary) }}</template>
+            </el-table-column>
+            <el-table-column prop="otherIncome" label="鍏朵粬鏀跺叆" width="100" align="right">
+              <template #default="{ row }">楼 {{ formatMoney(row.otherIncome) }}</template>
+            </el-table-column>
+            <el-table-column prop="socialPersonal" label="绀句繚涓汉" width="100" align="right">
+              <template #default="{ row }">楼 {{ formatMoney(row.socialPersonal) }}</template>
+            </el-table-column>
+            <el-table-column prop="fundPersonal" label="鍏Н閲戜釜浜�" width="120" align="right">
+              <template #default="{ row }">楼 {{ formatMoney(row.fundPersonal) }}</template>
+            </el-table-column>
+            <el-table-column prop="salaryTax" label="宸ヨ祫涓◣" width="100" align="right">
+              <template #default="{ row }">楼 {{ formatMoney(row.salaryTax) }}</template>
+            </el-table-column>
+            <el-table-column prop="netSalary" label="瀹炲彂宸ヨ祫" width="100" align="right" fixed="right">
+              <template #default="{ row }">楼 {{ formatMoney(row.netSalary) }}</template>
+            </el-table-column>
+          </el-table>
+          <div style="margin-top: 10px; text-align: right; font-weight: bold;">
+            宸ヨ祫鎬婚锛毬� {{ formatMoney(totalSalary) }}
+          </div>
+        </div>
+      </el-card>
+
+    <!-- 瀹℃牳鎿嶄綔 -->
+    <el-form label-position="top">
+      <el-form-item label="瀹℃牳缁撴灉" required>
+        <el-radio-group v-model="auditResult">
+          <el-radio :value="4">閫氳繃</el-radio>
+          <el-radio :value="2">涓嶉�氳繃</el-radio>
+        </el-radio-group>
+      </el-form-item>
+    </el-form>
+
+    <template #footer>
+      <el-button type="primary" :loading="loading" @click="handleConfirm">
+        纭畾
+      </el-button>
+       <el-button @click="handleClose">鍙栨秷</el-button>
+    </template>
+  </FormDialog>
+</template>
+
+<script setup>
+import { ref, computed, reactive, toRefs, getCurrentInstance, watch } from "vue";
+import { ElMessage } from "element-plus";
+import Cookies from "js-cookie";
+import FormDialog from "@/components/Dialog/FormDialog.vue";
+import { staffSalaryMainUpdate } from "@/api/personnelManagement/staffSalaryMain.js";
+
+const emit = defineEmits(["update:modelValue", "close", "success"]);
+
+const props = defineProps({
+  modelValue: { type: Boolean, default: false },
+  row: { type: Object, default: () => ({}) },
+});
+
+const { proxy } = getCurrentInstance();
+
+const dialogVisible = computed({
+  get: () => props.modelValue,
+  set: (val) => emit("update:modelValue", val),
+});
+
+const loading = ref(false);
+const auditResult = ref(4); // 榛樿閫氳繃
+const auditData = ref({});
+const employeeList = ref([]);
+
+// 鐩戝惉row鏁版嵁鍙樺寲
+watch(() => props.row, (newRow) => {
+  if (newRow && Object.keys(newRow).length > 0) {
+    loadAuditData(newRow);
+  }
+}, { immediate: true });
+
+// 鏍煎紡鍖栭噾棰�
+const formatMoney = (value) => {
+  const num = Number(value) || 0;
+  return num.toFixed(2);
+};
+
+// 璁$畻宸ヨ祫鎬婚
+const totalSalary = computed(() => {
+  return employeeList.value.reduce((sum, e) => {
+    const salary = Number(e.netSalary) || 0;
+    return sum + salary;
+  }, 0);
+});
+
+// 鍔犺浇瀹℃牳鏁版嵁
+const loadAuditData = (row) => {
+  auditData.value = row || {};
+  auditResult.value = 4; // 榛樿閫夋嫨閫氳繃
+  
+  // 鍔犺浇鍛樺伐宸ヨ祫鏄庣粏鏁版嵁
+  if (row?.staffSalaryDetailList && Array.isArray(row.staffSalaryDetailList)) {
+    employeeList.value = row.staffSalaryDetailList.map((e) => ({
+      staffName: e.staffName ?? "",
+      deptName: e.deptName ?? "",
+      basicSalary: Number(e.basicSalary) || 0,
+      pieceSalary: Number(e.pieceSalary) || 0,
+      hourlySalary: Number(e.hourlySalary) || 0,
+      otherIncome: Number(e.otherIncome) || 0,
+      socialPersonal: Number(e.socialPersonal) || 0,
+      fundPersonal: Number(e.fundPersonal) || 0,
+      salaryTax: Number(e.salaryTax) || 0,
+      netSalary: Number(e.netSalary) || 0,
+    }));
+  } else {
+    console.log('娌℃湁鎵惧埌鍛樺伐鏄庣粏鏁版嵁');
+    employeeList.value = [];
+  }
+};
+
+// 鎵撳紑寮圭獥
+const openDialog = (row) => {
+  loadAuditData(row);
+  dialogVisible.value = true;
+};
+
+// 鍏抽棴寮圭獥
+const handleClose = () => {
+  dialogVisible.value = false;
+  emit("close");
+};
+
+// 纭瀹℃牳
+const handleConfirm = () => {
+  try {
+    const row = auditData.value;
+    if (!row?.id) {
+      ElMessage.warning("鏁版嵁寮傚父锛岃閲嶈瘯");
+      return;
+    }
+    
+    const username = Cookies.get("username") || "";
+    const userIdRaw = Cookies.get("userId");
+    const auditUserId = userIdRaw ? Number(userIdRaw) : undefined;
+    
+    // 鏋勫缓瀹℃牳鏁版嵁
+    const submitData = {
+      id: row.id,
+      status: Number(auditResult.value) === 2 ? 2 : 4, // 2=涓嶉�氳繃 4=閫氳繃(寰呭彂鏀�)
+      auditUserId,
+      auditUserName: username,
+    };
+    loading.value = true;
+    staffSalaryMainUpdate(submitData)
+      .then(() => {
+        ElMessage.success("瀹℃牳鎴愬姛");
+        dialogVisible.value = false;
+        emit("success");
+      })
+      .catch((error) => {
+        console.error('瀹℃牳澶辫触:', error)
+      })
+      .finally(() => {
+        loading.value = false;
+      });
+  } catch (error) {
+    console.error('瀹℃牳澶勭悊寮傚父:', error);
+    loading.value = false;
+  }
+};
+
+defineExpose({ openDialog });
+</script>
+
+<style scoped>
+:deep(.el-descriptions__label) {
+  width: 100px;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3