Layui学习总结-批量删除功能

Layui学习总结-批量删除功能

一、思路设计

大家也可以去参考我之前写的第一篇关于Layui批量删除的博客

解决了上一篇文章中留下的bug,进一步完善这个功能
上一篇文章地址如下:
https://blog.csdn.net/zukxu123/article/details/101165761

该功能实现的核心代码如下:
就是获取所有选中的行的数据,遍历获取id值传给后端进行删除操作,获得返回结果之后重新渲染当前页面即可

 table.on('toolbar(table)', function (obj) {
                var checkStatus = table.checkStatus(obj.config.id);
                switch (obj.event) {
                    case 'delAll':
                        //定义数组存放批量删除的行的id
                        var listId = [];
                        //获得所有选中行的数据
                        var datas = checkStatus.data;
                        //进行遍历所有选中行数据,拿出每一行的id存储到数组中
                        $.each(datas, function (i, data) {
                            listId.push(data.id)
                        });
                   }
              });

二、代码实现

1、html代码

所有代码如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <title>批量删除</title>
  <link rel="stylesheet" href="layui/css/layui.css">
</head>
<body>
<div class="layui-fluid">
  <div class="layui-card">
    <div class="layui-card-header layui-bg-green">
      <div class="layui-row">
        <div class="layui-col-sm3">
          <span class="text-size-middle">批量删除</span>
        </div>
      </div>

    </div>
    <div class="layui-card-body">
      <table id="table" lay-filter="table"></table>
    </div>
  </div>
</div>

<!-- toolbar -->
<script type=" text/html" id="delAllToolbar">
<a class="layui-btn" lay-event="add" id="addAll"><i class="layui-icon layui-icon-upload"></i>批量添加</a>
<a class="layui-btn layui-btn-danger" lay-event="delAll">批量删除</a>
</script>
<!-- bar -->
<script type="text/html" id="actionBar">
<!--<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>-->
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/layui/2.5.6/layui.all.js"></script>
<script>
$(function() {
  layui.use(['table', 'form', 'upload'], function() {
    const $ = layui.$,
      table = layui.table,
      upload = layui.upload,
      layer = layui.layer
    table.render({
      elem: '#table',
      //url: '/user/list',
      //method: 'get',
      url: 'info.json',
      toolbar: '#delAllToolbar',
      height: 575,
      cols: [
        [{
          type: 'checkbox',
          fixed: 'left'
        }, {
          field: 'id',
          title: '编号',
          sort: 'true'
        }, {
          field: 'name',
          title: '用户名',
          edit: 'text',
          width: 120
        }, {
          field: 'age',
          title: '年龄',
          sort: true
        }, {
          field: 'email',
          title: '邮箱',
          edit: 'text'
        }, {
          field: 'birthday',
          title: '生日',
          sort: true
        }, {
          field: 'details',
          title: '简介',
        }, {
          fixed: 'right',
          title: '操作',
          toolbar: '#actionBar',
          width: 150
        }]
      ],
      text: {
        none: '暂无相关数据'
      },
      page: true
    })

    upload.render({
      elem: '#addAll' //绑定元素
    })
    //头工具栏事件
    table.on('toolbar(table)', function(obj) {
      //获取选中的数据
      let checkStatus = table.checkStatus(obj.config.id)
      console.log(checkStatus)
      switch (obj.event) {
        case 'delAll':
          //定义数组存放批量删除的行的id
          let listId = []
          //获得所有选中行的数据
          const dataList = checkStatus.data
          console.log(dataList)
          //进行遍历所有选中行数据,拿出每一行的id存储到数组中
          $.each(dataList, function(i, data) {
            listId.push(data.id)
          })
          if (listId.length <= 0) {
            layer.msg('请选择要删除的行', {
              icon: 2
            })
          } else {
            layer.confirm('真的删除行么', function(index) {
              //向服务端发送删除指令
              layer.alert('向服务端发送删除指令')
              /* $.ajax({
                 url: '/user/delAll',
                 type: 'delete',
                 contentType: 'application/json;charset=UTF-8',
                 dataType: 'json',
                 data: JSON.stringify({
                   'ids': listId
                 }),
                 success: function(res) {
                   console.log(res)
                   if (res.code !== 200) {
                     table.reload('delAll', {
                       page: {
                         curr: $('.layui-laypage-em').next().html() //重新从当前页开始
                       }
                     })
                   }
                 }
               })*/
              console.log(listId)
              layer.close(index)
            })
          }
          break
        case 'addAll':
          const uploadInst = upload.render({
            url: '/user/addAll', //TODO 添加批量用户接口
            method: 'post',
            exts: 'xlsx|xls',//只允许上传Excel文件
            done: function(res) {
              layui.msg(res)
              table.reload('delAll', {
                page: {
                  curr: 1 //重新从第 1 页开始
                }
              })
            },
            error: function() {
              //请求异常回调
              layer.msg('error')
            }
          })
          break
      }
    })

    //监听单元格编辑
    table.on('edit(table)', function(obj) { //注:edit是固定事件名,test是table原始容器的属性 lay-filter="对应的值"
      console.log(obj.value) //得到修改后的值
      console.log(obj.field) //当前编辑的字段名
      console.log(obj.data) //所在行的所有相关数据
      $.ajax({
        url: '/user/updateUser',
        type: 'put',
        contentType: 'application/json;charset=UTF-8',
        dataType: 'json',
        data: JSON.stringify(obj.data),
        success: function(res) {
          console.log(res)
          if (res.code !== 200) {
            layer.msg(res.msg, {
              icon: 1
            })
          } else {
            layer.msg(res.msg, {
              icon: 2
            })
          }
        }
      })
    })

    //监听行工具条
    table.on('tool(table)', function(obj) { //注:tool 是工具条事件名,delAll 是 table 原始容器的属性 lay-filter="对应的值"
      const data = obj.data.id //获得当前行数据
      const layEvent = obj.event //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
      const tr = obj.tr //获得当前行 tr 的 DOM 对象(如果有的话)

      if (layEvent === 'del') { //删除
        layer.confirm('真的删除行么', function(index) {
          /*     $.ajax({
                 url: '/user/delUser',
                 type: 'delete',
                 data: {
                   'id': data
                 },
                 success: function(res) {
                   console.log(res)
                   if (res.code !== 200) {
                     obj.del() //删除对应行(tr)的DOM结构,并更新缓存
                   }
                 }
               })*/
          console.log(obj)
          obj.del() //删除对应行(tr)的DOM结构,并更新缓存
          layer.close(index)
          //向服务端发送删除指令
        })
      }
    })
  }) //use
}) //全局
</script>
</body>
</html>

