From d4b9b197632366be60796f059030394aef6802ea Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期日, 17 五月 2026 19:29:30 +0800
Subject: [PATCH] 专家类型多选

---
 src/views/project/externalperson/index.vue |  585 +++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 437 insertions(+), 148 deletions(-)

diff --git a/src/views/project/externalperson/index.vue b/src/views/project/externalperson/index.vue
index 995715b..dd83482 100644
--- a/src/views/project/externalperson/index.vue
+++ b/src/views/project/externalperson/index.vue
@@ -1,178 +1,356 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="80px">
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      :inline="true"
+      v-show="showSearch"
+      label-width="80px"
+    >
       <el-form-item label="璐﹀彿缂栧彿" prop="userno">
-        <el-input v-model="queryParams.userno" placeholder="璇疯緭鍏ヨ处鍙风紪鍙�" clearable size="small"
-          @keyup.enter.native="handleQuery" />
+        <el-input
+          v-model="queryParams.userno"
+          placeholder="璇疯緭鍏ヨ处鍙风紪鍙�"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
       </el-form-item>
       <el-form-item label="璐﹀彿鍚嶇О" prop="username">
-        <el-input v-model="queryParams.username" placeholder="璇疯緭鍏ヨ处鍙峰悕绉�" clearable size="small"
-          @keyup.enter.native="handleQuery" />
+        <el-input
+          v-model="queryParams.username"
+          placeholder="璇疯緭鍏ヨ处鍙峰悕绉�"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
       </el-form-item>
       <el-form-item label="璐﹀彿绫诲埆" prop="usertype">
-        <el-select v-model="queryParams.usertype" placeholder="璇烽�夋嫨璐﹀彿绫诲埆" clearable size="small">
-          <el-option v-for="dict in dict.type.sys_UserType" :key="dict.value" :label="dict.label" :value="dict.value" />
+        <el-select
+          v-model="queryParams.usertype"
+          placeholder="璇烽�夋嫨璐﹀彿绫诲埆"
+          clearable
+          size="small"
+          multiple
+          collapse-tags
+        >
+          <el-option
+            v-for="dict in dict.type.sys_UserType"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+          >鎼滅储</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+          >閲嶇疆</el-button
+        >
       </el-form-item>
     </el-form>
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
-          v-hasPermi="['project:externalperson:add']">鏂板</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['project:externalperson:add']"
+          >鏂板</el-button
+        >
       </el-col>
       <el-col :span="1.5">
-        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
-          v-hasPermi="['project:externalperson:edit']">淇敼</el-button>
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['project:externalperson:edit']"
+          >淇敼</el-button
+        >
       </el-col>
       <el-col :span="1.5">
-        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
-          v-hasPermi="['project:externalperson:remove']">鍒犻櫎</el-button>
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['project:externalperson:remove']"
+          >鍒犻櫎</el-button
+        >
       </el-col>
       <el-col :span="1.5">
-        <el-button type="warning" plain icon="el-icon-download" size="mini" :loading="exportLoading" @click="handleExport"
-          v-hasPermi="['project:externalperson:export']">瀵煎嚭</el-button>
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['project:externalperson:export']"
+          >瀵煎嚭</el-button
+        >
       </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="externalpersonList" @selection-change="handleSelectionChange">
+    <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="200">
         <template slot-scope="scope">
-          <dict-tag :options="dict.type.sys_UserType" :value="scope.row.usertype" />
+          <div v-if="scope.row.usertype">
+            <el-tag
+              v-for="type in getTypeList(scope.row.usertype)"
+              :key="type"
+              size="small"
+              style="margin-right: 5px; margin-bottom: 3px"
+            >
+              {{ getTypeLabel(type) }}
+            </el-tag>
+          </div>
+          <span v-else>-</span>
         </template>
       </el-table-column>
       <el-table-column label="璐﹀彿缂栧彿" align="center" prop="userno" />
       <el-table-column label="璐﹀彿鍚嶇О" align="center" prop="username" />
-      <el-table-column label="韬唤璇佸彿" width="200" align="center" prop="idcardno" />
+      <el-table-column
+        label="韬唤璇佸彿"
+        width="200"
+        align="center"
+        prop="idcardno"
+      />
       <el-table-column label="鑱岀О" align="center" prop="title">
         <template slot-scope="scope">
