layui 表格编辑下拉框显示问题、日期字段编辑问题

要求:1、表格编辑下拉框 2、下拉框数据动态

最难处理是下拉显示问题

下拉动态数据公共方法

 getdatadic: function (param) {
            /// <summary>数据字典下拉框赋值</summary>  
            /// <param name="param" type="Object">selectEl:select的ID带#,dataenum数据字典类别的enum值。</param>
                admin.req({
                    url: '/System/DataDictionary/GetListByDataEnumType?rand=' + Math.round(Math.random() * (10000 - 1)).toString(),
                    data: { dataEnum: param.dataenum }
                    , async: false//取消异步
                    , done: function (res) {
                        
                        if (param.script === "script") {
                            var slhtml = '<select name="' + param.selectEl + '" id="' + param.selectEl + '" lay-filter="' + param.selectEl + '">'
                            $(res.Data).each(function (i, n) {
                                slhtml = slhtml + "<option value='" + n.Id + "'>" + n.Name + "</option>";
                                // $($("#selectLb").html()).append("<option value='" + n.Id + "'>" + n.Name + "</option>");
                            });
                            slhtml = slhtml + ' </select>';
                            $("#" + param.scriptEl).html(slhtml)
                            //form.render("select");//必须

                        }
                        else {
                            $(res.Data).each(function (i, n) {
                                $(param.selectEl).append("<option value='" + n.Id + "'>" + n.Name + "</option>");
                            });
                        }
                        form.render("select");//必须
                        if (param.wooverify != undefined && param.wooverify) {
                            $(param.selectEl).next("div.layui-form-select").children("div").children("input").addClass("pen");
                            //$(param.selectEl).next("div.layui-form-select").children("div").children("input").addClass("pen");
                        }
                    }
                });
            

        },

1、html

 <div class="layui-card " id="continvoice">
        <div class="layui-card-header">发票</div>
        <div class="layui-card-body" style="padding: 15px;">
            <table id="NF-ContInvoice" lay-filter="NF-ContInvoice"></table>
        </div>
        
            <script type="text/html" id="selectInTypehtml" >    
            <select name='InType' id="InType">
                <option value=""></option>
               
                
            </select>
            </script>

         <!--表格工具栏-->
            <script id="tool_continvoice" type="text/html">
                <div class="layui-inline">
                    <button class="layui-btn " lay-event="add"><i class="layui-icon layui-icon-edit"></i> 新增</button>
                    <button class="layui-btn  layui-btn-danger" lay-event="save"><i class="layui-icon layui-icon-save"></i>确认</button>
                </div>
            </script>
    </div>

2、样式文件

<style type="text/css" >
 /*使下拉列表框不被遮挡*/
    .layui-table-cell {
        overflow: visible !important;
    }


/* 使得下拉框与单元格刚好合适 */
td .layui-form-select{
    margin-top: -10px;
    margin-left: -15px;
    margin-right: -15px;
} 

</style>

3、核心js内容

1、动态加载下拉数据,是后台封装信息

 commonnf.getdatadic({ dataenum: 19, selectEl: "InType", script: "script", scriptEl: "selectInTypehtml" });

2、{ field: 'InTypeName', title: '发票类型', width: 160, templet: '#selectInTypehtml' }

日期

3、, { field: 'MakeOutDateTime', title: '开票日期', width: 140, edit: 'text', event: 'Plandate' }

4、下拉

 /**
             * 下拉选择框
             * **/
            form.on('select(InType)', function (data) {
                //debugger;
                var elemt = $(data.elem)
                var trelment = elemt.parents("tr");
                var tabledata = table.cache['NF-ContInvoice']
                var trobjdata = tabledata[trelment.data('index')]//["InTypeName"] = data.value;
                trobjdata.InType = data.value;
                
                for (var i = 0; i < updatedatafp.length; i++) {
                    if (updatedatafp[i].Id === trobjdata.Id) {
                        updatedatafp.splice(i, 1);
                    }
                }
                isupdatefp = true;
                updatedatafp.push(trobjdata);

            });

