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 相关文章推荐
ext 同步和异步示例代码
Sep 18 Javascript
js冒泡法和数组转换成字符串示例代码
Aug 14 Javascript
jQuery实现类似标签风格的导航菜单效果代码
Aug 25 Javascript
jQuery 3.0中存在问题及解决办法
Jul 15 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
Dec 26 Javascript
javascript设计模式之模块模式学习笔记
Feb 15 Javascript
Angular2关于@angular/cli默认端口号配置的问题
Jul 15 Javascript
JS对象与json字符串相互转换实现方法示例
Jun 14 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
vue中v-text / v-html使用实例代码详解
Apr 02 Javascript
vue中添加与删除关键字搜索功能
Oct 12 Javascript
vue 通过base64实现图片下载功能
Dec 19 Vue.js
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批量采集下载美女图片的实现代码
2013/06/03 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
Python正规则表达式学习指南
2016/08/02 Python
Python用模块pytz来转换时区
2016/08/19 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
Pandas分组与排序的实现
2019/07/23 Python
如何通过python实现全排列
2020/02/11 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
同学会主持词
2014/03/18 职场文书
安全目标责任书
2014/07/22 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
实习报告范文
2019/07/30 职场文书
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers