define(['jquery', 'table'], function ($, Table) {
/**
* 事件顺序
pre-body.bs.table
post-header.bs.table
reset-view.bs.table
post-body.bs.table
editable-init.bs.table
load-success.bs.table
*/
var filesource = window.location.href;
var defaultconfig = {
//lineheight:'35px',//默认的行高度,为解决fixcolumn插件高度问题会造成错位的问题 v2.1.8 修复配置fixcolumns时,出现左边固定栏的高度与原表格不一致的问题@commented by chensm
stickyHeaderleft: "30px", //表头固定的居左位置,为解决fixheader插件表头错位的问题
sortableHeaderFixedwidth: 50, //排序的表头箭头宽度,为解决sortable插件的排序箭头遮挡表头的问题,
remoteselectpagesize: 10, //下拉框选择默认条数
};
var globaldata = null; //control返回的data数据 {total: 10011,totalviews: 1530,rows:[]} load-success.bs.table写入
var fielddatas = []; //需要转ID转name的Field字段 {admin_id=>["ID#1"=>"xxxxxxxx"]} load-success.bs.table写入
var post_body_json = null; //post-body.bs.table 写入,计算合计用
Table.api.bindevent_orignal = Table.api.bindevent;
Table.api.init_orignal = Table.api.init;
Table.api.init = function (defaults, columnDefaults, locales) {
this.init_orignal(defaults, columnDefaults, locales);
}
function htmlEscape(str) {
str = str + "";
return str.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
Table.api.bindevent = function (table) {
var that = this;
this.bindevent_orignal(table);
var options = table.bootstrapTable('getOptions');
//异步下载
if (true) {
if (options.asyndownload != null && options.asyndownload === true) {
//添加下载button
//$(table).parent().parent().before('\
$("#toolbar").append('\
\
\
\
\
');
//显示下载按钮当前状态
var si = null;
var sifunc = function (time) {
setTimeout(function () {
//console.log('sifunc setTimeout='+time);
Fast.api.ajax({
//url: window.Config.__CDN__+"/addons/csminvite/indexajax/getInviteInfo",
url: Fast.api.fixurl("csmtable/csmxlstable/queryGenerageStatus"),
type: "post",
data: {
filesource: filesource
},
loading: false
}, function (data, ret) {
//console.log(data.row);
if (data != null && data.row != null) {
if (data.row.progress >= 100) {
$(".csmtable-readydownload").css("display", "none");
$(".csmtable-downloadexcel").css("display", "none");
$(".csmtable-downloadexcelfile").css("display", "inline");
$(".csmtable-downloadexcelfile").text("Excel表格生成完成,点击下载文件。(Excel表格生成时间:" + data.row.createtime + ")");
$(".csmtable-downloadexcelfile").attr("data-fileid", data.row.id);
$(".csmtable-generateexcel").text("重新导出");
return false;
} else {
$(".csmtable-readydownload").css("display", "none");
$(".csmtable-downloadexcel").css("display", "inline");
$(".csmtable-downloadexcelfile").css("display", "none");
if (data.row.iserror != null && data.row.iserror == 'Y') {
$(".csmtable-downloadexcel").text("下载报错,原因:" + data.row.errormsg);
} else {
$(".csmtable-downloadexcel").text("正在下载中,下载进度:" + data.row.progress + "%");
sifunc(4000);
return false;
}
}
} else {
//sifunc(4000);
}
return false;
});
}, time);
}
sifunc(1000);
$(".csmtable-downloadexcelfile").click(function () {
var fileid = $(".csmtable-downloadexcelfile").attr("data-fileid");
window.open(Fast.api.fixurl("csmtable/csmxlstable/download") + "?id=" + fileid);
});
//绑定下载按钮
$(".csmtable-generateexcel").click(function () {
$(".csmtable-readydownload").css("display", "inline");
$(".csmtable-downloadexcel").css("display", "none");
$(".csmtable-downloadexcelfile").css("display", "none");
var columns = table.bootstrapTable('getOptions').columns[0];
//chensm@20200606 检查table的数据
//如果column的field有重复,则报错,不允许下载
if (true) {
var cc = [];
for (var i in columns) {
var ff = columns[i]['field'];
//console.log("===>"+ff+"="+cc[ff]);
if (cc[ff] != null && cc[ff] != '') {
alert('table中:' + ff + '重复,无法下载,先修改JS再下载!');
return;
}
cc[ff] = columns[i]['field'];
}
}
sifunc(1000);
columnjson = [];
for (var i in columns) {
var column = columns[i];
if (column.checkbox != null && column.checkbox == true) {
continue;
}
if (column.visible != null && column.visible == false) {
continue;
}
if (column.field == 'operate') {
continue;
}
var formatter = column['formatter'];
if (formatter == Table.api.formatter.datetime) {
formatter = "Table.api.formatter.datetime";
} else {
formatter = "";
}
columnjson.push({
"field": column['field'],
"title": column['title'],
"datasource": column['datasource'],
"datafield": column['datafield'],
"datasourcealias": column['datasourcealias'],
"formatter": formatter,
"searchList": (column['datasource'] != null && column['datasource'] != '') ? "" : column['searchList'],
'operate': column['operate'],
});
}
//console.log(columnjson);
var opt = {
silent: true,
query: {
csmtable_method: 'download_excel',
csmtable_columns: JSON.stringify(columnjson),
csmtable_filesource: filesource,
}
};
$("#table").bootstrapTable('refresh', opt);
// v2.2.5
// Fast.api.ajax({
// url: Fast.api.fixurl("csmtable/csmgenerate/generate"),
// type: "post",
// data: {
// csmtable_columns: JSON.stringify(columnjson),
// csmtable_filesource: filesource,
// csmtable_indexurl:table.bootstrapTable.defaults.extend.index_url,
// },
// loading:false,
// }, function (data, ret) {
// return false;
// }, function () {
// return false;
// });
});
}
} //end if
//var options = table.bootstrapTable('getOptions');
var columns = options.columns[0];
var columnwithdatasources = {};
// table.on('all.bs.table', function (args,name) {
// console.log('----->',name,args);
// });
//在表格内容渲染完成后回调的事件,显示合计 & 修复高度
table.on('post-body.bs.table', function (settings, json, xhr) {
post_body_json = json;
//var options = table.bootstrapTable('getOptions');
//v2.1.8 修复配置fixcolumns时,出现左边固定栏的高度与原表格不一致的问题@commented by chensm
//修复高度:fixcolumn高度问题会造成错位的问题
// if(false){
// let vv = options.lineheight;
// vv = (vv==null||vv=='')?defaultconfig['lineheight']:vv;
// $(table).find('td').css('height',vv);
// $(table).find('th').css('height',vv);
// $(table).find('th').css('background-color','white');
// }
//修复fixheader表头错位的问题
if (true) {
let vv = options.stickyHeaderleft;
vv = (vv == null || vv == '') ? defaultconfig['stickyHeaderleft'] : vv;
$("#table-sticky-header-sticky-header-container").css('left', vv);
//2.1.6 修复在fa_1.2.0.20201008版本中固定列出现滚动条的问题
//$("#table-sticky-header tr").css('height','49px');
// var l=document.querySelector('.fixed-table-body');
// var r=document.querySelector('.fixed-table-container');
// l.addEventListener('scroll',function(){
// console.log('-----1');
// r.scrollTop = l.scrollTop;
// });
}
//修复sortable排序箭头遮挡标题文字的问题
if (true) {
for (var i = 0, j = columns.length; i < j; i++) {
var column = columns[i];
//如果未定义width,则修复sortable排序箭头遮挡标题文字的问题
if (column.width == null || column == '') {
if (column.sortable != null && column.sortable == true) {
// 2.2.7 修复column在sortable开启时,a.b格式字段出现JS的报错问题
var obj = $("th[data-field='" + column.field + "']");
if (obj == null || obj.css("width") == null) {
continue;
}
var width = (obj.css("width")).replace('px', '');
width = parseInt(width) + defaultconfig.sortableHeaderFixedwidth;
width = (width == null || width == '' || width == 0) ? '200px' : width;
obj.css('width', width + 'px');
obj.css('min-width', width + 'px');
column.width = width + 'px';
}
}
}
}
//处理treegrid,避免自己添加onPostBody方法
if (true) {
let treeGrid = options.treeGrid;
if (treeGrid != null && treeGrid == true) {
var treeColumn = -1;;
for (var i = 0, j = columns.length; i < j; i++) {
if (columns[i].field == options.treeShowField) {
treeColumn = i;
}
}
table.treegrid({
treeColumn: treeColumn,
onChange: function () {
table.bootstrapTable('resetWidth');
}
});
}
}
//editable增强
if (true) {
for (var i = 0, j = columns.length; i < j; i++) {
if (columns[i].editable != null && columns[i].editabletype != null) {
let datafield = columns[i].datafield;
datafield = (datafield == null || datafield == '') ? 'name' : datafield;
switch (columns[i].editabletype) {
case 'dict_select':
let editablesource = []; //[{value: 'male', text: __('Genderdata male')}]
for (let key in columns[i].searchList) {
let value = columns[i].searchList[key];
editablesource.push({
value: key,
text: value
});
}
columns[i].formatter = null;
columns[i].editable = {
type: 'select',
source: editablesource,
title: '请选择',
onblur: 'ignore',
};
break;
case 'remote_select':
columns[i].editable = {
type: 'select2',
title: '请选择',
onblur: 'ignore',
pk: columns[i]['field'],
display: function (value, sourceData) {
//修复select2选择后,回写是id,而不是name
//由于select2 editable修改后返回的是id,所以需要修正为名称
//只有当前editable修改返回,才需要执行此逻辑:通过当前dom节点和修改过来的节点不一样,来判断
if (true) {
let fieldname = $(this).attr("data-name");
let fieldvalue = $(this).attr("data-value");
let that = this;
//chensm@20200603 修复了id为空造成js报错
if (fieldvalue != null && value != null && fieldvalue != value) {
//console.log(fieldvalue,value,datasourceobj);
var datasourceobj = columnwithdatasources[fieldname];
$.ajax({
dataType: 'json',
type: 'get',
url: Fast.api.fixurl(datasourceobj.datasource),
data: {
filter: '{"id":"' + value + '"}',
op: '{"id":"="}'
},
success: function (json) {
//console.log(json);
for (var index in json.rows) {
$(that).html(htmlEscape(json.rows[index][datasourceobj.datafield]));
}
},
});
}
}
$(this).html(htmlEscape(value));
},
select2: {
ajax: {
url: Fast.api.fixurl(columns[i].datasource),
allowClear: true,
multiple: false,
minimumInputLength: 1,
data: function (params) {
var query = {
filter: '{"' + datafield + '":"' + (params.term == null ? '' : params.term) + '"}',
op: '{"' + datafield + '":"like"}',
offset: params.offset + 1 || 0,
limit: defaultconfig.remoteselectpagesize,
};
params.offset = query.offset;
params.limit = query.limit;
return query;
},
processResults: function (data, params) {
var results = [];
var pagination = null;
if (data != null) {
//console.log("processResults",data.rows);
for (var ii = 0, jj = data.rows.length; ii < jj; ii++) {
results.push({
id: data.rows[ii].id,
text: data.rows[ii][datafield]
});
}
var total = data.total;
var offset = params.offset || 0;
if (total > (offset + 1) * params.limit) {
pagination = {
"more": true
};
}
}
//console.log(results);
return {
results: results,
pagination: pagination
};
},
},
},
};
break;
default:
columns[i].editable = {
type: 'select',
source: editablesource,
title: '请选择',
onblur: 'ignore',
display: function (value, sourceData) {
$(that).html(htmlEscape(value));
},
};
break;
} //swith
}
//}
}
} //end true
var countFieldCount = 0;
//显示合计
if (true) {
var tds = "";
var tiphtml = "";
let isfoundshowsum = false;
for (var i = 0, j = columns.length; i < j; i++) {
var column = columns[i];
// v2.1.5_20200921@修复showcolumns:true的情况下,用户自己隐藏字段,会造成合计错位的问题
if (column.visible === false) {
continue;
}
if (column.showsum != null && column.showsum == true) {
isfoundshowsum = true;
var sum = 0;
var tiphtmlpend = "";
if (column.sumfield != null && column.sumfield != '') {
if (globaldata != null) {
sum = globaldata[column.sumfield];
}
} else {
for (var ii = 0, jj = post_body_json.length; ii < jj; ii++) {
var vv = post_body_json[ii][column.field];
sum = utils.floatAdd(sum, parseFloat((vv == null || vv == '') ? '0' : vv));
}
tiphtmlpend = "";//"(当前页面合计)2";
}
tiphtml += "" + column.title + ":" + sum + "" + tiphtmlpend + "
";
tds += "