From c75027743ea7c3ecc2d0885f01d11d2ad78679a3 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期五, 23 十月 2026 14:23:26 +0800
Subject: [PATCH] Merge branch 'yxh' of http://116.62.18.175:6699/r/~yxh/opo-web

---
 src/views/project/fund/applyDetail/index.vue | 2002 +++++++++++++++++++++++++++-------------------------------
 1 files changed, 934 insertions(+), 1,068 deletions(-)

diff --git a/src/views/project/fund/applyDetail/index.vue b/src/views/project/fund/applyDetail/index.vue
index aa29237..b4b6494 100644
--- a/src/views/project/fund/applyDetail/index.vue
+++ b/src/views/project/fund/applyDetail/index.vue
@@ -7,45 +7,22 @@
         <el-row>
           <el-col :span="5">
             <el-form-item label="鎶ラ攢鍗曞彿" prop="bh">
-              <el-input
-                v-model="form.bh"
-                :disabled="true"
-                placeholder="鎶ラ攢鍗曞彿"
-                clearable
-              />
+              <el-input v-model="form.bh" :disabled="true" placeholder="鎶ラ攢鍗曞彿" clearable />
             </el-form-item>
           </el-col>
           <el-col :span="5">
             <el-form-item label="鐢宠鏃ユ湡" prop="applyTime">
-              <el-date-picker
-                clearable
-                :disabled="true"
-                style="width: 100%"
-                v-model="form.applyTime"
-                type="date"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                placeholder="鏃�   鏈�"
-              >
+              <el-date-picker clearable :disabled="true" style="width: 100%" v-model="form.applyTime" 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">
             <el-form-item label="缁忓姙浜�" prop="username">
-              <el-select
-                v-model="form.username"
-                placeholder="鐢宠浜�"
-                clearable
-                filterable
-                allow-create
-                style="width: 100%"
-                @change="getUserAccount"
-              >
-                <el-option
-                  v-for="dict in userlist"
-                  :key="dict.index"
-                  :label="dict.nickname"
-                  :value="dict.nickname"
-                ></el-option>
+              <el-select v-model="form.username" placeholder="鐢宠浜�" clearable filterable allow-create style="width: 100%"
+                @change="getUserAccount">
+                <el-option v-for="dict in userlist" :key="dict.index" :label="dict.nickname"
+                  :value="dict.nickname"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -72,42 +49,26 @@
           </el-col>
           <el-col :span="5" v-if="ismanager == true">
             <el-form-item label="鐢宠閲戦" prop="pretaxcost">
-              <el-input
-                v-model="form.pretaxcost"
-                placeholder="绋庡墠閲戦鍚堣"
-                :disabled="true"
-              />
+              <el-input v-model="form.pretaxcost" placeholder="绋庡墠閲戦鍚堣" :disabled="true" />
             </el-form-item>
           </el-col>
           <el-col :span="5">
             <el-form-item label="鎵�灞炵粍鍒�" prop="deptmentname">
-              <el-input
-                v-model="form.deptmentname"
-                placeholder="璇疯緭鍏ユ墍灞炵粍鍒�"
-                clearable
-              />
+              <el-input v-model="form.deptmentname" placeholder="璇疯緭鍏ユ墍灞炵粍鍒�" clearable />
             </el-form-item>
           </el-col>
           <el-col :span="5">
             <el-form-item label="缁勯暱" prop="managername">
-              <el-input
-                v-model="form.managername"
-                placeholder="璇疯緭鍏ョ粍闀�"
-                clearable
-              />
+              <el-input v-model="form.managername" placeholder="璇疯緭鍏ョ粍闀�" clearable />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row style="text-align: left">
           <el-col :span="5">
             <el-form-item label="鎹愮尞妗堜緥" prop="name">
-              <el-input
-                :disabled="true"
-                v-model="form.donorname"
-                placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
-              />
+              <el-input :disabled="true" v-model="form.donorname" placeholder="璇疯緭鍏ユ崘鐚�呭鍚�" />
             </el-form-item>
-          </el-col>
+          </el-col>          
           <el-col :span="10">
             <el-form-item label="鐢宠璇存槑" prop="remark">
               <el-input v-model="form.remark" placeholder="鐢宠璇存槑" />
@@ -127,38 +88,23 @@
         <el-row v-if="jurisdiction">
           <!-- <el-alert title="褰撳墠涓烘煡鐪嬬姸鎬侊紝涓嶆敮鎸佷慨鏀瑰瓨鍌ㄣ��" type="warning">
           </el-alert> -->
-          <el-alert
-            title="褰撳墠涓烘煡鐪嬬姸鎬侊紝涓嶆敮鎸佷慨鏀瑰瓨鍌ㄣ��"
-            type="warning"
-            show-icon
-          >
+          <el-alert title="褰撳墠涓烘煡鐪嬬姸鎬侊紝涓嶆敮鎸佷慨鏀瑰瓨鍌ㄣ��" type="warning" show-icon>
           </el-alert>
         </el-row>
         <el-row>
           <el-col :span="3" v-if="businessType == '1'">
             <div style="margin-bottom: 15px;">
-              <el-button
-                type="primary"
-                icon="el-icon-download"
-                size="small"
-                @click.native.prevent="importFeeItems"
-              >
+              <el-button type="primary" icon="el-icon-download" size="small" @click.native.prevent="importFeeItems">
                 鎵归噺瀵煎叆鏈嶅姟椤圭洰
               </el-button>
             </div>
           </el-col>
           <el-col :span="3" v-if="businessType == 2">
             <div style="margin-bottom: 15px;">
-              <el-button
-                type="primary"
-                icon="el-icon-download"
-                size="small"
-                @click="Batchentry"
-                >鎵归噺褰曞叆涓撳</el-button
-              >
+              <el-button type="primary" icon="el-icon-download" size="small" @click="Batchentry">鎵归噺褰曞叆涓撳</el-button>
             </div>
           </el-col>
-          <el-col
+          <!-- <el-col
             :span="3"
             v-if="
               userprofile.nickName == '闄堟厱鍗�' &&
@@ -174,349 +120,158 @@
                 >璁$畻涓◣</el-button
               >
             </div>
-          </el-col>
+          </el-col> -->
         </el-row>
         <el-row>
-          <el-table
-            :data="rbDetails"
-            v-loading="loading"
-            max-height="800"
-            border
-            highlight-current-row
-          >
-            <el-table-column
-              prop="orderno"
-              align="center"
-              label="搴忓彿"
-              width="88"
-            >
+          <el-table :data="rbDetails" v-loading="loading" max-height="800" border highlight-current-row>
+            <el-table-column prop="orderno" align="center" label="搴忓彿" width="88">
               <template slot-scope="scope">
                 <el-input v-model="scope.row.orderno" placeholder="搴忓彿" />
               </template>
             </el-table-column>
-            <el-table-column
-              prop="applytype"
-              align="center"
-              label="鏈嶅姟绫诲瀷"
-              width="200"
-            >
+            <el-table-column prop="applytype" align="center" label="鏈嶅姟绫诲瀷" width="200">
               <template slot-scope="scope">
-                <el-select
-                  v-model="scope.row.applytype"
-                  placeholder="璇烽�夋嫨鏈嶅姟绫诲瀷"
-                  @change="verifyFeeItemType(scope.row)"
-                >
-                  <el-option
-                    v-for="dict in rowfeeItemTypes"
-                    :key="dict.index"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
+                <el-select v-model="scope.row.applytype" placeholder="璇烽�夋嫨鏈嶅姟绫诲瀷" @change="verifyFeeItemType(scope.row)">
+                  <el-option v-for="dict in rowfeeItemTypes" :key="dict.index" :label="dict.label"
+                    :value="dict.value"></el-option>
                 </el-select>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="itemid"
-              align="center"
-              label="鏈嶅姟椤圭洰"
-              width="260"
-            >
+            <el-table-column prop="itemid" align="center" label="鏈嶅姟椤圭洰" width="260">
               <template slot-scope="scope">
-                <el-select
-                  v-model="scope.row.itemid"
-                  placeholder="璇烽�夋嫨鏈嶅姟椤圭洰"
-                  filterable
-                  @change="verifyFeeItem(scope.row)"
-                  :filter-method="val => searchItemType(val, scope)"
-                >
-                  <el-option
-                    v-for="dict in scope.row.itemlist"
-                    :key="dict.index"
-                    :label="dict.itemName"
-                    :value="dict.id"
-                  ></el-option>
+                <el-select v-model="scope.row.itemid" placeholder="璇烽�夋嫨鏈嶅姟椤圭洰" filterable
+                  @change="verifyFeeItem(scope.row)" :filter-method="val => searchItemType(val, scope)">
+                  <el-option v-for="dict in scope.row.itemlist" :key="dict.index" :label="dict.itemName"
+                    :value="dict.id"></el-option>
                 </el-select>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="servicesscope"
-              align="center"
-              label="鏈嶅姟璇存槑"
-              v-if="businessType == '1'"
-              width="180"
-            >
+            <el-table-column prop="servicesscope" align="center" label="鏈嶅姟璇存槑" v-if="businessType == '1'" width="180">
               <template slot-scope="scope">
-                <el-select
-                  v-model="scope.row.servicesscope"
-                  placeholder="鏈嶅姟璇存槑"
-                  clearable
-                  allow-create
-                  @change="verifyFeeRemark(scope.row)"
-                >
-                  <el-option
-                    v-for="dict in scope.row.rowfeeblocks"
-                    :key="dict.servicesscope"
-                    :label="dict.remark"
-                    :value="dict.servicesscope"
-                  ></el-option>
+                <el-select v-model="scope.row.servicesscope" placeholder="鏈嶅姟璇存槑" clearable allow-create
+                  @change="verifyFeeRemark(scope.row)">
+                  <el-option v-for="dict in scope.row.rowfeeblocks" :key="dict.servicesscope" :label="dict.remark"
+                    :value="dict.servicesscope"></el-option>
                 </el-select>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="price"
-              align="center"
-              label="鍗曚环"
-              width="120"
-              v-if="businessType == 4"
-            >
+            <el-table-column prop="price" align="center" label="鍗曚环" width="120" v-if="businessType == 4">
               <template slot-scope="scope">
-                <el-input
-                  v-model="scope.row.price"
-                  placeholder="鍗曚环"
-                  @blur="
-                    val => {
-                      sumTotalFee(scope.row);
-                    }
-                  "
-                />
+                <el-input v-model="scope.row.price" placeholder="鍗曚环" @blur="
+                  val => {
+                    sumTotalFee(scope.row);
+                  }
+                " />
               </template>
             </el-table-column>
-            <el-table-column
-              prop="quantity"
-              align="center"
-              label="鏁伴噺"
-              width="120"
-              v-if="businessType == 4"
-            >
+            <el-table-column prop="quantity" align="center" label="鏁伴噺" width="120" v-if="businessType == 4">
               <template slot-scope="scope">
-                <el-input
-                  v-model="scope.row.quantity"
-                  placeholder="鏁伴噺"
-                  @blur="
-                    val => {
-                      sumTotalFee(scope.row);
-                    }
-                  "
-                />
+                <el-input v-model="scope.row.quantity" placeholder="鏁伴噺" @blur="
+                  val => {
+                    sumTotalFee(scope.row);
+                  }
+                " />
               </template>
             </el-table-column>
-            <el-table-column
-              prop="amount"
-              align="center"
-              :label="amountlabel"
-              width="120"
-            >
+            <el-table-column prop="amount" align="center" :label="amountlabel" width="120">
               <template slot-scope="scope">
                 <el-input v-model="scope.row.amount" placeholder="閲戦" />
               </template>
             </el-table-column>
-            <el-table-column
-              prop="taxamount"
-              align="center"
-              label="鎵g◣閲戦"
-              width="120"
-              v-if="
-                ismanager == true &&
-                  (businessType == '1' || businessType == '2')
-              "
-            >
+            <el-table-column prop="taxamount" align="center" label="鎵g◣閲戦" width="120" v-if="
+              ismanager == true &&
+              (businessType == '1' || businessType == '2')
+            ">
               <template slot-scope="scope">
-                <el-input
-                  v-model="scope.row.taxamount"
-                  placeholder="鎵g◣閲戦"
-                />
+                <el-input v-model="scope.row.taxamount" placeholder="鎵g◣閲戦" />
               </template>
             </el-table-column>
-            <el-table-column
-              prop="taxedamount"
-              align="center"
-              label="绋庡悗閲戦"
-              width="120"
-              v-if="
-                ismanager == true &&
-                  (businessType == '1' || businessType == '2')
-              "
-            >
+            <el-table-column prop="taxedamount" align="center" label="绋庡悗閲戦" width="120"
+              v-if="businessType == '1' || businessType == '2'">
               <template slot-scope="scope">
-                <el-input
-                  v-model="scope.row.taxedamount"
-                  placeholder="绋庡悗閲戦"
-                />
+                <el-input v-model="scope.row.taxedamount" placeholder="绋庡悗閲戦" />
               </template>
             </el-table-column>
-            <el-table-column
-              prop="beneficiaryname"
-              column-key="sdad"
-              align="center"
-              :label="beneficiarylabel"
-              width="200"
-            >
+            <el-table-column prop="beneficiaryname" column-key="sdad" align="center" :label="beneficiarylabel"
+              width="200">
               <template slot-scope="scope">
-                <el-button
-                  type="primary"
-                  plain
-                  @click="showSelectionDialog(scope, 'account')"
-                  >{{
-                    scope.row.beneficiaryname
-                      ? scope.row.beneficiaryname
-                      : "鐐瑰嚮閫夋嫨"
-                  }}</el-button
-                >
+                <el-button type="primary" plain @click="showSelectionDialog(scope, 'account')">{{
+                  scope.row.beneficiaryname
+                    ? scope.row.beneficiaryname
+                    : "鐐瑰嚮閫夋嫨"
+                }}</el-button>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="unitno"
-              align="center"
-              label="涓撳鎵�鍦ㄥ崟浣�"
-              width="250"
-              v-if="businessType == '1' || businessType == '2'"
-            >
+            <el-table-column prop="unitno" align="center" label="涓撳鎵�鍦ㄥ崟浣�" width="250"
+              v-if="businessType == '1' || businessType == '2'">
               <template slot-scope="scope">
-                <el-button
-                  type="primary"
-                  plain
-                  @click="showSelectionDialog(scope, 'workunit')"
-                  >{{
-                    scope.row.unitname ? scope.row.unitname : "鐐瑰嚮閫夋嫨"
-                  }}</el-button
-                >
+                <el-button type="primary" plain @click="showSelectionDialog(scope, 'workunit')">{{
+                  scope.row.unitname ? scope.row.unitname : "鐐瑰嚮閫夋嫨"
+                }}</el-button>
               </template>
             </el-table-column>
 
