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/index.vue |   53 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 37 insertions(+), 16 deletions(-)

diff --git a/laboratory/src/components/DynamicComponent/index.vue b/laboratory/src/components/DynamicComponent/index.vue
index b085e78..218e9c9 100644
--- a/laboratory/src/components/DynamicComponent/index.vue
+++ b/laboratory/src/components/DynamicComponent/index.vue
@@ -16,7 +16,7 @@
       <div v-for="(item, idx) in components" :key="item.id" class="dynamic-component">
         <!-- 富文本 -->
         <div v-if="item.type == 'richText'">
-          <AiEditor :ref="`editor_${item.id}`" :value="item.data.content" height="200px" :readOnly="!editable"
+          <AiEditor :ref="`editor_${item.id}`" :value="item.data.content" height="400px" :readOnly="!editable"
             placeholder="请输入内容..." :disabled="!editable" />
         </div>
         <!-- 自定义表格 -->
@@ -34,10 +34,25 @@
                 <template v-if="header.type === 'user'">
                   {{ getUserDisplayText(header.name, scope.row) }}
                 </template>
-                <!-- 图片类型显示 -->
+                <!-- 图片类型显示,兼容数组和字符串 -->
                 <template v-else-if="header.type === 'image'">
-                  <img v-if="scope.row[header.name]" :src="getFullUrl(scope.row[header.name])" alt="头像"
-                    class="table-image" />
+                  <template v-if="Array.isArray(scope.row[header.name])">
+                    <el-image
+                      v-for="(img, i) in scope.row[header.name]"
+                      :key="i"
+                      :src="getFullUrl(img)"
+                      :preview-src-list="scope.row[header.name].map(getFullUrl)"
+                      class="table-image"
+                    />
+                  </template>
+                  <template v-else>
+                    <el-image
+                      v-if="scope.row[header.name]"
+                      :src="getFullUrl(scope.row[header.name])"
+                      :preview-src-list="[getFullUrl(scope.row[header.name])]"
+                      class="table-image"
+                    />
+                  </template>
                 </template>
                 <!-- 其他类型 -->
                 <template v-else>
@@ -63,8 +78,8 @@
             <el-button size="small" icon="el-icon-upload2">点击上传</el-button>
           </el-upload>
           <div v-else>
-            <div v-for="file in item.data.fileList" :key="file.uid" class="file-list-item">
-              {{ file.name }}
+            <div v-for="file in item.data.fileList" :key="file.uid" class="file-list-item" >
+              <span style="color: #409EFF; cursor: pointer;" @click="downloadFileByUrl(file.url, file.name)">{{ file.name }}</span>
             </div>
           </div>
         </div>
@@ -116,6 +131,7 @@
 import addTableData from "./addTableData.vue";
 import apiConfig from '../../utils/baseurl'
 import { getFullUrl } from '@/utils/utils'
+import { downloadFileByUrl } from '@/utils/utils'
 
 export default {
   name: "DynamicComponent",
@@ -195,9 +211,15 @@
                 break;
               case 'fileUpload':
                 componentData = { fileList: component.data };
+                console.log('component.data component.data',component.data)
                 break;
               case 'imageUpload':
-                componentData = { imageList: component.data };
+                componentData = { imageList: component.data.map(item=>{
+                  return {
+                    ...item,
+                    url: getFullUrl(item.url),
+                  }
+                }) };
                 break;
             }
             return {
@@ -214,6 +236,8 @@
     }
   },
   methods: {
+    getFullUrl,
+    downloadFileByUrl,
     getUserDisplayText(fieldName, rowData) {
       // 检查是否有对应的userInfo数据
       const userInfoKey = `${fieldName}_userInfo`;
@@ -299,6 +323,7 @@
             break;
           case 'fileUpload':
             componentData = component.data.fileList.map(file => {
+              console.log('fileUpload fileUpload fileUpload',file)
               if (file.url && file.url.startsWith(prefix)) {
                 return { ...file, url: file.url.substring(prefix.length) };
               }
@@ -332,8 +357,6 @@
       const processedData = { ...formData };
 
       // 调试输出
-      console.log('添加/编辑行数据:', processedData, 'isEdit', isEdit);
-
       if (isEdit) {
         // Vue无法检测到对象或数组深层属性的变化,使用Vue.set来确保响应式
         this.$set(
@@ -351,7 +374,6 @@
           updateTime: new Date().toLocaleString()
         });
       }
-      console.log('this.components', this.components);
 
       // 手动触发组件更新
       this.$forceUpdate();
@@ -480,16 +502,16 @@
     beforeImageUpload(file) {
       const isJPG = file.type === 'image/jpeg';
       const isPNG = file.type === 'image/png';
-      const isLt2M = file.size / 1024 / 1024 < 2;
+      // const isLt2M = file.size / 1024 / 1024 < 2;
 
       if (!isJPG && !isPNG) {
         this.$message.error('上传图片只能是 JPG 或 PNG 格式!');
         return false;
       }
-      if (!isLt2M) {
-        this.$message.error('上传图片大小不能超过 2MB!');
-        return false;
-      }
+      // if (!isLt2M) {
+      //   this.$message.error('上传图片大小不能超过 2MB!');
+      //   return false;
+      // }
       this.imagePreviewVisible = true;
       return true;
     },
@@ -505,7 +527,6 @@
       const updatedComponents = JSON.parse(JSON.stringify(this.components));
       this.$emit('update:dataSource', updatedComponents);
     },
-    getFullUrl,
   },
   computed: {
   },

--
Gitblit v1.7.1