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