先看下效果是不是你所需要的。。。。

上传文件进度条后续会加上的。。。。

功能需求:默认为上传状态

      1、未上传:点击可上传文件

      2、已上传:点击上传文件

         (1)、鼠标移入【删除

         (2)、鼠标点击预览

然后废话不多说,直接上代码啦,希望能够帮助到你

 <template>
<div class=''>
<ul class="contract_list">
<li v-for="(item,index) in items" :key="item.index">
<div class="add_contract" v-if="item.contractTempletPath==''" title="点击可添加合同">
<el-upload
class="upload-demo"
ref="upload"
:http-request="httpRequest"
:show-file-list="false"
:before-upload="beforeAvatarUpload"
:data="{'id':item.id}"
action="/clapi/materiel/mealContractTempletRela/uploadContractTemplet"
:limit="1"
:auto-upload="true">
<div class="add_contract" slot="trigger">
<div class="contract_box">
<p class="el-icon-plus add_icon"></p>
<p>上传{{item.contractTempletName}}</p>
</div>
</div>
</el-upload>
</div>
<!--上传文件之后可删除-->
<div class="" v-else>
<div class="add_contract">
<span @click="del(item)" title="点击可删除">删除</span>
<div class="adreementImg" @click="preview(item)" v-if="item.contractTempletName=='设计合同模板'">
                   <img title="点击可预览" src="./../images/1.png">
                  </div>
<div class="adreementImg" @click="preview(item)" v-if="item.contractTempletName=='意向合同模板'">
                   <img title="点击可预览" src="./../images/2.png">
                  </div>
<div class="adreementImg" @click="preview(item)" v-if="item.contractTempletName=='正式合同模板'">
                   <img title="点击可预览" src="./../images/3.png">
                  </div>
</div>
</div>
<p class="contract_text">{{item.contractTempletName}}</p>
</li>
<!--上传文件之后可预览-->
<el-dialog width="50%"
:visible.sync="dialogVisible"
:title="previewName">
<iframe :src='previewUrl' width='100%' height='100%' frameborder='1' style="height: 540px;"></iframe>
</el-dialog>
</ul>
</div>
</template> <script>
export default {
props: {
message: Object
},
data() {
return {
mealId:"",
previewUrl:"",
previewName:"",
dialogVisible: false,
videoFlag:false,
items:[],
fileData:"",
fileName:"",
id:""
}
},
methods: {
// 点击预览
preview(val){
this.dialogVisible=true;
this.previewUrl = val.contractTempletPath;
this.previewName = val.contractTempletName;
}, // 判断上传文件大小不能超过50M
beforeAvatarUpload(file){
const isLt2M = file.size / 1024 / 1024 < 50
if(!isLt2M) {
this.$message({
message: '上传文件大小不能超过 50MB!',
type: 'warning'
});
return false;
}
},
// 点击删除
del(val){
this.$confirm("确认要删除"+val.contractTempletName+"吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.$axios.post('修改为删除接口地址',{
id:val.id
})
.then((response) => {
this.$message({
type: "success",
message: "删除"+val.contractTempletName+"成功!"
});
this.templetManage();
})
.catch((error) => { });
})
.catch(() => { });
},
// 转换base64格式
getBase64(file) {
return new Promise(function(resolve, reject) {
let reader = new FileReader();
let imgResult = "";
reader.readAsDataURL(file);
reader.onload = function() {
imgResult = reader.result;
};
reader.onerror = function(error) {
reject(error);
};
reader.onloadend = function() {
resolve(imgResult);
};
});
},
httpRequest (options) {
this.fileName = options.file.name;
this.id = options.data.id;
this.getBase64(options.file).then(res => {
this.fileData = res.split(',')[1];
this.$axios.post('修改为你的上传接口地址',{
fileData:this.fileData,
fileName:this.fileName,
id:this.id
})
.then((response) => {
this.$message({
type: "success",
message: "上传成功!"
});
this.templetManage();
})
.catch((error) => {
console.log(error);
}); });
},
templetManage(){
this.$axios.get('查询接口数据地址?mealId='+this.mealId)
.then((response) => {
var data = response.data.result
this.items = data;
for(var i=0;i<data.length;i++){
if(data[i].contractTempletPath){
this.items[i].contractTempletPath="http://crm.bc100.com:8012/onlinePreview?url=" + encodeURI(data[i].contractTempletPath);
}
}
})
.catch((error) => {
this.$message({
type: "warning",
message: error.response.data.result
});
});
}
},
created() {
this.mealId = this.message.id;
this.templetManage();
},
}
</script> <style scoped>
.adreementImg,.adreementImg img{
height: 300px;
width: 220px;
} .contract_box {
color: #0099ff;
font-size: 14px;
}
.contract_list {
text-align: center;
display: flex;
margin: 50px auto;
width: 100%;
}
.contract_list li {
margin-left: 80px;
}
.contract_text {
font-size: 14px;
margin-top: 10px;
}
.add_contract {
height: 300px;
cursor: pointer;
width: 220px;
display: flex;
background: #f7f7f7;
border: 1px solid #c4c4c4;
justify-content: center;
align-items: center;
text-align: center;
position: relative;
}
.add_contract span {
width: 100%;
z-index: 1111;
position: absolute;
bottom: 0;
padding: 6px;
background: #000;
opacity: 0.7;
color: #fff;
display: none;
}
.contract_list li .add_contract:hover span {
display: block;
}
.add_icon {
font-size: 40px;
margin-bottom: 20px;
}
</style>