-          <dict-tag :options="dict.type.sys_professionaltitle" :value="scope.row.title" /> </template></el-table-column>
-      <el-table-column label="鍗曚綅鍚嶇О" width="250" align="center" prop="unitname" />
-      <!--
-      <el-table-column label="鎬у埆" align="center" prop="sex">
+          <dict-tag
+            :options="dict.type.sys_professionaltitle"
+            :value="scope.row.title"
+          /> </template
+      ></el-table-column>
+      <el-table-column
+        label="鍗曚綅鍚嶇О"
+        width="250"
+        align="center"
+        prop="unitname"
+      />
+      <el-table-column
+        label="鎿嶄綔"
+        align="center"
+        class-name="small-padding fixed-width"
+        width="150"
+      >
         <template slot-scope="scope">
-          <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.sex" />
-        </template>
-      </el-table-column>
-      <el-table-column label="鍗曚綅宸ヤ綔缂栧彿" align="center" prop="personnelunitno" />
-      <el-table-column label="鍦ㄨ亴鐘舵��" align="center" prop="userstatus">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.sys_0_1" :value="scope.row.userstatus" />
-        </template>
-      </el-table-column>
-      <el-table-column label="鑱旂郴鐢佃瘽" width="200" align="center" prop="telephone" />
-      <el-table-column label="鑱旂郴鍦板潃" width="250" align="center" prop="address" />-->x
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
-            v-hasPermi="['project:externalperson:edit']">淇敼</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
-            >鍒犻櫎</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['project:externalperson:edit']"
+            >淇敼</el-button
+          >
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            >鍒犻櫎</el-button
+          >
         </template>
       </el-table-column>
     </el-table>
 
-    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
-      @pagination="getList" />
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
 
     <!-- 娣诲姞鎴栦慨鏀逛汉鍛�/鍗曚綅璐﹀彿淇℃伅瀵硅瘽妗� -->
-    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body :close-on-click-modal="false">
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="800px"
+      append-to-body
+      :close-on-click-modal="false"
+    >
       <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-option v-for="dict in dict.type.sys_UserType" :key="dict.value" :label="dict.label"
-                  :value="dict.value"></el-option>
-              </el-select> </el-form-item>
+          <el-col :span="12">
+            <el-form-item label="璐﹀彿绫诲埆" prop="usertype">
+              <el-select
+                v-model="form.usertype"
+                placeholder="璇烽�夋嫨璐﹀彿绫诲埆"
+                multiple
+                collapse-tags
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="dict in dict.type.sys_UserType"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="璐﹀彿缂栧彿" prop="userno">
-              <el-input disabled=true v-model="form.userno" placeholder="璇疯緭鍏ヨ处鍙风紪鍙�" /> </el-form-item>
+              <el-input
+                disabled="true"
+                v-model="form.userno"
+                placeholder="璇疯緭鍏ヨ处鍙风紪鍙�"
+              />
+            </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="璐﹀彿鍚嶇О" prop="username">
-              <el-input v-model="form.username" placeholder="璇疯緭鍏ヨ处鍙峰悕绉�" /> </el-form-item>
+              <el-input v-model="form.username" placeholder="璇疯緭鍏ヨ处鍙峰悕绉�" />
+            </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="鍚敤鐘舵��" prop="userstatus" :disabled="ismanager == false">
+            <el-form-item
+              label="鍚敤鐘舵��"
+              prop="userstatus"
+              :disabled="!ismanager"
+            >
               <el-radio-group v-model="form.userstatus">
