From 0c9660562a03191d44fc779a889d3da0dc624b6d Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期五, 25 七月 2025 10:47:19 +0800
Subject: [PATCH] 修改弹窗ui和客户反馈

---
 laboratory/src/components/DynamicComponent/addTableData.vue |   83 +++++++++++++++++++++++------------------
 1 files changed, 47 insertions(+), 36 deletions(-)

diff --git a/laboratory/src/components/DynamicComponent/addTableData.vue b/laboratory/src/components/DynamicComponent/addTableData.vue
index 500f311..de40882 100644
--- a/laboratory/src/components/DynamicComponent/addTableData.vue
+++ b/laboratory/src/components/DynamicComponent/addTableData.vue
@@ -28,12 +28,23 @@
                 <el-form-item
                   :label="header.name"
                   :prop="header.name"
-                  :rules="{
-                    required:
-                      header.required === true || header.required === 'true',
-                    message: header.message || `请输入${header.name}`,
-                    trigger: ['blur', 'change'],
-                  }"
+                  :rules="[
+                    {
+                      required: header.required === true || header.required === 'true',
+                      message: header.message || `请输入${header.name}`,
+                      trigger: ['blur', 'change'],
+                    },
+                    {
+                      validator: (rule, value, callback) => {
+                        if ((header.required === true || header.required === 'true') && (!value || value.trim() === '')) {
+                          callback(header.message || `请输入${header.name}`);
+                        } else {
+                          callback();
+                        }
+                      },
+                      trigger: ['blur', 'change'],
+                    }
+                  ]"
                   v-if="header.type == 'text'"
                 >
                   <el-input
@@ -57,15 +68,16 @@
                     class="upload-demo"
                     :action="uploadUrl"
                     :headers="uploadHeaders"
-                    :file-list="imageList"
+                    :file-list="imageListMap[header.name] || []"
                     :auto-upload="true"
                     list-type="picture-card"
-                    :beforeUpload="beforeImageUpload"
-                    :on-change="handleImageChange"
-                    :on-remove="handleImageRemove"
-                    :on-success="handleImageSuccess"
+                    :before-upload="beforeImageUpload"
+                    :on-change="(file, fileList) => handleImageChange(file, fileList, header.name)"
+                    :on-remove="(file, fileList) => handleImageRemove(file, fileList, header.name)"
+                    :on-success="(res, file, fileList) => handleImageSuccess(res, file, fileList, header.name)"
                     :on-preview="handlePreview"
                     :disabled="!checkEditPermission(header)"
+                    multiple
                   >
                     <div
                       style="
@@ -216,6 +228,7 @@
       uploadHeaders: {
         Authorization: sessionStorage.getItem("token") || "",
       },
+      imageListMap: {},
     };
   },
   computed: {
@@ -273,11 +286,11 @@
               label: user.nickName || user.userName,
             }));
           } else {
-            this.$message.error("获取用户列表失败");
+            // this.$message.error("获取用户列表失败");
           }
         })
         .catch((err) => {
-          console.error("获取用户列表失败", err);
+          // console.error("获取用户列表失败", err);
         });
     },
     checkEditPermission(header) {
@@ -318,6 +331,9 @@
         this.headerList.forEach((header) => {
           if (header.type === "user") {
             formData[header.name] = [];
+          } else if (header.type === "image") {
+            formData[header.name] = [];
+            this.$set(this.imageListMap, header.name, []);
           } else {
             formData[header.name] = "";
           }
@@ -340,6 +356,9 @@
         this.headerList.forEach((header) => {
           if (header.type === "user") {
             formData[header.name] = data[header.name] || [];
+          } else if (header.type === "image") {
+            formData[header.name] = Array.isArray(data[header.name]) ? data[header.name] : (data[header.name] ? [data[header.name]] : []);
+            this.$set(this.imageListMap, header.name, (formData[header.name] || []).map(url => ({ name: "image", url: getFullUrl(url), status: "success" })));
           } else {
             formData[header.name] = data[header.name] || "";
           }
@@ -396,6 +415,7 @@
       this.initFormData();
     },
     handleSubmit() {
+      console.log('4444444444444')
       this.$refs.form.validate((valid) => {
         if (valid) {
           const submitData = {
@@ -440,34 +460,25 @@
       }
       return true;
     },
-    handleImageChange(file, fileList) {
-      this.imageList = fileList;
-      const imageHeader = this.headerList.find((h) => h.type === "image");
-      if (imageHeader) {
-        this.$refs.form.validateField(imageHeader.name);
-      }
+    handleImageChange(file, fileList, fieldName) {
+      this.$set(this.imageListMap, fieldName, fileList);
+      // 校验
+      this.$refs.form && this.$refs.form.validateField(fieldName);
     },
-    handleImageSuccess(res, file, fileList) {
+    handleImageSuccess(res, file, fileList, fieldName) {
       const url = res.msg;
       file.url = getFullUrl(url);
-      const imageHeader = this.headerList.find((h) => h.type === "image");
-      if (imageHeader) {
-        this.$set(this.form, imageHeader.name, url);
-        this.$refs.form.validateField(imageHeader.name);
+      if (!Array.isArray(this.form[fieldName])) {
+        this.$set(this.form, fieldName, []);
       }
-      this.imageList = fileList.map((f) => {
-        if (f.uid === file.uid) {
-          return file;
-        }
-        return f;
-      });
+      // 只保留 fileList 中的 url
+      this.$set(this.form, fieldName, fileList.map(f => f.url ? (f.url.startsWith('http') ? f.url : getFullUrl(f.url)) : ''));
+      this.$set(this.imageListMap, fieldName, fileList);
+      this.$refs.form && this.$refs.form.validateField(fieldName);
     },
-    handleImageRemove(file, fileList) {
-      const imageHeader = this.headerList.find((h) => h.type === "image");
-      if (imageHeader) {
-        this.$set(this.form, imageHeader.name, "");
-      }
-      this.imageList = fileList;
+    handleImageRemove(file, fileList, fieldName) {
+      this.$set(this.form, fieldName, fileList.map(f => f.url ? (f.url.startsWith('http') ? f.url : getFullUrl(f.url)) : ''));
+      this.$set(this.imageListMap, fieldName, fileList);
     },
     handlePreview(file) {
       this.imagePreviewUrl = file.url;

--
Gitblit v1.7.1