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的ajax使用场景(c#)
Dec 03 Javascript
javascript判断chrome浏览器的方法
Mar 26 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
Sep 15 Javascript
jQuery插件jquery-barcode实现条码打印的方法
Nov 25 Javascript
第三章之Bootstrap 表格与按钮功能
Apr 25 Javascript
jQuery EasyUI之验证框validatebox实例详解
Apr 10 jQuery
js仿微信抢红包功能
Sep 25 Javascript
详解webpack模块化管理和打包工具
Apr 21 Javascript
JavaScript作用域链实例详解
Jan 21 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
Jul 10 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
Mar 05 Javascript
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 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
神族 PROTOSS 概述
2020/03/14 星际争霸
第五节 克隆 [5]
2006/10/09 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
斜45度寻路实现函数
2009/08/20 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
微信小程序 自定义消息提示框
2017/08/06 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
python生成带有表格的图片实例
2019/02/03 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
ajax是什么及其工作原理
2012/02/08 面试题
信息管理专业学生自荐信格式
2013/09/22 职场文书
4s客服专员岗位职责
2013/12/01 职场文书
小学生环保标语
2014/06/13 职场文书
党校学习心得体会范文
2014/09/09 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers