From 55d42cc7a2e6e21e1f8e06ca80089fe911914ac9 Mon Sep 17 00:00:00 2001
From: hcong <1050828145@qq.com>
Date: 星期四, 21 十一月 2024 11:20:16 +0800
Subject: [PATCH] 弹窗,抽屉关闭的操作放在统一包裹组件中

---
 src/views/fysp/check/components/ComChangeEdit.vue |  245 ++++++++++++++++++++----------------------------
 1 files changed, 101 insertions(+), 144 deletions(-)

diff --git a/src/views/fysp/check/components/ComChangeEdit.vue b/src/views/fysp/check/components/ComChangeEdit.vue
index bfcf316..6660d76 100644
--- a/src/views/fysp/check/components/ComChangeEdit.vue
+++ b/src/views/fysp/check/components/ComChangeEdit.vue
@@ -1,85 +1,82 @@
 <template>
-  <div>
-    <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>
+  <CompGenericWrapper type="dialog">
+    <template #content>
+      <el-row>
+        <el-col>
+          <el-form-item label="鏁存敼鍥剧墖">
+            <el-button @click="choseChangePic" :disabled="fileList.length >= 3"
+              >浠庢枃浠跺す閫夊彇</el-button
+            >
+          </el-form-item>
+        </el-col>
+        <el-col v-if="!fileList || fileList.length <= 0">
+          <el-empty style="height: 145px" description="璇锋坊鍔犲浘鐗�" />
+        </el-col>
+        <el-col>
+          <el-upload
+            class="img-upload"
+            ref="uploadRef"
+            v-model:file-list="fileList"
+            list-type="picture-card"
+            multiple
+            :auto-upload="false"
+            crossorigin="Anonymous"
+            :before-remove="beforeRemoveFile"
+            :on-preview="handlePictureCardPreview"
+            :disabled="readonly"
+            accept="image/*"
+          >
+            <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-col>
+      </el-row>
+      <div class="flex-div">
+        <el-button type="primary" @click="onSubmit">淇濆瓨</el-button>
+        <el-button @click="onCancel">鍙栨秷</el-button>
       </div>
-    </div>
-    <el-upload
-      class="img-upload"
-      ref="uploadRef"
-      v-model:file-list="fileList"
-      list-type="picture-card"
-      multiple
-      :auto-upload="false"
-      crossorigin="Anonymous"
-      :before-remove="beforeRemoveFile"
-      :on-preview="handlePictureCardPreview"
-      :disabled="readonly"
-      accept="image/*"
-    >
-      <el-button type="primary" id="uploadBtnId" style="display: none"></el-button>
-      <el-icon>
-        <Plus />
-      </el-icon>
-    </el-upload>
-    <div class="flex-div">
-      <el-button type="primary" @click="onSubmit">淇濆瓨</el-button>
-      <el-button @click="this.$emit('submited', false)">鍙栨秷</el-button>
-    </div>
-    <el-dialog
-      title="浠绘剰鍥剧墖"
-      width="80%"
-      v-model="anyPhotoDialog"
-      :before-close="beforeAnyPhotoDialogclose"
-    >
-      <ArbitraryPhoto
-        v-if="anyPhotoDialog"
-        @selectByAnyPhonoEvent="handleSelectedAnyPhono"
-        :subtask="subtask"
-        :defaultFile="fileList"
-        ref="arbitraryPhotoRef"
-      >
-      </ArbitraryPhoto>
-    </el-dialog>
-    <el-dialog
-      title="鍙拌处鍥剧墖"
-      width="80%"
-      v-model="ledgerPicDialog"
-      :before-close="beforeLedgerPicDialogclose"
-    >
-      <LedgerPic
-        v-if="ledgerPicDialog"
-        @selectByLedgerPicEvent="handleLedgerPicPhono"
-        :month="month"
-        :subtask="subtask"
-        ref="ledgerPicRef"
-      >
-      </LedgerPic>
-    </el-dialog>
-  </div>
-  <el-dialog v-model="previewDialogVisible">
-    <img w-full :src="previewDialogImageUrl" alt="棰勮" class="preview-pic" />
-  </el-dialog>
+      <el-image-viewer
+          v-if="previewDialogVisible"
+          :url-list="fileList.map((item) => item.url)"
+          :initial-index="initialIndex"
+          @close="previewDialogVisible = false"
+          alt="棰勮"
+          class="preview-pic"
+        />
+    </template>
+  </CompGenericWrapper>
 </template>
 <script>
-import ArbitraryPhoto from './ArbitraryPhoto.vue';
-import LedgerPic from './CompLedgerPic.vue';
 import problemApi from '@/api/fysp/problemApi.js';
