From 84effa9b1ba6ec0f6d9779151cb3bb75182fa489 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 14 二月 2025 09:59:12 +0800
Subject: [PATCH] 实验室资质页面迁移

---
 src/views/structural/laboratory/index.vue |  158 +++++++++++++++++-----------------------------------
 1 files changed, 52 insertions(+), 106 deletions(-)

diff --git a/src/views/structural/laboratory/index.vue b/src/views/structural/laboratory/index.vue
index 00da998..c91342e 100644
--- a/src/views/structural/laboratory/index.vue
+++ b/src/views/structural/laboratory/index.vue
@@ -2,7 +2,7 @@
   <div class="capacity-scope">
     <div>
       <el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
-        <el-form-item label="璧勮川鍚嶇О" prop="nickName">
+        <el-form-item label="璧勮川鍚嶇О" prop="name">
           <el-select v-model="queryParams.name" placeholder="閫夋嫨璧勮川鍚嶇О" size="small" @change="refreshTable()">
             <el-option v-for="dict in dict.type.qualification_name" :key="dict.value" :label="dict.label" :value="dict.value">
               {{ dict.label }}
@@ -70,53 +70,24 @@
       </div>
     </div>
     <el-dialog title="璧勮川鏇存柊" :visible.sync="qualificationsConnectVisible" width="400px">
-      <div class="search_thing" style="margin-bottom: 16px;">
-        <div class="search_label" style="width:120px"><span class="required-span">* </span>璧勮川鍚嶇О锛�</div>
-        <div class="search_input">
+      <el-form ref="formDataRef" :model="formData" label-position="right" :rules="formDataRules" label-width="78px">
+        <el-form-item label="璧勮川鍚嶇О" prop="name">
           <el-select v-model="formData.name" placeholder="璇烽�夋嫨" style="width: 100%;" size="small" clearable>
-            <el-option
-              v-for="item in qualificationsList"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
+            <el-option v-for="dict in dict.type.qualification_name" :key="dict.value" :label="dict.label" :value="dict.value">
+              {{ dict.label }}
             </el-option>
           </el-select>
-        </div>
-      </div>
-      <div class="search_thing" style="margin-bottom: 16px;">
-        <div class="search_label" style="width:120px"><span class="required-span">* </span>璧勮川缂栫爜锛�</div>
-        <div class="search_input">
-          <el-input
-            size="small"
-            placeholder="璇疯緭鍏�"
-            clearable
-            v-model="formData.code"></el-input>
-        </div>
-      </div>
-      <div class="search_thing" style="margin-bottom: 16px;">
-        <div class="search_label" style="width:120px"><span class="required-span">* </span>棰佸彂鏈烘瀯锛�</div>
-        <div class="search_input">
-          <el-input
-            size="small"
-            placeholder="璇疯緭鍏�"
-            clearable
-            v-model="formData.organization"></el-input>
-        </div>
-      </div>
-      <div class="search_thing" style="margin-bottom: 16px;">
-        <div class="search_label" style="width:120px">璧勮川璇存槑锛�</div>
-        <div class="search_input">
-          <el-input
-            size="small"
-            placeholder="璇疯緭鍏�"
-            clearable
-            v-model="formData.explanation"></el-input>
-        </div>
-      </div>
-
-      <div class="search_thing" style="margin-bottom: 16px;">
-        <div class="search_label" style="width:120px"><span class="required-span">* </span>棰佸彂鏃堕棿锛�</div>
-        <div class="search_input">
+        </el-form-item>
+        <el-form-item label="璧勮川缂栫爜" prop="code">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="formData.code"></el-input>
+        </el-form-item>
+        <el-form-item label="棰佸彂鏈烘瀯" prop="organization">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="formData.organization"></el-input>
+        </el-form-item>
+        <el-form-item label="璧勮川璇存槑" prop="explanation">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="formData.explanation"></el-input>
+        </el-form-item>
+        <el-form-item label="棰佸彂鏃堕棿" prop="dateOfIssuance">
           <el-date-picker style="width:100%" v-model="formData.dateOfIssuance"
                           type="datetime"
                           size="small"
@@ -125,11 +96,8 @@
                           clearable
                           placeholder="閫夋嫨鏃ユ湡">
           </el-date-picker>
-        </div>
-      </div>
-      <div class="search_thing" style="margin-bottom: 16px;">
-        <div class="search_label" style="width:120px"><span class="required-span">* </span>鍒版湡鏃堕棿锛�</div>
-        <div class="search_input">
+        </el-form-item>
+        <el-form-item label="鍒版湡鏃堕棿" prop="expireTime">
           <el-date-picker style="width:100%" v-model="formData.expireTime"
                           type="datetime"
                           size="small"
@@ -138,14 +106,11 @@
                           clearable
                           placeholder="閫夋嫨鏃ユ湡">
           </el-date-picker>
-        </div>
-      </div>
-      <div class="search_thing" style="margin-bottom: 16px;">
-        <div class="search_label" style="width:120px">璧勮川鍥剧墖锛�</div>
-        <div class="search_input">
+        </el-form-item>
+        <el-form-item label="璧勮川鍥剧墖">
           <el-upload
             ref="upload"
