From 8f059b6cc8daf96433ac699543996c9e1260023c Mon Sep 17 00:00:00 2001
From: sinake <sinake1@qq.com>
Date: 星期五, 30 十月 2026 09:58:04 +0800
Subject: [PATCH] Merge branch 'master' of http://116.62.18.175:6699/r/~yxh/opo-web

---
 src/views/project/fund/performancedetails/index.vue |  131 ++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 120 insertions(+), 11 deletions(-)

diff --git a/src/views/project/fund/performancedetails/index.vue b/src/views/project/fund/performancedetails/index.vue
index 6cfb93d..bbddd00 100644
--- a/src/views/project/fund/performancedetails/index.vue
+++ b/src/views/project/fund/performancedetails/index.vue
@@ -11,7 +11,7 @@
                 clearable
                 style="width: 100%"
                 v-model="form.applyTime"
-                type="date"
+                type="date" format="yyyy-MM-dd"
                 value-format="yyyy-MM-dd HH:mm:ss"
                 placeholder="鐢宠鏃ユ湡"
                 :disabled="true"
@@ -59,9 +59,17 @@
           </el-col>
         </el-row>
         <el-row>
-          <el-col :span="5">
-            <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
-              <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+           <el-col :span="5">
+            <el-form-item label="缁╂晥鏃ユ湡" prop="jxrq">
+              <el-date-picker
+                clearable
+                style="width: 100%"
+                v-model="form.jxrq"
+                type="date" format="yyyy-MM-dd"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                placeholder="缁╂晥鏃ユ湡"
+              >
+              </el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :span="5">
@@ -90,9 +98,14 @@
               </el-select>
             </el-form-item>
           </el-col>
+          <el-col :span="5">
+            <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+              <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+            </el-form-item>
+          </el-col>
         </el-row>
         <el-row style="text-align: left">
-          <el-col :span="8">
+          <el-col :span="12">
             <el-form-item label="鐢宠璇存槑" prop="remark">
               <el-input v-model="form.remark" placeholder="鐢宠璇存槑" />
             </el-form-item>
@@ -280,6 +293,31 @@
                       : "鐐瑰嚮閫夋嫨"
                   }}</el-button
                 >
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="deptName"
+              align="center"
+              label="缁╂晥绉戝"
+              width="160"
+            >
+              <template slot-scope="scope">
+                <el-select
+                  v-model="scope.row.deptId"
+                  size="mini"
+                  clearable
+                  filterable
+                  placeholder="璇烽�夋嫨缁╂晥绉戝"
+                  style="width: 100%"
+                  @change="value => handleRowDeptChange(scope.row, value)"
+                >
+                  <el-option
+                    v-for="dept in deptList"
+                    :key="dept.deptId"
+                    :label="dept.deptName"
+                    :value="dept.deptId"
+                  />
+                </el-select>
               </template>
             </el-table-column>
             <el-table-column
@@ -858,7 +896,8 @@
             :label="city"
             :key="city.id"
             >{{ city.username }}{{ city.isUnitPerson ? "锛堝崟浣嶏級" : ""
-            }}{{ city.unitname ? " 路 " + city.unitname : "" }}</el-checkbox
+            }}{{ city.unitname ? " 路 " + city.unitname : ""
+            }}{{ city.deptName ? " 路 绉戝锛�" + city.deptName : "" }}</el-checkbox
           >
         </el-checkbox-group>
       </div>
@@ -915,10 +954,12 @@
 import { listItemexpense } from "@/api/project/itemexpense";
 
 import { getUserProfile } from "@/api/system/user";
+import { listDept } from "@/api/system/dept";
 import Li_area_select from "@/components/Address";
 import OrgSelecter from "@/views/project/components/orgselect";
 import { getToken } from "@/utils/auth";
 import { moneySum, moneyAdd, moneySub, moneyRound } from "@/utils/money";
