From 18eee6f8818b864d1f8d8fb56298620921f909e4 Mon Sep 17 00:00:00 2001
From: hcong <1050828145@qq.com>
Date: 星期五, 15 十一月 2024 15:49:24 +0800
Subject: [PATCH] bug修改,图片选择组件使用,撤回审核功能

---
 src/views/fysp/data-product/ProdSceneReport.vue         |   24 
 src/views/fysp/check/ProCheckProxy.js                   |   22 +
 src/views/fysp/check/components/CompProRecent.vue       |    2 
 src/views/fysp/check/components/CompDeviceShowTest.vue  |    2 
 src/views/fysp/check/components/CompDevicePhoto.vue     |  104 ++++-
 src/views/fysp/check/components/ArbitraryPhoto.vue      |  325 -------------------
 src/components/FYImageSelectDialog.vue                  |   43 ++
 src/api/fysp/taskApi.js                                 |    8 
 src/views/fysp/check/ProCheck.vue                       |   34 +
 src/views/fysp/check/components/CompLedgerPic.vue       |    1 
 src/views/fysp/check/components/CompProblemAddOrUpd.vue |  198 +++++++----
 src/api/fysp/deviceApi.js                               |    8 
 src/views/fysp/check/components/ComChangeEdit.vue       |   35 +
 src/views/fysp/check/components/CompLedgerPhoto.vue     |   82 ++++
 src/views/fysp/check/components/CompProblemCard.vue     |  110 +++++-
 15 files changed, 492 insertions(+), 506 deletions(-)

diff --git a/src/api/fysp/deviceApi.js b/src/api/fysp/deviceApi.js
index fe67087..f95c919 100644
--- a/src/api/fysp/deviceApi.js
+++ b/src/api/fysp/deviceApi.js
@@ -11,17 +11,17 @@
       .then((res) => res.data);
   },
   // 鑾峰彇璁惧
