From af5a8d80bca9b8c08543238a370ea3c70c8c59b1 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 21 十一月 2024 11:09:21 +0800
Subject: [PATCH] Merge branch 'hc-dataproduct-v1112' into lsf-dataproduct-1024

---
 /dev/null                                               |  190 ---------------------------
 src/views/fysp/check/components/ArbitraryPhoto.vue      |    8 
 src/components/FYImageSelectDialog.vue                  |  100 ++++++++++----
 src/components/CompGenericWrapper.vue                   |   52 +++++++
 src/components.d.ts                                     |    1 
 src/views/fysp/check/components/CompProblemAddOrUpd.vue |   41 ++++-
 src/views/fysp/check/components/CompProRecent.vue       |    2 
 src/views/fysp/check/components/ComChangeEdit.vue       |    2 
 src/views/fysp/check/components/CompDeviceShowTest.vue  |    3 
 src/views/fysp/check/components/CompLedgerPhoto.vue     |    5 
 src/views/fysp/check/components/CompDevicePhoto.vue     |    5 
 11 files changed, 173 insertions(+), 236 deletions(-)

diff --git a/src/components.d.ts b/src/components.d.ts
index 6228984..f302504 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -10,6 +10,7 @@
     BaseContentLayout: typeof import('./components/core/BaseContentLayout.vue')['default']
     BaseMap: typeof import('./components/map/BaseMap.vue')['default']
     BasePanelLayout: typeof import('./components/core/BasePanelLayout.vue')['default']
+    CompGenericWrapper: typeof import('./components/CompGenericWrapper.vue')['default']
     CompQuickSet: typeof import('./components/search-option/CompQuickSet.vue')['default']
     Content: typeof import('./components/core/Content.vue')['default']
     ElAside: typeof import('element-plus/es')['ElAside']
diff --git a/src/components/CompGenericWrapper.vue b/src/components/CompGenericWrapper.vue
new file mode 100644
index 0000000..2b038a6
--- /dev/null
+++ b/src/components/CompGenericWrapper.vue
@@ -0,0 +1,52 @@
+<template>
+  <!-- dialog鍖呰9 -->
+  <el-dialog v-if="currType == 'dialog'" :title="title" :model-value="visible" @opened="$emit('update:visible', true)"
+    @closed="$emit('update:visible', false)" destroy-on-close>
+    <div v-if="visible">
+      <slot name="content"></slot>
+    </div>
+  </el-dialog>
+  <!-- drawer鍖呰9 -->
+  <el-drawer v-if="currType == 'drawer'" :title="title" size="45%" direction="ltr" :model-value="visible"
+    @opened="$emit('update:visible', true)" @closed="$emit('update:visible', false)" destroy-on-close>
+    <slot name="content"></slot>
+  </el-drawer>
+  <!-- 榛樿鏃犲寘瑁� -->
+  <div v-if="currType == 'normal'">
+    <slot></slot>
+  </div>
+</template>
+<script setup>
+import { ref, defineEmits, watch } from 'vue';
+const props = defineProps({
+  visible: Boolean,
+  title: String,
+  type: {
+    type: String,
+    default: 'normal'
+  }
+});
+const typeOptions = ref([
+  { id: '0', label: 'dialog' },
+  { id: '1', label: 'drawer' },
+  { id: '10', label: '' }
+]);
+const currType = ref('');
+const emit = defineEmits(['update:visible']);
+watch(
+  () => props.type,
+  (nValue) => {
+    currType.value = nValue;
+  },
+  { immediate: true }
+);
+</script>
+<style scoped>
+::v-deep .el-drawer__body {
+  padding-top: 0;
+}
+
+::v-deep .el-drawer__header {
+  margin-bottom: 16px;
+}
+</style>
diff --git a/src/components/FYImageSelectDialog.vue b/src/components/FYImageSelectDialog.vue
index 99397d4..6816f4c 100644
--- a/src/components/FYImageSelectDialog.vue
+++ b/src/components/FYImageSelectDialog.vue
@@ -1,8 +1,8 @@
 <template>
   <el-dialog
     :model-value="dialogVisible"
-    @opened="$emit('update:dialogVisible', true)"
-    @closed="$emit('update:dialogVisible', false)"
+    @opened="handleOpen"
+    @closed="handleClose"
     width="66%"
     destroy-on-close
   >
@@ -40,14 +40,15 @@
           class="imgs"
         >
           <el-image
+            v-loading="img.loading"
             v-for="(img, i) in typeImgMap.get(activeId)"
             :key="i"
             :class="[img.isSelect ? 'selected' : 'noActive', 'image']"
             fit="cover"
             :src="img.url"
             @click="onSelect(img, i)"