+import { checkFileName, checkDetails } from "@/utils/fileNameCheck";
 import CustomImageViewer from "@/components/CustomImageViewer";
 
 export default {
@@ -969,6 +1010,8 @@
       expertlist: [],
       //鍖荤枟鏈烘瀯鍒楄〃
       unitList: [],
+      //缁╂晥绉戝鍒楄〃
+      deptList: [],
       //璐圭敤鎶ラ攢鏈烘瀯鍒楄〃
       feeUnitList: [],
       batchdialogVisible: false,
@@ -1660,6 +1703,11 @@
     },
     /** 鎻愪氦鎸夐挳 */
     submitForm: debounce(function() {
+      // 2026-10-15锛氫繚瀛樺墠闄勪欢鏂囦欢鍚嶈鑼冩牎楠岋紙浠呮柊澧炲崟鎹紱鑰佸崟鎹殑鍘嗗彶闄勪欢鐢卞悗绔寜"鍙牎楠屾湰娆″彉鏇�"鏀捐锛�
+      if (!this.checkDetailFileNames()) {
+        return;
+      }
+
       if (!this.randomnumber) {
         this.randomnumber = this.generateRandomString(9);
         this.form.randomnumber = this.randomnumber;
@@ -1885,11 +1933,7 @@
           this.$router.go(-1);
         } else {
           this.$modal.closeLoading();
-          if (res.msg) {
-            this.$modal.msgError("鎿嶄綔澶辫");
-          } else {
-            this.$modal.msgError(res.msg);
-          }
+          this.$modal.msgError(res.msg || "鎿嶄綔澶辫触");
         }
       });
     },
@@ -1998,6 +2042,25 @@
         this.feeUnitList = res.data;
         console.log(this.feeUnitList);
       });
+    },
+
+    /** 缁╂晥绉戝鍒楄〃 */
+    getDeptList() {
+      listDept({}).then(res => {
+        this.deptList = res.data || [];
+      });
+    },
+
+    /** 琛ㄦ牸鍐呯洿鎺ヤ慨鏀圭哗鏁堢瀹わ細鍚屾鍚嶇О */
+    handleRowDeptChange(row, deptId) {
+      if (deptId === null || deptId === undefined || deptId === "") {
+        this.$set(row, "deptName", null);
+        return;
+      }
+      const dept = this.deptList.find(
+        item => String(item.deptId) === String(deptId)
+      );
+      this.$set(row, "deptName", dept ? dept.deptName : null);
     },
 
     //鑾峰彇鍖荤枟鏈烘瀯鍒楄〃
@@ -2182,6 +2245,11 @@
     },
     // 鎺ュ彈鎻愰啋绔嬪埢淇濆瓨
     Savenow() {
+      // 2026-10-15锛氫繚瀛樺墠闄勪欢鏂囦欢鍚嶈鑼冩牎楠岋紙浠呮柊澧炲崟鎹紱鑰佸崟鎹殑鍘嗗彶闄勪欢鐢卞悗绔寜"鍙牎楠屾湰娆″彉鏇�"鏀捐锛�
+      if (!this.checkDetailFileNames()) {
+        return;
+      }
+
       if (!this.randomnumber) {
         this.randomnumber = this.generateRandomString(9);
         this.form.randomnumber = this.randomnumber;
@@ -2502,6 +2570,8 @@
           isunit: isunit ? 1 : 0,
           unitname: item.unitname,
           unitno: item.unitno,
+          deptId: item.deptId,
+          deptName: item.deptName,
           uintuserno: null,
           title: item.title,
           idcardtype: null,
@@ -2727,6 +2797,8 @@
         singleDetail.title = person.title;
         singleDetail.unitname = person.unitname;
         singleDetail.unitno = person.unitno;
+        singleDetail.deptId = person.deptId;
+        singleDetail.deptName = person.deptName;
       } else {
         // 鎵嬪伐杈撳叆鐨勪汉鍛橈細鍙啓濮撳悕锛岃韩浠借瘉鍙�/閾惰璐﹀彿鐢辩粡鍔炰汉濉啓
         singleDetail.beneficiaryname = String(key);
@@ -2763,7 +2835,43 @@
         this.Networkheader = string.slice(0, index + 4); // 鎴彇8032鍙婂叾鍓嶉儴瀛楃
       }
     },
+    /**
+     * 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 }
@@ -3119,6 +3227,7 @@
     this.getExternalList();
     this.getFeeUnitList();
     this.listperformance();
+    this.getDeptList();
   },
 
   //鐢熷懡鍛ㄦ湡 - 鎸傝浇瀹屾垚锛堝彲浠ヨ闂瓺OM鍏冪礌锛�

--
Gitblit v1.9.3