当前位置:首页 » 《随便一记》 » 正文

layui数据表格的使用(前端和后端)

20 人参与  2023年04月04日 10:48  分类 : 《随便一记》  评论

点击全文阅读


数据表格(纯前端)

快速使用

首先需要引入layui的css和js

<link rel="stylesheet" href="../static/layui/css/layui.css"><script src="../static/layui/layui.js" charset="utf-8"></script>

然后再定义一个table标签,并写入js代码即可快速使用

<table id="demo"></table><script>    layui.use('table',function () {        var table = layui.table;        table.render({            elem: "#demo",//绑定table的id            url: "../static/layui/user.json",//数据接口            cols: [[                {field: 'aa', type: 'numbers'},                {field: 'bb', type: 'checkbox'},  //  开启复选框                {field: 'id', title: '用户编号', sort: true, width: 120, hide: true},// 隐藏该列                {field: 'username', title: '用户名', width: 100, edit: 'text'},                {field: 'sex', title: '性别', sort: true, width: 80},                {field: 'city', title: '城市', sort: true, width: 80},                {field: 'sign', title: '签名', width: 80, edit: 'text'}            ]],            page: true //开启分页        });    })</script>

数据接口的数据格式为:code必须为0
在这里插入图片描述

最后的效果

在这里插入图片描述

头部工具栏

先定义一个script代码

<script type="text/html" id="toolbar">    <div class="layui-btn-container">        <button class="layui-btn layui-btn-sm" lay-event="getCheckData">            获取选中行数据        </button>        <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">            获取选中数目        </button>        <button class="layui-btn layui-btn-sm" lay-event="isAll">            验证是否全选        </button>    </div></script>

lay-event就是后面绑定事件的id

然后在table.render里设置绑定id

        table.render({            elem: "#demo",//绑定table的id            url: "../static/layui/user.json",//数据接口            cols: [[                {field: 'aa', type: 'numbers'},                {field: 'bb', type: 'checkbox'},  //  开启复选框                {field: 'id', title: '用户编号', sort: true, width: 120, hide: true},                {field: 'username', title: '用户名', width: 100, edit: 'text'},                {field: 'sex', title: '性别', sort: true, width: 80},                {field: 'city', title: '城市', sort: true, width: 80},                {field: 'sign', title: '签名', width: 80, edit: 'text'}            ]],            page: true,//开启分页            // 设置表头工具栏            toolbar:"#toolbar"        });

效果

在这里插入图片描述

不过这三个按钮点击了都没反应,这是因为我们还没有绑定事件

这时再在table上指定一个lay-filter用于下面绑定

<table id="demo" lay-filter="test"></table>

然后再layui.use中编写事件代码(可以通过console.log(obj)在控制台打印出obj数据查看其中的数据)

 //头监听事件        table.on('toolbar(test)',function (obj){            //console.log(obj);            // 获取当前表格被选中的记录对象,返回数据            var checkStatus = table.checkStatus(obj.config.id);            console.log(checkStatus);            // 获取事件名,执行对应的代码            var eventName = obj.event;            switch (eventName) {                case "getCheckData":                    // 获取被选中的数组                    var arr = checkStatus.data;                    // 将数组解析成字符串                    layer.alert(JSON.stringify(arr));                    break;                case "getCheckLength":                    var arr = checkStatus.data;                    layer.msg("选中了"+arr.length+"条记录");                    break;                case "isAll":                    //通过isall属性判断是否全选                    var flag = checkStatus.isAll;                    var str = flag?"全选":"未全选";                    layer.msg(str);                    break;            }        });

最后的效果就是点击后上述三个选项会完成各自的功能

表格工具栏

先定义一个script代码

       <!-- 表格工具栏-->       <script type="text/html" id="barDemo">            <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>

然后再cols中增加一列来绑定script代码

// 设置表格工具栏{field: '操作',toolbar:'#barDemo'}

效果

在这里插入图片描述

然后再layui.use中编写事件代码

        // 监听行工具栏事件        table.on('tool(test)',function (obj) {            //得到当前操作行的相关信息            var tr = obj.data;            console.log(tr);            // 得到事件名,判断执行            var eventName = obj.event;            // 删除            if (eventName == 'del'){                // 确认框                layer.confirm('确认删除吗?',function (index) {                    // 删除指定tr                    obj.del();                    //关闭弹出层,index是当前弹出层的的下标                    layer.close(index);                });            }else if (eventName=='edit'){//编辑                //输出框                layer.prompt({                    // 表单元素的类型 0=文本框 1=密码框 2=文本域                    formType:0,                    value:tr.username//设置输入框的值                },function (value,index) {                    //修改指定单元格的值                    // value表示输入的值                    obj.update({                        username:value                    });                    //关闭弹出层                    layer.close(index);                });            }        });

分页

在后端把所有的数据取出来,然后再在前端进行分页

通过在table.render({})中的parseData:function (res) {)方法来对取出的数据进行分页

parseData:function (res) {                var result;                console.log(res);                console.log(this.page.curr);//this.page.curr为当前的页码                if(this.page.curr){                    //若为第二页 则curr为2 页面显示的数据就是从res.data集合数组里的 (2-1)*limit(10)=10 到 limit(10)*2=20的数据                    result = res.data.slice                    (this.limit*(this.page.curr-1),this.limit*this.page.curr);                    // string.slice(start, end),表示截取从start下标到end下标的字符串(左闭右开)                }                else {                    // 一开始就是第一页 则就是 显示的数据就是从res.data集合数组里的0到limit(10)中                    result = res.data.slice(0, this.limit);                }    // 最后返回规定的数据格式                 return {                    "code": res.code, //解析接口状态                    "msg": res.msg, //解析提示文本                    "count": res.count, //解析数据长度                    "data": result //解析数据列表                };            },limit:5,limits:[3,5,10]                

最后的效果

在这里插入图片描述

在这里插入图片描述

如果选择要在后端进行分页的话,要注意layui会在你给的数据接口后面自动传入一个page(当前是第几页)和limit(每页的限制)参数,在后台接收了这两个参数,根据参数编写对应的后台代码

数据表格(java后端)

采用的是前端分页,通过java在后端取出所有数据(把url的地址改成后端的就行了)然后传给前端进行分页

table.render里的规范数据参数

parseData:function (res) {// 对从后端获得的数据进行规范,最后返回四个键值对                    var result;                    // console.log(res);                    // console.log(this.limit);                    if(this.page.curr){                        //若为第二页 则curr为2 页面显示的数据就是从res.data集合数组里的                         //(2-1)*limit(10)=10 到 limit(10)*2=20的数据                                                //slice()跟java的substring类似,slice是将键值对的键根据索引                        //以左闭右开的形式截取                        result = res.data.slice                        (this.limit*(this.page.curr-1),this.limit*this.page.curr);                    }                    else {                        // 一开始就是第一页 则就是 显示的数据就是从res.data集合数组里的                        //0到limit(10)中                        result = res.data.slice(0, this.limit);                    }                    return {                        "code": res.code, //解析接口状态                        "msg": res.msg, //解析提示文本                        "count": res.count, //解析数据长度                        "data": result //解析数据列表                    };

1、定义一个表头工具栏

<!-- 表头工具栏(新增)--><script type="text/html" id="addbook">    <div class="layui-btn-container">        <button class="layui-btn layui-btn-sm" lay-event="add">            新增        </button>    </div></script>

2、绑定id

lay-event是后面要绑定事件的id

然后在table.render里设置绑定id

toolbar: "#addbook"//绑定表头工具栏的id

在这里插入图片描述

3、编写javascript代码

在layui.use里编写对应的新增事件

        // 表头工具栏(新增)        table.on('toolbar(bookdata)',function (obj) {           console.log(obj)            var eventName = obj.event            // 新增            if (eventName=='add'){                layer.open({                    type:1,                    title:"新增",                    content:layui.$('#addone'),                    btn:['确定','取消'],                    yes:function(index, layero){                        // 取出输入框的内容                        var bn = layui.$('#bName').val()                        var bc = layui.$('#bCount').val()                        var bd = layui.$('#bDetail').val()                        console.log(bn)                        console.log(bc)                        console.log(bd)                        // 如果有一项数据未填,则弹出提示框                        if (bn==''||bc==''||bd==''){                            layer.open({                                title: '<div style="color:red">错误</div>'                                ,content: '请填写每个数据'                            });                            // 如果书籍数量不是整数,则弹出提示框                        } else if (bc.length!=String(parseInt(bc)).length||!Number.isInteger(parseInt(bc))){                            layer.open({                                title: '<div style="color:red">错误</div>'                                ,content: '请正确填写数量(数量应为整数)'                            });                        } else{                            //向服务端发送新增指令                            // '/book/addbook'                            layui.$.ajax({                                type: 'post',                                url: '/book/addbook',                                data: {'bookName':bn,                                    'bookCounts':bc,                                    'detail':bd},                                success:function (msg) {                                }                            })                            layer.open({                                title: '<div style="color:#44ff00">完成</div>'                                ,content: '增加成功'                            });                            layer.close(index)                        }                    }                })            }        });

上面layer.open里content绑定的id

<!--新增表格的具体内容,display: none表示隐藏(编辑和新增共用的表格)--><div style="display: none" id="addone">    <form class="layui-form" action="">        <div class="layui-form-item">            <label class="layui-form-label">书籍名称</label>            <div class="layui-input-block">                <input id="bName" type="text" name="bookName" lay-verify="title" autocomplete="off" placeholder="请输入书名" class="layui-input" required>            </div>        </div>        <div class="layui-form-item">            <label class="layui-form-label">书籍数量</label>            <div class="layui-input-block">                <input id="bCount" type="text" name="bookCounts" lay-verify="title" autocomplete="off" placeholder="请输入数量" class="layui-input">            </div>        </div>        <div class="layui-form-item">            <label class="layui-form-label">书籍详情</label>            <div class="layui-input-block">                <input id="bDetail" type="text" name="detail" lay-verify="title" autocomplete="off" placeholder="请输入备注" class="layui-input">            </div>        </div>    </form></div>

4、后端java对应的代码

后端新增的java代码

    // 新增一本书籍    @RequestMapping("/addbook")    @ResponseBody    public String addbook(Books books){        System.out.println("进入了addbook方法"+books);        mapper.insertBook(books);        return "ok";    }

5、效果

点击新增后,弹出界面,这里对数量和三个数据都不为空作了判断(数据不能为空,数量必须是整数)

在这里插入图片描述

如果数据为空,会弹出提示框

在这里插入图片描述

如果数据不为整数,会弹出提示框

在这里插入图片描述

删+改

1、先定义一个表格工具栏

<!-- 表格工具栏(编辑和删除)--><script type="text/html" id="bookbar">    <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>

2、绑定

然后在table.render里的cols参数中新增一栏绑定表格工具栏

// 设置表格工具栏{field: '操作',toolbar:'#bookbar'}

3、编写javascript代码

在layui.use里编写对应的删除和编辑事件,弹出层与上面新增共用一个界面

        //表格工具栏(编辑和删除)        table.on('tool(bookdata)',function (obj) {            var eventName = obj.event;            var bookid = obj.data.bookID;            console.log(bookid)            //console.log(obj);            console.log(eventName)            // 删除            if (eventName == 'del'){                // 确认框                layer.confirm('确认删除吗?',function (index) {                    // 前端删除指定tr                    obj.del()                    //关闭弹出层,index是当前弹出层的的下标                    layer.close(index);                    //向服务端发送删除指令                    // '/book/delbook'                    layui.$.ajax({                        type: 'get',                        url: '/book/delbook',                        data: {'id':bookid},                        success:function () {                            console.log('ok')                        }                    })                });            }else if (eventName=='edit'){// 修改                // 将所要编辑的内容先显示出来                layui.$('#bName').val(obj.data.bookName)                layui.$('#bCount').val(obj.data.bookCounts)                layui.$('#bDetail').val(obj.data.detail)                layer.open({                    type:1,                    title:"编辑",                    content:layui.$('#addone'),                    btn:['确定','取消'],                    yes:function(index, layero){                        // 取出输入框的内容                        var bn = layui.$('#bName').val()                        var bc = layui.$('#bCount').val()                        var bd = layui.$('#bDetail').val()                        console.log(bn)                        console.log(bc)                        console.log(bd)                        // 如果有一项数据未填,则弹出提示框                        if (bn==''||bc==''||bd==''){                            layer.open({                                title: '<div style="color:red">错误</div>'                                ,content: '请填写每个数据'                            });                            // 如果书籍数量不是整数,则弹出提示框                        } else if (bc.length!=String(parseInt(bc)).length||!Number.isInteger(parseInt(bc))){                            layer.open({                                title: '<div style="color:red">错误</div>'                                ,content: '请正确填写数量(数量应为整数)'                            });                        } else{                            //向服务端发送修改指令                            // '/book/updatebook'                            layui.$.ajax({                                type: 'post',                                url: '/book/updatebook',                                data: {'bookID':bookid,                                    'bookName':bn,                                    'bookCounts':bc,                                    'detail':bd},                                success:function (msg) {                                        console.log(msg)                                }                            })                            layer.open({                                title: '<div style="color:#44ff00">完成</div>'                                ,content: '修改成功'                            });                            // 前端更新数据                            obj.update({                                bookID:bookid,                                bookName:bn,                                bookCounts:bc,                                detail:bd                            })                           layer.close(index)                        }                    }                })            }        });

4、后端java对应的代码

    // 删除书籍    @RequestMapping("/delbook")    @ResponseBody    public String delbook( int id){        System.out.println("进入了delbook方法"+id);        int i = mapper.deleteBookById(id);        return " "+i;    }    //修改书籍    @RequestMapping("/updatebook")    @ResponseBody    public String updatebook(Books books){        System.out.println("进入了updatebook方法"+books);        int i = mapper.updateBook(books);        return ""+i;    }

6、效果

点击删除,出现提示框

在这里插入图片描述

点击编辑,会把该行的数据全都显示出来

在这里插入图片描述

修改后,点击确定会和上面的新增一样对数据进行判断(都不能为空,数量必须为整数)


点击全文阅读


本文链接:http://zhangshiyu.com/post/58291.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1