layui之动态数据表格

本文档展示了如何处理一个返回的非标准JSON格式数据以适应layui数据动态表格的需求。代码中通过ajax获取数据,然后利用layui的table模块进行数据展示。在表格中实现了查询、编辑和删除功能,同时对数据进行了处理以适应layui的表格渲染。遇到的问题是返回的JSON格式不匹配layui默认格式,需要在前端进行数据转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

layui数据动态表格,如果返回的json格式是默认格式就好了,从api上直接copy下来用就可以,可是我这里返回的json格式如下:

  1. {
  2.     "code": 200,
  3.     "content": {
  4.         "currentPage": 1,
  5.         "hasNext": true,
  6.         "hasPrev": false,
  7.         "pageSize": 3,
  8.         "records": [
  9.             {
  10.                 "accountno": "009",
  11.                 "id": "030AC067-8953-48A9-9A11-66E1D60500F5",
  12.                 "idcard": "321654",
  13.                 "name": "cbb",
  14.                 "password": "123456",
  15.                 "roleid": null,
  16.                 "status": true
  17.             },
  18.             {
  19.                 "accountno": "011",
  20.                 "id": "031AC067-8953-48A9-9A11-66E1D60500F5",
  21.                 "idcard": "362201199311295412",
  22.                 "name": "gyw",
  23.                 "password": "123456321",
  24.                 "roleid": null,
  25.                 "status": true
  26.             },
  27.             {
  28.                 "accountno": "005",
  29.                 "id": "032AC067-8953-48A9-9A11-66E1D60500F5",
  30.                 "idcard": "362201199311295412",
  31.                 "name": "大阳",
  32.                 "password": "123456",
  33.                 "roleid": null,
  34.                 "status": true
  35.             }
  36.         ],
  37.         "totalPages": 5,
  38.         "totalRecords": 13
  39.     },
  40.     "message": null,
  41.     "success": true
  42. }

代码直接套弄不进去,所以的先处理一下;基本步骤是ajax,后再进行数据处理,本来想自定义格式的,但是没有成功,如果有兴趣的话可以自行研究。

