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