From 60654abe9a108c9007646d4f2b6ea78863539c9f Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 30 四月 2026 16:03:50 +0800
Subject: [PATCH] Merge branch 'dev_NEW_pro' of http://114.132.189.42:9002/r/product-inventory-management into dev_NEW_pro

---
 src/components/Dialog/FileList.vue |  319 +++++++++++++++++++++++++++--------------------------
 1 files changed, 162 insertions(+), 157 deletions(-)

diff --git a/src/components/Dialog/FileList.vue b/src/components/Dialog/FileList.vue
index 1506b25..6e0ca23 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">
@@ -13,12 +14,11 @@
       </el-button>
     </div>
     <!-- 涓婁紶缁勪欢寮圭獥 -->
-    <el-dialog
-        v-model="uploadDialogVisible"
-        title="涓婁紶闄勪欢"
-        width="50%"
-        @close="closeUpload">
-      <AttachmentUpload v-model:file-list="newFileList"/>
+    <el-dialog v-model="uploadDialogVisible"
+               title="涓婁紶闄勪欢"
+               width="50%"
+               @close="closeUpload">
+      <AttachmentUpload v-model:file-list="newFileList" />
       <template #footer>
         <el-button @click="saveUpload">淇濆瓨</el-button>
         <el-button @click="closeUpload">鍏抽棴</el-button>
@@ -32,7 +32,7 @@
                 :height="tableData.length > 0 ? 'auto' : '120px'">
         <el-table-column label="闄勪欢鍚嶇О"
                          prop="originalFilename"
-                         show-overflow-tooltip/>
+                         show-overflow-tooltip />
         <el-table-column v-if="showActions"
                          fixed="right"
                          label="鎿嶄綔"
@@ -46,7 +46,8 @@
                        @click="downloadFile(scope.row.downloadURL)">
               涓嬭浇
             </el-button>
-            <el-button link
+            <el-button v-if="editable"
+                       link
                        type="danger"
                        size="small"
                        @click="handleDelete(scope.row)">
@@ -60,181 +61,185 @@
 </template>
 
 <script setup>
-import {ref, computed, getCurrentInstance, onMounted, watch} from "vue";
-import AttachmentUpload from "@/components/AttachmentUpload/file/index.vue";
-import {
-  attachmentList,
-  deleteAttachment,
-  createAttachment,
-} from "@/api/basicData/storageAttachment.js";
+  import { ref, computed, getCurrentInstance, onMounted, watch } from "vue";
+  import AttachmentUpload from "@/components/AttachmentUpload/file/index.vue";
+  import {
+    attachmentList,
+    deleteAttachment,
+    createAttachment,
+  } from "@/api/basicData/storageAttachment.js";
 
-const props = defineProps({
-  visible: {
-    type: Boolean,
-    required: true,
-  },
-  recordType: {
-    type: String,
-    default: "",
-    required: true,
-  },
-  recordId: {
-    type: Number,
-    default: 0,
-    required: true,
-  },
-  title: {
-    type: String,
-    default: "闄勪欢",
-  },
-  width: {
-    type: String,
-    default: "50%",
-  },
-  showActions: {
-    type: Boolean,
-    default: true,
-  },
-});
+  const props = defineProps({
+    visible: {
+      type: Boolean,
+      required: true,
+    },
+    recordType: {
+      type: String,
+      default: "",
+      required: true,
+    },
+    recordId: {
+      type: Number,
+      default: 0,
+      required: true,
+    },
+    title: {
+      type: String,
+      default: "闄勪欢",
+    },
+    width: {
+      type: String,
+      default: "50%",
+    },
+    showActions: {
+      type: Boolean,
+      default: true,
+    },
+    editable: {
+      type: Boolean,
+      default: true,
+    },
+  });
 
-const emit = defineEmits(["close", "download", "upload", "delete"]);
+  const emit = defineEmits(["close", "download", "upload", "delete"]);
 
-const {proxy} = getCurrentInstance();
-const tableData = ref([]);
-const uploadDialogVisible = ref(false);
-const newFileList = ref([]);
+  const { proxy } = getCurrentInstance();
+  const tableData = ref([]);
+  const uploadDialogVisible = ref(false);
+  const newFileList = ref([]);
 
-const isShow = computed({
-  get() {
-    return props.visible;
-  },
-  set(val) {
-    emit("update:visible", val);
-  },
-});
+  const isShow = computed({
+    get() {
+      return props.visible;
+    },
+    set(val) {
+      emit("update:visible", val);
+    },
+  });
 
-const handleClose = () => {
-  isShow.value = false;
-};
+  const handleClose = () => {
+    isShow.value = false;
+  };
 
-const handleUpload = () => {
-  uploadDialogVisible.value = true;
-};
+  const handleUpload = () => {
+    uploadDialogVisible.value = true;
+  };
 