-  async fetchDevices(sceneId, deviceTypeId) {
+  fetchDevices(sceneId, deviceTypeId) {
     const params = `?sceneId=${sceneId}&deviceTypeId=${deviceTypeId}`;
-    return await $fysp
+    return $fysp
       .get(`device${params}`)
       .then((res) => res)
       .then((res) => res.data);
   },
   // 鑾峰彇璁惧鐘舵�佷互鍙婅澶囪鎯�
-  async fetchDeviceStatus({ deviceId, sceneId, deviceTypeId }) {
+  fetchDeviceStatus({ deviceId, sceneId, deviceTypeId }) {
     const params = `?deviceId=${deviceId}&sceneId=${sceneId}&deviceTypeId=${deviceTypeId}`;
-    return await $fysp
+    return $fysp
       .get(`device/status${params}`)
       .then((res) => res)
       .then((res) => res.data);
diff --git a/src/api/fysp/taskApi.js b/src/api/fysp/taskApi.js
index d7f918b..189f0f1 100644
--- a/src/api/fysp/taskApi.js
+++ b/src/api/fysp/taskApi.js
@@ -119,15 +119,15 @@
   /** 
    * 閫氳繃鎬讳换鍔d鍜屾椂闂村尯闂磋幏鍙栧瓙浠诲姟鍒楄〃
    */
-  async getByTopTaskAndDate({startTime, endTime, sceneTypeId, topTaskId}) {
+  getByTopTaskAndDate({startTime, endTime, sceneTypeId, topTaskId}) {
     const params = `?startTime=${startTime}&endTime=${endTime}&sceneTypeId=${sceneTypeId}&topTaskId=${topTaskId}`;
-    return await $fysp.get(`subtask/getSubTask${params}`).then((res) => res.data);
+    return $fysp.get(`subtask/getSubTask${params}`).then((res) => res.data);
   },
   /** 
    * 鑾峰彇鏌愪釜鍦烘櫙鐨勫贰鏌ヤ换鍔�
    */
-  async getSubtaskByScene({startTime, endTime, sceneId}) {
+  getSubtaskByScene({startTime, endTime, sceneId}) {
     const params = `?startTime=${startTime}&endTime=${endTime}&sceneId=${sceneId}`;
-    return await $fysp.get(`subtask/byScene${params}`).then((res) => res.data);
+    return $fysp.get(`subtask/byScene${params}`).then((res) => res.data);
   }
 };
diff --git a/src/components/FYImageSelectDialog.vue b/src/components/FYImageSelectDialog.vue
index 8eb1bc6..279ddca 100644
--- a/src/components/FYImageSelectDialog.vue
+++ b/src/components/FYImageSelectDialog.vue
@@ -1,12 +1,13 @@
 <template>
   <el-dialog
+    :title="title"
     :model-value="dialogVisible"
     @opened="$emit('update:dialogVisible', true)"
     @closed="$emit('update:dialogVisible', false)"
     width="66%"
     destroy-on-close
   >
-    <div class="main">
+    <div class="main" v-loading="loading">
       <el-row justify="end" v-if="!readonly">
         <el-text size="small" type="info" class="m-r-8"
           >鏈�澶氶�夋嫨{{ maxSelect }}寮犲浘鐗�</el-text
@@ -45,8 +46,9 @@
             :class="[img.isSelect ? 'selected' : 'noActive', 'image']"
             fit="cover"
             :src="img.url"
-            lazy
             @click="onSelect(img, i)"
+            @load="onOneImgLoadSuccess"
+            @error="onOneImgLoadError"
           />
         </el-scrollbar>
         <el-row v-else justify="space-between">
@@ -57,9 +59,11 @@
   </el-dialog>
 </template>
 <script setup>
-import { ref, watch } from 'vue';
+import { ref, watch, computed } from 'vue';
 
 const props = defineProps({
+  // 鏍囬
+  title: String,
   dialogVisible: Boolean,
   /**
    * 鍥剧墖鍒嗙被
@@ -94,6 +98,32 @@
 const activeId = ref('');
 // const typeImgMap = ref(new Map());
 const selectedImgUrlList = ref([]);
+
+let loadedImgCount = ref(0);
+// 鍔犺浇鐘舵��
+const loading = computed(() => {
+  if (activeId.value == '') {
+    return false;
+  }
+  // 淇濊瘉鏈�寮�濮嬫槸鍔犺浇鐘舵�侊紝涓夊垎涔嬩竴鍔犺浇涔嬪悗鍋滄灞曠ず鍔犺浇鐘舵��
+  return !(
+    props.typeImgMap.get(activeId.value).length / 3 <=
+    loadedImgCount.value
+  );
+});
+function onOneImgLoadError(e) {
+  loadedImgCount.value++;
+}
+function onOneImgLoadSuccess(e) {
+  loadedImgCount.value++;
+}
+watch(
+  () => activeId.value,
+  (nV, oV) => {
+    loadedImgCount.value = 0;
+  },
+  { immediate: true }
+);
 
 function onSelect(img, i) {
   if (props.readonly) {
@@ -160,7 +190,7 @@
       });
     });
   },
-  { immediate: true }
+  { deep: true, immediate: true }
 );
 </script>
 <style scoped>
@@ -175,12 +205,12 @@
 
 .main {
   margin: 0 auto; /* 浣跨埗鍏冪礌灞呬腑 */
-  height: 100%;
+  height: 72vh;
   width: 100%;
 }
 
 .imgs {
-  height: 50vh;
+  height: 60vh;
   width: 100%;
   min-height: 100px !important;
   /* border-style:solid;
@@ -251,7 +281,6 @@
 }
 
 ::v-deep .el-dialog__body {
-  height: 60vh;
   padding: 10px calc(var(--el-dialog-padding-primary) + 10px) !important;
 }
 </style>
diff --git a/src/views/fysp/check/ProCheck.vue b/src/views/fysp/check/ProCheck.vue
index 8ca7913..7dc97a6 100644
--- a/src/views/fysp/check/ProCheck.vue
+++ b/src/views/fysp/check/ProCheck.vue
@@ -26,17 +26,18 @@
         class="el-scrollbar"
         v-loading="mainLoading"
       >
-        <CompProblemCard
-          v-if="compProblemCardVisible"
-          :key="i"
-          v-for="(p, i) in curProList"
-          :index="i + 1"
-          :problem="p"
-          :subtask="curSubtask.data"
-          :topTask="topTask"
-          @updated="onProSubmited"
-          @submit="updateSubtask"
-        ></CompProblemCard>
+        <template v-if="compProblemCardVisible">
+          <CompProblemCard
+            :key="i"
+            v-for="(p, i) in curProList"
+            :index="i + 1"
+            :problem="p"
+            :subtask="curSubtask.data"
+            :topTask="topTask"
+            @updated="onProSubmited"
+            @submit="updateSubtask"
+          ></CompProblemCard>
+        </template>
       </el-scrollbar>
       <el-empty v-else description="鏆傛棤璁板綍" v-loading="mainLoading" />
     </template>
@@ -44,7 +45,7 @@
   <el-dialog
     v-model="proAddOrUpdDialogVisible"
     :before-close="proAddOrUpdDialogClose"
-    width="80%"
+    width="50%"
     title="鏂板闂"
   >
     <CompProblemAddOrUpd
@@ -58,7 +59,6 @@
   <ArbitraryPhoto
     v-if="anyPhotoDialog"
     v-model:dialog-visible="anyPhotoDialog"
-    title="鍦烘櫙鍥剧墖"
     :readonly="true"
     :subtask="curSubtask.data"
     ref="arbitraryPhotoRef"
@@ -134,7 +134,7 @@
           click: () => {
             this.openDeviceShowDialog();
           }
-        },
+        }
         // {
         //   name: '鎵归噺瀹℃牳',
         //   color: 'primary',
@@ -307,10 +307,12 @@
         });
     },
     // 闂鍗$墖缁勪欢涓诲姩鍙戣捣鍒锋柊鐖剁粍浠舵暟鎹�
-    updateSubtask() {
+    updateSubtask(refresh = true) {
       this.curSubtask.data.proCheckedNum++;
       this.curSubtask.type = this.getSubtaskType(this.curSubtask.data);
-      this.refreshCurrSubtask();
+      if (refresh) {
+        this.refreshCurrSubtask();
+      }
     },
     onProSubmited(isOk) {
       this.proAddOrUpdDialogClose();
diff --git a/src/views/fysp/check/ProCheckProxy.js b/src/views/fysp/check/ProCheckProxy.js
index 6487082..be0f719 100644
--- a/src/views/fysp/check/ProCheckProxy.js
+++ b/src/views/fysp/check/ProCheckProxy.js
@@ -142,5 +142,27 @@
         break
     }
     return { status: status, action: action }
+  },
+
+  /**
+   * 闂鎾ゅ洖鍚庣姸鎬佸彉鎹�
+   * @param {String} s 褰撳墠闂鐘舵��
+   * @returns 涓嬩竴涓棶棰樼姸鎬�
+   */
+  proBeforeStatus(s) {
+    let status, action
+    switch (s) {
+      case proStatus.fail:
+      case proStatus.pass:
+        status = proStatus.unCheck
+        action = 4
+        break
+      case proStatus.change_fail:  
+      case proStatus.change_pass:
+        status = proStatus.change_unCheck
+        action = 5
+        break
+    }
+    return { status: status, action: action }
   }
 }
diff --git a/src/views/fysp/check/components/ArbitraryPhoto.vue b/src/views/fysp/check/components/ArbitraryPhoto.vue
index ee39f50..46b1c88 100644
--- a/src/views/fysp/check/components/ArbitraryPhoto.vue
+++ b/src/views/fysp/check/components/ArbitraryPhoto.vue
@@ -1,39 +1,18 @@
 <template>
   <FYImageSelectDialog
+    title="鍦烘櫙鍥剧墖"
     :typeList="typesList"
     :typeImgMap="typesMap"
-    :readonly="readonly"
-    :maxSelect="3"
   ></FYImageSelectDialog>
 </template>
 <script>
-import problemApi from '@/api/fysp/problemApi.js';
 import mediafileApi from '@/api/fysp/mediafileApi.js';
 import { $fysp } from '@/api/index.js';
 export default {
   props: {
-    filters: Map,
-    // 鏄惁浠ュ彧璇荤殑褰㈠紡鏌ョ湅褰撳墠椤甸潰
-    readonly: {
-      type: Boolean,
-      default: false
-    },
     subtask: {
       type: Object,
       efault: {}
-    },
-    inspectionGuid: {
-      type: String,
-      default: ''
-    },
-    defaultFile: {
-      type: Array,
-      default: () => []
-    },
-    // 鍥剧墖鍙�夋暟閲忥紝褰撲紶鍏ユ暟瀛楁椂锛屼唬琛ㄥ浘鐗囨暟閲�
-    maxSelect: {
-      type: Number,
-      default: 3
     }
   },
   data() {
@@ -41,76 +20,12 @@
       // 鏃犳暟鎹�
       typesList: [],
       typesMap: new Map(),
-      isEmpty: false,
-      isClose: false,
-      isAll: false,
-      activeId: '',
-      typeList: [
-        // { businesstypeid: 5, businesstype: '甯歌璁板綍' },
-        // { businesstypeid: 3, businesstype: '鐩戞祴璁惧' },
-        // { businesstypeid: 7, businesstype: '閾墝' },
-        // { businesstypeid: 51, businesstype: '鎵╁睍绫讳竴' },
-        // { businesstypeid: 52, businesstype: '鎵╁睍绫讳簩' },
-        // { businesstypeid: 53, businesstype: '鎵╁睍绫讳笁' },
-        // { businesstypeid: 54, businesstype: '鎵╁睍绫诲洓' },
-        // { businesstypeid: 55, businesstype: '鎵╁睍绫讳簲' },
-        // { businesstypeid: 56, businesstype: '鎵╁睍绫诲叚' },
-        // { businesstypeid: 57, businesstype: '鎵╁睍绫讳竷' },
-        // { businesstypeid: 58, businesstype: '鎵╁睍绫诲叓' },
-        // { businesstypeid: 59, businesstype: '鎵╁睍绫讳節' },
-        // { businesstypeid: 60, businesstype: '鎵╁睍绫诲崄' }
-      ],
-      typeImgMap: new Map(),
-      imgUrlList: [],
-      selectedImgUrlList: []
     };
   },
-  watch: {
-    subtask: {
-      handler(nV, oV) {
-        if (nV != oV && nV) {
-          this.getAllImgList();
-        }
-      },
-      immediate: true
-    },
-    defaultFile: {
-      handler(newFileList, oldFileList) {
-        if (this.isClose) {
-          return;
-        }
-      },
-      deep: true
-    },
-    typeImgMap: {
-      handler(newMap, oldMap) {
-        if (this.isClose || newMap.get(this.activeId) == undefined) {
-          return;
-        }
-        newMap.get(this.activeId).forEach((i) => {
-          if (i.isSelect == true) {
-            return;
-          }
-          this.defaultFile.forEach((imgItem) => {
-            if (imgItem.url == i.url) {
-              i.isSelect = true;
-              this.selectedImgUrlList.push(i);
-            }
-          });
-        });
-      }
-    }
-  },
   mounted() {
-    // if (this.subtask) {
-    //   this.getAllImgList();
-    // }
     this.getGroupImgs();
   },
   methods: {
-    onImageSelectSubmit(value) {
-      this.$emit('selectByAnyPhonoEvent', value);
-    },
     // 鍥剧墖鍒嗙被
     getGroupImgs() {
       mediafileApi.getRoutineByStGuid(this.subtask.stGuid).then((res) => {
@@ -146,244 +61,8 @@
         this.typesList = typeList;
         this.typesMap = typeMap;
       });
-    },
-    // 鍒濆鍖栧垰寮�濮嬮�変腑鐨勬爣绛�
-    initSelectedTab() {
-      if (this.typeList.length > 0) {
-        this.activeId = this.typeList[0].businesstypeid;
-      }
-    },
-    getAllImgList() {
-      // for(var k of this.typeImgMap.keys()) {
-      //     this.typeImgMap.set(k, [])
-      // }
-      this.typeImgMap.clear();
-      this.typeList = [];
-
-      const imgMap = new Map();
-      const _typeList = [];
-      mediafileApi.getRoutineByStGuid(this.subtask.stGuid).then((res) => {
-        this.isEmpty = false;
-        let data = res.data;
-        if (data.length == 0) {
-          this.isEmpty = true;
-        }
-        for (const e of data) {
-          let list;
-          let businesstypeid = e.businesstypeid;
-          let businesstype = e.businesstype;
-          let hasThisType = false;
-          imgMap.forEach((v, k, m) => {
-            if (k == businesstypeid) {
-              hasThisType = true;
-              var isAlreadyHas = false;
-              if (v != undefined && v != null) {
-                for (let index = 0; index < v.length; index++) {
-                  const element = v[index];
-                  if (element.guid == e.guid) {
-                    isAlreadyHas = true;
-                    break;
-                  }
-                }
-              }
-              if (!isAlreadyHas) {
-                v.push(e);
-              }
-            }
-          });
-          if (!hasThisType) {
-            imgMap.set(businesstypeid, Array.of(e));
-            _typeList.push(e);
-          }
-          this.imgUrlList.push(e);
-          // TODO imgUrl鍏ㄥ眬閰嶇疆
-          e.url = $fysp.imgUrl + e.extension1 + e.guid + '.jpg';
-          e.isSelect = false;
-        }
-        this.typeImgMap = imgMap;
-        this.typeList = _typeList;
-        this.initSelectedTab();
-      });
-    },
-    getInitImgList() {
-      mediafileApi.getRoutineByStGuid(this.subtask.stGuid).then((res) => {
-        let data = res.data;
-        for (const e of data) {
-          let list;
-          let businesstypeid = e.businesstypeid;
-          let businesstype = e.businesstype;
-          let hasThisType = false;
-          this.typeImgMap.forEach((v, k, m) => {
-            if (k == businesstypeid) {
-              hasThisType = true;
-              if (v.length < 3) {
-                v.push(e);
-              }
-            }
-          });
-          if (!hasThisType) {
-            this.typeImgMap.set(businesstypeid, Array.of(e));
-            this.typeList.push(e);
-          }
-          this.imgUrlList.push(e);
-          // TODO imgUrl鍏ㄥ眬閰嶇疆
-          e.url = $fysp.imgUrl + e.extension1 + e.guid + '.jpg';
-          // e.url = "http://47.100.191.150:9005/images/" + e.extension1 + e.guid + '.jpg'
-          e.isSelect = false;
-        }
-        if (this.typeList.length > 0) {
-          this.activeId = this.typeList[0].businesstypeid;
-        }
-      });
-    },
-    onSelect(img, i) {
-      if (this.readonly) {
-        return;
-      }
-      const index = this.selectedImgUrlList.indexOf(img);
-      if (index == -1) {
-        if (this.maxSelect == 1) {
-          img.isSelect = true;
-          this.selectedImgUrlList.push(img);
-          if (this.selectedImgUrlList.length > 1) {
-            this.selectedImgUrlList.splice(0, 1).forEach((e) => {
-              e.isSelect = false;
-            });
-          }
-        } else if (this.maxSelect > 1) {
-          if (this.selectedImgUrlList.length < this.maxSelect) {
-            img.isSelect = true;
-            this.selectedImgUrlList.push(img);
-          }
-        }
-      } else {
-        this.selectedImgUrlList.splice(index, 1);
-        img.isSelect = false;
-      }
-
-      // img.isSelect = !img.isSelect;
-    },
-    sendSelectedImg(isOk) {
-      let result = [];
-      if (!isOk) {
-        this.$emit('selectByAnyPhonoEvent', result);
-      } else {
-        for (const item of this.imgUrlList) {
-          if (item.isSelect == true) {
-            result.push(item);
-          }
-        }
-        this.isClose = true;
-        this.$emit('selectByAnyPhonoEvent', result);
-      }
     }
   }
 };
 </script>
-<style scoped>
-.center {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-}
-.text {
-  padding: 20px;
-}
-
-.main {
-  margin: 0 auto; /* 浣跨埗鍏冪礌灞呬腑 */
-  height: 100%;
-  width: 100%;
-}
-
-.btns {
-  /* height: 10%; */
-}
-/* 
-.img_types {
-  margin: 0 auto;
-  height: 440px;
-  width: 900px;
-  flex-grow: 1;
-  overflow-y: hidden ;
-  padding: 3%;
-  flex-wrap: wrap;
-  overflow: hidden;
-} */
-
-.imgs {
-  height: 50vh;
-  width: 90%;
-  min-height: 100px !important;
-  /* border-style:solid;
-    border-radius: 1px; */
-  /* height: 100%; */
-  flex-grow: 1 !important;
-  overflow-y: auto !important;
-  /* 鍐呭鐨勫唴杈硅窛 */
-  display: flex !important;
-  flex-wrap: wrap !important;
-  /* overflow: hidden; */
-}
-
-.image {
-  margin: 5px;
-  height: 210px;
-  width: 200px;
-  border-radius: 4px;
-}
-
-.active {
-  padding: 5px;
-  width: 20%;
-  height: 200px;
-  border: 0.5rem outset rgb(52, 155, 4);
-}
-
-.selected {
-  margin: 3px;
-  color: #4abe84;
-  box-shadow: 0 2px 7px 0 rgba(85, 110, 97, 0.35);
-  border: 2px solid rgba(74, 190, 132, 1);
-}
-
-.selected:before {
-  content: '';
-  position: absolute;
-  right: 0;
-  bottom: 0;
-  border: 17px solid #4abe84;
-  border-top-color: transparent;
-  border-left-color: transparent;
-}
-
-.selected:after {
-  content: '';
-  width: 5px;
-  height: 12px;
-  position: absolute;
-  right: 6px;
-  bottom: 6px;
-  border: 2px solid #fff;
-  border-top-color: transparent;
-  border-left-color: transparent;
-  transform: rotate(45deg);
-}
-
-.noActive {
-  /* padding: 5px; */
-}
-
-.blurry {
-  filter: blur(3px);
-}
-.filters {
-  display: flex;
-  padding: 5px;
-}
-
-::v-deep .el-dialog__body {
-  height: 60vh;
-  padding: 10px calc(var(--el-dialog-padding-primary) + 10px) !important;
-}
-</style>
+<style scoped></style>
diff --git a/src/views/fysp/check/components/ComChangeEdit.vue b/src/views/fysp/check/components/ComChangeEdit.vue
index c297afb..d456860 100644
--- a/src/views/fysp/check/components/ComChangeEdit.vue
+++ b/src/views/fysp/check/components/ComChangeEdit.vue
@@ -3,9 +3,7 @@
     <div class="t-card_item">
       鏁存敼鍥剧墖&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
       <div>
-        <!-- <el-button @click="chosePicFromAnyPic">浠庝换鎰忓浘鐗囬�夊彇</el-button> -->
-        <!-- <el-button type="primary" @click="chosePicFromLedgerPic">浠庡彴璐﹂�夊彇</el-button> -->
-        <el-button @click="choseChangePic">浠庢枃浠跺す閫夊彇</el-button>
+        <el-button @click="choseChangePic" :disabled="fileList.length >= 3">浠庢枃浠跺す閫夊彇</el-button>
       </div>
     </div>
     <el-upload
@@ -21,24 +19,30 @@
       :disabled="readonly"
       accept="image/*"
     >
-      <el-button
-        type="primary"
-        id="uploadBtnId"
-        style="display: none"
-      ></el-button>
-      <el-icon>
-        <Plus />
-      </el-icon>
+      <template #trigger v-if="fileList.length < 3 && !readonly">
+        <el-button
+          v-if="fileList.length < 3"
+          type="primary"
+          id="uploadBtnId"
+          style="display: none"
+        ></el-button>
+        <el-icon>
+          <Plus />
+        </el-icon>
+      </template>
+      <template #tip>
+        <div style="color: #f56c6c">鏈�灏戜笂浼犱竴寮犲浘鐗囷紝鏈�澶氶�夋嫨涓夊紶鍥剧墖</div>
+      </template>
     </el-upload>
     <div class="flex-div">
       <el-button type="primary" @click="onSubmit">淇濆瓨</el-button>
       <el-button @click="this.$emit('submited', false)">鍙栨秷</el-button>
     </div>
     <ArbitraryPhoto
-      :max-select="3"
+      :max-select="maxSelectImgCount - fileList.length"
       v-if="anyPhotoDialog"
       v-model:dialog-visible="anyPhotoDialog"
-      @selectByAnyPhonoEvent="handleSelectedAnyPhono"
+      @submit="handleSelectedAnyPhono"
       :subtask="subtask"
       :defaultFile="fileList"
       ref="arbitraryPhotoRef"
@@ -108,6 +112,8 @@
   },
   data() {
     return {
+      // 鍥剧墖閫夋嫨鏈�澶ф暟閲�
+      maxSelectImgCount: 3,
       previewDialogImageUrl: '',
       previewDialogVisible: false,
       fileList: [],
@@ -316,4 +322,7 @@
   width: 100%;
   height: 100%;
 }
+::v-deep .el-upload--picture-card {
+  border: 0 !important;
+}
 </style>
diff --git a/src/views/fysp/check/components/CompDevicePhoto.vue b/src/views/fysp/check/components/CompDevicePhoto.vue
index 94d2112..2fa8a10 100644
--- a/src/views/fysp/check/components/CompDevicePhoto.vue
+++ b/src/views/fysp/check/components/CompDevicePhoto.vue
@@ -1,29 +1,33 @@
 <template>
   <FYImageSelectDialog
+    title="璁惧鍥剧墖"
     :typeList="typeList"
     :typeImgMap="typeImgMap"
-    :maxSelect="1"
   ></FYImageSelectDialog>
 </template>
 <script setup>
-import { ref, watch, computed } from 'vue';
-
+import { ref, computed, onMounted } from 'vue';
+import deviceApi from '@/api/fysp/deviceApi';
+import { useCloned } from '@vueuse/core';
+import { $fysp } from '@/api/index.js';
 const props = defineProps({
   // 灞曠ず妯″紡
   mode: {
     type: Number,
     default: 0
   },
-  pics: Array
+  subtask: {
+    type: Array,
+    default: () => []
+  }
 });
-// typeList: [
-//         { id: 0, label: '鐩戞帶璁惧' },
-//         { id: 1, label: '娌荤悊璁惧' },
-//         { id: 2, label: '鐢熶骇璁惧' }
-//       ],
 const typeList = computed(() => {
   if (props.mode == 0) {
-    return [{ typeId: 0, typeName: '鐩戞帶璁惧' }];
+    return [
+      { typeId: 0, typeName: '鐩戞帶璁惧' },
+      { typeId: 1, typeName: '娌荤悊璁惧' },
+      { typeId: 2, typeName: '鐢熶骇璁惧' }
+    ];
   } else if (props.mode == 1) {
     return [{ typeId: 1, typeName: '鏁存敼' }];
   } else {
@@ -31,23 +35,69 @@
   }
 });
 const typeImgMap = ref(new Map());
+// 鏍囧噯鍖栧睘鎬у悕
+function convertKeys(obj) {
+  // 灏嗕竴涓猨s瀵硅薄涓墍鏈塪i锛寃i锛宲i寮�澶寸殑灞炴�у叏閮ㄦ敼鎴愬幓鎺夎繖浜涘墠缂�骞朵笖閲嶆柊鍙樹负椹煎嘲寮忓懡鍚�
+  const newObj = {};
+  for (const key in obj) {
+    let newKey = key;
+    if (key.startsWith('di')) {
+      newKey = key.substring(2);
+    } else if (key.startsWith('wi')) {
+      newKey = key.substring(2);
+    } else if (key.startsWith('pi')) {
+      newKey = key.substring(2);
+    }
+    newKey = newKey.charAt(0).toLowerCase() + newKey.slice(1);
+    newObj[newKey] = obj[key];
+  }
+  return newObj;
+}
+// 淇濆瓨鐘舵�佷俊鎭�
+function saveStatus(device, status) {
+  var _picUrl = $fysp.imgUrl + status.dlPicUrl;
+  device.url = _picUrl;
+}
+function getDeviceImgList() {
+  let deviceImgMap = typeImgMap.value;
+  for (const deviceTopTypeElement of typeList.value) {
+    const topTypeId = deviceTopTypeElement.typeId;
+    deviceImgMap.set(topTypeId, []);
+    deviceApi.fetchDevices(props.subtask.sceneId, topTypeId).then((result) => {
+      // 鏍囧噯鍖栧睘鎬у悕
+      for (let i = 0; i < result.data.length; i++) {
+        var element = convertKeys(result.data[i]);
+        // 鑾峰彇璁惧鐘舵�佷俊鎭�
+        let data = {
+          deviceId: element.id,
+          sceneId: element.sceneGuid,
+          deviceTypeId: topTypeId
+        };
+        deviceApi.fetchDeviceStatus(data).then((status) => {
+          var statusData = status.data;
+          if (statusData) {
+            if (statusData.length == 0) {
+              return;
+            }
+            element = convertKeys(result.data[i]);
+            for (let j = 0; j < statusData.length; j++) {
+              // 澶嶅埗鍑轰竴涓澶囧璞�
+              var newDevice = useCloned(element).cloned.value;
+              const statusItem = statusData[j];
+              // 璁惧瀵硅薄娣诲姞涓�涓睘鎬у垪琛ㄥ睘鎬х敤鏉ヤ繚瀛樿澶囩姸鎬�
+              saveStatus(newDevice, statusItem);
+              newDevice.dlLocation = statusItem.dlLocation;
+              newDevice.topTypeId = topTypeId;
 
-watch(
-  () => props.pics,
-  (nV, oV) => {
-    nV.forEach(e => {
-      if (!typeImgMap.value.has(e.topTypeId)) {
-        typeImgMap.value.set(e.topTypeId, [])
+              deviceImgMap.get(topTypeId).push(newDevice);
+            }
+          }
+        });
       }
-      typeImgMap.value.get(r.topTypeId).push({})
     });
-    typeImgMap.value.set(
-      1,
-      nV.map((v) => {
-        return { url: v };
-      })
-    );
-  },
-  { immediate: true }
-);
-</script>
\ No newline at end of file
+  }
+}
+onMounted(() => {
+  getDeviceImgList();
+});
+</script>
diff --git a/src/views/fysp/check/components/CompDeviceShowTest.vue b/src/views/fysp/check/components/CompDeviceShowTest.vue
index a45c39b..2a250e1 100644
--- a/src/views/fysp/check/components/CompDeviceShowTest.vue
+++ b/src/views/fysp/check/components/CompDeviceShowTest.vue
@@ -41,7 +41,7 @@
           >
             <div style="">
               <el-descriptions style="" :column="3" size="small" border>
-                <el-descriptions-item width="64px" label="绔欑偣鍚嶇О" :span="3">{{
+                <el-descriptions-item width="64px" :label="currSelect.topDeviceTypeId == 0 ? '绔欑偣鍚嶇О' : '璁惧鍚嶇О'" :span="3">{{
                   item.name || '鏃�'
                 }}</el-descriptions-item>
                 <el-descriptions-item label="渚涘簲鍟�">{{
diff --git a/src/views/fysp/check/components/CompLedgerPhoto.vue b/src/views/fysp/check/components/CompLedgerPhoto.vue
new file mode 100644
index 0000000..5d60c8c
--- /dev/null
+++ b/src/views/fysp/check/components/CompLedgerPhoto.vue
@@ -0,0 +1,82 @@
+<template>
+  <FYImageSelectDialog
+    title="鍙拌处鍥剧墖"
+    :typeList="typeList"
+    :typeImgMap="typeImgMap"
+  ></FYImageSelectDialog>
+</template>
+<script setup>
+import { ref, computed, onMounted } from 'vue';
+import problemApiFytz from '@/api/fytz/problemApi.js';
+import userApi from '@/api/fysp/userApi.js';
+import { svToTz } from '@/enum/scene';
+import { $fytz } from '@/api/index';
+import { useCloned } from '@vueuse/core';
+const props = defineProps({
+  // 灞曠ず妯″紡
+  mode: {
+    type: Number,
+    default: 0
+  },
+  subtask: {
+    type: Array,
+    default: () => []
+  }
+});
+const typeList = ref([]);
+const typeImgMap = ref(new Map());
+function getList() {
+  userApi.getTzId(props.subtask.sceneId).then((res) => {
+    let tzUserId = res.tzUserId;
+
+    problemApiFytz
+      .getLedgerPic({
+        tzUserId: tzUserId,
+        sceneType: svToTz(props.subtask.sceneTypeId).value,
+        time: getMonth()
+      })
+      .then((res) => {
+        let data = res;
+        if (data && data.length > 0) {
+          data.forEach((item) => {
+            let type;
+            let typeIndex = typeList.value
+              .map((typeItem) => typeItem.typeName)
+              .indexOf(item.ledgerType);
+            if (typeIndex != -1) {
+              type = typeList.value[typeIndex];
+            }
+            if (
+              typeList.value
+                .map((typeItem) => typeItem.typeName)
+                .indexOf(item.ledgerType) == -1
+            ) {
+              type = {
+                typeId: typeList.value.length,
+                typeName: item.ledgerType
+              };
+              typeList.value.push(type);
+              typeImgMap.value.set(type.typeId, []);
+            }
+            item.url = $fytz.imgUrl + item.path1;
+            typeImgMap.value.get(type.typeId).push(item);
+          });
+        }
+      });
+  });
+}
+function getMonth() {
+  // 浣跨敤Date瀵硅薄瑙f瀽鏃ユ湡瀛楃涓�
+  var date = new Date(props.subtask.subtask.planstarttime);
+  // 鑾峰彇鏈堜唤淇℃伅锛屾湀浠芥槸浠�0寮�濮嬬殑锛屾墍浠ラ渶瑕佸姞1
+  let month = date.getMonth() + 1;
+  if (String(month).length == 1) {
+    month = `0${month}`;
+  }
+  var year = date.getFullYear();
+  return `${year}-${month}`;
+}
+onMounted(() => {
+  getList();
+});
+</script>
diff --git a/src/views/fysp/check/components/CompLedgerPic.vue b/src/views/fysp/check/components/CompLedgerPic.vue
index 27bb0ea..3c5e154 100644
--- a/src/views/fysp/check/components/CompLedgerPic.vue
+++ b/src/views/fysp/check/components/CompLedgerPic.vue
@@ -30,7 +30,6 @@
 <script>
 import problemApiFytz from '@/api/fytz/problemApi.js';
 import userApi from '@/api/fysp/userApi.js';
-import mediafileApi from '@/api/fysp/mediafileApi.js';
 import { svToTz } from '@/enum/scene';
 import { $fytz } from '@/api/index';
 import { useCloned } from '@vueuse/core';
diff --git a/src/views/fysp/check/components/CompProRecent.vue b/src/views/fysp/check/components/CompProRecent.vue
index 54d51ff..bb037b4 100644
--- a/src/views/fysp/check/components/CompProRecent.vue
+++ b/src/views/fysp/check/components/CompProRecent.vue
@@ -165,7 +165,7 @@
         }
       });
       // 棰濆澶勭悊
-      this.curProList.sort((o1, o2) => o2.getTime() - o1.getTime());
+      this.curProList.sort((o1, o2) => o2.getDate() - o1.getDate());
       this.loading = false;
     },
     // 鏍规嵁瀛愪换鍔¤幏鍙栭噷闈㈢殑闂鍒楄〃
diff --git a/src/views/fysp/check/components/CompProblemAddOrUpd.vue b/src/views/fysp/check/components/CompProblemAddOrUpd.vue
index 30db7f7..91ba7d2 100644
--- a/src/views/fysp/check/components/CompProblemAddOrUpd.vue
+++ b/src/views/fysp/check/components/CompProblemAddOrUpd.vue
@@ -1,6 +1,21 @@
 <template>
   <div class="main-container">
     <el-form :model="problem" label-width="auto" style="max-width: 95%">
+      <el-form-item label="闂浣嶇疆" prop="locationid">
+        <el-select
+          v-model="deepCopyProblem.locationid"
+          @change="onProLocationChange"
+          class="row"
+          :disabled="readonly"
+        >
+          <el-option
+            v-for="item in posList"
+            :key="item.index"
+            :label="item.text"
+            :value="item.index"
+          />
+        </el-select>
+      </el-form-item>
       <el-form-item label="闂绫诲瀷" prop="proType">
         <el-select
           v-model="proType"
@@ -31,26 +46,22 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="闂浣嶇疆" prop="locationid">
-        <el-select
-          v-model="deepCopyProblem.locationid"
-          @change="onProLocationChange"
+      <el-form-item label="琛ュ厖璇存槑" :disabled="readonly" prop="proRemark">
+        <el-input
+          v-model="proRemark"
+          type="textarea"
+          @change="onProRemarkChange"
           class="row"
+          placeholder="璇疯緭鍏�"
           :disabled="readonly"
-        >
-          <el-option
-            v-for="item in posList"
-            :key="item.index"
-            :label="item.text"
-            :value="item.index"
-          />
-        </el-select>
+        />
       </el-form-item>
       <el-form-item label="闂寤鸿" prop="advise">
         <el-select
           v-model="deepCopyProblem.advise"
           class="row"
           :disabled="readonly"
+          @change="onProAdviseChange"
         >
           <el-option
             v-for="item in adviseOptions"
@@ -60,28 +71,46 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="琛ュ厖璇存槑" :disabled="readonly" prop="proRemark">
+      <el-form-item
+        v-show="deepCopyProblem.advise && deepCopyProblem.advise != ''"
+        label="闂寤鸿淇"
+        prop="_adviseEdit"
+        :disabled="false"
+      >
         <el-input
-          v-model="proRemark"
+          v-model="deepCopyProblem._adviseEdit"
           type="textarea"
-          @change="onProRemarkChange"
+          @change="onProAdviseEditChange"
           class="row"
-          placeholder="璇疯緭鍏�"
+          placeholder="璇疯緭鍏ラ棶棰樺缓璁慨姝�"
+          :disabled="readonly"
         />
       </el-form-item>
       <div class="t-card_item">
         闂鍥剧墖&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
         <div>
-          <el-button @click="chosePicFromAnyPic" v-show="!readonly"
+          <el-button
+            @click="chosePicFromAnyPic"
+            v-show="!readonly"
+            :disabled="fileList.length >= 3"
             >浠庡満鏅浘鐗囬�夊彇</el-button
           >
-          <el-button @click="chosePicFromDevicePic" v-show="!readonly"
+          <el-button
+            @click="chosePicFromDevicePic"
+            v-show="!readonly"
+            :disabled="fileList.length >= 3"
             >浠庤澶囧浘鐗囬�夊彇</el-button
           >
-          <el-button @click="chosePicFromLedgerPic" v-show="!readonly"
+          <el-button
+            @click="chosePicFromLedgerPic"
+            v-show="!readonly"
+            :disabled="fileList.length >= 3"
             >浠庡彴璐﹂�夊彇</el-button
           >
-          <el-button @click="choseChangePic" v-show="!readonly"
+          <el-button
+            @click="choseChangePic"
+            v-show="!readonly"
+            :disabled="fileList.length >= 3"
             >浠庢枃浠跺す閫夊彇</el-button
           >
         </div>
@@ -99,14 +128,20 @@
         :disabled="readonly"
         accept="image/*"
       >
-        <el-button
-          type="primary"
-          id="uploadBtnId"
-          style="display: none"
-        ></el-button>
-        <el-icon v-show="fileList.length != 3">
-          <Plus />
-        </el-icon>
+        <template #trigger v-if="fileList.length < 3 && !readonly">
+          <el-button
+            v-if="fileList.length < 3"
+            type="primary"
+            id="uploadBtnId"
+            style="display: none"
+          ></el-button>
+          <el-icon>
+            <Plus />
+          </el-icon>
+        </template>
+        <template #tip>
+          <div style="color: #f56c6c">鏈�灏戜笂浼犱竴寮犲浘鐗囷紝鏈�澶氶�夋嫨涓夊紶鍥剧墖</div>
+        </template>
       </el-upload>
       <el-form-item>
         <el-button type="primary" @click="onSubmit" v-show="!readonly"
@@ -119,48 +154,35 @@
     </el-form>
 
     <ArbitraryPhoto
-      :max-select="3"
+      :max-select="maxSelectImgCount - fileList.length"
       v-if="anyPhotoDialog"
       v-model:dialog-visible="anyPhotoDialog"
-      @selectByAnyPhonoEvent="handleSelectedAnyPhono"
+      @submit="handleSelectedAnyPhono"
       :subtask="subtask"
       :defaultFile="fileList"
       ref="arbitraryPhotoRef"
     >
     </ArbitraryPhoto>
-    <el-dialog
-      title="鍙拌处鍥剧墖"
-      width="80%"
-      v-model="ledgerPicDialog"
-      :before-close="beforeLedgerPicDialogclose"
-      class="dialog_style"
+    <CompLedgerPhoto
+      :max-select="maxSelectImgCount - fileList.length"
+      v-if="ledgerPicDialog"
+      v-model:dialog-visible="ledgerPicDialog"
+      @submit="handleLedgerPicPhono"
+      :subtask="subtask"
+      :defaultFile="fileList"
+      ref="ledgerPhotoRef"
+    ></CompLedgerPhoto>
+    <CompDevicePhoto
+      :max-select="maxSelectImgCount - fileList.length"
+      v-if="deiveceImgDialog"
+      v-model:dialog-visible="deiveceImgDialog"
+      @submit="handleSelectedDevicePhono"
+      :subtask="subtask"
+      :defaultFile="fileList"
+      ref="deiveceImgDialogRef"
     >
-      <LedgerPic
-        v-if="ledgerPicDialog"
-        @selectByLedgerPicEvent="handleLedgerPicPhono"
-        :month="month"
-        :subtask="subtask"
-        :defaultFile="fileList"
-        ref="ledgerPicRef"
-      >
-      </LedgerPic>
-    </el-dialog>
-    <el-dialog
-      title="璁惧鍥剧墖"
-      width="80%"
-      v-model="deiveceImgDialog"
-      :before-close="beforeDeiveceImgDialogclose"
-      class="dialog_style"
-    >
-      <CompDevicePhono
-        v-if="deiveceImgDialog"
-        @selectPhonoEvent="handleSelectedDevicePhono"
-        :imgPathsDataSource="deviceImgObjList"
-        :defaultFile="fileList"
-        ref="deiveceImgDialogRef"
-      >
-      </CompDevicePhono>
-    </el-dialog>
+    </CompDevicePhoto>
+
     <el-dialog v-model="previewDialogVisible">
       <img w-full :src="previewDialogImageUrl" alt="棰勮" class="preview-pic" />
     </el-dialog>
@@ -169,19 +191,20 @@
 <script>
 import ArbitraryPhoto from './ArbitraryPhoto.vue';
 import LedgerPic from './CompLedgerPic.vue';
-import CompDevicePhono from './CompDevicePhono.vue';
+import CompLedgerPhoto from './CompLedgerPhoto.vue';
+import CompDevicePhoto from './CompDevicePhoto.vue';
 import problemApi from '@/api/fysp/problemApi.js';
 
 import { $fysp } from '@/api/index.js';
 import fileUtil from '@/utils/fileUtils.js';
-import { get, useCloned } from '@vueuse/core';
+import {  useCloned } from '@vueuse/core';
 import { ElMessage } from 'element-plus';
 import deviceApi from '@/api/fysp/deviceApi';
 export default {
   components: {
     ArbitraryPhoto,
-    LedgerPic,
-    CompDevicePhono
+    CompDevicePhoto,
+    CompLedgerPhoto
   },
   props: {
     readonly: {
@@ -212,6 +235,8 @@
   },
   data() {
     return {
+      // 鍥剧墖閫夋嫨鏈�澶ф暟閲�
+      maxSelectImgCount: 3,
       previewDialogVisible: false,
       previewDialogImageUrl: '',
       // 璁惧鍥剧墖鍒楄〃
@@ -276,6 +301,14 @@
         this.pictureValidate();
       },
       deep: true
+    },
+    // 褰撻棶棰樺缓璁敼鍙樻椂闂寤鸿淇璺熺潃鏀瑰彉
+    deepCopyProblem: {
+      handler(nv, ov) {
+        // 鍥剧墖鏍¢獙
+        nv._adviseEdit = ov.advise;
+      },
+      deep: true
     }
   },
   computed: {
@@ -300,10 +333,19 @@
       }, []);
     },
     adviseOptions() {
-      var problemGuid = this.currProTypeGuid || this.problem.guid;
-      var array = this.suggestions.filter(
+      console.log(this.currProTypeGuid, this.problem.guid, this.suggestions);
+
+      let problemGuid = this.currProTypeGuid || this.problem.guid;
+      let array = this.suggestions.filter(
         (item) => item.adProblemtypeguid == problemGuid
       );
+      console.log(
+        this.suggestions.filter(
+          (item) => item.adProblemtypeguid == problemGuid
+        ),
+        this.adviseOptions
+      );
+
       return array;
     }
   },
@@ -312,6 +354,9 @@
     this.getDeviceImgList();
   },
   methods: {
+    onProAdviseChange(value) {
+      this.deepCopyProblem._adviseEdit = this.deepCopyProblem.advise;
+    },
     handlePictureCardPreview(uploadFile) {
       this.previewDialogVisible = true;
       this.previewDialogImageUrl = uploadFile.url;
@@ -403,9 +448,12 @@
         this.deepCopyProblem = {};
       } else {
         this.deepCopyProblem = useCloned(this.problem).cloned.value;
+        this.currProTypeGuid = this.problem.guid;
+        this.deepCopyProblem._adviseEdit = this.deepCopyProblem.advise;
       }
 
       this.type = 'guid' in this.deepCopyProblem ? 1 : 0;
+
       // 鑾峰彇闂绫诲瀷
       let data = {
         sceneTypeId: this.subtask.sceneTypeId,
@@ -483,7 +531,6 @@
       }
     },
     handleLedgerPicPhono(data) {
-      this.beforeLedgerPicDialogclose();
       let isExist = false;
       for (const item of data) {
         for (const already of this.fileList) {
@@ -520,9 +567,13 @@
     onProRemarkChange(value) {
       this.changeProblemname();
     },
+    onProAdviseEditChange(value) {},
     onProTypeChange(value) {
-      this.deepCopyProblem.description = '';
-      this.deepCopyProblem.advise = '';
+      // 榛樿闂鎻忚堪鍜岄棶棰樺缓璁负绗竴涓�
+      this.currProTypeGuid = this.descriptionOptions[0].guid;
+      this.deepCopyProblem.description = this.descriptionOptions[0].description;
+      this.deepCopyProblem.advise = this.adviseOptions[0].adName;
+      this.deepCopyProblem._adviseEdit = this.deepCopyProblem.advise;
     },
     findProByProDesName(name) {
       let result;
@@ -653,17 +704,16 @@
       }
     },
     handleSelectedDevicePhono(data) {
-      this.beforeDeiveceImgDialogclose();
       let isExist = false;
       for (const item of data) {
         for (const already of this.fileList) {
-          if (item._picUrl == already.url) {
+          if (item.url == already.url) {
             isExist = true;
           }
         }
         if (!isExist) {
           this.fileList.push({
-            url: item._picUrl,
+            url: item.url,
             name: '1'
           });
         }
diff --git a/src/views/fysp/check/components/CompProblemCard.vue b/src/views/fysp/check/components/CompProblemCard.vue
index 3db8c37..9ab31b5 100644
--- a/src/views/fysp/check/components/CompProblemCard.vue
+++ b/src/views/fysp/check/components/CompProblemCard.vue
@@ -1,6 +1,11 @@
 <template>
   <el-card class="layout" shadow="hover">
-    <el-steps :active="proStatus.index" finish-status="success" style="" align-center>
+    <el-steps
+      :active="proStatus.index"
+      finish-status="success"
+      style=""
+      align-center
+    >
       <el-step v-for="(s, i) in getSteps" :key="i" :title="s" />
     </el-steps>
 
@@ -30,12 +35,20 @@
     </el-descriptions>
 
     <el-scrollbar>
-      <el-descriptions title=" " :column="2" direction="vertical" size="small" border>
+      <el-descriptions
+        title=" "
+        :column="2"
+        direction="vertical"
+        size="small"
+        border
+      >
         <template v-for="(pic, t) in pics" :key="t">
           <template v-if="pic.path.length > 0">
             <el-descriptions-item
               :label="pic.title"
-              :label-class-name="t == 0 ? 'descriptions-label-1' : 'descriptions-label-2'"
+              :label-class-name="
+                t == 0 ? 'descriptions-label-1' : 'descriptions-label-2'
+              "
             >
               <el-space>
                 <el-image
@@ -59,20 +72,45 @@
     <el-row v-if="true" style="margin-top: 16px">
       <el-col :span="12">
         <el-row justify="start" class="btn-group">
-          <el-button type="success" size="small" @click="updatePro" plain>闂鏇存</el-button>
-          <el-button type="primary" size="small" @click="updateChange" plain>鏁存敼妫�楠�</el-button>
-          <el-button type="info" size="small" @click="currProRecent" plain>闂澶嶇幇</el-button>
+          <el-button type="success" size="small" @click="updatePro" plain
+            >闂鏇存</el-button
+          >
+          <el-button type="primary" size="small" @click="updateChange" plain
+            >鏁存敼妫�楠�</el-button
+          >
+          <el-button type="info" size="small" @click="currProRecent" plain
+            >闂澶嶇幇</el-button
+          >
         </el-row>
       </el-col>
       <el-col :span="12">
         <el-row justify="end" class="btn-group">
-          <el-button type="danger" size="small" @click="deletePro" :disabled="!proStatus.deletable"
+          <el-button
+            type="danger"
+            size="small"
+            @click="deletePro"
+            :disabled="!proStatus.deletable"
             >鍒犻櫎</el-button
           >
-          <el-button type="warning" size="small" @click="rejectPro" :disabled="!proStatus.checkable"
+          <el-button
+            type="danger"
+            size="small"
+            @click="beforePro"
+            :disabled="proStatus.checkable"
+            >鎾ら攢</el-button
+          >
+          <el-button
+            type="warning"
+            size="small"
+            @click="rejectPro"
+            :disabled="!proStatus.checkable"
             >椹冲洖</el-button
           >
-          <el-button type="success" size="small" @click="passPro" :disabled="!proStatus.checkable"
+          <el-button
+            type="success"
+            size="small"
+            @click="passPro"
+            :disabled="!proStatus.checkable"
             >閫氳繃</el-button
           >
         </el-row>
@@ -82,7 +120,7 @@
   <div class="dialog-wrapper">
     <el-dialog
       title="闂鏇存"
-      width="80%"
+      width="50%"
       v-model="proAddOrUpdDialogVisible"
       :before-close="proAddOrUpdDialogClose"
     >
@@ -107,7 +145,7 @@
     />
   </el-dialog>
   <el-dialog
-    width="80%"
+    width="50%"
     title="鏁存敼妫�楠�"
     v-model="changeEditDialogVisible"
     :before-close="changeEditDialogClose"
@@ -124,7 +162,7 @@
   </el-dialog>
   <!-- 闂澶嶇幇 -->
   <el-dialog
-    width="80%"
+    width="50%"
     title="闂澶嶇幇"
     v-model="proRecentDialogVisible"
     :before-close="proRecentDialogClose"
@@ -289,7 +327,7 @@
             })
             .then((res) => {
               if (res.success) {
-                this.$emit('submit')
+                this.$emit('submit');
               }
             });
         }
@@ -301,6 +339,33 @@
     passPro() {
       this.checkPro(true);
     },
+    beforePro() {
+      const pro = this.problem;
+      let status = this.proStatus;
+      let doneMsg;
+      if (status.index <= 2) {
+        doneMsg = '闂鏈鏍�';
+      } else if (status.index <= 3) {
+        doneMsg = '鏁存敼鏈鏍�';
+      }
+      useMessageBoxTip({
+        confirmMsg: `纭鎾ゅ洖鍒�${doneMsg}锛焋,
+        confirmTitle: '瀹℃牳鎾ゅ洖',
+        onConfirm: () => {
+          const { status, action } = ProCheckProxy.proBeforeStatus(
+            pro.extension3
+          );
+          return problemApi
+            .checkProblem({ pId: pro.guid, action: action })
+            .then((res) => {
+              if (res.success) {
+                pro.extension3 = status;
+                this.$emit('submit', false);
+              }
+            });
+        }
+      });
+    },
     checkPro(pass) {
       const pro = this.problem;
       let doneMsg = pass ? '閫氳繃' : '椹冲洖';
@@ -308,13 +373,18 @@
         confirmMsg: `纭鏄惁${doneMsg}璇ラ棶棰橈紵`,
         confirmTitle: '闂瀹℃牳',
         onConfirm: () => {
-          const { status, action } = ProCheckProxy.proNextStatus(pro.extension3, pass);
-          return problemApi.checkProblem({ pId: pro.guid, action: action }).then((res) => {
-            if (res.success) {
-              pro.extension3 = status;
-              this.$emit('submit');
-            }
-          });
+          const { status, action } = ProCheckProxy.proNextStatus(
+            pro.extension3,
+            pass
+          );
+          return problemApi
+            .checkProblem({ pId: pro.guid, action: action })
+            .then((res) => {
+              if (res.success) {
+                pro.extension3 = status;
+                this.$emit('submit', false);
+              }
+            });
         }
       });
     },
diff --git a/src/views/fysp/data-product/ProdSceneReport.vue b/src/views/fysp/data-product/ProdSceneReport.vue
index 1274d47..c3891fa 100644
--- a/src/views/fysp/data-product/ProdSceneReport.vue
+++ b/src/views/fysp/data-product/ProdSceneReport.vue
@@ -71,21 +71,15 @@
       </el-scrollbar>
     </template>
   </BaseContentLayout>
-  <el-dialog
-    v-model="anyPhotoDialog"
-    width="66%"
-    title="浠绘剰鍥剧墖"
-    destroy-on-close
-  >
-    <ArbitraryPhoto
-      :max-select="1"
-      :readonly="false"
-      :subtask="curSubtask.data"
-      @selectByAnyPhonoEvent="handleSelectAnyPhoto"
-      :defaultFile="[sceneImg]"
-    >
-    </ArbitraryPhoto>
-  </el-dialog>
+  <ArbitraryPhoto
+    v-if="anyPhotoDialog"
+    v-model:dialog-visible="anyPhotoDialog"
+    :max-select="1"
+    :readonly="false"
+    :subtask="curSubtask.data"
+    @submit="handleSelectAnyPhoto"
+    :defaultFile="[sceneImg]"
+  ></ArbitraryPhoto>
   <el-dialog
     title="璁惧鍥剧墖"
     width="66%"

--
Gitblit v1.9.3