vue+element的表格实现批量删除功能示例代码


Posted in Javascript onAugust 17, 2018

最近写了一个批量删除功能,遇到了不少坑,特此记录一下

vue+element的表格实现批量删除功能示例代码

表格的代码如下

<el-table @row-click="handleCurrentChange" @selection-change="selsChange" ref="table" :data="pageData" stripe :default-sort="{prop: 'createAt', order: 'descending'}" @sort-change="sortChange">

如图所示,表格最前面有一个复选框

代码很简单

<el-table-column type="selection" width="65"></el-table-column>

删除按钮的代码如下:

<el-button v-show="mode == 'list'" class="small" type="warning" size="small" @click="removeBatch(sels)" :disabled="this.sels.length === 0||this.disabled">批量删除</el-button>

data的代码如下:

data() {
  return {
   pageSize: 12,
   total: 0,
   pageData: [],
   query: '',
   sort: 'createAt',
   order: 'descending',
   defaultSnap: srcFallback,
   accept: '',
   ws: null,
   sels: [],//选中显示的值
   disabled:true
  };
 }

表格中的视频数据来自于pageData,每个视频都是一个对象,对象的status属性等于waiting或者有progress属性时,此视频正在转码,或者正在准备转码,不允许删除, 批量删除就是把被选中的行添加到sels这个数组中,把数组里的每一个对象的id属性组成一个数组,发送给后端,此外,正在转码的视频不允许删除,此时按钮也是禁用状态

根据官方文档,@selection-change="selsChange"是复选框选择改变时触发的事件

在methods中添加一个方法

selsChange(sels) { 
    //被选中的行组成数组 
    this.sels = sels;
    //遍历被选中行数所组成的数组
    for(let element of this.sels){
    //如果视频正在转码或者等待转码,禁用按钮,结束方法
     if(element.status == 'waiting'||element.progress){
      this.disabled = true;
      return;
     }
       //如果没有视频正在转码或者等待转码,按钮可用
      this.disabled = false;
    }
  }

把请求发送给后端,代码如下:

removeBatch(rows){
   var ids = [];
   rows.forEach(element =>{
    ids.push(element.id)
   })
   this.$confirm('确定要删除选中的文件吗?','提示').then(() =>{
    $.post('/vod/removeBatch',{
     ids:ids
    }).then(dara =>{
     this.updateData();
    })
   }).catch(()=>{});
  }

前端已经排除正在转码的视频了,后端是否能根据前端传来的数据,直接删除视频呢?

答案是不可以,后端一样要做验证

思路是,拿到前端传来的数据后,遍历数组两次,第一次如果发现有正在转码的视频,抛出异常,不会进入第二次循环,第二次循环才根据id删除视频

代码如下

r.post('/removeBatch',async(req,res) => {
  var ids = req.body.ids;
  var files = utils.vod.get("files");
  //第一次循环,如果有正在转码的文件,就抛出异常,结束循环
  for(let id of ids){
    var transing = trans.agent.transing[id];
    if(transing){
      throw new Error('正在转码的文件无法删除');
      return;
    }
  }
  //如果没有转码的文件,进入第二次循环
  for(let id of ids){
    var files = utils.vod.get("files");
    var row = files.find({id: id}).cloneDeep().value();
    //如果没有要删除的,就结束
    if(!row) {
      res.sendStatus(200);
      return;
    }
    var dir = path.dirname(row.path);
    var name = path.basename(row.path, path.extname(row.path));
    var transDir = path.resolve(dir, name);
    //删除源文件
    if(fs.existsSync(row.path)){
      fs.removeSync(row.path);
    }
    //删除转码文件
    if(fs.existsSync(transDir)){
      fs.removeSync(transDir);
    }
    //删除json文件记录
    files.remove({id: id}).write();
  }
  res.sendStatus(200);
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 页面载入进度条实现代码
Feb 08 Javascript
jQuery学习笔记 更改jQuery对象
Sep 19 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
Jan 26 Javascript
12306验证码破解思路分享
Mar 25 Javascript
jquery获取节点名称
Apr 26 Javascript
Node.js刷新session过期时间的实现方法推荐
May 18 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
Aug 29 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
Jan 04 Javascript
echarts3 使用总结(绘制各种图表,地图)
Jan 05 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
Aug 20 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
Jul 30 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
Aug 17 #Javascript
浅析vue给不同环境配置不同打包命令
Aug 17 #Javascript
React中使用async validator进行表单验证的实例代码
Aug 17 #Javascript
JavaScript实现构造json数组的方法分析
Aug 17 #Javascript
layer弹出层父子页面事件相互调用方法
Aug 17 #Javascript
layer.open 按钮的点击事件关闭方法
Aug 17 #Javascript
layer弹出层全屏及关闭方法
Aug 17 #Javascript
You might like
虫族 Zerg 历史背景
2020/03/14 星际争霸
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
javascript基本语法
2016/05/31 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
python中while循环语句用法简单实例
2015/05/07 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
Python操作csv文件实例详解
2017/07/31 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
django admin组件使用方法详解
2019/07/19 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
华为慧通面试题
2012/09/11 面试题
银行实习自我鉴定
2013/10/12 职场文书
经典安踏广告词
2014/03/21 职场文书
奠基仪式策划方案
2014/05/15 职场文书
植树造林的宣传标语
2014/06/23 职场文书
森林防火标语
2014/06/23 职场文书
小学爱国卫生月活动总结
2014/06/30 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android