From f2138817fdd6e9141c5911514280b8d0b6ca08f1 Mon Sep 17 00:00:00 2001
From: hcong <1050828145@qq.com>
Date: 星期三, 20 十一月 2024 14:48:49 +0800
Subject: [PATCH] 子组件刷新父组件不刷新页面,表单验证,upload组件预览图片,弹窗放在组件内部,bug修复

---
 src/views/fysp/check/components/ArbitraryPhoto.vue |  391 ++++---------------------------------------------------
 1 files changed, 31 insertions(+), 360 deletions(-)

diff --git a/src/views/fysp/check/components/ArbitraryPhoto.vue b/src/views/fysp/check/components/ArbitraryPhoto.vue
index f880324..4593d21 100644
--- a/src/views/fysp/check/components/ArbitraryPhoto.vue
+++ b/src/views/fysp/check/components/ArbitraryPhoto.vue
@@ -1,389 +1,60 @@
 <template>
-  <div class="main">
-    <el-row justify="end" class="btns" v-if="!readonly">
-      <el-text size="small" type="info" class="m-r-8"
-        >鏈�澶氶�夋嫨{{ maxSelect }}寮犲浘鐗�</el-text
-      >
-      <el-button
-        size="small"
-        type="primary"
-        @click="sendSelectedImg(true)"
-        :disabled="selectedImgUrlList.length == 0"
-        >纭畾</el-button
-      >
-      <el-button size="small" type="primary" @click="sendSelectedImg(false)"
-        >鍙栨秷</el-button
-      >
-    </el-row>
-
-    <div class="center">
-      <!-- <el-descriptions>
-        <el-descriptions-item label="鎬绘暟">
-          <span>{{ this.imgUrlList.length }}</span>
-        </el-descriptions-item>
-      </el-descriptions> -->
-      <el-tabs v-model="activeId" type="card">
-        <el-tab-pane
-          v-for="item in typeList"
-          :key="item.businesstypeid"
-          :label="
-            item.businesstype + ' (' + typeImgMap.get(item.businesstypeid).length + ')'
-          "
-          :name="item.businesstypeid"
-        >
-        </el-tab-pane>
-      </el-tabs>
-      <el-empty v-if="isEmpty" description="鏆傛棤璁板綍" />
-      <el-scrollbar v-else class="imgs">
-        <el-image
-          v-for="(img, i) in typeImgMap.get(activeId)"
-          :key="i"
-          :class="[Boolean(img.isSelect) ? 'selected' : 'noActive', 'image']"
-          fit="cover"
-          :src="img.url"
-          lazy
-          @click="onSelect(img, i)"
-        />
-      </el-scrollbar>
-    </div>
-  </div>
+  <FYImageSelectDialog
+    title="鍦烘櫙鍥剧墖"
+    :typeList="typesList"
+    :typeImgMap="typesMap"
+  ></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() {
     return {
       // 鏃犳暟鎹�
-      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: []
+      typesList: [],
+      typesMap: new Map()
     };
   },
-  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: {
-    // 鍒濆鍖栧垰寮�濮嬮�変腑鐨勬爣绛�
-    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 = [];
+    // 鍥剧墖鍒嗙被
+    getGroupImgs() {
       mediafileApi.getRoutineByStGuid(this.subtask.stGuid).then((res) => {
-        this.isEmpty = false;
-        let data = res.data;
-        if (data.length == 0) {
-          this.isEmpty = true;
-        }
+        let typeList = [];
+        let typeMap = new Map();
+        const data = res.data;
         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;
+          let img = {
+            url: $fysp.imgUrl + e.extension1 + e.guid + '.jpg'
+          };
+          const businesstype = e.businesstype;
+          const businesstypeid = e.businesstypeid;
+          if (
+            typeList.find((item) => item.typeName == businesstype) != undefined
+          ) {
+            typeMap.get(businesstypeid).push(img);
+          } else {
+            typeList.push({
+              typeId: businesstypeid,
+              typeName: businesstype
             });
-          }
-        } else if (this.maxSelect > 1) {
-          if (this.selectedImgUrlList.length < this.maxSelect) {
-            img.isSelect = true;
-            this.selectedImgUrlList.push(img);
+            typeMap.set(businesstypeid, [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);
-      }
+        this.typesList = typeList;
+        this.typesMap = typeMap;
+      });
     }
   }
 };
 </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>

--
Gitblit v1.9.3