From da7b9833e734332d47a42fb8ba30daf263864b27 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期二, 11 二月 2025 16:17:31 +0800 Subject: [PATCH] 文件上传组件图片预览、工单详情页图片预览 --- src/views/system/work-order/detail/index.vue | 110 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 92 insertions(+), 18 deletions(-) diff --git a/src/views/system/work-order/detail/index.vue b/src/views/system/work-order/detail/index.vue index a9de55e..9a8d9ef 100644 --- a/src/views/system/work-order/detail/index.vue +++ b/src/views/system/work-order/detail/index.vue @@ -16,7 +16,16 @@ <div class="item-warp"> <div>鏁呴殰绫诲瀷锛�</div> <div> - <el-tag style="margin-right: 5px;height:24px;overflow:auto" effect="dark" v-for="(error, index) in workOrderInfo.errorTypeList" :key="index" size="small" type="warning">{{ error }}</el-tag> + <el-tag + style="margin-right: 5px;height:24px;overflow:auto" effect="dark" + v-for="(error, index) in workOrderInfo.errorTypeList" + :key="index" size="small" + :type="error === '鍥惧儚寮傚父' + || error === '鐐逛綅淇℃伅閿欒' + || error === '鏃堕挓鍋忓樊' + || error === 'OSD寮傚父' + ? 'danger' : 'warning'">{{ error }} + </el-tag> </div> </div> <div class="item-warp"> @@ -65,10 +74,10 @@ </div> <div style="margin-left: 2px">鏄惁鎶ュ</div> </div> - <div class="warp"> + <div class="warp" style="display: flex;flex-direction: row;align-items: center"> <div v-if="workOrderInfo.hasReport"><el-link @click type="primary">{{workOrderInfo.hasReport ? '宸叉姤澶�' : '鏈姤澶�'}}</el-link></div> <div v-else>{{workOrderInfo.hasReport ? '宸叉姤澶�' : '鏈姤澶�'}}</div> - <div v-if="!workOrderInfo.hasReport"><el-link type="primary">浜嬪悗鎶ュ</el-link></div> + <div v-if="!workOrderInfo.hasReport"><el-link type="primary">(浜嬪悗鎶ュ)</el-link></div> </div> </div> <div class="info-item weight4"> @@ -78,7 +87,12 @@ </div> <div style="margin-left: 2px">澶勭悊缁撴灉</div> </div> - <div class="warp">{{covertStatus(workOrderInfo.status)}}</div> + <div class="warp" style="display: flex;flex-direction: row;align-items: center"> + <div>{{covertStatus(workOrderInfo.status)}}</div> + <div v-if="workOrderInfo.status ==='YW_HANDLE'"> + <el-link type="primary" @click="handleAuditing">(瀹℃牳)</el-link> + </div> + </div> </div> </div> </el-tab-pane> @@ -95,10 +109,24 @@ <el-tag :type="report.reportType === '浜嬪墠鎶ュ' ? 'warning' : 'danger'">{{report.reportType}}</el-tag> </div> <div style="margin: 8px 0"> - <el-link + <div v-for="item in report.reportMaterials != null ? report.reportMaterials.split(',') : report.reportMaterials" - :underline="false" type="primary" :key="item" @click="handleDownload(item)">{{ item.substring(item.lastIndexOf("/") + 1) - }}</el-link> + :key="item"> + <el-image + v-if="isImageFile(item)" + :src="getPreview(item)" + :preview-src-list="[getPreview(item)]" + fit="cover" + style="width: 100px; height: 100px; margin: 5px;" + > + </el-image> + <el-link + v-else + :underline="false" type="primary" @click="handleDownload(item)">{{ + item.substring(item.lastIndexOf("/") + 1) + }} + </el-link> + </div> </div> <div v-html="report.reportContent"></div> </div> @@ -117,10 +145,24 @@ :timestamp="yw.createTime"> <div> <div style="margin: 8px 0"> - <el-link + <div v-for="item in yw.ywProofMaterials != null ? yw.ywProofMaterials.split(',') : yw.ywProofMaterials" - :underline="false" type="primary" :key="item" @click="handleDownload(item)">{{ item.substring(item.lastIndexOf("/") + 1) - }}</el-link> + :key="item"> + <el-image + v-if="isImageFile(item)" + :src="getPreview(item)" + :preview-src-list="[getPreview(item)]" + fit="cover" + style="width: 100px; height: 100px; margin: 5px;" + > + </el-image> + <el-link + v-else + :underline="false" type="primary" @click="handleDownload(item)">{{ + item.substring(item.lastIndexOf("/") + 1) + }} + </el-link> + </div> </div> <div v-html="yw.ywCondition"></div> </div> @@ -151,24 +193,33 @@ <div class="img-info" v-for="(img, index) in workOrderInfo.imgList" :key="index"> <div> <el-image - style="width: 160px; height: 100px" + style="width: 100%; height: auto" :src="getImgUrl(img.imgUrl)" - :preview-src-list="getImgUrl(img.imgUrl)"> + :preview-src-list="workOrderInfo.imgList.map(i => getImgUrl(i.imgUrl))" + > </el-image> </div> - <div>{{img.createTime}}</div> + <div style="margin-top: 8px;text-align: center">{{img.createTime}}</div> </div> </div> + + <WorkOrderAuditing :auditingOpen="auditingOpen" :dataForm="auditingForm" :ywConditions="ywConditions" @close="closeAuditing"/> + </div> </template> <script> -import {getWorkOrderInfo, getYwConditionList, getYwAuditingList} from '@/api/platform/work-order' +import {getWorkOrderInfo, getYwConditionList, getYwAuditingList, getYwCondition, listWorkOrder} from '@/api/platform/work-order' import {getReportByGb} from '@/api/platform/report' +import WorkOrderAuditing from "@/components/WorkOrder/WorkOrderAuditing"; export default { name: "index", + components: {WorkOrderAuditing}, data() { return { + ywConditions: [], + auditingOpen: false, + auditingForm: {}, selectedTab: 'workorder', loading1: false, loading2: false, @@ -200,6 +251,27 @@ this.getWorkOrder() }, methods: { + getPreview(url) { + // 浣跨敤鍏ㄥ眬閰嶇疆鐨勫浘鐗囧墠缂� + return this.$img + url; + }, + isImageFile(url) { + const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp']; + return imageExtensions.some(ext => + url.toLowerCase().endsWith(ext) + ); + }, + closeAuditing() { + this.auditingOpen = false + }, + // 瀹℃牳鎸夐挳 + handleAuditing() { + this.auditingForm = this.workOrderInfo + getYwCondition(this.workOrderInfo.workOrderNo).then(response => { + this.ywConditions = response.data + this.auditingOpen = true + }) + }, getImgUrl(path) { return this.$img + path; }, @@ -263,13 +335,15 @@ <style scoped> .img-info { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; + flex: 0 0 calc(20% - 8px); /* 姣忚浜斾釜锛屾墍浠ユ瘡涓崰20%锛屽噺鍘婚棿璺� */ + box-sizing: border-box; } + .work-order-img { margin-top: 15px; + display: flex; + flex-wrap: wrap; + gap: 8px; /* 鍙�夛細璁剧疆鍥剧墖涔嬮棿鐨勯棿璺� */ } .work-order-info { width: 100%; -- Gitblit v1.8.0