From fb16e99d60035949b870d0bed7f38b452458000a Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期四, 15 十月 2026 15:10:00 +0800
Subject: [PATCH] 修改了专家费校验和附件名字校验

---
 src/views/project/fund/expertFeeApply/index.vue |  385 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 245 insertions(+), 140 deletions(-)

diff --git a/src/views/project/fund/expertFeeApply/index.vue b/src/views/project/fund/expertFeeApply/index.vue
index f762887..1f11134 100644
--- a/src/views/project/fund/expertFeeApply/index.vue
+++ b/src/views/project/fund/expertFeeApply/index.vue
@@ -1,66 +1,6 @@
 <!--  -->
 <template>
   <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      label-width="70px"
-    >
-      <el-row align="left">
-        <el-col :span="6">
-          <el-form-item label="濮撳悕" prop="name">
-            <el-input
-              v-model="queryParams.name"
-              placeholder="璇疯緭鍏ュ鍚�"
-              clearable
-              size="small"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <el-form-item label="鎹愮尞杩涘害" prop="recordstate">
-            <el-select
-              v-model="queryParams.recordstate"
-              placeholder="璇烽�夋嫨璁板綍鐘舵��"
-              clearable
-              size="small"
-            >
-              <el-option
-                v-for="dict in dict.type.sys_DonationStatus"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <el-form-item label="鎹愮尞鑰�" prop="name">
-            <el-input
-              v-model="queryParams.donorname"
-              placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
-              clearable
-              size="small"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <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-col>
-      </el-row>
-    </el-form>
     <el-row>
       <el-col :span="6">
         <el-card shadow="never">
@@ -71,6 +11,54 @@
               </el-row>
             </el-col>
           </el-row>
+          <div>
+            <el-form
+              :model="queryParams"
+              ref="queryForm"
+              :inline="true"
+              label-width="70px"
+            >
+              <el-form-item label="濮撳悕" prop="name">
+                <el-input
+                  v-model="queryParams.name"
+                  placeholder="璇疯緭鍏ュ鍚�"
+                  clearable
+                  size="small"
+                  @keyup.enter.native="handleQuery"
+                />
+              </el-form-item>
+              <el-form-item label="鎹愮尞杩涘害" prop="recordstate">
+                <el-select
+                  v-model="queryParams.recordstate"
+                  placeholder="璇烽�夋嫨璁板綍鐘舵��"
+                  clearable
+                  size="small"
+                >
+                  <el-option
+                    v-for="dict in dict.type.sys_DonationStatus"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+              <div style="float: right; margin-bottom: 10px;">
+                <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
+                >
+              </div>
+            </el-form>
+          </div>
           <el-table
             v-loading="loading"
             highlight-current-row
@@ -104,7 +92,7 @@
         <el-card shadow="naver">
           <el-form ref="infoform" label-width="100px">
             <el-row :gutter="4" align="right" class="mb8">
-              <el-col :span="9">
+              <el-col :span="7">
                 <el-form-item label="鎹愮尞缂栧彿">
                   <el-input
                     v-model="curCase.donorno"
@@ -112,12 +100,20 @@
                   ></el-input>
                 </el-form-item>
               </el-col>
-              <el-col :span="9">
+              <el-col :span="8">
                 <el-form-item label="濮撳悕">
                   <el-input v-model="curCase.name" :disabled="true"></el-input>
                 </el-form-item>
               </el-col>
-              <el-col> </el-col>
+              <el-col :span="3">
+                <el-button
+                  type="primary"
+                  icon="el-icon-search"
+                  size="mini"
+                  @click="allgetfundList"
+                  >妫�绱㈠叏閮�</el-button
+                >
+              </el-col>
             </el-row>
             <el-row :gutter="10" class="mb8">
               <el-col :span="1.5">
@@ -137,16 +133,17 @@
                 v-loading="loading"
                 border
                 :data="donateconsolationfundList"
+                :row-class-name="rowClassName"
               >
                 <el-table-column
                   label="鐢宠鏃ユ湡"
                   align="center"