-            @load="onOneImgLoadSuccess"
-            @error="onOneImgLoadError"
+            @load="onOneImgLoadSuccess(img)"
+            @error="onOneImgLoadError(img)"
           />
         </el-scrollbar>
         <el-row v-else justify="space-between">
@@ -58,7 +59,7 @@
   </el-dialog>
 </template>
 <script setup>
-import { ref, watch, computed } from 'vue';
+import { ref, watch, computed, onMounted, onUnmounted } from 'vue';
 
 const props = defineProps({
   dialogVisible: Boolean,
@@ -108,10 +109,12 @@
     loadedImgCount.value
   );
 });
-function onOneImgLoadError(e) {
+function onOneImgLoadError(img) {
+  img.loading = false
   loadedImgCount.value++;
 }
-function onOneImgLoadSuccess(e) {
+function onOneImgLoadSuccess(img) {
+  img.loading = false
   loadedImgCount.value++;
 }
 watch(
@@ -148,7 +151,28 @@
     img.isSelect = false;
   }
 }
-
+function handleOpen() {
+  // if (props.typeImgMap.get(activeId.value) == undefined) {
+  //     return;
+  //   }
+  //   props.typeImgMap.get(activeId.value).forEach((i) => {
+  //     if (i.isSelect == true) {
+  //       return;
+  //     }
+  //     props.defaultFile.forEach((imgItem) => {
+  //       if (imgItem.url == i.url) {
+  //         i.isSelect = true;
+  //         selectedImgUrlList.value.push(i);
+  //       }
+  //     });
+  //   });
+  emit('update:dialogVisible', true)
+}
+function handleClose() {
+  selectedImgUrlList.value.forEach(item => item.isSelect = false)
+  selectedImgUrlList.value = []
+  emit('update:dialogVisible', false)
+}
 function handleSubmit() {
   emit('submit', selectedImgUrlList.value);
   emit('update:dialogVisible', false);
@@ -168,27 +192,47 @@
   },
   { immediate: true }
 );
+// watch(
+//   () => props.defaultFile,
+//   (nV, oV) => {
+//     if (props.typeImgMap.get(activeId.value) == undefined) {
+//       return;
+//     }
+//     props.typeImgMap.get(activeId.value).forEach((i) => {
+//       if (i.isSelect == true) {
+//         return;
+//       }
+//       nV.forEach((imgItem) => {
+//         if (imgItem.url == i.url) {
+//           i.isSelect = true;
+//           selectedImgUrlList.value.push(i);
+//         }
+//       });
+//     });
+//   },
+//   { deep: true, immediate: true }
+// );
 
-watch(
-  () => props.typeImgMap,
-  (newMap, oldMap) => {
-    if (newMap.get(activeId.value) == undefined) {
-      return;
-    }
-    newMap.get(activeId.value).forEach((i) => {
-      if (i.isSelect == true) {
-        return;
-      }
-      props.defaultFile.forEach((imgItem) => {
-        if (imgItem.url == i.url) {
-          i.isSelect = true;
-          selectedImgUrlList.value.push(i);
-        }
-      });
-    });
-  },
-  { deep: true, immediate: true }
-);
+// watch(
+//   () => props.typeImgMap,
+//   (newMap, oldMap) => {
+//     if (newMap.get(activeId.value) == undefined) {
+//       return;
+//     }
+//     newMap.get(activeId.value).forEach((i) => {
+//       if (i.isSelect == true) {
+//         return;
+//       }
+//       props.defaultFile.forEach((imgItem) => {
+//         if (imgItem.url == i.url) {
+//           i.isSelect = true;
+//           selectedImgUrlList.value.push(i);
+//         }
+//       });
+//     });
+//   },
+//   { immediate: true }
+// );
 </script>
 <style scoped>
 .center {
diff --git a/src/views/fysp/check/components/ArbitraryPhoto.vue b/src/views/fysp/check/components/ArbitraryPhoto.vue
index 4593d21..52034e9 100644
--- a/src/views/fysp/check/components/ArbitraryPhoto.vue
+++ b/src/views/fysp/check/components/ArbitraryPhoto.vue
@@ -1,5 +1,6 @@
 <template>
   <FYImageSelectDialog
+    v-loading="loading"
     title="鍦烘櫙鍥剧墖"
     :typeList="typesList"
     :typeImgMap="typesMap"
@@ -19,7 +20,8 @@
     return {
       // 鏃犳暟鎹�
       typesList: [],
-      typesMap: new Map()
+      typesMap: new Map(),
+      loading: true,
     };
   },
   mounted() {
@@ -29,6 +31,7 @@
     // 鍥剧墖鍒嗙被
     getGroupImgs() {
       mediafileApi.getRoutineByStGuid(this.subtask.stGuid).then((res) => {
+        this.loading = true
         let typeList = [];
         let typeMap = new Map();
         const data = res.data;
@@ -52,9 +55,10 @@
         }
         this.typesList = typeList;
         this.typesMap = typeMap;
-      });
+      }).finally(() => (this.loading = false));
     }
   }
 };
 </script>
 <style scoped></style>