-            <el-table-column
-              prop="title"
-              align="center"
-              label="鑱岀О"
-              width="120"
-              v-if="businessType == '1' || businessType == '2'"
-            >
+            <el-table-column prop="title" align="center" label="鑱岀О" width="120"
+              v-if="businessType == '1' || businessType == '2'">
               <template slot-scope="scope">
                 <el-input v-model="scope.row.title" placeholder="鑱岀О" />
               </template>
             </el-table-column>
-            <el-table-column
-              prop="idcardno"
-              align="center"
-              label="韬唤璇佸彿"
-              width="200"
-              v-if="businessType == '1' || businessType == '2'"
-            >
+            <el-table-column prop="idcardno" align="center" label="韬唤璇佸彿" width="200"
+              v-if="businessType == '1' || businessType == '2'">
               <template slot-scope="scope">
                 <el-form-item label-width="0">
-                  <el-input
-                    :disabled="userprofile.nickName != '闄堟厱鍗�'"
-                    v-model.number="scope.row.idcardno"
-                    @input="tableParValueChange1(scope.row)"
-                    placeholder="韬唤璇佸彿"
-                  />
+                  <el-input :disabled="userprofile.nickName != '闄堟厱鍗�' || scope.row.isunit == 1"
+                    :placeholder="scope.row.isunit == 1 ? '鍗曚綅鏃犻渶濉啓' : '韬唤璇佸彿'"
+                    v-model.number="scope.row.idcardno" @input="tableParValueChange1(scope.row)" />
                 </el-form-item>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="depositbank"
-              align="center"
-              label="寮�鎴烽摱琛�"
-              width="200"
-            >
+            <el-table-column prop="depositbank" align="center" label="寮�鎴烽摱琛�" width="200">
               <template slot-scope="scope">
-                <el-input
-                  :disabled="userprofile.nickName != '闄堟厱鍗�'"
-                  v-model="scope.row.depositbank"
-                  placeholder="寮�鎴烽摱琛�"
-                />
+                <el-input :disabled="userprofile.nickName != '闄堟厱鍗�'" v-model="scope.row.depositbank"
+                  placeholder="寮�鎴烽摱琛�" />
               </template>
             </el-table-column>
-            <el-table-column
-              prop="bankcardno"
-              align="center"
-              label="閾惰甯愬彿"
-              width="210"
-            >
+            <el-table-column prop="bankcardno" align="center" label="閾惰甯愬彿" width="210">
               <template slot-scope="scope">
-                <el-input
-                  :disabled="userprofile.nickName != '闄堟厱鍗�'"
-                  v-model="scope.row.bankcardno"
-                  placeholder="閾惰甯愬彿"
-                />
+                <el-input :disabled="userprofile.nickName != '闄堟厱鍗�'" v-model="scope.row.bankcardno" placeholder="閾惰甯愬彿" />
               </template>
             </el-table-column>
-            <el-table-column
-              prop="itemdescrisca"
-              align="center"
-              width="330"
-              label="椤圭洰璇存槑"
-            >
+            <el-table-column prop="itemdescrisca" align="center" width="330" label="椤圭洰璇存槑">
               <template slot-scope="scope">
-                <el-input
-                  type="textarea"
-                  :rows="2"
-                  v-model="scope.row.itemdescribe"
-                  placeholder="椤圭洰璇存槑"
-                />
+                <el-input type="textarea" :rows="2" v-model="scope.row.itemdescribe" placeholder="椤圭洰璇存槑" />
               </template>
             </el-table-column>
-            <el-table-column
-              prop="remark"
-              align="center"
-              width="330"
-              label="澶囨敞"
-              v-show="ismanager == true"
-            >
+            <el-table-column prop="remark" align="center" width="330" label="澶囨敞" v-show="ismanager == true">
               <template slot-scope="scope">
-                <el-input
-                  type="textarea"
-                  :rows="2"
-                  v-model="scope.row.remark"
-                  placeholder="澶囨敞"
-                />
+                <el-input type="textarea" :rows="2" v-model="scope.row.remark" placeholder="澶囨敞" />
               </template>
             </el-table-column>
-            <el-table-column
-              fixed="right"
-              align="center"
-              label="鎿嶄綔"
-              width="180"
-            >
+            <el-table-column fixed="right" align="center" label="鎿嶄綔" width="180">
               <template slot-scope="scope">
-                <el-button
-                  type="text"
-                  size="mini"
-                  @click="addRow(scope.$index)"
-                  v-if="
+                <el-button type="text" size="mini" @click="addRow(scope.$index)" v-if="
+                  operationType == 'add' ||
+                  operationType == 'update' ||
+                  operationType == 'check'
+                ">鏂板</el-button>
+                <el-button @click.native.prevent="
+                  deleteRows(scope.row, scope.$index, rbDetails)
+                  " type="text" size="small" v-if="
                     operationType == 'add' ||
-                      operationType == 'update' ||
-                      operationType == 'check'
-                  "
-                  >鏂板</el-button
-                >
-                <el-button
-                  @click.native.prevent="
-                    deleteRows(scope.row, scope.$index, rbDetails)
-                  "
-                  type="text"
-                  size="small"
-                  v-if="
-                    operationType == 'add' ||
-                      operationType == 'update' ||
-                      operationType == 'check'
-                  "
-                >
+                    operationType == 'update' ||
+                    operationType == 'check'
+                  ">
                   鍒犻櫎
                 </el-button>
-                <el-button
-                  @click.native.prevent="
-                    Filepopup(scope.$index, rbDetails, scope.row)
-                  "
-                  type="text"
-                  size="small"
-                  v-if="
+                <el-button @click.native.prevent="
+                  Filepopup(scope.$index, rbDetails, scope.row)
+                  " type="text" size="small" v-if="
                     businessType == 2 ||
-                      businessType == 3 ||
-                      businessType == 4 ||
-                      businessType == 1
-                  "
-                  >绁ㄦ嵁</el-button
-                >
+                    businessType == 3 ||
+                    businessType == 4 ||
+                    businessType == 1
+                  ">绁ㄦ嵁</el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -524,55 +279,20 @@
 
         <el-row>
           <el-col :span="12">
-            <el-form-item
-              label="璐圭敤鐢宠闄勪欢"
-              align="left"
-              prop="annexbankcard"
-              v-if="businessType == 0"
-            >
-              <el-upload
-                size="mini"
-                class="upload-demo"
-                :action="uploadFileUrl"
-                :file-list="fileListto"
-                :show-file-list="false"
-                multiple
-                drag
-                :headers="headers"
-                :on-success="
-                  (response, file, fileList) =>
-                    uploadSccess(response, file, fileList)
-                "
-                :on-preview="downFile"
-                :disabled="operationType == 'detail'"
-                :on-error="handleUploadError"
-                :on-remove="remove"
-                accept="image/*,.pdf"
-              >
+            <el-form-item label="璐圭敤鐢宠闄勪欢" align="left" prop="annexbankcard" v-if="businessType == 0">
+              <el-upload size="mini" class="upload-demo" :action="uploadFileUrl" :file-list="fileListto"
+                :show-file-list="false" multiple drag :headers="headers" :on-success="(response, file, fileList) =>
+                  uploadSccess(response, file, fileList)
+                  " :on-preview="downFile" :disabled="operationType == 'detail'" :on-error="handleUploadError"
+                :on-remove="remove" accept="image/*,.pdf">
                 <i class="el-icon-upload"></i>
                 <div class="el-upload__text">
                   灏嗙エ鎹嫋鍒版澶勶紝鎴�
-                  <em
-                    ><el-button
-                      :disabled="operationType == 'detail'"
-                      size="small"
-                      type="primary"
-                      >鐐瑰嚮涓婁紶</el-button
-                    ></em
-                  >
+                  <em><el-button :disabled="operationType == 'detail'" size="small" type="primary">鐐瑰嚮涓婁紶</el-button></em>
                 </div>
               </el-upload>