-                <el-radio v-for="dict in dict.type.sys_0_1" :key="dict.value" :label="parseInt(dict.value)">{{ dict.label
-                }}</el-radio>
+                <el-radio
+                  v-for="dict in dict.type.sys_0_1"
+                  :key="dict.value"
+                  :label="parseInt(dict.value)"
+                  >{{ dict.label }}</el-radio
+                >
               </el-radio-group>
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row v-if="form.usertype != 'org'">
+
+        <!-- 涓汉淇℃伅锛堝綋涓嶅寘鍚�'org'绫诲瀷鏃舵樉绀猴級 -->
+        <div v-if="!hasOrgType(form.usertype)">
+          <el-row>
+            <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>
+            <el-col :span="12">
+              <el-form-item label="鎬у埆" prop="sex">
+                <el-select v-model="form.sex" placeholder="璇烽�夋嫨鎬у埆" style="width: 100%">
+                  <el-option
+                    v-for="dict in dict.type.sys_user_sex"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鑱岀О" prop="title">
+                <el-select v-model="form.title" placeholder="璇烽�夋嫨浜哄憳鑱岀О" style="width: 100%">
+                  <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>
+            <el-col :span="12">
+              <el-form-item label="鎵�鍦ㄥ崟浣�" prop="unitname">
+                <el-select
+                  v-model="form.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 :span="12">
+              <el-form-item label="鍗曚綅宸ュ彿" prop="personnelunitno">
+                <el-input
+                  v-model="form.personnelunitno"
+                  placeholder="璇疯緭鍏ユ墍鍦ㄥ崟浣嶇殑宸ュ彿"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+
+        <!-- 閾惰淇℃伅锛堟墍鏈夌被鍨嬮兘鏄剧ず锛� -->
+        <el-row>
           <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-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"
-                  :value="dict.value"></el-option> </el-select></el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鑱岀О" prop="title">
-              <el-select v-model="form.title" placeholder="璇烽�夋嫨浜哄憳鑱岀О">
-                <el-option v-for="dict in dict.type.sys_professionaltitle" :key="dict.value" :label="dict.label"
-                  :value="dict.value"></el-option> </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row v-if="form.usertype != 'org'">
-          <el-col :span="12">
-            <el-form-item label="鎵�鍦ㄥ崟浣�" prop="unitname">
-              <el-select v-model="form.unitname" 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 :span="12">
-            <el-form-item label="鍗曚綅宸ュ彿" prop="personnelunitno">
-              <el-input v-model="form.personnelunitno" placeholder="璇疯緭鍏ユ墍鍦ㄥ崟浣嶇殑宸ュ彿" />
+            <el-form-item label="寮�鎴烽摱琛�" prop="depositbank">
+              <el-input
+                v-model="form.depositbank"
+                placeholder="璇疯緭鍏ュ紑鎴烽摱琛屽悕绉�"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
-          <el-col :span="24"><el-form-item label="寮�鎴烽摱琛�" prop="depositbank">
-              <el-input v-model="form.depositbank" placeholder="璇疯緭鍏ュ紑鎴烽摱琛屽悕绉�" /> </el-form-item>
-          </el-col>
-          <el-col :span="24"><el-form-item label="閾惰鍗″彿" prop="bankcardno">
-              <el-input v-model="form.bankcardno" placeholder="璇疯緭鍏ラ摱琛屽崱鍙�" />
+          <el-col :span="24">
+            <el-form-item label="閾惰鍗″彿" prop="bankcardno">
+              <el-input
+                v-model="form.bankcardno"
+                placeholder="璇疯緭鍏ラ摱琛屽崱鍙�"
+              />
             </el-form-item>
           </el-col>
         </el-row>
+
+        <!-- 鑱旂郴淇℃伅 -->
         <el-row>
           <el-col :span="24">
             <el-form-item label="鑱旂郴鍦板潃" prop="address">
-              <el-input v-model="form.address" placeholder="璇疯緭鍏ヨ仈绯诲湴鍧�" /> </el-form-item>
+              <el-input v-model="form.address" placeholder="璇疯緭鍏ヨ仈绯诲湴鍧�" />
+            </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="24">
             <el-form-item label="鑱旂郴鐢佃瘽" prop="telephone">
-              <el-input v-model="form.telephone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" /> </el-form-item>
+              <el-input v-model="form.telephone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+            </el-form-item>
           </el-col>
         </el-row>
-        <!--
-          <el-row>
-            <el-col :span="24"><el-form-item label="寮�鎴锋敮琛�" prop="branchbankname">
-              <el-input v-model="form.branchbankname" placeholder="璇疯緭鍏ュ紑鎴锋敮琛�" /> </el-form-item>
-            </el-col>
-          </el-row>
-            -->
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
@@ -190,7 +368,7 @@
   addExternalperson,
   updateExternalperson,
   exportExternalperson,
