From 0e5553e2390bb336e589e5b7f0fa890d59aed735 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期二, 27 十月 2026 01:09:44 +0800
Subject: [PATCH] 统计、绩效模块

---
 src/views/project/donationdetails/index.vue                  |  127 ++++----
 src/views/project/fund/performancedetails/index.vue          |   21 +
 src/api/project/statistics.js                                |   24 +
 src/views/project/donateorgan/index.vue                      |   22 -
 src/views/project/statistics/caseStatistics/index.vue        |  161 ++++++----
 package.json                                                 |    2 
 src/views/project/statistics/chargeStatistics/index.vue      |   22 
 src/views/project/statistics/applyStatistics/index.vue       |  191 +++++++++----
 src/views/project/statistics/performanceStaristics/index.vue |  214 +++++++-------
 9 files changed, 447 insertions(+), 337 deletions(-)

diff --git a/package.json b/package.json
index 015116b..761dd72 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
   "author": "娴欐睙浜ュ皵鏃朵俊鎭鎶�鏈夐檺鍏徃",
   "license": "MIT",
   "scripts": {
-    "serve": "vue-cli-service serve",
+    "dev": "vue-cli-service serve",
     "build": "vue-cli-service build",
     "build:stage": "vue-cli-service build --mode staging",
     "preview": "node build/index.js --preview",
diff --git a/src/api/project/statistics.js b/src/api/project/statistics.js
index 493d64b..6e1fa32 100644
--- a/src/api/project/statistics.js
+++ b/src/api/project/statistics.js
@@ -8,6 +8,14 @@
     data: query
   })
 }
+// 瀵煎嚭妗堜緥缁熻
+export function exportCaseStatistics(query) {
+  return request({
+    url: '/project/spstatcase/export',
+    method: 'get',
+    params: query
+  })
+}
 // 鏌ヨ缁╂晥缁熻
 export function listjixstatistics(query) {
     return request({
@@ -16,6 +24,14 @@
       data: query
     })
   }
+  // 瀵煎嚭缁╂晥缁熻
+export function exportPerformanceStatistics(query) {
+    return request({
+      url: '/project/funddetail/exportBonus',
+      method: 'get',
+      params: query
+    })
+  }
   // 鏌ヨ鎶ラ攢缁熻
 export function listbxiaostatistics(query) {
     return request({
@@ -24,6 +40,14 @@
       data: query
     })
   }
