From b8f5f6cdf5c26db929b7cda0188c587eb8d66c1d Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期六, 18 三月 2023 17:42:51 +0800
Subject: [PATCH] Merge branch 'dev1.0' of http://42.193.1.25:9521/r/sccg_ui into dev1.0

---
 src/components/myUpload/index.vue |  236 +++++++++++++++++++++++++++++++---------------------------
 1 files changed, 127 insertions(+), 109 deletions(-)

diff --git a/src/components/myUpload/index.vue b/src/components/myUpload/index.vue
index 95d078f..cae960e 100644
--- a/src/components/myUpload/index.vue
+++ b/src/components/myUpload/index.vue
@@ -1,104 +1,110 @@
 <template>
-    <div class="my-upload">
-      <div v-if="pictureList.length > 0" class="image-box">
-        <div v-for="image in pictureList" class="image-box-item">
-          <i @click="handleDeletePicture(image)" class="el-icon-delete image-delete-icon"></i>
-          <el-image :key="image" class="image-content" :src="image" ></el-image>
-        </div>
+  <div class="my-upload">
+    <div v-if="pictureList.length > 0" class="image-box">
+      <div v-for="image in pictureList" :class="{ 'image-box-item': true, 'image-box-item-cover': isShowUpload }">
+        <span v-if="isShowUpload" @click="handleDeletePicture(image)" class="image-delete-icon el-icon-delete"></span>
+        <el-image :key="image" class="image-content" :src="image"  :preview-src-list="[image]"></el-image>
       </div>
-      <el-upload
-        :file-list="fileList" 
-        action="/sccg/file/medias"
-        :multiple="multiple"
-        :show-file-list="flag" 
-        :before-upload="beforeUpload" 
-        :limit="limit" 
-        :on-success="handleSuccess"
-        :on-error="handleError" 
-        :list-type="listType" 
-        :on-remove="handleRemove"
-        :headers="getToken()">
-          <div class="upload-btn">
-            <i class="el-icon-plus"></i>
-            <span>涓婁紶鍥剧墖</span>
-          </div>
-        </el-upload>
     </div>
+    <el-upload
+      v-if="isShowUpload && pictureList.length < limit"
+      :file-list="fileList"
+      v-loading="loading"
+      element-loading-spinner="el-icon-loading"
+      element-loading-background="rgba(0, 0, 0, 0.8)"
+      action=""
+      :multiple="multiple"
+      :show-file-list="flag"
+      :limit="limit"
+      :list-type="listType"
+      :auto-upload="true"
+      :http-request="handleUpload"
+      style="margin-left: 14px;"
+    >
+      <div class="upload-btn">
+        <i class="el-icon-plus"></i>
+        <span>涓婁紶鍥剧墖</span>
+      </div>
+    </el-upload>
+  </div>
 </template>
 <script>
