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 相关文章推荐
仿163填写邮件地址自动显示下拉(无优化)
Nov 05 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
Dec 29 Javascript
js原型链原理看图说明
Jul 07 Javascript
Eclipse去除js(JavaScript)验证错误
Feb 11 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
Apr 04 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
Apr 23 Javascript
JavaScript设计模式初探
Jan 07 Javascript
AngularJS表达式讲解及示例代码
Aug 16 Javascript
jQuery属性选择器用法示例
Sep 09 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
详解Vue实战指南之依赖注入(provide/inject)
Nov 13 Javascript
bootstrap中的导航条实例代码详解
May 20 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
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
js href的用法
2010/05/13 Javascript
document.getElementById介绍
2011/09/13 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
js实现小时钟效果
2020/03/25 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
通过Python来使用七牛云存储的方法详解
2015/08/07 Python
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
python生成ppt的方法
2018/06/07 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
村委会主任先进事迹
2014/01/15 职场文书
师德师风自查材料
2014/10/14 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
撤诉申请怎么写
2015/05/19 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