From 0e10e10157b90002b99996914eaf1e5574924ddf Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期一, 12 十月 2026 11:15:50 +0800
Subject: [PATCH] 修改了报销校验

---
 src/views/project/externalperson/index.vue |  110 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 78 insertions(+), 32 deletions(-)

diff --git a/src/views/project/externalperson/index.vue b/src/views/project/externalperson/index.vue
index c818a8a..af8db6b 100644
--- a/src/views/project/externalperson/index.vue
+++ b/src/views/project/externalperson/index.vue
@@ -47,9 +47,10 @@
 
     <el-table v-loading="loading" :data="externalpersonList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="璐﹀彿绫诲埆" align="center" prop="usertype">
+      <el-table-column label="璐﹀彿绫诲埆" align="center" prop="usertype" width="220">
         <template slot-scope="scope">
-          <dict-tag :options="dict.type.sys_UserType" :value="scope.row.usertype" />
+          <dict-tag v-for="t in splitUserType(scope.row.usertype)" :key="t"
+            :options="dict.type.sys_UserType" :value="t" />
         </template>
       </el-table-column>
       <el-table-column label="璐﹀彿缂栧彿" align="center" prop="userno" />
@@ -90,7 +91,7 @@
       <el-form ref="form" :model="form" :rules="rules" label-width="120px">
         <el-row>
           <el-col :span="12"><el-form-item label="璐﹀彿绫诲埆" prop="usertype">
-              <el-select v-model="form.usertype" placeholder="璇烽�夋嫨璐﹀彿绫诲埆">
+              <el-select v-model="form.usertype" multiple collapse-tags placeholder="璇烽�夋嫨璐﹀彿绫诲埆锛堝彲澶氶�夛級">
                 <el-option v-for="dict in dict.type.sys_UserType" :key="dict.value" :label="dict.label"
                   :value="dict.value"></el-option>
               </el-select>
@@ -109,8 +110,8 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="鍚敤鐘舵��" prop="userstatus" :disabled="ismanager == false">
-              <el-radio-group v-model="form.userstatus">
+            <el-form-item label="鍚敤鐘舵��" prop="userstatus" >
+              <el-radio-group v-model="form.userstatus" :disabled="!ismanager">
                 <el-radio v-for="dict in dict.type.sys_0_1" :key="dict.value" :label="parseInt(dict.value)">{{
                   dict.label
                 }}</el-radio>
@@ -118,14 +119,14 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row v-if="form.usertype != 'org'">
+        <el-row v-if="!isUnitForm">
           <el-col :span="24">
             <el-form-item label="韬唤璇佸彿" prop="idcardno">
               <el-input v-model="form.idcardno" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row v-if="form.usertype != 'org'"><el-col :span="12">
+        <el-row v-if="!isUnitForm"><el-col :span="12">
             <el-form-item label="鎬у埆" prop="sex">
               <el-select v-model="form.sex" placeholder="璇烽�夋嫨鎬у埆">
                 <el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label"
@@ -140,7 +141,7 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row v-if="form.usertype != 'org'">
+        <el-row v-if="!isUnitForm">
           <el-col :span="12">
             <el-form-item label="鎵�鍦ㄥ崟浣�" prop="unitname">
               <el-select v-model="form.unitno" placeholder="鎵�鍦ㄥ崟浣�" clearable filterable allow-create style="width: 100%">
@@ -253,6 +254,9 @@
         usertype: null
       },
 
+      //鏄惁鏄笓瀹惰垂鐨凮PO瀹℃壒浜哄憳
+      ismanager: false,
+      
       // 鏌ヨ鏈�鏂板簭鍙峰弬鏁�
       seqnoParams: {
         businessType: "externalperson",
@@ -269,7 +273,19 @@
           { required: true, message: "璇疯緭鍏ヨ处鎴峰悕绉�", trigger: "blur" }
         ],
         idcardno: [
-          { required: true, message: "璇疯緭鍏ヨ韩浠借瘉鍙风爜", trigger: "blur" }
+          {
+            //璐﹀彿绫诲埆涓�"鍗曚綅鏈烘瀯"鏃舵棤闇�韬唤璇佸彿
+            validator: (rule, value, callback) => {
+              if (this.hasUserType(this.form.usertype, "org")) {
+                return callback();
+              }
+              if (!value || !String(value).trim()) {
+                return callback(new Error("璇疯緭鍏ヨ韩浠借瘉鍙风爜"));
+              }
+              return callback();
+            },
+            trigger: "blur"
+          }
         ],
         bankcardno: [
           { required: true, message: "璇疯緭鍏ラ摱琛岃处鍙�", trigger: "blur" }
@@ -277,10 +293,14 @@
         depositbank: [
           { required: true, message: "璇疯緭鍏ュ紑鎴烽摱琛�", trigger: "blur" }
         ]
-      },
-      //鏄惁鏄笓瀹惰垂鐨凮PO瀹℃壒浜哄憳
-      ismanager: false
+      },      
     };