-  getOnlyCode,
+  getOnlyCode
 } from "@/api/project/externalperson";
 
 import {
@@ -236,26 +414,51 @@
         pageSize: 10,
         userno: null,
         username: null,
-        usertype: null,
+        usertype: null
       },
 
       // 鏌ヨ鏈�鏂板簭鍙峰弬鏁�
       seqnoParams: {
         businessType: "externalperson",
-        datequery: false,
+        datequery: false
       },
       // 琛ㄥ崟鍙傛暟
-      form: {},
+      form: {
+        usertype: []  // 鍒濆鍖栦负鏁扮粍
+      },
       // 琛ㄥ崟鏍¢獙
       rules: {
         usertype: [
-          { required: true, message: "璇疯緭鍏ヨ处鎴风被鍨�", trigger: "blur" }
+          {
+            required: true,
+            message: "璇疯嚦灏戦�夋嫨涓�涓处鍙风被鍒�",
+            trigger: "change",
+            validator: (rule, value, callback) => {
+              if (!value || (Array.isArray(value) && value.length === 0)) {
+                callback(new Error("璇疯嚦灏戦�夋嫨涓�涓处鍙风被鍒�"));
+              } else {
+                callback();
+              }
+            }
+          }
         ],
         username: [
           { required: true, message: "璇疯緭鍏ヨ处鎴峰悕绉�", trigger: "blur" }
         ],
         idcardno: [
-          { required: true, message: "璇疯緭鍏ヨ韩浠借瘉鍙风爜", trigger: "blur" }
+          {
+            required: true,
+            message: "璇疯緭鍏ヨ韩浠借瘉鍙风爜",
+            trigger: "blur",
+            validator: (rule, value, callback) => {
+              // 褰撲笉鍖呭惈'org'绫诲瀷鏃讹紝韬唤璇佸彿涓哄繀濉�
+              if (!this.hasOrgType(this.form.usertype) && (!value || value.trim() === '')) {
+                callback(new Error("璇疯緭鍏ヨ韩浠借瘉鍙风爜"));
+              } else {
+                callback();
+              }
+            }
+          }
         ],
         bankcardno: [
           { required: true, message: "璇疯緭鍏ラ摱琛岃处鍙�", trigger: "blur" }
@@ -265,22 +468,54 @@
         ]
       },
       //鏄惁鏄笓瀹惰垂鐨凮PO瀹℃壒浜哄憳
