From dacc95761cf7090c628fc37a5d4f8bb825ccbbb0 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期六, 16 五月 2026 15:41:45 +0800
Subject: [PATCH] 企业新闻和通知公告

---
 src/components/Dialog/FileList.vue |   95 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 64 insertions(+), 31 deletions(-)

diff --git a/src/components/Dialog/FileList.vue b/src/components/Dialog/FileList.vue
index 136ff8b..b0e78cf 100644
--- a/src/components/Dialog/FileList.vue
+++ b/src/components/Dialog/FileList.vue
@@ -5,7 +5,8 @@
              @close="handleClose"
              class="attachment-dialog">
     <!-- 宸ュ叿鏍� -->
-    <div class="toolbar">
+    <div v-if="editable"
+         class="toolbar">
       <el-button type="primary"
                  size="small"
                  @click="handleUpload">
@@ -16,10 +17,11 @@
     <el-dialog v-model="uploadDialogVisible"
                title="涓婁紶闄勪欢"
                width="50%"
-               @close="handleUploadClose">
+               @close="closeUpload">
       <AttachmentUpload v-model:file-list="newFileList" />
       <template #footer>
-        <el-button @click="handleUploadClose">鍏抽棴</el-button>
+        <el-button @click="saveUpload">淇濆瓨</el-button>
+        <el-button @click="closeUpload">鍏抽棴</el-button>
       </template>
     </el-dialog>
     <!-- 鏂囦欢鍒楄〃琛ㄦ牸 -->
@@ -34,17 +36,25 @@
         <el-table-column v-if="showActions"
                          fixed="right"
                          label="鎿嶄綔"
-                         :width="120"
+                         :width="150"
                          align="center">
           <template #default="scope">
             <el-button link
                        type="primary"
                        size="small"
-                       :href="scope.row.downloadURL"
-                       class="download-link">
-              涓嬭浇
+                       class="download-link"
+                       @click="previewFile(scope.row.previewURL)">
+              棰勮
             </el-button>
             <el-button link
+                       type="primary"
+                       size="small"
+                       class="download-link"
+                       @click="downloadFile(scope.row.downloadURL)">
+              涓嬭浇
+            </el-button>
+            <el-button v-if="editable"
+                       link
                        type="danger"
                        size="small"
                        @click="handleDelete(scope.row)">
@@ -55,9 +65,11 @@
       </el-table>
     </div>
   </el-dialog>
+  <filePreview ref="filePreviewRef" />
 </template>
 
 <script setup>
+import { ElMessage } from 'element-plus'
   import { ref, computed, getCurrentInstance, onMounted, watch } from "vue";
   import AttachmentUpload from "@/components/AttachmentUpload/file/index.vue";
   import {
@@ -65,6 +77,8 @@
     deleteAttachment,
     createAttachment,
   } from "@/api/basicData/storageAttachment.js";
+  import filePreview from '@/components/filePreview/index.vue'
+  const filePreviewRef = ref()
 
   const props = defineProps({
     visible: {
@@ -93,6 +107,10 @@
       type: Boolean,
       default: true,
     },
+    editable: {
+      type: Boolean,
+      default: true,
+    },
   });
 
   const emit = defineEmits(["close", "download", "upload", "delete"]);
@@ -115,38 +133,52 @@
     isShow.value = false;
   };
 
+  // 棰勮鏂囦欢
+  const previewFile = (url) => {
+    if (url) {
+      filePreviewRef.value.open(url)
+    } else {
+      ElMessage.warning('鏂囦欢鍦板潃鏃犳晥锛屾棤娉曢瑙�')
+    }
+  }
+
   const handleUpload = () => {
     uploadDialogVisible.value = true;
   };
 
-  const handleUploadClose = async () => {
+  const saveUpload = async () => {
     // 妫�鏌ユ槸鍚︽湁鏂颁笂浼犵殑鏂囦欢
     if (newFileList.value.length > 0) {
-      try {
-        await createAttachment({
-          application: "file",
-          recordType: props.recordType,
-          recordId: props.recordId,
-          storageBlobDTOs: [...newFileList.value, ...tableData.value],
-        });
-        newFileList.value = [];
-        // 鍒锋柊鍒楄〃
-        setList();
-      } catch (error) {
-        proxy?.$modal?.msgError("涓婁紶澶辫触");
-      }
+      createAttachment({
+        application: "file",
+        recordType: props.recordType,
+        recordId: props.recordId,
+        storageBlobDTOs: [...newFileList.value, ...tableData.value],
+      }).then((res) => {
+        if (res && res.code === 200) {
+          proxy?.$modal?.msgSuccess("涓婁紶鎴愬姛");
+          newFileList.value = [];
+          // 鍒锋柊鍒楄〃
+          setList();
+        }
+      }).finally(() => {
+        uploadDialogVisible.value = false;
+      })
     }
+  }
+
+  const closeUpload = () => {
+    newFileList.value = [];
     uploadDialogVisible.value = false;
   };
 
   const handleDelete = async (row, index) => {
-    try {
-      await deleteAttachment([row.storageAttachmentId]);
-      proxy?.$modal?.msgSuccess("鍒犻櫎鎴愬姛");
-      setList();
-    } catch (error) {
-      proxy?.$modal?.msgError("鍒犻櫎澶辫触");
-    }
+    deleteAttachment([row.storageAttachmentId]).then((res) => {
+      if (res && res.code === 200) {
+        proxy?.$modal?.msgSuccess("鍒犻櫎鎴愬姛");
+        setList();
+      }
+    })
   };
 
   const setList = () => {
@@ -154,12 +186,13 @@
       recordType: props.recordType,
       recordId: props.recordId,
     }).then(res => {
-      if (res && res.data) {
-        tableData.value = res.data || [];
-      }
+      tableData.value = (res && res.data) || [];
     });
   };
 
+  const downloadFile = url => {
+    window.open(url, "_blank");
+  };
   onMounted(() => {
     setList();
   });

--
Gitblit v1.9.3