-              <el-table
-                :data="fileListto"
-                @row-click="downFile"
-                style="width: 100%"
-                height="400"
-              >
-                <el-table-column
-                  prop="name"
-                  :show-overflow-tooltip="true"
-                  label="鍚嶇О"
-                >
+              <el-table :data="fileListto" @row-click="downFile" style="width: 100%" height="400">
+                <el-table-column prop="name" :show-overflow-tooltip="true" label="鍚嶇О">
                   <template slot-scope="scope">
                     <i style="color:#409EFF" class=" el-icon-s-order" />{{
                       scope.row.name
@@ -580,80 +300,44 @@
                   </template>
                 </el-table-column>
 
-                <el-table-column
-                  prop="name"
-                  width="180"
-                  :show-overflow-tooltip="true"
-                  label="鍔熻兘"
-                >
+                <el-table-column prop="name" width="180" :show-overflow-tooltip="true" label="鍔熻兘">
                   <template slot-scope="scope">
-                    <el-button
-                      type="danger"
-                      size="mini"
-                      @click.native.prevent.stop="deletedowfile(scope.row)"
-                      >鍒犻櫎</el-button
-                    >
-                    <el-button
-                      type="primary"
-                      size="mini"
-                      @click.native.prevent.stop="moveupdowfile(scope.row)"
-                      >涓婄Щ</el-button
-                    >
+                    <el-button type="danger" size="mini"
+                      @click.native.prevent.stop="deletedowfile(scope.row)">鍒犻櫎</el-button>
+                    <el-button type="primary" size="mini"
+                      @click.native.prevent.stop="moveupdowfile(scope.row)">涓婄Щ</el-button>
                   </template>
                 </el-table-column>
               </el-table>
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row
-          v-if="
-            operationType == 'detail' ||
-              operationType == 'check' ||
-              operationType == 'update'
-          "
-        >
+        <el-row v-if="
+          operationType == 'detail' ||
+          operationType == 'check' ||
+          operationType == 'update'
+        ">
           <el-table :data="fundflowList" border>
-            <el-table-column
-              label="瀹℃牳鏃ユ湡"
-              align="center"
-              width="160"
-              prop="createTime"
-            />
-            <el-table-column
-              label="瀹℃牳浜�"
-              align="center"
-              width="120"
-              prop="checkusername"
-            />
-            <el-table-column
-              label="瀹℃牳缁撴灉"
-              align="center"
-              width="200"
-              prop="flowconclusion"
-            >
+            <el-table-column label="瀹℃牳鏃ユ湡" align="center" width="160" prop="createTime" />
+            <el-table-column label="瀹℃牳浜�" align="center" width="120" prop="checkusername" />
+            <el-table-column label="瀹℃牳缁撴灉" align="center" width="200" prop="flowconclusion">
               <template slot-scope="scope">
                 <span v-if="scope.row.flowconclusion == 1">閫氳繃</span>
                 <span v-if="scope.row.flowconclusion == 2">涓嶉�氳繃</span>
               </template>
             </el-table-column>
-            <el-table-column
-              label="瀹℃牳澶囨敞"
-              align="center"
-              prop="flowcontent"
-            />
+            <el-table-column label="瀹℃牳澶囨敞" align="center" prop="flowcontent" />
           </el-table>
         </el-row>
 
-        <el-row
-          style="margin-top: 25px; margin-bottom: 5px"
-          v-if="operationType == 'check' && userprofile.nickName == '闄堟厱鍗�'"
-        >
+        <el-row style="margin-top: 25px; margin-bottom: 5px"
+          v-if="operationType == 'check' && userprofile.nickName == '闄堟厱鍗�'">
           <el-col :span="12">
-            <el-form-item label="棰勫鏉愭枡" prop="infoid">
+            <el-form-item label="棰勫鐘舵��" prop="infoid">
               <el-radio-group v-model="form.checkstatus" align="left">
-                <el-radio :label="1">寰呯敵璇锋潗鏂�</el-radio>
-                <el-radio :label="2">瀹℃牳閫氳繃绛夊緟閭瘎绾歌川鏉愭枡</el-radio>
-                <el-radio :label="3">宸叉敹鍒版姤閿�鏉愭枡</el-radio>
+                <el-radio :label="1">寰呭鏍�</el-radio>
+                <el-radio :label="2">棰勫閫氳繃绛夊緟绾歌川鏉愭枡</el-radio>
+                <el-radio :label="3">宸叉敹鍒扮焊璐ㄦ潗鏂�</el-radio>
               </el-radio-group>
             </el-form-item>
           </el-col>
@@ -667,10 +351,7 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row
-          style="margin-top: 5px; margin-bottom: 5px"
-          v-if="operationType == 'check'"
-        >
+        <el-row style="margin-top: 5px; margin-bottom: 5px" v-if="operationType == 'check'">
           <el-col :span="20">
             <el-form-item label="瀹℃牳缁撴灉" align="left">
               <el-radio-group v-model="checkObj.flowlevelone" align="left">
@@ -689,103 +370,46 @@
         </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button
-          type="primary"
-          @click="submitForm"
-          v-if="
-            operationType == 'add' ||
-              operationType == 'update' ||
-              ismanager == true
-          "
-          >淇濆瓨</el-button
-        >
-        <el-button
-          type="success"
-          @click="handleup"
-          v-if="operationType == 'add' || operationType == 'update'"
-          >涓婃姤</el-button
-        >
-        <el-button
-          type="primary"
-          @click="checksubmit"
-          v-if="operationType == 'check'"
-          >鎻愪氦瀹℃牳</el-button
-        >
+        <el-button type="primary" @click="submitForm" v-if="
+          operationType == 'add' ||
+          operationType == 'update' ||
+          ismanager == true
+        ">淇濆瓨</el-button>
+        <el-button type="success" @click="handleup"
+          v-if="operationType == 'add' || operationType == 'update'">涓婃姤</el-button>
+        <el-button type="primary" @click="checksubmit" v-if="operationType == 'check'">鎻愪氦瀹℃牳</el-button>
         <el-button @click="cancel">鍏� 闂�</el-button>
       </div>
     </div>
 
-    <el-dialog
-      :visible.sync="showselectiondialog"
-      :close-on-click-modal="false"
-      :title="'璐︽埛淇℃伅/鍗曚綅淇℃伅閫夋嫨'"
-      width="650px"
-      style="text-align: center"
-      v-loading="loading"
-    >
-      <el-form
-        ref="accountselectform"
-        :rules="dialogrules"
-        :model="accountselectform"
-        label-width="120px"
-      >
+    <el-dialog :visible.sync="showselectiondialog" :close-on-click-modal="false" :title="'璐︽埛淇℃伅/鍗曚綅淇℃伅閫夋嫨'" width="650px"
+      style="text-align: center" v-loading="loading">
+      <el-form ref="accountselectform" :rules="dialogrules" :model="accountselectform" label-width="120px">
         <el-row v-if="selectionType == 'workunit'">
           <el-col :span="24">
-            <el-form-item
-              label="鍗曚綅鍚嶇О"
-              prop="expertunitname"
-              label-width="120px"
-            >
-              <el-select
-                v-model="accountselectform.expertunitname"
-                placeholder="鍗曚綅鍚嶇О"
-                clearable
-                filterable
-                allow-create
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="(spec, index) in unitList"
-                  :key="index"
-                  :label="spec.organizationname"
-                  :value="spec.organizationname"
-                ></el-option>
+            <el-form-item label="鍗曚綅鍚嶇О" prop="expertunitname" label-width="120px">
+              <el-select v-model="accountselectform.expertunitname" placeholder="鍗曚綅鍚嶇О" clearable filterable allow-create
+                style="width: 100%">
+                <el-option v-for="(spec, index) in unitList" :key="index" :label="spec.organizationname"
+                  :value="spec.organizationname"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row v-if="selectionType == 'account'">
           <el-col>
-            <el-form-item
-              label="璐︽埛鏉ユ簮"
-              prop="accountfrom"
-              class="left-align"
-            >
+            <el-form-item label="璐︽埛鏉ユ簮" prop="accountfrom" class="left-align">
               <el-radio-group v-model="accountfrom" style="margin-bottom: 0">
                 <el-radio label="1">浠庤处鎴峰簱</el-radio>
-                <el-radio label="2"
-                  >鏂板璐︽埛锛堟柊澧炰笓瀹惰处鎴峰悗闇�瑕佸鏍稿惎鐢ㄦ墠鑳戒娇鐢級</el-radio
-                >
+                <el-radio label="2">鏂板璐︽埛锛堟柊澧炰笓瀹惰处鎴峰悗闇�瑕佸鏍稿惎鐢ㄦ墠鑳戒娇鐢級</el-radio>
               </el-radio-group>
             </el-form-item>
           </el-col>
           <el-col :span="24" v-if="accountfrom == '1'">
             <el-form-item label="璐︽埛鍚嶇О" prop="accountname">
-              <el-select
-                filterable
-                allow-create
-                ref="accountname"
-                default-first-option
-                v-model="accountselectform.accountname"
-                placeholder="璇烽�夋嫨"
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="item in accountlist"
-                  :key="item.id"
-                  :label="item.userid"
-                  :value="item.id"
-                >
+              <el-select filterable allow-create ref="accountname" default-first-option
+                v-model="accountselectform.accountname" placeholder="璇烽�夋嫨" style="width: 100%">
+                <el-option v-for="item in accountlist" :key="item.id" :label="item.userid" :value="item.id">
                 </el-option>
               </el-select>
             </el-form-item>
@@ -794,11 +418,8 @@
         <el-row v-if="selectionType == 'account' && accountfrom == '2'">
           <el-col :span="24">
             <el-form-item label="鏂板绫诲瀷" prop="usertype" class="left-align">
-              <el-radio-group
-                v-model="accountselectform.usertype"
-                style="margin-bottom: 0"
-                @change="userTypeChange(accountselectform.usertype)"
-              >
+              <el-radio-group v-model="accountselectform.usertype" style="margin-bottom: 0"
+                @change="userTypeChange(accountselectform.usertype)">
                 <el-radio label="expert">涓撳璐︽埛</el-radio>
                 <el-radio label="org">鍗曚綅璐︽埛</el-radio>
                 <el-radio label="donor">鎹愮尞鑰呬翰灞炶处鎴�</el-radio>
@@ -806,163 +427,108 @@
             </el-form-item>
           </el-col>
         </el-row>
+
         <el-row v-if="selectionType == 'account' && accountfrom == '2'">
           <el-col :span="24">
             <el-form-item label="璐︽埛鍚嶇О" prop="username">
-              <el-input
-                v-model="accountselectform.username"
-                placeholder="璇疯緭鍏ュ崟浣嶅悕绉帮紝鎴栦笓瀹跺鍚嶏紝鎴栧叾浠栬处鍙�"
-              />
+              <el-input v-model="accountselectform.username" placeholder="璇疯緭鍏ュ崟浣嶅悕绉帮紝鎴栦笓瀹跺鍚嶏紝鎴栧叾浠栬处鍙�" />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row
-          v-if="
-            selectionType == 'account' &&
-              accountfrom == '2' &&
-              accountselectform.usertype != 'org'
-          "
-        >
+        <el-row v-if="
+          selectionType == 'account' &&
+          accountfrom == '2' &&
+          accountselectform.usertype == 'org'
+        ">
+          <el-col :span="24">
+            <el-form-item label="绋庡彿" prop="unitTaxNo">
+              <el-input v-model="accountselectform.unitTaxNo" placeholder="璇疯緭鍏ョ◣鍙�" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row v-if="
+          selectionType == 'account' &&
+          accountfrom == '2' &&
+          accountselectform.usertype != 'org'
+        ">
           <el-col :span="12">
             <el-form-item label="韬唤璇佸彿" prop="idcardno">
-              <el-input
-                v-model="accountselectform.idcardno"
-                placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�"
-              />
+              <el-input v-model="accountselectform.idcardno" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" @blur="handleIdCardBlur" />
             </el-form-item>
           </el-col>
           <el-col :span="12" v-if="accountselectform.usertype == 'expert'">
             <el-form-item label="鑱岀О" prop="title">
-              <el-select
-                v-model="accountselectform.title"
-                placeholder="璇烽�夋嫨浜哄憳鑱岀О"
-              >
-                <el-option
-                  v-for="dict in dict.type.sys_professionaltitle"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.label"
-                ></el-option>
+              <el-select v-model="accountselectform.title" placeholder="璇烽�夋嫨浜哄憳鑱岀О">
+                <el-option v-for="dict in dict.type.sys_professionaltitle" :key="dict.value" :label="dict.label"
+                  :value="dict.label"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row
-          v-if="
-            selectionType == 'account' &&
-              accountfrom == '2' &&
-              accountselectform.usertype == 'expert'
-          "
-        >
+        <el-row v-if="
+          selectionType == 'account' &&
+          accountfrom == '2' &&
+          accountselectform.usertype == 'expert'
+        ">
           <el-col>
             <el-form-item label="鎵�鍦ㄥ崟浣�" prop="unitno">
-              <el-select
-                v-model="accountselectform.unitno"
-                placeholder="鍗曚綅鍚嶇О"
-                clearable
-                filterable
-                allow-create
-                style="width: 100%"
-              >
-                <el-option
-                  v-for="(spec, index) in unitList"
-                  :key="index"
-                  :label="spec.organizationname"
-                  :value="spec.organizationid"
-                ></el-option>
+              <el-select v-model="accountselectform.unitno" placeholder="鍗曚綅鍚嶇О" clearable filterable allow-create
+                style="width: 100%">
+                <el-option v-for="(spec, index) in unitList" :key="index" :label="spec.organizationname"
+                  :value="spec.organizationid"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
           <el-col>
             <el-form-item label="鍗曚綅宸ュ彿" prop="personnelunitno">
-              <el-input
-                v-model="accountselectform.personnelunitno"
-                placeholder="璇疯緭鍏ユ墍鍦ㄥ崟浣嶇殑宸ュ彿"
-              />
+              <el-input v-model="accountselectform.personnelunitno" placeholder="璇疯緭鍏ユ墍鍦ㄥ崟浣嶇殑宸ュ彿" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row v-if="selectionType == 'account' && accountfrom == '2'">
-          <el-col
-            ><el-form-item label="寮�鎴烽摱琛�" prop="depositbank">
-              <el-input
-                v-model="accountselectform.depositbank"
-                placeholder="璇疯緭鍏ュ紑鎴烽摱琛屽悕绉�"
-              />
+          <el-col><el-form-item label="寮�鎴烽摱琛�" prop="depositbank">
+              <el-input v-model="accountselectform.depositbank" placeholder="璇疯緭鍏ュ紑鎴烽摱琛屽悕绉�" />
             </el-form-item>
           </el-col>
-          <el-col
-            ><el-form-item label="閾惰鍗″彿" prop="bankcardno">
-              <el-input
-                v-model="accountselectform.bankcardno"
-                placeholder="璇疯緭鍏ラ摱琛屽崱鍙�"
-              />
+          <el-col><el-form-item label="閾惰鍗″彿" prop="bankcardno">
+              <el-input v-model="accountselectform.bankcardno" placeholder="璇疯緭鍏ラ摱琛屽崱鍙�" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row v-if="selectionType == 'account' && accountfrom == '2'">
           <el-col>
             <el-form-item label="鑱旂郴鍦板潃" prop="address">
-              <el-input
-                v-model="accountselectform.address"
-                placeholder="璇疯緭鍏ヨ仈绯诲湴鍧�"
-              />
+              <el-input v-model="accountselectform.address" placeholder="璇疯緭鍏ヨ仈绯诲湴鍧�" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row v-if="selectionType == 'account' && accountfrom == '2'">
           <el-col>
             <el-form-item label="鑱旂郴鐢佃瘽" prop="telephone">
-              <el-input
-                v-model="accountselectform.telephone"
-                placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
-              />
+              <el-input v-model="accountselectform.telephone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
             </el-form-item>
           </el-col>
         </el-row>
       </el-form>
       <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="confirmSelectionDialog()"
-          >纭� 瀹�</el-button
-        >
+        <el-button type="primary" @click="confirmSelectionDialog()">纭� 瀹�</el-button>
         <el-button @click="showselectiondialog = false">鍙� 娑�</el-button>
       </span>
     </el-dialog>
-    <el-dialog
-      v-dialogDrags
-      :modal="false"
-      :close-on-click-modal="false"
-      :title="pdftitle"
-      :visible.sync="pdfVisible"
-      width="60%"
-    >
+    <el-dialog v-dialogDrags :modal="false" :close-on-click-modal="false" :title="pdftitle" :visible.sync="pdfVisible"
+      width="60%">
       <div style="margin-bottom: 10px;">
         <el-table :data="tableDatatop" style="width: 100%">
-          <el-table-column
-            v-if="businessType == 4"
-            prop="price"
-            align="center"
-            label="鍗曚环"
-          >
+          <el-table-column v-if="businessType == 4" prop="price" align="center" label="鍗曚环">
           </el-table-column>
-          <el-table-column
-            prop="quantity"
-            align="center"
-            label="鏁伴噺"
-            v-if="businessType == 4"
-          >
+          <el-table-column prop="quantity" align="center" label="鏁伴噺" v-if="businessType == 4">
           </el-table-column>
           <el-table-column prop="amount" align="center" :label="amountlabel">
           </el-table-column>
-          <el-table-column
-            prop="taxedamount"
-            align="center"
-            label="绋庡悗閲戦"
-            v-if="
-              (this.ismanager == true) &
-                (form.applytype == '1' || form.applytype == '2')
-            "
-          >
+          <el-table-column prop="taxedamount" align="center" label="绋庡悗閲戦" v-if="
+            (this.ismanager == true) &
+            (form.applytype == '1' || form.applytype == '2')
+          ">
           </el-table-column>
           <!-- <el-table-column
             prop="beneficiaryname"
@@ -982,147 +548,69 @@
           </el-table-column> -->
           <el-table-column prop="" align="center" label="鍗曚綅/涓汉" width="250">
           </el-table-column>
-          <el-table-column
-            prop="title"
-            align="center"
-            label="鑱岀О"
-            width="120"
-            v-if="form.applytype == '1' || form.applytype == '2'"
-          >
+          <el-table-column prop="title" align="center" label="鑱岀О" width="120"
+            v-if="form.applytype == '1' || form.applytype == '2'">
           </el-table-column>
-          <el-table-column
-            prop="idcardno"
-            align="center"
-            label="韬唤璇佸彿"
-            width="200"
-            v-if="form.applytype == '1' || form.applytype == '2'"
-          >
+          <el-table-column prop="idcardno" align="center" label="韬唤璇佸彿" width="200"
+            v-if="form.applytype == '1' || form.applytype == '2'">
           </el-table-column>
           <el-table-column prop="depositbank" align="center" label="寮�鎴烽摱琛�">
           </el-table-column>
-          <el-table-column
-            prop="bankcardno"
-            align="center"
-            label="閾惰甯愬彿"
-            width="210"
-          >
+          <el-table-column prop="bankcardno" align="center" label="閾惰甯愬彿" width="210">
           </el-table-column>
         </el-table>
       </div>
-      <el-alert
-        title="鏂颁笂浼犳枃浠堕渶鍦ㄦ彁浜や繚瀛樺悗鎵嶅彲杩涜妗堜緥鍏宠仈锛屽惁鍒欒涓烘斁寮�"
-        type="error"
-        show-icon
-        close-text="鐭ラ亾浜�"
-      >
+      <el-alert title="鏂颁笂浼犳枃浠堕渶鍦ㄦ彁浜や繚瀛樺悗鎵嶅彲杩涜妗堜緥鍏宠仈锛屽惁鍒欒涓烘斁寮�" type="error" show-icon close-text="鐭ラ亾浜�">
       </el-alert>
-      <el-tabs
-        style="margin-top: 20px;"
-        v-model="activeName"
-        type="border-card"
-        @tab-click="handleClick"
-      >
+      <el-tabs style="margin-top: 20px;" v-model="activeName" type="border-card" @tab-click="handleClick">
         <el-tab-pane label="鏅�氶檮浠�" name="common">
           <div class="pdfimg">
             <div class="box-pdf">
               <div>
-                <el-upload
-                  size="mini"
-                  class="upload-demo"
-                  :action="uploadFileUrl"
-                  :file-list="fileListto"
-                  :show-file-list="false"
-                  multiple
-                  drag
-                  :headers="headers"
-                  :on-success="
-                    (response, file, fileList) =>
-                      uploadSccess(response, file, fileList)
-                  "
-                  :on-preview="downFile"
-                  :disabled="operationType == 'detail'"
-                  :on-error="handleUploadError"
-                  :on-remove="remove"
-                  accept="image/*,.pdf"
-                >
+                <el-upload size="mini" class="upload-demo" :action="uploadFileUrl" :file-list="fileListto"
+                  :show-file-list="false" multiple drag :headers="headers" :on-success="(response, file, fileList) =>
+                    uploadSccess(response, file, fileList)
+                    " :on-preview="downFile" :disabled="operationType == 'detail'" :on-error="handleUploadError"
+                  :on-remove="remove" accept="image/*,.pdf">
                   <i class="el-icon-upload"></i>
                   <div class="el-upload__text">
                     灏嗙エ鎹嫋鍒版澶勶紝鎴�
-                    <em
-                      ><el-button
-                        :disabled="operationType == 'detail'"
-                        size="small"
-                        type="primary"
-                        >鐐瑰嚮涓婁紶</el-button
-                      ></em
-                    >
+                    <em><el-button :disabled="operationType == 'detail'" size="small"
+                        type="primary">鐐瑰嚮涓婁紶</el-button></em>
                   </div>
                 </el-upload>
-                <el-table
-                  :data="fileListto"
-                  @row-click="downFile"
-                  style="width: 100%"
-                  height="400"
-                >
-                  <el-table-column
-                    prop="name"
-                    :show-overflow-tooltip="true"
-                    label="鍚嶇О"
-                  >
+                <el-table :data="fileListto" @row-click="downFile" style="width: 100%" height="400">
+                  <el-table-column prop="name" :show-overflow-tooltip="true" label="鍚嶇О">
                     <template slot-scope="scope">
                       <i style="color:#409EFF" class=" el-icon-s-order" />
                       <span>{{ scope.row.name }}</span>
                     </template>
                   </el-table-column>
 
-                  <el-table-column
-                    prop="name"
-                    width="190"
-                    :show-overflow-tooltip="true"
-                    label="鍔熻兘"
-                  >
+                  <el-table-column prop="name" width="190" :show-overflow-tooltip="true" label="鍔熻兘">
                     <template slot-scope="scope">
-                      <el-button
-                        type="danger"
-                        size="mini"
-                        @click.native.prevent.stop="deletedowfile(scope.row)"
-                        >鍒犻櫎</el-button
-                      >
-                      <el-button
-                        type="primary"
-                        size="mini"
-                        @click.native.prevent.stop="moveupdowfile(scope.row)"
-                        >涓婄Щ</el-button
-                      >
-                      <el-button
-                        type="success"
-                        size="mini"
-                        icon="el-icon-search"
-                        circle
-                        @click.native.prevent.stop="Downloadfile(scope.row)"
-                      ></el-button>
+                      <el-button type="danger" size="mini"
+                        @click.native.prevent.stop="deletedowfile(scope.row)">鍒犻櫎</el-button>
+                      <el-button type="primary" size="mini"
+                        @click.native.prevent.stop="moveupdowfile(scope.row)">涓婄Щ</el-button>
+                      <el-button type="success" size="mini" icon="el-icon-search" circle
+                        @click.native.prevent.stop="Downloadfile(scope.row)"></el-button>
                     </template>
                   </el-table-column>
                 </el-table>
               </div>
             </div>
 
-            <div
-              v-if="this.previewpdf && pdfimgsrcList.length"
-              class="pdfimgmin"
-            >
+            <div v-if="this.previewpdf && pdfimgsrcList.length" class="pdfimgmin">
               <!-- <img :src="pdfimg" /> -->
-              <el-image
-                style="width: 95%; height: 90%"
-                @error="handleImageError"
-                @load="handleImageLoad"
-                :src="pdfimg"
-                :preview-src-list="pdfimgsrcList"
-              >
+              <el-image ref="imagePreview" style="width: 95%; height: 90%" :src="pdfimg"
+                @click="handleImageClick(initialIndex)">
                 <!-- <div slot="error" class="image-slot">
-              <i class="el-icon-picture-outline"></i>
-            </div> -->
+                <i class="el-icon-picture-outline"></i>
+              </div> -->
               </el-image>
+              <custom-image-viewer :url-list="pdfimgsrcList" :initial-index="currentIndex" :visible="viewerVisible"
+                @update:visible="viewerVisible = $event" @close="handleViewerClose" />
             </div>
             <div v-else class="pdfimgmins">{{ hintitle }}</div>
           </div>
@@ -1131,103 +619,51 @@
           <div class="pdfimg">
             <div class="box-pdf">
               <div>
-                <el-upload
-                  size="mini"
-                  class="upload-demo"
-                  :action="uploadFileUrl"
-                  :file-list="invoicefileList"
-                  :show-file-list="false"
-                  multiple
-                  drag
-                  :headers="headers"
-                  :on-success="
-                    (response, file, fileList) =>
-                      uploadSccess(response, file, fileList)
-                  "
-                  :on-preview="downFile"
-                  :disabled="operationType == 'detail'"
-                  :on-error="handleUploadError"
-                  :on-remove="remove"
-                  accept="image/*,.pdf"
-                >
+                <el-upload size="mini" class="upload-demo" :action="uploadFileUrl" :file-list="invoicefileList"
+                  :show-file-list="false" multiple drag :headers="headers" :on-success="(response, file, fileList) =>
+                    uploadSccess(response, file, fileList)
+                    " :on-preview="downFile" :disabled="operationType == 'detail'" :on-error="handleUploadError"
+                  :on-remove="remove" accept="image/*,.pdf">
                   <i class="el-icon-upload"></i>
                   <div class="el-upload__text">
                     灏嗗彂绁ㄦ枃浠舵嫋鍒版澶勶紝鎴�
-                    <em
-                      ><el-button
-                        :disabled="operationType == 'detail'"
-                        size="small"
-                        type="primary"
-                        >鐐瑰嚮涓婁紶</el-button
-                      ></em
-                    >
+                    <em><el-button :disabled="operationType == 'detail'" size="small"
+                        type="primary">鐐瑰嚮涓婁紶</el-button></em>
                   </div>
                 </el-upload>
-                <el-table
-                  :data="invoicefileListto"
-                  @row-click="downFile"
-                  style="width: 100%"
-                  height="400"
-                >
-                  <el-table-column
-                    prop="name"
-                    :show-overflow-tooltip="true"
-                    label="鍚嶇О"
-                  >
+                <el-table :data="invoicefileListto" @row-click="downFile" style="width: 100%" height="400">
+                  <el-table-column prop="name" :show-overflow-tooltip="true" label="鍚嶇О">
                     <template slot-scope="scope">
                       <i style="color:#409EFF" class=" el-icon-s-order" />
                       <span>{{ scope.row.name }}</span>
                     </template>
                   </el-table-column>
 
-                  <el-table-column
-                    prop="name"
-                    width="190"
-                    :show-overflow-tooltip="true"
-                    label="鍔熻兘"
-                  >
+                  <el-table-column prop="name" width="190" :show-overflow-tooltip="true" label="鍔熻兘">
                     <template slot-scope="scope">
-                      <el-button
-                        type="primary"
-                        size="mini"
-                        @click.native.prevent.stop="deletedowfile(scope.row)"
-                        >鍒犻櫎</el-button
-                      >
-                      <el-button
-                        type="primary"
-                        size="mini"
-                        @click.native.prevent.stop="moveupdowfile(scope.row)"
-                        >涓婄Щ</el-button
-                      >
-                      <el-button
-                        type="success"
-                        size="mini"
-                        icon="el-icon-search"
-                        circle
-                        @click.native.prevent.stop="Downloadfile(scope.row)"
-                      ></el-button>
+                      <el-button type="primary" size="mini"
+                        @click.native.prevent.stop="deletedowfile(scope.row)">鍒犻櫎</el-button>
+                      <el-button type="primary" size="mini"
+                        @click.native.prevent.stop="moveupdowfile(scope.row)">涓婄Щ</el-button>
+                      <el-button type="success" size="mini" icon="el-icon-search" circle
+                        @click.native.prevent.stop="Downloadfile(scope.row)"></el-button>
                     </template>
                   </el-table-column>
                 </el-table>
               </div>
             </div>
 
-            <div
-              v-if="this.previewpdf && invoicepdfimgsrcList.length"
-              class="pdfimgmin"
-            >
+            <div v-if="this.previewpdf && invoicepdfimgsrcList.length" class="pdfimgmin">
               <!-- <img :src="pdfimg" /> -->
-              <el-image
-                style="width: 95%; height: 90%"
-                @error="handleImageError"
-                @load="handleImageLoad"
-                :src="invoicepdfimg"
-                :preview-src-list="invoicepdfimgsrcList"
-              >
+              <el-image style="width: 95%; height: 90%" :src="invoicepdfimg"
+                @click="invoicehandleImageClick(initialIndex)">
                 <!-- <div slot="error" class="image-slot">
-              <i class="el-icon-picture-outline"></i>
-            </div> -->
+                <i class="el-icon-picture-outline"></i>
+              </div> -->
               </el-image>
+              <custom-image-viewer :url-list="invoicepdfimgsrcList" :initial-index="invoicecurrentIndex"
+                :visible="invoiceviewerVisible" @update:visible="invoiceviewerVisible = $event"
+                @close="invoicehandleViewerClose" />
             </div>
             <div v-else class="pdfimgmins">{{ hintitle }}</div>
           </div>
@@ -1235,14 +671,10 @@
       </el-tabs>
     </el-dialog>
     <el-dialog title="鎻愮ず" :visible.sync="Savereminder" width="30%">
-      <el-alert
-        :title="
-          '鎮ㄥ凡娣诲姞' +
-            totalquantity +
-            '鏉℃暟鎹紝涓洪槻姝㈡暟鎹涪澶辨槸鍚︽彁浜や繚瀛樺啀缁х画娣诲姞銆�'
-        "
-        type="warning"
-      >
+      <el-alert :title="'鎮ㄥ凡娣诲姞' +
+        totalquantity +
+        '鏉℃暟鎹紝涓洪槻姝㈡暟鎹涪澶辨槸鍚︽彁浜や繚瀛樺啀缁х画娣诲姞銆�'
+        " type="warning">
       </el-alert>
       <span slot="footer" class="dialog-footer">
         <el-button type="primary" @click="Savenow">纭� 瀹�</el-button>
@@ -1251,30 +683,19 @@
     </el-dialog>
 
     <!-- 鎵归噺閫夊彇 -->
-    <el-dialog
-      title="鎵归噺鐢熸垚鏄庣粏淇℃伅"
-      :visible.sync="batchdialogVisible"
-      width="30%"
-    >
+    <el-dialog title="鎵归噺鐢熸垚鏄庣粏淇℃伅" :visible.sync="batchdialogVisible" width="35%">
+      <div style="margin-bottom: 12px">
+        <el-input v-model="personKeyword" clearable size="small" prefix-icon="el-icon-search"
+          placeholder="杈撳叆 濮撳悕 / 鍗曚綅 / 宸ュ彿 / 韬唤璇佸悗4浣� 绛涙煡" style="width: 330px" />
+        <span style="margin-left: 10px; color: #909399; font-size: 12px">鍏� {{ filteredCityOptions.length }} 浜�</span>
+      </div>
       <div style="max-height: 300px; overflow-y: auto">
-        <el-checkbox
-          :indeterminate="isIndeterminate"
-          v-model="checkAll"
-          @change="handleCheckAllChange"
-          >鍏ㄩ��</el-checkbox
-        >
+        <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">鍏ㄩ�夛紙褰撳墠绛涙煡缁撴灉锛�</el-checkbox>
         <div style="margin: 15px 0;"></div>
-        <el-checkbox-group
-          v-model="checkedCities"
-          @change="handleCheckedCitiesChange"
-        >
-          <el-checkbox
-            border
-            v-for="city in cityOptions"
-            :label="city"
-            :key="city.reportNo"
-            >{{ city.reportName }}</el-checkbox
-          >
+        <el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
+          <el-checkbox border v-for="city in filteredCityOptions" :label="city"
+            :key="city.reportNo + '_' + city.reportName">{{ city.reportName
+            }}{{ city.unitname ? " 路 " + city.unitname : "" }}</el-checkbox>
         </el-checkbox-group>
       </div>
 
@@ -1287,6 +708,8 @@
 </template>
 
 <script>
+import store from "@/store";
+
 // 'sdaad2123UD2',1  'wsadadwsad',4 'sdadaddad',3 'ssaaddxs',2
 //杩欓噷鍙互瀵煎叆鍏朵粬鏂囦欢锛堟瘮濡傦細缁勪欢锛屽伐鍏穓s锛岀涓夋柟鎻掍欢js锛宩son鏂囦欢锛屽浘鐗囨枃浠剁瓑绛夛級
 //渚嬪锛歩mport 銆婄粍浠跺悕绉般�� from '銆婄粍浠惰矾寰勩��';
@@ -1311,7 +734,9 @@
   getdownloadBX,
   addorupdateFund,
   ManualCalculation,
-  getdetailsByItemId
+  getdetailsByItemId,
+  validateExpertFee,
+  listbypower
 } from "@/api/project/fund";
 
 import {
@@ -1352,7 +777,7 @@
   addExternalperson,
   updateExternalperson,
   exportExternalperson,
-  getOnlyCode
+  getOnlyCode, getInfoByIDCardNo
 } from "@/api/project/externalperson";
 
 import { listItemexpense } from "@/api/project/itemexpense";
@@ -1361,12 +786,16 @@
 import Li_area_select from "@/components/Address";
 import OrgSelecter from "@/views/project/components/orgselect";
 import { getToken } from "@/utils/auth";
+import { moneySum, moneyMul, moneySub, moneyRound } from "@/utils/money";
+import { checkFileName, checkDetails } from "@/utils/fileNameCheck";
+import CustomImageViewer from "@/components/CustomImageViewer"; // 鏍规嵁浣犵殑璺緞璋冩暣
 
 export default {
   //import寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
   components: {
     Li_area_select,
-    OrgSelecter
+    OrgSelecter,
+    CustomImageViewer
   },
   name: "fundApply",
 
@@ -1382,19 +811,41 @@
     //"sys_finsubject",
     //"sys_financeitemtype",
     //"sys_expensetype",
+    'sys_DonationStatus',
     "sys_recordstatus",
     "sys_professionaltitle"
   ],
 
   data() {
-    var validatePass = (rule, value, callback) => {
-      const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}([0-9]|X)$/;
-      if (regex.test(value)) {
-        callback();
-      } else {
-        callback(new Error("韬唤璇佸彿鐮佹牸寮忛敊璇�"));
+    // 鑷畾涔夎韩浠借瘉鍙锋牎楠屽櫒
+    const validateIdCard = (rule, value, callback) => {
+      // 1. 濡傛灉涓虹┖锛屼氦缁� required 瑙勫垯鍘诲鐞嗭紝杩欓噷鐩存帴鏀捐
+      if (!value) {
+        return callback();
       }
+      const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}([0-9]|X)$/;
+      // 2026-10-19锛氭牸寮忎笉鍚堟硶绔嬪嵆鏃╅��銆傚師鏉ュ啓鎴� if/else 浣� else 閲屾病鏈� return锛�
+      // 浼氱户缁線涓嬭蛋寮傛鏌ラ噸锛屽鑷� callback 琚皟鐢ㄤ袱娆°��"韬唤璇佸彿鐮佹牸寮忛敊璇�"琚悗缁粨鏋滆鐩栥��
+      if (!regex.test(value)) {
+        return callback(new Error("韬唤璇佸彿鐮佹牸寮忛敊璇�"));
+      }
+
+      // 2. 璋冪敤鍚庣鎺ュ彛杩涜閲嶅鎬ф牎楠�
+      getInfoByIDCardNo(value).then(res => {
+        // 鍋囪鍚庣杩斿洖鐨� res.data 鏄暟缁勶紝涓旈暱搴﹀ぇ浜�0琛ㄧず宸插瓨鍦�
+        if (res.data && res.data.length > 0) {
+          // 鏍¢獙涓嶉�氳繃锛屽皢閿欒淇℃伅浼犵粰 callback
+          callback(new Error("韬唤璇佸彿淇℃伅宸茶鐧昏锛岃妫�鏌ワ紒"));
+        } else {
+          // 鏍¢獙閫氳繃
+          callback();
+        }
+      }).catch(() => {
+        // 鎺ュ彛寮傚父鏃剁殑澶勭悊
+        callback(new Error("鏍¢獙韬唤璇佸彿鏃跺彂鐢熺綉缁滈敊璇�"));
+      });
     };
+
     //杩欓噷瀛樻斁鏁版嵁
     return {
       // 閬僵灞�
@@ -1433,6 +884,8 @@
       // 缃戠粶璇锋眰澶�
       Networkheader: null,
       batchdialogVisible: false,
+      //鎵归噺褰曞叆寮规鐨勭瓫鏌ュ叧閿瓧
+      personKeyword: "",
       itemlist: [],
       cityOptions: [],
       checkAll: false,
@@ -1446,11 +899,11 @@
       baselisttages: [
         {
           id: 1,
-          name: "鏉愭枡寰呭鏍�"
+          name: "寰呭鏍�"
         },
         {
           id: 2,
-          name: "瀹℃煡閫氳繃绛夊緟閭瘎绾歌川鏉愭枡"
+          name: "棰勫閫氳繃绛夊緟绾歌川鏉愭枡"
         },
         {
           id: 3,
@@ -1507,16 +960,38 @@
       },
 
       dialogrules: {
+        // 2026-10-19锛氳处鎴峰悕绉帮紙璐︽埛鏉ユ簮=浠庤处鎴峰簱 鏃剁殑涓嬫媺锛変篃鏄繀杈撻」
+        accountname: [
+          { required: true, message: "璇烽�夋嫨璐︽埛鍚嶇О", trigger: "change" }
+        ],
         usertype: [
           { required: true, message: "璇疯緭鍏ヨ处鎴风被鍨�", trigger: "blur" }
         ],
         username: [
           { required: true, message: "璇疯緭鍏ヨ处鎴峰悕绉�", trigger: "blur" }
         ],
+        unitTaxNo: [{ required: true, message: "璇疯緭鍏ョ◣鍙�", trigger: "blur" }],
         idcardno: [
-          { required: true, message: "璇疯緭鍏ヨ韩浠借处鍙�", trigger: "blur" }
+          {
+            // 2026-10-19锛氬姞 required 鏍囪鍙负璁� el-form-item 鏍囧嚭蹇呰緭鏄熷彿锛圗lement 鐨� isRequired 鍙 rule.required锛夈��
+            // 鏈鍒欏甫 validator锛宎sync-validator 鐨� getValidationMethod 浼氱洿鎺ヨ繑鍥炶 validator銆佽烦杩囧唴寤� required 妫�鏌ワ紝
+            // 鎵�浠ユ牎楠岃涓轰笌鏀瑰姩鍓嶅畬鍏ㄤ竴鑷达紱鍙﹀**涓嶈兘鍔� message**锛屽惁鍒欎細瑕嗙洊涓嬮潰鑷畾涔� validator 鐨勬姤閿欐枃妗堛��
+            required: true,
+            // 璐︽埛绫诲瀷閫夋嫨"鍗曚綅鏈烘瀯"鏃朵笉闇�瑕佽韩浠借瘉鍙�
+            validator: (rule, value, callback) => {
+              if (this.hasUserType(this.accountselectform.usertype, "org")) {
+                return callback();
+              }
+              if (!value || !String(value).trim()) {
+                return callback(new Error("璇疯緭鍏ヨ韩浠借瘉鍙�"));
+              }
+              return callback();
+            },
+            trigger: "blur"
+          },
+          // 娣诲姞鑷畾涔夋牎楠岃鍒�
+          { validator: validateIdCard, trigger: 'blur' }
         ],
-        //idcardno: [{ validator: validatePass, trigger: "blur" }],
         depositbank: [
           { required: true, message: "璇疯緭鍏ュ紑鎴烽摱琛�", trigger: "change" }
         ],
@@ -1580,6 +1055,8 @@
         flowconclusion: null,
         fundid: null
       },
+      // 杩炵画瀹℃壒锛氬緟瀹℃壒鍗曟嵁鍒楄〃
+      pendingList: [],
 
       // 鏌ヨ鍙傛暟
       queryParams: {
@@ -1656,6 +1133,11 @@
       pdftitle: "",
       pdfimg: "",
       pdfimgsrcList: [],
+      currentIndex: 0, // 鍒濆绱㈠紩
+      invoicecurrentIndex: 0, // 鍒濆绱㈠紩
+      initialIndex: 0, // 鍒濆绱㈠紩
+      viewerVisible: false, // 鎺у埗棰勮缁勪欢鏄剧ず
+      invoiceviewerVisible: false, // 鎺у埗棰勮缁勪欢鏄剧ず
       pdfVisible: false,
       previewpdf: false,
       hintitle: "璇蜂笂浼犳枃浠跺悗鏌ョ湅",
@@ -1668,18 +1150,27 @@
   },
 
   //鐩戝惉灞炴�� 绫讳技浜巇ata姒傚康
-  computed: {},
+  computed: {
+    //鎵归噺褰曞叆寮规锛氭寜鍏抽敭瀛楋紙濮撳悕/鍗曚綅/宸ュ彿/韬唤璇佸悗4浣嶏級绛涙煡鍚庣殑鍊欓�変汉
+    filteredCityOptions() {
+      const kw = (this.personKeyword || "").trim().toLowerCase();
+      if (!kw) {
+        return this.cityOptions;
+      }
+      return this.cityOptions.filter(item => this.personMatchKeyword(item, kw));
+    }
+  },
   //鐩戞帶data涓殑鏁版嵁鍙樺寲
   watch: {},
   //鏂规硶闆嗗悎
   methods: {
-    bbaaccss(val) {},
+    bbaaccss(val) { },
     // 娴忚鍣ㄩ〉闈㈠叧闂垨鍒锋柊鎻愮ず
     beforeunloadHandler(e) {
       if (
         (JSON.stringify(this.form) == sessionStorage.getItem("apiform") &&
           JSON.stringify(this.rbDetails) ==
-            sessionStorage.getItem("apifunddetail")) ||
+          sessionStorage.getItem("apifunddetail")) ||
         !sessionStorage.getItem("apifunddetail")
       ) {
       } else {
@@ -1823,9 +1314,12 @@
         this.businessType == "2" ||
         this.businessType == "3"
       ) {
+        console.log(this.curCase,'this.curCase');
+
         this.form.infoid = this.curCase.id;
         this.form.donorname = this.curCase.name;
         this.form.donorno = this.curCase.donorno;
+        this.form.invoicecount = this.curCase.recordstate;
       }
 
       //鍒濆鍖栨槑缁�
@@ -1928,6 +1422,14 @@
     handleCheck() {
       this.isopen = 0;
       this.reset();
+      // 閲嶇疆瀹℃壒淇℃伅锛岄伩鍏嶄笂涓�鍗曠殑瀹℃壒缁撴灉甯﹀叆涓嬩竴鍗�
+      this.checkObj = {
+        flowlevelone: null,
+        flowconclusion: null,
+        fundid: null
+      };
+      // 杩炵画瀹℃壒锛氬姞杞藉綋鍓嶄笟鍔$被鍨嬩笅鐨勫緟瀹℃壒鍒楄〃
+      this.getPendingList();
 
       getFund(this.curId).then(response => {
         this.form = response.data;
@@ -1970,7 +1472,7 @@
     handleDelete() {
       this.$modal
         .confirm("鏄惁纭鍒犻櫎璇ヨ褰曪紵")
-        .then(function() {
+        .then(function () {
           return delFund(this.curId);
         })
         .then(() => {
@@ -1983,7 +1485,7 @@
           this.getfundList();
           this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
         })
-        .catch(() => {});
+        .catch(() => { });
     },
 
     /** 涓婃姤鎸夐挳鎿嶄綔 */
@@ -1991,7 +1493,7 @@
       if (
         (JSON.stringify(this.form) == sessionStorage.getItem("apiform") &&
           JSON.stringify(this.rbDetails) ==
-            sessionStorage.getItem("apifunddetail")) ||
+          sessionStorage.getItem("apifunddetail")) ||
         !sessionStorage.getItem("apifunddetail")
       ) {
       } else {
@@ -2060,7 +1562,12 @@
       return randomString;
     },
     /** 鎻愪氦鎸夐挳 */
-    submitForm: debounce(function() {
+    submitForm: debounce(function () {
+      // 2026-10-15锛氫繚瀛樺墠闄勪欢鏂囦欢鍚嶈鑼冩牎楠岋紙浠呮柊澧炲崟鎹紱鑰佸崟鎹殑鍘嗗彶闄勪欢鐢卞悗绔寜"鍙牎楠屾湰娆″彉鏇�"鏀捐锛�
+      if (!this.checkDetailFileNames()) {
+        return;
+      }
+
       if (!this.randomnumber) {
         this.randomnumber = this.generateRandomString(9);
         this.form.randomnumber = this.randomnumber;
@@ -2070,14 +1577,39 @@
         if (valid) {
           this.formData = this.form;
 
+          // 涓撳鍔冲姟璐逛笓鐢細9 鏉¤垂鐢ㄦ帶鍒惰鍒欐牎楠岋紙鏍¢獙涓嶉�氳繃涓嶅厑璁镐繚瀛橈級
+          if (this.businessType == "1") {
+            this.$modal.loading("姝e湪鏍¢獙涓撳鍔冲姟璐圭敤锛岃绋嶅�欙紒");
+            this.checkExpertFeeRules("淇濆瓨").then((allowed) => {
+              this.$modal.closeLoading();
+              if (allowed) {
+                this.doSubmitForm();
+              }
+            });
+            return;
+          }
+
+          this.doSubmitForm();
+        }
+      });
+    }, 500),
+
+    /**
+     * 淇濆瓨鐢宠鍗曠殑瀹為檯钀藉簱閫昏緫銆�
+     *
+     * 浠� submitForm 涓媶鍑猴紝渚夸簬鍦ㄤ笓瀹跺姵鍔¤垂瑙勫垯鏍¢獙閫氳繃鍚庡啀鎵ц锛�
+     * 鍏朵粬涓氬姟绫诲瀷鐢� submitForm 鐩存帴璋冪敤锛岃涓轰笌鎷嗗垎鍓嶄竴鑷淬��
+     */
+    doSubmitForm() {
+
           //淇濆瓨鍓嶆牎楠屾暟鎹�
           for (let k = 0; k < this.rbDetails.length; k++) {
             let tempDetail = this.rbDetails[k];
             if (tempDetail.itemid == null) {
               this.$modal.msgWarning(
                 "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
-                  (k + 1).toString() +
-                  "琛岀殑鏈嶅姟椤圭洰鏈�夋嫨锛岃鍏堥�夋嫨鏈嶅姟椤圭洰鍚庡啀鎻愪氦淇濆瓨锛�"
+                (k + 1).toString() +
+                "琛岀殑鏈嶅姟椤圭洰鏈�夋嫨锛岃鍏堥�夋嫨鏈嶅姟椤圭洰鍚庡啀鎻愪氦淇濆瓨锛�"
               );
               return;
             }
@@ -2086,8 +1618,8 @@
               if (tempDetail.servicesscope == null) {
                 this.$modal.msgWarning(
                   "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
-                    (k + 1).toString() +
-                    "琛岀殑璐圭敤璇存槑鏈�夋嫨,璇烽�夋嫨璐圭敤璇存槑鍚庡啀鎻愪氦淇濆瓨锛�"
+                  (k + 1).toString() +
+                  "琛岀殑璐圭敤璇存槑鏈�夋嫨,璇烽�夋嫨璐圭敤璇存槑鍚庡啀鎻愪氦淇濆瓨锛�"
                 );
                 return;
               }
@@ -2095,8 +1627,8 @@
               if (tempDetail.beneficiaryno == null) {
                 this.$modal.msgWarning(
                   "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
-                    (k + 1).toString() +
-                    "琛岀殑鏈嶅姟浜哄憳濮撳悕涓洪�夋嫨,璇烽�夋嫨浜哄憳鍚庡啀鎻愪氦淇濆瓨锛�"
+                  (k + 1).toString() +
+                  "琛岀殑鏈嶅姟浜哄憳濮撳悕涓洪�夋嫨,璇烽�夋嫨浜哄憳鍚庡啀鎻愪氦淇濆瓨锛�"
                 );
                 return;
               }
@@ -2139,12 +1671,12 @@
               let tempDetail = this.rbDetails[j];
               if (
                 isNaN(parseFloat(tempDetail.amount)) ||
-                parseFloat(tempDetail.amount) == 0
+                moneyRound(tempDetail.amount) == 0
               ) {
                 this.$modal.msgWarning(
                   "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
-                    (j + 1).toString() +
-                    "琛岀殑閲戦鏈緭鍏ワ紝璇峰厛杈撳叆閲戦鍚庡啀鎻愪氦淇濆瓨锛�"
+                  (j + 1).toString() +
+                  "琛岀殑閲戦鏈緭鍏ワ紝璇峰厛杈撳叆閲戦鍚庡啀鎻愪氦淇濆瓨锛�"
                 );
                 return;
               }
@@ -2154,18 +1686,18 @@
               let tempDetail = this.rbDetails[j];
               if (
                 isNaN(parseFloat(tempDetail.amount)) ||
-                parseFloat(tempDetail.amount) == 0
+                moneyRound(tempDetail.amount) == 0
               ) {
                 this.$modal.msgWarning(
                   "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
-                    (j + 1).toString() +
-                    "琛岀殑閲戦鏈緭鍏ワ紝璇峰厛杈撳叆閲戦鍚庡啀鎻愪氦淇濆瓨锛�"
+                  (j + 1).toString() +
+                  "琛岀殑閲戦鏈緭鍏ワ紝璇峰厛杈撳叆閲戦鍚庡啀鎻愪氦淇濆瓨锛�"
                 );
                 return;
               }
               if (
                 isNaN(parseFloat(tempDetail.taxamount)) ||
-                parseFloat(tempDetail.taxamount) == 0
+                moneyRound(tempDetail.taxamount) == 0
               ) {
                 tempDetail.taxedamount = parseFloat(tempDetail.amount);
               } else {
@@ -2267,9 +1799,84 @@
           //鍏抽棴绐楀彛
           this.loading = false;
           // this.getfundList();
-        }
+    },
+
+    /**
+     * 涓撳鍔冲姟璐� 9 鏉¤垂鐢ㄦ帶鍒惰鍒欐牎楠岋紙鎻愪氦鍓嶆嫤鎴級銆�
+     *
+     * 閫傜敤鑼冨洿锛歜usinessType === '1'锛堜笓瀹跺姵鍔¤垂鐢宠鍗曪級锛屼笌鍚庣 applytype === '1' 瀵瑰簲銆�
+     * 鍏朵粬涓氬姟绫诲瀷锛堜鸡鐞嗕笓瀹惰垂銆佸尰瀛︽垚鏈�佸姙鍏垂鐢級涓嶆牎楠岋紝鐩存帴鏀捐銆�
+     *
+     * 鏍¢獙鍙e緞锛堝悓涓�鎹愮尞妗堜緥 infoid 涓嬬疮璁★級鐢卞悗绔粺涓�瀹炵幇锛�
+     *   errors   闃绘柇鍨嬶細鎻愮ず杩濆弽鐨勫叿浣撹鍒欙紝涓嶅厑璁哥户缁繚瀛�/瀹℃牳
+     *   warnings 鎻愮ず鍨嬶細浠呮彁閱掔粡鍔炰汉澶勭悊锛堣鍒� 5銆�6锛夛紝闇�浜屾纭鍚庢墠缁х画
+     *
+     * @param {string} action 褰撳墠鍔ㄤ綔锛岀敤浜庢嫾鎺ユ彁绀烘枃妗堬紙濡傗�滀繚瀛樷�濃�滄彁浜ゅ鏍糕�濓級
+     * @returns {Promise<boolean>} true 鍏佽缁х画锛宖alse 闃绘缁х画
+     */
+    checkExpertFeeRules(action) {
+      if (this.businessType != "1") {
+        return Promise.resolve(true);
+      }
+      // 鍚庣鎸夈�屾渚嬪唴宸叉湁鍗曟嵁 + 鏈鎻愪氦鏄庣粏銆嶅悎骞惰绠楋紝纭繚灏氭湭钀藉簱鐨勬槑缁嗕篃鍙備笌鏍¢獙
+      const payload = Object.assign({}, this.form, {
+        applytype: this.form.applytype || "1",
+        serviceFunddetails: this.rbDetails,
       });
-    }, 500),
+      // 鎺掓煡鐢細鑳界洿鎺ヤ粠鎺у埗鍙扮湅鍒板埌搴曢�佷簡浠�涔堬紝浠ュ強鍚庣鍒ゅ畾浜嗕粈涔�
+      console.log("[涓撳璐规牎楠宂 鎻愪氦鏍¢獙", action, {
+        businessType: this.businessType,
+        applytype: payload.applytype,
+        infoid: payload.infoid,
+        fundId: payload.id,
+        鏄庣粏: (this.rbDetails || []).map((d) => ({
+          itemid: d.itemid,
+          amount: d.amount,
+          taxedamount: d.taxedamount,
+          鍦烘櫙: d.servicesscopename,
+        })),
+      });
+         
+      return validateExpertFee(payload)
+        .then((res) => {
+          const errors = (res && res.errors) || [];
+          const warnings = (res && res.warnings) || [];
+          console.log("[涓撳璐规牎楠宂 鍚庣杩斿洖", { errors, warnings });
+
+          // 1) 闃绘柇鍨嬶細鍒楀嚭杩濆弽鐨勫叿浣撹鍒欙紝涓嶅厑璁哥户缁�
+          //    鐢ㄥ脊绐楄�岄潪杞绘彁绀猴細閿欒鍙兘鏈夊鏉★紝杞绘彁绀轰細鎸ゆ垚涓�琛屼笖寰堝揩娑堝け
+          if (errors.length > 0) {
+            this.$modal.alertError(
+              "涓撳鍔冲姟璐圭敤涓嶇鍚堜互涓嬭瀹氾紝鏃犳硶" +
+                action +
+                "锛歕n\n" +
+                errors.map((msg, i) => i + 1 + ". " + msg).join("\n\n")
+            );
+            return false;
+          }
+
+          // 2) 鎻愮ず鍨嬶細闇�缁忓姙浜虹‘璁ゅ悗鎵嶈兘缁х画锛堝綋鍓嶈鍒� 5銆�6 宸叉敼涓虹‖鎷︽埅锛屾鍒嗘敮淇濈暀澶囩敤锛�
+          if (warnings.length > 0) {
+            const confirmText =
+              "涓撳鍔冲姟璐圭敤瀛樺湪浠ヤ笅闂锛岃纭鏄惁缁х画" +
+              action +
+              "锛焅n\n" +
+              warnings.map((msg, i) => i + 1 + ". " + msg).join("\n\n");
+            return this.$modal
+              .confirm(confirmText)
+              .then(() => true)
+              .catch(() => false);
+          }
+
+          return true;
+        })
+        .catch((err) => {
+          // 鎺ュ彛寮傚父鏃舵寜鈥滀笉闃绘柇鈥濆鐞嗭紝閬垮厤鏍¢獙鏈嶅姟涓嶅彲鐢ㄥ鑷村畬鍏ㄦ棤娉曟姤閿�锛�
+          // 鍚庣 addOrUpdateNew / checkFund 浠嶆湁鍚屾牱鐨勭‖鎷︽埅鍏滃簳銆�
+          console.error("涓撳鍔冲姟璐硅鍒欐牎楠屾帴鍙h皟鐢ㄥけ璐�", err);
+          return true;
+        });
+    },
 
     checksubmit() {
       //妫�鏌ユ槸鍚︽敹鍒扮焊璐ㄦ潗鏂�
@@ -2301,8 +1908,79 @@
         return;
       }
 
-      this.Savenow();
-      console.log("淇濆瓨骞跺鎵�");
+      // 涓撳鍔冲姟璐逛笓鐢細9 鏉¤垂鐢ㄦ帶鍒惰鍒欐牎楠岋紙浠呭鏍搁�氳繃鏃舵嫤鎴級
+      const needExpertFeeCheck = this.checkObj.flowlevelone == 1;
+      const expertFeePromise = needExpertFeeCheck
+        ? this.checkExpertFeeRules("鎻愪氦瀹℃牳")
+        : Promise.resolve(true);
+
+      expertFeePromise.then((allowed) => {
+        if (!allowed) {
+          return;
+        }
+        this.Savenow();
+        console.log("淇濆瓨骞跺鎵�");
+      });
+    },
+
+    // 杩炵画瀹℃壒锛氳幏鍙栧綋鍓嶄笟鍔$被鍨嬩笅鐨勫緟瀹℃壒鍒楄〃
+    getPendingList() {
+      return listbypower({
+        pageNum: 1,
+        pageSize: 1000,
+        CHECKFLAG: 1,
+        APPLYTYPE: this.businessType
+      })
+        .then(res => {
+          this.pendingList = res.rows || [];
+        })
+        .catch(() => {
+          this.pendingList = [];
+        });
+    },
+
+    // 杩炵画瀹℃壒锛氬鎵瑰畬鎴愬悗璇㈤棶鏄惁缁х画瀹℃壒涓嬩竴鍗�
+    continueOrExit() {
+      // 閲嶆柊鎷夊彇寰呭鎵瑰垪琛紙褰撳墠鍗曟嵁宸插鎵瑰畬鎴愯绉诲嚭鍒楄〃锛�
+      this.getPendingList().then(() => {
+        const list = this.pendingList || [];
+        const next = list[0] || null;
+        if (next) {
+          this.$confirm("瀹℃壒宸插畬鎴愶紝鏄惁缁х画瀹℃壒涓嬩竴寮犲緟瀹℃壒鍗曟嵁锛�", "鎻愮ず", {
+            confirmButtonText: "缁х画瀹℃壒",
+            cancelButtonText: "杩斿洖鍒楄〃",
+            type: "info"
+          })
+            .then(() => {
+              // 鍦ㄥ綋鍓嶉〉闈㈢洿鎺ュ姞杞戒笅涓�寮犲緟瀹℃壒鍗曟嵁
+              this.curId = next.id;
+              this.handleCheck();
+              // 鍚屾鏇存柊鍦板潃鏍忥紝閬垮厤鍒锋柊鍚庡洖鍒颁笂涓�鍗�
+              this.$router
+                .replace({
+                  path: this.$route.path,
+                  query: {
+                    id: next.id,
+                    businessType: this.businessType,
+                    operationType: "check"
+                  }
+                })
+                .catch(() => {});
+            })
+            .catch(() => {
+              this.exitToPage();
+            });
+        } else {
+          this.$modal.msgSuccess("宸叉棤寰呭鎵瑰崟鎹紝杩斿洖鍒楄〃");
+          this.exitToPage();
+        }
+      });
+    },
+
+    // 杩斿洖鍒楄〃椤�
+    exitToPage() {
+      this.$store.dispatch("tagsView/delView", this.$route);
+      this.$router.go(-1);
     },
 
     // 鍙栨秷鎸夐挳
@@ -2316,10 +1994,12 @@
       getUserProfile().then(res => {
         this.userprofile = res.data;
         this.standardlevel = res.data.standardlevel;
+
         if (
           this.userprofile.userName == "admin" ||
-          this.userprofile.userName == "001" ||
-          this.userprofile.userName == "047"
+          this.userprofile.userName == "053" ||
+          this.userprofile.userName == "047" ||
+          store.getters.rolesor[0].roleSort == "13"
         ) {
           this.ismanager = true;
         } else {
@@ -2349,6 +2029,19 @@
       });
     },
 
+    /** 浜哄憳绫诲瀷锛堝鍊硷紝閫楀彿鍒嗛殧锛夋槸鍚﹀寘鍚寚瀹氱被鍨嬶紱org = 鍗曚綅鏈烘瀯 */
+    hasUserType(usertype, code) {
+      if (!usertype) {
+        return false;
+      }
+      return (
+        String(usertype)
+          .split(",")
+          .map(t => t.trim())
+          .indexOf(code) > -1
+      );
+    },
+    /** 鍙楃泭浜�/璐︽埛鏄惁涓�"鍗曚綅"锛堜汉鍛樼被鍨嬪惈 org锛� */
     //鑾峰彇涓撳銆佸崟浣嶆満鏋勭殑璐︽埛鍒楄〃
     getAccountList() {
       listExternalperson().then(res => {
@@ -2357,7 +2050,7 @@
         for (let j = 0; j < res.rows.length; j++) {
           //鍗曚綅璐﹀彿鍒楄〃
           if (res.rows[j].userstatus == "1") {
-            if (res.rows[j].usertype == "org") {
+            if (this.hasUserType(res.rows[j].usertype, "org")) {
               this.accountlist.push({
                 id: res.rows[j].id,
                 userno: res.rows[j].userno,
@@ -2368,6 +2061,7 @@
                 bankcardno: res.rows[j].bankcardno,
                 unitno: res.rows[j].unitno,
                 unitname: res.rows[j].unitname,
+                usertype: res.rows[j].usertype,
                 userid:
                   res.rows[j].username + "锛�" + res.rows[j].bankcardno + "锛�"
               });
@@ -2382,6 +2076,7 @@
                 bankcardno: res.rows[j].bankcardno,
                 unitno: res.rows[j].unitno,
                 unitname: res.rows[j].unitname,
+                usertype: res.rows[j].usertype,
                 userid:
                   res.rows[j].username + "锛�" + res.rows[j].idcardno + "锛�"
               });
@@ -2575,14 +2270,13 @@
 
     //璁$畻涓◣锛歵ype(A:宸茬煡绋庡墠閲戦锛岃绠楃◣鍚庨噾棰濓紱B锛氬凡鐭ョ◣鍚庨噾棰濓紝璁$畻绋庡墠閲戦)
     calculateTax(row, type) {
-      let targetValue = 0;
       for (let i = 0; i < this.rbDetails.length; i++) {
         if (!this.rbDetails[i].amount) {
           this.rbDetails[i].amount = 0;
         }
-        targetValue += parseFloat(this.rbDetails[i].amount); // 鍋囪姣忎釜瀵硅薄涓殑鐗瑰畾鍊煎瓨鍌ㄥ湪'specificValue'灞炴�т笅
       }
-      this.form.pretaxcost = targetValue;
+      // 鍚堣閲戦蹇呴』绮剧‘绱姞锛屽惁鍒欎細鍐欏叆 form.pretaxcost 骞惰惤搴�
+      this.form.pretaxcost = moneySum(this.rbDetails, "amount");
     },
 
     //瀵煎叆鎵�鏈夐」鐩�
@@ -2656,6 +2350,11 @@
     },
     // 鎺ュ彈鎻愰啋绔嬪埢淇濆瓨
     Savenow() {
+      // 2026-10-15锛氫繚瀛樺墠闄勪欢鏂囦欢鍚嶈鑼冩牎楠岋紙浠呮柊澧炲崟鎹紱鑰佸崟鎹殑鍘嗗彶闄勪欢鐢卞悗绔寜"鍙牎楠屾湰娆″彉鏇�"鏀捐锛�
+      if (!this.checkDetailFileNames()) {
+        return;
+      }
+
       if (!this.randomnumber) {
         this.randomnumber = this.generateRandomString(9);
         this.form.randomnumber = this.randomnumber;
@@ -2663,182 +2362,198 @@
       this.Savereminder = false;
       this.Reminderquantity = 0;
       this.totalquantity = 0;
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          this.formData = this.form;
 
-          //淇濆瓨鍓嶆牎楠屾暟鎹�
-          for (let k = 0; k < this.rbDetails.length; k++) {
-            let tempDetail = this.rbDetails[k];
-            if (tempDetail.itemid == null) {
-              this.$modal.msgWarning(
-                "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
+      // 涓撳鍔冲姟璐逛笓鐢細9 鏉¤垂鐢ㄦ帶鍒惰鍒欐牎楠岋紙鏍¢獙涓嶉�氳繃涓嶅厑璁歌惤搴擄級
+      this.checkExpertFeeRules("淇濆瓨").then((allowed) => {
+        if (!allowed) {
+          return;
+        }
+
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            this.formData = this.form;
+
+            //淇濆瓨鍓嶆牎楠屾暟鎹�
+            for (let k = 0; k < this.rbDetails.length; k++) {
+              let tempDetail = this.rbDetails[k];
+              if (tempDetail.itemid == null) {
+                this.$modal.msgWarning(
+                  "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
                   (k + 1).toString() +
                   "琛岀殑鏈嶅姟椤圭洰鏈�夋嫨锛岃鍏堥�夋嫨鏈嶅姟椤圭洰鍚庡啀鎻愪氦淇濆瓨锛�"
-              );
-              return;
-            }
+                );
+                return;
+              }
 
-            if (this.businessType == "1") {
-              if (tempDetail.servicesscope == null) {
-                this.$modal.msgWarning(
-                  "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
+              if (this.businessType == "1") {
+                if (tempDetail.servicesscope == null) {
+                  this.$modal.msgWarning(
+                    "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
                     (k + 1).toString() +
                     "琛岀殑璐圭敤璇存槑鏈�夋嫨,璇烽�夋嫨璐圭敤璇存槑鍚庡啀鎻愪氦淇濆瓨锛�"
-                );
-                return;
-              }
+                  );
+                  return;
+                }
 
-              if (tempDetail.beneficiaryno == null) {
-                this.$modal.msgWarning(
-                  "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
+                if (tempDetail.beneficiaryno == null) {
+                  this.$modal.msgWarning(
+                    "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
                     (k + 1).toString() +
                     "琛岀殑浜哄憳濮撳悕涓虹┖,璇烽�夋嫨浜哄憳鍚庡啀鎻愪氦淇濆瓨锛�"
-                );
-                return;
-              }
-              if (tempDetail.unitname == null) {
-                this.$modal.msgWarning(
-                  "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
+                  );
+                  return;
+                }
+                if (tempDetail.unitname == null) {
+                  this.$modal.msgWarning(
+                    "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
                     (k + 1).toString() +
                     "琛岀殑涓撳鍗曚綅涓虹┖,璇烽�夋嫨鍗曚綅鍚庡啀鎻愪氦淇濆瓨锛�"
-                );
-                return;
+                  );
+                  return;
+                }
               }
             }
-          }
 
-          //澶勭悊鏄庣粏
-          for (let i = 0; i < this.rbDetails.length; i++) {
-            let tempDetail = this.rbDetails[i];
-            //鑾峰彇鏈嶅姟椤圭洰鏄庣粏
-            let tempitemlist = tempDetail.itemlist;
-            let itemIndex = tempitemlist.findIndex(
-              item => tempDetail.itemid == item.id
-            );
-            if (itemIndex > -1) {
-              tempDetail.itemname = tempitemlist[itemIndex].itemName;
-              tempDetail.itemid = tempitemlist[itemIndex].id;
-            }
+            //澶勭悊鏄庣粏
+            for (let i = 0; i < this.rbDetails.length; i++) {
+              let tempDetail = this.rbDetails[i];
+              //鑾峰彇鏈嶅姟椤圭洰鏄庣粏
+              let tempitemlist = tempDetail.itemlist;
+              let itemIndex = tempitemlist.findIndex(
+                item => tempDetail.itemid == item.id
+              );
+              if (itemIndex > -1) {
+                tempDetail.itemname = tempitemlist[itemIndex].itemName;
+                tempDetail.itemid = tempitemlist[itemIndex].id;
+              }
 
-            //鑾峰彇applytypename銆佹湇鍔¤垂鐢ㄥぇ绫�
-            let applytypeIndex = this.rowfeeItemTypes.findIndex(
-              item => tempDetail.applytype == item.value
-            );
-            if (applytypeIndex > -1) {
-              tempDetail.applytypename = this.rowfeeItemTypes[
-                applytypeIndex
-              ].label;
-              tempDetail.subjecttype = this.rowfeeItemTypes[
-                applytypeIndex
-              ].subjecttype;
-              tempDetail.subjecttypename = this.rowfeeItemTypes[
-                applytypeIndex
-              ].subjecttypename;
+              //鑾峰彇applytypename銆佹湇鍔¤垂鐢ㄥぇ绫�
+              let applytypeIndex = this.rowfeeItemTypes.findIndex(
+                item => tempDetail.applytype == item.value
+              );
+              if (applytypeIndex > -1) {
+                tempDetail.applytypename = this.rowfeeItemTypes[
+                  applytypeIndex
+                ].label;
+                tempDetail.subjecttype = this.rowfeeItemTypes[
+                  applytypeIndex
+                ].subjecttype;
+                tempDetail.subjecttypename = this.rowfeeItemTypes[
+                  applytypeIndex
+                ].subjecttypename;
+              }
+              this.rbDetails[i] = tempDetail;
             }
-            this.rbDetails[i] = tempDetail;
-          }
-          //璁$畻褰撳墠琛屾姤閿�鍐呭璐圭敤鍚堣锛岀◣鍓嶉噾棰濓紙amount锛夈�佹墸绋庨噾棰濓紙taxamount锛夈�佺◣鍚庨噾棰濓紙taxedamount锛�
-          if (this.businessType == "2") {
-            for (let j = 0; j < this.rbDetails.length; j++) {
-              let tempDetail = this.rbDetails[j];
-              if (
-                isNaN(parseFloat(tempDetail.amount)) ||
-                parseFloat(tempDetail.amount) == 0
-              ) {
-                this.$modal.msgWarning(
-                  "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
+            //璁$畻褰撳墠琛屾姤閿�鍐呭璐圭敤鍚堣锛岀◣鍓嶉噾棰濓紙amount锛夈�佹墸绋庨噾棰濓紙taxamount锛夈�佺◣鍚庨噾棰濓紙taxedamount锛�
+            if (this.businessType == "2") {
+              for (let j = 0; j < this.rbDetails.length; j++) {
+                let tempDetail = this.rbDetails[j];
+                if (
+                  isNaN(parseFloat(tempDetail.amount)) ||
+                  moneyRound(tempDetail.amount) == 0
+                ) {
+                  this.$modal.msgWarning(
+                    "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
                     (j + 1).toString() +
                     "琛岀殑閲戦鏈緭鍏ワ紝璇峰厛杈撳叆閲戦鍚庡啀鎻愪氦淇濆瓨锛�"
-                );
-                return;
+                  );
+                  return;
+                }
               }
-            }
-          } else if (this.businessType == "3" || this.businessType == "4") {
-            for (let j = 0; j < this.rbDetails.length; j++) {
-              let tempDetail = this.rbDetails[j];
-              if (
-                isNaN(parseFloat(tempDetail.amount)) ||
-                parseFloat(tempDetail.amount) == 0
-              ) {
-                this.$modal.msgWarning(
-                  "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
+            } else if (this.businessType == "3" || this.businessType == "4") {
+              for (let j = 0; j < this.rbDetails.length; j++) {
+                let tempDetail = this.rbDetails[j];
+                if (
+                  isNaN(parseFloat(tempDetail.amount)) ||
+                  moneyRound(tempDetail.amount) == 0
+                ) {
+                  this.$modal.msgWarning(
+                    "鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
                     (j + 1).toString() +
                     "琛岀殑閲戦鏈緭鍏ワ紝璇峰厛杈撳叆閲戦鍚庡啀鎻愪氦淇濆瓨锛�"
-                );
-                return;
-              }
-              if (
-                isNaN(parseFloat(tempDetail.taxamount)) ||
-                parseFloat(tempDetail.taxamount) == 0
-              ) {
-                tempDetail.taxedamount = parseFloat(tempDetail.amount);
-              } else {
-                tempDetail.taxedamount =
-                  parseFloat(tempDetail.amount) +
-                  parseFloat(tempDetail.taxamount);
+                  );
+                  return;
+                }
+                if (
+                  isNaN(parseFloat(tempDetail.taxamount)) ||
+                  moneyRound(tempDetail.taxamount) == 0
+                ) {
+                  tempDetail.taxedamount = parseFloat(tempDetail.amount);
+                } else {
+                  tempDetail.taxedamount =
+                    parseFloat(tempDetail.amount) +
+                    parseFloat(tempDetail.taxamount);
+                }
               }
             }
-          }
 
-          //淇濆瓨鏁版嵁
-          this.loading = true;
-          this.form.serviceFunddetails = 0;
-          this.rbDetails.map(item => {
-            this.form.serviceFunddetails += item.amount;
-          });
-          this.form.serviceFunddetails = this.rbDetails;
+            //淇濆瓨鏁版嵁
+            this.loading = true;
+            this.form.serviceFunddetails = 0;
+            this.rbDetails.map(item => {
+              this.form.serviceFunddetails += item.amount;
+            });
+            this.form.serviceFunddetails = this.rbDetails;
 
-          if (this.form.id != null) {
-          } else {
-            this.form.recordstatus = -1;
-          }
-
-          addorupdateFund(this.form).then(response => {
-            if (response.code === 200) {
-              this.$modal.msgSuccess("鐢宠鍗曚繚瀛樻垚鍔燂紒");
-              // 闈炴彁閱掔姸鎬佷笅鎵ц瀹℃壒瑙e喅寮傛璋冪敤寤惰繜闂
-              if (!this.Savereminder) {
-                let checkFundObj = {
-                  // fundid: this.checkObj.fundid,
-                  fundid: this.curId,
-                  flowconclusion: this.checkObj.flowlevelone,
-                  flowcontent: this.checkObj.flowconclusion
-                };
-                this.$modal.loading("姝e湪鎻愪氦瀹℃牳锛岃绋嶅�欙紒");
-                checkfund(checkFundObj).then(res => {
-                  //鍏抽棴绐楀彛
-                  this.$modal.closeLoading();
-                  this.$modal.msgSuccess("瀹℃牳瀹屾垚!");
-                  this.$store.dispatch("tagsView/delView", this.$route);
-                  this.$router.go(-1);
-                });
-              }
-              this.Getnetworkheader();
-              this.getroute();
-              this.getAccountList();
-              this.getUserList();
-              this.getUserProfile();
+            if (this.form.id != null) {
             } else {
-              this.$modal.msgError("鐢宠鍗曚繚瀛樺け璐ワ細" + response.msg);
+              this.form.recordstatus = -1;
             }
-          });
 
-          //鍏抽棴绐楀彛
-          this.loading = false;
-          // this.getfundList();
-        }
+            addorupdateFund(this.form).then(response => {
+              if (response.code === 200) {
+                this.$modal.msgSuccess("鐢宠鍗曚繚瀛樻垚鍔燂紒");
+                // 闈炴彁閱掔姸鎬佷笅鎵ц瀹℃壒瑙e喅寮傛璋冪敤寤惰繜闂
+                if (!this.Savereminder) {
+                  let checkFundObj = {
+                    // fundid: this.checkObj.fundid,
+                    fundid: this.curId,
+                    flowconclusion: this.checkObj.flowlevelone,
+                    flowcontent: this.checkObj.flowconclusion
+                  };
+                  this.$modal.loading("姝e湪鎻愪氦瀹℃牳锛岃绋嶅�欙紒");
+                  checkfund(checkFundObj).then(res => {
+                    if (res.code == 200) {
+                      //鍏抽棴绐楀彛
+                      this.$modal.closeLoading();
+                      this.$modal.msgSuccess("瀹℃牳瀹屾垚!");
+                      // 杩炵画瀹℃壒锛氳闂槸鍚︾户缁鎵逛笅涓�鍗�
+                      this.continueOrExit();
+                    } else {
+                      this.$modal.closeLoading();
+
+                      this.$modal.msgError(res.msg || "鎿嶄綔澶辫触");
+                    }
+                  });
+                }
+                this.Getnetworkheader();
+                this.getroute();
+                this.getAccountList();
+                this.getUserList();
+                this.getUserProfile();
+              } else {
+                this.$modal.msgError("鐢宠鍗曚繚瀛樺け璐ワ細" + response.msg);
+              }
+            });
+
+            //鍏抽棴绐楀彛
+            this.loading = false;
+            // this.getfundList();
+          }
+        });
       });
     },
     handleCheckAllChange(val) {
-      this.checkedCities = val ? this.cityOptions : [];
+      this.checkedCities = val ? this.filteredCityOptions.slice() : [];
       this.isIndeterminate = false;
     },
     handleCheckedCitiesChange(value) {
       let checkedCount = value.length;
-      this.checkAll = checkedCount === this.cityOptions.length;
+      this.checkAll =
+        this.filteredCityOptions.length > 0 &&
+        checkedCount === this.filteredCityOptions.length;
       this.isIndeterminate =
-        checkedCount > 0 && checkedCount < this.cityOptions.length;
+        checkedCount > 0 && checkedCount < this.filteredCityOptions.length;
     },
     // 鎵嬪姩璁$畻
     Manualcalculationfn() {
@@ -2874,19 +2589,85 @@
     // 鎵归噺褰曞叆鐐瑰嚮
     Batchentry() {
       // ethical
+      this.personKeyword = "";
+      this.checkedCities = [];
+      this.checkAll = false;
+      this.isIndeterminate = false;
       listReportname("ethical").then(res => {
         this.cityOptions = res.data;
       });
       this.batchdialogVisible = true;
     },
+    /**
+     * 鏄庣粏琛屾槸鍚︿负銆岀┖璁板綍銆嶏細鏈嶅姟椤圭洰銆佷笓瀹躲�佷笓瀹舵墍鍦ㄥ崟浣� 鏄惁閮戒负绌�
+     * 鐢ㄤ簬鎵归噺褰曞叆涓撳鏃跺垽鏂�"澶嶇敤鏈�鍚庝竴琛�"杩樻槸"杩藉姞鏂拌"
+     */
+    isBlankDetailRow(row) {
+      if (!row) {
+        return false;
+      }
+      const isEmpty = v =>
+        v === null || v === undefined || String(v).trim() === "";
+      return (
+        isEmpty(row.itemid) &&
+        isEmpty(row.beneficiaryname) &&
+        isEmpty(row.unitno) &&
+        isEmpty(row.unitname)
+      );
+    },
+    /** 鎵归噺褰曞叆寮规锛氬鍚�/鍗曚綅/宸ュ彿/韬唤璇佸悗4浣� 鍛戒腑鍒ゆ柇 */
+    personMatchKeyword(item, kw) {
+      const idcard = String(item.idcrad || "");
+      return (
+        String(item.reportName || "")
+          .toLowerCase()
+          .indexOf(kw) > -1 ||
+        String(item.unitname || "")
+          .toLowerCase()
+          .indexOf(kw) > -1 ||
+        String(item.reportNo || "")
+          .toLowerCase()
+          .indexOf(kw) > -1 ||
+        (idcard.length >= 4 && idcard.slice(-4).indexOf(kw) > -1)
+      );
+    },
     // 纭褰曞叆
     BatchentryFn() {
+      // 鏄庣粏涓凡鏈夌殑浜哄憳濮撳悕锛岀敤浜庨噸澶嶆彁閱�
+      const existed = {};
+      this.rbDetails.forEach(row => {
+        if (row.beneficiaryname) {
+          existed[String(row.beneficiaryname).trim()] = true;
+        }
+      });
+
+      // 2026-10-22锛氫慨姝�"瀵煎叆鍚庤〃鏍煎鍑轰竴琛岀┖璁板綍"銆�
+      // 瑙勫垯锛氬厛鐪嬫渶鍚庝竴鏉¤褰曪紝鑻ュ畠鐨�"鏈嶅姟椤圭洰 / 涓撳 / 涓撳鎵�鍦ㄥ崟浣�"閮芥槸绌虹殑锛�
+      // 璇存槑鏄竴鏉$┖璁板綍锛屽氨浠庤繖涓�琛屽紑濮嬪~锛涘惁鍒欒拷鍔犳柊琛屻��
+      let writeIndex = this.rbDetails.length;
+      if (
+        writeIndex > 0 &&
+        this.isBlankDetailRow(this.rbDetails[writeIndex - 1])
+      ) {
+        writeIndex -= 1;
+      }
+
+      const duplicated = [];
       this.checkedCities.forEach(item => {
+        const nameKey = String(item.reportName || "").trim();
+        if (nameKey && existed[nameKey]) {
+          duplicated.push(item.reportName);
+          return;
+        }
+        if (nameKey) {
+          existed[nameKey] = true;
+        }
         let rowData = {
           orderno: null,
           fundid: null,
           beneficiaryname: item.reportName,
           beneficiaryno: item.reportNo,
+          isunit: 0,
           unitname: item.unitname,
           unitno: null,
           uintuserno: null,
@@ -2929,13 +2710,25 @@
           annexfiles: null
         };
 
-        this.rbDetails.push(rowData);
+        if (writeIndex < this.rbDetails.length) {
+          // 澶嶇敤鏈�鍚庨偅鏉$┖璁板綍
+          this.rbDetails.splice(writeIndex, 1, rowData);
+        } else {
+          this.rbDetails.push(rowData);
+        }
+        writeIndex++;
       });
-      for (let i = 0; i < this.checkedCities.length + 1; i++) {
+      for (let i = 0; i < this.rbDetails.length; i++) {
         this.rbDetails[i].orderno = i + 1;
       }
       this.calculateTax();
       this.batchdialogVisible = false;
+      this.checkedCities = [];
+      if (duplicated.length) {
+        this.$modal.msgWarning(
+          "浠ヤ笅浜哄憳鍦ㄦ槑缁嗕腑宸插瓨鍦紝宸茶烦杩囬噸澶嶆坊鍔狅細" + duplicated.join("銆�")
+        );
+      }
     },
     //鏂板涓�琛�
     addRow(rowIndex) {
@@ -2945,6 +2738,7 @@
         fundid: null,
         beneficiaryname: null,
         beneficiaryno: null,
+        isunit: 0,
         unitname: null,
         itemdescribe: null,
         unitno: null,
@@ -3041,33 +2835,32 @@
         });
       //鍏ㄩ儴鍒犻櫎鍚庢坊鍔犱竴鏉℃柊琛�
     },
-    //璁$畻鎬婚噾棰�
+    //璁$畻鎬婚噾棰濓紙閲戦涓�寰嬭蛋绮剧‘杩愮畻锛岀姝� parseFloat 绱姞锛�
     sumTotalFee(row) {
-      let allSum = 0;
+      const detailsArr = [];
       if (this.form.applytype != null) {
         for (let i = 0; i < this.rbDetails.length; i++) {
+          const detail = this.rbDetails[i];
           let totalFee = 0;
           let taxFee = 0;
           if (this.form.applytype == 1 || this.form.applytype == 2) {
-            //璁$畻褰撳墠鎶ラ攢鍐呭璐圭敤鍚堣
-            if (!isNaN(parseFloat(this.rbDetails[i].amount))) {
-              totalFee += parseFloat(this.rbDetails[i].amount);
-              taxFee += parseFloat(this.rbDetails[i].amount);
+            //璁$畻褰撳墠鎶ラ攢鍐呭璐圭敤鍚堣锛氱◣鍓� - 鎵g◣
+            if (!isNaN(parseFloat(detail.amount))) {
+              totalFee = moneySub(totalFee, -parseFloat(detail.amount));
+              taxFee = moneySub(taxFee, -parseFloat(detail.amount));
             }
-            if (!isNaN(parseFloat(this.rbDetails[i].taxamount))) {
-              totalFee -= parseFloat(this.rbDetails[i].taxamount);
-              taxFee -= parseFloat(this.rbDetails[i].taxamount);
+            if (!isNaN(parseFloat(detail.taxamount))) {
+              totalFee = moneySub(totalFee, detail.taxamount);
+              taxFee = moneySub(taxFee, detail.taxamount);
             }
           } else if (this.form.applytype == 3 || this.form.applytype == 4) {
             //鍗曚环*鏁伴噺=绋庡墠閲戦
             if (
-              !isNaN(parseFloat(this.rbDetails[i].price)) &&
-              !isNaN(parseFloat(this.rbDetails[i].quantity))
+              !isNaN(parseFloat(detail.price)) &&
+              !isNaN(parseFloat(detail.quantity))
             ) {
-              totalFee +=
-                parseFloat(this.rbDetails[i].price) *
-                parseFloat(this.rbDetails[i].quantity);
-              this.rbDetails[i].amount = totalFee;
+              totalFee = moneyMul(detail.price, detail.quantity);
+              detail.amount = totalFee;
             }
           }
 
@@ -3076,9 +2869,10 @@
           //   this.rbDetails[i].taxedamount = taxFee.toFixed(2);
           // }
 
-          allSum += totalFee;
+          detailsArr.push(totalFee);
         }
       }
+      const allSum = moneyRound(moneySum(detailsArr));
       // this.form.amountrequested = allSum.toFixed(2);
       // this.$forceUpdate();
     },
@@ -3153,7 +2947,21 @@
       // 鍥剧墖鍔犺浇鎴愬姛鏃舵墽琛岀殑鎿嶄綔
       console.log("Image loaded successfully");
     },
-    handleUploadError() {},
+    handleImageClick(index) {
+      this.currentIndex = index;
+      this.viewerVisible = true;
+    },
+    invoicehandleImageClick(index) {
+      this.invoicecurrentIndex = index;
+      this.invoiceviewerVisible = true;
+    },
+    handleViewerClose() {
+      this.viewerVisible = false;
+    },
+    invoicehandleViewerClose() {
+      this.invoiceviewerVisible = false;
+    },
+    handleUploadError() { },
     remove(file, fileList) {
       const rbDetails = [...this.rbDetails];
       if (this.activeName == "common") {
@@ -3165,7 +2973,43 @@
       }
     },
 
+    /**
+     * 2026-10-15锛氫笂浼犳椂鏍¢獙闄勪欢鏂囦欢鍚嶏紙涓氬姟瑕佹眰锛氫笉鍚堟牸绔嬪嵆鎻愮ず涓斾笉鍔犲叆鍒楄〃锛夈��
+     * 瑙勫垯涓庡悗绔� AttachmentNameValidator 鍚屽彛寰勶細蹇呴』鍚腑鏂� / 鍘绘帀鎵╁睍鍚嶅悗涓诲共 鈮�20 瀛� /
+     * 涓嶅惈绌烘牸鍙� / \ : * ? " < > | # % 绛夌壒娈婂瓧绗︺��
+     */
+    checkUploadFileName(file) {
+      const raw = file && file.raw ? file.raw.name : file && file.name;
+      const r = checkFileName(raw);
+      if (!r.ok) {
+        this.$modal.msgError(r.msg);
+        return false;
+      }
+      return true;
+    },
+
+    /**
+     * 2026-10-15锛氫繚瀛樺墠鏍¢獙鏁村崟鏄庣粏闄勪欢鏂囦欢鍚嶏紙鍚悓涓�琛屽唴閲嶅悕锛夈��
+     * 鍙e緞锛堜笟鍔$‘璁わ級锛氬彧鏍¢獙"鏈鍙樻洿"鐨勯檮浠垛�斺�旇�佸崟鎹噷宸插瓨鍦ㄧ殑涓嶅悎瑙勯檮浠跺悕涓嶈兘鎶婁繚瀛樺崱姝�
+     * 锛堝惁鍒欒�佸崟鎹敼涓�涓噾棰濋兘瀛樹笉杩涘幓锛夈�傚悗绔寜 id 璇绘棫璁板綍鏀捐鍘嗗彶闄勪欢锛涘墠绔嬁涓嶅埌"鍝簺鏄巻鍙�"
+     * 鐨勬潈濞佷俊鎭紝鍥犳**浠呮柊澧炲崟鎹�**鍋氫繚瀛樺墠鎷︽埅锛岀紪杈戣�佸崟鎹椂鏂板鐨勪笉鍚堣闄勪欢鐢卞悗绔簩娆℃牎楠屾嫤涓嬨��
+     */
+    checkDetailFileNames() {
+      if (this.form && this.form.id) {
+        return true;
+      }
+      const c = checkDetails(this.rbDetails);
+      if (!c.ok) {
+        this.$modal.msgError(c.msg);
+        return false;
+      }
+      return true;
+    },
+
     uploadSccess(response, file, fileList) {
+      if (!this.checkUploadFileName(file)) {
+        return;
+      }
       this.rbDetails;
       const config = {
         headers: { Authorization: "Bearer " + this.ICDtoken }
@@ -3539,6 +3383,10 @@
     //涓撳/鍖荤枟鏈烘瀯/璐圭敤鎶ラ攢鏈烘瀯閫夋嫨
     confirmSelectionDialog() {
       this.$refs["accountselectform"].validate(valid => {
+        // 2026-10-19锛氬師鏉ユ病鏈夊垽鏂� valid锛屾牎楠屽け璐ヤ篃鐓ф牱寰�涓嬭蛋銆佺収鏍蜂繚瀛橈紙鏄熷彿/绾㈠瓧褰㈠悓铏氳锛�
+        if (!valid) {
+          return;
+        }
         let tempIndex = this.accountselectform.index;
         if (this.selectionType == "account") {
           if (this.accountfrom == "1") {
@@ -3555,8 +3403,8 @@
                   if (hasIdOne) {
                     this.$modal.msgWarning(
                       "鏈嶅姟椤圭洰琛ㄤ腑锛屼汉鍛樺悕绉帮細" +
-                        res.username +
-                        "閲嶅锛岃娉ㄦ剰鏍稿淇℃伅锛�"
+                      res.username +
+                      "閲嶅锛岃娉ㄦ剰鏍稿淇℃伅锛�"
                     );
                   }
                   this.rbDetails[tempIndex].beneficiaryno = res.userno;
@@ -3567,11 +3415,13 @@
                   this.rbDetails[tempIndex].phone = res.telephone;
 
                   if (res.usertype == "org") {
+                    this.$set(this.rbDetails[tempIndex], "isunit", 1);
                     this.rbDetails[tempIndex].idcardno = "";
                     this.rbDetails[tempIndex].title = "";
                     this.rbDetails[tempIndex].unitno = "";
                     this.rbDetails[tempIndex].unitname = "";
                   } else {
+                    this.$set(this.rbDetails[tempIndex], "isunit", 0);
                     this.rbDetails[tempIndex].idcardno = res.idcardno;
                     this.rbDetails[tempIndex].title = res.title;
                     this.rbDetails[tempIndex].unitno = parseInt(res.unitno);
@@ -3677,12 +3527,14 @@
                       this.rbDetails[tempIndex].bankcardno = res.bankcardno;
                       this.rbDetails[tempIndex].phone = res.telephone;
 
-                      if (res.usertype == "org") {
+                      if (this.hasUserType(res.usertype, "org")) {
+                        this.$set(this.rbDetails[tempIndex], "isunit", 1);
                         this.rbDetails[tempIndex].idcardno = "";
                         this.rbDetails[tempIndex].title = "";
                         this.rbDetails[tempIndex].unitno = "";
                         this.rbDetails[tempIndex].unitname = "";
                       } else {
+                        this.$set(this.rbDetails[tempIndex], "isunit", 0);
                         this.rbDetails[tempIndex].idcardno = res.idcardno;
                         this.rbDetails[tempIndex].title = res.title;
                         this.rbDetails[tempIndex].unitno = parseInt(res.unitno);
@@ -3728,11 +3580,14 @@
         return;
       }
 
-      if (regex.test(row.idcardno)) {
-        row.error = "";
-      } else {
-        row.error = "韬唤璇佸彿鐮佹牸寮忛敊璇�";
-      }
+      //韬唤璇侀噸澶嶉獙璇�
+      getInfoByIDCardNo(idcardno).then(res => {
+        if (res.data.length > 1) {
+          this.$modal.msgWarning("韬唤璇佸彿淇℃伅宸茶鐧昏锛岃妫�鏌ヨ韩浠借瘉鍙凤紒"
+          );
+          return;
+        }
+      });
     },
 
     //璐︽埛绫诲瀷閫夋嫨鍙樺寲
@@ -3747,6 +3602,12 @@
     }
   },
 
+  // 澶辩劍鏃舵墜鍔ㄨЕ鍙戞牎楠岋紙鍙�夛紝閫氬父閰嶇疆浜� trigger: 'blur' 鍚庝細鑷姩瑙﹀彂锛�
+  handleIdCardBlur() {
+    // 鎵嬪姩鏍¢獙鍗曚釜瀛楁锛岀‘淇濆け鐒︽椂绔嬪埢鐪嬪埌缁撴灉
+    this.$refs.showselectiondialog.validateField('idcardno');
+  },
+
   //鐢熷懡鍛ㄦ湡 - 鍒涘缓瀹屾垚锛堝彲浠ヨ闂綋鍓峵his瀹炰緥锛�
   created() {
     //鑾峰彇璺敱鍙傛暟
@@ -3758,7 +3619,9 @@
 
   //鐢熷懡鍛ㄦ湡 - 鎸傝浇瀹屾垚锛堝彲浠ヨ闂瓺OM鍏冪礌锛�
   mounted() {
-    window.addEventListener("beforeunload", e => this.beforeunloadHandler(e));
+    // 瀛樹綇鍚屼竴涓紩鐢紝鍚﹀垯 removeEventListener 浼犳柊绠ご鍑芥暟鏃犳硶鐪熸绉婚櫎锛屼細娉勬紡鐩戝惉鍣�
+    this._beforeUnloadHandler = e => this.beforeunloadHandler(e);
+    window.addEventListener("beforeunload", this._beforeUnloadHandler);
     this.getUserList();
     let apiaccountselectform = this.accountselectform;
     let apiform = this.form;
@@ -3768,15 +3631,18 @@
     this.$destroy();
     next();
   },
-  beforeCreate() {}, //鐢熷懡鍛ㄦ湡 - 鍒涘缓涔嬪墠
-  beforeMount() {}, //鐢熷懡鍛ㄦ湡 - 鎸傝浇涔嬪墠
-  beforeUpdate() {}, //鐢熷懡鍛ㄦ湡 - 鏇存柊涔嬪墠
-  updated() {}, //鐢熷懡鍛ㄦ湡 - 鏇存柊涔嬪悗
-  beforeDestroy() {}, //鐢熷懡鍛ㄦ湡 - 閿�姣佷箣鍓�
+  beforeCreate() { }, //鐢熷懡鍛ㄦ湡 - 鍒涘缓涔嬪墠
+  beforeMount() { }, //鐢熷懡鍛ㄦ湡 - 鎸傝浇涔嬪墠
+  beforeUpdate() { }, //鐢熷懡鍛ㄦ湡 - 鏇存柊涔嬪墠
+  updated() { }, //鐢熷懡鍛ㄦ湡 - 鏇存柊涔嬪悗
+  beforeDestroy() { }, //鐢熷懡鍛ㄦ湡 - 閿�姣佷箣鍓�
   destroyed() {
-    window.removeEventListener("beforeunload", e => this.beforeunloadFn(e));
+    if (this._beforeUnloadHandler) {
+      window.removeEventListener("beforeunload", this._beforeUnloadHandler);
+      this._beforeUnloadHandler = null;
+    }
   }, //鐢熷懡鍛ㄦ湡 - 閿�姣佸畬鎴�
-  activated() {} //濡傛灉椤甸潰鏈塳eep-alive缂撳瓨鍔熻兘锛岃繖涓嚱鏁颁細瑙﹀彂
+  activated() { } //濡傛灉椤甸潰鏈塳eep-alive缂撳瓨鍔熻兘锛岃繖涓嚱鏁颁細瑙﹀彂
 };
 </script>
 
@@ -3859,7 +3725,7 @@
   line-height: 25px;
 }
 
-::v-deep .el-checkbox.is-bordered + .el-checkbox.is-bordered {
+::v-deep .el-checkbox.is-bordered+.el-checkbox.is-bordered {
   margin-left: 0 !important;
   margin-bottom: 10px;
 }

--
Gitblit v1.9.3