From e1b04baf60478e3de9e41e1fc39e1e4346321817 Mon Sep 17 00:00:00 2001
From: zhangwei <1504152376@qq.com>
Date: 星期五, 29 八月 2025 13:27:31 +0800
Subject: [PATCH] '一些改动'

---
 src/views/system/dept/detail.vue |  350 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 305 insertions(+), 45 deletions(-)

diff --git a/src/views/system/dept/detail.vue b/src/views/system/dept/detail.vue
index b3b7c3c..8046cce 100644
--- a/src/views/system/dept/detail.vue
+++ b/src/views/system/dept/detail.vue
@@ -1,45 +1,75 @@
-<script setup lang="ts">
-import { ref, reactive, onMounted, computed, PropType } from "vue";
+<script setup lang="tsx">
+import { ref, reactive, onMounted, computed, PropType, h } from "vue";
 import { useRenderIcon } from "@/components/ReIcon/src/hooks";
 import { useDept } from "./utils/hook";
-import { FormItemProps } from "./utils/types";
-
+import { useDetail } from "./utils/detail";
+import { getTenderOrderDetail } from "@/api/item/index";
+const isLoading = ref(false);
+import { addDialog } from "@/components/ReDialog";
+import pdfPreview from "@/views/system/component/pdfPreview.vue";
+import { deviceDetection } from "@pureadmin/utils";
 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({
-  nowInfo: Object as PropType<FormItemProps>
+  nowID: null
 });
-import Delete from "~icons/ep/delete";
 import EditPen from "~icons/ep/edit-pen";
 import IconParkSolidBack from "~icons/icon-park-solid/back";
+import { message } from "@/utils/message";
 
-const {
-  state,
-  loading,
-  selectedNum,
-  dataList,
-  onSearch,
-  resetForm,
-  openDialog,
-  handleDelete,
-  handleSelectionChange,
-  handleSizeChange,
-  handleCurrentChange,
-  pagination,
-  checkboxAsRadio,
-  onSelectionCancel,
-  onbatchDel
-} = useDept(ref({}));
+const { openDialog } = useDept(ref({}));
+const { openUploadDialog, state, changeDialog, getDetailList } = useDetail();
 defineOptions({
   name: "itemdetail"
 });
