From f0c7f4845fb40bb75b2c9eb61a790e9b8ea7401a Mon Sep 17 00:00:00 2001
From: zhangwei <1504152376@qq.com>
Date: 星期三, 27 八月 2025 11:25:43 +0800
Subject: [PATCH] 'feat上传附件及预览文件'

---
 src/views/system/dept/detail.vue |  179 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 160 insertions(+), 19 deletions(-)

diff --git a/src/views/system/dept/detail.vue b/src/views/system/dept/detail.vue
index 2cb6698..1e3f834 100644
--- a/src/views/system/dept/detail.vue
+++ b/src/views/system/dept/detail.vue
@@ -11,6 +11,11 @@
 interface Emits {
   (e: "backListPage"): void;
 }
+import MaterialIconThemePdf from "~icons/material-icon-theme/pdf";
+import MaterialIconThemeImage from "~icons/material-icon-theme/image";
+import MaterialIconThemeWord from "~icons/material-icon-theme/word";
+import MaterialIconThemeTable from "~icons/material-icon-theme/table";
+import MaterialIconThemeZip from "~icons/material-icon-theme/zip";
 const emit = defineEmits<Emits>();
 const props = defineProps({
   nowID: null
@@ -23,26 +28,79 @@
 defineOptions({
   name: "itemdetail"
 });
+const convertFujianToObjects = (fujianStr, fujianNameStr) => {
+  // 鍒嗗壊瀛楃涓蹭负鏁扮粍骞惰繃婊ょ┖鍊�
+  const srcArray = fujianStr.split(",").filter(Boolean);
+  const nameArray = fujianNameStr.split(",").filter(Boolean);
+
+  // 鎻愬彇鏂囦欢鍚庣紑浣滀负valu
+  const getFileExtension = fileName => {
+    const lastDotIndex = fileName.lastIndexOf(".");
+    // 濡傛灉娌℃湁鍚庣紑鎴栨枃浠跺悕浠ョ偣缁撳熬锛岃繑鍥炵┖瀛楃涓�
+    if (lastDotIndex === -1 || lastDotIndex === fileName.length - 1) {
+      return "";
+    }
+    return fileName.slice(lastDotIndex + 1).toLowerCase();
+  };
+
+  // 鏄犲皠涓虹洰鏍囧璞℃暟缁�
+  return srcArray.map((src, index) => {
+    // 纭繚鍚嶇О鏁扮粍鏈夊搴旂储寮曠殑鍏冪礌
+    const name = nameArray[index]?.trim() || `鏈煡鏂囦欢${index + 1}`;
+
+    return {
+      name: name,
+      filePath: src.trim(),
+      fileType: getFileExtension(name)
+    };
+  });
+};
 onMounted(async () => {
   let res = await getTenderOrderDetail({ id: props.nowID });
   state.nowInfo = res.result;
+  if (state.nowInfo.fujian) {
+    state.nowInfo.fujianList = convertFujianToObjects(
+      state.nowInfo.fujian,
+      state.nowInfo.fujianName
+    );
+  }
 });
 const backListPage = () => {
   emit("backListPage");
 };
 const previewPdf = pdfUrl => {
-  addDialog({
-    title: `棰勮pdf`,
-    props: {},
-    width: "60%",
-    draggable: true,
-    fullscreen: deviceDetection(),
-    fullscreenIcon: true,
-    sureBtnLoading: true,
-    closeOnClickModal: false,
-    contentRenderer: () => h(pdfPreview, { pdfSrc: pdfUrl })
-    // jsx 璇硶 锛堟敞鎰忓湪.vue鏂囦欢鍚敤jsx璇硶锛岄渶瑕佸湪script寮�鍚痩ang="tsx"锛�
-  });
+  console.log(pdfUrl, "pdfUrl");
+
+  switch (pdfUrl.fileType) {
+    case "png":
+      showImg(pdfUrl.filePath);
+      break;
+    case "jepg":
+      showImg(pdfUrl.filePath);
+      break;
+    case "pdf":
+      addDialog({
+        title: `棰勮pdf`,
+        props: {},
+        width: "60%",
+        draggable: true,
+        fullscreen: deviceDetection(),
+        fullscreenIcon: true,
+        sureBtnLoading: true,
+        closeOnClickModal: false,
+        contentRenderer: () => h(pdfPreview, { fileInfo: pdfUrl })
+        // jsx 璇硶 锛堟敞鎰忓湪.vue鏂囦欢鍚敤jsx璇硶锛岄渶瑕佸湪script寮�鍚痩ang="tsx"锛�
+      });
+      break;
+    default:
+      window.location.href = pdfUrl.filePath;
+      break;
+  }
+};
+const showPreview = ref(false);
+const showImg = (name: string | number) => {
+  showPreview.value = true;
+  state.srcList = [name];
 };
 </script>
 
@@ -135,6 +193,7 @@
                     </el-button>
                     <el-button
                       v-if="state.nowInfo.zhaobiaowenjian"
+                      :disabled="!!state.nowInfo.changeOrder"
                       type="primary"
                       plain
                       size="small"
@@ -142,20 +201,96 @@
                     >
                       涓婁紶鍙樻洿鍏憡
                     </el-button>
+                    <el-button
+                      type="primary"
+                      plain
+                      size="small"
+                      @click="changeDialog('涓婁紶鍙樻洿', state.nowInfo)"
+                    >
+                      淇敼鏍囬
+                    </el-button>
                   </el-form-item>
                   <el-form-item v-if="state.nowInfo.zhaobiaowenjian" label=" ">
                     <div class="border-1 w-[100%] rounded-md p-3">
                       <p>{{ state.nowInfo.projectName }}</p>
-                      <p>涓婁紶鏃堕棿锛�2025-8-12 13:41:00</p>
-                      <el-button
+                      <p>涓婁紶鏃堕棿锛歿{ state.nowInfo.fabuDate }}</p>
+                      <p
+                        class="flex items-center cursor-pointer"
+                        @click="
+                          previewPdf({
+                            name: state.nowInfo.zhaobiaowenjian,
+                            filePath: state.nowInfo.zhaobiaowenjianName,
+                            fileType: 'pdf'
+                          })
+                        "
+                      >
+                        鎷涙爣鏂囦欢锛�<MaterialIconThemePdf
+                          style="font-size: 1.5em"
+                        />{{ state.nowInfo.zhaobiaowenjianName }}
+                      </p>
+                      <p
+                        v-if="state.nowInfo?.changeOrder"
+                        class="flex items-center cursor-pointer"
+                        @click="
+                          previewPdf({
+                            name: state.nowInfo.changeOrder.biangengwenjianName,
+                            filePath: state.nowInfo.changeOrder.biangengwenjian,
+                            fileType: 'pdf'
+                          })
+                        "
+                      >
+                        鍙樻洿鍏憡锛�
+                        <MaterialIconThemePdf style="font-size: 1.5em" />
+                        {{ state.nowInfo.changeOrder.biangengwenjianName }}
+                      </p>
+                      <div v-if="state.nowInfo.fujian" class="flex">
+                        闄勪欢锛�
+                        <div>
+                          <p
+                            v-for="item in state.nowInfo.fujianList"
+                            :key="item.src"
+                            class="flex items-center cursor-pointer"
+                            @click="previewPdf(item)"
+                          >
+                            <MaterialIconThemeImage
+                              v-if="
+                                item.fileType == 'png' ||
+                                item.fileType == 'jepg'
+                              "
+                              style="font-size: 1.5em"
+                            />
+                            <MaterialIconThemePdf
+                              v-else-if="item.fileType == 'pdf'"
+                              style="font-size: 1.5em"
+                            />
+                            <MaterialIconThemeTable
+                              v-else-if="item.fileType == 'xlsx'"
+                              style="font-size: 1.5em"
+                            />
+                            <MaterialIconThemeWord
+                              v-else-if="
+                                item.fileType == 'doc' ||
+                                item.fileType == 'docx'
+                              "
+                              style="font-size: 1.5em"
+                            />
+                            <MaterialIconThemeZip
+                              v-else
+                              style="font-size: 1.5em"
+                            />
+                            {{ item.name }}
+                          </p>
+                        </div>
+                      </div>
+                      <!-- <el-button
                         type="primary"
                         plain
                         size="small"
                         @click="previewPdf(state.nowInfo.zhaobiaowenjian)"
                       >
                         鐐瑰嚮棰勮
-                      </el-button>
-                      <el-button
+                      </el-button> -->
+                      <!-- <el-button
                         v-if="state.nowInfo?.changeOrder"
                         type="primary"
                         plain
@@ -165,15 +300,15 @@
                         "
                       >
                         鐐瑰嚮棰勮鍙樻洿鍏憡
-                      </el-button>
-                      <el-button
+                      </el-button> -->
+                      <!-- <el-button
                         type="primary"
                         plain
                         size="small"
                         @click="changeDialog('涓婁紶鍙樻洿', state.nowInfo)"
                       >
                         淇敼鏍囬
-                      </el-button>
+                      </el-button> -->
                     </div>
                   </el-form-item>
                   <!-- <el-form-item label="纾嬪晢鏂囦欢锛�">
@@ -242,6 +377,12 @@
         </el-tabs>
       </el-card>
     </div>
+    <el-image-viewer
+      v-if="showPreview"
+      :url-list="state.srcList"
+      show-progress
+      @close="showPreview = false"
+    />
   </div>
 </template>
 

--
Gitblit v1.9.1