From 7c20fd15b7fbc2bd5756b39d5ab655cc849ffcc3 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期三, 16 七月 2025 22:39:23 +0800
Subject: [PATCH] 添加时间筛选

---
 src/components/myUpload/index.vue |  316 +++++++++++++++++++++++++++-------------------------
 1 files changed, 162 insertions(+), 154 deletions(-)

diff --git a/src/components/myUpload/index.vue b/src/components/myUpload/index.vue
index 2eba7da..4f72a5c 100644
--- a/src/components/myUpload/index.vue
+++ b/src/components/myUpload/index.vue
@@ -1,177 +1,185 @@
 <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
-          v-if="isShowUpload"
-          @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="setPicUrl(image)"
+                    :preview-src-list="[image]"></el-image>
+            </div>
+        </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>
-    <el-upload
-      v-if="isShowUpload"
-      :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"
-      :headers="getToken()"
-    >
-      <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 };
-      }
-    },
+import imageManagement from "@/api/operate/imageManagement";
+import { FILE_ORIGINAL_PATH } from "@/utils";
 
-    handleDeletePicture(imageUrl) {
-      this.$emit("delPictureUrl", { url: imageUrl });
+export default {
+    data() {
+        return {
+            // 鏂囦欢鍒楄〃
+            fileList: [],
+            // 鏄惁鏄剧ず鏂囦欢鍒楄〃
+            flag: false,
+            // 澶氶��
+            multiple: false,
+            // 闄愬埗
+            limit: 4,
+            // 鏂囦欢鍒楄〃绫诲瀷
+            listType: "picture-card",
+            loading: false
+        };
     },
-  },
-  props: {
-    pictureList: {
-      type: Array,
-      default: () => [],
+    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((url) => {
+                    this.$emit('setPictureUrl', { url: url });
+                    this.loading = false;
+                })
+                .catch(err => {
+                    this.loading = false;
+                    this.$message.error(err);
+                })
+        },
+
+        handleDeletePicture(imageUrl) {
+            this.$emit("delPictureUrl", { url: imageUrl });
+        },
+        setPicUrl(item) {
+            item = item.replace("[", "").replace("]", "");
+            return FILE_ORIGINAL_PATH + item;
+        }
     },
-    isShowUpload: {
-      type: Boolean,
-      default: () => true,
+    props: {
+        pictureList: {
+            type: Array,
+            default: () => [],
+        },
+        isShowUpload: {
+            type: Boolean,
+            default: () => true,
+        },
     },
-  },
 };
 </script>
 <style lang="scss" scoped>
 .my-upload {
-  display: flex;
-  flex-wrap: nowrap;
-  justify-content: flex-start;
-  margin-right: 5px;
-
-  .upload-btn {
     display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
-    border-radius: 4px;
-    width: 100px;
-    height: 100px;
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+    margin-right: 5px;
 
-    &:hover i {
-      color: #409eff;
+    .upload-btn {
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        align-items: center;
+        border-radius: 4px;
+        width: 100px;
+        height: 100px;
+
+        &:hover i {
+            color: #409eff;
+        }
+
+        i {
+            font-size: 30px;
+            font-weight: 650;
+        }
+
+        span {
+            line-height: 22px;
+        }
     }
 
-    i {
-      font-size: 30px;
-      font-weight: 650;
+    .image-box {
+        display: flex;
+        flex-wrap: wrap;
+        height: 100px;
+
+        .image-content {
+            width: 100px;
+            height: 100px;
+        }
+
+        .image-delete-icon {
+            position: absolute;
+            top: 45px;
+            left: 45px;
+            opacity: 0;
+        }
+
+        .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;
+            }
+        }
     }
 
-    span {
-      line-height: 22px;
+    :deep(.el-upload--picture-card) {
+        width: 100px;
+        height: 100px;
     }
-  }
-  .image-box {
-    display: flex;
-    flex-wrap: wrap;
-    height: 100px;
-    margin: 0 10px;
 
-    .image-content {
-      width: 100px;
-      height: 100px;
+    :deep(.el-upload-list__item) {
+        width: 100px;
+        height: 100px;
     }
-    .image-delete-icon {
-      position: relative;
-      bottom: calc(100% - 50px);
-      left: calc(100% - 50px);
-      opacity: 0;
-    }
-    .image-box-item {
-      padding: 0px 10px;
-    }
-    .image-box-item:hover {
-      color: #ffffff;
-      opacity: 0.5;
-      .image-delete-icon {
-        z-index: 2;
-        opacity: 1;
-      }
-    }
-  }
-
-  :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