From 484b1f3e41a561e438ce4cdbec0e09958c932767 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期三, 28 十月 2026 17:02:59 +0800
Subject: [PATCH] 统计分析

---
 src/views/project/statistics/performanceStaristics/index.vue |  140 +++++++++++++++++++++++++++++++++-------------
 1 files changed, 99 insertions(+), 41 deletions(-)

diff --git a/src/views/project/statistics/performanceStaristics/index.vue b/src/views/project/statistics/performanceStaristics/index.vue
index f2b1ac5..a93897b 100644
--- a/src/views/project/statistics/performanceStaristics/index.vue
+++ b/src/views/project/statistics/performanceStaristics/index.vue
@@ -25,14 +25,7 @@
             </el-date-picker>
           </el-form-item>
         </el-col>
-        <el-col :span="5">
-          <el-form-item label="缁╂晥绫诲瀷">
-            <el-radio-group v-model="queryParams.pabonustype">
-              <el-radio v-for="item in reporttype" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
-            </el-radio-group>
-          </el-form-item>
-        </el-col>
-        <el-col :span="5">
+        <el-col :span="10">
           <el-form-item label="缁╂晥浜哄憳" prop="pauserno">
             <el-input v-model="queryParams.pausername" placeholder="璇疯緭鍏ュ鍚�" clearable size="small"
               @keyup.enter.native="handleQuery" />
@@ -55,24 +48,41 @@
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <!--<el-table v-loading="loading" border :data="donatebaseinfoList">     -->
-    <el-table v-loading="loading" :data="jxidata" ref="table" border max-height="700" highlight-current-row
-      :summary-method="getSummaries" show-summary>
-      <el-table-column label="搴忓彿" align="center" prop="id" width="100">
-      </el-table-column>
-      <el-table-column label="缁熻鏈堜唤" align="center" prop="bonusmonth" />
-      <el-table-column label="绉戝涓氬姟缁�" align="center" prop="deptName">      </el-table-column>
-      <el-table-column label="缁╂晥浜哄憳/鍖婚櫌" align="center" prop="beneficiaryname" />
-      <el-table-column label="缁╂晥閲戦" align="center" prop="amount" :formatter="amountFormatter" />
-      <!-- <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" fixed="right">
-        <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit">鏄庣粏</el-button>
-        </template>
-      </el-table-column> -->
-    </el-table>
+    <el-tabs v-model="activeTab">
+      <el-tab-pane label="鎸変笟鍔$粍" name="dept">
+        <el-table v-loading="loading" :data="deptData" ref="deptTable" border max-height="700"
+          highlight-current-row :summary-method="getDeptSummaries" show-summary>
+          <el-table-column label="搴忓彿" align="center" prop="id" width="80" />
+          <el-table-column label="涓氬姟缁�" align="center" prop="deptname" />
+          <el-table-column label="缁╂晥閲戦" align="center" prop="amount" :formatter="amountFormatter" />
+          <el-table-column label="鏈堝害缁╂晥" align="center" prop="mamount" :formatter="amountFormatter" />
+          <el-table-column label="瀛e害缁╂晥" align="center" prop="samount" :formatter="amountFormatter" />
+          <el-table-column label="骞村害缁╂晥" align="center" prop="yamount" :formatter="amountFormatter" />
+        </el-table>
+      </el-tab-pane>
+
+      <el-tab-pane label="鎸変汉鍛�" name="person">
+        <el-table v-loading="loading" :data="jxidata" ref="personTable" border max-height="700"
+          highlight-current-row :summary-method="getSummaries" show-summary>
+          <el-table-column label="搴忓彿" align="center" prop="id" width="80" />
+          <el-table-column label="涓氬姟缁�" align="center" prop="deptName" />
+          <el-table-column label="缁╂晥浜哄憳/鍖婚櫌" align="center" prop="beneficiaryname" />
+          <el-table-column label="缁╂晥閲戦" align="center" prop="amount" :formatter="amountFormatter" />
+          <el-table-column label="鏈堝害缁╂晥" align="center" prop="mamount" :formatter="amountFormatter" />
+          <el-table-column label="瀛e害缁╂晥" align="center" prop="samount" :formatter="amountFormatter" />
+          <el-table-column label="骞村害缁╂晥" align="center" prop="yamount" :formatter="amountFormatter" />
+          <!-- <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" fixed="right">
+            <template slot-scope="scope">
+              <el-button size="mini" type="text" icon="el-icon-edit">鏄庣粏</el-button>
+            </template>
+          </el-table-column> -->
+        </el-table>
+      </el-tab-pane>
+    </el-tabs>
+
     <div style="margin: 10px;text-align: right;">
       <div>
-        鍏� <span style="color:#1890FF ;">{{ total }}</span> 鏉℃暟鎹�
+        鍏� <span style="color:#1890FF ;">{{ tableTotal }}</span> 鏉℃暟鎹�
       </div>
     </div>
 
@@ -90,7 +100,8 @@
   listbxiaostatistics,
   listjixstatistics,
   listanlstatistics,
-  exportPerformanceStatistics
+  exportPerformanceStatistics,
+  exportPerformanceDeptStatistics
 } from "@/api/project/statistics";
 
 import { listUser } from "@/api/project/organization";
@@ -120,12 +131,6 @@
 
       selecttime: "",
       reportervalue: "",
