You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.4 KiB

5 years ago
/**
* DataTable二次封装
* @author [刘耀填]
* @date 2018-10-08
*/
define(['constant', 'utils'], function(constant, utils){
var table = {
"instance": null,
"api": '',
"queryParams": {}
};
// 初始化Datatables实例 并 绑定行点击事件
function init(option) {
var tableId = option.id;
var $table = $('#' + tableId);
var ajaxFun = option.ajax;
if (typeof ajaxFun !== "function") {
var ajaxSetting = option.ajaxSetting;
if (typeof ajaxSetting.api === 'string') {
table.queryParams = ajaxSetting.queryParamsDefault || {};
table.api = ajaxSetting.api;
ajaxFun = createAjaxFun;
} else {
alert('ajaxSetting配置错误');
}
}
table.instance = $table.DataTable({
"select": false,
"scrollX": option.scrollX,
"scrollY": option.scrollY,
"language": constant.DATATABLE_LANGUAGE,
"processing": true, // 加载提示
"serverSide": true, // 启用服务器端分页
"searching": option.searching, // 禁用原生搜索
"orderMulti": false, // 启用多列排序
"ordering": false, // 排序查询
/*"autoWidth": false,*/
"lengthMenu": [15, 30, 50], // 每页显示条数默认10
"bLengthChange": true,
"pagingType": "full_numbers", // 分页样式simple,simple_numbers,full,full_numbers
"ajax": ajaxFun,
"rowId": option.rowId ? option.rowId : "id",
"columns": option.columns
});
// 行点击事件
$table.find('tbody').on('click', 'tr', function () {
$(this)
.addClass('selected')
.siblings('.selected').removeClass('selected'); // 高亮显示
});
return table.instance;
}
function createAjaxFun(data, callback, settings) {
var ajaxOption = {
type: 'post',
contentType: 'application/json;charset=UTF-8',
url: table.api + "?rows=" + data.length + "&page=" + (data.start / data.length + 1),
data: JSON.stringify(table.queryParams),
success: function (ret) {
if (ret.code === 200) {
var data = ret.obj;
var tableData = data.items || []; // 无记录返回为null需要处理为[]
var callbackJson = {
'recordsTotal': data.totalNum, // 总记录数,分页显示用
'recordsFiltered': data.totalNum, // 过滤后的总记录数
'data': tableData // 表格填充用的数据
};
callback(callbackJson);
} else {
layer.msg('获取记录失败!(' + ret['msg'] + ')', {icon: 2});
}
}
};
utils.ajax(ajaxOption);
}
// 重新加载表格数据
function reload(params) {
table.queryParams = params || table.queryParams; // 使用createAjaxFun时才需要外部传参
table.instance.ajax.reload(); // 重新加载表格数据
}
// 刷新当前页数据
function refresh() {
table.instance.draw(false);
}
return {
'init':init,
'reload': reload,
'refresh': refresh
}
});