-onMounted(() => {
-  console.log(props.nowInfo);
+
+onMounted(async () => {
+  getDetailList(props.nowID);
 });
 const backListPage = () => {
   emit("backListPage");
+};
+const previewPdf = pdfUrl => {
+  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;
+      message("姝e湪涓嬭浇锛�");
+      break;
+  }
+};
+const showPreview = ref(false);
+const showImg = (name: string | number) => {
+  showPreview.value = true;
+  state.srcList = [name];
 };
 </script>
 
@@ -48,21 +78,14 @@
     <el-card>
       <template v-slot:header>
         <div class="flex justify-between">
-          <div>{{ nowInfo.projectName }}</div>
+          <div>{{ state.nowInfo.projectName }}</div>
           <div>
             <el-button
               class="reset-margin"
               link
               type="primary"
               :icon="useRenderIcon(EditPen)"
-              @click="openDialog('淇敼', nowInfo)"
-            />
-            <el-button
-              class="reset-margin"
-              link
-              type="primary"
-              :icon="useRenderIcon(Delete)"
-              @click="openDialog('淇敼', nowInfo)"
+              @click="openDialog('淇敼', state.nowInfo)"
             />
             <el-button
               class="reset-margin"
@@ -75,27 +98,264 @@
         </div>
       </template>
       <div>
-        <el-descriptions class="margin-top" :column="3" :size="size" border>
+        <el-descriptions
+          class="margin-top"
+          :column="3"
+          border
+          label-width="120"
+        >
           <el-descriptions-item label="椤圭洰缂栧彿">
-            {{ nowInfo.projectCode }}
+            {{ state.nowInfo.projectCode }}
           </el-descriptions-item>
-          <el-descriptions-item label="琛屼笟鍝佺洰"
-            >18100000000</el-descriptions-item
-          >
+          <el-descriptions-item label="琛屼笟鍝佺洰">
+            {{ state.nowInfo.hangyepinmuName }}
+          </el-descriptions-item>
           <el-descriptions-item label="閲囪喘鏂瑰紡">
-            {{ nowInfo.caigoufangshiName }}
+            {{ state.nowInfo.caigoufangshiName }}
           </el-descriptions-item>
           <el-descriptions-item label="鑱斿悎浣撴姇鏍�">
-            {{ nowInfo.lianhetitoubiao }}
+            {{ state.nowInfo.lianhetitoubiao }}
           </el-descriptions-item>
-          <el-descriptions-item label="Remarks">
-            <el-tag size="small">School</el-tag>
+          <el-descriptions-item label="寮�鏍囨柟寮�">
+            {{ state.nowInfo.kaibiaofangshi }}
           </el-descriptions-item>
-          <el-descriptions-item label="Address" />
         </el-descriptions>
       </div>
     </el-card>
+    <div class="mt-4.5">
+      <el-card>
+        <el-tabs
+          tab-position="left"
+          style="height: calc(100vh - 380px)"
+          class="demo-tabs"
+          type="border-card"
+        >
+          <el-tab-pane label="鍏憡鏂囦欢涓婁紶">
+            <h4>鍏憡鏂囦欢涓婁紶</h4>
+            <el-divider />
+            <el-scrollbar height="calc(100vh - 430px)">
+              <div>
+                <el-form label-width="auto" style="max-width: 1000px">
+                  <el-form-item label="椤圭洰淇℃伅锛�">
+                    <span class="mr-4">
+                      鎶曟爣鎶ュ悕寮�濮嬫椂闂达細{{
+                        state.nowInfo.toubiaoStartDate ?? "鏆傛棤"
+                      }}
+                    </span>
+                    <span class="mr-4">
+                      鎶曟爣鎶ュ悕鎴鏃堕棿锛�
+                      {{ state.nowInfo.toubiaoEndDate ?? "鏆傛棤" }}
+                    </span>
+                    <span class="mr-4">
+                      寮�鏍囨椂闂达細{{ state.nowInfo.kaibiaoDate ?? "鏆傛棤" }}
+                    </span>
+                  </el-form-item>
+                  <el-form-item label="涓婁紶鍏憡锛�">
+                    <el-button
+                      :disabled="!!state.nowInfo.zhaobiaowenjian"
+                      type="primary"
+                      plain
+                      size="small"
+                      @click="openUploadDialog('涓婁紶', state.nowInfo)"
+                    >
+                      涓婁紶鍏憡
+                    </el-button>
+                    <el-button
+                      v-if="state.nowInfo.zhaobiaowenjian"
+                      type="primary"
+                      plain
+                      size="small"
+                      @click="openUploadDialog('涓婁紶鍙樻洿', state.nowInfo)"
+                    >
+                      涓婁紶鍙樻洿鍏憡
+                    </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>涓婁紶鏃堕棿锛歿{ 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
+                        v-if="state.nowInfo?.changeOrder"
+                        type="primary"
+                        plain
+                        size="small"
+                        @click="
+                          previewPdf(state.nowInfo.changeOrder.biangengwenjian)
+                        "
+                      >
+                        鐐瑰嚮棰勮鍙樻洿鍏憡
+                      </el-button> -->
+                      <!-- <el-button
+                        type="primary"
+                        plain
+                        size="small"
+                        @click="changeDialog('涓婁紶鍙樻洿', state.nowInfo)"
+                      >
+                        淇敼鏍囬
+                      </el-button> -->
+                    </div>
+                  </el-form-item>
+                  <!-- <el-form-item label="纾嬪晢鏂囦欢锛�">
+                    <el-button type="primary" plain size="small">
+                      涓婁紶纾嬪晢鏂囦欢
+                    </el-button>
+                  </el-form-item>
+                  <el-form-item label=" ">
+                    <div class="border-1 w-[100%] rounded-md p-3 pl-3">
+                      <p>纾嬪晢鏂囦欢鍚嶇О</p>
+                      <p>鍙戝竷鏃堕棿锛�2025-8-12 13:41:00</p>
+                      <el-button type="primary" plain size="small">
+                        鐐瑰嚮棰勮
+                      </el-button>
+                      <el-button type="primary" plain size="small">
+                        鐐瑰嚮涓嬭浇
+                      </el-button>
+                    </div>
+                  </el-form-item> -->
+                  <!-- <el-form-item label="婢勬竻涓庣瓟鐤戞枃浠讹細">
+                    <el-button type="primary" plain size="small">
+                      鏂囦欢绠$悊
+                    </el-button>
+                  </el-form-item> -->
+                </el-form>
+              </div>
+              <!-- <el-row :gutter="10" align="right">
+              <el-col :span="3">
+                <el-text size="large"> 椤圭洰淇℃伅锛� </el-text>
+              </el-col>
+              <el-col :span="20">
+                <el-button type="primary" plain>涓婁紶鍏憡</el-button>
+                <el-button type="primary" plain>涓婁紶鍙樻洿鍏憡</el-button>
+              </el-col>
+            </el-row>
+            <el-row :gutter="10" align="right">
+              <el-col :span="3">
+                <el-text size="large"> 鍏憡涓婁紶锛� </el-text>
+              </el-col>
+              <el-col :span="20">
+                <el-button type="primary" plain>涓婁紶鍏憡</el-button>
+                <el-button type="primary" plain>涓婁紶鍙樻洿鍏憡</el-button>
+              </el-col>
+            </el-row>
+            <el-row :gutter="10" align="right">
+              <el-col :span="3">
+                <el-text size="large"> 纾嬪晢鏂囦欢锛� </el-text>
+              </el-col>
+              <el-col :span="20">
+                <el-button type="primary" plain>涓婁紶纾嬪晢鏂囦欢</el-button>
+              </el-col>
+            </el-row>
+            <el-row :gutter="10" align="right">
+              <el-col :span="3">
+                <el-text size="large"> 婢勬竻涓庣瓟鐤戞枃浠讹細 </el-text>
+              </el-col>
+              <el-col :span="20">
+                <el-button type="primary" plain>鏂囦欢绠$悊</el-button>
+              </el-col>
+            </el-row> -->
+            </el-scrollbar>
+          </el-tab-pane>
+          <!-- <el-tab-pane label="寮�璇勬爣绠$悊">寮�璇勬爣绠$悊</el-tab-pane> -->
+          <el-tab-pane label="涓爣鍏ず">涓爣鍏ず</el-tab-pane>
+          <el-tab-pane label="椤圭洰瀹岀粨">椤圭洰瀹岀粨</el-tab-pane>
+        </el-tabs>
+      </el-card>
+    </div>
+    <el-image-viewer
+      v-if="showPreview"
+      :url-list="state.srcList"
+      show-progress
+      @close="showPreview = false"
+    />
   </div>
 </template>
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+.el-divider--horizontal {
+  margin: 11px 0;
+}
+</style>

--
Gitblit v1.9.1