-
 import { $fysp } from '@/api/index.js';
 import fileUtil from '@/utils/fileUtils.js';
 import { useCloned } from '@vueuse/core';
 import { ElMessage } from 'element-plus';
 export default {
+  emits: ['submit', 'cancel'],
   components: {
-    ArbitraryPhoto,
-    LedgerPic
   },
   watch: {
+    oldChangeFileList: {
+      handler(nv, ov) {
+        this.initParams();
+      },
+      immediate: true
+    },
     fileList: {
       handler(newFileList, oldFileList) {
         this.pictureValidate();
@@ -109,6 +106,10 @@
   },
   data() {
     return {
+      // 鍒濆鍥剧墖棰勮index
+      initialIndex: -1,
+      // 鍥剧墖閫夋嫨鏈�澶ф暟閲�
+      maxSelectImgCount: 3,
       previewDialogImageUrl: '',
       previewDialogVisible: false,
       fileList: [],
@@ -119,9 +120,7 @@
       anyPhotoDialog: false
     };
   },
-  mounted() {
-    this.initParams();
-  },
+  mounted() {},
   methods: {
     pictureValidate() {
       if (this.changeType == 1 && this.fileList.length < 1) {
@@ -141,20 +140,29 @@
       return true;
     },
     initParams() {
-      if (this.changeType == 0) {
+      if (!this.changeType || this.changeType == 0) {
         return;
       }
       let beforeEditImgList = [];
-      useCloned(this.oldChangeFileList).cloned.value.forEach((oldChangeFileitem) => {
-        if (oldChangeFileitem.ischanged == 1) {
-          oldChangeFileitem.url =
-            $fysp.imgUrl + oldChangeFileitem.extension1 + oldChangeFileitem.guid + '.jpg';
-          oldChangeFileitem.name = '1';
-          beforeEditImgList.push(oldChangeFileitem);
+      useCloned(this.oldChangeFileList).cloned.value.forEach(
+        (oldChangeFileitem) => {
+          if (oldChangeFileitem.ischanged == 1) {
+            oldChangeFileitem.url =
+              $fysp.imgUrl +
+              oldChangeFileitem.extension1 +
+              oldChangeFileitem.guid +
+              '.jpg';
+            oldChangeFileitem.name = '1';
+            beforeEditImgList.push(oldChangeFileitem);
+          }
         }
-      });
+      );
       this.fileList = useCloned(beforeEditImgList).cloned.value;
       this.oldFileList = useCloned(beforeEditImgList).cloned.value;
+    },
+    onCancel() {
+      this.$emit("cancel")
+      this.$emit('update:visible', false)
     },
     onSubmit() {
       if (!this.pictureValidate()) {
@@ -179,13 +187,12 @@
           }
           exclude = false;
           // picUrls.push(item)
-        } else {
         }
       });
 
       const that = this;
       let deleteImgCopy = this.deleteImg;
-      
+
       if (this.changeType == 1) {
         fileUtil.getImageFiles(picUrls, function (files) {
           data.append('deleteImg', deleteImgCopy);
@@ -193,18 +200,18 @@
           files.forEach((image) => {
             data.append('images', image);
           });
-          
+
           problemApi.updateChange(data).then((res) => {});
         });
-        that.$emit('submited', true);
-      }else {
+        that.$emit('submit', true);
+      } else {
         fileUtil.getImageFiles(picUrls, function (files) {
           data.append('problemId', that.problemId);
           files.forEach((image) => {
             data.append('images', image);
           });
           problemApi.changeProblem(data).then((res) => {});
-          that.$emit('submited', true);
+          that.$emit('submit', true);
         });
       }
     },
@@ -215,48 +222,9 @@
       }
     },
     handlePictureCardPreview(uploadFile) {
+      this.initialIndex = this.fileList.indexOf(uploadFile)
       this.previewDialogVisible = true;
       this.previewDialogImageUrl = uploadFile.url;
-    },
-    handleSelectedAnyPhono(data) {
-      this.beforeAnyPhotoDialogclose();
-      let isExist = false;
-      for (const item of data) {
-        for (const already of this.fileList) {
-          if (item.url == already.url) {
-            isExist = true;
-          }
-        }
-        if (!isExist) {
-          this.fileList.push({
-            url: item.url,
-            name: '1'
-          });
-        }
-        isExist = false;
-      }
-    },
-    handleLedgerPicPhono(data) {
-      let isExist = false;
-      for (const item of data) {
-        for (const already of this.fileList) {
-          if (item.url == already.url) {
-            isExist = true;
-          }
-        }
-        if (!isExist) {
-          this.fileList.push({
-            url: item.url,
-            name: '1'
-          });
-        }
-        isExist = false;
-      }
-
-      this.beforeAnyPhotoDialogclose();
-    },
-    chosePicFromAnyPic() {
-      this.anyPhotoDialog = true;
     },
     // 浠庢枃浠跺す涓�
     choseChangePic() {
@@ -267,24 +235,6 @@
         // 瑙﹀彂鐐瑰嚮浜嬩欢
         btnElement.click();
       }
-    },
-    chosePicFromLedgerPic() {
-      // 浣跨敤Date瀵硅薄瑙f瀽鏃ユ湡瀛楃涓�
-      var date = new Date(this.subtask.subtask.planstarttime.splice(0, 7));
-      // 鑾峰彇鏈堜唤淇℃伅锛屾湀浠芥槸浠�0寮�濮嬬殑锛屾墍浠ラ渶瑕佸姞1
-      this.month = date.getMonth() + 1;
-      if (String(this.month).length == 1) {
-        this.month = `0${this.month}`;
-      }
-      var year = date.getFullYear();
-      this.month = `${year}-${this.month}`;
-      this.ledgerPicDialog = true;
-    },
-    beforeAnyPhotoDialogclose() {
-      this.anyPhotoDialog = false;
-    },
-    beforeLedgerPicDialogclose() {
-      this.ledgerPicDialog = false;
     }
   }
 };
@@ -313,4 +263,11 @@
   width: 100%;
   height: 100%;
 }
+::v-deep .el-upload--picture-card {
+  display: none;
+}
+/* 闅愯棌el-upload涓婁紶鎴愬姛缁勪欢 */
+::v-deep .el-upload-list__item-status-label {
+  display: none !important;
+}
 </style>

--
Gitblit v1.9.3