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/statistics/applyStatistics/index.vue |  242 ++++++++++++++++++++++++++++--------------------
 1 files changed, 141 insertions(+), 101 deletions(-)

diff --git a/src/views/project/statistics/applyStatistics/index.vue b/src/views/project/statistics/applyStatistics/index.vue
index 8e32401..b5e3653 100644
--- a/src/views/project/statistics/applyStatistics/index.vue
+++ b/src/views/project/statistics/applyStatistics/index.vue
@@ -2,57 +2,16 @@
 <template>
   <div class="app-container">
     <el-form
+      class="opo-query-form"
       :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"
@@ -66,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
@@ -84,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"
@@ -94,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;">
@@ -131,7 +159,8 @@
   listsfeistatistics,
   listbxiaostatistics,
   listjixstatistics,
-  listanlstatistics
+  listanlstatistics,
+  exportExpenseStatistics
 } from "@/api/project/statistics";
 
 import { listUser } from "@/api/project/organization";
@@ -160,7 +189,7 @@
       selecttime: "",
       reportervalue: "",
       reportlist: [
-        { label: "宸梾璐�", value: "0" },
+        { label: "宸梾璐�", value: "5" },
         { label: "涓撳璐�", value: "1" },
         { label: "浼︾悊涓撳璐�", value: "2" },
         { label: "鍖诲鎴愭湰", value: "3" },
@@ -204,6 +233,7 @@
         qu: ""
       },
       deptList: [],
+      userList: [],
       // 閬僵灞�
       loading: false,
       // 瀵煎嚭閬僵灞�
@@ -265,48 +295,14 @@
         this.queryParams.pabegtime = this.selecttime[0];
         this.queryParams.paendtime = this.selecttime[1];
         // if (this.queryParams.paendtime == this.queryParams.pabegtime) {
-        let num = Number(this.queryParams.paendtime.slice(5, 7));
-        if (num < 9) {
-          let mon = Number(this.queryParams.paendtime.slice(6, 7));
-          this.queryParams.paendtime =
-            this.queryParams.paendtime.slice(0, 5) +
-            "0" +
-            (mon + 1) +
-            "-" +
-            "01" +
-            " " +
-            "00" +
-            ":" +
-            "00" +
-            ":" +
-            "00";
-        }
-        // this.queryParams.paendtime=this.queryParams.paendtime.slice(0,5)骞�
-        else if (num >= 10) {
-          this.queryParams.paendtime =
-            this.queryParams.paendtime.slice(0, 5) +
-            (num + 1) +
-            "-" +
-            "01" +
-            " " +
-            "00" +
-            ":" +
-            "00" +
-            ":" +
-            "00";
-        } else {
-          this.queryParams.paendtime =
-            this.queryParams.paendtime.slice(0, 5) +
-            "10" +
-            "-" +
-            "01" +
-            " " +
-            "00" +
-            ":" +
-            "00" +
-            ":" +
-            "00";
-        }
+        // 缁撴潫鏃堕棿鍙�"鎵�閫夌粨鏉熸湀鐨勬鏈� 1 鍙�"锛屼互鍖呭惈鏁翠釜缁撴潫鏈堛��
+        // 鍘熷疄鐜版妸鏈堜唤 +1 鍚庣洿鎺ユ嫾瀛楃涓诧紝12 鏈堜細寰楀埌 13 鏈堬紙2026-13-01锛夛紝
+        // MySQL 鎶� Incorrect datetime value锛屽瓨鍌ㄨ繃绋嬬洿鎺� 500銆�
+        this.queryParams.paendtime = this.$moment(this.queryParams.paendtime)
+          .startOf("month")
+          .add(1, "month")
+          .format("YYYY-MM")
+          .concat("-01 00:00:00");
         this.queryParams.pabegtime =
           this.queryParams.pabegtime + " " + "00" + ":" + "00" + ":" + "00";
         // }
@@ -319,6 +315,11 @@
       listDept({}).then(response => {
         this.deptList = response.data;
         this.loading = false;
+      });
+    },
+    getUserList() {
+      listUser().then(res => {
+        this.userList = res.data;
       });
     },
     resetArr(Arr) {
@@ -341,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;
+        });
     },
 
     // 琛ㄥ崟閲嶇疆
@@ -371,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 = [];
@@ -387,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;
@@ -395,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] = "";
         }
@@ -409,6 +448,7 @@
     //鑾峰彇鍒楄〃
     this.getList();
     this.listDept();
+    this.getUserList();
   }
 
   // //鐢熷懡鍛ㄦ湡 - 鎸傝浇瀹屾垚锛堝彲浠ヨ闂瓺OM鍏冪礌锛�

--
Gitblit v1.9.3