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 相关文章推荐
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
Jun 02 Javascript
document.open() 与 document.write()的区别
Aug 13 Javascript
JavaScript 提升运行速度之循环篇 译文
Aug 15 Javascript
动态创建样式表在各浏览器中的差异测试代码
Sep 13 Javascript
jQuery 阴影插件代码分享
Jan 09 Javascript
Jquery刷新页面背景图片随机变换的实现方法
Mar 15 Javascript
jQuery时间日期三级联动(推荐)
Nov 27 Javascript
webpack构建的详细流程探底
Jan 08 Javascript
微信小程序下拉框组件使用方法详解
Dec 28 Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 Javascript
layUI实现列表查询功能
Jul 27 Javascript
手写实现JS中的new
Nov 07 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查看session内容的函数
2008/08/27 PHP
PHP面向对象法则
2012/02/23 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
jquery 最简单的属性菜单
2009/10/08 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
jQuery的学习步骤
2011/02/23 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
2018/07/04 Python
Django 用户认证组件使用详解
2019/07/23 Python
为什么说python适合写爬虫
2020/06/11 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
洗发露广告词
2014/03/14 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
三行辞职书范文
2015/02/26 职场文书