+ 
\ No newline at end of file
diff --git a/src/views/fysp/check/components/ComChangeEdit.vue b/src/views/fysp/check/components/ComChangeEdit.vue
index 293da55..64703dd 100644
--- a/src/views/fysp/check/components/ComChangeEdit.vue
+++ b/src/views/fysp/check/components/ComChangeEdit.vue
@@ -62,7 +62,6 @@
 </template>
 <script>
 import problemApi from '@/api/fysp/problemApi.js';
-import CompGenericWrapper from './CompGenericWrapper.vue';
 import { $fysp } from '@/api/index.js';
 import fileUtil from '@/utils/fileUtils.js';
 import { useCloned } from '@vueuse/core';
@@ -70,7 +69,6 @@
 export default {
   emits: ['submit', 'cancel'],
   components: {
-    CompGenericWrapper
   },
   watch: {
     oldChangeFileList: {
diff --git a/src/views/fysp/check/components/CompDevicePhono.vue b/src/views/fysp/check/components/CompDevicePhono.vue
deleted file mode 100644
index d1871fe..0000000
--- a/src/views/fysp/check/components/CompDevicePhono.vue
+++ /dev/null
@@ -1,262 +0,0 @@
-<template>
-  <div class="main">
-    <div class="filters" v-if="false">
-      <el-select
-        v-for="(key_select, index_select) of filters.keys()"
-        :placeholder="key_select.text"
-      >
-        <el-option
-          v-for="(key_option, index_option) in filters.get(key_select.key)"
-          :key="key_option.key"
-          :value="key_option.value"
-          :label="key_option.label"
-        >
-        </el-option>
-      </el-select>
-    </div>
-    <div class="btns" v-if="!readonly">
-      <el-button size="small" type="primary" @click="sendSelectedImg(true)">纭畾</el-button>
-      <el-button size="small" type="primary" @click="sendSelectedImg(false)">鍙栨秷</el-button>
-    </div>
-
-    <div class="center">
-      <el-descriptions>
-        <el-descriptions-item label="鎬绘暟">
-          <span>{{ this.imgPathsDataSourceCopy.length }}</span>
-        </el-descriptions-item>
-      </el-descriptions>
-      <el-tabs v-model="activeId" type="card">
-        <el-tab-pane v-for="item in typeList" :label="item.label" :name="item.id"> </el-tab-pane>
-      </el-tabs>
-      <el-empty v-if="imgObjList.length == 0" description="鏆傛棤璁板綍" />
-      <el-scrollbar v-else class="imgs">
-        <el-image
-          v-for="(img, i) in imgObjList"
-          :class="[Boolean(img.isSelect) ? 'selected' : 'noActive', 'image']"
-          fit="cover"
-          :src="img._picUrl"
-          lazy
-          @click="onSelect(img, i)"
-        />
-      </el-scrollbar>
-    </div>
-  </div>
-</template>
-<script>
-import problemApi from '@/api/fysp/problemApi.js';
-import mediafileApi from '@/api/fysp/mediafileApi.js';
-import { $fysp } from '@/api/index.js';
-import { useCloned } from '@vueuse/core';
-export default {
-  props: {
-    filters: Map,
-    // 鏄惁浠ュ彧璇荤殑褰㈠紡鏌ョ湅褰撳墠椤甸潰
-    readonly: {
-      type: Boolean,
-      default: false
-    },
-    imgPathsDataSource: {
-      type: Array,
-      default: () => []
-    },
-    defaultFile: {
-      type: Array,
-      default: () => []
-    }
-  },
-  data() {
-    return {
-      // 鏃犳暟鎹�
-      isEmpty: false,
-      isClose: false,
-      isAll: false,
-      activeId: 0,
-      typeList: [
-        { id: 0, label: '鐩戞帶璁惧' },
-        { id: 1, label: '娌荤悊璁惧' },
-        { id: 2, label: '鐢熶骇璁惧' }
-      ],
-      typeImgMap: new Map(),
-      imgPathsDataSourceCopy: [],
-      imgObjList: []
-    };
-  },
-  watch: {
-    activeId: {
-      handler(newId, oldId) {
-        this.filterImgList()
-      },
-      immediate: true
-    }
-  },
-  mounted() {
-    this.initImgUrlList();
-  },
-  methods: {
-    filterImgList() {
-      this.imgObjList = this.imgPathsDataSourceCopy.filter((item) => {
-        return item.topTypeId == this.activeId;
-      });
-    },
-    initDefaultFile() {
-      for (let item of this.imgPathsDataSourceCopy) {
-        for (let defaultItem of this.defaultFile) {
-          if (item._picUrl == defaultItem.url) {
-            item.isSelect = true;
-          }
-        }
-      }
-    },
-    // 鑾峰彇鍥剧墖璧勬簮
-    initImgUrlList() {
-      this.imgPathsDataSourceCopy = useCloned(this.imgPathsDataSource).cloned.value;
-      this.imgObjList = this.imgPathsDataSourceCopy;
-      this.initDefaultFile();
-
-      this.initSelectedTab();
-    },
-    // 鍒濆鍖栧垰寮�濮嬮�変腑鐨勬爣绛�
-    initSelectedTab() {
-      if (this.typeList.length > 0) {
-        this.activeId = this.typeList[0].id;
-      }
-      this.filterImgList()
-    },
-    onSelect(img, i) {
-      // if (i == 2 && !this.isAll) {
-      //   this.getAllImgList();
-      //   this.isAll = true;
-      // } else {
-      //   if (this.readonly) {
-      //     return;
-      //   }
-      //   img.isSelect = !Boolean(img.isSelect);
-      // }
-
-      if (this.readonly) {
-        return;
-      }
-      img.isSelect = !img.isSelect;
-    },
-    sendSelectedImg(isOk) {
-      let result = [];
-      if (!isOk) {
-        this.$emit('selectPhonoEvent', result);
-      }
-      for (const item of this.imgPathsDataSourceCopy) {
-        if (item.isSelect == true) {
-          result.push(item);
-        }
-      }
-      this.isClose = true;
-      this.$emit('selectPhonoEvent', 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 {
-  height: 210px;
-  width: 200px;
-  border-radius: 4px;
-}
-
-.active {
-  padding: 5px;
-  width: 20%;
-  height: 200px;
-  border: 0.5rem outset rgb(52, 155, 4);
-}
-
-.selected {
-  padding: 5px;
-  color: #4abe84;
-  box-shadow: 0 2px 7px 0 rgba(85, 110, 97, 0.35);
-  border: 1px 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>
diff --git a/src/views/fysp/check/components/CompDevicePhoto.vue b/src/views/fysp/check/components/CompDevicePhoto.vue
index 2fa8a10..275e866 100644
--- a/src/views/fysp/check/components/CompDevicePhoto.vue
+++ b/src/views/fysp/check/components/CompDevicePhoto.vue
@@ -1,5 +1,6 @@
 <template>
   <FYImageSelectDialog
+    v-loading="loading"
     title="璁惧鍥剧墖"
     :typeList="typeList"
     :typeImgMap="typeImgMap"
@@ -10,6 +11,7 @@
 import deviceApi from '@/api/fysp/deviceApi';
 import { useCloned } from '@vueuse/core';
 import { $fysp } from '@/api/index.js';
+const loading = ref(true)
 const props = defineProps({
   // 灞曠ず妯″紡
   mode: {
@@ -64,6 +66,7 @@
     const topTypeId = deviceTopTypeElement.typeId;
     deviceImgMap.set(topTypeId, []);
     deviceApi.fetchDevices(props.subtask.sceneId, topTypeId).then((result) => {
+      loading.value = true;
       // 鏍囧噯鍖栧睘鎬у悕
       for (let i = 0; i < result.data.length; i++) {
         var element = convertKeys(result.data[i]);
@@ -92,7 +95,7 @@
               deviceImgMap.get(topTypeId).push(newDevice);
             }
           }
-        });
+        }).finally(() => (loading.value = false));
       }
     });
   }
diff --git a/src/views/fysp/check/components/CompDeviceShow.vue b/src/views/fysp/check/components/CompDeviceShow.vue
deleted file mode 100644
index b7e36d7..0000000
--- a/src/views/fysp/check/components/CompDeviceShow.vue
+++ /dev/null
@@ -1,233 +0,0 @@
-<template>
-  <div class="main">
-    <!-- 閫夐」 -->
-    <!-- 璁惧绫诲瀷  -->
-    <el-row>
-      <el-col>
-        <span>璁惧绫诲瀷锛�</span>
-      </el-col>
-      <el-col>
-        <el-tabs class="child_select" placeholder="璁惧绫诲瀷" v-model="currSelect.deviceTypeId">
-          <el-tab-pane v-for="item in deviceTypes" :name="item.id" :label="item.label" />
-        </el-tabs>
-      </el-col>
-    </el-row>
-    <!-- 璁惧灞曠ず -->
-    <div class="devices">
-      <el-card class="layout" shadow="hover" v-for="item of cardData">
-        <div class="table-row">
-          <span class="table-cell">绔欑偣: {{ item.diName || item.piName || item.wiName }}</span>
-          <span class="table-cell"
-            >渚涘簲鍟�: {{ item.diSupplier || item.piSupplier || item.wiSupplier }}</span
-          >
-        </div>
-        <div class="table-row">
-          <span class="table-cell"
-            >杩愮淮鍟�: {{ item.diMaintainer || item.piMaintainer || item.wiMaintainer }}</span
-          >
-          <span class="table-cell"
-            >杩愮淮棰戞:
-            {{
-              maintainFrequencysMap.get(
-                item.diMaintainFrequency || item.piMaintainFrequency || item.wiMaintainFrequency
-              )
-            }}</span
-          >
-        </div>
-        <div class="table-row">
-          <span class="table-cell"
-            >杩愮淮浜哄憳:
-            {{ item.diMaintainStaff || item.piMaintainStaff || item.wiMaintainStaff }}</span
-          >
-          <span class="table-cell"
-            >杩愮淮鑱旂郴鏂瑰紡:
-            {{ item.diMaintainTel || item.piMaintainTel || item.wiMaintainTel }}</span
-          >
-        </div>
-        <div class="table-row">
-          <span class="table-cell"
-            >鍝佺墝鍨嬪彿: {{ item.diBrandModel || item.piBrandModel || item.wiBrandModel }}</span
-          >
-          <span class="table-cell"
-            >杩愯鐘舵��:
-            {{
-              runStatusMap.get(item.diRunningStatus || item.piRunningStatus || item.wiRunningStatus)
-            }}
-          </span>
-        </div>
-        <div class="table-row">
-          <span class="table-cell"
-            >浣嶇疆: {{ item.dlLocation || item.piLocation || item.wiLocation }}</span
-          >
-          <!-- The second cell is empty to maintain the two-field per row layout -->
-          <span class="table-cell"></span>
-        </div>
-        <el-image
-          class="pic-style"
-          :src="item.picUrl"
-          fit="cover"
-          :preview-src-list="Array.of(item.picUrl)"
-        />
-      </el-card>
-      <!-- 鏁版嵁涓虹┖鏃� -->
-      <div class="empty" v-if="isEmpty">
-        <h3>鏆傛棤鏁版嵁</h3>
-      </div>
-    </div>
-  </div>
-</template>
-<script>
-import deviceApi from '@/api/fysp/deviceApi';
-import { $fysp } from '@/api/index';
-export default {
-  props: {},
-  mounted() {},
-  watch: {
-    // 閫夋嫨鏀瑰彉鐩戝惉
-    currSelect: {
-      handler(newObj, oldObj) {
-        this.getList();
-      },
-      deep: true
-    }
-  },
-  data() {
-    return {
-      // 鏃犳暟鎹�
-      isEmpty: false,
-      // 鍙屽悜缁戝畾
-      currSelect: {
-        deviceTypeId: 0
-      },
-      // 鍦烘櫙绫诲瀷
-      sceneType: '',
-      // 鍦烘櫙id
-      sceneId: null,
-      // 閫夐」
-      scenes: [],
-      // 鏍规嵁鍦烘櫙绫诲瀷鍐冲畾鐨勮澶囩被鍨�
-      iDevTypes: [
-
-      ],
-      deviceTypes: [
-        { id: 0, label: '鐩戞帶' },
-        { id: 1, label: '娌荤悊' },
-        { id: 2, label: '鐢熶骇' }
-      ],
-      // 鏁版嵁
-      cardData: [],
-      // 杩愯鐘舵��
-      runStatusMap: new Map(
-        [
-          { key: 0, value: '鏈仈缃�' },
-          { key: 1, value: '涓婄嚎涓�' },
-          { key: 2, value: '涓嬬嚎' },
-          { key: 3, value: '鎷嗛櫎' }
-        ].map((item) => [item.key, item.value])
-      ),
-
-      // 缁存姢棰戠巼鐘舵��
-      maintainFrequencysMap: new Map(
-        [
-          { key: '1', value: '姣忔湀涓�娆�' },
-          { key: '2', value: '姣忓搴︿竴娆�' },
-          { key: '3', value: '姣忓崐骞翠竴娆�' },
-          { key: '4', value: '姣忓勾涓�娆�' }
-        ].map((item) => [item.key, item.value])
-      )
-    };
-  },
-  methods: {
-    // 鐖剁粍浠朵富鍔ㄤ紶鍊�
-    init(scene) {
-      this.sceneId = scene.guid;
-      this.sceneType = scene.type;
-      this.iDevTypes = dataMonitorDeviceTypeJs.monitorDevices(this.sceneType)
-      this.getList();
-    },
-    isShowEmpty(data) {
-      if (data.length == 0) {
-        this.isEmpty = true;
-        return true;
-      } else {
-        this.isEmpty = false;
-        return false;
-      }
-    },
-    // 閲嶇疆灞曠ず鐨勬暟鎹�
-    initList() {
-      this.tableData = [];
-    },
-    // 瀛楁鍚嶆嫤鎴櫒
-    propNameConvert(obj, name) {
-      name = String(name).substring(1)
-      return obj['d'+name] || obj['p'+name] || obj['w'+name]
-    },
-    getList() {
-      this.initList();
-      var devicesInfoList = [];
-      deviceApi.fetchDevices(this.sceneId, this.currSelect.deviceTypeId).then((result) => {
-        devicesInfoList = result.data;
-        this.cardData = [];
-        if (this.isShowEmpty(devicesInfoList)) {
-          return;
-        }
-        if (devicesInfoList) {
-          devicesInfoList.forEach((e) => {
-            let data = {
-              deviceId: this.propNameConvert(e, 'diId'),
-              sceneId: this.propNameConvert(e, 'diSceneGuid'),
-              deviceTypeId: this.currSelect.deviceTypeId
-            };
-            deviceApi
-              .fetchDeviceStatus(data)
-              .then((status) => {
-                var statusData = status.data;
-                if (statusData && statusData instanceof Array) {
-                  if (statusData.length == 0) {
-                    this.cardData.push(e);
-                    return;
-                  }
-                  statusData.forEach((imgItem) => {
-                    e.picUrl = $fysp.imgUrl + imgItem.dlPicUrl;
-                    e.dlLocation = imgItem.dlLocation;
-                    this.cardData.push(e);
-                  });
-                }
-              })
-              .catch((err) => {});
-          });
-        }
-      });
-    }
-  }
-};
-</script>
-<style scoped>
-.selects {
-  display: flex;
-}
-.child_select {
-  margin-right: 10px;
-}
-.table-row {
-  display: flex;
-  justify-content: space-between;
-}
-.table-cell {
-  flex-basis: calc(50% - 10px); /* Adjust the width and margin as needed */
-  border: 1px solid #ddd; /* Add border to mimic table cell */
-  padding: 8px;
-  text-align: center;
-}
-.pic-style {
-  margin-top: 10px;
-  width: 100%;
-  height: 400px;
-}
-.empty {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
-</style>
diff --git a/src/views/fysp/check/components/CompDeviceShowTest.vue b/src/views/fysp/check/components/CompDeviceShowTest.vue
index 7011936..1daa0e4 100644
--- a/src/views/fysp/check/components/CompDeviceShowTest.vue
+++ b/src/views/fysp/check/components/CompDeviceShowTest.vue
@@ -168,12 +168,11 @@
 </template>
 
 <script>
-import CompGenericWrapper from './CompGenericWrapper.vue';
 import deviceApi from '@/api/fysp/deviceApi';
 import { $fysp } from '@/api/index';
 import { toLabel } from '@/enum/device/device';
 export default {
-  components: { CompGenericWrapper },
+  components: {  },
   watch: {
     // 閫夋嫨鏀瑰彉鐩戝惉
     currSelect: {
diff --git a/src/views/fysp/check/components/CompGenericWrapper.vue b/src/views/fysp/check/components/CompGenericWrapper.vue
deleted file mode 100644
index 586c837..0000000
--- a/src/views/fysp/check/components/CompGenericWrapper.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-  <!-- dialog鍖呰9 -->
-  <div v-if="currType == 'dialog'">
-    <el-dialog
-      :title="title"
-      :model-value="visible"
-      @opened="$emit('update:visible', true)"
-      @closed="$emit('update:visible', false)"
-      destroy-on-close
-    >
-      <div v-if="visible">
-        <slot name="content"></slot>
-      </div>
-    </el-dialog>
-  </div>
-  <!-- drawer鍖呰9 -->
-  <div v-if="currType == 'drawer'">
-    <el-drawer
-      :title="title"
-      size="45%"
-      direction="ltr"
-      :model-value="visible"
-      @opened="$emit('update:visible', true)"
-      @closed="$emit('update:visible', false)"
-      destroy-on-close
-    >
-      <slot name="content"></slot>
-    </el-drawer>
-  </div>
-  <!-- 榛樿鏃犲寘瑁� -->
-  <div v-if="currType == 'normal'">
-    <slot></slot>
-  </div>
-</template>
-<script setup>
-import { ref, defineEmits, watch } from 'vue';
-const props = defineProps({
-  visible: Boolean,
-  title: String,
-  type: {
-    type: String,
-    default: 'normal'
-  }
-});
-const typeOptions = ref([
-  { id: '0', label: 'dialog' },
-  { id: '1', label: 'drawer' },
-  { id: '10', label: '' }
-]);
-const currType = ref('');
-const emit = defineEmits(['update:visible']);
-watch(
-  () => props.type,
-  (nValue) => {
-    currType.value = nValue;
-  },
-  { immediate: true }
-);
-</script>
-<style scoped>
-::v-deep .el-drawer__body {
-  padding-top: 0;
-}
-::v-deep .el-drawer__header {
-  margin-bottom: 16px;
-}
-</style>
diff --git a/src/views/fysp/check/components/CompLedgerPhoto.vue b/src/views/fysp/check/components/CompLedgerPhoto.vue
index c42b372..79f5d31 100644
--- a/src/views/fysp/check/components/CompLedgerPhoto.vue
+++ b/src/views/fysp/check/components/CompLedgerPhoto.vue
@@ -1,5 +1,6 @@
 <template>
   <FYImageSelectDialog
+    v-loading="loading"
     title="鍙拌处鍥剧墖"
     :typeList="typeList"
     :typeImgMap="typeImgMap"
@@ -11,6 +12,7 @@
 import userApi from '@/api/fysp/userApi.js';
 import { svToTz } from '@/enum/scene';
 import { $fytz } from '@/api/index';
+const loading = ref(true)
 const props = defineProps({
   // 灞曠ず妯″紡
   mode: {
@@ -26,6 +28,7 @@
 const typeImgMap = ref(new Map());
 function getList() {
   userApi.getTzId(props.subtask.sceneId).then((res) => {
+    loading.value = true
     let tzUserId = res.tzUserId;
 
     problemApiFytz
@@ -61,7 +64,7 @@
             typeImgMap.value.get(type.typeId).push(item);
           });
         }
-      });
+      }).finally(() => loading.value = false);
   });
 }
 function getMonth() {
diff --git a/src/views/fysp/check/components/CompLedgerPic.vue b/src/views/fysp/check/components/CompLedgerPic.vue
deleted file mode 100644
index 3c5e154..0000000
--- a/src/views/fysp/check/components/CompLedgerPic.vue
+++ /dev/null
@@ -1,190 +0,0 @@
-<template>
-  <div>
-    <div class="btns" v-if="!readonly">
-      <el-button size="small" type="primary" @click="sendSelectedImg(true)">纭畾</el-button>
-      <el-button size="small" type="primary" @click="sendSelectedImg(false)">鍙栨秷</el-button>
-    </div>
-    <div class="center">
-      <el-descriptions>
-        <el-descriptions-item label="鎬绘暟">
-          <span>{{ this.imgListAll.length }}</span>
-        </el-descriptions-item>
-      </el-descriptions>
-      <el-tabs v-model="activeName" type="card">
-        <el-tab-pane v-for="item in typeList" :label="item" :name="item"> </el-tab-pane>
-      </el-tabs>
-      <el-empty v-if="imgList.length == 0" description="鏆傛棤璁板綍" />
-      <div class="imgs">
-        <el-image
-          v-for="(img, i) in imgList"
-          :class="[Boolean(img.isSelect) ? 'selected' : 'noActive', 'image']"
-          fit="cover"
-          :src="img._picPath"
-          lazy
-          @click="onSelect(img)"
-        />
-      </div>
-    </div>
-  </div>
-</template>
-<script>
-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';
-export default {
-  watch: {
-    activeName: {
-      handler(newObj, oldObj) {
-        this.imgList = this.imgListAll.filter((item) => {
-          return item.ledgerType == newObj;
-        });
-      },
-      immediate: true
-    }
-  },
-  props: {
-    month: Number,
-    subtask: Object
-  },
-  computed: {
-    currImgList() {
-      return this.imgList.filter((item) => item.ledgerType == this.activeName);
-    }
-  },
-  mounted() {
-    this.getList();
-  },
-  methods: {
-    getList() {
-      userApi.getTzId(this.subtask.sceneId).then((res) => {
-        this.isEmpty = false;
-        this.tzUserId = res.tzUserId;
-
-        problemApiFytz
-          .getLedgerPic({
-            tzUserId: this.tzUserId,
-            sceneType: svToTz(this.subtask.sceneTypeId).value,
-            time: this.month
-          })
-          .then((res) => {
-            let data = res;
-            this.imgListAll = data;
-            if (this.imgListAll.length === 0) {
-              this.isEmpty = true;
-            }
-            if (this.imgListAll && this.imgListAll.length > 0) {
-              this.imgListAll.forEach((item) => {
-                item._picPath = $fytz.imgUrl + item.path1;
-                if (this.typeList.indexOf(item.ledgerType) == -1) {
-                  this.typeList.push(item.ledgerType);
-                }
-              });
-              this.activeName = this.typeList[0];
-            }
-          });
-      });
-    },
-    handleClick(tab, event) {
-      this.activeName = tab.label;
-    },
-    onSelect(img) {
-      img.isSelect = !Boolean(img.isSelect);
-    },
-    sendSelectedImg(isOk) {
-      let result = [];
-      if (!Boolean(isOk)) {
-        this.$emit('selectByLedgerPicEvent', result);
-      }
-      for (const item in this.imgList) {
-        if (item.isSelect == true) {
-          result.push(item);
-        }
-      }
-      this.$emit('selectByLedgerPicEvent', result);
-    }
-  },
-  data() {
-    return {
-      tzUserId: null,
-      imgList: [],
-      imgListAll: [],
-      typeList: [],
-      isEmpty: false,
-      activeName: ''
-    };
-  }
-};
-</script>
-<style scoped>
-.imgs {
-  /* height: 650px; */
-  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 {
-  height: 210px;
-  width: 200px;
-  border-radius: 4px;
-}
-
-.active {
-  padding: 5px;
-  width: 20%;
-  height: 200px;
-  border: 0.5rem outset rgb(52, 155, 4);
-}
-
-.selected {
-  padding: 5px;
-  color: #4abe84;
-  box-shadow: 0 2px 7px 0 rgba(85, 110, 97, 0.35);
-  border: 1px 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;
-}
-.btns {
-  /* height: 10%; */
-}
-.center {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-}
-</style>
diff --git a/src/views/fysp/check/components/CompProRecent.vue b/src/views/fysp/check/components/CompProRecent.vue
index 8d31232..930bbbb 100644
--- a/src/views/fysp/check/components/CompProRecent.vue
+++ b/src/views/fysp/check/components/CompProRecent.vue
@@ -55,7 +55,6 @@
   </CompGenericWrapper>
 </template>
 <script>
-import CompGenericWrapper from './CompGenericWrapper.vue';
 import CompProblemAddOrUpd from './CompProblemAddOrUpd.vue';
 import taskApi from '@/api/fysp/taskApi';
 import { useCloned } from '@vueuse/core';
@@ -99,7 +98,6 @@
   },
   components: {
     CompProblemAddOrUpd,
-    CompGenericWrapper
   },
   mounted() {},
   data() {
diff --git a/src/views/fysp/check/components/CompProblemAddOrUpd.vue b/src/views/fysp/check/components/CompProblemAddOrUpd.vue
index 2f58db3..1200e69 100644
--- a/src/views/fysp/check/components/CompProblemAddOrUpd.vue
+++ b/src/views/fysp/check/components/CompProblemAddOrUpd.vue
@@ -214,7 +214,6 @@
   </CompGenericWrapper>
 </template>
 <script>
-import CompGenericWrapper from './CompGenericWrapper.vue';
 import ArbitraryPhoto from './ArbitraryPhoto.vue';
 import CompLedgerPhoto from './CompLedgerPhoto.vue';
 import CompDevicePhoto from './CompDevicePhoto.vue';
@@ -232,7 +231,6 @@
     ArbitraryPhoto,
     CompDevicePhoto,
     CompLedgerPhoto,
-    CompGenericWrapper
   },
   props: {
     readonly: {
@@ -263,6 +261,8 @@
   },
   data() {
     return {
+      // fixme 2024.11.20 瀛愮粍浠跺垵濮嬪寲鏃舵満闂
+      initPropsCount: 0,
       // 鍒濆棰勮鍥剧墖index
       initialIndex: -1,
       // 鍥剧墖閫夋嫨鏈�澶ф暟閲�
@@ -327,10 +327,37 @@
       },
       deep: true
     },
+    initPropsCount: {
+      handler(nv, ov) {
+        if (nv >= 3) {
+          this.initOptions();
+        }
+      },
+      immediate: true
+    },
     problem: {
       handler(nv, ov) {
-        this.initOptions();
-      }
+        if (nv != null && nv != undefined) {
+          this.initPropsCount++;
+        }
+      },
+      immediate: true
+    },
+    topTask: {
+      handler(nv, ov) {
+        if (nv != null && nv != undefined) {
+          this.initPropsCount++;
+        }
+      },
+      immediate: true
+    },
+    subtask: {
+      handler(nv, ov) {
+        if (nv != null && nv != undefined) {
+          this.initPropsCount++;
+        }
+      },
+      immediate: true
     }
   },
   computed: {
@@ -362,15 +389,13 @@
       return array;
     }
   },
-  mounted() {
-    this.initOptions();
-  },
+  mounted() {},
   methods: {
     onProAdviseChange(value) {
       this.deepCopyProblem._adviseEdit = this.deepCopyProblem.advice;
     },
     handlePictureCardPreview(uploadFile) {
-      this.initialIndex = this.fileList.indexOf(uploadFile)
+      this.initialIndex = this.fileList.indexOf(uploadFile);
       this.previewDialogVisible = true;
       this.previewDialogImageUrl = uploadFile.url;
     },

--
Gitblit v1.9.3