Day04 Layui table 自动渲染,field格式转换,工具条删除,修改监听

本文详细介绍如何使用LayUI的table组件实现表格数据的自动渲染、格式转换、删除等功能,并提供了一个完整的示例,包括表格操作按钮及响应事件。

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

  • 1.table自动渲染

使用lay-data ,进行table表格自动渲染。

<table class="layui-table" lay-data="{url:'http://192.168.25.38:8080/jeesite/f/sys/role/list',page:false,id:'idTest'}" lay-filter="demo">
            <thead>
                <tr>
                    <th lay-data="{type:'checkbox', fixed: 'left'}"></th>
                    <th lay-data="{field:'name',  sort: true, fixed: true}">角色名称</th>
                    <th lay-data="{field:'enname'}">英文名称</th>
                    <!--<th lay-data="{field:'office.name', width:150, sort: true}">归属机构</th>-->
                    <th lay-data="{templet:'<div>{{createFormat(d.office.name)}}</div>'}">归属机构</th>
                    <th lay-data="{field:'dataScope'}">数据范围</th>
                    <th lay-data="{fixed: 'right', align:'center', toolbar: '#barDemo'}">操作</th>
                </tr>
            </thead>
        </table>

注意:当field,是json字符串中对象的某个属性时,则不能用office.name,而应该进行格式转换。

//书写方式
<th lay-data="{templet:'<div>{{createFormat(d.office.name)}}</div>'}">归属机构</th>
//格式转换
function createFormat(o) {
    return o;
}
  • 2.表格删除
layer.confirm('真的删除行么', function(index) {

                $.ajax({
                    type: 'get',
                    url: 'http://192.168.25.38:8080/jeesite/f/sys/role/delete',
                    async: true,
                    data:{
                        id:data.id
                    },
                    error:function(error){
                        alert(error.status);
                        layer.msg("删除失败", {
                                icon: 5   //出现失败图标
                        });
                    },
                    success: function(result) {

                        if(result == "success") {
                            obj.del();
                            layer.close(index);
                            layer.msg("删除成功", {
                                icon: 6   //出现成功图标
                            });
                        } else {
                            layer.msg("删除失败", {
                                icon: 5
                            });
                        }
                    }
                });

    });
  • 3 完整table操作
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>角色管理</title>
    </head>

    <body>

        <div class="layui-btn-group demoTable">
            <!--<button class="layui-btn" data-type="getCheckData">获取选中行数据</button>
          <button class="layui-btn" data-type="getCheckLength">获取选中数目</button>
          <button class="layui-btn" data-type="isAll">验证是否全选</button>-->

        </div>

        <div class="layui-tab layui-tab-card">
            <ul class="layui-tab-title">
                <li class="active">
                    <a href="http://localhost:8080/pro/start/#/sys/role/list">角色列表</a>
                </li>
                <li>
                    <a href="http://localhost:8080/pro/start/#/sys/role/form">角色添加</a>
                </li>
            </ul>
        </div>

        <table class="layui-table" lay-data="{url:'http://192.168.25.38:8080/jeesite/f/sys/role/list',page:false,id:'idTest'}" lay-filter="demo">
            <thead>
                <tr>
                    <th lay-data="{type:'checkbox', fixed: 'left'}"></th>
                    <th lay-data="{field:'name',  sort: true, fixed: true}">角色名称</th>
                    <th lay-data="{field:'enname'}">英文名称</th>
                    <!--<th lay-data="{field:'office.name', width:150, sort: true}">归属机构</th>-->
                    <th lay-data="{templet:'<div>{{createFormat(d.office.name)}}</div>'}">归属机构</th>
                    <th lay-data="{field:'dataScope'}">数据范围</th>
                    <th lay-data="{fixed: 'right', align:'center', toolbar: '#barDemo'}">操作</th>
                </tr>
            </thead>
        </table>
        <script type="text/html" id="barDemo">
            <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">分配</a>
            <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> 

        <!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
        <script>
            //格式转换
            function createFormat(o) {
                return o;
            }
            layui.use(['table', 'jquery'], function() {
                $ = layui.$;
                var table = layui.table;
                //监听表格复选框选择
                table.on('checkbox(demo)', function(obj) {
                    console.log(obj)
                });
                //监听工具条
                table.on('tool(demo)', function(obj) {
                    var data = obj.data;
                    if(obj.event === 'detail') {
                        layer.msg('ID:' + data.id + ' 的查看操作');

                    } else if(obj.event === 'del') {
                        layer.confirm('真的删除行么', function(index) {

                            $.ajax({
                                type: 'get',
                                url: 'http://192.168.25.38:8080/jeesite/f/sys/role/delete',
                                async: true,
                                data:{
                                    id:data.id
                                },
                                error:function(error){
                                    alert(error.status);
                                    layer.msg("删除失败", {
                                            icon: 5
                                    });
                                },
                                success: function(result) {

                                    if(result == "success") {
                                        obj.del();
                                        layer.close(index);
                                        layer.msg("删除成功", {
                                            icon: 6
                                        });
                                    } else {
                                        layer.msg("删除失败", {
                                            icon: 5
                                        });
                                    }
                                }
                            });

                        });
                    } else if(obj.event === 'edit') {

                        window.location.href = "http://localhost:8080/pro/start/#/sys/role/form.html?id=" + data.id;
                    }
                });

                var $ = layui.$,
                    active = {
                        getCheckData: function() { //获取选中数据
                            var checkStatus = table.checkStatus('idTest'),
                                data = checkStatus.data;
                            layer.alert(JSON.stringify(data));
                        },
                        getCheckLength: function() { //获取选中数目
                            var checkStatus = table.checkStatus('idTest'),
                                data = checkStatus.data;
                            layer.msg('选中了:' + data.length + ' 个');
                        },
                        isAll: function() { //验证是否全选
                            var checkStatus = table.checkStatus('idTest');
                            layer.msg(checkStatus.isAll ? '全选' : '未全选')
                        }
                    };

                $('.demoTable .layui-btn').on('click', function() {
                    var type = $(this).data('type');
                    active[type] ? active[type].call(this) : '';
                });

            });
        </script>
    </body>

