From 29ea0fd5d04dbaac800f211e0ac7701de0a7f3f4 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 15 九月 2025 15:18:08 +0800
Subject: [PATCH] 新需求

---
 src/views/system/work-order/detail/index.vue |  179 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 167 insertions(+), 12 deletions(-)

diff --git a/src/views/system/work-order/detail/index.vue b/src/views/system/work-order/detail/index.vue
index 8ede435..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">
@@ -29,7 +38,8 @@
               </div>
               <div class="item-warp">
                 <div>澶勭悊鏃堕檺锛�</div>
-                <div>{{workOrderInfo.processingPeriod}}(灏忔椂)</div>
+                <div v-if="workOrderInfo.processingPeriod">{{workOrderInfo.processingPeriod}}(灏忔椂)</div>
+                <div v-else>鏃�</div>
               </div>
               <div class="item-warp">
                 <div>涓嬪彂鏃堕棿锛�</div>
@@ -64,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">
@@ -77,11 +87,16 @@
               </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>
-      <el-tab-pane v-loading="loading2" name="report" label="鎶ュ淇℃伅">
+      <el-tab-pane v-loading="loading2" name="report" label="鎶ュ璁板綍">
         <div v-if="reportList && reportList.length > 0">
           <el-timeline>
             <el-timeline-item
@@ -94,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>
@@ -106,20 +135,91 @@
         </div>
         <el-empty v-else description="鏈煡鍒版姤澶囦俊鎭�"></el-empty>
       </el-tab-pane>
-      <el-tab-pane v-loading="loading3" name="handle" label="杩愮淮淇℃伅">瑙掕壊绠$悊</el-tab-pane>
-      <el-tab-pane v-loading="loading4" name="auditing" label="瀹℃牳淇℃伅">瀹氭椂浠诲姟琛ュ伩</el-tab-pane>
+      <el-tab-pane v-loading="loading3" name="handle" label="澶勭悊璁板綍">
+        <div v-if="ywList && ywList.length > 0">
+          <el-timeline>
+            <el-timeline-item
+              placement="top"
+              v-for="(yw, index) in ywList"
+              :key="index"
+              :timestamp="yw.createTime">
+              <div>
+                <div style="margin: 8px 0">
+                  <div
+                    v-for="item in yw.ywProofMaterials != null ? yw.ywProofMaterials.split(',') : yw.ywProofMaterials"
+                    :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>
+            </el-timeline-item>
+          </el-timeline>
+        </div>
+        <el-empty v-else description="鏈煡鍒拌繍缁村鐞嗕俊鎭�"></el-empty>
+      </el-tab-pane>
+      <el-tab-pane v-loading="loading4" name="auditing" label="瀹℃牳璁板綍">
+        <div v-if="auditingList && auditingList.length > 0">
+          <el-timeline>
+            <el-timeline-item
+              placement="top"
+              v-for="(auditing, index) in auditingList"
+              :key="index"
+              :timestamp="auditing.createTime">
+              <div>
+                <div style="margin: 8px 0"><el-tag :type="auditing.result === '瀹℃牳閫氳繃' ? 'success' : 'warning'">{{auditing.result}}</el-tag></div>
+                <div v-html="auditing.remark"></div>
+              </div>
+            </el-timeline-item>
+          </el-timeline>
+        </div>
+        <el-empty v-else description="鏈煡鍒板鏍镐俊鎭�"></el-empty>
+      </el-tab-pane>
     </el-tabs>
+    <div class="work-order-img">
+      <div class="img-info" v-for="(img, index) in workOrderInfo.imgList" :key="index">
+        <div>
+          <el-image
+            style="width: 100%; height: auto"
+            :src="getImgUrl(img.imgUrl)"
+            :preview-src-list="workOrderInfo.imgList.map(i => getImgUrl(i.imgUrl))"
+            >
+          </el-image>
+        </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} 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,
@@ -141,6 +241,8 @@
         hasReport: null
       },
       reportList: [],
+      ywList: [],
+      auditingList: [],
       workOrderNo: ''
     }
   },
@@ -149,6 +251,30 @@
     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;
+    },
     getWorkOrder() {
       this.loading1 = true
       getWorkOrderInfo(this.workOrderInfo.workOrderNo).then(res => {
@@ -161,6 +287,20 @@
       getReportByGb(this.workOrderInfo.serialNumber).then(res => {
         this.reportList = res.data
         this.loading2 = false
+      })
+    },
+    getYw() {
+      this.loading3 = true;
+      getYwConditionList(this.workOrderInfo.workOrderNo).then(res => {
+        this.ywList = res.data
+        this.loading3 = false
+      })
+    },
+    getAuditing() {
+      this.loading4 = true;
+      getYwAuditingList(this.workOrderInfo.workOrderNo).then(res => {
+        this.auditingList = res.data
+        this.loading4 = false
       })
     },
     covertStatus(status) {
@@ -179,6 +319,10 @@
         this.getWorkOrder()
       } else if (tab.name === 'report') {
         this.getReport()
+      } else if (tab.name === 'handle') {
+        this.getYw()
+      } else if (tab.name === 'auditing') {
+        this.getAuditing()
       }
 
     },
@@ -190,6 +334,17 @@
 </script>
 
 <style scoped>
+.img-info {
+  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%;
   display: flex;

--
Gitblit v1.8.0