el-upload上传组件的动态添加;el-upload动态上传文件;el-upload区分文件是哪个组件上传的。

在这里插入图片描述

需求:正常我们上传都是一个固定的文件传到固定的后端字段里去。
但是有可能遇到,这种自定义新增多个上传组件,也就是遍历数组似的多个同样的上传组件

此时就遇到一个问题:因为是遍历出来的上传组件,导致上传成功:on-success、改变:on-change、删除:on-remove都是用的同样的方法,那么怎么知道刚才上传的这个文件是属于哪个组件的呢

解决方法: 在模板html的时候,结合function的函数,先将遍历的 j 下标return到对应的成功方法里,然后在methods时候,在return出来的对应的方法里,通过下标 j 标识将上传成功的内容(图片名称、url、id等)存入对应的字段中。
.
:on-remove="(file, file_list)=>{handlePayRemove(file, file_list, j)}"
:on-change="(file, file_list)=>{return filePayChange(file, file_list, j)}"
:on-success="(response, file, file_list)=>{return msgPaySuccess(response, file, file_list, j)}"
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以下代码可以直接复制使用,但是需要注意将 uploadImgURL 换成自己的图片上传接口

<template><div class="order"><el-form :model="ruleFormContract" ref="ruleFormContract" label-width="130px" class="demo-ruleFormContract"><el-row><el-col :span="24"><el-form-item label="上传附件:"><span style="color: #1890ff; cursor: pointer;" @click="addFileArr"><i class="el-icon-plus"></i>添加自命名附件</span></el-form-item></el-col><!-- 这是固定的上传 --><el-form-item label-width="150px" label="付款申请码/付款码:" prop="hetongwenjian" class="img_all_box_item"><div><el-upload class="upload-demo" style="backgroundColor:#fff;width: 360px;":action="uploadImgURL":file-list="filePayListFukuanma"ref="msgPayUpload":on-preview="handlePictureCardPay":before-upload="beforePayUp":on-change="(file, file_list)=>{return filePayChange(file, file_list, 'filePayListFukuanma')}":on-success="(response, file, file_list)=>{return msgPaySuccess(response, file, file_list, 'filePayListFukuanma')}":on-remove="(file, file_list)=>{return handlePayRemove(file, file_list, 'filePayListFukuanma')}":show-file-list="false"drag:multiple="true":limit="2000"><!-- :show-file-list="false" 取消原自带的文件展示 展示下方template里自己写的文件展示 --><i class="el-icon-plus"></i><div class="el-upload__text">将文件拖到此处,或<em>点击上传(需小于2M)</em></div></el-upload></div><template><div style="float:left;" v-for="(item,index) in showImageArrFukuanma" :key="index"><span class="span_box" style="border:1px solid #ccc;display:inline-block;border-radius: 5px;" @click="showBigImg(item)"><img v-if="(item.fileName.indexOf('.png')>=0)||(item.fileName.indexOf('.jpg')>=0)||(item.fileName.indexOf('.jpeg')>=0)" style="width:50px;height:50px;cursor: pointer;" :src="item.imgUrl" alt=""><img v-else style="width:50px;height:50px;cursor: pointer;" src="../../../static/file.png" alt=""><span>{{item.fileName}}</span><i class="el-icon-close" style="cursor: pointer;margin-left:5px;" @click.stop.prevent="deleteImgOne(item,'filePayListFukuanma')"></i></span></div></template></el-form-item><!-- 遍历多个 --><template v-for="(ele,j) in newImgElemenArr"><el-form-item label-width="150px" :key="j" prop="hetongwenjian" class="img_all_box_item img_all_box_arr"><el-input style="float:left;width: 150px;" v-model="ele.newname"></el-input><i class="el-icon-delete" style="float:left;margin: 10px 10px;" @click="delzdyArr(j)"></i><div><el-upload class="upload-demo" style="backgroundColor:#fff;width: 360px;":action="uploadImgURL":file-list="ele.newfilePayListName"ref="msgPayUpload":on-preview="handlePictureCardPay":before-upload="beforePayUp":on-change="(file, file_list)=>{return filePayChange(file, file_list, j)}":on-success="(response, file, file_list)=>{return msgPaySuccess(response, file, file_list, j)}":on-remove="(file, file_list)=>{handlePayRemove(file, file_list, j)}":show-file-list="false" drag:multiple="true":limit="2000"><!-- :show-file-list="false" 取消原自带的文件展示 展示下方template里自己写的文件展示 --><i class="el-icon-plus"></i><div class="el-upload__text">将文件拖到此处,或<em>点击上传(需小于2M)</em></div></el-upload></div><template><div style="float:left;" v-for="(item,index) in ele.newshowImageArr" :key="index"><span class="span_box" style="border:1px solid #ccc;display:inline-block;border-radius: 5px;" @click="showBigImg(item)"><img v-if="(item.fileName.indexOf('.png')>=0)||(item.fileName.indexOf('.jpg')>=0)||(item.fileName.indexOf('.jpeg')>=0)" style="width:50px;height:50px;cursor: pointer;" :src="item.imgUrl" alt=""><img v-else style="width:50px;height:50px;cursor: pointer;" src="../../../static/file.png" alt=""><span>{{item.fileName}}</span><i class="el-icon-close" style="cursor: pointer;margin-left:5px;" @click.stop.prevent="deleteImgOne(item,j)"></i></span></div></template></el-form-item></template></el-row></el-form><!-- 预览图 --><el-dialog :visible.sync="dialogVisible"><img width="100%" :src="dialogImageUrl" alt="" /></el-dialog></div>
</template><script>
import { G_CGI_PHP } from "api/api" // 引入后端的api接口地址
export default {data () {return {ruleFormContract: {},uploadImgURL: G_CGI_PHP.group.documentUpload,//上传文件后端给的接口-------------------需要替换成你自己的// uploadImgURL: 'https://jsonplaceholder.typicode.com/posts/',dialogImageUrl: "",dialogVisible: false,filePayListFukuanma: [],showImageArrFukuanma: [// {fileName:'aaa.png',fileId:'21909489392392',imgUrl:G_CGI_PHP.group.documentDownload + `?id=` + res.data}], //上传图后存入数组 前端遍历和展示的值newImgElemenArr: [// { newname: '', newfilePayListName: [], newshowImageArr: [] }//分别是名称(传给后端知道哪个附件名),上传绑定(估计用不到),图片数组(传给后端的图片信息)],//动态新增加的附件上传组件}},methods: {addFileArr () {let name1 = '附件' + (this.newImgElemenArr.length + 1)this.newImgElemenArr.push({ newname: name1, newfilePayListName: [], newshowImageArr: [] })},delzdyArr (j) {this.newImgElemenArr = this.newImgElemenArr.filter((ele, index) => {return index != j})},handlePictureCardPay (file) {console.log(file, "预览")this.dialogImageUrl = file.urlthis.dialogVisible = true},beforePayUp (file) {console.log('上传前', file)if ((file.size / 1024 / 1024) >= 2) {this.$message.warning('文件需小于2M')return false}},filePayChange (file, fileDataList, j) {const loading = this.$loading({lock: true,text: 'Loading',spinner: 'el-icon-loading',background: 'rgba(0, 0, 0, 0.7)'})console.log(file, fileDataList, j, "文件改变")if (j == 'filePayListFukuanma') {this.filePayListFukuanma = fileDataList} else {for (let h = 0; h < this.newImgElemenArr.length; h++) {const element = this.newImgElemenArr[h]if (h == j) {this.newImgElemenArr[h].newfilePayListName = fileDataList}}}setTimeout(() => {loading.close()}, 2000)},msgPaySuccess (res, file, file_list, j) {console.log('上传成功', res, file)// console.log("营业执照上传成功:file格式---", file.raw,)// console.log('图片地址', URL.createObjectURL(file.raw))const _vm = thisif (res.success) {if (j == 'filePayListFukuanma') {this.showImageArrFukuanma.push({ fileName: file.name, fileId: res.data, imgUrl: G_CGI_PHP.group.documentDownload + `?id=` + res.data })} else {for (let h = 0; h < this.newImgElemenArr.length; h++) {const element = this.newImgElemenArr[h]if (h == j) {this.newImgElemenArr[h].newshowImageArr.push({ fileName: file.name, fileId: res.data, imgUrl: G_CGI_PHP.group.documentDownload + `?id=` + res.data })}}}} else {_vm.$message({message: "上传失败,请重新上传!",type: "error",})}},handlePayRemove (file, fileDataList, j) {console.log(file, fileDataList, j, "删图")if (j == 'filePayListFukuanma') {this.filePayListFukuanma = fileDataList} else {for (let h = 0; h < this.newImgElemenArr.length; h++) {const element = this.newImgElemenArr[h]if (h == j) {this.newImgElemenArr[h].newfilePayListName = fileDataList}}}},showBigImg (item) {if ((item.fileName.indexOf('.png') >= 0) || (item.fileName.indexOf('.jpg') >= 0) || (item.fileName.indexOf('.jpeg') >= 0)) {// 图片是预览this.dialogImageUrl = item.imgUrlthis.dialogVisible = true} else {// 其他文件是下载const x = new window.XMLHttpRequest()x.open('GET', item.imgUrl, true)x.responseType = 'blob'x.onload = () => {const url = window.URL.createObjectURL(x.response)const a = document.createElement('a')a.href = urla.download = item.fileNamea.click()}x.send()}},deleteImgOne (item, j) {console.log(item, j)if (j == 'filePayListFukuanma') {this.showImageArrFukuanma = this.showImageArrFukuanma.filter(ele => {return ele != item})this.filePayListFukuanma = this.filePayListFukuanma.filter(ele => {return ele.name != item.fileName})} else {for (let h = 0; h < this.newImgElemenArr.length; h++) {const element = this.newImgElemenArr[h]if (h == j) {console.log(h, j, item)this.newImgElemenArr[h].newshowImageArr = this.newImgElemenArr[h].newshowImageArr.filter(ele => {return ele != item})this.newImgElemenArr[h].newfilePayListName = this.newImgElemenArr[h].newfilePayListName.filter(ele => {return ele.name != item.fileName})}}}},},
}
</script><style lang="less" scoped>
.order {padding: 20px;/deep/.el-dialog__body {padding-top: 0px;padding-bottom: 20px;}// 以下是处理弹框.el-form-item__content {width: 100% !important;.el-select {width: 100%;}.el-date-editor {width: 100%;}}/deep/.bottom_box {text-align: center;.el-form-item__content {margin-left: 0 !important;}}.el-col {// background-color: #1fff;// border: 1px solid #ddd;// min-height: 62.62px;min-height: 65.62px;}.span_box {padding: 10px;box-sizing: border-box;height: 80px;overflow: hidden;margin-left: 10px;img {float: left;margin-top: 5px;}span {float: left;margin-top: 10px;}i {float: left;margin-top: 24px;}}.bor_box {margin-left: 50px;margin-bottom: 10px;overflow: hidden;position: relative;/deep/.el-col-2 {margin-top: 32px;}/deep/.el-col-6 {top: 25px;position: relative;}.box4_div {border: 1px solid #ddd;overflow: hidden;height: 93px;padding-right: 50px;}.name_span {position: absolute;right: -18px;top: 0px;}.el-icon-delete {margin-left: 20px;margin-top: 3px;cursor: pointer;}}.num_input {width: fit-content;/deep/.el-input-number__decrease,/deep/.el-input-number__increase {display: none !important;}/deep/.el-input__inner {padding: 0 !important;text-align: left;padding-left: 10px !important;}}/deep/.pos_box {position: relative;span {position: absolute;top: 0px;}}.img_all_box_item {width: 100%;overflow: hidden;padding-top: 15px;/deep/.el-form-item__label {margin-top: 20px;}/deep/.upload-demo {float: left !important;// background-color: #1fff !important;padding: 0 !important;height: 80px !important;line-height: 80px !important;.el-icon-plus {float: left !important;margin: 32px 0 0 12px !important;}.el-upload-dragger {height: 80px !important;}}}.img_all_box_arr {margin-left: 10px;/deep/.el-form-item__content {margin-left: 0 !important;}}
}
</style>

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

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

相关文章

openwrt gpio控制与使用

查看datasheet和确认GPIO复用引脚scheme 通过查看mt7628 datasheet可以明确复用关系&#xff1a; 在这里我以I2S对应的GPIO引脚为例。 查看 mt7628an.dtsi 文件中对gpio的注册 $(TOPDIR)假定为宿主机上 OpenWrt 的编译目录。 在$(TOPDIR)/target/linux/ramips/dts/mt7628an.d…

git 配置图形比较工具

2019独角兽企业重金招聘Python工程师标准>>> 以meld为例&#xff0c;安装方式是sudo apt-get install A. 在/usr/local/bin 目录下创建extDiff 文件(注意: 目录可以是任意) cd /usr/local/bin sudo gedit /usr/local/bin 内容为: #!/bin/bash /usr/bin/meld "$…

推荐!!!前端将url转成blob和blob转成url;前端将文件流读取成url;前端将blob文件读取出url预览和下载

一般后端返回的地址&#xff0c;前端通过返回blob读取出url&#xff0c;然后使用a标签下载 方式一&#xff1a;通过接口将后端返回的文件流blob读取出url&#xff08;推荐推荐&#xff09; downLoadFileImg (fileUrl, fileName) {// 可下载&#xff0c;名称也有效 -- 推荐cons…

CH340电路设计

最近选用USB转串口芯片进行开发调试&#xff0c;在调研了各主流芯片的之后&#xff0c;觉得 CH340 系列的性价比很高&#xff0c;而且技术支持在国内&#xff0c;如果遇到问题解决起来也会方便很多。但是 CH340 / CH341 型号很多&#xff0c;具体选型就就该结合需求和芯片手册了…

vue拖拽列表----vuedraggable组件;ElementUI 实现Table组件实现拖拽效果

vue-draggable中文文档 简单的遍历list列表拖拽 部分元素不可拖拽参考&#xff1b; 部分不可拖拽参考 ElementUI 实现Table组件实现拖拽效果 列表的拖拽功能&#xff1a; 一、下载依赖 npm i -S vuedraggable二、页面使用 <template><div><vuedraggable cla…

filters获取data中的数据;filters使用data中的数据

如果直接在filters中通过this引入data数据&#xff0c;则无效获取不到。 可以通过filter方法传值 来获取data的数据使用 <div >{{formInline.bjthObj.insuranceCompanyName | CompanyVal(cops)}}</div>data () {return {insuranceCompanyName: ,cops:[],}}filters:…

spring MVC配置详解

From: http://www.cnblogs.com/superjt/p/3309255.html 现在主流的Web MVC框架除了Struts这个主力 外&#xff0c;其次就是Spring MVC了&#xff0c;因此这也是作为一名程序员需要掌握的主流框架&#xff0c;框架选择多了&#xff0c;应对多变的需求和业务时&#xff0c;可实行…

Altium Designer如何画虚线

流程如下&#xff1a; 在原理图上右键 --> Place --> Drawing Tools --> Line&#xff0c;在画线的时候按 Tab 键&#xff0c;然后将 Line Style 改为 Dashed&#xff0c;就可以画虚线了。

node.js 和 HTML5-Canvas 结合实现截图上传交互

楼主要做一个简单的图片上传服务器&#xff0c; node.js实现服务端&#xff0c; 页面使用HTML5-Canvas实现截图。 为什么用Nodejs呢&#xff0c;因为用Js写后台很爽-。- 而且比较简单 为什么用canvas呢&#xff0c;其实我不想用的 因为有些低版本的IE对HTML5的支持不好&#xf…

通过文件url地址获取base64;通过图片url地址获取base64;js获取文件的base64

本篇是通过url地址获取文件的base64 如果想要通过File文件获取base64查看这篇 以下代码可直接复制使用&#xff01;注意第9行的图片地址更改下 <template><div class"content"><div>获取图片的base64</div><input type"file" …

FineReport报表和J2EE应用的集成

From: http://www.blogjava.net/fannie/archive/2013/05/08/398985.html FineReport是一个纯Java软件&#xff0c;因此对于J2EE的项目&#xff0c;可以做到无缝集成。 报表服务器并非物理概念的服务器&#xff0c;而是以一个标准的J2EE应用的形式或者jar包的形式提交给程序。应…

vue使用jszip和file-save下载文件并打包;vue前端下载多个文件b并打包;

场景&#xff1a; 一般是后端直接将多个文件打包好&#xff0c;前端调用下载地址下载打包&#xff1b;但是文件太多会导致下载接口时间过长和服务器爆掉&#xff1b;故采用前端先将多个文件下载然后进行打包&#xff1b; 注意点&#xff1a; 1.先获取所有下载的文件路径和包含后…

【BZOJ1085】骑士精神

迭代加深搜索。 剪枝&#xff1a;当满足以下任意一个条件退出&#xff1a; 1.当前已搜到答案时&#xff08;ans!-1||sum0&#xff09; 2.剩余步数1<当前局面与目标局面不同的格子数sum 时&#xff08;因为n步最多改变n1个格子&#xff09; 3.当前步数>当前规定最大步数时…

CH340电路设计注意事项

在前面两篇博客提到了CH340的电路设计以及芯片选型&#xff0c;本文将重点放在使用CH340芯片进行电路设计的一些细节与注意事项。 电压匹配问题 CH340 芯片通过 USB 转换出来的 TTL 串口输出和输入电压是根据芯片供电电压是自适应的。也即&#xff0c;如果芯片是 5V 供电&…

解决 Visual Studio 中代码注释自动折叠的问题

今天突发奇想&#xff0c;打算把存储过程以注释的形式放在代码中进行版本管理&#xff0c;比如下面的代码&#xff1a; 由于存储过程很长&#xff0c;注释占了很多行&#xff0c;严复影响了正常代码的排版与阅读体验。之前也遇到过这样的场景&#xff0c;当时通过手动添加regio…

Newtonsoft.Json高级用法

From: http://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快&#xff0c;体验好。刚好手头上的一个项目服务端接口有性能问题&#xff0c;需要进行优化。在接口多次修改中&#xff0c;实体添加了很多字段用于中间计算或者存储&#xff0c;然后最终用Newtonso…

Android 经典示例,初学者的绝好源码资料

2019独角兽企业重金招聘Python工程师标准>>> Android 经典示例&#xff0c;初学者的绝好源码资料 附上源码&#xff1a; 转载:http://www.adobex.com/android/source/details/00000374.htm 转载于:https://my.oschina.net/androidcode/blog/104696

CH340 Linux驱动使用教程

在官方Linux内核版本中自Kernel2.6以后就默认包含了对CH340/CH341芯片的驱动支持了&#xff0c;但比较遗憾的是该自带驱动版本较老&#xff08;由开源社区开发者提交&#xff09;已不能满足使用需求了&#xff0c;因此我们需要用芯片官网提供的新驱动进行替换链接。 1. 首先去…

h5开发实时预览;真机调试开发;拼接ip的地址直接微信打开或者浏览器打开也可以实时预览

http://192.168.10.135:2277/#/Write1 本地启动vue项目 将地址栏复制 放在微信开发者工具 可以借助微信开发者工具预览 找到自己电脑的ip 也可以电脑输入自己的ip和对应端口号地址进行预览 最后将拼接ip和端口号的地址直接微信打开或者浏览器打开也可以实时预览