-            :action="action"
+            :action="uploadAction"
             :on-success="m=>handleSuccessUpImg(m,'imageUrl')"
             accept='image/jpg,image/jpeg,image/png'
             :multiple="false"
@@ -154,21 +119,19 @@
             :on-error="onError">
             <el-button slot="trigger" size="small" type="primary">閫夊彇鍥剧墖</el-button>
           </el-upload>
-        </div>
-      </div>
-      <div class="search_thing" style="margin-bottom: 16px;">
-        <div class="search_label" style="width:120px">璧勮川闄勪欢锛�</div>
-        <div class="search_input">
+        </el-form-item>
+        <el-form-item label="璧勮川闄勪欢">
           <el-upload
             ref="upload1"
-            :action="action"
+            :action="uploadAction"
             :on-success="m=>handleSuccessUpImg(m,'fileUrl')"
-            accept='image/jpg,image/jpeg,image/png,application/pdf,.doc,.docx' :headers="headers" :multiple="false" :limit="1" :on-change="beforeUpload1"
+            accept='image/jpg,image/jpeg,image/png,application/pdf,.doc,.docx'
+            :headers="headers" :multiple="false" :limit="1" :on-change="beforeUpload1"
             :on-error="onError1">
             <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>
           </el-upload>
-        </div>
-      </div>
+        </el-form-item>
+      </el-form>
       <span slot="footer" class="dialog-footer">
 				<el-button @click="qualificationsConnectVisible = false">鍙� 娑�</el-button>
 				<el-button type="primary" @click="confirmQualifications" :loading="loading">纭� 瀹�</el-button>
@@ -180,6 +143,7 @@
 <script>
 import limsTable from "@/components/Table/lims-table.vue";
 import {addCertificationDetail, delCertificationDetail, getCertificationDetail} from "@/api/structural/laboratory";
+import {getToken} from "@/utils/auth";
 
 export default {
   components: {
@@ -226,6 +190,13 @@
       qualificationsList:[],
       qualificationsConnectVisible:false,
       formData:{},
+      formDataRules: {
+        name: [{ required: true, message: "璇峰~鍐欒祫璐ㄥ悕绉�", trigger: "change" }],
+        code: [{ required: true, message: "璇峰~鍐欒祫璐ㄧ紪鐮�", trigger: "blur" }],
+        organization: [{ required: true, message: "璇峰~鍐欓鍙戞満鏋�", trigger: "blur" }],
+        dateOfIssuance: [{ required: true, message: "璇烽�夋嫨棰佸彂鏃堕棿", trigger: "change" }],
+        expireTime: [{ required: true, message: "璇峰~鍐欏埌鏈熸椂闂�", trigger: "change" }],
+      },
       loading:false,
       pageLoading:false,
       isLoding: false, // 鍔犺浇涓紝loading鍥炬爣,榛樿涓簍rue
@@ -234,16 +205,8 @@
       pageSize: 16, // 涓�椤�16鏉�
       total: '',
       list:[],
-    }
-  },
-  computed: {
-    headers() {
-      return {
-        'token': sessionStorage.getItem('token')
-      }
-    },
-    action() {
-      return ''
+      uploadAction: process.env.VUE_APP_BASE_API + '/deviceScope/uploadFile',
+      headers: { Authorization: "Bearer " + getToken() },
     }
   },
   mounted() {
@@ -384,37 +347,20 @@
       this.$refs.upload1.clearFiles()
     },
     confirmQualifications(){
-      if(!this.formData.name){
-        this.$message.error('鏈~鍐欒祫璐ㄥ悕绉�');
-        return
-      }
-      if(!this.formData.code){
-        this.$message.error('鏈~鍐欒祫璐ㄧ紪鐮�');
-        return
-      }
-      if(!this.formData.organization){
-        this.$message.error('鏈~鍐欓鍙戞満鏋�');
-        return
-      }
-      if(!this.formData.expireTime){
-        this.$message.error('鏈~鍐欏埌鏈熼鍙戞椂闂�');
-        return
-      }
-      if(!this.formData.imageUrl){
-        this.$message.error('鏈笂浼犺祫璐ㄥ浘鐗�');
-        return
-      }
-      if(!this.formData.fileUrl){
-        this.$message.error('鏈笂浼犺祫璐ㄩ檮浠�');
-        return
-      }
-      this.loading = true;
-      addCertificationDetail({...this.formData}).then(res => {
-        this.loading = false
-        if (res.code === 201) return
-        this.$message.success('宸叉彁浜�')
-        this.refreshTable('page')
-        this.qualificationsConnectVisible = false
+      this.$refs['formDataRef'].validate((valid) => {
+        if (valid) {
+          this.loading = true;
+          addCertificationDetail({...this.formData}).then(res => {
+            this.loading = false
+            if (res.code === 201) return
+            this.$message.success('宸叉彁浜�')
+            this.refreshTable()
+            this.resetForm("formDataRef");
+            this.qualificationsConnectVisible = false
+          }).catch(err => {
+            this.loading = false
+          })
+        }
       })
     },
     // 婊氬姩瑙﹀簳鍔犺浇

--
Gitblit v1.9.3