-      ismanager: false,
+      ismanager: false
     };
   },
   created() {
     this.getUserProfile();
     this.getUnitList();
     // 榛樿涓嶆墦寮�
-    // this.getList();
+    this.getList();
   },
   methods: {
+    // 妫�鏌ユ槸鍚﹀寘鍚�'org'绫诲瀷
+    hasOrgType(usertype) {
+      if (!usertype) return false;
+      if (Array.isArray(usertype)) {
+        return usertype.includes('org');
+      } else if (typeof usertype === 'string') {
+        return usertype.includes('org');
+      }
+      return false;
+    },
+
+    // 灏嗛�楀彿鍒嗛殧鐨勫瓧绗︿覆杞崲涓烘暟缁�
+    getTypeList(usertypeStr) {
+      if (!usertypeStr) return [];
+      if (typeof usertypeStr === 'string') {
+        return usertypeStr.split(',').filter(item => item.trim() !== '');
+      } else if (Array.isArray(usertypeStr)) {
+        return usertypeStr;
+      }
+      return [];
+    },
+
+    // 鑾峰彇绫诲瀷鏍囩
+    getTypeLabel(type) {
+      const dict = this.dict.type.sys_UserType;
+      if (dict) {
+        const item = dict.find(item => item.value === type);
+        return item ? item.label : type;
+      }
+      return type;
+    },
+
     //鑾峰彇褰撳墠鐢ㄦ埛淇℃伅
     getUserProfile() {
       getUserProfile().then(res => {
         if (
           res.data.userName == "admin" ||
-          res.data.userName == "001" ||
+          res.data.userName == "053" ||
           res.data.userName == "047"
         ) {
           this.ismanager = true;
@@ -292,23 +527,28 @@
 
     /** 鏌ヨ鍗曚綅銆佷汉鍛樿处鍙峰垪琛� */
     getList() {
-      if (this.queryParams.username === null || this.queryParams.username.replace(/\s/g, '') == "") {
-        this.$modal.msgWarning("鏌ユ壘璐︽埛鏃讹紝璐︽埛鍚嶇О涓嶈兘涓虹┖锛岃杈撳叆璐︽埛鍚嶇О锛�");
-        return;
+      this.loading = true;
+      // 澶勭悊鏌ヨ鍙傛暟锛屽鏋滄槸鏁扮粍鍒欒浆鎹负閫楀彿鍒嗛殧鐨勫瓧绗︿覆
+      const params = { ...this.queryParams };
+      if (Array.isArray(params.usertype) && params.usertype.length > 0) {
+        params.usertype = params.usertype.join(',');
       }
 
-      // this.loading = true;
-      listExternalperson(this.queryParams).then((response) => {
+      listExternalperson(params).then(response => {
         this.externalpersonList = response.rows;
         this.total = response.total;
-        // this.loading = false;
+        this.loading = false;
+      }).catch(() => {
+        this.loading = false;
       });
     },
+
     // 鍙栨秷鎸夐挳
     cancel() {
       this.open = false;
       this.reset();
     },
+
     // 琛ㄥ崟閲嶇疆
     reset() {
       this.form = {
@@ -316,7 +556,7 @@
         userno: null,
         username: null,
         userstatus: 0,
-        usertype: null,
+        usertype: [],  // 閲嶇疆涓烘暟缁�
         personnelunitno: null,
         delFlag: null,
         createBy: null,
@@ -324,116 +564,165 @@
         updateBy: null,
         updateTime: null,
         pym: null,
-        wbm: null,
+        wbm: null
       };
       this.resetForm("form");
     },
+
     /** 鎼滅储鎸夐挳鎿嶄綔 */
     handleQuery() {
       console.log("handleQuery", this.queryParams);
-      if (this.queryParams.username === null || this.queryParams.username.replace(/\s/g, '') == "") {
-        this.$modal.msgWarning("涓洪檺鍒舵壒閲忔煡鎵捐处鎴蜂俊鎭紝闄愬埗璐︽埛鍚嶇О涓哄繀杈撻」锛岃杈撳叆璐︽埛鍚嶇О鍚庡啀鎼滅储锛�");
-        return;
-      }
-
       this.queryParams.pageNum = 1;
       this.getList();
     },
+
     /** 閲嶇疆鎸夐挳鎿嶄綔 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.queryParams.usertype = [];  // 閲嶇疆涓烘暟缁�
       this.handleQuery();
     },
+
     // 澶氶�夋閫変腑鏁版嵁
     handleSelectionChange(selection) {
-      this.ids = selection.map((item) => item.id);
+      this.ids = selection.map(item => item.id);
       this.single = selection.length !== 1;
       this.multiple = !selection.length;
     },
+
     /** 鏂板鎸夐挳鎿嶄綔 */
     handleAdd() {
       this.reset();
       this.open = true;
       this.title = "娣诲姞浜哄憳/鍗曚綅璐﹀彿淇℃伅";
     },
+
     /** 淇敼鎸夐挳鎿嶄綔 */
     handleUpdate(row) {
       this.reset();
       const id = row.id || this.ids;
-      getExternalperson(id).then((response) => {
-        this.form = response.data;
+      getExternalperson(id).then(response => {
+        const data = response.data;
+        // 灏嗘暟鎹簱涓殑閫楀彿鍒嗛殧瀛楃涓茶浆鎹负鏁扮粍
+        if (data.usertype && typeof data.usertype === 'string') {
+          data.usertype = data.usertype.split(',').filter(item => item.trim() !== '');
+        } else if (!data.usertype) {
+          data.usertype = [];
+        }
+        this.form = data;
         this.open = true;
         this.title = "浜哄憳/鍗曚綅璐﹀彿淇℃伅淇敼";
       });
     },
+
     /** 鎻愪氦鎸夐挳 */
     submitForm() {
-      this.$refs["form"].validate((valid) => {
+      this.$refs["form"].validate(valid => {
         if (valid) {
-          if (this.form.id != null) {
-            updateExternalperson(this.form).then((response) => {
+          // 澶勭悊鍗曚綅淇℃伅
+          this.unitList.map(res => {
+            if (res.organizationid == this.form.unitno) {
+              this.form.unitname = res.organizationname;
+            }
+          });
+
+          // 灏嗘暟缁勮浆鎹负閫楀彿鍒嗛殧鐨勫瓧绗︿覆
+          const submitData = { ...this.form };
+          if (Array.isArray(submitData.usertype) && submitData.usertype.length > 0) {
+            submitData.usertype = submitData.usertype.join(',');
+          } else {
+            submitData.usertype = '';
+          }
+
+          console.log("鎻愪氦鏁版嵁:", submitData);
+
+          if (submitData.id != null) {
+            updateExternalperson(submitData).then(response => {
               this.$modal.msgSuccess("淇敼鎴愬姛");
               this.open = false;
-              this.queryParams.username = this.form.username;
+              this.queryParams.username = submitData.username;
               this.getList();
+            }).catch(error => {
+              console.error("淇敼澶辫触:", error);
             });
           } else {
-            getOnlyCode(this.seqnoParams).then((res) => {
-              this.form.userno = res.data.currentvalue;
+            getOnlyCode(this.seqnoParams).then(res => {
+              submitData.userno = res.data.currentvalue;
 
-              addExternalperson(this.form).then((response) => {
+              addExternalperson(submitData).then(response => {
                 this.$modal.msgSuccess("鏂板鎴愬姛");
                 this.open = false;
-                this.queryParams.username = this.form.username;
+                this.queryParams.username = submitData.username;
                 this.getList();
+              }).catch(error => {
+                console.error("鏂板澶辫触:", error);
               });
+            }).catch(error => {
+              console.error("鑾峰彇缂栧彿澶辫触:", error);
             });
           }
         }
       });
     },
+
     /** 鍒犻櫎鎸夐挳鎿嶄綔 */
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$modal
         .confirm('鏄惁纭鍒犻櫎浜哄憳/鍗曚綅璐﹀彿淇℃伅缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�')
-        .then(function () {
+        .then(function() {
           return delExternalperson(ids);
         })
         .then(() => {
           this.getList();
           this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
         })
-        .catch(() => { });
+        .catch(() => {});
     },
+
     /** 瀵煎嚭鎸夐挳鎿嶄綔 */
     handleExport() {
-      const queryParams = this.queryParams;
+      const queryParams = { ...this.queryParams };
+      // 澶勭悊鏌ヨ鍙傛暟锛屽鏋滄槸鏁扮粍鍒欒浆鎹负閫楀彿鍒嗛殧鐨勫瓧绗︿覆
+      if (Array.isArray(queryParams.usertype) && queryParams.usertype.length > 0) {
+        queryParams.usertype = queryParams.usertype.join(',');
+      }
+
       this.$modal
         .confirm("鏄惁纭瀵煎嚭鎵�鏈変汉鍛�/鍗曚綅璐﹀彿淇℃伅鏁版嵁椤癸紵")
         .then(() => {
           this.exportLoading = true;
           return exportExternalperson(queryParams);
         })
-        .then((response) => {
+        .then(response => {
           this.$download.name(response.msg);
           this.exportLoading = false;
         })
-        .catch(() => { });
+        .catch(() => {
+          this.exportLoading = false;
+        });
     },
 
     //鑾峰彇鍖荤枟鏈烘瀯鍒楄〃
     getUnitList() {
       listOrganization(3).then(response => {
-        for (let i = 0; i < response.rows.length; i++) {
-          this.unitList.push({
-            //organizationid: response.rows[i].organizationid,
-            organizationid: response.rows[i].id,
-            organizationname: response.rows[i].organizationname
-          });
-        }
+        this.unitList = response.rows.map(item => ({
+          organizationid: item.id.toString(),
+          organizationname: item.organizationname
+        }));
+        console.log("鍖荤枟鏈烘瀯鍒楄〃:", this.unitList);
       });
-    },
-  },
+    }
+  }
 };
 </script>
+
+<style scoped>
+::v-deep .el-select .el-tag {
+  margin: 2px 6px 2px 0;
+}
+
+::v-deep .el-select .el-tag__close {
+  margin-left: 4px;
+}
+</style>

--
Gitblit v1.9.3