From a68195121e02f4294542a11ac96e48047f0fde24 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期三, 28 十月 2026 18:09:09 +0800
Subject: [PATCH] 绩效科室

---
 src/views/project/statistics/applyStatistics/index.vue |  155 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 106 insertions(+), 49 deletions(-)

diff --git a/src/views/project/statistics/applyStatistics/index.vue b/src/views/project/statistics/applyStatistics/index.vue
index b5e3653..a534727 100644
--- a/src/views/project/statistics/applyStatistics/index.vue
+++ b/src/views/project/statistics/applyStatistics/index.vue
@@ -24,21 +24,6 @@
             >
             </el-date-picker>
           </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <el-form-item label="璐圭敤绫诲瀷">
-            <el-select
-              v-model="queryParams.paexpensetype"
-              placeholder="璇烽�夋嫨璐圭敤绫诲瀷"
-            >
-              <el-option
-                v-for="item in reportlist"
-                :label="item.label"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
         </el-col>        
         <el-col :span="6">
           <el-form-item align="left" label="鎶ラ攢閮ㄩ棬" prop="padeptno">
@@ -111,39 +96,48 @@
       ></right-toolbar>
     </el-row>
 
-    <!--<el-table v-loading="loading" border :data="donatebaseinfoList">     -->
-    <el-table
-      :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="50" />
-      <el-table-column label="缁熻鏈堜唤" align="center" prop="applymonth" />
-      <el-table-column label="涓氬姟缁�" align="center" prop="deptmentName" />
-      <el-table-column label="涓撹亴浜哄憳" align="center" prop="username" />
-      <el-table-column label="鎶ラ攢鎬婚噾棰�" align="center" prop="amount" width="180" :formatter="amountFormatter" />
-      <el-table-column label="涓撳璐�" align="center" prop="expertfee" width="160" :formatter="amountFormatter" />
-      <el-table-column label="浼︾悊涓撳璐�" align="center" prop="ethicalistfee" width="160" :formatter="amountFormatter" />
-      <el-table-column label="鍖诲鎴愭湰" align="center" prop="medicalcost" width="160" :formatter="amountFormatter" />
-      <el-table-column label="鍔炲叕璐�" align="center" prop="officecost" width="160" :formatter="amountFormatter" />
-      <el-table-column label="宸梾璐�" align="center" prop="reimcost" width="160" :formatter="amountFormatter" />
+    <el-tabs v-model="activeTab">
+      <el-tab-pane label="鎸変笟鍔$粍" name="dept">
+        <el-table :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="50" />
+          <el-table-column label="涓氬姟缁�" align="center" prop="deptname" />
+          <el-table-column label="鎶ラ攢鎬婚噾棰�" align="center" prop="amount" width="180" :formatter="amountFormatter" />
+          <el-table-column label="涓撳璐�" align="center" prop="expertfee" width="160" :formatter="amountFormatter" />
+          <el-table-column label="浼︾悊涓撳璐�" align="center" prop="ethicalistfee" width="160" :formatter="amountFormatter" />
+          <el-table-column label="鍖诲鎴愭湰" align="center" prop="medicalcost" width="160" :formatter="amountFormatter" />
+          <el-table-column label="鍔炲叕璐�" align="center" prop="officecost" width="160" :formatter="amountFormatter" />
+          <el-table-column label="宸梾璐�" align="center" prop="reimcost" width="160" :formatter="amountFormatter" />
+        </el-table>
+      </el-tab-pane>
 
-      <!-- <el-table-column label="鎿嶄綔" align="center">
-        <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 label="鎸変汉鍛�" name="person">
+        <el-table :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="50" />
+          <el-table-column label="涓氬姟缁�" align="center" prop="deptmentName" />
+          <el-table-column label="涓撹亴浜哄憳" align="center" prop="username" />
+          <el-table-column label="鎶ラ攢鎬婚噾棰�" align="center" prop="amount" width="180" :formatter="amountFormatter" />
+          <el-table-column label="涓撳璐�" align="center" prop="expertfee" width="160" :formatter="amountFormatter" />
+          <el-table-column label="浼︾悊涓撳璐�" align="center" prop="ethicalistfee" width="160" :formatter="amountFormatter" />
+          <el-table-column label="鍖诲鎴愭湰" align="center" prop="medicalcost" width="160" :formatter="amountFormatter" />
+          <el-table-column label="鍔炲叕璐�" align="center" prop="officecost" width="160" :formatter="amountFormatter" />
+          <el-table-column label="宸梾璐�" align="center" prop="reimcost" width="160" :formatter="amountFormatter" />
+
+          <!-- <el-table-column label="鎿嶄綔" align="center">
+            <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>
 