+  },
+  computed: {
+    /** 琛ㄥ崟鏄惁閫夋嫨浜�"鍗曚綅鏈烘瀯"锛堣处鍙风被鍒负澶氬�硷紝鍚� org 鍗充负鍗曚綅锛� */
+    isUnitForm() {
+      return this.hasUserType(this.form.usertype, "org");
+    }
   },
   created() {
     this.getUserProfile();
@@ -291,17 +311,32 @@
   methods: {
     //鑾峰彇褰撳墠鐢ㄦ埛淇℃伅
     getUserProfile() {
-      getUserProfile().then(res => {
-        if (
-          res.data.userName == "admin" ||
-          res.data.userName == "053" ||
-          res.data.userName == "047"
-        ) {
-          this.ismanager = true;
-        } else {
-          this.ismanager = false;
-        }
+      getUserProfile().then(res => {        
+        const managerList = ["admin", "048", "047"];
+        this.ismanager = managerList.includes(res.data.userName);
       });
+    },
+
+    /** 浜哄憳绫诲瀷锛堝鍊硷紝閫楀彿鍒嗛殧锛夎浆鏁扮粍 */
+    splitUserType(usertype) {
+      if (!usertype) {
+        return [];
+      }
+      if (Array.isArray(usertype)) {
+        return usertype;
+      }
+      return String(usertype)
+        .split(",")
+        .map(t => t.trim())
+        .filter(t => t);
+    },
+    /** 浜哄憳绫诲瀷鏁扮粍杞�楀彿鍒嗛殧瀛楃涓� */
+    joinUserType(usertype) {
+      return Array.isArray(usertype) ? usertype.join(",") : usertype;
+    },
+    /** 浜哄憳绫诲瀷鏄惁鍖呭惈鎸囧畾绫诲瀷锛堝 org = 鍗曚綅鏈烘瀯锛� */
+    hasUserType(usertype, code) {
+      return this.splitUserType(usertype).indexOf(code) > -1;
     },
 
     /** 鏌ヨ鍗曚綅銆佷汉鍛樿处鍙峰垪琛� */
@@ -337,7 +372,7 @@
         userno: null,
         username: null,
         userstatus: 0,
-        usertype: null,
+        usertype: [],
         personnelunitno: null,
         delFlag: null,
         createBy: null,
@@ -389,6 +424,8 @@
       const id = row.id || this.ids;
       getExternalperson(id).then(response => {
         this.form = response.data;
+        //璐﹀彿绫诲埆涓哄鍊硷紙閫楀彿鍒嗛殧锛夛紝琛ㄥ崟鐢ㄦ暟缁勫洖鏄�
+        this.form.usertype = this.splitUserType(response.data.usertype);
         this.open = true;
         this.title = "浜哄憳/鍗曚綅璐﹀彿淇℃伅淇敼";
       });
@@ -402,6 +439,8 @@
             if (res.organizationid == this.form.unitno)
               this.form.unitname = res.organizationname;
           });
+          //璐﹀彿绫诲埆涓哄鍊硷細鎻愪氦鍓嶈浆鍥為�楀彿鍒嗛殧鐨勫瓧绗︿覆
+          this.form.usertype = this.joinUserType(this.form.usertype);
           console.log(this.form);
           if (this.form.id != null) {
             updateExternalperson(this.form).then(response => {
@@ -411,15 +450,8 @@
               this.getList();
             });
           } else {
-            //妫�鏌ヨ韩浠借瘉鍞竴
-            getInfoByIDCardNo(this.form.idcardno).then(res => {
-              if (res.data.length > 1) {
-                this.$modal.msgWarning("韬唤璇佸彿淇℃伅宸茶鐧昏锛岃妫�鏌ヨ韩浠借瘉鍙凤紒"
-                );
-                return;
-              }
-
-              //淇濆瓨淇℃伅
+            //淇濆瓨淇℃伅锛堝崟浣嶈处鍙锋病鏈夎韩浠借瘉鍙凤紝璺宠繃韬唤璇佹煡閲嶏級
+            const saveNew = () => {
               getOnlyCode(this.seqnoParams).then(res => {
                 this.form.userno = res.data.currentvalue;
 
@@ -430,7 +462,21 @@
                   this.getList();
                 });
               });
+            };
 
+            if (!this.form.idcardno || !String(this.form.idcardno).trim()) {
+              saveNew();
+              return;
+            }
+
+            //妫�鏌ヨ韩浠借瘉鍞竴
+            getInfoByIDCardNo(this.form.idcardno).then(res => {
+              if (res.data.length > 1) {
+                this.$modal.msgWarning("韬唤璇佸彿淇℃伅宸茶鐧昏锛岃妫�鏌ヨ韩浠借瘉鍙凤紒"
+                );
+                return;
+              }
+              saveNew();
             });
           }
         }

--
Gitblit v1.9.3