若有不明白请加群号:复制 695182980 ,也可扫码,希望能帮助到大家。

         

Element-ui上传文件(删除、添加、预览)的更多相关文章

  1. element ui 上传文件,读取内容乱码解决

    element ui 上传文件,读取内容乱码解决: 加第二个参数 reader.readAsText(file.raw,'gb2312'); <el-upload class="upl ...

  2. atitit.javascript js 上传文件的本地预览

    atitit.javascript js 上传文件的本地预览 1. .URL.createObjectURL  1 1.1. 吊销所有使用 URL.createObjectURL 而创建的 URL,以 ...

  3. Element ui 上传文件组件(单文件上传) 点击提交 没反应

    element ui 第一次上传文件后 上传其他文件再次点击不再次提交 需要使用 clearFiles 清空已上传文件列表 这时候在次点击 上传按钮 就会惊喜的发现 可以上传了使用方法 this.$r ...

  4. element UI 上传文件成功后 - 清空文件

    request({ url: '/jiekou', method: 'post', data }).then(res => { this.$message({ type: 'success', ...

  5. C# 结合html5 批量上传文件和图片预览

    html5 新特性 <input id="imgsf" type="file" name="imgsf" multiple /> ...

  6. 【django】ajax,上传文件,图片预览

    1.ajax 概述: AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...

  7. Webform之FileUpload(上传按钮控件)简单介绍及下载、上传文件时图片预览

    1.FileUpload上传控件:(原文:http://www.cnblogs.com/hide0511/archive/2006/09/24/513201.html) FileUpload 控件显示 ...

  8. 【微信小程序云开发】1分钟学会实现上传、下载、预览、删除图片,并且以九宫格展示图片

    大家好,我叫小秃僧 这篇文章是讲解云开发如何上传.下载.预览.删除图片,并且以九宫格展示图片的功能 @ 目录 1. 实现效果 2.JavaScript代码 3.wxml代码 4.wxss代码 1. 实 ...

  9. dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

    http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术 ...

  10. DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

    DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库. 它是轻量级的,不依赖任何其他类库(如JQuery)并且高度可定制. 试试看! 将文件拖至此处或点击上传.(这仅仅是 dropzo ...

随机推荐

  1. 文件 "c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\ttt.mdf" 已压缩,但未驻留在只读数据库或文件组中。必须将此文件解压缩。 CREATE DATABASE 失败。无法创建列出的某些文件名。请查看相关错误。 (.Net SqlClient Data Provider)

    问题: 文件 "c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\ttt.mdf" 已压缩,但 ...

  2. vue开发目录

    基于 vue-cli 脚手架生成项目模板基础上做了些改动,加入了 vue-router ,vuex 等配套设施,本地 dev server 中加入了接口 mock 功能,还增加一个 build ser ...

  3. 第一个Python窗口

    import tkinter def my_window(w, h): ws = root1.winfo_screenwidth(); hs = root1.winfo_screenheight(); ...

  4. redis(一主两从三哨兵模式搭建)记录

    转自:http://www.cnblogs.com/fly-piglet/p/9836314.html 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也 ...

  5. Java SE中的Synchronized

    1 引言 在多线程并发的编程中Synchronized一直是元老级的角色,很多人会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化以后,有些情况下它并不那么重了. ...

  6. C++中的string类型转换为int类型

    给定一个十进制整数n,输出n的各位数字之和 #include<iostream> #include<string> using namespace std; int main( ...

  7. P4859 已经没有什么好害怕的了(dp+二项式反演)

    P4859 已经没有什么好害怕的了 啥是二项式反演(转) 如果你看不太懂二项式反演(比如我) 那么只需要记住:对于某两个$g(i),f(i)$ ---------------------------- ...

  8. Java静态代码块与非静态代码块

    静态代码块,格式是 static{ },随着类的加载而加载,且只执行一次. 在程序中,执行的优先级最高. 非静态代码块,格式是{ },在创建对象的时候运行(即new一个对象的时候),每创建一次对象就执 ...

  9. Flutter去除右上角Debug标签

    void main(){ runApp(new MyApp()); } class MyApp extends StatefulWidget { @override _MyAppState creat ...

  10. [ZOJ 4020] Traffic Light

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4020 很简单的一个bfs题,是我想多了. 顺便学习一下C++的S ...