最近写了一个批量删除功能,遇到了不少坑,特此记录一下

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('确定要删除选中的文件吗"htmlcode">
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);
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?