+  // 瀵煎嚭璐圭敤缁熻
+export function exportExpenseStatistics(query) {
+    return request({
+      url: '/project/spstatexpense/export',
+      method: 'get',
+      params: query
+    })
+  }
   // 鏌ヨ鏀惰垂缁熻
 export function listsfeistatistics(query) {
     return request({
diff --git a/src/views/project/donateorgan/index.vue b/src/views/project/donateorgan/index.vue
index c12c2ad..c7f29fa 100644
--- a/src/views/project/donateorgan/index.vue
+++ b/src/views/project/donateorgan/index.vue
@@ -11,7 +11,6 @@
             </el-select>
           </el-form-item>
         </el-col>
-
         <el-col :span="6">
           <el-form-item label="鍣ㄥ畼鐘舵��" prop="organstate">
             <el-select v-model="queryParams.organstate" placeholder="璇烽�夋嫨" clearable size="small">
@@ -20,7 +19,6 @@
             </el-select>
           </el-form-item>
         </el-col>
-
         <el-col :span="6">
           <el-form-item label="绉绘鏈烘瀯" prop="gainhospitalname">
             <org-selecter ref="tranHosSelect" :org-type="'4'" v-model="queryParams.gainhospitalname" />
@@ -37,7 +35,6 @@
         </el-col>
       </el-row>
       <el-row>
-
         <el-col :span="6">
           <el-form-item label="鎹愮尞鑰�" prop="name">
             <el-input v-model="queryParams.name" placeholder="璇疯緭鍏ユ崘鐚��" />
@@ -54,7 +51,6 @@
              <org-selecter ref="tranHosSelect" :org-type="'4'" v-model="queryParams.gainhospitalname2" />
           </el-form-item>
         </el-col>
-
         <el-col :span="6">
           <el-form-item label="褰掑睘鍦板尯" prop="businessarea">
              <el-select v-model="queryParams.businessarea" placeholder="璇烽�夋嫨鍦板競">
@@ -66,15 +62,10 @@
               >
               </el-option>
             </el-select>
-
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
-
-
-
-
         <el-col :span="9">
           <el-form-item label="鑾峰彇鏃堕棿" prop="organgettime">
             <el-date-picker style="width: 100%" v-model="queryParams.organgettime" type="monthrange" range-separator="鑷�"
@@ -85,17 +76,13 @@
             </el-date-picker> -->
           </el-form-item>
         </el-col>
-
-
         <el-col :span="9">
           <el-form-item label="绉绘鏃堕棿" prop="transplanttime">
              <el-date-picker style="width: 100%" v-model="queryParams.transplanttime" type="monthrange" range-separator="鑷�"
               start-placeholder="寮�濮嬫湀浠�" end-placeholder="缁撴潫鏈堜唤" value-format="yyyy-MM-dd">
             </el-date-picker>
-
           </el-form-item>
         </el-col>
-
         <el-col :span="6">
           <el-form-item>
             <el-button type="primary" icon="el-icon-search" style="margin-right: 20px" size="mini" @click="handleQuery">
@@ -108,8 +95,6 @@
         <el-col :span="6">
           <el-form-item label="缁勯暱" prop="zuzhang">
             <el-input
-
-
               v-model="queryParams.zuzhang"
             />
           </el-form-item>
@@ -128,12 +113,7 @@
         </el-date-picker>
       </el-form-item>
         </el-col>
-
-
       </el-row> -->
-
-
-
     </el-form>
 
     <el-row :gutter="10" class="mb8">
@@ -143,8 +123,6 @@
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
-
-
     <!--<el-table v-loading="loading" :data="donateorganList" @selection-change="handleSelectionChange" label-width="96px">-->
     <el-table border v-loading="loading" :data="newdonateorganList" @selection-change="handleSelectionChange"
       label-width="96px">
diff --git a/src/views/project/donationdetails/index.vue b/src/views/project/donationdetails/index.vue
index be05831..00d7057 100644
--- a/src/views/project/donationdetails/index.vue
+++ b/src/views/project/donationdetails/index.vue
@@ -2811,18 +2811,6 @@
         contacttime: "",
         reporttime: ""
       },
-      organOrder: [
-        "鑲濊剰",
-        "宸﹁偩",
-        "鍙宠偩",
-        "蹇冭剰",
-        "宸﹁偤",
-        "鍙宠偤",
-        "鑳拌吅",
-        "灏忚偁",
-        "宸︾溂瑙掕啘",
-        "鍙崇溂瑙掕啘"
-      ], // 鎸囧畾鐨勫櫒瀹橀『搴�
       isSorting: false, // 鏍囧織浣嶏紝琛ㄧず鏄惁姝e湪鎺掑簭
       tableKey: 0,
       istb: false,
@@ -3182,7 +3170,8 @@
     // 鐩戝惉 procureddata 鐨勫彉鍖栵紝鏁版嵁鏇存柊鍚庨噸鏂版帓搴�
     procureddata: {
       handler(newVal) {
-        if (this.procureddata[0].organgettime) {
+        // 鍒ょ┖锛氬彇娑堟渶鍚庝竴涓櫒瀹樻椂鏁扮粍浼氬彉鎴愮┖锛岀洿鎺ュ彇 [0] 浼氭姏 TypeError
+        if (this.procureddata[0] && this.procureddata[0].organgettime) {
           this.organgettimetrue = true;
         }
         if (this.isSorting) {
@@ -3342,7 +3331,8 @@
         listDonateorgan(searchParam).then(res => {
           if (res.code == 200) {
             if (res.rows[0]) {
-              this.allocateddata = res.rows;
+              // 2026-10-23锛氭寜鍣ㄥ畼鎺掗槦搴忓彿鎺掑簭鍚庡啀娓叉煋
+              this.allocateddata = this.sortOrganRows(res.rows);
               console.log("this.allocateddata", this.allocateddata);
               this.allocateddataform.allocateddata = this.allocateddata;
             }
@@ -3383,6 +3373,8 @@
               });
               // this.procureddata.infoid = this.infoid;
             }
+            // 2026-10-23锛氭寜鍣ㄥ畼鎺掗槦搴忓彿鎺掑簭鍚庡啀娓叉煋
+            this.procureddata = this.sortOrganRows(this.procureddata);
             this.organList.organprocured = [];
             for (let i = 0; i < this.procureddata.length; i++) {
               this.organList.organprocured.push(this.procureddata[i].organno);
@@ -3437,6 +3429,8 @@
 
               this.transplantdata.infoid = this.infoid;
             }
+            // 2026-10-23锛氭寜鍣ㄥ畼鎺掗槦搴忓彿鎺掑簭鍚庡啀娓叉煋
+            this.transplantdata = this.sortOrganRows(this.transplantdata);
             for (let i = 0; i < this.transplantdata.length; i++) {
               this.organList.organtransplant.push(
                 this.transplantdata[i].organno
@@ -3703,6 +3697,8 @@
               item.transplanthospitalname = objs.organizationname;
             }
           });
+          // 2026-10-23锛氭彁浜ゅ墠鎸夊櫒瀹樻帓闃熷簭鍙锋帓搴忥紝淇濊瘉鍏ュ簱椤哄簭涓庡睍绀轰竴鑷�
+          this.sortOrganRows(this.allocateddata);
           saveDonateorgan(this.allocateddata).then(res => {
             // 鍥炲~涓婚敭锛氬悗绔凡鎸�"鍚屼竴妗堜緥鍚屼竴鍣ㄥ畼"鍋� upsert锛屽洖濉悗鍓嶇涓嶄細鍐嶈鍒や负鏂板
             if (res && res.data && res.data.length === this.allocateddata.length) {
@@ -3757,6 +3753,8 @@
                   }
                 });
                 //淇濆瓨鍣ㄥ畼鑾峰彇琛ㄦ暟鎹�
+                // 2026-10-23锛氭彁浜ゅ墠鎸夊櫒瀹樻帓闃熷簭鍙锋帓搴�
+                this.sortOrganRows(this.procureddata);
                 saveDonationwitnessorgan(this.procureddata).then(res => {
                   if (res && res.data && res.data.length === this.procureddata.length) {
                     res.data.forEach((row, i) => {
@@ -3793,6 +3791,8 @@
                     this.Processvalidation();
                   });
                   //淇濆瓨鍣ㄥ畼鑾峰彇琛ㄦ暟鎹�
+                  // 2026-10-23锛氭彁浜ゅ墠鎸夊櫒瀹樻帓闃熷簭鍙锋帓搴�
+                  this.sortOrganRows(this.procureddata);
                   saveDonationwitnessorgan(this.procureddata).then(res => {
                     if (res && res.data && res.data.length === this.procureddata.length) {
                       res.data.forEach((row, i) => {
@@ -3833,6 +3833,8 @@
             if (this.accomplishform.id) {
               updateDonatecompletioninfo(this.accomplishform).then(response => {
                 this.$modal.msgSuccess("瀹屾垚鐧昏淇℃伅淇敼鎴愬姛");
+                // 2026-10-23锛氭彁浜ゅ墠鎸夊櫒瀹樻帓闃熷簭鍙锋帓搴�
+                this.sortOrganRows(this.transplantdata);
                 saveDonatecomporgan(this.transplantdata).then(res => {
                   if (res && res.data && res.data.length === this.transplantdata.length) {
                     res.data.forEach((row, i) => {
@@ -3854,6 +3856,8 @@
                   this.accomplishform.id = response.data.id;
                 }
                 this.$modal.msgSuccess("瀹屾垚鐧昏鎴愬姛");
+                // 2026-10-23锛氭彁浜ゅ墠鎸夊櫒瀹樻帓闃熷簭鍙锋帓搴�
+                this.sortOrganRows(this.transplantdata);
                 saveDonatecomporgan(this.transplantdata).then(res => {
                   if (res && res.data && res.data.length === this.transplantdata.length) {
                     res.data.forEach((row, i) => {
@@ -3886,35 +3890,48 @@
       }
     },
 
-    customOrganSort() {
-      console.log("璋冪敤");
+    /**
+     * 鍙栧櫒瀹樼殑鎺掗槦搴忓彿锛氬瓧鍏� sys_Organ 鐨� dict_sort 鍘熷��
+     * 瀛楀吀閲屾病鏈夎鍣ㄥ畼鏃惰繑鍥� null锛堟帓搴忔椂鎺掓渶鍚庯級
+     */
+    getOrganSort(organno) {
+      const list =
+        (this.dict && this.dict.type && this.dict.type.sys_Organ) || [];
+      const item = list.find(d => d.value === organno);
+      if (item && item.raw) {
+        const s = item.raw.dictSort;
+        if (s !== null && s !== undefined && s !== "") {
+          return Number(s);
+        }
+      }
+      return null;
+    },
 
+    /**
+     * 鎸夊櫒瀹樻帓闃熷簭鍙峰崌搴忔帓搴忥紙鍘熷湴锛�
+     * sort 涓虹┖/0 瑙嗕负鏈煡锛屾帓鏈�鍚庯紱鐩稿悓搴忓彿鎸� id 鍏滃簳锛屼繚璇侀『搴忕ǔ瀹�
+     */
+    sortOrganRows(rows) {
+      if (!rows || !rows.length) {
+        return rows;
+      }
+      const weight = r => {
+        const s = Number(r.sort);
+        if (r.sort === null || r.sort === undefined || isNaN(s) || s === 0) {
+          return 999999;
+        }
+        return s;
+      };
+      rows.sort((a, b) => weight(a) - weight(b) || (a.id || 0) - (b.id || 0));
+      return rows;
+    },
+
+    customOrganSort() {
       // 1. 鍔犻攣锛岄樆姝㈢洃鍚櫒鎵ц
       this.isSorting = true;
       this.loading = true;
-      // 鑷畾涔夋帓搴忓嚱鏁�
-      this.procureddata.sort((a, b) => {
-        const indexA = this.organOrder.indexOf(a.organname);
-        const indexB = this.organOrder.indexOf(b.organname);
-
-        // 濡傛灉涓や釜閮藉湪鍒楄〃涓紝鎸夊垪琛ㄤ腑鐨勯『搴忔帓搴�
-        if (indexA !== -1 && indexB !== -1) {
-          return indexA - indexB;
-        }
-        // 濡傛灉 a 鍦ㄥ垪琛ㄤ腑锛宐 涓嶅湪锛宎 鎺掑墠闈�
-        if (indexA !== -1) {
-          return -1;
-        }
-        // 濡傛灉 b 鍦ㄥ垪琛ㄤ腑锛宎 涓嶅湪锛宐 鎺掑墠闈�
-        if (indexB !== -1) {
-          return 1;
-        }
-        // 涓や釜閮戒笉鍦ㄥ垪琛ㄤ腑锛屼繚鎸佸師椤哄簭锛堟垨鎸夊叾浠栬鍒欙紝姣斿鎸夊瓧姣嶆帓搴忥紝杩欓噷鎸夊師濮嬮『搴忥級
-        return 0;
-      });
-      console.log(this.procureddata, "椤哄簭");
+      this.sortOrganRows(this.procureddata);
       this.tableKey += 1; // 鏀瑰彉 key 杩娇琛ㄦ牸閲嶆柊娓叉煋
-      // 浣犲彲浠ヤ娇鐢� this.$forceUpdate() 鎴栬�呴噸鏂拌祴鍊兼暟缁勬潵瑙﹀彂鏇存柊
       this.procureddata = [...this.procureddata];
       this.$nextTick(() => {
         this.isSorting = false;
@@ -3922,33 +3939,10 @@
       });
     },
     allocateddataSort() {
-      console.log("璋冪敤");
-
       // 1. 鍔犻攣锛岄樆姝㈢洃鍚櫒鎵ц
       this.isSorting = true;
-      // 鑷畾涔夋帓搴忓嚱鏁�
-      this.allocateddata.sort((a, b) => {
-        const indexA = this.organOrder.indexOf(a.organname);
-        const indexB = this.organOrder.indexOf(b.organname);
-
-        // 濡傛灉涓や釜閮藉湪鍒楄〃涓紝鎸夊垪琛ㄤ腑鐨勯『搴忔帓搴�
-        if (indexA !== -1 && indexB !== -1) {
-          return indexA - indexB;
-        }
-        // 濡傛灉 a 鍦ㄥ垪琛ㄤ腑锛宐 涓嶅湪锛宎 鎺掑墠闈�
-        if (indexA !== -1) {
-          return -1;
-        }
-        // 濡傛灉 b 鍦ㄥ垪琛ㄤ腑锛宎 涓嶅湪锛宐 鎺掑墠闈�
-        if (indexB !== -1) {
-          return 1;
-        }
-        // 涓や釜閮戒笉鍦ㄥ垪琛ㄤ腑锛屼繚鎸佸師椤哄簭锛堟垨鎸夊叾浠栬鍒欙紝姣斿鎸夊瓧姣嶆帓搴忥紝杩欓噷鎸夊師濮嬮『搴忥級
-        return 0;
-      });
-      console.log(this.allocateddata, "椤哄簭");
+      this.sortOrganRows(this.allocateddata);
       this.tableKey += 1; // 鏀瑰彉 key 杩娇琛ㄦ牸閲嶆柊娓叉煋
-      // 浣犲彲浠ヤ娇鐢� this.$forceUpdate() 鎴栬�呴噸鏂拌祴鍊兼暟缁勬潵瑙﹀彂鏇存柊
       this.allocateddata = [...this.allocateddata];
       this.$nextTick(() => {
         this.isSorting = false;
@@ -4028,6 +4022,8 @@
             this.allocateddata.push({
               organname: temporganname,
               organno: value,
+              // 2026-10-23锛氬啓鍏ュ櫒瀹樻帓闃熷簭鍙凤紙瀛楀吀 dict_sort锛�
+              sort: this.getOrganSort(value),
               id: null,
               infoid: this.infoid,
               donorno: this.form.donorno,
@@ -4098,6 +4094,8 @@
             this.procureddata.push({
               organname: temporganname,
               organno: value,
+              // 2026-10-23锛氬啓鍏ュ櫒瀹樻帓闃熷簭鍙凤紙瀛楀吀 dict_sort锛�
+              sort: this.getOrganSort(value),
               id: null,
               infoid: this.infoid,
               donorno: this.form.donorno,
@@ -4174,12 +4172,17 @@
             this.transplantdata.push({
               organname: temporganname,
               organno: value,
+              // 2026-10-23锛氬啓鍏ュ櫒瀹樻帓闃熷簭鍙凤紙瀛楀吀 dict_sort锛�
+              sort: this.getOrganSort(value),
               id: null,
               infoid: this.infoid,
               donorno: this.form.donorno,
               organstate: 1,
               transplantstate: 1
             });
+            // 2026-10-23锛氬畬鎴愮櫥璁板師鍏堟病鏈� watch锛屾柊澧炲櫒瀹樹細鍋滃湪琛ㄦ牸鏈�鍚庯紱
+            // 杩欓噷绔嬪嵆鎸夋帓闃熷簭鍙峰綊浣嶏紙鍘熷湴鎺掑簭鍚庡繀椤婚噸鏂拌祴鍊硷紝鍚﹀垯琛ㄦ牸涓嶉噸娓叉煋锛�
+            this.transplantdata = this.sortOrganRows([...this.transplantdata]);
           }
         } else {
           this.$modal.msgWarning("璇ュ櫒瀹樺凡缁忛�夋嫨锛岃鍕块噸澶嶉�夋嫨锛�");
diff --git a/src/views/project/fund/performancedetails/index.vue b/src/views/project/fund/performancedetails/index.vue
index 3b5c533..fcc2577 100644
--- a/src/views/project/fund/performancedetails/index.vue
+++ b/src/views/project/fund/performancedetails/index.vue
@@ -59,9 +59,17 @@
           </el-col>
         </el-row>
         <el-row>
-          <el-col :span="5">
-            <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
-              <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+           <el-col :span="5">
+            <el-form-item label="缁╂晥鏃ユ湡" prop="jxrq">
+              <el-date-picker
+                clearable
+                style="width: 100%"
+                v-model="form.jxrq"
+                type="date" format="yyyy-MM-dd"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                placeholder="缁╂晥鏃ユ湡"
+              >
+              </el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :span="5">
@@ -90,9 +98,14 @@
               </el-select>
             </el-form-item>
           </el-col>
+          <el-col :span="5">
+            <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+              <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+            </el-form-item>
+          </el-col>
         </el-row>
         <el-row style="text-align: left">
-          <el-col :span="8">
+          <el-col :span="12">
             <el-form-item label="鐢宠璇存槑" prop="remark">
               <el-input v-model="form.remark" placeholder="鐢宠璇存槑" />
             </el-form-item>
diff --git a/src/views/project/statistics/applyStatistics/index.vue b/src/views/project/statistics/applyStatistics/index.vue
index 447eb92..b5e3653 100644
--- a/src/views/project/statistics/applyStatistics/index.vue
+++ b/src/views/project/statistics/applyStatistics/index.vue
@@ -6,54 +6,12 @@
       :model="queryParams"
       ref="queryForm"
       :inline="true"
+      v-show="showSearch"
       label-width="70px"
     >
       <el-row :gutter="8">
-        <el-col :span="6">
-          <el-form-item label="涓氬姟浜哄憳" prop="name">
-            <el-input
-              v-model="queryParams.pausername"
-              placeholder="璇疯緭鍏ュ鍚�"
-              clearable
-              size="small"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <el-form-item align="left" label="涓氬姟缁�" prop="treatmenthospitalno">
-            <el-select
-              v-model="queryParams.padeptno"
-              placeholder="璇烽�夋嫨妗堜緥鐘舵��"
-            >
-              <el-option
-                v-for="item in deptList"
-                :label="item.deptName"
-                :value="item.deptId"
-              >
-              </el-option>
-            </el-select>
-          </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-row>
-      <el-row :gutter="8">
-        <el-col :span="12">
-          <el-form-item label="缁熻鏃ユ湡">
+        <el-col :span="8">
+          <el-form-item label="鏈堜唤鑼冨洿">
             <el-date-picker
               style="width: 100%"
               v-model="selecttime"
@@ -67,7 +25,57 @@
             </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">
+            <el-select
+              v-model="queryParams.padeptno"
+              placeholder="璇烽�夋嫨鎶ラ攢閮ㄩ棬"
+            >
+              <el-option
+                v-for="item in deptList"
+                :label="item.deptName"
+                :value="item.deptId"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>        
+      </el-row>
+      <el-row :gutter="8">
+        <el-col :span="6">
+          <el-form-item label="鎶ラ攢浜哄憳" prop="pauserno">
+            <el-select
+              v-model="queryParams.pauserno"
+              placeholder="璇烽�夋嫨鎶ラ攢浜哄憳"
+              clearable
+              filterable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in userList"
+                :key="item.username"
+                :label="item.nickname"
+                :value="item.username"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
         <el-col :span="6">
           <el-form-item>
             <el-button
@@ -85,6 +93,24 @@
       </el-row>
     </el-form>
 
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          >瀵煎嚭</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
     <!--<el-table v-loading="loading" border :data="donatebaseinfoList">     -->
     <el-table
       :data="jxidata"
@@ -95,23 +121,24 @@
       :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="id" width="50" />
       <el-table-column label="缁熻鏈堜唤" align="center" prop="applymonth" />
-      <el-table-column label="涓氬姟缁�" align="center" prop="deptmentName">
-      </el-table-column>
+      <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" prop="amount" />
-
-      <el-table-column label="鎿嶄綔" align="center">
+      <!-- <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-column> -->
     </el-table>
 
     <div style="margin: 10px;text-align: right;">
@@ -132,7 +159,8 @@
   listsfeistatistics,
   listbxiaostatistics,
   listjixstatistics,
-  listanlstatistics
+  listanlstatistics,
+  exportExpenseStatistics
 } from "@/api/project/statistics";
 
 import { listUser } from "@/api/project/organization";
@@ -161,7 +189,7 @@
       selecttime: "",
       reportervalue: "",
       reportlist: [
-        { label: "宸梾璐�", value: "0" },
+        { label: "宸梾璐�", value: "5" },
         { label: "涓撳璐�", value: "1" },
         { label: "浼︾悊涓撳璐�", value: "2" },
         { label: "鍖诲鎴愭湰", value: "3" },
@@ -205,6 +233,7 @@
         qu: ""
       },
       deptList: [],
+      userList: [],
       // 閬僵灞�
       loading: false,
       // 瀵煎嚭閬僵灞�
@@ -288,6 +317,11 @@
         this.loading = false;
       });
     },
+    getUserList() {
+      listUser().then(res => {
+        this.userList = res.data;
+      });
+    },
     resetArr(Arr) {
       var hash = {};
       Arr = Arr.reduce(function(arr, current) {
@@ -308,6 +342,29 @@
           $obj.id = $index + 1;
         });
       });
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      const queryParams = {
+        pabegtime: this.queryParams.pabegtime,
+        paendtime: this.queryParams.paendtime,
+        padeptno: this.queryParams.padeptno,
+        pauserno: this.queryParams.pauserno,
+        paexpensetype: this.queryParams.paexpensetype
+      };
+      this.$modal
+        .confirm("鏄惁纭瀵煎嚭褰撳墠绛涢�夋潯浠朵笅鐨勮垂鐢ㄧ粺璁℃暟鎹紵")
+        .then(() => {
+          this.exportLoading = true;
+          return exportExpenseStatistics(queryParams);
+        })
+        .then(response => {
+          this.$download.name(response.msg);
+          this.exportLoading = false;
+        })
+        .catch(() => {
+          this.exportLoading = false;
+        });
     },
 
     // 琛ㄥ崟閲嶇疆
@@ -338,6 +395,20 @@
       this.resetForm("queryForm");
       this.handleQuery();
     },
+    /** 閲戦鏄剧ず锛氫繚鐣欎袱浣嶅皬鏁帮紝0.00 涓嶆樉绀� */
+    formatAmount(value) {
+      if (value === null || value === undefined || value === "") {
+        return "";
+      }
+      const num = Number(value);
+      if (!Number.isFinite(num) || num === 0) {
+        return "";
+      }
+      return num.toFixed(2);
+    },
+    amountFormatter(row, column, cellValue) {
+      return this.formatAmount(cellValue);
+    },
     getSummaries(param) {
       const { columns, data } = param;
       const sums = [];
@@ -354,7 +425,7 @@
 
         const values = data.map(item => Number(item[column.property]));
         if (!values.every(value => isNaN(value))) {
-          sums[index] = values.reduce((prev, curr) => {
+          const total = values.reduce((prev, curr) => {
             const value = Number(curr);
             if (!isNaN(value)) {
               return prev + curr;
@@ -362,7 +433,8 @@
               return prev;
             }
           }, 0);
-          sums[index] = sums[index].toFixed(2); // 淇濈暀2浣嶅皬鏁帮紝瑙e喅灏忔暟鍚堣鍒�;
+          // 鍚堣淇濈暀 2 浣嶅皬鏁帮紱0.00 涓嶆樉绀�
+          sums[index] = total === 0 ? "" : Number(total).toFixed(2);
         } else {
           sums[index] = "";
         }
@@ -376,6 +448,7 @@
     //鑾峰彇鍒楄〃
     this.getList();
     this.listDept();
+    this.getUserList();
   }
 
   // //鐢熷懡鍛ㄦ湡 - 鎸傝浇瀹屾垚锛堝彲浠ヨ闂瓺OM鍏冪礌锛�
diff --git a/src/views/project/statistics/caseStatistics/index.vue b/src/views/project/statistics/caseStatistics/index.vue
index 7a48431..1f64c67 100644
--- a/src/views/project/statistics/caseStatistics/index.vue
+++ b/src/views/project/statistics/caseStatistics/index.vue
@@ -6,54 +6,12 @@
       :model="queryParams"
       ref="queryForm"
       :inline="true"
+      v-show="showSearch"
       label-width="70px"
     >
-      <el-row :gutter="8">
-        <el-col :span="6">
-          <el-form-item label="涓氬姟浜哄憳" prop="name">
-            <el-input
-              v-model="queryParams.pausername"
-              placeholder="璇疯緭鍏ュ鍚�"
-              clearable
-              size="small"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <el-form-item align="left" label="涓氬姟缁�" prop="treatmenthospitalno">
-            <el-select
-              v-model="queryParams.padeptno"
-              placeholder="璇烽�夋嫨妗堜緥鐘舵��"
-            >
-              <el-option
-                v-for="item in deptList"
-                :label="item.deptName"
-                :value="item.deptId"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <el-form-item label="妗堜緥鐘舵��">
-            <el-select
-              v-model="queryParams.pacasestate"
-              placeholder="璇烽�夋嫨妗堜緥鐘舵��"
-            >
-              <el-option
-                v-for="item in reportlist"
-                :label="item.label"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="8">
-        <el-col :span="12">
-          <el-form-item label="缁熻鏃ユ湡">
+      <el-row >
+        <el-col :span="8">
+          <el-form-item label="鏈堜唤鑼冨洿">
             <el-date-picker
               style="width: 100%"
               v-model="selecttime"
@@ -66,8 +24,33 @@
             >
             </el-date-picker>
           </el-form-item>
+        </el-col>        
+        <el-col :span="5">
+          <el-form-item align="left" label="涓氬姟缁�" prop="treatmenthospitalno">
+            <el-select
+              v-model="queryParams.padeptno"
+              placeholder="璇烽�夋嫨涓氬姟缁�"
+            >
+              <el-option
+                v-for="item in deptList"
+                :label="item.deptName"
+                :value="item.deptId"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
         </el-col>
-
+        <el-col :span="5">
+          <el-form-item label="涓氬姟浜哄憳" prop="name">
+            <el-input
+              v-model="queryParams.pausername"
+              placeholder="璇疯緭鍏ュ鍚�"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>        
         <el-col :span="6">
           <el-form-item>
             <el-button
@@ -85,6 +68,24 @@
       </el-row>
     </el-form>
 
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          >瀵煎嚭</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
     <!--<el-table v-loading="loading" border :data="donatebaseinfoList">     -->
     <el-table
       v-loading="loading"
@@ -96,31 +97,35 @@
       :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="id" width="50" />
       <el-table-column label="缁熻鏈堜唤" align="center" prop="donationmonth" />
-
-      <el-table-column label="涓氬姟缁�" align="center" prop="deptname">
-      </el-table-column>
+      <el-table-column label="涓氬姟缁�" align="center" prop="deptname">      </el-table-column>
       <el-table-column label="涓撹亴浜哄憳" align="center" prop="reportername" />
+      <el-table-column label="妗堜緥绱" align="center" prop="casesum" />
+      <el-table-column label="娼滃湪鎹愮尞" align="center" prop="workflow0" width="100" />
+      <el-table-column label="鍖诲璇勪及" align="center" prop="workflow1" width="100" />
+      <el-table-column label="瀹跺睘纭" align="center" prop="workflow2" width="100" />
+      <el-table-column label="浼︾悊瀹℃煡" align="center" prop="workflow3" width="100" />
+      <el-table-column label="鍣ㄥ畼鍒嗛厤" align="center" prop="workflow4" width="100" />
+      <el-table-column label="鑾峰彇瑙佽瘉" align="center" prop="workflow5" width="100" />
+      <el-table-column label="鎹愮尞瀹屾垚" align="center" prop="workflow6" width="100" />
+      <el-table-column label="褰掓。鎾ら攢" align="center" prop="workflow7" width="100" />
+      <el-table-column label="妗堜緥褰掓。" align="center" prop="workflow8" width="100" />
+      <!-- <el-table-column label="妗堜緥缁堟" align="center" prop="workflow9" width="90" /> -->
+      <el-table-column label="缁堟妗堜緥" align="center" prop="terminationcase" width="100" />
 
-      <el-table-column label="妗堜緥鏁伴噺" align="center" prop="casesum" />
-
-      <el-table-column
+      <!-- <el-table-column
         label="鎿嶄綔"
         align="center"
         class-name="small-padding fixed-width"
         fixed="right"
       >
         <template slot-scope="scope">
-          <!--           v-if="scope.row.recordstate==2"
- -->
           <el-button size="mini" type="text" icon="el-icon-edit"
             >鏄庣粏</el-button
           >
         </template>
-      </el-table-column>
+      </el-table-column> -->
     </el-table>
     <div style="margin: 10px;text-align: right;">
       <div>
@@ -140,7 +145,8 @@
   listsfeistatistics,
   listbxiaostatistics,
   listjixstatistics,
-  listanlstatistics
+  listanlstatistics,
+  exportCaseStatistics
 } from "@/api/project/statistics";
 
 import { listUser } from "@/api/project/organization";
@@ -169,10 +175,6 @@
 
       selecttime: "",
       reportervalue: "",
-      reportlist: [
-        { label: "姝e父", value: "0" },
-        { label: "缁堟", value: "1" }
-      ],
       //鐪佸競鍖�
       //榛樿鍊艰缃紝鍙负绌�
       searchAddress: {
@@ -236,7 +238,6 @@
       daterangeReporttime: [],
       // 鏌ヨ鍙傛暟
       queryParams: {
-        pacasestate: "0",
         pabegtime: null,
         paendtime: null
       },
@@ -289,7 +290,8 @@
       }
     },
     listDept() {
-      listDept({}).then(response => {
+      // 鍙彇涓氬姟鍔炲叕瀹わ紙dept_id=102锛変笅鐨勪笟鍔$粍锛屼緵鈥滀笟鍔$粍鈥濅笅鎷変娇鐢�
+      listDept({ parentId: 102 }).then(response => {
         this.deptList = response.data;
         this.loading = false;
       });
@@ -316,10 +318,32 @@
         this.total = res.total;
       });
     },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      const queryParams = {
+        pabegtime: this.queryParams.pabegtime,
+        paendtime: this.queryParams.paendtime,
+        padeptno: this.queryParams.padeptno,
+        pausername: this.queryParams.pausername
+      };
+      this.$modal
+        .confirm("鏄惁纭瀵煎嚭褰撳墠绛涢�夋潯浠朵笅鐨勬渚嬬粺璁℃暟鎹紵")
+        .then(() => {
+          this.exportLoading = true;
+          return exportCaseStatistics(queryParams);
+        })
+        .then(response => {
+          this.$download.name(response.msg);
+          this.exportLoading = false;
+        })
+        .catch(() => {
+          this.exportLoading = false;
+        });
+    },
     getSummaries(param) {
       const { columns, data } = param;
       const sums = [];
-      var columnnames = ["applymonth", "deptmentName", "username"];
+      var columnnames = ["donationmonth", "deptname", "reportername"];
       columns.forEach((column, index) => {
         if (index === 0) {
           sums[index] = "鍚堣";
@@ -366,7 +390,8 @@
       this.form.treatmenthospitalno = "";
 
       this.queryParams = {
-        pacasestate: "0"
+        pabegtime: null,
+        paendtime: null
       };
       this.selecttime = [];
       this.getTimeList();
diff --git a/src/views/project/statistics/chargeStatistics/index.vue b/src/views/project/statistics/chargeStatistics/index.vue
index 9046ff8..3431cd4 100644
--- a/src/views/project/statistics/chargeStatistics/index.vue
+++ b/src/views/project/statistics/chargeStatistics/index.vue
@@ -10,16 +10,7 @@
     >
       <el-row :gutter="8">
         <el-col :span="8">
-          <el-form-item label="鍖婚櫌鍚嶇О">
-            <org-selecter
-              ref="orgSelecter"
-              :org-type="'4'"
-              v-model="queryParams.pahospitalno"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="缁熻鏃ユ湡">
+          <el-form-item label="鏈堜唤鑼冨洿">
             <el-date-picker
               style="width: 100%"
               v-model="selecttime"
@@ -33,8 +24,15 @@
             </el-date-picker>
           </el-form-item>
         </el-col>
-      </el-row>
-      <el-row :gutter="8">
+        <el-col :span="8">
+          <el-form-item label="鍖婚櫌鍚嶇О">
+            <org-selecter
+              ref="orgSelecter"
+              :org-type="'4'"
+              v-model="queryParams.pahospitalno"
+            />
+          </el-form-item>
+        </el-col>  
         <el-col :span="6">
           <el-form-item>
             <el-button
diff --git a/src/views/project/statistics/performanceStaristics/index.vue b/src/views/project/statistics/performanceStaristics/index.vue
index 85267d8..f2b1ac5 100644
--- a/src/views/project/statistics/performanceStaristics/index.vue
+++ b/src/views/project/statistics/performanceStaristics/index.vue
@@ -1,30 +1,13 @@
 <!--  -->
 <template>
   <div class="app-container">
-    <el-form
-      class="opo-query-form"
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="70px"
-    >
-      <el-row :gutter="8">
-        <el-col :span="6">
-          <el-form-item label="涓氬姟浜哄憳" prop="pauserno">
-            <el-input
-              v-model="queryParams.pausername"
-              placeholder="璇疯緭鍏ュ鍚�"
-              clearable
-              size="small"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="6">
+    <el-form class="opo-query-form" :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="70px">
+      <el-row :gutter="4">
+        <!-- <el-col :span="6">
           <el-form-item align="left" label="涓氬姟缁�" prop="padeptno">
             <el-select
               v-model="queryParams.padeptno"
-              placeholder="璇烽�夋嫨妗堜緥鐘舵��"
+              placeholder="璇烽�夋嫨閮ㄩ棬銆佷笟鍔$粍"
             >
               <el-option
                 v-for="item in deptList"
@@ -34,93 +17,58 @@
               </el-option>
             </el-select>
           </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <el-form-item label="缁╂晥绫诲瀷">
-            <el-select
-              v-model="queryParams.pabonustype"
-              placeholder="璇烽�夋嫨妗堜緥鐘舵��"
-            >
-              <el-option
-                v-for="item in reportlist"
-                :label="item.label"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="8">
-        <el-col :span="12">
+        </el-col> -->
+        <el-col :span="8">
           <el-form-item label="缁熻鏃ユ湡">
-            <el-date-picker
-              style="width: 100%"
-              v-model="selecttime"
-              type="monthrange"
-              range-separator="鑷�"
-              start-placeholder="寮�濮嬫湀浠�"
-              end-placeholder="缁撴潫鏈堜唤"
-              value-format="yyyy-MM-dd"
-              @change="getTimeList"
-            >
+            <el-date-picker style="width: 100%" v-model="selecttime" type="monthrange" range-separator="鑷�"
+              start-placeholder="寮�濮嬫湀浠�" end-placeholder="缁撴潫鏈堜唤" value-format="yyyy-MM-dd" @change="getTimeList">
             </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-form-item label="缁╂晥浜哄憳" prop="pauserno">
+            <el-input v-model="queryParams.pausername" placeholder="璇疯緭鍏ュ鍚�" clearable size="small"
+              @keyup.enter.native="handleQuery" />
+          </el-form-item>
+        </el-col>
         <el-col :span="6">
           <el-form-item>
-            <el-button
-              type="primary"
-              icon="el-icon-search"
-              size="mini"
-              @click="handleQuery"
-              >鎼滅储</el-button
-            >
-            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-              >閲嶇疆</el-button
-            >
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
           </el-form-item>
         </el-col>
       </el-row>
     </el-form>
 
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="el-icon-download" size="mini" :loading="exportLoading"
+          @click="handleExport">瀵煎嚭</el-button>
+      </el-col>
+      <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 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" />
-
-      <el-table-column
-        label="鎿嶄綔"
-        align="center"
-        class-name="small-padding fixed-width"
-        fixed="right"
-      >
+      <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">
-          <!--           v-if="scope.row.recordstate==2"
- -->
-          <el-button size="mini" type="text" icon="el-icon-edit"
-            >鏄庣粏</el-button
-          >
+          <el-button size="mini" type="text" icon="el-icon-edit">鏄庣粏</el-button>
         </template>
-      </el-table-column>
+      </el-table-column> -->
     </el-table>
     <div style="margin: 10px;text-align: right;">
       <div>
@@ -141,7 +89,8 @@
   listsfeistatistics,
   listbxiaostatistics,
   listjixstatistics,
-  listanlstatistics
+  listanlstatistics,
+  exportPerformanceStatistics
 } from "@/api/project/statistics";
 
 import { listUser } from "@/api/project/organization";
@@ -171,10 +120,11 @@
 
       selecttime: "",
       reportervalue: "",
-      reportlist: [
-        { label: "鏈堝害", value: 1 },
-        { label: "瀛e害", value: 2 },
-        { label: "骞村害", value: 3 }
+      reporttype: [
+        { label: "鍏ㄩ儴", value: "0" },
+        { label: "鏈堝害", value: "68" },
+        { label: "瀛e害", value: "69" },
+        { label: "骞村害", value: "70" }
       ],
       //鐪佸競鍖�
       //榛樿鍊艰缃紝鍙负绌�
@@ -213,7 +163,7 @@
         shi: "",
         qu: ""
       },
-      deptList:[],
+      deptList: [],
       // 閬僵灞�
       loading: false,
       // 瀵煎嚭閬僵灞�
@@ -240,10 +190,10 @@
       daterangeReporttime: [],
       // 鏌ヨ鍙傛暟
       queryParams: {
-        pabonustype:'',
+        pabonustype: "0",
         pabegtime: null,
         paendtime: null,
-        pauserno: null,
+        pausername: "",
         padeptno: null,
       },
 
@@ -266,8 +216,8 @@
   },
   //鐩戝惉灞炴�� 绫讳技浜巇ata姒傚康
   computed: {},
-  activated() {},
-  mounted() {},
+  activated() { },
+  mounted() { },
 
   //鐩戞帶data涓殑鏁版嵁鍙樺寲
   watch: {},
@@ -297,7 +247,7 @@
 
     resetArr(Arr) {
       var hash = {};
-      Arr = Arr.reduce(function(arr, current) {
+      Arr = Arr.reduce(function (arr, current) {
         hash[current.reporterno]
           ? ""
           : (hash[current.reporterno] = true && arr.push(current));
@@ -306,15 +256,46 @@
       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;
+    },
+
     /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
     getList() {
-      listjixstatistics(this.queryParams).then(res => {
+      listjixstatistics(this.buildQueryParams()).then(res => {
         this.jxidata = res.rows;
         this.jxidata.forEach(($obj, $index) => {
           $obj.id = $index + 1;
         });
-        this.total=res.total;
+        this.total = res.total;
       });
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      const queryParams = this.buildQueryParams();
+      this.$modal
+        .confirm("鏄惁纭瀵煎嚭褰撳墠绛涢�夋潯浠朵笅鐨勭哗鏁堢粺璁℃暟鎹紵")
+        .then(() => {
+          this.exportLoading = true;
+          return exportPerformanceStatistics(queryParams);
+        })
+        .then(response => {
+          this.$download.name(response.msg);
+          this.exportLoading = false;
+        })
+        .catch(() => {
+          this.exportLoading = false;
+        });
     },
     listDept() {
       listDept({}).then(response => {
@@ -339,10 +320,10 @@
 
 
       this.queryParams = {
-        pabonustype:'',
+        pabonustype: "0",
         pabegtime: null,
         paendtime: null,
-        pauserno: null,
+        pausername: "",
         padeptno: null
       };
       this.selecttime = [];
@@ -357,10 +338,24 @@
       this.resetForm("queryForm");
       this.handleQuery();
     },
+    /** 閲戦鏄剧ず锛氫繚鐣欎袱浣嶅皬鏁帮紝0.00 涓嶆樉绀� */
+    formatAmount(value) {
+      if (value === null || value === undefined || value === "") {
+        return "";
+      }
+      const num = Number(value);
+      if (!Number.isFinite(num) || num === 0) {
+        return "";
+      }
+      return num.toFixed(2);
+    },
+    amountFormatter(row, column, cellValue) {
+      return this.formatAmount(cellValue);
+    },
     getSummaries(param) {
       const { columns, data } = param;
       const sums = [];
-      var columnnames = ["applymonth", "deptmentName", "username",'deptName'];
+      var columnnames = ["applymonth", "deptmentName", "username", "deptName", "beneficiaryname"];
       columns.forEach((column, index) => {
         if (index === 0) {
           sums[index] = "鍚堣";
@@ -373,7 +368,7 @@
 
         const values = data.map(item => Number(item[column.property]));
         if (!values.every(value => isNaN(value))) {
-          sums[index] = values.reduce((prev, curr) => {
+          const total = values.reduce((prev, curr) => {
             const value = Number(curr);
             if (!isNaN(value)) {
               return prev + curr;
@@ -381,7 +376,8 @@
               return prev;
             }
           }, 0);
-          sums[index] = sums[index].toFixed(2); // 淇濈暀2浣嶅皬鏁帮紝瑙e喅灏忔暟鍚堣鍒�;
+          // 鍚堣淇濈暀 2 浣嶅皬鏁帮紱0.00 涓嶆樉绀�
+          sums[index] = total === 0 ? "" : Number(total).toFixed(2);
         } else {
           sums[index] = "";
         }

--
Gitblit v1.9.3