</html>
@{ Layout = null; } <!DOCTYPE html> <html> <head> <link href="~/Scripts/layui/css/layui.css" rel="stylesheet" /> <script src="~/Scripts/layui/layui.js"></script> <script src="~/Scripts/jquery-3.4.1.js"></script> <style> body { padding: 10px 20px 20px 20px; width: 90% } .but { margin-top: -5px } </style> </head> <body> <fieldset class="layui-elem-field"> <legend> <span class="layui-breadcrumb"> <a href="">首页</a> <a href="">职位管理</a> </span> </legend> <div class="layui-field-box"> <div class="layui-form-item"> <div class="layui-inline"> <label class="layui-form-label">职位名称</label> <div class="layui-input-block"> <input type="text" name="name" id="name" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-inline"> <label class="layui-form-label">职位代码</label> <div class="layui-input-inline"> <input type="text" name="code" id="code" autocomplete="off" class="layui-input"> </div> </div> <button type="button" class="layui-btn layui-btn-radius but" id="searchButton" onclick="Search()"><i class="layui-icon layui-icon-search"></i>查询</button> <button type="button" class="layui-btn layui-bg-blue but"><i class="layui-icon layui-icon-addition"></i>添加</button> </div> </div> </fieldset> <fieldset class="layui-elem-field"> <table class="layui-hide" id="test" lay-filter="test"></table> <script type="text/html" id="toolDemo"> <div class="layui-clear-space"> <a class="layui-btn layui-btn-xs" lay-event="edit" id="Edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> <a class="layui-btn layui-btn-xs layui-bg-orange" lay-event="edit" id="del"><i class="layui-icon layui-icon-clear"></i>删除</a> </div> </script> </fieldset> <script> var tableIns; layui.use(['table', 'util'], function () { var table = layui.table; // 创建渲染实例 tableIns = table.render({ elem: '#test', url: '/JobManagem/GetList', // 此处为静态模拟数据,实际使用时需换成真实接口 page: true, cols: [[ { type: 'numbers', width: '15%', title: '序号' }, { field: 'JobName', width: '20%', title: '职位名称' }, { field: 'JobCode', width: '20%', title: '职位代码' }, { field: 'ModifyDate', width: '20%', title: '修改时间', templet: function (d) { console.log(d); // 得到当前行数据 console.log(this); // 得到表头当前配置项 console.log(d.LAY_NUM); // 得到序号。或其他特定字段 // 返回模板内容 return '<a href=" ' + d.id + '" class="layui-table-link">' + d.title + '</a >' } }, { title: '操作', width: '25%', templet: '#toolDemo' } ]], }); //编辑,删除 table.on('tool(test)', function (obj) { // 双击 toolDouble var data = obj.data; // 获得当前行数据 // console.log(obj) if (obj.event === 'edit') { //编辑 } else { layer.confirm('真的删除行 [' + data.JobName + '] 么', function (index) { obj.del(); // 删除对应行(tr)的DOM结构 layer.close(index); // 向服务端发送删除指令 }); } }); }); //重载,模糊查询 function Search() { var nameVal = $('input[name="name"]').val().trim(); var codeVal = $('input[name="code"]').val().trim(); // 完整重载 - 所有属性属性(options)均可参与到重载中 tableIns.reload({ where: { // 传递数据异步请求时携带的字段 name: nameVal, code: codeVal }, height: 500 // 重设高度 }); } // 处理日期格式函数 function formatDate(dateStr) { // 提取时间戳 var timestamp = parseInt(dateStr.replace(/\/Date\((\d+)\)\//, '$1')); // 创建 Date 对象 var date = new Date(timestamp); // 获取年、月、日 var year = date.getFullYear(); var month = String(date.getMonth() + 1).padStart(2, '0'); var day = String(date.getDate()).padStart(2, '0'); // 返回格式化后的日期 return year + '-' + month + '-' + day; } </script> </body> </html>现在只实现了查询,修改和添加以及删除都没实现,这一段是前端代码下面是后端代码using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using WebApplication1.Models; using WebApplication1.Scripts; using Newtonsoft.Json; namespace WebApplication1.Controllers { public class JobManagemController : Controller { AoutEntities db = new AoutEntities(); ReturnListJsonData jsonData = new ReturnListJsonData(); // GET: JobManagem public ActionResult Index() { return View(); } #region 模糊查询 /// <summary> /// 模糊查询 /// </summary> /// <param name="page"></param> /// <param name="limit"></param> /// <param name="name"></param> /// <param name="code"></param> /// <returns></returns> public ActionResult GetList(int page, int limit, string name, string code) { var list = db.Job.Where(a => a.IsDel == false).ToList(); // if (!string.IsNullOrEmpty(name)) { list = list.Where(a => a.JobName.Contains(name)).ToList(); } if (!string.IsNullOrEmpty(code)) { list = list.Where(a => a.JobCode.Contains(code)).ToList(); } var offset = (page - 1) * limit; var data = list.OrderByDescending(a => a.ModifyDate).Skip(offset).Take(limit); jsonData.code = 0; jsonData.count = list.Count; jsonData.data = data; return Json(jsonData, JsonRequestBehavior.AllowGet); } #endregion } }帮我进行功能的实现
07-11
@{ Layout = null; } <!DOCTYPE html> <html> <head> <link href="~/Scripts/layui/css/layui.css" rel="stylesheet" /> <script src="~/Scripts/layui/layui.js"></script> <script src="~/Scripts/jquery-3.4.1.js"></script> <style> body { padding: 10px 20px 20px 20px; width: 97% } .but { margin-top: -5px } .editInfo { display: none; } </style> </head> <body> <fieldset class="layui-elem-field"> <legend> <span class="layui-breadcrumb"> <a href="">基本信息管理</a> <a href="/UserManagem/Index" >员工管理</a> </span> </legend> <div class="layui-field-box"> <div class="layui-form-item"> <div class="layui-inline"> <label class="layui-form-label" style="width: 60px;">员工账号</label> <div class="layui-input-block"> <input type="text" name="code" id="code" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-inline"> <label class="layui-form-label" style="width: 60px;">员工姓名</label> <div class="layui-input-inline"> <input type="text" name="name" id="name" autocomplete="off" class="layui-input"> </div> </div> <button type="button" class="layui-btn layui-btn-radius but" id="searchButton" onclick="Search()"><i class="layui-icon layui-icon-search"></i>查询</button> <button type="button" class="layui-btn layui-bg-blue but" onclick="Add()"><i class="layui-icon layui-icon-addition"></i>添加</button> <button type="button" class="layui-btn layui-btn-danger layui-btn-radius"><i class="layui-icon layui-icon-delete"></i>批量删除</button> <button type="button" class="layui-btn layui-btn-danger layui-btn-radius"><i class="layui-icon layui-icon-export"></i>导出</button> <button type="button" class="layui-btn but" id="searchButton"><i class="layui-icon layui-icon-upload"></i>导入文件</button> </div> </div> </fieldset> <fieldset class="layui-elem-field"> <table class="layui-hide" id="test" lay-filter="test"></table> <script type="text/html" id="toolDemo"> <div class="layui-clear-space"> <a class="layui-btn layui-btn-xs" lay-event="edit" id="Edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> <a class="layui-btn layui-btn-xs layui-bg-orange" lay-event="del"><i class="layui-icon layui-icon-clear"></i>删除</a> </div> <!-- 在视图中添加以下隐藏表单 --> <div class="editInfo" style="padding:15px;"> <form class="layui-form" id="editForm"> <input type="hidden" name="ID" id="ID"> <div class="layui-form-item"> <label class="layui-form-label">员工账号</label> <div class="layui-input-block"> <input type="text" name="UserCode" required lay-verify="required" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">员工姓名</label> <div class="layui-input-block"> <input type="text" name="UserName" required lay-verify="required" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">性别</label> <div class="layui-input-block"> <input type="radio" name="Sex" id="man" value="true" title="男" checked> <input type="radio" name="Sex" value="false" title="女"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">出生日期</label> <div class="layui-input-block"> <input type="text" name="BirthDay" id="BirthDay" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">邮箱</label> <div class="layui-input-block"> <input type="text" name="Email" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">电话</label> <div class="layui-input-block"> <input type="text" name="Tel" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">创建时间</label> <div class="layui-input-block"> <input type="text" name="CreateDate" id="CreateDate" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">地址</label> <div class="layui-input-block"> <input type="text" name="Address" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="saveBtn">保存</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </div> </div> </form> </div> </script> </fieldset> <script> var tableIns; var form; var isEdit; layui.use(['table', 'form','laydate'], function () { var table = layui.table; form = layui.form; // 修正:移除重复的var声明 var laydate = layui.laydate; // 创建渲染实例 tableIns = table.render({ elem: '#test', url: '/UserManagem/GetList', page: true, cols: [[ { type: 'checkbox', width: '5%', title: '' }, { type: 'numbers', width: '5%', title: '序号' }, { field: 'UserCode', width: '8%', title: '员工账号' }, { field: 'UserName', width: '8%', title: '员工姓名' }, { field: 'Sex', width: '8%', title: '性别', templet: function (d) { if (d.Sex == true) { return "男" } else { return "女"; } } }, { field: 'BirthDay', width: '8%', title: '出生日期', templet: function (d) { return convertJsonDate(d.BirthDay); } }, { field: 'BirthDay', width: '8%', title: '年龄', templet: function (d) { return calculateAge(d.BirthDay); } }, { field: 'Status', width: '8%', title: '是否离职', templet: function (d) { if (d.Status == true) { return "离职"; } else { return "在职"; } } }, { field: 'Email', width: '8%', title: '邮箱' }, { field: 'Tel', width: '8%', title: '电话' }, { field: 'CreateDate', width: '8%', title: '创建时间', templet: function (d) { return convertJsonDate(d.CreateDate); } }, { field: 'Address', width: '8%', title: '员工住址' }, { title: '操作', width: '10.5%', templet: '#toolDemo' } ]], done: function (res, curr, count) { // 数据渲染完成后的回调 if (res.code !== 0) { // 假设0是成功状态码 layer.msg('数据加载失败: ' + res.msg, { icon: 5 }); } }, error: function () { // 请求错误的回调 layer.msg('网络请求错误,请检查接口', { icon: 5 }); } }); //编辑,删除 table.on('tool(test)', function (obj) { // 双击 toolDouble var data = obj.data; // 获得当前行数据 var field = obj.field; // 得到字段 var value = obj.value; // 得到修改后的值 var data = obj.data; // 得到所在行所有键值 // console.log(obj) if (obj.event === 'edit') { layer.open({ type: 1, area: ['500px', '400px'], // 增加高度预留 title: '编辑员工信息', content: $(".editInfo").html(), success: function (layero, index) { // 数据绑定(注意格式转换) laydate.render({ elem: '#BirthDay', // 绑定元素 format: 'yyyy-MM-dd' // 日期格式 }); laydate.render({ elem: '#CreateDate', // 绑定元素 format: 'yyyy-MM-dd' // 日期格式 }); form.val('editForm', { "UserCode": data.UserCode, "UserName": data.UserName, "Sex": data.Sex ? "true" : "false", // 统一转为字符串 "BirthDay": convertJsonDate(data.BirthDay), "Email": data.Email, "Tel": data.Tel, "Address": data.Address }); // 动态渲染表单元素(重要!) form.render(); } }); } else { layer.confirm('真的删除员工 [' + data.UserCode + '] 么', function (index) { obj.del(); // 删除对应行(tr)的DOM结构 layer.close(index); // 向服务端发送删除指令 $.ajax({ url: '/UserManagem/DelInfo', type: 'post', data: { id: data.ID }, success: function (res) { if (res.code == 0) { layer.msg(res.msg, { icon: 6, time: 1500 }, function () { Search(); }) } else { layer.msg(res.msg, { icon: 5, time: 1500 }) } } }) }); } }); }); // 处理日期格式函数 function convertJsonDate(jsonDate) { if (!jsonDate) return ''; try { // 提取时间戳 const timestamp = parseInt(jsonDate.match(/\d+/)[0]); // 创建 Date 对象 const date = new Date(timestamp); // 获取年、月、日 const year = date.getFullYear(); const month = (date.getMonth() + 1).toString().padStart(2, '0'); const day = date.getDate().toString().padStart(2, '0'); // 返回格式化后的日期 return `${year}-${month}-${day}`; } catch (e) { console.error('日期格式化错误:', e); return jsonDate; } } //重载,模糊查询 function Search() { var nameVal = $('input[name="name"]').val().trim(); var codeVal = $('input[name="code"]').val().trim(); // 完整重载 - 所有属性属性(options)均可参与到重载中 tableIns.reload({ where: { // 传递数据异步请求时携带的字段 name: nameVal, code: codeVal }, height: 500 // 重设高度 }); } function calculateAge(jsonBirthDate) { if (!jsonBirthDate) return ''; try { // 先转换为日期格式 const birthDate = convertJsonDateToDate(jsonBirthDate); const today = new Date(); let age = today.getFullYear() - birthDate.getFullYear(); const monthDiff = today.getMonth() - birthDate.getMonth(); if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) { age--; } return age; } catch (e) { console.error('年龄计算错误:', e); return ''; } } // 辅助函数:将JSON日期转换为Date对象 function convertJsonDateToDate(jsonDate) { const timestamp = parseInt(jsonDate.match(/\d+/)[0]); return new Date(timestamp); } </script> </body> </html> 完成添加的弹窗
最新发布
07-16
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值