下面上代码了:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.   <meta charset="utf-8">
  5.   <title>layui</title>
  6.   <meta name="renderer" content="webkit">
  7.   <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  8.   <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  9.   
  10.   <link rel="stylesheet" href="/layui/css/layui.css"  media="all">
  11.   <script src="/jquery/jquery-3.2.1.js" ></script>
  12.   <script src="/layui/layui.js" charset="utf-8"></script>
  13. </head>
  14. <body>
  15.      <h1>layui表格</h1>
  16.      <div>
  17.              <!-- 查询栏 -->
  18.         <form class="search-form layui-form">
  19.             <div class="layui-form-item layui-inline">
  20.                 <label class="layui-form-label">员工名称</label>
  21.                 <input class="layui-input" name="name" type="text" style="width: 165px;">
  22.             </div>
  23.             <div class="layui-form-item layui-inline search">
  24.                 <button class="layui-btn layui-btn-normal" lay-filter="searchBtn" lay-submit>查询</button>
  25.             </div>
  26.         </form>
  27.         <div>
  28.             <table class="layui-hide" id="test" lay-filter="test3" ></table>
  29.         </div>
  30.      </div>
  31.      
  32.      <div id="E_add_edit" style="display:none">
  33.          <form class="layui-form" style="padding:20px">
  34.              <!-- 用户名 -->
  35.              <div class="layui-form-item emp-name">
  36.                  <label class="layui-form-label" >用户名</label>
  37.                  <div class="layui-input-inline">
  38.                      <input class="layui-input" type="text" placeholder="请输入用户名">
  39.                  </div>
  40.              </div>
  41.              <!-- 确定 -->
  42.             <div style="text-align: center; border: none">
  43.                 <button class="layui-btn layui-btn-normal" lay-filter="saveBtn" lay-submit>确定</button>
  44.             </div>
  45.          </form>
  46.      </div>
  47.      
  48.     <script type="text/html" id="barDemo">
  49.          <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
  50.          <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
  51.          <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
  52.     </script>
  53. <script>
  54.     
  55.     layui.use(['table','layer','laypage','form'],function(){
  56.         
  57.             var table=layui.table;
  58.             var layer = layui.layer;
  59.             var form = layui.form;         
  60.             var laypage = layui.laypage;
  61.             var data;  //保存数据  
  62.             var postData={
  63.                     name:"NULL",
  64.                     pageNumber:1,
  65.                     pageSize:10
  66.                 
  67.                 };
  68.             //发送ajax  列表查询ajax
  69.             function send(postData){                               
  70.                     $.ajax({               
  71.                         type: "POST",//请求的方式
  72.                         url: "/main/version1/empList/"+new Date().getTime(),//请求的接口
  73.                         data: postData,//参数(可传可不传递)
  74.                         dataType: "json",//数据类型
  75.                         async:false,
  76.                         success: function (res) {                    
  77.                             data=res.content.records;
  78.                             resultData=res.content.records;
  79.                             //console.log("data1  "+data[0].id);
  80.                         },
  81.                         error:function(err){
  82.                         //失败之后执行(我不管,失败别找我i)
  83.                             obj=err;
  84.                             alert("数据不存在"
  85.                             
  86.                             
  87.                         }                
  88.                     })               
  89.             }
  90.                        
  91.             var infoTable;
  92.             var
  93.             // 表单需要的变量
  94.             infoOptions = {
  95.                 elem: '#test',
  96.                // width: 347,
  97.                 limits: [10],
  98.                 cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
  99.                 cols: [[ 
  100.                     //{field: 'id', title: 'ID',width:20, fixed: 'left'}
  101.                     {field: 'id', title: 'ID', type:'checkbox', width:120, sort: true, fixed: 'left'}
  102.                     ,{field: 'accountno', title: '编号', width:120}
  103.                     ,{field: 'name', title: '用户名', width:120,edit:'text'}
  104.                     ,{field: 'idcard', title: '身份证', width:220}
  105.                     ,{field: 'password', title: '密码', width:120,edit:'text'}
  106.                     ,{field: 'status', title: '状态', width:120}
  107.                     ,{fixed: 'right',title: '操作', width:178, align:'center', toolbar: '#barDemo'}
  108.                 ]],
  109.                 data: []
  110.             };                       
  111.             //  页面初始化
  112.             
  113.              // 查询         ----------------------------------------
  114.            //监听提交  
  115.           form.on('submit(searchBtn)', function(data){
  116.             //layer.msg(JSON.stringify(data.field));
  117.             var str=JSON.stringify(data.field);
  118.             var data;
  119.             layer.msg(str);    
  120.              // 转换 {"name":"gsfs"}
  121.             var json = eval('('+str+')'); 
  122.             postData.name=json.name;//直接取值 结果0
  123.             console.log("name: "+name);
  124.             init();    
  125.             return false;
  126.           });
  127.             
  128.         // 表格初始化 ------------------
  129.         function init (){                                                      
  130.                     // 列表请求
  131.                     send(postData);
  132.                     // 完成表格数据
  133.                     $.extend(infoOptions, {data: data});
  134.                     infoOptions.page = {
  135.                         curr: 1
  136.                     }
  137.                     console.log("data1  "+data[0].id);
  138.                     table.render(infoOptions);
  139.                     
  140.                     data=null;               
  141.             }
  142.         // 页面初始化---------------------------------
  143.         init();
  144.         
  145.         var postData_add_edit={
  146.             id:"NULL",
  147.             name:"NULL",
  148.             accountno:"NULL",
  149.             password:"NULL",
  150.             status:"NULL",
  151.             idcard:"NULL"
  152.         };
  153.         var message;
  154.         //发送ajax  新增修改ajax
  155.         function sendAE(postData_add_edit){                               
  156.                 $.ajax({               
  157.                     type: "POST",//请求的方式
  158.                     url: "/main/version1/updateemp/"+new Date().getTime(),//请求的接口
  159.                     data: postData_add_edit,//参数(可传可不传递)
  160.                     dataType: "json",//数据类型
  161.                     async:false,
  162.                     success: function (res)
  163.                         console.log("msg "+message);
  164.                         if(res.code==200){
  165.                             console.log("ajax msg"+res.message);
  166.                             message=res.message;
  167.                         }
  168.                     },
  169.                     error:function(err){
  170.                         alert("系统出错了"
  171.                     }                
  172.                 })               
  173.         }
  174.         // 新增修改初始化 ------------------
  175.         function init_AE (){           
  176.                    sendAE(postData_add_edit);              
  177.                     // 列表请求
  178.                     send(postData);
  179.                     // 完成表格数据
  180.                     $.extend(infoOptions, {data: data});
  181.                     infoOptions.page = {
  182.                         curr: 1
  183.                     }
  184.                     console.log("data1  "+data[0].id);
  185.                     table.render(infoOptions);
  186.                     
  187.                     data=null;               
  188.             }
  189.         // 监听 单元格,能进行编辑单元格  只有表头加了 edit 属性才能修改  
  190.         table.on('edit(test3)',function(obj){
  191.             var value=obj.value; //得到修改后的值
  192.             var data=obj.data;  //得到所在行的所有键值
  193.             var field=obj.field;  //得到字段 pwd name           
  194.             postData_add_edit.id=data.id;
  195.             
  196.             if(field==='name'){
  197.                 postData_add_edit.name=value;
  198.                 console.log("name "+postData_add_edit.name);
  199.             }
  200.             if(field==='password'){
  201.                 postData_add_edit.password=value;
  202.                 console.log("password "+postData_add_edit.password);
  203.             }
  204.             //layer.msg('[ID: '+data.id+']'+field+' 字段给改为 '+value);
  205.             init_AE ();
  206.         });
  207.         
  208.         //  操作  查看 编辑 删除-----------------------------------
  209.         
  210.         // 监听表格复选框 选择
  211.         table.on('tool(test3)',function(obj){
  212.             console.log(obj);
  213.         });
  214.         //监听工具条
  215.         table.on('tool(test3)', function(obj){
  216.           var data = obj.data;
  217.           if(obj.event === 'detail'){
  218.             layer.msg('ID:'+ data.id + ' 的查看操作');
  219.           } else if(obj.event === 'del'){
  220.             layer.confirm('真的删除行么'+data.id, function(index){
  221.               obj.del();
  222.               layer.close(index);
  223.             });
  224.           } else if(obj.event === 'edit'){
  225.             layer.alert('编辑行:<br>'+ JSON.stringify(data))
  226.           }
  227.         });
  228.         
  229.         
  230.     //end        
  231.     });    
  232. </script>
  233. </body>
  234. </html>

效果如图:

动态表格展示就到这里后,后面会持续更新完增删改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值