layui 的使用 table 和后端数据交互

1 引用js和css

2在s layui.use(['laydate', 'form', 'table', 'laypage'], //需要使用哪个模块就声明哪        function () {

var laydate = layui.laydate;   // 时间
            var table = layui.table;    //表格
            var form = layui.form;  //表单
            var laypage = layui.laypage; //分页
            //执行一个laydate实例
            laydate.render({
                elem: '#start' //指定元素
            });

            //执行一个laydate实例
            laydate.render({
                elem: '#end' //指定元素
            });var url ="xxxxxx.xxxx.xxx";
            var tableName = table.render({
                elem: '#demo',   //table的id
                url: url,
                page: true,  //开启分页
                request: {
                    pageName: 'pageIndex' //页码的参数名称,默认:page,更改之后为pageIndex,在请求时会自动带过去
                    , limitName: 'pageSize' //每页数据量的参数名,默认:limit,更改之后为pageSize

                },
                parseData: function (res) {  //与后端数据交互,需要传固定格式,转换为下面所示
                    return {
                        "code": 0, //数据状态
                        "msg": "",  //状态信息
                        "count": res.Data.Count, //数据总数
                        "data": res.Data.Dtos, //后端的详细数据
                    }
                },
                cols: [//表头 
                    [{ field: 'column1', title: '列1', align: 'center', width: 240 },
                    { field: 'column2', title: '列2', align: 'center' },
                    { field: 'column3', title: '列3', align: 'center' },
                    ]],
                loading: true, //数据加载中。。。
                id: 'idTest',
            });

            //搜索   按钮在form表单中 样式class="layui-btn"  lay-submit lay-filter="search" 
//form内的按钮总会自动提交,将其设置为button,不会自动提交
// button 按钮的type有三个属性:button,submit,reset,button默认是submit,所以没有指定type类型情况下,点击button会触发form表单
//按钮需要加上lay-submit属性,layut的form.on的表单提交监听不到这个按钮,那么return false对提交的制止也就失效了
form.on('submit(search)', function (data) { var param1= $("#start").val(); var param2= $("#end").val();var url = "xxxxxxx?param1=" + param + "&param2=" + param2 ; //第一种方法 tableName.reload({ url: url ,request: { pageName: 'pageIndex' //页码的参数名称,默认:page , limitName: 'pageSize' //每页数据量的参数名,默认:limit } ,where: { //设定异步数据接口的额外参数,任意设 第二种方法传参 parameter1: param1, parameter2: param2, } , page: { curr: 1 //重新从第 1 页开始 } }); return false; //表单按钮的js回调函数添加retrun false制止 });
//<button id="reloadbtn" > jquery 写法
//$('#reloadbtn').click(function () { //里面写法和上面一样 //}); });

 监听工具条

 table.on('tool(test)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
                var data = obj.data; //获得当前行数据
                var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
                var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)
                if (layEvent === 'detail') { //查看
                    var id = data["Id"];
                    xadmin.open('名字', 'url?Id=' + id);
                }
                else if (layEvent === 'del') { //删除
                    layer.confirm('真的删除行么', function (index) {
                        obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
                        layer.close(index);
                        //向服务端发送删除指令
                    });
                }
                else if (layEvent === 'edit') { //编辑
                    var column1= data["column1"]; //编辑行的column1的值
                    var column2= data["column2"];
                    xadmin.open('编辑', 'url?column1=' + column1+ '&column2=' + column2);
                }

            });
        });

数据动态加载,使用laytpl

