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 相关文章推荐
强制设为首页代码
Jun 19 Javascript
javascript 进度条 实现代码
Jul 30 Javascript
document.forms[].submit()使用介绍
Feb 19 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
Jun 17 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
Oct 21 Javascript
javascript常用的设计模式
Feb 09 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
浅谈webpack对样式的处理
Jan 05 Javascript
关于Vue项目跨平台运行问题的解决方法
Sep 18 Javascript
Vue发布订阅模式实现过程图解
Apr 30 Javascript
Vue实现购物车基本功能
Nov 08 Javascript
js基础语法与maven项目配置教程案例
Jul 15 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编写大型网站问题集
2007/03/06 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
jQuery功能函数详解
2015/02/01 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
vue组件name的作用小结
2018/05/23 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
Django 用户认证组件使用详解
2019/07/23 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
喷漆工的岗位职责
2014/03/17 职场文书
留守儿童工作方案
2014/06/02 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
三八妇女节慰问信
2015/02/14 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书