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

news2024/11/19 6:38:15

数据表格(纯前端)

快速使用

首先需要引入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://www.coloradmin.cn/o/409282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何搭建vue框架-1

提示&#xff1a;前端新人&#xff0c;初来乍到&#xff0c;若文章写的不好大家多包涵。 文章目录前言一、vue是什么&#xff1f;二、ElementUI是什么&#xff1f;三、搭建前的准备四、安装步骤1.安装webpack2.安装vue-cli3.通过vue-cli构建项目4.启动项目5.其他总结前言 基于…

element-ui表格编辑

前言&#xff1a; 准备&#xff1a; element-uivue3vscode 实现步骤&#xff1a; 数据标定打开激活编辑保存 1. 设定需要编辑的表格单元格是否编辑标识 在请求后台表格数据时进行一个二次包装&#xff0c;如果后端已经处理则不需要在进行包装&#xff08;此处包装是否编辑…

手撕前端面试题【javascript~模板字符串、类继承、参数解析器、生成页码等】

前端的那些基本标签&#x1f353;&#x1f353;模板字符串&#x1f353;&#x1f353;类继承&#x1f353;&#x1f353;参数解析器&#x1f353;&#x1f353;生成页码&#x1f353;&#x1f353;js中哪些操作会造成内存泄漏?html页面的骨架&#xff0c;相当于人的骨头&#…

react router6.x官方DEMO

Tutorial v6.4.2 | React Router 初始化项目 import React from "react"; import ReactDOM from "react-dom/client"; import {createBrowserRouter,RouterProvider,Route, } from "react-router-dom"; import "./index.css";const …

用CSS设置颜色、背景和图像效果

&#x1f4dc;个人简介 ⭐️个人主页&#xff1a;微风洋洋&#x1f64b;‍♂️ &#x1f351;博客领域&#xff1a;编程基础&#x1f4a1;,后端&#x1f4a1;,大数据,信息安全 &#x1f345;写作风格&#xff1a;干货,干货,还是tmd的干货 &#x1f338;精选专栏&#xff1a;【J…

js数组常用方法(19种)|你会的到底有多少呢?

一、改变原数组的方法 1.push&#xff08;&#xff09; 末尾添加数据 语法: 数组名.push(数据) 作用: 就是往数组末尾添加数据 返回值: 就是这个数组的长度 //push var arr [10, 20, 30, 40] res arr.push(20) console.log(arr);//[10,20,30,40,20] console.log(res);//52. …

【Cesium】使用TLE轨道两行数计算轨道信息,并生成CZML格式文件

TLE为轨道两行数&#xff0c;简单的说是用两行数字表示轨道的相关信息&#xff0c;本文即用轨道两行数来计算任一时刻卫星的位置信息和速度信息&#xff0c;并生成CZML文件能够读取的格式 1、satellite.js库简介 简而言之&#xff0c;satellite.js库可以根据TLE轨道两行数&…

vue 项目适配笔记本1920*1080 125%缩放

前言 在台式机上开发pc端项目时&#xff0c;由于是1920*1080的分辨路和100缩放&#xff0c;看起来是没有问题。在笔记本上有问题 因为现在很多14寸的笔记本&#xff0c;出厂默认就是125%或150%的显示。导致很多时候我们的项目&#xff0c;自己开发的时候都是按照100%比例来开发…

Vue使用Serial连接串口

本来只是随手记录一下&#xff0c;发现看的人多了&#xff0c;想着还是修复一下bug吧&#xff0c;供各位看官指正 2022-10-24本次更新: 1、修复在不支持Serial的情况下&#xff0c;控制台报错 2022-09-19本次更新: 1、修复了传输数据接收分隔的情况(增加数据缓存) 2、修复串口连…

【中兴】web训练营~一文带你走进前端 | 百图制作

&#x1f4e2;作者简介&#xff1a;物联网领域创作者&#xff0c;&#x1f3c5;阿里云专家博主&#x1f3c5; &#x1f3c5;华为云享专家&#x1f3c5; ✒️个人主页&#xff1a;Choice~ &#x1f310;格言&#xff1a;可正因为难&#xff0c;才有价值&#xff01;&#x1f536…