-const saveUpload = async () => {
-  // 妫�鏌ユ槸鍚︽湁鏂颁笂浼犵殑鏂囦欢
-  if (newFileList.value.length > 0) {
+  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("涓婁紶澶辫触");
+      }
+    }
+    uploadDialogVisible.value = false;
+  };
+
+  const closeUpload = () => {
+    newFileList.value = [];
+    uploadDialogVisible.value = false;
+  };
+
+  const handleDelete = async (row, index) => {
     try {
-      await createAttachment({
-        application: "file",
-        recordType: props.recordType,
-        recordId: props.recordId,
-        storageBlobDTOs: [...newFileList.value, ...tableData.value],
-      });
-      newFileList.value = [];
-      // 鍒锋柊鍒楄〃
+      await deleteAttachment([row.storageAttachmentId]);
+      proxy?.$modal?.msgSuccess("鍒犻櫎鎴愬姛");
       setList();
     } catch (error) {
-      proxy?.$modal?.msgError("涓婁紶澶辫触");
+      proxy?.$modal?.msgError("鍒犻櫎澶辫触");
     }
-  }
-  uploadDialogVisible.value = false;
-};
+  };
 
-const closeUpload = () => {
-  newFileList.value = [];
-  uploadDialogVisible.value = false;
-}
+  const setList = () => {
+    attachmentList({
+      recordType: props.recordType,
+      recordId: props.recordId,
+    }).then(res => {
+      if (res && res.data) {
+        tableData.value = res.data || [];
+      }
+    });
+  };
 
-const handleDelete = async (row, index) => {
-  try {
-    await deleteAttachment([row.storageAttachmentId]);
-    proxy?.$modal?.msgSuccess("鍒犻櫎鎴愬姛");
+  const downloadFile = url => {
+    window.open(url, "_blank");
+  };
+  onMounted(() => {
     setList();
-  } catch (error) {
-    proxy?.$modal?.msgError("鍒犻櫎澶辫触");
-  }
-};
-
-const setList = () => {
-  attachmentList({
-    recordType: props.recordType,
-    recordId: props.recordId,
-  }).then(res => {
-    if (res && res.data) {
-      tableData.value = res.data || [];
-    }
   });
-};
-
-const downloadFile = (url) => {
-  window.open(url, "_blank");
-};
-onMounted(() => {
-  setList();
-});
 </script>
 
 <style scoped>
-.attachment-dialog {
-  border-radius: 12px;
-}
+  .attachment-dialog {
+    border-radius: 12px;
+  }
 
-.toolbar {
-  margin-bottom: 16px;
-  text-align: right;
-}
+  .toolbar {
+    margin-bottom: 16px;
+    text-align: right;
+  }
 
-.table-container {
-  max-height: 40vh;
-  overflow-y: auto;
-  min-height: 120px;
-  padding-bottom: 16px;
-  box-sizing: border-box;
-  will-change: scroll-position;
-  transform: translateZ(0);
-  -webkit-overflow-scrolling: touch;
-}
+  .table-container {
+    max-height: 40vh;
+    overflow-y: auto;
+    min-height: 120px;
+    padding-bottom: 16px;
+    box-sizing: border-box;
+    will-change: scroll-position;
+    transform: translateZ(0);
+    -webkit-overflow-scrolling: touch;
+  }
 
-:deep(.el-table) {
-  margin-bottom: 0;
-}
+  :deep(.el-table) {
+    margin-bottom: 0;
+  }
 
-:deep(.el-table__body-wrapper) {
-  overflow-y: auto;
-  will-change: transform;
-  transform: translateZ(0);
-}
+  :deep(.el-table__body-wrapper) {
+    overflow-y: auto;
+    will-change: transform;
+    transform: translateZ(0);
+  }
 
-:deep(.el-table__body tr) {
-  transition: none;
-}
+  :deep(.el-table__body tr) {
+    transition: none;
+  }
 
-:deep(.el-dialog__footer) {
-  padding-top: 12px;
-  border-top: 1px solid #e9ecef;
-}
+  :deep(.el-dialog__footer) {
+    padding-top: 12px;
+    border-top: 1px solid #e9ecef;
+  }
 
-.attachment-table {
-  border-radius: 8px;
-}
+  .attachment-table {
+    border-radius: 8px;
+  }
 
-:deep(.el-dialog__header) {
-  background-color: #f8f9fa;
-  border-bottom: 1px solid #e9ecef;
-  padding: 16px 20px;
-}
+  :deep(.el-dialog__header) {
+    background-color: #f8f9fa;
+    border-bottom: 1px solid #e9ecef;
+    padding: 16px 20px;
+  }
 
-:deep(.el-dialog__title) {
-  font-size: 16px;
-  font-weight: 600;
-}
+  :deep(.el-dialog__title) {
+    font-size: 16px;
+    font-weight: 600;
+  }
 
-:deep(.el-dialog__body) {
-  padding: 16px 20px;
-}
+  :deep(.el-dialog__body) {
+    padding: 16px 20px;
+  }
 
-:deep(.el-table__empty-text) {
-  color: #999;
-}
+  :deep(.el-table__empty-text) {
+    color: #999;
+  }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3