table 中用了自定义列模板后,开启合计行报错..

提问 已结 11 164
李二三
李二三 2020-2-6
悬赏:50飞吻
版本:layui 2.5.6 浏览器:Google Chrome
table 中用了自定义列模板后,开启合计行报错..[疑问]



回帖
  • 错误信息是什么?这个是目前layui表格的一个不是很合理的设定,在构建统计行的节点的时候他不管当前列是否设置了totalRow,遇到templet的时候都会去求和然后得到进行templet的解析,然后再判断是否需要统计,需要就优先使用统计后的结果,你可以在templet的时候debugger一下看看就知道了,如果他不是fixed列,那么有n条记录的时候会进入n+1次,并且你可以打印出进入回调的时候d的值。这个是不合理的地方,但是一般不会直接报错,报错有可能就是因为它给你得到的求和中的值你调用的方法的时候值不是你预期想要的进而报错。
    解决的方法要么修改源代码逻辑,修复没有设置统计也会进行统计这个bug,要么你可以在templet的时候先根据给你的d的情况判断一下,在非统计行的时候再去传承日期字符串,如果是统计行计入的就直接pass
    0 回复
  • 李二三
    2020-2-6
    有大佬吗在线等[泪]
    0 回复
  • 把table渲染的代码全贴出来把,这个片段看不到有用信息
    0 回复
  • 李二三
    2020-2-6
    @晒太阳的魚
    table.render({
    elem: '#bankinfo',
    id: 'bankinfo_table',
    url: '/BankFlow/BankInfoListData',
    method: 'post',
    height: 'full-150',
    page: true,
    limit: 20,
    limits: [20, 50, 100, 1000],
    toolbar: '#toolbarbank', //头部工具栏
    totalRow: true,//合计开启报错
    defaultToolbar: ['filter', 'exports', 'print', {
    title: '刷新数据'
    , layEvent: 'refresh'
    , icon: 'layui-icon-refresh'
    }],
    done: function (res, curr, count) {
    if (count <= 0) {
    layer.msg('暂无数据');
    }
    }, //数据加载完后回调方法
    cols: [[
    { type: 'checkbox' },
    { field: 'id', width: 80, title: '编码', sort: true, totalRowText: '合计:' },
    { field: 'debit_price', width: 150, title: '借方金额', sort: true, totalRow: true },
    { field: 'credit_price', width: 150, title: '贷方金额', sort: true, totalRow: true },
    { field: 'bank_balance', width: 200, title: '余额' },
    { field: 'buyer_payer', title: '收/付款方' },
    { field: 'selfBankName', width: 300, title: '所属银行' },
    //{ field: 'dealtime_string', title: '交易时间' }//后台格式化好的时间数据
    {
    field: 'dealtime',
    title: '交易时间',
    sort: true,
    templet: function (d) {
    return getFDate(d.dealtime);//格式化时间
    }
    }
    ]]
    });
    0 回复
  • 报了什么错,是不是合计的地方数据有错误,检查一下
    0 回复
  • 李二三
    2020-2-6
    @晒太阳的魚
     //格式化时间类型
    function getFDate(date) {
    var d = eval('new ' + date.substr(1, date.length - 2));
    var ar_date = [d.getFullYear(), d.getMonth() + 1, d.getDate()];
    for (var i = 0; i < ar_date.length; i++) ar_date[i] = dFormat(ar_date[i]);
    return ar_date.join('-');
    }
    function dFormat(i) {
    return i < 10 ? "0" + i.toString() : i;
    }




    用了这个格式化时间方法就会报错。。。



    可能跟里边的eval冲突吧?
    0 回复
  • 李二三
    2020-2-6
    后台数据先格式化了
    问题记录一下:
    格式化时间 "/Date(1577721600000)/" 时,
    function getFDate(date) {
    var d = eval('new ' + date.substr(1, date.length - 2));
    var ar_date = [d.getFullYear(), d.getMonth() + 1, d.getDate()];
    for (var i = 0; i < ar_date.length; i++) ar_date[i] = dFormat(ar_date[i]);
    return ar_date.join('-');
    }
    function dFormat(i) {
    return i < 10 ? "0" + i.toString() : i;
    }
    自定义列用了这个之后,开启分页就会报错,路过的大佬看看啥问题啊
    0 回复
  • 这个就不太懂了,肯定是你格式化时间的地方出错了,并不是开启合计导致的。检查下你格式化时间的方法把
    0 回复
  • 李二三
    2020-2-6
    @岁月小偷 看了您的解释,果断是合计行也当成一行数据,去进行templet计算了,直接爆炸[挖鼻] ,已解决nice!!!
    0 回复
  • @岁月小偷 请问表格的下拉列表怎么弄,单击单元格,出现下拉列表,然后选中下拉列表的数据填充回去,然后收起下拉列表
    0 回复