-export default {
-    data() {
-        return {
-            // 鏂囦欢鍒楄〃
-            fileList: [],
-            // 鏄惁鏄剧ず鏂囦欢鍒楄〃
-            flag: false,
-            // 澶氶��
-            multiple: false,
-            // 闄愬埗
-            limit: 4,
-            // 鏂囦欢鍒楄〃绫诲瀷
-            listType: 'picture-card'
-        };
-    },
-    methods: {
-        // 涓婁紶涔嬪墠鍥炶皟
-        beforeUpload(rawFile) {
-            if (rawFile.type !== 'image/png' && rawFile.type !== 'image/svg+xml' && rawFile.type !== 'image/jpg' && rawFile.type !== 'image/jpeg') {
-                this.$message.error('鍥剧墖蹇呴』鏄� jpg/svg/jpeg/png 鏍煎紡!')
-                return false
-            } else if (rawFile.size / 1024 / 1024 > 5) {
-                this.$message.error('涓婁紶鍥剧墖涓嶈兘瓒呰繃 5MB!')
-                return false
-            }
-            return true
-        },
-        // 涓婁紶鎴愬姛鍥炶皟
-        handleSuccess(res, file, filelist) {
-            if(res.data.url1){
-                this.$emit('setPictureUrl',{url:res.data.url1});
-            }
-            else if(res.data.url2){
-                this.$emit('setPictureUrl',{url:res.data.url2});
-            }
-            else if(res.data.url3){
-                this.$emit('setPictureUrl',{url:res.data.url3});
-            }
-            else{
-                this.$emit('setPictureUrl',{url:res.data.url4});
-            }
-        },
-        // 涓婁紶澶辫触鍥炶皟
-        handleError(err, file, fileList) {
-            this.$message({
-                type:'error',
-                message:err
-            })
-        },
-        // 鑾峰彇token
-        getToken() {
-            const token = sessionStorage.getItem('token');
-            const tokenHead = sessionStorage.getItem('tokenHead');
-            if (token && tokenHead) {
-                return { Authorization: tokenHead + token }
-            }
-        },
-        // 绉婚櫎鏂囦欢
-        handleRemove(file, fileList){
-            this.$emit('delPictureUrl',{url:file.response.data.url1});
-        },
+import imageManagement from "@/api/operate/imageManagement";
 
-        handleDeletePicture(imageUrl) {
-          this.$emit('delPictureUrl', { url: imageUrl });
-        }
-    },
-    props: {
-      pictureList: {
-        type: Array,
-        default: () => []
+export default {
+  data() {
+    return {
+      // 鏂囦欢鍒楄〃
+      fileList: [],
+      // 鏄惁鏄剧ず鏂囦欢鍒楄〃
+      flag: false,
+      // 澶氶��
+      multiple: false,
+      // 闄愬埗
+      limit: 4,
+      // 鏂囦欢鍒楄〃绫诲瀷
+      listType: "picture-card",
+      loading: false
+    };
+  },
+  methods: {
+    // 楠岃瘉涓婁紶鏂囦欢
+    validateFile(file) {
+      if (
+          file.type !== "image/png" &&
+          file.type !== "image/svg+xml" &&
+          file.type !== "image/jpg" &&
+          file.type !== "image/jpeg"
+      ) {
+        this.$message.error("鍥剧墖蹇呴』鏄� jpg/svg/jpeg/png 鏍煎紡!");
+        this.loading = false;
+        return  false;
       }
+
+      if (file.size / 1024 / 1024 > 5) {
+        this.$message.error("涓婁紶鍥剧墖涓嶈兘瓒呰繃 5MB!");
+        this.loading = false;
+        return false;
+      }
+      return true;
     },
-}
+
+    handleUpload(data) {
+      this.loading = true;
+      const { file } = data;
+      const validate = this.validateFile(file);
+      if (!validate) {
+        return;
+      }
+      const formData = new FormData();
+      formData.append('file', file);
+      imageManagement.importImage(formData)
+          .then(({ url1, url2, url3, url4 }) => {
+            const url = url1 ?? url2 ?? url3 ?? url4;
+            this.$emit('setPictureUrl', { url: url });
+            this.loading = false;
+          })
+          .catch(err => {
+            this.loading = false;
+            this.$message.error(err);
+          })
+    },
+
+    handleDeletePicture(imageUrl) {
+      this.$emit("delPictureUrl", { url: imageUrl });
+    },
+  },
+  props: {
+    pictureList: {
+      type: Array,
+      default: () => [],
+    },
+    isShowUpload: {
+      type: Boolean,
+      default: () => true,
+    },
+  },
+};
 </script>
 <style lang="scss" scoped>
 .my-upload {
@@ -116,7 +122,7 @@
     width: 100px;
     height: 100px;
 
-    &:hover i{
+    &:hover i {
       color: #409eff;
     }
 
@@ -131,37 +137,49 @@
   }
   .image-box {
     display: flex;
+    flex-wrap: wrap;
     height: 100px;
-    margin: 0 10px;
 
     .image-content {
       width: 100px;
       height: 100px;
     }
+
     .image-delete-icon {
-      position: relative;
-      bottom: calc(100% - 50px);
-      left: calc(100% - 50px);
+      position: absolute;
+      top: 45px;
+      left: 45px;
       opacity: 0;
     }
 
-    .image-box-item:hover {
-      color: #ffffff;
-      opacity: .5;
+    .image-box-item {
+      position: sticky;
+      margin: 0 10px;
+    }
+
+    .image-box-item-cover:hover {
+      .image-content {
+        box-shadow: #ffffff;
+        opacity: 0.5;
+      }
+
       .image-delete-icon {
+        color: red;
+        font-size: 14px;
         z-index: 2;
         opacity: 1;
+        cursor: pointer;
       }
     }
   }
 
-    :deep(.el-upload--picture-card) {
-        width: 100px;
-        height: 100px;
-    }
-    :deep(.el-upload-list__item){
-        width: 100px;
-        height: 100px;
-    }
+  :deep(.el-upload--picture-card) {
+    width: 100px;
+    height: 100px;
+  }
+  :deep(.el-upload-list__item) {
+    width: 100px;
+    height: 100px;
+  }
 }
 </style>
\ No newline at end of file

--
Gitblit v1.8.0