当前位置: 首页 > news >正文

element-ui+vue2实现粘贴上传

element-ui+vue2实现粘贴上传

<style scoped lang="scss">.img-upload{position: relative;display: inline-block;margin-right: 9px;}.image {width: 100px;height: 100px;margin-right: 9px;}.image:last-child{margin-right: 0;}.img-upload .el-upload--picture-card,.img-upload .el-upload-list__item{height: 100px;width: 100px;line-height: 100px;}.img-upload .el-icon-close-tip{display: none !important;}.img-upload .el-upload-list__item-status-label{display: none !important;}.hide .el-upload--picture-card {display: none;}.img-upload-title-required:before {content: '*';color: #F56C6C;margin-right: 4px;}.el-upload__tip{color: red;}.hide.el-upload-list .el-upload-list__item.is-focus {border: 2px solid red; /* 设置选中图片的红色边框样式 */}
</style><script async defer>var uploadMultiImage  = {template:`<div class="img-upload"><div v-if="!detail"><el-uploadref="upload":class="{hide:hideUpload}":action="action"list-type="picture-card":limit="limit":file-list="fileList":multiple="multiple":on-success="uploadSuccess":on-exceed="uploadExceed":on-change="uploadChange":on-remove="uploadRemove":on-preview="handlePictureCardPreview"@paste.native="handlePaste"><i class="el-icon-plus"></i></el-upload><div :class="required?'img-upload-title img-upload-title-required':'img-upload-title'">{{title}}</div><div v-if="tip" slot="tip" class="el-upload__tip">{{tip}}</div></div><div v-else><div v-if="imageList" ><el-image v-for="(item,index) in fileList"  :key=item.url :src="item.url+'?w=80&h=80'" class="image" :preview-src-list="[item.url]" @click.stop="handleClickItem"></el-image></div></div><el-dialog :visible.sync="dialogVisible"><img width="100%" :src="dialogImageUrl" alt=""></el-dialog></div>`,props: {urls:{type: [String, Array],default(){return []}},action:{type:String,default:'/v1/api/index/upload'},detail:{type:Boolean,default:false},multiple:{type:Boolean,default:false},title:{type:String,default:''},limit:{type:Number,default:1},required:{type:Boolean,default:false},tip:{type:String,default:''},},model:{prop:'urls',event:'valChange'},created(){},watch:{urls(val){this.imageList = val},},data(){return {fileList: this.pathUrls(this.urls),imageList: this.urls,hideUpload: this.isHideUpload(this.urls),dialogImageUrl: '',dialogVisible: false}},mounted() {},computed:{},methods:{/*** 监听粘贴操作*/handlePaste(e) {var clipboardData = e.clipboardData; // IEif (!clipboardData) {//chromeclipboardData = e.originalEvent.clipboardData;}var items='';items = (e.clipboardData || window.clipboardData).items;let file = null;if (!items || items.length === 0) {this.$message.error('当前浏览器不支持粘贴本地图片,请打开图片复制后再粘贴!');return;}// 搜索剪切板itemsfor (let i = 0; i < items.length; i++) {// 限制上传文件类型if (items[i].type.indexOf('image') !== -1) {file = items[i].getAsFile();break;}}// 对复制黏贴的类型进行判断,若是非文件类型,比如复制黏贴的文字,则不会调用上传文件的函数if(file){// console.log(file)// // 生成一个本地的URL用于预览// const url = URL.createObjectURL(file);// console.log(url)// 添加到fileList中,这里示意性地只存放url,实际应根据需求进行适当处理//this.fileList.push({ url: url });let formData = new FormData();formData.append('file', file, 'pasted_image.png'); // 'file' 是后端接口接收文件的字段名,'pasted_image.png' 是文件名console.log(formData);// 上传文件到服务器this.uploadPastedImage(formData);}},uploadPastedImage(formData) {fetch(this.action, {method: 'POST',body: formData}).then(response => response.json()).then(data => {if (data.code) {console.log(data);const newFile = {name: 'pasted_image.png',url: data.domain + '/' + data.data[0],uid: Date.now(), // 确保每个文件有唯一的uidstatus: 'success' // 设置文件状态为成功};//this.fileList = this.fileList.filter(file => !file.url.startsWith('blob:'));this.fileList.push(newFile);this.valChange();} else {this.$message.error('上传失败,请稍后重试');}}).catch(error => {this.$message.error('网络错误,请稍后重试');console.error('Error:', error);});},pathUrls(urls){let fileList = []if(urls.length>0){urls.forEach(function(v) {if(!v.includes('http')){fileList.push({'name': v,'url':'http://image.spocoo.com/' + v,})}else {fileList.push({'name': v,'url': v,})}});}return fileList},nameUrls(fileList){let urls = []fileList.forEach(function(v) {if(v.response){urls.push(v.response.data[0])}else{urls.push(v.url)}});return urls},isHideUpload(urls){return urls.length >= this.limit;},uploadSuccess(res,file, fileList){if (res.code){this.fileList = fileListthis.valChange()}else{layer.msg('网络走丢了,请稍后重试上传哦')}},uploadExceed(){layer.msg(this.title+'最多可以上传'+this.limit+'张图片')},uploadChange(file, fileList) {this.hideUpload = fileList.length >= this.limit;},uploadRemove(file, fileList) {this.fileList.splice(this.fileList.findIndex(e => e.url === file.url), 1)this.hideUpload = fileList.length >= this.limit;this.valChange()},//预览handlePictureCardPreview(file) {this.dialogImageUrl = file.url;this.dialogVisible = true;},valChange(){this.$emit('valChange',this.nameUrls(this.fileList))},handleClickItem(){this.$nextTick(()=>{// 获取遮罩层domlet domImageMask = document.querySelector(".el-image-viewer__mask");if (!domImageMask) {return;}domImageMask.addEventListener("click", () => {// 点击遮罩层时调用关闭按钮的 click 事件document.querySelector(".el-image-viewer__close").click();});})}}}
</script>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 收银系统源码-分销商城视频介绍
  • 企业搭建SD-WAN组网有什么意义?
  • “光影魔术手”:一款让照片编辑更高效的软件工具
  • 自动化测试selenium
  • 最新小猫咪PHP加密系统源码V1.4_本地API接口_带后台
  • 【时时三省】(C语言基础)函数递归
  • 体验教程:通义灵码陪你备战求职季
  • 文件审查流程:使用指南
  • js录制音频
  • httpx,一个网络请求的 Python 新宠儿
  • 24年电赛——自动行驶小车(H题)基于 CCS Theia -陀螺仪 JY60 代码移植到 MSPM0G3507(附代码)
  • 校园选课助手【5】-解决Elasticsearch和MySQL同步
  • 无人机之保护野生动物篇
  • JS+H5打字练习器
  • JAVA-案列练习-ATM项目
  • python3.6+scrapy+mysql 爬虫实战
  • 3.7、@ResponseBody 和 @RestController
  • CSS 提示工具(Tooltip)
  • js数组之filter
  • learning koa2.x
  • leetcode-27. Remove Element
  • nginx 负载服务器优化
  • Object.assign方法不能实现深复制
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 机器学习 vs. 深度学习
  • 聚簇索引和非聚簇索引
  • 前端之Sass/Scss实战笔记
  • 我建了一个叫Hello World的项目
  • 正则表达式
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • # 数据结构
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #100天计划# 2013年9月29日
  • #Linux(权限管理)
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2)Java 简介
  • (8)STL算法之替换
  • (第二周)效能测试
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (译)2019年前端性能优化清单 — 下篇
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .NET C# 配置 Options
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 语言模型篇(4)
  • [codeforces]Recover the String
  • [C语言]-基础知识点梳理-编译、链接、预处理
  • [JavaEE系列] wait(等待) 和 notify(唤醒)