From 0204d3e40681c2a4f50df373012d8cb226d98966 Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期五, 20 六月 2025 16:03:12 +0800
Subject: [PATCH] 修改bug

---
 laboratory/src/components/DynamicComponent/index.vue |   51 +++++++++++++++++++++++++--------------------------
 1 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/laboratory/src/components/DynamicComponent/index.vue b/laboratory/src/components/DynamicComponent/index.vue
index 7a1ff5e..6e54fb5 100644
--- a/laboratory/src/components/DynamicComponent/index.vue
+++ b/laboratory/src/components/DynamicComponent/index.vue
@@ -36,7 +36,7 @@
                 <!-- 图片类型显示 -->
                 <template v-else-if="header.type === 'image'">
                   <img v-if="scope.row[header.name]" 
-                       :src="scope.row[header.name]" 
+                       :src="getFullUrl(scope.row[header.name])" 
                        alt="头像" 
                        class="table-image" />
                 </template>
@@ -57,8 +57,10 @@
         </div>
         <!-- 文件上传 -->
         <div v-else-if="item.type == 'fileUpload'">
-          <el-upload v-if="editable" action="#" :file-list="item.data.fileList"
-            :on-change="(file, fileList) => handleFileChange(idx, fileList)" list-type="text">
+          <el-upload v-if="editable" :http-request="customUploadRequest" :file-list="item.data.fileList"
+            :on-change="(file, fileList) => handleFileChange(idx, fileList)"
+            :on-success="(res, file, fileList) => handleFileSuccess(res, file, fileList, idx)"
+            list-type="text">
             <el-button size="small" icon="el-icon-upload2">点击上传</el-button>
           </el-upload>
           <div v-else>
@@ -70,11 +72,10 @@
         <!-- 图片上传 -->
         <div v-else-if="item.type == 'imageUpload'">
           <div class="image-upload-container">
-            <el-upload v-if="editable" action="#" :file-list="item.data.imageList"
+            <el-upload v-if="editable" :http-request="customUploadRequest" :file-list="item.data.imageList"
               :on-change="(file, fileList) => handleImageChange(idx, fileList)"
               :on-success="(res, file, fileList) => handleImageSuccess(res, file, fileList, idx)"
               :auto-upload="true"
-              :http-request="() => { }"
               :before-upload="beforeImageUpload"
               list-type="picture-card"
               :on-preview="(file) => handlePreview(file, idx)"
@@ -85,8 +86,8 @@
             <div v-else class="image-preview">
               <el-image v-for="image in item.data.imageList"
                 :key="image.uid"
-                :src="image.url"
-                :preview-src-list="item.data.imageList.map(img => img.url)"
+                :src="getFullUrl(image.url)"
+                :preview-src-list="item.data.imageList.map(img => getFullUrl(img.url))"
                 class="preview-image" />
             </div>
             <div class="uploaf-notice">支持.jpg .png格式</div>
@@ -116,6 +117,8 @@
 import Table from "../Table/index.vue";
 import addTableHeader from "./addTableHeader.vue";
 import addTableData from "./addTableData.vue";
+import apiConfig from '../../utils/baseurl'
+import { customUploadRequest, getFullUrl } from '@/utils/utils'
 
 export default {
   name: "DynamicComponent",
@@ -150,6 +153,7 @@
   },
   data() {
     return {
+      apiConfig:apiConfig,
       showAddDialog: false,
       components: [],
       tableHeaderDialog: {
@@ -439,34 +443,27 @@
     },
     handleFileChange(idx, fileList) {
       if (!this.editable) return;
-
-      fileList = fileList.map(file => {
-        if (!file.url) {
-          file.url = 'https://picsum.photos/200/200';
-        }
-        if (!file.name) {
-          file.name = '默认文件.txt';
-        }
-        return file;
-      });
+      // 只做 fileList 同步
+      this.components[idx].data.fileList = fileList;
+      this.emitUpdate();
+    },
+    handleFileSuccess(res, file, fileList, idx) {
+      // 上传成功后设置真实 url
+      file.url = res.data.url;
       this.components[idx].data.fileList = fileList;
       this.emitUpdate();
     },
     handleImageChange(idx, fileList) {
       if (!this.editable) return;
-
-      fileList = fileList.map(file => {
-        if (!file.url) {
-          file.url = 'https://picsum.photos/200/200';
-        }
-        return file;
-      });
+      // 只做 imageList 同步
       this.components[idx].data.imageList = fileList;
       this.emitUpdate();
     },
     handleImageSuccess(res, file, fileList, idx) {
-      file.url = 'https://picsum.photos/200/200';
+      // 上传成功后设置真实 url
+      file.url = res.data.url;
       this.components[idx].data.imageList = fileList;
+      this.emitUpdate();
     },
     beforeImageUpload(file) {
       const isJPG = file.type === 'image/jpeg';
@@ -487,7 +484,7 @@
       // 使用el-image的preview-src-list实现预览
       // 这里直接用Element的图片预览能力,实际上el-upload会自动处理
       // 但如果你想自定义弹窗,可以用如下代码:
-      this.imagePreviewUrl = file.url;
+      this.imagePreviewUrl = this.getFullUrl(file.url);
       this.imagePreviewVisible = true;
     },
     emitUpdate() {
@@ -496,6 +493,8 @@
       this.$emit('update:dataSource', updatedComponents);
     },
   },
+  computed: {
+  },
 };
 </script>
 

--
Gitblit v1.7.1