From 06e4c8c1bad514992186d94a65c0dc6250e34716 Mon Sep 17 00:00:00 2001
From: zhangwei <1504152376@qq.com>
Date: 星期四, 28 八月 2025 13:33:32 +0800
Subject: [PATCH] '解决招标文件pdf无法加载问题'

---
 src/views/system/dept/detail.vue |  151 +++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 129 insertions(+), 22 deletions(-)

diff --git a/src/views/system/dept/detail.vue b/src/views/system/dept/detail.vue
index 2cb6698..eec662e 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
@@ -19,30 +24,50 @@
 import IconParkSolidBack from "~icons/icon-park-solid/back";
 
 const { openDialog } = useDept(ref({}));
-const { openUploadDialog, state, changeDialog } = useDetail();
+const { openUploadDialog, state, changeDialog, getDetailList } = useDetail();
 defineOptions({
   name: "itemdetail"
 });
+
 onMounted(async () => {
-  let res = await getTenderOrderDetail({ id: props.nowID });
-  state.nowInfo = res.result;
+  getDetailList(props.nowID);
 });
 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>
 
@@ -142,20 +167,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.zhaobiaowenjianName,
+                            filePath: state.nowInfo.zhaobiaowenjian,
+                            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 +266,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 +343,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