-                  prop="createTime"
+                  prop="applyTime"
                   width="180px"
                 >
                   <template slot-scope="scope">
                     <span>{{
-                      parseTime(scope.row.createTime, "{y}-{m}-{d}")
+                      parseTime(scope.row.applyTime, "{y}-{m}-{d}")
                     }}</span>
                   </template>
                 </el-table-column>
@@ -156,11 +153,17 @@
                   prop="username"
                   width="120px"
                 />
-                <el-table-column
+                <!-- <el-table-column
                   label="鐢宠閲戦"
                   align="center"
                   prop="pretaxcost"
                   width="200px"
+                /> -->
+                <el-table-column
+                  label="鎹愮尞浜�"
+                  align="center"
+                  prop="donorname"
+                  width="120px"
                 />
                 <el-table-column
                   label="缁勯暱"
@@ -186,10 +189,23 @@
                     />
                   </template>
                 </el-table-column>
-                <!-- 
-                <el-table-column label="鐢宠閲戦" align="center" prop="amountrequested" width="120px" />    
+                <el-table-column
+                  label="鏉愭枡棰勫鐘舵��"
+                  width="140"
+                  align="center"
+                  prop="checkstatus"
+                >
+                  <template slot-scope="scope">
+                    <dict-tag
+                      :options="dict.type.sys_stage_type"
+                      :value="scope.row.checkstatus"
+                    />
+                  </template>
+                </el-table-column>
+                <!--
+                <el-table-column label="鐢宠閲戦" align="center" prop="amountrequested" width="120px" />
                 <el-table-column label="鑱旂郴鐢佃瘽" align="center" prop="phone" width="150px" />
-                <el-table-column label="宸ヤ綔鍗曚綅" align="center" prop="unitname" width="220px" /> 
+                <el-table-column label="宸ヤ綔鍗曚綅" align="center" prop="unitname" width="220px" />
                 -->
                 <el-table-column
                   label="鎿嶄綔"
@@ -236,9 +252,10 @@
                       "
                       size="mini"
                       type="text"
-                      icon="el-icon-delete"
                       @click="handleDelete(scope.row)"
-                      >鍒犻櫎</el-button
+                      ><span class="button-delete"
+                        ><i class="el-icon-delete"></i>鍒犻櫎</span
+                      ></el-button
                     >
                     <!-- v-hasPermi="['project:expretfund:delete']" -->
                     <!-- <el-button
@@ -249,6 +266,25 @@
                       >涓嬭浇</el-button
                                           > -->
                     <!-- v-hasPermi="['project:expretfund:download']" -->
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  fixed="right"
+                  align="center"
+                  width="120"
+                  label="鍔熻兘"
+                >
+                  <template slot-scope="scope">
+                    <el-button size="mini" v-if="scope.row.uploadStates == 1"
+                      >绾夸笅宸叉姤閿�</el-button
+                    >
+                    <el-button
+                      size="mini"
+                      type="success"
+                      v-else-if="scope.row.uploadStates == 0"
+                      @click="Dooffline(scope.$index, scope.row)"
+                      >绾夸笅鎶ラ攢</el-button
+                    >
                   </template>
                 </el-table-column>
               </el-table>
@@ -276,12 +312,12 @@
       >
         <el-row style="text-align: left">
           <el-col :span="5">
-            <el-form-item label="鐢宠鏃ユ湡" prop="createTime">
+            <el-form-item label="鐢宠鏃ユ湡" prop="applyTime">
               <el-date-picker
                 clearable
                 style="width: 100%"
-                v-model="form.createTime"
-                type="date"
+                v-model="form.applyTime"
+                type="date" format="yyyy-MM-dd"
                 value-format="yyyy-MM-dd HH:mm:ss"
                 placeholder="鐢宠鏃ユ湡"
               >
@@ -741,21 +777,23 @@
                   type="text"
                   size="small"
                 >
-                  鍒犻櫎
+                  <span class="button-delete"
+                    ><i class="el-icon-delete"></i>鍒犻櫎</span
+                  >
                 </el-button>
               </template>
             </el-table-column>
           </el-table>
         </el-row>
         <!--
-        <el-row>   
+        <el-row>
           <el-col :span="7">
             <el-form-item label="棰勬敮閲戦" prop="prepaidamount">
               <el-input v-model="form.prepaidamount" placeholder="鐢宠閲戦" />
             </el-form-item>