@@ -160,7 +154,8 @@
   listbxiaostatistics,
   listjixstatistics,
   listanlstatistics,
-  exportExpenseStatistics
+  exportExpenseStatistics,
+  exportExpenseDeptStatistics
 } from "@/api/project/statistics";
 
 import { listUser } from "@/api/project/organization";
@@ -252,6 +247,10 @@
       donatebaseinfoList: [],
       // 鎹愮尞鍩虹琛ㄦ牸鏁版嵁
       jxidata: [],
+      // 褰撳墠椤电锛歞ept=鎸変笟鍔$粍锛宲erson=鎸変汉鍛�
+      activeTab: "dept",
+      // 鎸変笟鍔$粍鑱氬悎鏁版嵁
+      deptData: [],
       // 寮瑰嚭灞傛爣棰�
       title: "",
       // 鏄惁鏄剧ず寮瑰嚭灞�
@@ -282,7 +281,11 @@
     };
   },
   //鐩戝惉灞炴�� 绫讳技浜巇ata姒傚康
-  computed: {},
+  computed: {
+    tableTotal() {
+      return this.activeTab === "dept" ? this.deptData.length : this.jxidata.length;
+    }
+  },
   activated() {},
   mounted() {},
 
@@ -341,6 +344,36 @@
         this.jxidata.forEach(($obj, $index) => {
           $obj.id = $index + 1;
         });
+        this.buildDeptData();
+      });
+    },
+    /** 鎸変笟鍔$粍鑱氬悎锛�6 涓噾棰濆垎鍒眰鍜� */
+    buildDeptData() {
+      const map = new Map();
+      this.jxidata.forEach(row => {
+        const key = row.deptmentno || row.deptmentName || "鏈垎缁�";
+        if (!map.has(key)) {
+          map.set(key, {
+            deptname: row.deptmentName || "鏈垎缁�",
+            amount: 0,
+            expertfee: 0,
+            ethicalistfee: 0,
+            medicalcost: 0,
+            officecost: 0,
+            reimcost: 0
+          });
+        }
+        const item = map.get(key);
+        item.amount += Number(row.amount) || 0;
+        item.expertfee += Number(row.expertfee) || 0;
+        item.ethicalistfee += Number(row.ethicalistfee) || 0;
+        item.medicalcost += Number(row.medicalcost) || 0;
+        item.officecost += Number(row.officecost) || 0;
+        item.reimcost += Number(row.reimcost) || 0;
+      });
+      this.deptData = Array.from(map.values()).map((item, index) => {
+        item.id = index + 1;
+        return item;
       });
     },
     /** 瀵煎嚭鎸夐挳鎿嶄綔 */
@@ -352,11 +385,15 @@
         pauserno: this.queryParams.pauserno,
         paexpensetype: this.queryParams.paexpensetype
       };
+      const exportApi =
+        this.activeTab === "dept"
+          ? exportExpenseDeptStatistics
+          : exportExpenseStatistics;
       this.$modal
-        .confirm("鏄惁纭瀵煎嚭褰撳墠绛涢�夋潯浠朵笅鐨勮垂鐢ㄧ粺璁℃暟鎹紵")
+        .confirm("鏄惁纭瀵煎嚭褰撳墠鍒楄〃鐨勮垂鐢ㄧ粺璁℃暟鎹紵")
         .then(() => {
           this.exportLoading = true;
-          return exportExpenseStatistics(queryParams);
+          return exportApi(queryParams);
         })
         .then(response => {
           this.$download.name(response.msg);
@@ -412,7 +449,7 @@
     getSummaries(param) {
       const { columns, data } = param;
       const sums = [];
-      var columnnames = ["applymonth", "deptmentName", "username"];
+      var columnnames = ["deptmentName", "username"];
       columns.forEach((column, index) => {
         if (index === 0) {
           sums[index] = "鍚堣";
@@ -440,6 +477,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