Browse Source

table: [修复] 合计行自定义模板后,未优先读取后端返回的合计数据的问题

pull/1077/head
贤心 2 years ago
parent
commit
7ae590daec
  1. 6
      examples/table-test.html
  2. 60
      src/modules/table.js

6
examples/table-test.html

@ -163,7 +163,7 @@ layui.use(['table', 'dropdown'], function(){
return td.find('select').val();
}}
,{field:'sign', title:'签名', minWidth: 200, style:'color: #5FB878', edit: 'textarea'}
,{field: 'experience', title: '积分', width: 100, sort: true, align:'center', totalRow: !1 ? '{{=d.LAY_COL.field}}' : '{{= d.TOTAL_NUMS }} 分 😊', templet: '<div><a href="" class="layui-table-link">{{ d.experience }}</a></div>'}
,{field: 'experience', title: '积分', width: 100, sort: true, align:'center', totalRow: !1 ? true : '{{= d.TOTAL_NUMS }} 分 😊', templet: '<div><a href="" class="layui-table-link">{{= d[d.LAY_COL.field] }}</a></div>'}
,{field:'ip', title:'IP', width: 120, align: 'right'}
,{field:'checkin', title:'打卡', width: 100, sort: true, totalRow: '{{= parseInt(d.TOTAL_NUMS) }} 次'}
,{field:'joinTime', title:'加入时间', width: 120}
@ -405,7 +405,7 @@ layui.use(['table', 'dropdown'], function(){
}, function(value, index){
obj.update({
email: value
});
}, true);
/*
// 上述 obj.update() 只是在前端临时更新数据视图
// 在实际业务中,当发送修改请求成功后,可再执行 reloadData 来重载数据
@ -448,7 +448,7 @@ layui.use(['table', 'dropdown'], function(){
var update = {};
update[field] = value;
obj.update(update);
obj.update(update, true);
});
});
</script>

60
src/modules/table.js

@ -1144,16 +1144,16 @@ layui.define(['laytpl', 'laypage', 'form', 'util'], function(exports){
}
};
//数据合计行
// 数据合计行
Class.prototype.renderTotal = function(data, totalRowData){
var that = this
,options = that.config
,totalNums = {};
var that = this;
var options = that.config;
var totalNums = {};
if(!options.totalRow) return;
layui.each(data, function(i1, item1){
//若数据项为空数组,则不往下执行(因为删除数据时,会将原有数据设置为 [])
// 若数据项为空数组,则不往下执行(因为删除数据时,会将原有数据设置为 [])
if(layui.type(item1) === 'array' && item1.length === 0) return;
that.eachCols(function(i3, item3){
@ -1172,55 +1172,59 @@ layui.define(['laytpl', 'laypage', 'form', 'util'], function(exports){
that.eachCols(function(i3, item3){
var field = item3.field || i3;
//td 内容
// 合计数据的特定字段
var TOTAL_NUMS = totalRowData && totalRowData[item3.field];
// td 内容
var content = function(){
var text = item3.totalRowText || ''
,decimals = 'totalRowDecimals' in item3 ? item3.totalRowDecimals : 2
,thisTotalNum = parseFloat(totalNums[field]).toFixed(decimals)
,tplData = {
var text = item3.totalRowText || '';
var decimals = 'totalRowDecimals' in item3 ? item3.totalRowDecimals : 2;
var thisTotalNum = parseFloat(totalNums[field]).toFixed(decimals);
var tplData = {
LAY_COL: item3
}
,getContent;
};
tplData[field] = thisTotalNum;
//获取自动计算的合并内容
getContent = item3.totalRow ? (parseTempData.call(that, {
// 获取自动计算的合并内容
var getContent = item3.totalRow ? (parseTempData.call(that, {
item3: item3
,content: thisTotalNum
,tplData: tplData
}) || text) : text;
//如果直接传入了合计行数据,则不输出自动计算的结果
return totalRowData ? (totalRowData[item3.field] || getContent) : getContent;
}()
,td = ['<td data-field="'+ field +'" data-key="'+ options.index + '-'+ item3.key +'" '+ function(){
// 如果直接传入了合计行数据,则不输出自动计算的结果
return TOTAL_NUMS || getContent;
}();
// td 容器
var td = ['<td data-field="'+ field +'" data-key="'+ options.index + '-'+ item3.key +'" '+ function(){
var attr = [];
if(item3.align) attr.push('align="'+ item3.align +'"'); //对齐方式
if(item3.minWidth) attr.push('data-minwidth="'+ item3.minWidth +'"'); //单元格最小宽度
if(item3.align) attr.push('align="'+ item3.align +'"'); // 对齐方式
if(item3.minWidth) attr.push('data-minwidth="'+ item3.minWidth +'"'); // 单元格最小宽度
return attr.join(' ');
}() +' class="'+ function(){ //追加样式
}() +' class="'+ function(){ // 追加样式
var classNames = [];
if(item3.hide) classNames.push(HIDE); //插入隐藏列样式
if(!item3.field) classNames.push(ELEM_COL_SPECIAL); //插入特殊列样式
if(item3.hide) classNames.push(HIDE); // 插入隐藏列样式
if(!item3.field) classNames.push(ELEM_COL_SPECIAL); // 插入特殊列样式
return classNames.join(' ');
}() +'">'
,'<div class="layui-table-cell laytable-cell-'+ function(){ //返回对应的CSS类标识
,'<div class="layui-table-cell laytable-cell-'+ function(){ // 返回对应的CSS类标识
var str = (options.index + '-' + item3.key);
return item3.type === 'normal' ? str
: (str + ' laytable-cell-' + item3.type);
}() +'"'+ function(){
var attr = [];
if(item3.style) attr.push('style="'+ item3.style +'"'); //自定义单元格样式
if(item3.style) attr.push('style="'+ item3.style +'"'); // 自定义单元格样式
return attr.join(' ');
}() +'>' + function(){
var totalRow = item3.totalRow || options.totalRow;
//如果 totalRow 参数为字符类型,则解析为自定义模版
// 如果 totalRow 参数为字符类型,则解析为自定义模版
if(typeof totalRow === 'string'){
return laytpl(totalRow).render($.extend({
TOTAL_NUMS: totalNums[field]
,LAY_COL: item3
TOTAL_NUMS: TOTAL_NUMS || totalNums[field],
LAY_COL: item3
}, item3));
}
return content;

Loading…
Cancel
Save