layui.use(['laytpl'], function () {
        var laytpl = layui.laytpl;
        var Id = getQueryVariable("Id");
        var host = "https://localhost:5001";
        layui.use(['laytpl'],
            function () {
                var laytpl = layui.laytpl;var url = url?id=" + Id;
                $.ajax({
                    url: url,
                    type: 'get',
                    dataType: 'json',
                    success: function (res) {  //res请求返回的结果for (i = 0; i < res.Data.length;i++) {
                            $("#test").append("<ul class='layui-timeline'><li class='layui-timeline-item'> <i class='layui-icon layui-timeline-axis'>&#xe63f;</i>
<div class='layui-timeline-content layui-text'><h3 class='layui-timeline-title'>
" + res.Data[i].xxx1+ "</h3><p><br>" + res.Data[i].xxx2+ "</p></li></ul>"); } } }) }); });
<script type="text/html" >
    <div class="layui-card">
        <div class="layui-card-header">订单概况</div>
        <div class="layui-card-body" id="test">
        </div>
    </div>
</script>

 

//监听提交
        form.on('submit(commit)', function (data) {
            var column1= data.field.column1;
            var column2= data.field.column2;
            var list= [];  //这里数组要与后台的数组中的对象要对应,不然的话接受不到数据
            $('input[type=checkbox]:checked').each(function () {  //获取checkbox选择的属性
                var title = this.title;  //获取标题
var value=$(this).val();
var list= { Title:title, Value: value }; courseList.push(courseDto); }); var courseManagementDtos = { Column1: column1, Column2: column2, List: list }; //注意名字要对应 var url ="后台接口地址"; $.ajax({ url: url, type: "post", contentType: "application/json", dataType: "json", data: JSON.stringify(courseManagementDtos), success: function (res) { if (res.Code == 1) { layer.alert("提交成功"); } else { layer.alert("提交失败"); } } }) return false; });

 动态加载html

$("#courseList").append(html代码) //添加不能移除
$("#courseList").html(html代码);   //移除和添加

 当前端传过来的数据要进行转换时,比如true要显示成是

 {
                        field: 'value', title: '是否完成', align: 'center', templet: function (d) {
                            if (d.value== true) {
                                return '<span style="color: balck;">是</span>'; //可以添加自己想要的样式
                            }
                            else {
                                return '<span style="color: red;">否</span>';
                            }
                        }
                    },

 

 动态绑定列

for (let item of cols) {
                tableCols.push({
                    field: item,
                    title: item,
                    width: 120,
                    totalRow: true,
                    align: "center",
                    templet: function (d) {
                        if (d[item] == null) {   //这里是中括号,不是点
                            return "";
                        }
                        return layui.util.toDateString(d[item], "yyyy-MM-dd");    //格式化,
                    },
                });
            }

 

 多选框引用

    <link href="../../css/formSelects-v4.css" rel="stylesheet">
    <script src="../../js/formSelects-v4.min.js"></script>
后端请求数据
 $.ajax({
            url:Common.WebApiUrl+ Method.CerType,
            dataType: 'json',
            type: 'get',
            success: function (res) {
                console.log(res.data);
                $.each(res.data, function ( i,item) {
                    $('#cerType').append(new Option(item.FNUMBER, item.FENTRYID));// 下拉菜单里添加元素
                });
                formSelects.render('select');
            }
        }),

 

 监听行事件获取列索引和行索引

 //    //监听工具条,根据layEvent的名字来区别
        table.on('tool(stocklayTable)',function(obj){
            var colIndex=$(this).parent().parent().index();
       var rowIndex = $(obj.tr).attr("data-index");
 var fieldName=obj.tr[rowIndex].cells[colIndex].dataset.field; //列名 })

$('table tr td').click(
function()
{
alert( $(this).parent().parent().find("tr").index($(this).parent()[0]));//第几行
alert($(this).index());//第几列
}
);







 

获取select选中的值

let val = $('#cerType').val();
let text= $('#cerType option:selected').text();

 body中只有一个跟div,如果有两个可能会出现问题,比如laypage的跳转会有问题(如下面这中形式)

<body>
    <div>
        <form>
        </form>
      </div>
    <div>
    </div>  
</body>          

 

 

 

 

 

 

其他的比如html已写好,绑定数据可以去看官方文档,比较简单,和vue绑定差不多

 

posted @ 2021-01-12 10:26  青兰柳  阅读(8426)  评论(0编辑  收藏  举报