-      reporttype: [
-        { label: "鍏ㄩ儴", value: "0" },
-        { label: "鏈堝害", value: "68" },
-        { label: "瀛e害", value: "69" },
-        { label: "骞村害", value: "70" }
-      ],
       //鐪佸競鍖�
       //榛樿鍊艰缃紝鍙负绌�
       searchAddress: {
@@ -182,6 +187,10 @@
       donatebaseinfoList: [],
       // 鎹愮尞鍩虹琛ㄦ牸鏁版嵁
       jxidata: [],
+      // 褰撳墠椤电锛歞ept=鎸変笟鍔$粍锛宲erson=鎸変汉鍛�
+      activeTab: "dept",
+      // 鎸変笟鍔$粍鑱氬悎鏁版嵁
+      deptData: [],
       // 寮瑰嚭灞傛爣棰�
       title: "",
       // 鏄惁鏄剧ず寮瑰嚭灞�
@@ -190,7 +199,6 @@
       daterangeReporttime: [],
       // 鏌ヨ鍙傛暟
       queryParams: {
-        pabonustype: "0",
         pabegtime: null,
         paendtime: null,
         pausername: "",
@@ -215,7 +223,11 @@
     };
   },
   //鐩戝惉灞炴�� 绫讳技浜巇ata姒傚康
-  computed: {},
+  computed: {
+    tableTotal() {
+      return this.activeTab === "dept" ? this.deptData.length : this.jxidata.length;
+    }
+  },
   activated() { },
   mounted() { },
 
@@ -256,16 +268,13 @@
       return Arr;
     },
 
-    /** 缁勮鏌ヨ鍙傛暟锛氭湭閫夋嫨缁熻鏃ユ湡鏃舵煡鍏ㄩ儴锛岀哗鏁堢被鍨嬩负绌烘寜鍏ㄩ儴 */
+    /** 缁勮鏌ヨ鍙傛暟锛氭湭閫夋嫨缁熻鏃ユ湡鏃舵煡鍏ㄩ儴 */
     buildQueryParams() {
       const query = { ...this.queryParams };
       if (!query.pabegtime || !query.paendtime) {
         // 鏂� SP 榛樿鍙栬繎 6 涓湀锛岃�岀哗鏁� jxrq 鏁版嵁闆嗕腑鍦� 2023-08~2024-01锛岄粯璁や細鏌ヤ笉鍒�
         query.pabegtime = "2000-01-01 00:00:00";
         query.paendtime = "2999-12-31 23:59:59";
-      }
-      if (!query.pabonustype) {
-        query.pabonustype = "0";
       }
       return query;
     },
@@ -278,16 +287,46 @@
           $obj.id = $index + 1;
         });
         this.total = res.total;
+        this.buildDeptData();
+      });
+    },
+    /** 鎸変笟鍔$粍鑱氬悎锛氱哗鏁堥噾棰�/鏈堝害/瀛e害/骞村害鍒嗗埆姹傚拰 */
+    buildDeptData() {
+      const map = new Map();
+      this.jxidata.forEach(row => {
+        const key = row.deptId || row.deptName || "鏈垎缁�";
+        if (!map.has(key)) {
+          map.set(key, {
+            deptname: row.deptName || "鏈垎缁�",
+            amount: 0,
+            mamount: 0,
+            samount: 0,
+            yamount: 0
+          });
+        }
+        const item = map.get(key);
+        item.amount += Number(row.amount) || 0;
+        item.mamount += Number(row.mamount) || 0;
+        item.samount += Number(row.samount) || 0;
+        item.yamount += Number(row.yamount) || 0;
+      });
+      this.deptData = Array.from(map.values()).map((item, index) => {
+        item.id = index + 1;
+        return item;
       });
     },
     /** 瀵煎嚭鎸夐挳鎿嶄綔 */
     handleExport() {
       const queryParams = this.buildQueryParams();
+      const exportApi =
+        this.activeTab === "dept"
+          ? exportPerformanceDeptStatistics
+          : exportPerformanceStatistics;
       this.$modal
-        .confirm("鏄惁纭瀵煎嚭褰撳墠绛涢�夋潯浠朵笅鐨勭哗鏁堢粺璁℃暟鎹紵")
+        .confirm("鏄惁纭瀵煎嚭褰撳墠鍒楄〃鐨勭哗鏁堢粺璁℃暟鎹紵")
         .then(() => {
           this.exportLoading = true;
-          return exportPerformanceStatistics(queryParams);
+          return exportApi(queryParams);
         })
         .then(response => {
           this.$download.name(response.msg);
@@ -320,7 +359,6 @@
 
 
       this.queryParams = {
-        pabonustype: "0",
         pabegtime: null,
         paendtime: null,
         pausername: "",
@@ -355,7 +393,7 @@
     getSummaries(param) {
       const { columns, data } = param;
       const sums = [];
-      var columnnames = ["applymonth", "deptmentName", "username", "deptName", "beneficiaryname"];
+      var columnnames = ["deptName", "beneficiaryname"];
       columns.forEach((column, index) => {
         if (index === 0) {
           sums[index] = "鍚堣";
@@ -383,6 +421,26 @@
         }
       });
       return sums;
+    },
+    /** 鎸変笟鍔$粍琛ㄦ牸鍚堣 */
+    getDeptSummaries(param) {
+      const { columns, data } = param;
+      const sums = [];
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = "鍚堣";
+          return;
+        }
+        if (column.property === "deptname") {
+          return;
+        }
+        const total = data.reduce(
+          (prev, item) => prev + (Number(item[column.property]) || 0),
+          0
+        );
+        sums[index] = total === 0 ? "" : Number(total).toFixed(2);
+      });
+      return sums;
     }
   },
 

--
Gitblit v1.9.3