From 0a9495113009836423b450f3598debd61eefa237 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期二, 10 二月 2026 16:53:09 +0800
Subject: [PATCH] Merge branch 'dev_New' of http://114.132.189.42:9002/r/product-inventory-management into dev_New

---
 src/views/personnelManagement/monthlyStatistics/index.vue |  303 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 303 insertions(+), 0 deletions(-)

diff --git a/src/views/personnelManagement/monthlyStatistics/index.vue b/src/views/personnelManagement/monthlyStatistics/index.vue
new file mode 100644
index 0000000..741a4b7
--- /dev/null
+++ b/src/views/personnelManagement/monthlyStatistics/index.vue
@@ -0,0 +1,303 @@
+<template>
+  <div class="app-container">
+    <div class="search_form">
+      <div>
+        <span class="search_title">濮撳悕锛�</span>
+        <el-input v-model="searchForm.staffName"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏ュ鍚嶆悳绱�"
+                  @change="handleQuery"
+                  clearable
+                  :prefix-icon="Search" />
+        <span class="search_title ml10">鏈堜唤锛�</span>
+        <el-date-picker v-model="searchForm.payDateStr"
+                        type="month"
+                        @change="handleQuery"
+                        value-format="YYYY-MM"
+                        format="YYYY-MM"
+                        placeholder="璇烽�夋嫨鏈堜唤"
+                        style="width: 240px"
+                        clearable />
+        <el-button type="primary"
+                   @click="handleQuery"
+                   style="margin-left: 10px">
+          鎼滅储
+        </el-button>
+      </div>
+      <div>
+        <el-button @click="handleExport"
+                   style="margin-right: 10px">瀵煎嚭</el-button>
+        <el-button type="primary"
+                   @click="openForm('add')">鏂板鍙拌处</el-button>
+        <el-button type="danger"
+                   plain
+                   @click="handleDelete">鍒犻櫎</el-button>
+      </div>
+    </div>
+    <div class="table_list">
+      <PIMTable rowKey="id"
+                :column="tableColumn"
+                :tableData="tableData"
+                :page="page"
+                :isSelection="true"
+                @selection-change="handleSelectionChange"
+                :tableLoading="tableLoading"
+                @pagination="pagination"
+                :total="page.total"></PIMTable>
+    </div>
+    <form-dia v-model="dialogVisible"
+              :operation-type="operationType"
+              :row="currentRow"
+              ref="formDia"
+              @close="handleQuery"></form-dia>
+  </div>
+</template>
+
+<script setup>
+  import { Search } from "@element-plus/icons-vue";
+  import {
+    onMounted,
+    ref,
+    reactive,
+    toRefs,
+    getCurrentInstance,
+    nextTick,
+  } from "vue";
+  import { ElMessageBox } from "element-plus";
+  import dayjs from "dayjs";
+  import FormDia from "./components/formDia.vue";
+  import {
+    monthlyStatisticsListPage,
+    monthlyStatisticsDelete,
+  } from "@/api/personnelManagement/monthlyStatistics.js";
+
+  const data = reactive({
+    searchForm: {
+      staffName: "",
+      payDateStr: "",
+    },
+  });
+
+  const { searchForm } = toRefs(data);
+
+  const tableColumn = ref([
+    {
+      label: "鍛樺伐濮撳悕",
+      prop: "staffName",
+    },
+    {
+      label: "閮ㄩ棬",
+      prop: "deptName",
+      width: 140,
+    },
+    {
+      label: "鏈堜唤",
+      prop: "payDate",
+    },
+    {
+      label: "鍩烘湰宸ヨ祫",
+      prop: "basicSalary",
+    },
+    {
+      label: "璁′欢宸ヨ祫",
+      prop: "pieceworkSalary",
+    },
+    {
+      label: "璁℃椂宸ヨ祫",
+      prop: "hourlySalary",
+    },
+    {
+      label: "鍏朵粬鏀跺叆",
+      prop: "otherIncome",
+    },
+    {
+      label: "绀句繚涓汉",
+      prop: "socialSecurityIndividuals",
+    },
+    {
+      label: "鍏Н閲戜釜浜�",
+      prop: "providentFundIndividuals",
+      width: 140,
+    },
+    {
+      label: "宸ヨ祫涓◣",
+      prop: "personalIncomeTax",
+    },
+    {
+      label: "鍏朵粬鏀嚭",
+      prop: "otherDeductions",
+    },
+    {
+      label: "搴斿彂宸ヨ祫",
+      prop: "payableWages",
+    },
+    {
+      label: "搴旀墸宸ヨ祫",
+      prop: "deductibleWages",
+    },
+    {
+      label: "瀹炲彂宸ヨ祫",
+      prop: "actualWages",
+    },
+    {
+      label: "澶囨敞",
+      prop: "remark",
+      width: 150,
+    },
+    {
+      dataType: "action",
+      label: "鎿嶄綔",
+      align: "center",
+      fixed: "right",
+      width: 220,
+      operation: [
+        {
+          name: "缂栬緫",
+          type: "text",
+          clickFun: row => {
+            openForm("edit", row);
+          },
+        },
+        // {
+        //   name: "鏌ョ湅",
+        //   type: "text",
+        //   clickFun: row => {
+        //     openForm("view", row);
+        //   },
+        // },
+      ],
+    },
+  ]);
+
+  const tableData = ref([]);
+  const selectedRows = ref([]);
+  const tableLoading = ref(false);
+  const page = reactive({
+    current: 1,
+    size: 100,
+    total: 0,
+  });
+
+  const formDia = ref();
+  const dialogVisible = ref(false);
+  const operationType = ref("add");
+  const currentRow = ref({});
+  const { proxy } = getCurrentInstance();
+
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  const handleQuery = () => {
+    page.current = 1;
+    getList();
+  };
+
+  const pagination = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+
+  const getList = () => {
+    tableLoading.value = true;
+    monthlyStatisticsListPage({ ...page, ...searchForm.value })
+      .then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        page.total = res.data.total;
+      })
+      .catch(err => {
+        tableLoading.value = false;
+      });
+  };
+
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    selectedRows.value = selection;
+  };
+
+  // 鎵撳紑寮规
+  const openForm = (type, row) => {
+    operationType.value = type;
+    currentRow.value = row || {};
+    dialogVisible.value = true;
+    nextTick(() => {
+      formDia.value?.openDialog(type, row);
+    });
+  };
+
+  // 鍒犻櫎
+  const handleDelete = () => {
+    let ids = [];
+    if (selectedRows.value.length > 0) {
+      ids = selectedRows.value.map(item => item.id);
+    } else {
+      proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
+      return;
+    }
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
+      .then(() => {
+        monthlyStatisticsDelete(ids).then(res => {
+          proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+          getList();
+        });
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
+  };
+
+  // 瀵煎嚭
+  const handleExport = () => {
+    ElMessageBox.confirm("鏄惁纭瀵煎嚭浜哄憳钖祫鍙拌处锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
+      .then(() => {
+        proxy.download(
+          "/compensationPerformance/export",
+          { ...searchForm.value, ...page },
+          "浜哄憳钖祫鍙拌处.xlsx"
+        );
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
+  };
+
+  onMounted(() => {
+    getList();
+  });
+</script>
+
+<style scoped>
+  .search_form {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 20px;
+    flex-wrap: wrap;
+    gap: 10px;
+  }
+
+  .search_title {
+    font-weight: 500;
+    margin-right: 5px;
+  }
+
+  .ml10 {
+    margin-left: 10px;
+  }
+
+  .table_list {
+    margin-top: 20px;
+  }
+
+  .dialog-footer {
+    text-align: right;
+  }
+</style>
\ No newline at end of file

--
Gitblit v1.9.3