2 Wrapper/Helper Class for datagrid based on jQuery Datatable Plugin
\r
4 var DatatableICT = function () {
\r
6 var tableOptions; // main options
\r
7 var dataTable; // datatable object
\r
8 var table; // actual table jquery object
\r
9 var tableContainer; // actual table container object
\r
10 var tableWrapper; // actual table wrapper jquery object
\r
11 var tableInitialized = false;
\r
12 var ajaxParams = []; // set filter mode
\r
14 var xsHiddenColumns;
\r
15 var smHiddenColumns;
\r
16 var columnMaxLength = 30;
\r
18 var hidden_xs_maxWidth = 768;
\r
19 var hidden_sm_maxWidth = 991;
\r
21 var openRowFlag = false;
\r
22 var rowOverFlag = false;
\r
23 var rowCheckable = false;
\r
26 var sTotalRecordsSource;
\r
29 var includedInXsHiddenColumns = function(columnId){
\r
30 for(var i=0;i<xsHiddenColumns.length; i++ ){
\r
31 var column = xsHiddenColumns[i];
\r
32 if(columnId == column.columnId){
\r
39 var includedInSmHiddenColumns = function(columnId){
\r
40 for(var i=0;i<smHiddenColumns.length; i++ ){
\r
41 var column = smHiddenColumns[i];
\r
42 if(columnId == column.columnId){
\r
49 var countSelectedRecords = function() {
\r
50 var selected = $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();
\r
51 var text = tableOptions.dataTable.oLanguage.sGroupActions;
\r
53 $('.table-group-actions > span', tableWrapper).text(text.replace("_TOTAL_", selected));
\r
55 $('.table-group-actions > span', tableWrapper).text("");
\r
59 var jsonObjectToArray = function(json, columns, iDraw){
\r
60 var jsonToDatatable = {aaData:[], sEcho:iDraw, iTotalRecords:0, iTotalDisplayRecords:0 };
\r
61 for(var i=0; i<json.response.data.length; i++){
\r
62 jsonToDatatable.aaData[i] = [];
\r
63 var resRowObject = json.response.data[i];
\r
65 jsonToDatatable.aaData[i].push("<input type=\"checkbox\" name=\"id[]\" value=\"1\">");
\r
68 jsonToDatatable.aaData[i].push("<span class=\"row-details row-details-close\"></span>");
\r
70 for(var j=0; j<columns.length; j++){
\r
72 if($(window).width() >= hidden_xs_maxWidth && $(window).width() < hidden_sm_maxWidth && includedInSmHiddenColumns(columns[j].columnId )){
\r
74 }else if($(window).width() < hidden_xs_maxWidth && includedInXsHiddenColumns(columns[j].columnId )){
\r
77 var currentColumnId = columns[j].columnId;
\r
78 if(jQuery.inArray(currentColumnId, columnsTooLong) > -1){
\r
80 for(var k=0;k<columnsTooLong.length;k++){
\r
81 if(currentColumnId == columnsTooLong[k]){
\r
82 rawText = resRowObject[currentColumnId];
\r
86 if(rawText.length > columnMaxLength){
\r
87 jsonToDatatable.aaData[i].push(rawText.slice(0, columnMaxLength) + '...');
\r
89 jsonToDatatable.aaData[i].push(resRowObject[currentColumnId]);
\r
92 jsonToDatatable.aaData[i].push(resRowObject[currentColumnId]);
\r
98 jsonToDatatable.sEcho++;
\r
100 var totalRecordsSource = eval('json.' + sTotalRecordsSource);
\r
101 if(totalRecordsSource && totalRecordsSource.length >0){
\r
102 totalRow = parseInt(totalRecordsSource);
\r
104 if(isNaN(totalRow)){
\r
105 alert('All rows counting number got fail!');
\r
107 jsonToDatatable.iTotalRecords = totalRow;
\r
108 jsonToDatatable.iTotalDisplayRecords = totalRow;
\r
110 return jsonToDatatable;
\r
113 var singleAlarmDel = function(divOverlay){
\r
115 //根据浮动框的当前id获取需要删除的行
\r
116 var trId = divOverlay.attr('id_tr');
\r
117 tr=$('tr#' + trId);
\r
118 var tds = $(tr).children();
\r
119 var tdAlarmId = $(tds.eq(2)).text();
\r
122 "alarmId":[parseInt(tdAlarmId)]
\r
125 var sSource = "/web/rest/web/fm/curalarms?data=" + JSON.stringify(data) + "&_operationType=remove&_dataSource=isc_PageRestDataSource_0&isc_metaDataPrefix=_&isc_dataFormat=json";
\r
128 "dataType": 'json',
\r
132 "contentType" : 'application/json; charset=utf-8',
\r
133 "success": function(json) {
\r
134 if(json.response.status == 0){
\r
135 var resRowObject = json.response.data[0];
\r
138 if(json.response.status == -1){
\r
142 "error": function() {
\r
143 alert('Communication Error!');
\r
148 var singleAlarmAckUnAck = function(divOverlay, ackType){
\r
150 //根据浮动框的当前id获取需要确认的行
\r
151 var trId = divOverlay.attr('id_tr');
\r
152 var tr = $('tr#' + trId);
\r
155 var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable');
\r
156 //var trHead = $('tbody > tr:nth-child(' + trId + ')', $tableHead);
\r
157 var trHead = $('tr#' + trId.replace('body', 'head'), $tableHead);
\r
158 var tdDivs = $('td > div', trHead);
\r
160 var tds = $(tr).children();
\r
161 var tdAlarmId = "";
\r
163 tdAlarmId = $(tds.eq(2)).text();
\r
165 tdAlarmId = $(tds.eq(1)).text();
\r
170 "dataSource":"isc_PageRestDataSource_0",
\r
171 "operationType":"update",
\r
172 "componentId":"isc_com_zte_ums_aos_fm_view_eventview_table_AlarmTable_0",
\r
177 parseInt(tdAlarmId)
\r
183 var sSource = "/web/rest/web/fm/curalarms?isc_dataFormat=json";
\r
186 "dataType": 'json',
\r
189 "contentType": 'application/json; charset=utf-8',
\r
190 "data": JSON.stringify(aoData),
\r
191 "success": function(json) {
\r
192 json = AlarmLabels.transformFieldNames(json);
\r
193 if(json.response.status == 0){
\r
194 var resRowObject = json.response.data[0];
\r
195 var columnsCopy = $.extend(true, [], columns);
\r
197 if($(window).width()>=hidden_xs_maxWidth && $(window).width()<hidden_sm_maxWidth){
\r
199 for(var i=0;i<columns.length;i++){
\r
200 if(!includedInSmHiddenColumns(columns[i].columnId)){
\r
201 columnsCopy.push(columns[i]);
\r
204 } else if($(window).width()<hidden_xs_maxWidth){
\r
206 for(var i=0;i<columns.length;i++){
\r
207 if(!includedInXsHiddenColumns(columns[i].columnId)){
\r
208 columnsCopy.push(columns[i]);
\r
216 for(var i=iIndex;i<tds.length && (i-iIndex)<columnsCopy.length;i++){
\r
217 var currentColumnId = columnsCopy[i-iIndex].columnId;
\r
218 if(jQuery.inArray(currentColumnId, columnsTooLong) > -1) {
\r
220 for(var k=0;k<columnsTooLong.length;k++){
\r
221 if(currentColumnId == columnsTooLong[k]){
\r
222 rawText = resRowObject[currentColumnId];
\r
226 if(rawText.length > columnMaxLength){
\r
227 $(tds.eq(i)).html(rawText.slice(0, columnMaxLength) + '...');
\r
228 $(tdDivs.eq(i)).html(rawText.slice(0, columnMaxLength) + '...');
\r
230 $(tds.eq(i)).html(resRowObject[currentColumnId]);
\r
231 $(tdDivs.eq(i)).html(resRowObject[currentColumnId]);
\r
234 $(tds.eq(i)).html(resRowObject[currentColumnId]);
\r
235 $(tdDivs.eq(i)).html(resRowObject[currentColumnId]);
\r
239 for (var t = 0; t < dataTable.datas.length; t++) {
\r
240 var temp = dataTable.datas[t];
\r
241 if (temp.alarmId == resRowObject['alarmId']) {
\r
242 dataTable.datas[t] = resRowObject;
\r
247 if(json.response.status == -1){
\r
248 $('div#myModalConfirm').modal({
\r
252 $('span#alarm_number').html(tdAlarmId);
\r
255 $('span#aos_fm_alarm_opeater_ack_already').html($.i18n.prop('aos_fm_alarm_opeater_ack_already_ok'));
\r
257 $('span#aos_fm_alarm_opeater_ack_already').html($.i18n.prop('aos_fm_alarm_opeater_ack_already_un'));
\r
261 "error": function() {
\r
262 alert('Communication Error!');
\r
267 var addRowOverlap = function(){
\r
268 var $tableData = $('table#datatable_ajax');
\r
270 var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable');
\r
271 var trHeads = $tableHead.find('tr').get();
\r
272 $.each( trHeads, function( index, trHead ){
\r
273 $(trHead).attr('id', 'headTableTR' + index);
\r
276 var $divOverlay = $('div#divOverlay');
\r
277 var divScrollHead = $('div.dataTables_scrollHead');
\r
278 var divRightPadding = $('div#divRightPadding');
\r
280 var tableHeadBottomHeight = $(divScrollHead).position().top + $(divScrollHead).height();
\r
281 var tableBottom = $tableData.position().top + $tableData.height();
\r
283 var tableRightEdgePosition = $(divRightPadding).position().left;
\r
284 var trs = $tableData.find('tr').get();
\r
285 $.each( trs, function( index, tr ){
\r
286 var tdEmpty = $('td.dataTables_empty',tr);
\r
287 if(!tdEmpty || tdEmpty.length ==0 ){
\r
288 $(tr).attr('id', 'bodyTableTR' + index);
\r
289 //$divOverlay.attr('id_tr', 'bodyTableTR' + index);
\r
290 $(tr).one('hover', function(){
\r
291 var rowPos = $(tr).position();
\r
292 var currentTrTop = rowPos.top;
\r
293 //var bottomLeft = rowPos.left;
\r
294 $divOverlay.attr('id_tr', 'bodyTableTR' + index);
\r
297 position: 'absolute',
\r
298 'background-color': '#e5e5e5',
\r
300 border: 'solid 0px',
\r
301 top: currentTrTop + 6,
\r
302 left: tableRightEdgePosition - 308,
\r
307 if( $divOverlay.position().top < tableHeadBottomHeight || $divOverlay.position().top + $divOverlay.height() > tableBottom){
\r
308 $divOverlay.css('display', 'none');
\r
310 var buttonConfirm = $('div#buttonConfirm', $divOverlay);
\r
311 var buttonUnConfirm = $('div#buttonUnConfirm', $divOverlay);
\r
312 $(buttonConfirm).one('click', function(){
\r
313 var buttonRoundedTDsConfirm = $(buttonConfirm).find('td.buttonRounded');
\r
314 var buttonRoundedTDsUnConfirm = $(buttonUnConfirm).find('td.buttonRoundedDisabled');
\r
315 if(buttonRoundedTDsConfirm && buttonRoundedTDsConfirm.length > 0){
\r
316 $.each(buttonRoundedTDsConfirm, function(index, td){
\r
317 $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');
\r
319 $.each(buttonRoundedTDsUnConfirm, function(index, td){
\r
320 $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');
\r
322 $divOverlay.css('display', 'none');
\r
323 singleAlarmAckUnAck($divOverlay, 1);
\r
326 $(buttonUnConfirm).one('click', function(){
\r
327 var buttonRoundedTDsUnConfirm = $(buttonUnConfirm).find('td.buttonRounded');
\r
328 var buttonRoundedTDsConfirm = $(buttonConfirm).find('td.buttonRoundedDisabled');
\r
329 if(buttonRoundedTDsUnConfirm && buttonRoundedTDsUnConfirm.length > 0){
\r
330 $.each(buttonRoundedTDsUnConfirm, function(index, td){
\r
331 $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');
\r
333 $.each(buttonRoundedTDsConfirm, function(index, td){
\r
334 $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');
\r
336 $divOverlay.css('display', 'none');
\r
337 singleAlarmAckUnAck($divOverlay, 2);
\r
340 var buttonDelete = $('div#buttonDelete', $divOverlay);
\r
341 $(buttonDelete).die().live('click', function(){
\r
343 $('div#myModal').modal({
\r
347 $('#delConfirm').die().live('click', function(){
\r
348 $divOverlay.css('display', 'none');
\r
349 dataTable.fnClose(tr);
\r
352 $('tr#' + $(tr).attr('id').replace('body', 'head'), $tableHead).remove();
\r
354 singleAlarmDel($divOverlay);
\r
356 dataTable.fnAdjustColumnSizing();
\r
360 $('td.details > table.detailTable').on('hover', function(){
\r
361 $divOverlay.css('display', 'none');
\r
370 //main function to initiate the module
\r
371 init: function (options, columnsDefined, xsHiddenColumnsDefined, smHiddenColumnsDefined) {
\r
373 if (!$().dataTable) {
\r
381 var targetsLength = columnsDefined.length;
\r
382 if(rowCheckable)targetsLength++;
\r
383 if(openRowFlag)targetsLength++;
\r
384 for(var i=0;i<targetsLength;i++){
\r
387 aTargetsAll = aTargets;
\r
389 // default settings
\r
390 options = $.extend(true, {
\r
391 src: "", // actual table
\r
392 filterApplyAction: "filter",
\r
393 filterCancelAction: "filter_cancel",
\r
394 resetGroupActionInputOnSuccess: true,
\r
396 //"sDom" : "<'row'<'col-md-8 col-sm-12'pli><'col-md-4 col-sm-12'<'table-group-actions pull-right'>>r><'table-scrollable't><'row'<'col-md-8 col-sm-12'pli><'col-md-4 col-sm-12'>r>>", // datatable layout
\r
398 "aoColumnDefs" : [{ // define columns sorting options(by default all columns are sortable extept the first checkbox column)
\r
399 'bSortable' : false,
\r
400 'aTargets' : aTargets
\r
403 "bAutoWidth": false, // disable fixed width and enable fluid table
\r
404 //"bSortCellsTop": true, // make sortable only the first row in thead
\r
405 "sPaginationType": "bootstrap_extended", // pagination type(bootstrap, bootstrap_full_number or bootstrap_extended)
\r
406 "bProcessing": true, // enable/disable display message box on record load
\r
407 "bServerSide": true, // enable/disable server side ajax loading
\r
408 "sAjaxSource": "", // define ajax source URL
\r
409 //"sServerMethod": "GET",
\r
411 // handle ajax request
\r
412 "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
\r
414 //var startIndex = aoData[3].value;//"iDisplayStart"
\r
415 //var pageLength = aoData[4].value;//"iDisplayLength"
\r
416 var oPaging = oSettings.oInstance.fnPagingInfo();
\r
417 //var startIndex = oPaging.iStart;
\r
418 var pageLength = oPaging.iLength;
\r
419 var curPageNo = oPaging.iPage + 1;
\r
421 for(var k=aoData.length-1;k>=0;k--){
\r
423 if(aoData[k].name=='pageSize'){
\r
424 aoData[k].value=pageLength;
\r
427 if(aoData[k].name=='pageNo'){
\r
428 aoData[k].value=curPageNo;
\r
431 if(flag == 1)break;
\r
434 oSettings.jqXHR = $.ajax( {
\r
435 "dataType": 'json',
\r
439 "success": function(res, textStatus, jqXHR) {
\r
440 if (res.sMessage) {
\r
441 openoFrameWork.alert({type: (res.sStatus == 'OK' ? 'success' : 'danger'), icon: (res.sStatus == 'OK' ? 'check' : 'warning'), message: res.sMessage, container: tableWrapper, place: 'prepend'});
\r
443 if ($('.group-checkable', tableContainer).size() === 1) {
\r
444 $('.group-checkable', tableContainer).attr("checked", false);
\r
445 $.uniform.update($('.group-checkable', tableContainer));
\r
447 if (tableOptions.onSuccess) {
\r
448 tableOptions.onSuccess.call(the);
\r
450 //保存数据在dataTable对象中给行详细信息面板用
\r
451 dataTable.datas = res.response.data;
\r
452 if(res.response.status < 0){
\r
453 alert(res.response.data);
\r
458 res = AlarmLabels.transformFieldNames(res);
\r
460 res = jsonObjectToArray(res, columns, oSettings.iDraw);
\r
463 fnCallback(res, textStatus, jqXHR);
\r
465 "error": function() {
\r
466 if (tableOptions.onError) {
\r
467 tableOptions.onError.call(the);
\r
469 openoFrameWork.alert({type: 'danger', icon: 'warning', message: tableOptions.dataTable.oLanguage.sAjaxRequestGeneralError, container: tableWrapper, place: 'prepend'});
\r
470 $('.dataTables_processing', tableWrapper).remove();
\r
476 // pass additional parameter
\r
477 "fnServerParams": function ( aoData ) {
\r
478 //here can be added an external ajax request parameters.
\r
479 //for(var i in ajaxParams) {
\r
480 for(var i=0; i<ajaxParams.length; i++){
\r
481 var param = ajaxParams[i];
\r
482 aoData.push({"name" : param.name, "value": param.value});
\r
486 "fnDrawCallback": function( oSettings ) { // run some code on table redraw
\r
487 if (tableInitialized === false) { // check if table has been initialized
\r
488 tableInitialized = true; // set table initialized
\r
489 table.show(); // display table
\r
491 openoFrameWork.initUniform($('input[type="checkbox"]', tableContainer)); // reinitialize uniform checkboxes on each table reload
\r
492 countSelectedRecords(); // reset selected records indicator
\r
494 $('table#datatable_ajax').find('td').css('white-space', 'nowrap');
\r
497 var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);
\r
498 var tbodyHead = $('tbody', $tableHead);
\r
499 if(tbodyHead && tbodyHead.length >0){
\r
500 $(tbodyHead).remove();
\r
503 var $tableBody = $('table#datatable_ajax', tableWrapper);
\r
504 var trIn = $('thead > tr:nth-child(1)', $tableHead);
\r
505 var trBodyHead = $('thead > tr:nth-child(1)', $tableBody);
\r
506 var tds = $(trIn).children();
\r
507 var ths = $(trBodyHead).children();
\r
508 for(var k=0;k<tds.length;k++){
\r
509 $(ths.eq(k)).html('<div style="height: 0;overflow: hidden;">' + tds.eq(k).html() + '</div>');
\r
511 var bodyRows = $('tbody > tr', $tableBody);
\r
512 for(var i=0;i<bodyRows.length;i++){
\r
513 var rowClone = $(bodyRows.eq(i)).clone();
\r
514 var tds = $(rowClone).children();
\r
515 for(var j=0;j<tds.length;j++){
\r
516 $(tds.eq(j)).html('<div style="height: 0;overflow: hidden;">' + tds.eq(j).html() + '</div>');
\r
517 $(tds.eq(j)).height('0px');
\r
518 $(tds.eq(j)).css('padding-top','0px');
\r
519 $(tds.eq(j)).css('padding-bottom','0px');
\r
520 $(tds.eq(j)).css('border-top-width','0px');
\r
521 $(tds.eq(j)).css('border-bottom-width','0px');
\r
523 $(rowClone).height('0px');
\r
524 $tableHead.append($(rowClone).prop("outerHTML"));
\r
527 $('.dataTables_scrollBody').css('width','100%');
\r
528 $('.dataTables_scrollHead').css('width','98.5%');
\r
529 $('.dataTables_scrollHeadInner').css('padding-right', 0);
\r
537 $('div.dataTables_scrollBody').css('height', tableHeight);
\r
542 tableOptions = options;
\r
544 columns = columnsDefined;
\r
545 xsHiddenColumns = xsHiddenColumnsDefined;
\r
546 smHiddenColumns = smHiddenColumnsDefined;
\r
547 // create table's jquery object
\r
548 table = $(options.src);
\r
549 tableContainer = table.parents(".table-container");
\r
550 // apply the special class that used to restyle the default datatable
\r
552 $.fn.dataTableExt.oStdClasses.sWrapper = $.fn.dataTableExt.oStdClasses.sWrapper + " dataTables_extended_wrapper";
\r
554 // initialize a datatable
\r
555 dataTable = table.dataTable(options.dataTable);
\r
557 tableWrapper = table.parents('.dataTables_wrapper');
\r
559 // modify table per page dropdown input by appliying some classes
\r
560 $('.dataTables_length select', tableWrapper).addClass("form-control input-xsmall input-sm");
\r
562 // handle group checkboxes check/uncheck
\r
563 $('.group-checkable', tableContainer).change(function () {
\r
564 var set = $('tbody > tr > td:nth-child(1) input[type="checkbox"]', table);
\r
565 var checked = $(this).is(":checked");
\r
566 $(set).each(function () {
\r
567 $(this).attr("checked", checked);
\r
569 $.uniform.update(set);
\r
570 countSelectedRecords();
\r
573 // handle row's checkbox click
\r
574 table.on('change', 'tbody > tr > td:nth-child(1) input[type="checkbox"]', function(){
\r
575 countSelectedRecords();
\r
579 $('.dataTables_scrollHead').css('display','inline-block');
\r
580 //var dataTables_scrollHead_height = $('.dataTables_scrollHead').css( "height" );
\r
581 $(".dataTables_scrollHead").after("<div id='divRightPadding' style='overflow: hidden; background:#eee; position: relative; float:right; border: 1px solid #ddd; height:" + 38 + "px; width: 1.4%;'></div>");
\r
582 if($.browser.mozilla){
\r
583 $('#divRightPadding').css('height', '40');
\r
587 var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);
\r
588 var $tableBody = $('table#datatable_ajax', tableWrapper);
\r
590 for(var i=0;i<xsHiddenColumns.length;i++){
\r
591 for(var j=0;j<columns.length;j++){
\r
592 if(xsHiddenColumns[i].columnId == columns[j].columnId){
\r
593 $('thead > tr > th#' + columns[j].columnId, $tableHead).addClass('hidden-xs');
\r
594 $('thead > tr > th#' + columns[j].columnId, $tableBody).addClass('hidden-xs');
\r
600 for(var i=0;i<smHiddenColumns.length;i++){
\r
601 for(var j=0;j<columns.length;j++){
\r
602 if(smHiddenColumns[i].columnId == columns[j].columnId){
\r
603 $('thead > tr > th#' + columns[j].columnId, $tableHead).addClass('hidden-sm');
\r
604 $('thead > tr > th#' + columns[j].columnId, $tableBody).addClass('hidden-sm');
\r
609 },//end init------------------------------------------------------------------------------------
\r
611 getSelectedRowsCount: function() {
\r
612 return $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();
\r
615 getSelectedRows: function() {
\r
617 $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).each(function(){
\r
618 rows.push({name: $(this).attr("name"), value: $(this).val()});
\r
624 addAjaxParam: function(name, value) {
\r
625 ajaxParams.push({"name": name, "value": value});
\r
628 clearAjaxParams: function(name, value) {
\r
632 getDataTable: function() {
\r
636 getTableWrapper: function() {
\r
637 return tableWrapper;
\r
640 gettableContainer: function() {
\r
641 return tableContainer;
\r
644 getTable: function() {
\r
648 setOpenRowFlag: function(openRowFlagInput) {
\r
649 openRowFlag = openRowFlagInput;
\r
652 setRowOverFlag: function(rowOverFlagInput) {
\r
653 rowOverFlag = rowOverFlagInput;
\r
656 setRowCheckable: function(rowCheckableInput) {
\r
657 rowCheckable = rowCheckableInput;
\r
660 setColumnsTooLong: function(columnsTooLongInput) {
\r
661 columnsTooLong = columnsTooLongInput;
\r
664 setSTotalRecordsSource: function(sTotalRecordsSourceInput){
\r
665 sTotalRecordsSource = sTotalRecordsSourceInput;
\r
668 setTableHeight: function(tableHeightInput){
\r
669 tableHeight = tableHeightInput;
\r
676 var TableAjaxICT = function () {
\r
678 var initPickers = function () {
\r
679 //init date pickers
\r
680 $('.date-picker').datepicker({
\r
681 //rtl: App.isRTL(),
\r
687 function isContained(largeArray, smallArray){
\r
688 if(!(largeArray instanceof Array) || !(smallArray instanceof Array))
\r
690 if(largeArray.length < smallArray.length)
\r
692 for(var i = 0; i < smallArray.length; i++){
\r
694 for(j=0;j<largeArray.length;j++){
\r
695 if(largeArray[j].columnId == smallArray[i].columnId){
\r
700 if(flag==false)return false;
\r
705 var grid = new DatatableICT();
\r
707 /* Formatting function for row details */
\r
708 function fnFormatDetails(oTable, nTr, columns, rowCheckable) {
\r
710 var tds = $(nTr).children();
\r
713 alarmId = $(tds.eq(2)).html();
\r
715 alarmId = $(tds.eq(1)).html();
\r
718 var systemType = 0;
\r
721 var resDisplayName="";
\r
723 var alarmRaisedTime="";
\r
724 var perceivedSeverity="";
\r
725 var probableCauseDesc="";
\r
731 var ackSystemId="";
\r
732 var alarmChangedTime="";
\r
733 var componentname="";
\r
735 var specificproblem="";
\r
736 var additionalText="";
\r
737 for (var i = 0; i < oTable.datas.length; i++) {
\r
738 var temp = oTable.datas[i];
\r
739 if (temp.alarmId == alarmId) {
\r
740 alarmId = temp.alarmId;
\r
741 resDisplayName = temp.resDisplayName;
\r
742 alarmRaisedTime = temp.alarmRaisedTime;
\r
743 perceivedSeverity = temp.perceivedSeverity;
\r
744 probableCauseDesc = temp.probableCauseDesc;
\r
746 alarmType = temp.alarmType;
\r
747 ackState = temp.ackState;
\r
748 ackTime = temp.ackTime;
\r
749 ackUserId = temp.ackUserId;
\r
750 ackSystemId = temp.ackSystemId;
\r
751 alarmChangedTime = temp.alarmChangedTime;
\r
753 systemType = temp.systemType;
\r
754 code = temp.probableCauseCode;
\r
756 componentname = temp.componentname;
\r
757 position1 = temp.position1;
\r
758 specificproblem = temp.specificproblem;
\r
759 additionalText = temp.additionalText;
\r
765 var sOut = '<table class = "detailTable" width = 900>';
\r
766 sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle" width = 80><span class = "labelDetailTable">' + columns[0].columnTitle + '</span></td><td class = "detailCellStyle" width = 160>' + alarmId + '</td>';
\r
767 sOut += '<td class = "detailTitleStyle" width = 80><span class = "labelDetailTable">' + columns[4].columnTitle + '</span></td><td class = "detailCellStyle" width = 160>' + perceivedSeverity + '</td>';
\r
768 sOut += '<td class = "detailTitleStyle" width = 80><span class = "labelDetailTable">' + columns[9].columnTitle + '</span></td><td class = "detailCellStyle" width = 160>' + alarmType + '</td>';
\r
769 sOut += '<td class = "detailTitleStyle" width = 80><span class = "labelDetailTable">' + columns[3].columnTitle + '</span></td><td class = "detailCellStyle" width = 160>' + alarmRaisedTime + '</td></tr>';
\r
771 sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[5].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + probableCauseDesc + '</td>';
\r
772 sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[15].columnTitle + '</span></td><td class = "detailCellStyle">' + alarmChangedTime + '</td>';
\r
773 sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[11].columnTitle + '</span></td><td class = "detailCellStyle">' + ackState + '</td></tr>';
\r
775 sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[12].columnTitle + '</span></td><td class = "detailCellStyle">' + ackTime + '</td>';
\r
776 sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[13].columnTitle + '</span></td><td class = "detailCellStyle">' + ackUserId + '</td>';
\r
777 sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[14].columnTitle + '</span></td><td class = "detailCellStyle">' + ackSystemId + '</td>';
\r
778 sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[7].columnTitle + '</span></td><td class = "detailCellStyle">' + neip + '</td></tr>';
\r
780 sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[2].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + moc + '</td>';
\r
781 sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[1].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + resDisplayName + '</td></tr>';
\r
783 sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[8].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + componentname + '</td>';
\r
784 sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[16].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + position1 + '</td></tr>';
\r
786 sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[10].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 7>' + specificproblem + '</td></tr>';
\r
788 sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[6].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 7>' + additionalText + '</td></tr>';
\r
790 sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + $.i18n.prop('aos_fm_SuggestionSetting_view_DefaultSuggestionGroupTitle').replace(';', '').replace(/\"/g,'') + '</span></td><td id = "defaulInfo' + id + '" class = "detailCellStyle" colspan = 7>' + '</td></tr>';
\r
792 sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + $.i18n.prop('aos_fm_SuggestionSetting_view_SettingSuggestionGroupTitle').replace(';', '').replace(/\"/g,'') + '</span></td><td id = "customInfo' + id + '" class = "detailCellStyle" colspan = 7><td align="right"><button id = "customInfoModify' + id + '" class="btn-toolbar" type="button"><span id = "modifyBtnSpan' + id + '"class="fa fa-pencil-square-o"></span></button></td><td id="cancelDiv' + id + '"></td></td></tr>';
\r
794 sOut += '</table>';
\r
797 var systemType = 0;
\r
799 for (var i = 0; i < oTable.datas.length; i++) {
\r
800 var temp = oTable.datas[i];
\r
801 if (temp.alarmId == oTr['alarmId'].value) {
\r
802 systemType = temp.systemType;
\r
803 code = temp.probableCauseCode;
\r
807 "systemType" : systemType,
\r
810 var sendData = JSON.stringify(data);
\r
812 "dataType" : 'json',
\r
814 "url" : "/web/rest/web/fm/Maintenance" + "?" + "data=" + sendData,
\r
815 "contentType" : 'application/json; charset=utf-8',
\r
817 "success" : function (json) {
\r
818 $('tr').find('td#defaulInfo' + id).text(json.defaulInfo);
\r
819 $('tr').find('td#customInfo' + id).text(json.customInfo);
\r
820 var modify = $('#customInfoModify' + id);
\r
821 modify.on('click', function () {
\r
822 var span = $('#modifyBtnSpan' + id);
\r
823 var customInfo = $('tr').find('td#customInfo' + id);
\r
824 var cancel = $('#cancelDiv' + id);
\r
825 if (span['0'].className === 'fa fa-pencil-square-o') {
\r
826 var value = customInfo['0'].textContent;
\r
827 customInfo['0'].textContent = '';
\r
828 customInfo['0'].innerHTML = '<textarea id="customInfoInput' + id + '" type="textarea" cols=100 rows=4>' + value + '</textarea>';
\r
829 span['0'].className = 'fa fa-floppy-o';
\r
830 cancel['0'].innerHTML = '<button id = "cancelBtn' + id + '" class="btn-toolbar" type="button"><span class="fa fa-sign-out"></span></button>';
\r
831 $('#cancelBtn' + id).on('click', function () {
\r
832 customInfo['0'].innerHTML = '';
\r
833 customInfo['0'].textContent = value;
\r
834 cancel['0'].innerHTML = '';
\r
835 span['0'].className = 'fa fa-pencil-square-o';
\r
838 var inputValue = $('#customInfoInput' + id)['0'].value;
\r
839 customInfo['0'].innerHTML = '';
\r
840 customInfo['0'].textContent = inputValue;
\r
841 span['0'].className = 'fa fa-pencil-square-o';
\r
842 cancel['0'].innerHTML = '';
\r
844 "systemType" : systemType,
\r
846 "defaulInfo" : json.defaulInfo,
\r
847 "customInfo" : inputValue
\r
850 "dataType" : 'json',
\r
852 "url" : "/web/rest/web/fm/Maintenance",
\r
853 "contentType" : 'application/json; charset=utf-8',
\r
854 "data" : JSON.stringify(modifyData),
\r
855 "error" : function () {
\r
856 alert('Modify Error!');
\r
862 "error" : function () {
\r
863 alert('Communication Error!');
\r
870 var generateColumns = function(columns, openRowFlag, rowCheckable){
\r
871 var $tableData = $('table#datatable_ajax');
\r
872 var theadTR = $('thead > tr', $tableData);
\r
874 theadTR.append('<th><input type="checkbox" class="group-checkable"></th>');
\r
877 theadTR.append('<th> </th>');
\r
879 for(var i=0;i<columns.length;i++){
\r
880 theadTR.append('<TH id="' + columns[i].columnId + '" style="white-space: nowrap;">' + columns[i].columnTitle + '</TH>');
\r
884 var sortHandling = function(oTable, openRowFlag, rowCheckable){
\r
885 var indexSkip = -1;
\r
886 if(openRowFlag&&rowCheckable){
\r
888 }else if(openRowFlag&&!rowCheckable||!openRowFlag&&rowCheckable){
\r
891 var $sortOrder = 0; //排序类型 1表示升序,0表示降序
\r
892 var tableWrapper = $('div#datatable_ajax_wrapper');
\r
893 var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);
\r
894 var $tableData = $('table#datatable_ajax');
\r
895 var clearSort = function(currentTh){
\r
896 var ths = $tableHead.find('th').get();
\r
897 var tableDataHeadTHs = $tableData.find('th').get();
\r
898 $.each( ths, function( index, th ){
\r
899 if(index > indexSkip){
\r
900 if($(th).text() != currentTh.text()){
\r
901 if($(th).is('.sorting_disabled')){
\r
903 }else if($(th).is('.sorting_asc')){
\r
904 $(th).removeClass('sorting_asc').addClass('sorting_disabled');
\r
905 $(tableDataHeadTHs[index]).removeClass('sorting_asc').addClass('sorting_disabled');
\r
906 }else if($(th).is('.sorting_desc')){
\r
907 $(th).removeClass('sorting_desc').addClass('sorting_disabled');
\r
908 $(tableDataHeadTHs[index]).removeClass('sorting_desc').addClass('sorting_disabled');
\r
915 $('th', $tableHead).each(function( column )
\r
917 if(column>indexSkip){
\r
918 //处理三种有可能存在的排序字段,比较方法
\r
920 if( $(this).is('.sort-title') || $(this).is('.sorting_disabled') )
\r
922 findSortKey = function( $cell )
\r
924 var cellText = $cell.text();
\r
925 if(isNaN(cellText)){
\r
926 return $cell.text().toUpperCase();
\r
928 return parseFloat(cellText);
\r
930 //return $cell.text().toUpperCase();
\r
933 else if( $(this).is('.sort-date') )
\r
935 findSortKey = function( $cell )
\r
937 return Date.parse('1' + $cell.text());
\r
940 else if( $(this).is('.sort-price') )
\r
942 findSortKey = function( $cell )
\r
944 var key = parseFloat($cell.text().replace(/^[^\d.]*/, ''))
\r
945 return isNaN(key) ? 0 : key;
\r
952 $(this).click(function()
\r
954 $sortOrder = $sortOrder == 0 ? 1 : 0;
\r
955 var tableDataHeadTHs = $tableData.find('th').get();
\r
957 if($sortOrder == 1){
\r
958 if($(this).is('.sorting_disabled')){
\r
959 $(this).removeClass('sorting_disabled').addClass('sorting_asc');
\r
960 $(tableDataHeadTHs[column]).removeClass('sorting_disabled').addClass('sorting_asc');
\r
961 }else if($(this).is('.sorting_asc')){
\r
962 $(this).removeClass('sorting_asc').addClass('sorting_desc');
\r
963 $(tableDataHeadTHs[column]).removeClass('sorting_asc').addClass('sorting_desc');
\r
964 }else if($(this).is('.sorting_desc')){
\r
965 $(this).removeClass('sorting_desc').addClass('sorting_asc');
\r
966 $(tableDataHeadTHs[column]).removeClass('sorting_desc').addClass('sorting_asc');
\r
969 if($(this).is('.sorting_disabled')){
\r
970 $(this).removeClass('sorting_disabled').addClass('sorting_desc');
\r
971 $(tableDataHeadTHs[column]).removeClass('sorting_disabled').addClass('sorting_desc');
\r
972 }else if($(this).is('.sorting_asc')){
\r
973 $(this).removeClass('sorting_asc').addClass('sorting_desc');
\r
974 $(tableDataHeadTHs[column]).removeClass('sorting_asc').addClass('sorting_desc');
\r
975 }else if($(this).is('.sorting_desc')){
\r
976 $(this).removeClass('sorting_desc').addClass('sorting_asc');
\r
977 $(tableDataHeadTHs[column]).removeClass('sorting_desc').addClass('sorting_asc');
\r
980 clearSort($(this));
\r
982 var rows = $tableData.find('tbody > tr').get();
\r
984 $.each( rows, function( index, row )
\r
987 if ( oTable.fnIsOpen(row) )
\r
989 $(row).find('.row-details').click();
\r
993 //重新取得所有行,否则排序后表格显示异常
\r
994 rows = $tableData.find('tbody > tr').get();
\r
996 $.each( rows, function( index, row )
\r
998 row.sortKey = findSortKey($(row).children('td').eq(column));
\r
1001 rows.sort(function( a, b )
\r
1003 if( $sortOrder == 1 )
\r
1006 if(a.sortKey < b.sortKey) return -1;
\r
1007 if(a.sortKey > b.sortKey) return 1;
\r
1013 if(a.sortKey < b.sortKey) return 1;
\r
1014 if(a.sortKey > b.sortKey) return -1;
\r
1019 $.each( rows, function( index, row )
\r
1021 $tableData.children('tbody').append(row);
\r
1022 row.sortKey = null;
\r
1030 var handleRecords = function(requestStr, columns, xsHiddenColumns, smHiddenColumns, oLanguage, openRowFlag, rowCheckable, rowOverFlag, requestURL, requestParameters, tableHeight, columnsTooLong, sTotalRecordsSource) {
\r
1033 jQuery.getJSON('/web/newict/framework/thirdparty/data-tables/app-universal-i18n-datatable-' + lang + '.json',
\r
1038 grid.setOpenRowFlag(openRowFlag);
\r
1039 grid.setRowCheckable(rowCheckable);
\r
1040 grid.setRowOverFlag(rowOverFlag);
\r
1041 grid.setColumnsTooLong(columnsTooLong);
\r
1042 grid.setSTotalRecordsSource(sTotalRecordsSource);
\r
1043 grid.setTableHeight(tableHeight);
\r
1045 // if(!requestStr || requestStr.length == 0){
\r
1046 // requestStr = JSON.stringify(requestAllData);
\r
1048 grid.clearAjaxParams();
\r
1049 grid.addAjaxParam('data', requestStr);
\r
1051 for(var i=0;i<requestParameters.length;i++){
\r
1052 grid.addAjaxParam(requestParameters[i].paraId,requestParameters[i].paraValue);
\r
1056 src: $("#datatable_ajax"),
\r
1057 onSuccess: function(grid) {
\r
1058 // execute some code after table records loaded
\r
1059 var tableWrapper = $('div#datatable_ajax_wrapper');
\r
1060 var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);
\r
1061 var ths = $tableHead.find('th').get();
\r
1062 var $tableData = $('table#datatable_ajax');
\r
1063 var tableDataHeadTHs = $tableData.find('th').get();
\r
1064 $.each( ths, function( index, th ){
\r
1065 //clear all sort direction
\r
1066 if($(th).is('.sorting_disabled')){
\r
1068 }else if($(th).is('.sorting_asc')){
\r
1069 $(th).removeClass('sorting_asc').addClass('sorting_disabled');
\r
1070 $(tableDataHeadTHs[index]).removeClass('sorting_asc').addClass('sorting_disabled');
\r
1071 }else if($(th).is('.sorting_desc')){
\r
1072 $(th).removeClass('sorting_desc').addClass('sorting_disabled');
\r
1073 $(tableDataHeadTHs[index]).removeClass('sorting_desc').addClass('sorting_disabled');
\r
1078 onError: function(grid) {
\r
1079 // execute some code on network or other general error
\r
1082 "sDom" : "tr<'row'<'col-md-6 col-sm-12'><'col-md-6 col-sm-12'pli>>", // datatable layout
\r
1083 "oLanguage": oLanguage,
\r
1084 //"bAutoWidth": true,
\r
1085 "sScrollY": tableHeight,
\r
1086 "bScrollCollapse": true,
\r
1087 "sScrollX": "100%",
\r
1088 //"sScrollXInner": "110%",
\r
1091 [20, 50, 100] // change per page values here
\r
1093 "iDisplayLength": 20, // default record count per page
\r
1094 "bServerSide": true, // server side processing
\r
1095 "sAjaxSource": requestURL // ajax source
\r
1097 }, columns, xsHiddenColumns, smHiddenColumns, openRowFlag, rowCheckable);
\r
1101 * Insert a 'details' column to the table
\r
1103 var insertDetails = function (oTable, columns, rowCheckable) {
\r
1105 var $tableData = $('table#datatable_ajax');
\r
1107 $tableData.on('click', ' tbody td .row-details', function () {
\r
1108 var nTr = $(this).parents('tr')[0];
\r
1109 if (oTable.fnIsOpen(nTr)) {
\r
1110 /* This row is already open - close it */
\r
1111 $(this).addClass("row-details-close").removeClass("row-details-open");
\r
1112 oTable.fnClose(nTr);
\r
1114 /* Open this row */
\r
1115 $(this).addClass("row-details-open").removeClass("row-details-close");
\r
1116 oTable.fnOpen(nTr, fnFormatDetails(oTable, nTr, columns, rowCheckable), 'details');
\r
1123 //main function to initiate the module
\r
1124 init: function (requestStr, lang, configPathPrefix) {
\r
1128 var xsHiddenColumns;
\r
1129 var smHiddenColumns;
\r
1132 var openRowFlag = false;
\r
1133 var rowOverFlag = false;
\r
1134 var rowCheckable = false;
\r
1135 var requestURL="";
\r
1136 var requestAllData;
\r
1137 var requestParameters;
\r
1142 var columnsTooLong;
\r
1143 var sTotalRecordsSource="";
\r
1148 url: configPathPrefix + '-' + lang + '.json',
\r
1150 contentType:'application/json; charset=utf-8',
\r
1151 "success": function(data) {
\r
1152 oLanguage = data.language;
\r
1153 columns = data.columns;
\r
1154 xsHiddenColumns = data.xsHiddenColumns;
\r
1155 smHiddenColumns = data.smHiddenColumns;
\r
1156 columnsAll = data.columnsAll;
\r
1157 openRowFlag = data.openRowFlag == 'true'? true: false;
\r
1158 rowOverFlag = data.rowOverFlag == 'true'? true: false;
\r
1159 rowCheckable = data.rowCheckable == 'true'? true: false;
\r
1160 requestURL = data.requestURL;
\r
1161 //requestAllData = data.requestAllData;
\r
1162 requestParameters = data.requestParameters;
\r
1163 tableHeight = data.tableHeight;
\r
1164 tableWidth = data.tableWidth;
\r
1165 columnsTooLong = data.columnsTooLong;
\r
1166 sTotalRecordsSource = data.sTotalRecordsSource;
\r
1168 "error" : function (xhr, info) {
\r
1169 alert('Communication Error! Error reason:' + info);
\r
1173 $('#dataTableWrapperDiv').css('width', tableWidth);
\r
1175 if(!isContained(xsHiddenColumns, smHiddenColumns) || !isContained(columns, xsHiddenColumns) || !isContained(columnsAll, columns)){
\r
1176 alert('Columns claim error: (smHiddenColumns <= xsHiddenColumns <= columns <= columnsAll) Please!');
\r
1180 generateColumns(columns, openRowFlag, rowCheckable);
\r
1182 handleRecords(requestStr, columns, xsHiddenColumns, smHiddenColumns, oLanguage, openRowFlag, rowCheckable, rowOverFlag, requestURL, requestParameters, tableHeight, columnsTooLong, sTotalRecordsSource);
\r
1183 //获得初始化完毕的DataTable对象
\r
1184 var oTable = grid.getDataTable();
\r
1186 insertDetails(oTable, columnsAll, rowCheckable);
\r
1188 sortHandling(oTable, openRowFlag, rowCheckable);
\r
1189 //oTable.fnAdjustColumnSizing(true);
\r
1197 var DataTableSmartClient = function(datas, configPathPrefix){
\r
1199 var requestStr = "";
\r
1201 requestStr = JSON.stringify(datas);
\r
1204 var lang = getLanguage();
\r
1206 loadi18n_FM(lang);
\r
1207 //requestStr = "";
\r
1208 var oTable = TableAjaxICT.init(requestStr, lang, configPathPrefix);
\r
1210 //重新调节列宽以适应window resize
\r
1211 $(window).one('resize', function () {
\r
1212 //oTable.DataTable.models.oSettings.bAjaxDataGet = false;
\r
1213 oTable.fnAdjustColumnSizing(false);
\r