From e6443cf405d4e950abe35a29e6c133d097fc1ad5 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期一, 04 十二月 2023 17:46:01 +0800
Subject: [PATCH] 100路视频
---
src/components/myUpload/index.vue | 234 ++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 147 insertions(+), 87 deletions(-)
diff --git a/src/components/myUpload/index.vue b/src/components/myUpload/index.vue
index 6bcc4ff..4735265 100644
--- a/src/components/myUpload/index.vue
+++ b/src/components/myUpload/index.vue
@@ -1,20 +1,42 @@
<template>
<div class="my-upload">
- <el-upload
- :file-list="fileList"
- class="upload-demo"
- 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-preview="handlePreview"
- :on-remove="handleRemove"
- :headers="getToken()">
- <div class="upload-btn" :style="{'height':btnHeight,'width':btnWidth}">
+ <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>
+ </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>
@@ -22,109 +44,101 @@
</div>
</template>
<script>
+import imageManagement from "@/api/operate/imageManagement";
+
export default {
data() {
return {
// 鏂囦欢鍒楄〃
fileList: [],
// 鏄惁鏄剧ず鏂囦欢鍒楄〃
- flag: true,
+ flag: false,
// 澶氶��
multiple: false,
// 闄愬埗
- limit: 50,
- // 鎸夐挳楂樺害
- btnHeight: '120px',
- // 鎸夐挳瀹藉害
- btnWidth: '120px',
+ limit: 4,
// 鏂囦欢鍒楄〃绫诲瀷
- listType: 'picture-card'
+ listType: "picture-card",
+ loading: false
};
},
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 / 105 / 105 > 2) {
- this.$message.error('涓婁紶鍥剧墖涓嶈兘瓒呰繃 2MB!')
- return false
+ // 楠岃瘉涓婁紶鏂囦欢
+ 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;
}
- return true
+
+ if (file.size / 1024 / 1024 > 5) {
+ this.$message.error("涓婁紶鍥剧墖涓嶈兘瓒呰繃 5MB!");
+ this.loading = false;
+ return false;
+ }
+ return true;
},
- // 涓婁紶鎴愬姛鍥炶皟
- handleSuccess(res, file, filelist) {
- if(res.data.url1){
- this.$emit('setPictureUrl',{url:res.data.url1});
+
+ handleUpload(data) {
+ this.loading = true;
+ const { file } = data;
+ const validate = this.validateFile(file);
+ if (!validate) {
+ return;
}
- 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});
- }
+ const formData = new FormData();
+ formData.append('file', file);
+ imageManagement.importImage(formData)
+ .then((url) => {
+ // .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);
+ })
},
- // 涓婁紶澶辫触鍥炶皟
- handleError(err, file, fileList) {
- console.log(err);
- this.$message({
- type:'error',
- message:err
- })
+
+ handleDeletePicture(imageUrl) {
+ this.$emit("delPictureUrl", { url: imageUrl });
},
- // 鑾峰彇token
- getToken() {
- const token = sessionStorage.getItem('token');
- const tokenHead = sessionStorage.getItem('tokenHead');
- if (token && tokenHead) {
- return { Authorization: tokenHead + token }
- }
- },
- // 棰勮
- handlePreview(file){
- console.log(file)
- },
- // 绉婚櫎鏂囦欢
- handleRemove(file, fileList){
- console.log(file,fileList)
- }
},
props: {
- // 杩斿洖涓婁紶鎴愬姛鍥剧墖鍦板潃
- setPictureUrl:{
- type:Function,
- default:()=>{}
- }
- }
-}
+ pictureList: {
+ type: Array,
+ default: () => [],
+ },
+ isShowUpload: {
+ type: Boolean,
+ default: () => true,
+ },
+ },
+};
</script>
<style lang="scss" scoped>
.my-upload {
- .upload-demo {
- display: flex;
- }
+ display: flex;
+ flex-wrap: nowrap;
+ justify-content: flex-start;
+ margin-right: 5px;
- :deep(.el-upload--picture-card) {
- width: 120px;
- height: 120px;
- }
- :deep(.el-upload-list__item){
- width: 120px;
- height: 120px;
- }
.upload-btn {
- // background-color: rgba(249, 249, 249, 1);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 4px;
+ width: 100px;
+ height: 100px;
- &:hover i{
+ &:hover i {
color: #409eff;
}
@@ -137,5 +151,51 @@
line-height: 22px;
}
}
+ .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;
+ }
+ }
+ }
+
+ :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