/**
*
* datatable.service.js
*/
(function() {
'use strict';
angular.module('oplus.commons').service('dataTableService', dataTableService);
dataTableService.$inject = ['$localStorage'];
function dataTableService($localStorage) {
var PRECISE = 'precise', FUZZY = 'fuzzy';
var cookiedTable = [];
var tableOption = {
/*ajax: {
url: "", //默认为null该参数用来向DataTable指定加载的外部数据源(如果想使用现有的数据,请使用aData)可以简单的提供一个可以用来获得数据url或者JSON对象,该对象必须包含aaData,作为表格的数据源
type: "POST",
dataSrc: "aData"
},*/
"order": [],
"autoWidth": false, //是否自动计算表格各列宽度,计算列宽会花费一些时间,如果列宽通过aoColumns传递,可以关闭该属性作为优化
"deferRender": true, //是否启用延迟加载:当你使用AJAX数据源时,可以提升速度
"destroy": true, //使用传递的新的初始化对象中的属性构造一个新的表格,并替换一个匹配指定的选择器的表格,如果没有匹配到表格,新的表格会被作为一个普通表格被构建
"searching": true, //是否对数据进行过滤,数据过滤是十分灵活的,允许终端用户输入多个用空格分隔开的关键字
"jQueryUI": false, //开关,是否启用JQueryUI风格 注意这里改变了表格的样式 排序样式都由此处控制
"paging": true, //开关,是否显示分页器
"processing": true, //开关,以指定当正在处理数据的时候,是否显示“正在处理”这个提示信息
"bRestore": true,
"retrieve": false, //使用指定的选择器检索表格
"scrollCollapse": true, //当垂直滚动被允许的时候,DataTable会强制表格视图在任何时候都是给定的高度(对布局有利)当把数据集过滤到十分小的时候看起来会很古怪,而且页脚会留在最下面,当结果集的高度比给定的高度小时该参数会使表格高度自适应
"serverSide": false, //配置DataTable使用服务器端处理,注意,sAjaxSource参数必须指定,以便给DataTable一个为每一行获取数据的数据源
"stateSave": false, //开关,是否打开客户端状态记录功能。这个数据是记录在cookies中的,打开了这个记录后,即使刷新一次页面,或重新打开浏览器,之前的状态都是保存下来的
"dbConn": "", //自定义查询参数
"executeSql": "", //自定义查询参数
"stateDuration": 60 * 60 * 24 * 30, // 30 days 指定用于存储客户端信息到cookie中的时间长度,超过这个时间后,自动过期
"pageLength": 10, //用于指定一屏显示的条数,需开启分页器
// "aLengthMenu": [ 5, 10, 25, 50, 100 ],
"oLanguage": {
"sUrl": "vendor/datatables-1.10.15/zh_CN.json"
}, //国际化
"dom": '<"dataTables_header"<"dataTables_toolbar"><"dataTables_controls"RCT>f>t<"dataTables_footer row"<"col-md-6"li><"col-md-6"p>><"clearfix">',
"scrollX": "true", //是否开启水平滚动,以及指定滚动区域大小
// "sScrollXInner": "100%",//开启这个页码会在水平滚动条里面
"pagingType": "full_numbers", //分页样式
"oColVis": {
"sAlign": "left",
"buttonText": '<button class="btn btn-sm btn-outline btn-info m-b-xxs" id="tb-btn" data-toggle="tooltip" data-placement="bottom" title="选择显示列"><i class="icon fa fa-columns"></i></button>',
"sRestore": "Reset"
},
"buttons": [{
extend: 'excelHtml5',
text: '<i class="fa fa-download" title="导出excel"></i>',
className: 'btn btn-sm btn-outline btn-info m-r-sm m-b-xxs'
}],
"oTableTools": {
"aButtons": prepareToolButtons(null)
},
"createdRow": function(nRow, aData, iDataIndex) {
var $row = $(nRow);
$row.attr('id', iDataIndex);
$row.attr('data-position', iDataIndex);
},
"drawCallback": function(settings) {
$('.dataTables_filter input').addClass('form-control input-sm');
//adjustColumnWidth();
},
"initComplete": function(settings) {
//theTable.fnSetFilteringDelay(400);
//<#-- Export -->
this.api().columns.adjust();
if(this.colResize) {
this.colResize.redraw();
}
$('a[data-toggle="export"]').on('click', function(e) {
e.preventDefault();
});
addCustomFilter();
}
};
function addCustomFilter() {
if ($.fn.dataTable.ext.search.length === 0) {
// console.log('Add custom filter search');
$.fn.dataTable.ext.search.push(
function customFilter(settings, data, dataIndex) {
var filter = settings._customFilter || {
};
if (!filter) {
return true;
}
if (!filter.content) {
return true;
}
var caseSensitive = !!filter.case;
var columnIndex = filter.column;
var toFilter = data[columnIndex];
if (!caseSensitive) {
toFilter = toFilter.toLowerCase();
}
var records = filter.content.split('\n');
var match = _.find(records, function (s) {
if (!caseSensitive) {
s = s.toLowerCase();
}
if (filter.type === FUZZY) {
return toFilter.indexOf(s) > -1;
} else if (filter.type === PRECISE) {
return toFilter === s;
}
});
return !!match;
}
);
}
}
//组装导出按钮和内容
function prepareToolButtons(option) {
if(option == null) {
return;
}
var aButtons = [];
if(option.printable) {
//打印
aButtons.push({
"sExtends": "text",
"sButtonText": '<i class="fa fa-external-link" data-toggle="tooltip" data-placement="bottom" title="导出"></i>',
"fnClick": function(nnButton, oConfig, oFlash) {
exportExcel(option);
}
});
}
if(!isBlank(option.id)) {
//指定table id
aButtons.push({
"sExtends": "text",
"sButtonText": '<i class="fa fa-refresh" data-toggle="tooltip" data-placement="bottom" title="刷新"></i>',
"fnClick": function(nnButton, oConfig, oFlash) {
refreshTable(option.id);
}
});
}
return aButtons;
}
//导出
function exportExcel(option) {
var form = $("<form>"); //定义一个form表单
form.attr("style", "display:none");
form.attr("target", "");
form.attr("method", "post");
form.attr("action", "/ngap/api/custom/export/datasource");
$("body").append(form); //将表单放置在web中
var userId = $localStorage.context.user == null ? "None" : $localStorage.context.user.id;
var userIdInput = $("<input>");
userIdInput.attr("type", "hidden");
userIdInput.attr("name", userId);
userIdInput.attr("value", "default");
form.append(userIdInput);
var tableId = option.id;
var datasourceId = option.datasourceId;
var datasourceType = option.datasourceType;
if(!isBlank(datasourceId)) {
//导出表格
var datasourceIdInput = $("<input>");
datasourceIdInput.attr("type", "hidden");
datasourceIdInput.attr("name", "datasourceId");
datasourceIdInput.attr("value", datasourceId);
form.append(datasourceIdInput);
} else if(!isBlank(datasourceType)) {
//导出未保存的数据源
var datasourceTypeInput = $("<input>");
datasourceTypeInput.attr("type", "hidden");
datasourceTypeInput.attr("name", "datasourceType");
datasourceTypeInput.attr("value", datasourceType);
form.append(datasourceTypeInput);
if(datasourceType == "database") {
//sql类型
var dbConnInput = $("<input>");
dbConnInput.attr("type", "hidden");
DataTable封装
最新推荐文章于 2021-12-08 11:21:39 发布