5、日期操作

//列表操作栏
            table.on('tool(NF-ContInvoice)', function (obj) {
                var _data = obj.data;
                switch (obj.event) {
                   
                    case "Plandate"://开票日期
                        {
                           // debugger;
                            var newdata = {};
                            var field = $(this).data('field');
                            laydate.render({
                                elem: this.firstChild
                                , show: true //直接显示
                                , closeStop: this
                                , type: 'date'
                                , format: "yyyy-MM-dd"
                                , done: function (value, date) {
                                   // debugger;
                                    isupdatefp = true;
                                    newdata[field] = value;
                                    obj.update(newdata);
                                    for (var i = 0; i < updatedatafp.length; i++) {
                                        if (updatedatafp[i].Id === obj.data.Id) {
                                            updatedatafp.splice(i, 1);
                                        }
                                    }
                                    obj.data.MakeOutDateTime = value;
                                    updatedatafp.push(obj.data);

                                }
                            });
                        }
                        break;
                    //case "selectmsd":
                    //    {
                    //        var field = $(this).data('field');
                    //        debugger;

                    //    }
                        break;
                    default:
                        layer.alert("暂不支持(" + obj.event + ")");
                        break;
                }
            });

整块模块的全部代码

/************************发票-begin*****************************************************************************************/
            //发票类型
           
            commonnf.getdatadic({ dataenum: 19, selectEl: "InType", script: "script", scriptEl: "selectInTypehtml" });
            table.render({
                elem: '#NF-ContInvoice'
                , url: '/Contract/ContractCollection/GetInvoiceListByContId?contId=' + contId + '&rand=' + wooutil.getRandom()
                , toolbar: '#tool_continvoice'
                , defaultToolbar: ['filter']
                , cols: [[
                    { type: 'numbers', fixed: 'left' }
                    , { type: 'checkbox', fixed: 'left' }
                    , { field: 'Id', title: 'Id', width: 50, hide: true }
                    , { field: 'InTypeName', title: '发票类型', width: 160, templet: '#selectInTypehtml' }
                    , { field: 'AmountMoneyThod', title: '发票金额', width: 140, edit: 'text' }
                    , { field: 'MakeOutDateTime', title: '开票日期', width: 140, edit: 'text', event: 'Plandate' }
                    , { field: 'InCode', title: '发票号', width: 150, edit: 'text' }
                    , { field: 'InStateDic', title: '发票状态', width: 140 }
                    , { field: 'ConfirmUserName', title: '确认人', width: 140 }
                    , { field: 'ConfirmDateTime', title: '确认日期', width: 140 }
                    , { field: 'CreateUserName', title: '创建人', width: 140 }
                    , { field: 'CreateDateTime', title: '创建日期', width: 140 }
                    , { field: 'InType', title: '发票类型id', width: 140, hide: true }

                ]]
                , page: false
                , loading: true
                , height: setter.table.height_tab
                , limit: setter.table.limit_tab
               
                , done: function (res, curr, count) {
                   
                    var tableId = "NF-ContInvoice";
                    var divForm = $("#" + tableId).next();  // 获取表格,tableId是表格的id
                    var tableCache = table.cache[tableId];  // 获取表格缓存数据,tableCacheId也是表格的id
                    var trJqs = divForm.find(".layui-table-body tr");  // 获取表格body下的所有tr标签
                    trJqs.each(function () {  // 遍历每个tr标签
                       
                        var trJq = $(this);  // 获得当前遍历的tr标签
                        var dataIndex = trJq.attr("data-index");  // 得到当前数据行的data-index,即为第几行数据
                        trJq.find("td").each(function () {  // 遍历tr标签下的每一个td标签
                            var tdJq = $(this);  // 获得当前遍历的td标签
                            var fieldName = tdJq.attr("data-field");  // 获得当前td标签的字段名
                            var selectJq = tdJq.find("select");  // 获得当前td标签下的select标签
                            if (selectJq.length == 1) {  // 判断select标签是否存在
                                selectJq.eq(0).val(tableCache[dataIndex]["InType"]);  // 将表格里的缓存数据赋值给select标签
                            }
                        });
                    });
                    form.render('select');  // 重新加载select表单



                   
                  }
               
               });

            var contaoviceEvent = {
                add: function () {
                    admin.req({
                        url: '/Contract/ContractCollection/AddAnvoiceLine?rand=' + wooutil.getRandom()
                        , data: { contId: contId }
                        , success: function (res) {
                            table.reload("NF-ContInvoice", {
                                page: { curr: 1 }
                                , where: {}
                            });

                        }
                    });
                },
                save: function () {
                    if (isupdatefp) {//发票保存
                       // debugger;
                        for (var i = 0; i < updatedatafp.length; i++) {
                            //if (updatedatafp[i].Id === obj.data.Id) {
                            //    updatedatafp.splice(i, 1);
                            //}
                            updatedatafp[i].AmountMoney = updatedatafp[i].AmountMoneyThod;
                        }
                        admin.req({
                            url: '/Contract/ContractCollection/SaveFpData',
                            data: { data: updatedatafp },
                            type: 'POST',
                            done: function (res) {
                                //清空变量,防止重复提交
                                updatedata = [];
                                isupdate = false;
                                return layer.msg('保存成功', { icon: 1 });
                            }
                        });
                    } else {
                        return layer.msg('数据没有任何修改!', { icon: 5 });
                    }
                }
               
            };
            //发票头部工具栏
            table.on('toolbar(NF-ContInvoice)', function (obj) {
                switch (obj.event) {
                    case 'add':
                        contaoviceEvent.add();
                        break;
                    case 'save':
                        contaoviceEvent.save();
                        break
                    case 'LAYTABLE_COLS'://选择列-系统默认不管
                        break;
                    default:
                        layer.alert("暂不支持(" + obj.event + ")");
                        break;
                };
            });
            //列表操作栏
            table.on('tool(NF-ContInvoice)', function (obj) {
                var _data = obj.data;
                switch (obj.event) {
                   
                    case "Plandate"://开票日期
                        {
                           // debugger;
                            var newdata = {};
                            var field = $(this).data('field');
                            laydate.render({
                                elem: this.firstChild
                                , show: true //直接显示
                                , closeStop: this
                                , type: 'date'
                                , format: "yyyy-MM-dd"
                                , done: function (value, date) {
                                   // debugger;
                                    isupdatefp = true;
                                    newdata[field] = value;
                                    obj.update(newdata);
                                    for (var i = 0; i < updatedatafp.length; i++) {
                                        if (updatedatafp[i].Id === obj.data.Id) {
                                            updatedatafp.splice(i, 1);
                                        }
                                    }
                                    obj.data.MakeOutDateTime = value;
                                    updatedatafp.push(obj.data);

                                }
                            });
                        }
                        break;
                    //case "selectmsd":
                    //    {
                    //        var field = $(this).data('field');
                    //        debugger;

                    //    }
                        break;
                    default:
                        layer.alert("暂不支持(" + obj.event + ")");
                        break;
                }
            });

            /**编辑**/
            table.on('edit(NF-ContInvoice)', function (obj) {
               // debugger;
                isupdatefp = true;
                var data = obj.data; //得到所在行所有键值
                var filed = obj.field;
                switch (filed) {
                   
                    case "AmountMoneyThod"://发票金额
                        {
                            var amoutthd = wooutil.numThodFormat(obj.value.toString());
                            obj.data.AmountMoney = amoutthd;
                           
                        }
                        break;




                }
                //修改值
                for (var i = 0; i < updatedatafp.length; i++) {
                    if (updatedatafp[i].Id === obj.data.Id) {
                        updatedatafp.splice(i, 1);
                    }
                }
                updatedatafp.push(obj.data);
            });
            /**
             * 下拉选择框
             * **/
            form.on('select(InType)', function (data) {
                //debugger;
                var elemt = $(data.elem)
                var trelment = elemt.parents("tr");
                var tabledata = table.cache['NF-ContInvoice']
                var trobjdata = tabledata[trelment.data('index')]//["InTypeName"] = data.value;
                trobjdata.InType = data.value;
                
                for (var i = 0; i < updatedatafp.length; i++) {
                    if (updatedatafp[i].Id === trobjdata.Id) {
                        updatedatafp.splice(i, 1);
                    }
                }
                isupdatefp = true;
                updatedatafp.push(trobjdata);

            });
            /*************************发票-end*******************************************************************************************/