-          </el-col>          
-        </el-row>       
-        <el-row>          
+          </el-col>
+        </el-row>
+        <el-row>
           <el-col :span="7">
             <el-form-item label="OPO涓績绛惧瓧" prop="opochecker">
               <el-input v-model="form.opochecker" placeholder="opo涓績绛惧瓧" />
@@ -988,7 +1026,7 @@
                   :value="dict.value"></el-option>
               </el-select>
             </el-form-item>
-          </el-col>          
+          </el-col>
         </el-row>
       -->
         <el-row>
@@ -1074,7 +1112,8 @@
   getdownloadYX,
   getdownloadBX,
   addorupdateFund,
-  getdetailsByItemId
+  getdetailsByItemId,
+  validateExpertFee
 } from "@/api/project/fund";
 
 import {
@@ -1116,12 +1155,12 @@
   updateExternalperson,
   exportExternalperson
 } from "@/api/project/externalperson";
-
 import { getUserProfile } from "@/api/system/user";
 import Li_area_select from "@/components/Address";
 import OrgSelecter from "@/views/project/components/orgselect";
 import elementIcons from "../../../components/icons/element-icons";
 import { getToken } from "@/utils/auth";
+import { moneySum, moneyAdd, moneySub, moneyMul, moneyRound } from "@/utils/money";
 
 export default {
   //import寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
@@ -1144,7 +1183,8 @@
     //"sys_financeitemtype",
     //"sys_expensetype",
     "sys_recordstatus",
-    "sys_professionaltitle"
+    "sys_professionaltitle",
+    "sys_stage_type"
   ],
 
   data() {
@@ -1211,7 +1251,7 @@
         username: [
           { required: true, message: "璇疯緭鍏ョ敵璇蜂汉", trigger: "blur" }
         ],
-        createTime: [
+        applyTime: [
           { required: true, message: "璇疯緭鍏ョ敵璇锋棩鏈�", trigger: "blur" }
         ],
         deptmentname: [
@@ -1357,6 +1397,17 @@
       this.daterangeReporttime = [];
       this.resetForm("queryForm");
       this.handleQuery();
+    },
+    Dooffline(a, value) {
+      value.uploadStates = 1;
+      value.notes = "绾夸笅宸叉姤閿�";
+      addorupdateFund(value).then(res => {
+        if (res.code == 200) {
+          this.$modal.msgSuccess("璁板綍鎴愬姛");
+        } else {
+          this.$modal.msgError(res.msg);
+        }
+      });
     },
 
     /** 鏂板鎸夐挳鎿嶄綔 */
@@ -1569,6 +1620,20 @@
           //鏌ユ壘鏄惁瀛樺湪鐧昏瀹屾垚璁板綍
           //鍒ゆ柇鏄惁瀛樺湪涓婃姤璁板綍
           row.recordstatus = 0;
+          var currenttime = new Date();
+          row.applyTime =
+            currenttime.getFullYear() +
+            "-" +
+            (currenttime.getMonth() + 1) +
+            "-" +
+            currenttime.getDate() +
+            " " +
+            currenttime.getHours() +
+            ":" +
+            currenttime.getMinutes() +
+            ":" +
+            currenttime.getSeconds();
+
           updateFund(row).then(response => {
             if (response.code == 200) {
               this.$message({
@@ -1682,7 +1747,7 @@
             }
             this.fundDetails[i] = tempDetail;
             /*
-            //璁$畻涓◣            
+            //璁$畻涓◣
             //if (isNaN(parseFloat(tempDetail.taxedamount)))
             //鑾峰彇鍙傛暟
             this.taxParam.beneficiaryNo = tempDetail.beneficiaryno;
@@ -1761,21 +1826,37 @@
             // });
           }
 
-          addorupdateFund(this.form).then(response => {
-            if (response.code === 200) {
-              this.selectDonotor(this.curCase);
-              this.$modal.msgSuccess("涓撳鍔冲姟璐逛繚瀛樻垚鍔燂紒");
-            } else {
-              this.$modal.msgError("涓撳鍔冲姟璐逛繚瀛樺け璐ワ細" + response.msg);
-            }
-          });
+          // 淇濆瓨鍓嶅厛鍋氫笓瀹跺姵鍔¤垂 9 鏉¤垂鐢ㄦ帶鍒舵牎楠岋紙鍚屼竴妗堜緥绱锛�
+          validateExpertFee(this.form).then(valid => {
+            const errors = (valid && valid.errors) || [];
+            const warnings = (valid && valid.warnings) || [];
 
-          //鍏抽棴绐楀彛
-          this.loading = false;
-          this.dialogOpen = false;
-          // this.getfundList();
-          this.getList();
-          this.selectDonotor(this.curCase);
+            // warnings锛堣鍒� 5銆�6锛変粎鎻愮ず锛屼笉闃绘柇淇濆瓨
+            if (warnings.length > 0) {
+              this.$modal.msgWarning(warnings.join("锛�"));
+            }
+
+            // errors 闃绘柇淇濆瓨锛屼繚鐣欑獥鍙h缁忓姙浜哄厛淇
+            if (errors.length > 0) {
+              this.$modal.msgError(errors.join("锛�"));
+              this.loading = false;
+              return;
+            }
+
+            addorupdateFund(this.form).then(response => {
+              if (response.code === 200) {
+                //鍏抽棴绐楀彛
+                this.loading = false;
+                this.dialogOpen = false;
+                this.selectDonotor(this.curCase);
+                this.$modal.msgSuccess("涓撳鍔冲姟璐逛繚瀛樻垚鍔燂紒");
+                this.getList();
+              } else {
+                this.$modal.msgError("涓撳鍔冲姟璐逛繚瀛樺け璐ワ細" + response.msg);
+                this.loading = false;
+              }
+            });
+          });
         }
       });
     },
@@ -1965,7 +2046,7 @@
         this.standardlevel = response.data.standardlevel;
         if (
           this.defaultperson.createBy == "admin" ||
-          this.defaultperson.createBy == "001" ||
+          this.defaultperson.createBy == "053" ||
           this.defaultperson.createBy == "002"
         ) {
           this.ismanager = true;
@@ -2091,7 +2172,15 @@
       this.curCase = row;
       this.getfundList();
     },
-
+    allgetfundList() {
+      this.loading = true;
+      this.reset();
+      this.fundQueryParam.infoid = null;
+      listFund(this.fundQueryParam).then(response => {
+        this.loading = false;
+        this.donateconsolationfundList = response.rows;
+      });
+    },
     getfundList() {
       this.loading = true;
       this.reset();
@@ -2380,43 +2469,34 @@
     //璁$畻涓◣
     calculateTax() {},
 
-    //璁$畻鎬婚噾棰�
+    //璁$畻鎬婚噾棰濓紙閲戦涓�寰嬭蛋绮剧‘杩愮畻锛�
     sumTotalFee(row) {
-      let allSum = 0;
+      const detailsArr = [];
       if (this.form.applytype != null) {
         for (let i = 0; i < this.fundDetails.length; i++) {
+          const detail = this.fundDetails[i];
           let totalFee = 0;
-          let taxFee = 0;
           if (this.form.applytype == 1 || this.form.applytype == 2) {
-            //璁$畻褰撳墠鎶ラ攢鍐呭璐圭敤鍚堣
-            if (!isNaN(parseFloat(this.fundDetails[i].amount))) {
-              totalFee += parseFloat(this.fundDetails[i].amount);
-              taxFee += parseFloat(this.fundDetails[i].amount);
+            //璁$畻褰撳墠鎶ラ攢鍐呭璐圭敤鍚堣锛氱◣鍓� - 鎵g◣
+            if (!isNaN(parseFloat(detail.amount))) {
+              totalFee = moneyAdd(totalFee, detail.amount);
             }
-            if (!isNaN(parseFloat(this.fundDetails[i].taxamount))) {
-              totalFee -= parseFloat(this.fundDetails[i].taxamount);
-              taxFee -= parseFloat(this.fundDetails[i].taxamount);
+            if (!isNaN(parseFloat(detail.taxamount))) {
+              totalFee = moneySub(totalFee, detail.taxamount);
             }
           } else if (this.form.applytype == 3) {
             if (
-              !isNaN(parseFloat(this.fundDetails[i].price)) &&
-              !isNaN(parseFloat(this.fundDetails[i].quantity))
+              !isNaN(parseFloat(detail.price)) &&
+              !isNaN(parseFloat(detail.quantity))
             ) {
-              totalFee +=
-                parseFloat(this.fundDetails[i].price) *
-                parseFloat(this.fundDetails[i].quantity);
+              totalFee = moneyMul(detail.price, detail.quantity);
             }
           }
-
-          //绋庡墠銆佺◣鍚庨渶瑕佺嫭绔嬪綍鍏�
-          // if (!isNaN(parseFloat(taxFee))) {
-          //   this.fundDetails[i].taxedamount = taxFee.toFixed(2);
-          // }
-
-          allSum += totalFee;
+          detailsArr.push(totalFee);
         }
       }
-      // this.form.amountrequested = allSum.toFixed(2);
+      // 鍚堣浠嶅湪纭鍙e緞鍚庡惎鐢紱鍏堜繚璇佽绠楁湰韬槸绮剧‘鐨�
+      // this.form.amountrequested = moneyRound(moneySum(detailsArr)).toFixed(2);
       // this.$forceUpdate();
     },
 
@@ -2457,22 +2537,35 @@
     //涓撳璐瑰姵鍔℃墦鍗�
     dayin(id) {
       getdownloadLW(id).then(res => {
-        if (res.downloadUrl) {
-          var fileUrl = res;
-          //鑾峰彇褰撳墠缃戝潃
-          var urlBase = process.env.VUE_APP_BASE_API;
-          var curWWWPath = window.document.location.href;
-          var pos = curWWWPath.indexOf(window.document.location.pathname);
-          // 鍒涘缓a鏍囩
-          var aEle = document.createElement("a");
-          aEle.href =
-            curWWWPath.substring(0, pos) + urlBase + fileUrl["downloadUrl"];
-          aEle.click();
-          this.$alert("涓嬭浇鎴愬姛", "鎻愮ず", {
-            confirmButtonText: "纭畾",
-            type: "success"
+        var fileUrl = res;
+        //鑾峰彇褰撳墠缃戝潃
+        var urlBase = process.env.VUE_APP_BASE_API;
+        var curWWWPath = window.document.location.href;
+        var pos = curWWWPath.indexOf(window.document.location.pathname);
+        // 鍒涘缓a鏍囩
+        var aEle = document.createElement("a");
+        aEle.href =
+          curWWWPath.substring(0, pos) + urlBase + fileUrl["downloadUrl"];
+        console.log(aEle.href);
+        // 娣诲姞Authorization澶撮儴
+        fetch(aEle.href, {
+          headers: this.headers
+        })
+          .then(response => {
+            // 灏嗘枃浠朵笅杞介摼鎺ヤ綔涓篵lob瀵硅薄杩涜涓嬭浇
+            return response.blob();
+          })
+          .then(blob => {
+            const url = window.URL.createObjectURL(new Blob([blob]));
+            console.log(url);
+            const link = document.createElement("a");
+            link.href = url;
+            const name = fileUrl["downloadName"];
+            link.setAttribute("download", name); // 鏇挎崲file.pdf涓哄疄闄呯殑鏂囦欢鍚�
+            document.body.appendChild(link);
+            link.click();
+            link.parentNode.removeChild(link);
           });
-        }
       });
     },
 
@@ -2530,10 +2623,22 @@
       } else {
         console.log(response.msg);
       }
+    },
+    rowClassName({ row, column, rowIndex, columnIndex }) {
+      if (row.recordstatus == -1 && row.backflowlevel != null) {
+        return "error-row";
+      }
+      return "";
     }
   }
 };
 </script>
-<style scoped>
+<style lang="scss" scoped>
 /* @import url(); 寮曞叆鍏叡css绫� */
+.button-delete {
+  color: rgb(236, 69, 69);
+}
+::v-deep.el-table .error-row {
+  background: #fcebeb;
+}
 </style>

--
Gitblit v1.9.3