Linux 使用Nginx部署web(vue、react)项目

前言 本文基于&#xff1a;操作系统 CentOS 7.6 使用的工具&#xff1a;Xshell7、Xftp7 1.安装所需依赖 安装gcc yum -y install gcc安装pcre、pcre-devel yum -y install pcre pcre-devel安装zlib、zlib-devel yum install -y zlib zlib-devel安装openssl、openssl-dev…

【uni-app】点击左上角返回按钮,弹出弹窗或者是携带参数返回上一页

目录 1、弹出弹窗 2、把这一页的数据带回到上一页&#xff08;获取下一页的数据 &#xff09; 3、跳转页面并携带参数&#xff0c;接受页获取参数 1、弹出弹窗 当我返回上一页的时候需要做一个判断是否需要保存 onBackPress 只支持APP和H5 但不支持小程序 &#xff0c;可以…

Java web—访问http://localhost:8080/xx/xx.jsp报404错误问题

由于我们在eclipse ee中把项目部署在web端经常会出现报404错误。 原因为&#xff1a; 404状态码是一种http状态码&#xff0c;其意思是&#xff1a; 所请求的页面不存在或已被删除。通俗的讲就是当用户输入了错误的链接时&#xff0c;返回的页面。 以下描述几种情况&#xff1a…

IDEA从零到精通(24)之lombok插件的安装与使用

文章目录作者简介引言导航概述安装插件使用小结导航热门专栏推荐作者简介 作者名&#xff1a;编程界明世隐 简介&#xff1a;CSDN博客专家&#xff0c;从事软件开发多年&#xff0c;精通Java、JavaScript&#xff0c;博主也是从零开始一步步把学习成长、深知学习和积累的重要性…

【Vue】 组件封装

目录1 组件封装1.1 全局注册1.2 局部注册1.2.1 命名1.2.2 引用组件1.2.2.1 传统写法1.2.2.2 setup1.2.2.3 easycom1.3 父子组件间的数据传递1.3.1 子组件 data() 中设置数据1.3.2 父组件通过 prop 将数据传递给子组件1.3.3 子组件不能直接修改 prop 中的值1.3.4 子组件通过 emi…

Pinia中action使用详解

actions的使用 动作相当于组件中的方法。它们可以使用actionsin 属性进行定义。 并且在pinia中的action既可以有同步函数也可以有异步函数。 在actions中可以通过this访问该仓库所有实例 export const useUsers defineStore(users,{state:()>{userData:null},actions:{a…

【SpringMVC】集成Web、MVC执行流程、数据响应、数据交互

文章目录前言一.Spring集成Web二.对于SpringMVC的理解三.MVC执行流程&#xff08;&#x1f3f3;️‍&#x1f308;&#xff09;1.组件解析2.RequestMapping四.SpringMVC数据响应页面跳转回写数据五.SpringMVC获得请求数据前言 SpringMVC确实很麻烦&#xff0c;零碎的点太多 一…

小程序自定义tabbar导航栏、动态控制tabbar功能实现(uniapp)

uniapp开发小程序&#xff0c;不同角色/已登录未登录&#xff0c;都有不一样的底部导航栏&#xff0c;这些情况下就需要自行定义tabbar&#xff0c;从而实现动态tabbar的实现。 1.首先我们需要在pages.json配置tabbar 我这里并没有开启custom(自定义)&#xff0c;不开启的话&a…

vue实现思维导图

介绍 前景&#xff1a; 仿幕布实现思维导图效果 技术实现&#xff1a;jsmind 完整代码&#xff1a;vue-jsmind 参考文章&#xff1a; 在vue中使用jsmind组织架构或思维导图 实现效果&#xff1a; 功能描述&#xff1a; 编辑、删除、插入、拖拽、展开/收起节点分布结构切换…

数字IC前端面试问题总结

本篇主要参考了 1、新芯设计(3条消息) 新芯设计的博客_CSDN博客-如何成为一名高级数字 IC 设计工程师,数字 IC 技能拓展,基于 SoC 的卷积神经网络车牌识别系统设计领域博主 2、小汪的IC自习室 (3条消息) 小汪的IC自习室的博客_CSDN博客-数字IC设计,SystemVerilog & I…