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 相关文章推荐
学习ExtJS Column布局
Oct 08 Javascript
jQuery checkbox全选/取消全选实现代码
Nov 14 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
Dec 02 Javascript
浅析javascript 定时器
Dec 23 Javascript
JavaScript与ActionScript3两者的同性与差异性
Sep 22 Javascript
jQuery-mobile事件监听与用法详解
Nov 23 Javascript
jquery实现下拉框左右选择功能
Feb 21 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
setTimeout时间设置为0详细解析
Mar 13 Javascript
jQuery动态移除与增加onclick属性的方法详解
Jun 07 jQuery
Vue 实现前端权限控制的示例代码
Jul 09 Javascript
openlayers4实现点动态扩散
Aug 17 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
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
javascript读取RSS数据
2007/01/20 Javascript
js 深拷贝函数
2008/12/04 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
记录Django开发心得
2014/07/16 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
python之拟合的实现
2019/07/19 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
简单了解Python write writelines区别
2020/02/27 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
keras打印loss对权重的导数方式
2020/06/10 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
电大自我鉴定
2013/10/27 职场文书
高中生毕业学习总结的自我评价
2013/11/14 职场文书
财务会计人员岗位职责
2013/11/30 职场文书
房屋改造计划书
2014/01/10 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
导航工程专业自荐信
2014/09/02 职场文书
协议书格式模板
2016/03/24 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书