vue中el-upload结合vuedraggable实现图片的上传、排序、删除以及预览等功能

实现效果:

功能实现:

要实现图片的拖拽功能首先需要安装vuedraggable库

npm install vuedraggable --save

在组件中引入并注册 vuedraggable

<script>import draggable from "vuedraggable";export default {// 注册组件components: {draggable,},data(){return {}}}
</script>

 使用element ui的el-upload组件,结合vuedraggable实现图片的上传与排序功能

<el-form-item label="上传轮播图" prop="image"><ul class="image-upload"><draggable v-model="fileList" @update="dataDragEnd"><transition-group class="uploader"><div v-for="(item, index) in fileList" :key="item.url" class="upload-list"><img v-if="item.url" style="width:146px;height: 146px" :src="item.url"><div class="icon-container"><span v-if="item.url" @click="handlePreviewNew(index)"><i class="el-icon-zoom-in"></i></span><span v-if="item.url" @click="handleRemoveNew(item, index)"><i class="el-icon-delete"></i></span></div></div></transition-group></draggable><el-upload name="image" ref="uploadFile" class="upload-demo" action="#" multiple:on-preview="handlePreview" :on-remove="handleRemove" :http-request="uolpadMorePic" :file-list="fileList" list-type="picture-card"><el-button size="small" type="primary">点击上传</el-button></el-upload></ul>
</el-form-item><!-- 图片回显预览 --><el-dialog title="图片预览" :visible.sync="previewVisible" width="50%" append-to-body><img :src="previewPath" alt="" style="width:100%;height:100%" /></el-dialog>

上传图片时处理方法

uolpadMorePic(file) {let up = new FormData();up.append("image", file.file);up.append("name", this.editForm.name);//上传图片接口bannerUp(up).then((res) => {if (res.status == "0000") {this.fileList.push({name: res.data.imageUrl,url: res.data.imageUrl,uid: Math.floor(Math.random() * 100000),})//上传的图片和回显的图片进行重新排序this.fileList.map((item, index) =>item.sortNum = index + 1)this.$message({type: "success",message: "上传成功",});} else {this.$message({type: "error",message: res.codemsg,});let uid = file.uid; // 关键作用代码,去除文件列表失败文件let idx = this.$refs.uploadFile.uploadFiles.findIndex((item) => item.uid === uid); // 关键作用代码,去除文件列表失败文件(uploadFiles为el-upload中的ref值)this.$refs.uploadFile.uploadFiles.splice(idx, 1); // 关键作用代码,去除文件列表失败文件}}).catch((err) => {console.log(err);let uid = file.uid; // 关键作用代码,去除文件列表失败文件let idx = this.$refs.uploadFile.uploadFiles.findIndex((item) => item.uid === uid); // 关键作用代码,去除文件列表失败文件(uploadFiles为el-upload中的ref值)this.$refs.uploadFile.uploadFiles.splice(idx, 1); // 关键作用代码,去除文件列表失败文件});},

图片查看、删除及拖拽排序

//删除图片handleRemoveNew(file, index) {this.fileList.splice(index, 1)},// 处理图片预览效果handlePreviewNew(index) {this.previewPath = this.fileList[index].urlthis.previewVisible = true},//拖拽图片排序dataDragEnd() {// 拖拽图片更换位置 并重新从1开始排序this.fileList.forEach((item, index) => {item.sortNum = index + 1})//过滤一下url为空的数据this.fileList = this.fileList.filter(item => {return item.url != ''});},

编辑弹窗图片回显

let res = 接口获取的详情数据
res.data.slider_image.map((item, index) => {this.fileList.push({url: item.url ,name: item.name,sortNum: index + 1,});
});

一些样式

<style lang="scss" scoped>
.image-upload {display: flex;list-style-type: none;margin: 0;padding: 0;.uploader {display: flex;align-items: center;.upload-list {margin-right: 8px;width: 146px;height: 146px;border-radius: 8px;overflow: hidden;border: 1px solid #c0ccda;position: relative;&:hover {.icon-container {display: block;transition: all 0.5s;}}.icon-container {position: absolute;display: none;transition: all 0.5s;width: 146px;height: 146px;line-height: 146px;color: #fff;font-size: 20px;text-align: center;border-radius: 8px;top: 0;left: 0;background-color: rgba(0, 0, 0, .5);span {margin: 0 10px;cursor: pointer;}}}}
}
</style>
<style scoped>
//此处一定要将原el-upload的图片回显list隐藏,用自己写的
/deep/ .upload-demo .el-upload-list {display: none;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SI24R03 高度集成低功耗SOC 2.4G 收发一体芯片

今天给大家介绍一款Soc 2.4G 收发一体模块-SI24R03 Si24R03是一款高度集成的低功耗无线SOC芯片&#xff0c;芯片为QFN32 5x5mm封装&#xff0c;集成了资源丰富的MCU内核与2.4G收发器模块&#xff0c;最低功耗可达1.6uA&#xff0c;极少外围器件&#xff0c;大幅降低系统应用成本…

详解Android单元测试最佳实践

目的 充分的单元测试就是提高代码质量最有效的手段之一&#xff0c;而单元测试严重依赖代码的可测试性&#xff0c;本文主要通过一个简单的DEMO演示如何对Android原生应用进行单元测试&#xff0c;同时示例代码采用MVP模式以提高代码的可读性和可测试性 简介 在Android原生应…

mmdetection测试保存到新的文件夹,无需标签

这个是用demo这个代码测试的&#xff0c;需要先训练一个pth文件夹&#xff0c;训练之后再调用pth文件夹进行测试。测试的代码文件名是&#xff1a;image_demo_new.py&#xff0c;代码如系所示&#xff1a; # Copyright (c) OpenMMLab. All rights reserved. import asyncio fr…

使用selenium的edge浏览器登录某为

互联网上基本都是某哥的用法&#xff0c;其实edge和某哥的用法是一样的就有一下参数不一样。 一、运行环境 Python&#xff1a;3.7 Selenium&#xff1a;4.11.2 Edge&#xff1a;版本 120.0.2210.61 (正式版本) (64 位) 二、执行代码 from time import sleepfrom selenium…

调新浪分享

前端写一个按钮,通过按钮来调出新浪界面, window.location.href http://service.weibo.com/share/share.php?url 这行代码调出新浪分享界面,要是想要添加一些图片和文字 使用: window.location.href http://service.weibo.com/share/share.php?url encodeURIComponent…

P2 Qt Creator创建第一个Qt程序

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《LLinux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f33a;本篇简介 &#xff1a;这一章我们学…

Python基础——两个常用且容易忘记的知识点

1. replace函数的第三个参数 replace 方法提供了一个可选的参数 count&#xff0c;可以用于指定替换的次数。你可以将 count 设置为 1 来限制替换的次数&#xff0c;只替换第一个匹配项。 下面是使用 replace 方法限制替换次数的示例&#xff1a; date_str "2023/05/1…

二百一十一、Flume——Flume实时采集Linux中的Hive日志写入到HDFS中(亲测、附截图)

一、目的 为了实现用Flume实时采集Hive的操作日志到HDFS中&#xff0c;于是进行了一场实验 二、前期准备 &#xff08;一&#xff09;安装好Hadoop、Hive、Flume等工具 &#xff08;二&#xff09;查看Hive的日志在Linux系统中的文件路径 [roothurys23 conf]# find / -name…

smarty模版 [BJDCTF2020]The mystery of ip 1

打开题目 点击flag给了我们一个ip 点击hint&#xff0c;查看源代码处告诉了我们要利用这个ip bp抓包&#xff0c;并添加X-Forward-For头 所以这道题是XFF可控 本来联想到XFF漏洞引起的sql注入&#xff0c;但是我们无论输入什么都会正常回显&#xff0c;就联想到ssti注入 我们…

C/C++指针操作整理

C/C指针操作整理 面向曾经学习过指针的人&#xff0c;并非针对究极初学者。 一维指针 数据类型存储的地址&#xff0c;指向数据存储的地址&#xff0c;可以使用 &运算符取变量的地址&#xff0c;将其赋给指针变量。 int a 2; int *p &a;同时因为C/C中数组是连续存储…

Java实现插入排序算法

插入排序算法 &#xff08;1&#xff09;概念&#xff1a;通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应的位置并插入。 &#xff08;2&#xff09;一个通俗的比喻&#xff1a; 插入排序就类似于斗地主时&#xf…

CloudCompare 二次开发(23)——计算两点云之间的放缩倍数

目录 一、概述二、代码集成三、结果展示一、概述 使用CloudCompare编程实现计算两点云之间的放缩倍数。具体计算原理见:。 二、代码集成 1、mainwindow.h文件public中添加: void doActionComputeScale(); // 计算两点云的放缩倍数2、mainwindow.cpp文件void MainWin…

vue-element使用html2canvas实现网页指定区域(指定dom元素)截图

直接上代码&#xff1a; <template><el-dialog :visible.sync"printDialogVisible" width"1000px" :close-on-click-modal"false" append-to-body><template><div :id"print_content" ref"print_content&q…

Python网络爬虫的基础理解-对应的自我理解误区

##通过一个中国大学大学排名爬虫的示例进行基础性理解 以软科中国最好大学排名为分析对象&#xff0c;基于requests库和bs4库编写爬虫程序&#xff0c;对2015年至2019年间的中国大学排名数据进行爬取&#xff1a;&#xff08;1&#xff09;按照排名先后顺序输出不同年份的前10…

Linux下通过find找文件---通过修改时间查找(-mtime)

通过man手册查找和-mtime选项相关的内容 man find | grep -A 3 mtime # 这里简单介绍了 -mtime &#xff0c;还有一个简单的示例-mtime n Files data was last modified n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretati…

【已解决】解决Win7虚拟机打开网页报错的情况

因为刚才下载了个虚拟机&#xff0c;同样出现了无法安装VMtools的情况&#xff0c;所以想直接通过虚拟机的浏览器来下载一个补丁&#xff08;因为自己的U盘在虚拟机上面无法识别&#xff0c;应该是太老了Win7&#xff09; 结果发现Win7内置的IE浏览器太拉了。于是向下载一个火…

深度学习记录--神经网络表示及其向量化

神经网络表示 如下图 就这个神经网络图来说&#xff0c;它有三层&#xff0c;分别是输入层(Input layer)&#xff0c;隐藏层(Hidden layer)&#xff0c;输出层(Output layer) 对于其他的神经网络&#xff0c;隐藏层可以有很多层 一般来说&#xff0c;不把输入层算作一个标准…

【ITK库学习】使用itk库进行图像滤波ImageFilter:几何变换:翻转、重采样(未完)

目录 1、itkFlipImageFilter 图像翻转滤波器2、itkResampleImageFilter 重采样图像滤波器 1、itkFlipImageFilter 图像翻转滤波器 该类的主要功能是使输入数据在用户指定的轴上进行翻转。 翻转轴通过函数SetFlipAxes(array) 设置&#xff0c;其中输入是FixArray<bool,Imag…

UML图的各种类型以及软件设计师考试考察的方式

UML建模 前言 常见的UML的类型 UML 比前两题是更难的&#xff08;略高&#xff0c;但是学会就可以了。前两题是&#xff1a;数据流图&#xff0c;数据库的设计&#xff09;&#xff0c;因为UML图有很多类型&#xff1a;用例图&#xff0c;类图与对象图&#xff0c;顺序图&…

3_CSS层叠样式表基础

第3章-CSS层叠样式表基础 学习目标(Objective) 掌握标签选择器的使用掌握类选择器的使用了解id选择器和通配符选择器掌握font属性和color属性的应用 1.HTML的局限性 如果要改变下高度或者变一个颜色&#xff0c;就需要大量重复操作 总结&#xff1a; HTML满足不了设计者的需…