借鉴内容:layui学习——数据表格嵌套下拉列表,并实现动态更新 - 夏末蝉未鸣 - 博客园

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果您想在 layui 表格中添加下拉框,可以使用 lay-filter 和 edit 属性。以下是一个示例: HTML 代码: ```html <table id="demo" lay-filter="test"></table> ``` JavaScript 代码: ```javascript layui.use(['table', 'form'], function(){ var table = layui.table; var form = layui.form; //渲染表格 table.render({ elem: '#demo', url: '/demo/table/user/', cols: [[ {field:'id', title:'ID', width:80, sort:true}, {field:'username', title:'用户名', width:120}, {field:'sex', title:'性别', width:80, edit:'text'}, {field:'city', title:'城市', width:100}, {field:'sign', title:'签名', width:150, edit:'text'}, {field:'experience', title:'积分', width:80, sort:true, edit:'text'}, {field:'ip', title:'IP', width:120}, {field:'logins', title:'登入次数', width:100, sort:true}, {field:'joinTime', title:'加入时间', width:120}, {fixed:'right', title:'操作', toolbar:'#barDemo', width:150} ]], page: true }); //监听单元格编辑 table.on('edit(test)', function(obj){ var value = obj.value; //得到修改后的值 var data = obj.data; //得到所在行所有键值 var field = obj.field; //得到字段 //更新到后台 $.ajax({ type: "POST", url: "/demo/table/edit/", data: { id: data.id, field: field, value: value }, success: function(res){ if(res.code === 0){ layer.msg(res.msg); }else{ layer.msg(res.msg, {icon: 5}); } }, error: function(){ layer.msg('网络错误,请稍后重试!', {icon: 5}); } }); }); //监听下拉框 form.on('select', function(data){ var value = data.value; //得到选中的值 var field = data.elem.name; //得到所在字段 //更新到后台 $.ajax({ type: "POST", url: "/demo/table/edit/", data: { id: data.elem.dataset.id, field: field, value: value }, success: function(res){ if(res.code === 0){ layer.msg(res.msg); }else{ layer.msg(res.msg, {icon: 5}); } }, error: function(){ layer.msg('网络错误,请稍后重试!', {icon: 5}); } }); }); //渲染下拉框 table.on('renderTest', function(obj){ var select = '<select name="sex" lay-filter="sex" data-id="' + obj.data.id + '"><option value="男">男</option><option value="女">女</option></select>'; obj.tr.find('td:eq(2)').html(select); form.render('select'); }); //渲染工具栏 table.on('toolbar(test)', function(obj){ if(obj.event === 'add'){ //添加操作 layer.msg('添加操作'); } }); }); ``` 在上面的代码中,我们使用了 `edit` 属性来启用单元格编辑功能,并使用了 `lay-filter` 属性来绑定事件。在 `cols` 中,我们指定了需要添加下拉框的列,并在 `renderTest` 事件中渲染下拉框。在 `form.on('select')` 事件中,我们监听下拉框的变化,并将修改后的值更新到后台。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值