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技巧大放送 学习jquery的朋友可以看下
Oct 14 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
Oct 22 Javascript
js验证整数加保留小数点的简单实例
Dec 02 Javascript
Javascript基础教程之argument 详解
Jan 18 Javascript
jquery实现右键菜单插件
Mar 29 Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 Javascript
vue-cli webpack2项目打包优化分享
Feb 07 Javascript
Vuex实现计数器以及列表展示效果
Mar 10 Javascript
通过封装scroll.js 获取滚动条的值
Jul 13 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
Aug 10 Javascript
小程序Scroll-view上拉滚动刷新数据
Jun 21 Javascript
vue+flask实现视频合成功能(拖拽上传)
Mar 04 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
2019十大人气国漫
2020/03/13 国漫
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
php页码形式分页函数支持静态化地址及ajax分页
2014/03/28 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
2012/06/20 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
vuex实现购物车功能
2020/06/28 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
Python的面向对象思想分析
2015/01/14 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
Python 忽略warning的输出方法
2018/10/18 Python
使用python求解二次规划的问题
2020/02/29 Python
python装饰器代码深入讲解
2021/03/01 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
电信营业员自我评价分享
2014/01/17 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
优秀教师申报材料
2014/12/16 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
男人帮观后感
2015/06/18 职场文书
追悼会答谢词范文
2015/09/29 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android
sql server 累计求和实现代码
2022/02/28 SQL Server