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

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

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

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

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

         (1)、鼠标移入【删除

         (2)、鼠标点击预览

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

  1. <template>
  2. <div class=''>
  3. <ul class="contract_list">
  4. <li v-for="(item,index) in items" :key="item.index">
  5. <div class="add_contract" v-if="item.contractTempletPath==''" title="点击可添加合同">
  6. <el-upload
  7. class="upload-demo"
  8. ref="upload"
  9. :http-request="httpRequest"
  10. :show-file-list="false"
  11. :before-upload="beforeAvatarUpload"
  12. :data="{'id':item.id}"
  13. action="/clapi/materiel/mealContractTempletRela/uploadContractTemplet"
  14. :limit="1"
  15. :auto-upload="true">
  16. <div class="add_contract" slot="trigger">
  17. <div class="contract_box">
  18. <p class="el-icon-plus add_icon"></p>
  19. <p>上传{{item.contractTempletName}}</p>
  20. </div>
  21. </div>
  22. </el-upload>
  23. </div>
  24. <!--上传文件之后可删除-->
  25. <div class="" v-else>
  26. <div class="add_contract">
  27. <span @click="del(item)" title="点击可删除">删除</span>
  28. <div class="adreementImg" @click="preview(item)" v-if="item.contractTempletName=='设计合同模板'">
                       <img title="点击可预览" src="./../images/1.png">
                      </div>
  29. <div class="adreementImg" @click="preview(item)" v-if="item.contractTempletName=='意向合同模板'">
                       <img title="点击可预览" src="./../images/2.png">
                      </div>
  30. <div class="adreementImg" @click="preview(item)" v-if="item.contractTempletName=='正式合同模板'">
                       <img title="点击可预览" src="./../images/3.png">
                      </div>
  31. </div>
  32. </div>
  33. <p class="contract_text">{{item.contractTempletName}}</p>
  34. </li>
  35. <!--上传文件之后可预览-->
  36. <el-dialog width="50%"
  37. :visible.sync="dialogVisible"
  38. :title="previewName">
  39. <iframe :src='previewUrl' width='100%' height='100%' frameborder='1' style="height: 540px;"></iframe>
  40. </el-dialog>
  41. </ul>
  42. </div>
  43. </template>
  44.  
  45. <script>
  46. export default {
  47. props: {
  48. message: Object
  49. },
  50. data() {
  51. return {
  52. mealId:"",
  53. previewUrl:"",
  54. previewName:"",
  55. dialogVisible: false,
  56. videoFlag:false,
  57. items:[],
  58. fileData:"",
  59. fileName:"",
  60. id:""
  61. }
  62. },
  63. methods: {
  64. // 点击预览
  65. preview(val){
  66. this.dialogVisible=true;
  67. this.previewUrl = val.contractTempletPath;
  68. this.previewName = val.contractTempletName;
  69. },
  70.  
  71. // 判断上传文件大小不能超过50M
  72. beforeAvatarUpload(file){
  73. const isLt2M = file.size / 1024 / 1024 < 50
  74. if(!isLt2M) {
  75. this.$message({
  76. message: '上传文件大小不能超过 50MB!',
  77. type: 'warning'
  78. });
  79. return false;
  80. }
  81. },
  82. // 点击删除
  83. del(val){
  84. this.$confirm("确认要删除"+val.contractTempletName+"吗?", "提示", {
  85. confirmButtonText: "确定",
  86. cancelButtonText: "取消",
  87. type: "warning"
  88. })
  89. .then(() => {
  90. this.$axios.post('修改为删除接口地址',{
  91. id:val.id
  92. })
  93. .then((response) => {
  94. this.$message({
  95. type: "success",
  96. message: "删除"+val.contractTempletName+"成功!"
  97. });
  98. this.templetManage();
  99. })
  100. .catch((error) => {
  101.  
  102. });
  103. })
  104. .catch(() => {
  105.  
  106. });
  107. },
  108. // 转换base64格式
  109. getBase64(file) {
  110. return new Promise(function(resolve, reject) {
  111. let reader = new FileReader();
  112. let imgResult = "";
  113. reader.readAsDataURL(file);
  114. reader.onload = function() {
  115. imgResult = reader.result;
  116. };
  117. reader.onerror = function(error) {
  118. reject(error);
  119. };
  120. reader.onloadend = function() {
  121. resolve(imgResult);
  122. };
  123. });
  124. },
  125. httpRequest (options) {
  126. this.fileName = options.file.name;
  127. this.id = options.data.id;
  128. this.getBase64(options.file).then(res => {
  129. this.fileData = res.split(',')[1];
  130. this.$axios.post('修改为你的上传接口地址',{
  131. fileData:this.fileData,
  132. fileName:this.fileName,
  133. id:this.id
  134. })
  135. .then((response) => {
  136. this.$message({
  137. type: "success",
  138. message: "上传成功!"
  139. });
  140. this.templetManage();
  141. })
  142. .catch((error) => {
  143. console.log(error);
  144. });
  145.  
  146. });
  147. },
  148. templetManage(){
  149. this.$axios.get('查询接口数据地址?mealId='+this.mealId)
  150. .then((response) => {
  151. var data = response.data.result
  152. this.items = data;
  153. for(var i=0;i<data.length;i++){
  154. if(data[i].contractTempletPath){
  155. this.items[i].contractTempletPath="http://crm.bc100.com:8012/onlinePreview?url=" + encodeURI(data[i].contractTempletPath);
  156. }
  157. }
  158. })
  159. .catch((error) => {
  160. this.$message({
  161. type: "warning",
  162. message: error.response.data.result
  163. });
  164. });
  165. }
  166. },
  167. created() {
  168. this.mealId = this.message.id;
  169. this.templetManage();
  170. },
  171. }
  172. </script>
  173.  
  174. <style scoped>
  175. .adreementImg,.adreementImg img{
  176. height: 300px;
  177. width: 220px;
  178. }
  179.  
  180. .contract_box {
  181. color: #0099ff;
  182. font-size: 14px;
  183. }
  184. .contract_list {
  185. text-align: center;
  186. display: flex;
  187. margin: 50px auto;
  188. width: 100%;
  189. }
  190. .contract_list li {
  191. margin-left: 80px;
  192. }
  193. .contract_text {
  194. font-size: 14px;
  195. margin-top: 10px;
  196. }
  197. .add_contract {
  198. height: 300px;
  199. cursor: pointer;
  200. width: 220px;
  201. display: flex;
  202. background: #f7f7f7;
  203. border: 1px solid #c4c4c4;
  204. justify-content: center;
  205. align-items: center;
  206. text-align: center;
  207. position: relative;
  208. }
  209. .add_contract span {
  210. width: 100%;
  211. z-index: 1111;
  212. position: absolute;
  213. bottom: 0;
  214. padding: 6px;
  215. background: #000;
  216. opacity: 0.7;
  217. color: #fff;
  218. display: none;
  219. }
  220. .contract_list li .add_contract:hover span {
  221. display: block;
  222. }
  223. .add_icon {
  224. font-size: 40px;
  225. margin-bottom: 20px;
  226. }
  227. </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. Visual Studio Git本地Repos和GitHub远程Repos互操作

    近期准备将一个项目开源到GitHub中,N-Sharding,.Net版本的分库分表数据访问框架.中间遇到了点小问题,整理了一下. 1. GitHub上Create New Repos 2. 代码Ch ...

  2. redis 在 php 中的应用(string篇)

    本文为我阅读了 redis参考手册 之后结合 博友的博客 编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: string(字符串) SET SETN ...

  3. vscode中添加git

    步骤: 下载Git客户端 配置环境变量 设置vscode与Git的关联 重启 步骤一: 该网址,下载即可. https://git-scm.com/downloads 步骤二: 计算机 > 属性 ...

  4. js 对url进行某个参数的删除,并返回url

    两种情况 1对当前页面的url进行操作 function funcUrlDel(name){ var loca = window.location; var baseUrl = loca.origin ...

  5. RC4加密解密

    package util; public class RC4Util { public static String decry_RC4(byte[] data, String key) { if (d ...

  6. phpstudy-5.6.27-nts 安装redis扩展

    redis扩展安装流程 第一步: 首先直接查看一下phpinfo()的信息 找到下面两条信息 Architecture x86 PHP Extension Build API20131226,NTS, ...

  7. springboot+mybatis环境的坑和sql语句简化技巧

    1.springfox-swagger实体类无限递归 https://hacpai.com/article/1525674135818 里面有不完美的解决方案 不用动源码的解决方案也有,在swagge ...

  8. Vue-Router路由 Vue-CLI脚手架和模块化开发 之 路由常用配置与路由嵌套

    vue-router路由常用配置 1.mode:配置路由模式,默认为hash,由于URL很丑,可以修改为history,但是需要服务端的支持: 以上一篇的博文为实例: 初始时url的显示: 使用mod ...

  9. JS版剑指offer

    介绍 用JavaScript刷完了剑指offer,故总结下每道题的难度.解决关键点,详细题解代码可以点链接进去细看. 关于JS刷题的技巧可以看我之前的这篇:JS刷题总结. 剑指offer的题目在牛客网 ...

  10. vector内存回收

    1. vector所有的内存相关问题都可以归结于它的内存增长策略.vector有一个特点就是:内存空间只会增长不会减少.vector有两个函数,一个是capacity(),返回对象缓冲区(vector ...