2、Json模拟数据

模拟数据文件如下

  • layui对于表格的返回数据格式有着严格的要求
{
  "code": "0",
  "msg": "",
  "count": "30",
  "data": [
    {
      "id": 935,
      "name": "江秀兰",
      "age": 4147017943049006,
      "birthday": "2014-03-16",
      "email": "m.idssl@rpbzxwrpky.cn",
      "details": "宋勇"
    },
    {
      "id": 970,
      "name": "毛敏",
      "age": 5116280338762030,
      "birthday": "2005-03-18",
      "email": "k.gohawnq@qjfetr.mx",
      "details": "贾明"
    },
    {
      "id": 369,
      "name": "孙娜",
      "age": 2763152458425208,
      "birthday": "1998-03-02",
      "email": "l.qit@rjhxeh.cd",
      "details": "杨平"
    },
    {
      "id": 13,
      "name": "曹伟",
      "age": 1356633505556362,
      "birthday": "1978-05-19",
      "email": "o.lwwbwkldet@jqgjfju.pg",
      "details": "崔平"
    },
    {
      "id": 320,
      "name": "史强",
      "age": 4886544367125658,
      "birthday": "1997-11-26",
      "email": "s.ufyr@xoeidymzv.bh",
      "details": "康敏"
    },
    {
      "id": 857,
      "name": "魏明",
      "age": 1449925015594196,
      "birthday": "1993-09-18",
      "email": "w.qstjngqsdu@jvteksoh.tv",
      "details": "江秀兰"
    },
    {
      "id": 474,
      "name": "邹静",
      "age": 88275121412674,
      "birthday": "1976-07-11",
      "email": "c.enymriu@ytgj.aw",
      "details": "石艳"
    },
    {
      "id": 710,
      "name": "龚静",
      "age": 4284522719231460,
      "birthday": "1976-08-21",
      "email": "o.tltwsvwi@xjtuubpe.sr",
      "details": "夏娟"
    },
    {
      "id": 957,
      "name": "蒋军",
      "age": 1316806026130408,
      "birthday": "2017-10-26",
      "email": "z.wfeu@optqumd.ke",
      "details": "石芳"
    },
    {
      "id": 583,
      "name": "阎伟",
      "age": 2813604300486156,
      "birthday": "1991-11-02",
      "email": "r.hpdl@kqvr.tf",
      "details": "姚刚"
    },
    {
      "id": 824,
      "name": "顾静",
      "age": 5189316257526176,
      "birthday": "1976-02-04",
      "email": "r.huifmcenxs@ltgkb.sn",
      "details": "白军"
    },
    {
      "id": 532,
      "name": "周超",
      "age": 5712563662333894,
      "birthday": "2015-06-07",
      "email": "v.mvri@sgjlwj.sl",
      "details": "秦桂英"
    }
  ]
}

3、实现效果

全选
部分选择
删除
在这里插入图片描述

还望大家多多指教

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值