CLIENT GUI Framework
[vnfsdk/refrepo.git] / portal-common / src / main / webapp / common / thirdparty / data-tables / DataTableSmartClientApp.js
1 /***\r
2  Wrapper/Helper Class for datagrid based on jQuery Datatable Plugin\r
3  ***/\r
4 var DatatableICT = function () {\r
5 \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
13     var columns;\r
14     var xsHiddenColumns;\r
15     var smHiddenColumns;\r
16     var columnMaxLength = 30;\r
17     var columnsTooLong;\r
18     var hidden_xs_maxWidth = 768;\r
19     var hidden_sm_maxWidth = 991;\r
20 \r
21     var openRowFlag = false;\r
22     var rowOverFlag = false;\r
23     var rowCheckable = false;\r
24 \r
25     var aTargetsAll;\r
26     var sTotalRecordsSource;\r
27     var tableHeight;\r
28         \r
29         var callbackList = [];\r
30 \r
31     var includedInXsHiddenColumns = function(columnId){\r
32         for(var i=0;i<xsHiddenColumns.length; i++ ){\r
33             var column = xsHiddenColumns[i];\r
34             if(columnId == column.columnId){\r
35                 return true;\r
36             }\r
37         }\r
38         return false;\r
39     }\r
40 \r
41     var includedInSmHiddenColumns = function(columnId){\r
42         for(var i=0;i<smHiddenColumns.length; i++ ){\r
43             var column = smHiddenColumns[i];\r
44             if(columnId == column.columnId){\r
45                 return true;\r
46             }\r
47         }\r
48         return false;\r
49     }\r
50 \r
51     var countSelectedRecords = function() {\r
52         var selected = $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();\r
53         var text = tableOptions.dataTable.oLanguage.sGroupActions;\r
54         if (selected > 0) {\r
55             $('.table-group-actions > span', tableWrapper).text(text.replace("_TOTAL_", selected));\r
56         } else {\r
57             $('.table-group-actions > span', tableWrapper).text("");\r
58         }\r
59     }\r
60 \r
61     var jsonObjectToArray = function(json, columns, iDraw){\r
62         var jsonToDatatable = {aaData:[], sEcho:iDraw, iTotalRecords:0, iTotalDisplayRecords:0 };\r
63         for(var i=0; i<json.response.data.length; i++){\r
64             jsonToDatatable.aaData[i] = [];\r
65             var resRowObject = json.response.data[i];\r
66             if(rowCheckable){\r
67                 jsonToDatatable.aaData[i].push("<input type=\"checkbox\" name=\"id[]\" value=\"1\">");\r
68             }\r
69             if(openRowFlag){\r
70                 jsonToDatatable.aaData[i].push("<span class=\"row-details row-details-close\"></span>");\r
71             }\r
72             for(var j=0; j<columns.length; j++){\r
73 \r
74                 if($(window).width() >= hidden_xs_maxWidth && $(window).width() < hidden_sm_maxWidth && includedInSmHiddenColumns(columns[j].columnId )){\r
75                     /*隐藏pad尺寸需要隐藏的列*/\r
76                 }else if($(window).width() < hidden_xs_maxWidth && includedInXsHiddenColumns(columns[j].columnId )){\r
77                     /*隐藏手机尺寸需要隐藏的列*/\r
78                 }else{\r
79                     var currentColumnId = columns[j].columnId;\r
80                     if(jQuery.inArray(currentColumnId, columnsTooLong) > -1){\r
81                         var rawText = "";                        \r
82                         for(var k=0;k<columnsTooLong.length;k++){\r
83                             if(currentColumnId == columnsTooLong[k]){\r
84                                 rawText = resRowObject[currentColumnId];\r
85                                 break;\r
86                             }\r
87                         }\r
88                         if(rawText.length > columnMaxLength){\r
89                             jsonToDatatable.aaData[i].push(rawText.slice(0, columnMaxLength) + '...');\r
90                         }else{\r
91                             jsonToDatatable.aaData[i].push(resRowObject[currentColumnId]);\r
92                         }\r
93                     } else {\r
94                         jsonToDatatable.aaData[i].push(resRowObject[currentColumnId]);\r
95                     }\r
96 \r
97                 }\r
98             }\r
99         }\r
100         jsonToDatatable.sEcho++;\r
101         var totalRow = 0;\r
102         var totalRecordsSource = eval('json.' + sTotalRecordsSource);\r
103         if(totalRecordsSource && totalRecordsSource.length >0){\r
104             totalRow = parseInt(totalRecordsSource);\r
105         }\r
106         if(isNaN(totalRow)){\r
107             alert('All rows counting number got fail!');\r
108         }else{\r
109             jsonToDatatable.iTotalRecords = totalRow;\r
110             jsonToDatatable.iTotalDisplayRecords = totalRow;\r
111         }\r
112         return jsonToDatatable;\r
113     }\r
114 \r
115     var singleAlarmDel = function(divOverlay){\r
116 \r
117         //根据浮动框的当前id获取需要删除的行\r
118         var trId = divOverlay.attr('id_tr');\r
119         tr=$('tr#' + trId);\r
120         var tds =  $(tr).children();\r
121         var tdAlarmId = "";\r
122                 if(rowCheckable){\r
123                         tdAlarmId = $(tds.eq(2)).text();\r
124                 }else{\r
125                         tdAlarmId = $(tds.eq(1)).text();\r
126                 }\r
127 \r
128         var data= {\r
129             "alarmId":[parseInt(tdAlarmId)]\r
130         };\r
131 \r
132         var sSource = "/web/rest/web/fm/curalarms?data=" + JSON.stringify(data) + "&_operationType=remove&_dataSource=isc_PageRestDataSource_0&isc_metaDataPrefix=_&isc_dataFormat=json";\r
133 \r
134         $.ajax( {\r
135             "dataType": 'json',\r
136             "type": "DELETE",\r
137             "url": sSource,\r
138             "data" : null,\r
139             "contentType" : 'application/json; charset=utf-8',\r
140             "success": function(json) {\r
141                 if(json.response.status == 0){\r
142                     var resRowObject = json.response.data[0];\r
143                     //alert('删除成功');\r
144                 }\r
145                 if(json.response.status == -1){\r
146                     //alert('删除失败');\r
147                 }\r
148             },\r
149             "error": function() {\r
150                 alert('Communication Error!');\r
151             }\r
152         } );\r
153     }\r
154 \r
155     var singleAlarmAckUnAck = function(divOverlay, ackType){\r
156 \r
157         //根据浮动框的当前id获取需要确认的行\r
158         var trId = divOverlay.attr('id_tr');\r
159         var tr = $('tr#' + trId);\r
160 \r
161         //取得隐藏的头部表格的相应行\r
162         var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable');\r
163         //var trHead = $('tbody > tr:nth-child(' + trId + ')', $tableHead);\r
164         var trHead = $('tr#' + trId.replace('body', 'head'), $tableHead);\r
165         var tdDivs = $('td > div', trHead);\r
166 \r
167         var tds =  $(tr).children();\r
168         var tdAlarmId = "";\r
169         if(rowCheckable){\r
170             tdAlarmId = $(tds.eq(2)).text();\r
171         }else{\r
172             tdAlarmId = $(tds.eq(1)).text();\r
173         }\r
174 \r
175         var aoData =\r
176         {\r
177             "dataSource":"isc_PageRestDataSource_0",\r
178             "operationType":"update",\r
179             "componentId":"isc_com_zte_ums_aos_fm_view_eventview_table_AlarmTable_0",\r
180             "data":{\r
181                 "viewType":1,\r
182                 "state":ackType,\r
183                 "alarmId":[\r
184                     parseInt(tdAlarmId)\r
185                 ]\r
186             },\r
187             "oldValues":null\r
188         };\r
189 \r
190         var sSource = "/web/rest/web/fm/curalarms?isc_dataFormat=json";\r
191 \r
192         $.ajax( {\r
193             "dataType": 'json',\r
194             "type": "PUT",\r
195             "url": sSource,\r
196             "contentType": 'application/json; charset=utf-8',\r
197             "data": JSON.stringify(aoData),\r
198             "success": function(json) {\r
199                                 /*for(var i=0;i<callbackList.length;i++){\r
200                                         if(getFnName(callbackList[i]).indexOf("transformFieldNames")>0){\r
201                                                 json = callbackList[i](json);\r
202                                                 break;\r
203                                         }\r
204                                 }*/\r
205                                 //json = AlarmLabels.transformFieldNames(json);\r
206                                 if(callbackList[1]){\r
207                                         json = callbackList[1](json);\r
208                                 }\r
209                 if(json.response.status == 0){\r
210                     var resRowObject = json.response.data[0];\r
211                     var columnsCopy = $.extend(true, [], columns);\r
212                     //隐藏列的情况下需要特殊处理\r
213                     if($(window).width()>=hidden_xs_maxWidth && $(window).width()<hidden_sm_maxWidth){\r
214                         columnsCopy = [];\r
215                         for(var i=0;i<columns.length;i++){\r
216                             if(!includedInSmHiddenColumns(columns[i].columnId)){\r
217                                 columnsCopy.push(columns[i]);\r
218                             }\r
219                         }\r
220                     } else if($(window).width()<hidden_xs_maxWidth){\r
221                         columnsCopy = [];\r
222                         for(var i=0;i<columns.length;i++){\r
223                             if(!includedInXsHiddenColumns(columns[i].columnId)){\r
224                                 columnsCopy.push(columns[i]);\r
225                             }\r
226                         }\r
227                     }\r
228                     var iIndex = 1;\r
229                     if(rowCheckable){\r
230                         iIndex = 2;\r
231                     }\r
232                     for(var i=iIndex;i<tds.length && (i-iIndex)<columnsCopy.length;i++){\r
233                         var currentColumnId = columnsCopy[i-iIndex].columnId;\r
234                         if(jQuery.inArray(currentColumnId, columnsTooLong) > -1) {\r
235                             var rawText = "";                            \r
236                             for(var k=0;k<columnsTooLong.length;k++){\r
237                                 if(currentColumnId == columnsTooLong[k]){\r
238                                     rawText = resRowObject[currentColumnId];\r
239                                     break;\r
240                                 }\r
241                             }\r
242                             if(rawText.length > columnMaxLength){\r
243                                 $(tds.eq(i)).html(rawText.slice(0, columnMaxLength) + '...');\r
244                                 $(tdDivs.eq(i)).html(rawText.slice(0, columnMaxLength) + '...');\r
245                             }else{\r
246                                 $(tds.eq(i)).html(resRowObject[currentColumnId]);\r
247                                 $(tdDivs.eq(i)).html(resRowObject[currentColumnId]);\r
248                             }\r
249                         } else {\r
250                             $(tds.eq(i)).html(resRowObject[currentColumnId]);\r
251                             $(tdDivs.eq(i)).html(resRowObject[currentColumnId]);\r
252                         }\r
253                     }\r
254                     //更新缓存中的当前行数据\r
255                     for (var t = 0; t < dataTable.datas.length; t++) {\r
256                         var temp = dataTable.datas[t];\r
257                         if (temp.alarmId == resRowObject['alarmId']) {\r
258                             dataTable.datas[t] = resRowObject;\r
259                             break;\r
260                         }\r
261                     }\r
262                 }\r
263                 if(json.response.status == -1){\r
264                     $('div#myModalConfirm').modal({\r
265                         keyboard: false,\r
266                         backdrop: 'static'\r
267                     });\r
268                     $('span#alarm_number').html(tdAlarmId);\r
269                     //国际化信息\r
270                     if(ackType==1){\r
271                         $('span#aos_fm_alarm_opeater_ack_already').html($.i18n.prop('aos_fm_alarm_opeater_ack_already_ok'));\r
272                     }else{\r
273                         $('span#aos_fm_alarm_opeater_ack_already').html($.i18n.prop('aos_fm_alarm_opeater_ack_already_un'));\r
274                     }\r
275                 }\r
276                                 //填充单元格颜色\r
277                                 var divColor = $("div.cellBackgroundColor", tr);\r
278                                 $(divColor).parent().css("background", $(divColor).css("background-color"));\r
279             },\r
280             "error": function() {\r
281                 alert('Communication Error!');\r
282             }\r
283         } );\r
284     }\r
285 \r
286     var addRowOverlap = function(){\r
287         var $tableData = $('table#datatable_ajax');\r
288         //取得隐藏的头部表格的相应行\r
289         var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable');\r
290         var trHeads = $tableHead.find('tr').get();\r
291         $.each( trHeads, function( index, trHead ){\r
292             $(trHead).attr('id', 'headTableTR' + index);\r
293         });\r
294         //取得浮动div\r
295         var $divOverlay = $('div#divOverlay');\r
296         var divScrollHead = $('div.dataTables_scrollHead');\r
297         var divRightPadding = $('div#divRightPadding');\r
298         //取表头下边沿位置\r
299         var tableHeadBottomHeight = $(divScrollHead).position().top + $(divScrollHead).height();\r
300         var tableBottom = $tableData.position().top + $tableData.height() + 3;\r
301         //取表格右边沿位置\r
302         var tableRightEdgePosition = $(divRightPadding).position().left;\r
303         var trs = $tableData.find('tr').get();\r
304         $.each( trs, function( index, tr ){\r
305             var tdEmpty = $('td.dataTables_empty',tr);\r
306             if(!tdEmpty || tdEmpty.length ==0 ){\r
307                 $(tr).attr('id', 'bodyTableTR' + index);\r
308                                 //$divOverlay.attr('id_tr', 'bodyTableTR' + index);\r
309                 $(tr).one('hover', function(){\r
310                     var rowPos = $(tr).position();\r
311                     var currentTrTop = rowPos.top;\r
312                     //var bottomLeft = rowPos.left;\r
313                     $divOverlay.attr('id_tr', 'bodyTableTR' + index);\r
314                     $divOverlay.css({\r
315                         display: 'block',\r
316                         position: 'absolute',\r
317                         'background-color': '#e5e5e5',\r
318                         //opacity: 0.7,\r
319                         border: 'solid 0px',\r
320                         top: currentTrTop + 6,\r
321                         left: tableRightEdgePosition - 308,\r
322                         width: 300,\r
323                         height: 30\r
324                     });\r
325                     //防止浮动框跳出表格内容区域\r
326                     if( $divOverlay.position().top < tableHeadBottomHeight || $divOverlay.position().top + $divOverlay.height() > tableBottom){\r
327                         $divOverlay.css('display', 'none');\r
328                     }                                   \r
329                     var buttonConfirm = $('div#buttonConfirm', $divOverlay);\r
330                     var buttonUnConfirm = $('div#buttonUnConfirm', $divOverlay);\r
331                                         //初始化悬浮按钮当前行的确认反确认状态\r
332                                         if($(tr).find('span.alarmAck') && $(tr).find('span.alarmAck').length >0){\r
333                                                 var spanAck = $(tr).find('span.alarmAck');\r
334                                                 var ackState = $(spanAck).attr('ack_id');\r
335                                                 var buttonTDsConfirm = $(buttonConfirm).find('td');\r
336                                                 var buttonTDsUnConfirm = $(buttonUnConfirm).find('td');\r
337                                                 if(ackState=="2"){                                                      \r
338                                                         if(buttonTDsConfirm && buttonTDsConfirm.length > 0 && buttonTDsUnConfirm && buttonTDsUnConfirm.length > 0){\r
339                                                                 $.each(buttonTDsConfirm, function(index, td){\r
340                                                                         $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');\r
341                                                                 });\r
342                                                                 $.each(buttonTDsUnConfirm, function(index, td){\r
343                                                                         $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');\r
344                                                                 });\r
345                                                         }\r
346                                                 }else{\r
347                                                         if(buttonTDsConfirm && buttonTDsConfirm.length > 0 && buttonTDsUnConfirm && buttonTDsUnConfirm.length > 0){\r
348                                                                 $.each(buttonTDsConfirm, function(index, td){                                                                   \r
349                                                                         $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');\r
350                                                                 });\r
351                                                                 $.each(buttonTDsUnConfirm, function(index, td){\r
352                                                                         $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');\r
353                                                                 });\r
354                                                         }\r
355                                                 }\r
356                                         }\r
357                                         //添加确认反确认点击事件\r
358                     $(buttonConfirm).one('click', function(){\r
359                         var buttonRoundedTDsConfirm = $(buttonConfirm).find('td.buttonRounded');\r
360                         var buttonRoundedTDsUnConfirm = $(buttonUnConfirm).find('td.buttonRoundedDisabled');\r
361                         if(buttonRoundedTDsConfirm && buttonRoundedTDsConfirm.length > 0){\r
362                             $.each(buttonRoundedTDsConfirm, function(index, td){\r
363                                 $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');\r
364                             });\r
365                             $.each(buttonRoundedTDsUnConfirm, function(index, td){\r
366                                 $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');\r
367                             });\r
368                             $divOverlay.css('display', 'none');\r
369                             singleAlarmAckUnAck($divOverlay, 1);\r
370                         }\r
371                     });\r
372                     $(buttonUnConfirm).one('click', function(){\r
373                         var buttonRoundedTDsUnConfirm = $(buttonUnConfirm).find('td.buttonRounded');\r
374                         var buttonRoundedTDsConfirm = $(buttonConfirm).find('td.buttonRoundedDisabled');\r
375                         if(buttonRoundedTDsUnConfirm && buttonRoundedTDsUnConfirm.length > 0){\r
376                             $.each(buttonRoundedTDsUnConfirm, function(index, td){\r
377                                 $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');\r
378                             });\r
379                             $.each(buttonRoundedTDsConfirm, function(index, td){\r
380                                 $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');\r
381                             });\r
382                             $divOverlay.css('display', 'none');\r
383                             singleAlarmAckUnAck($divOverlay, 2);\r
384                         }\r
385                     });\r
386                     var buttonDelete = $('div#buttonDelete', $divOverlay);\r
387                     $(buttonDelete).die().live('click', function(){\r
388                                                 $divOverlay.css('display', 'none');\r
389                                                 var trIdToDelete = $divOverlay.attr('id_tr');\r
390                                                 var toDeleteTr=$('tr#' + trIdToDelete);\r
391                                                 $("td", toDeleteTr).addClass('dataTableTdSelected');\r
392                         //弹出删除确认对话框\r
393                         $('div#myModal').modal({\r
394                             keyboard: false,\r
395                             backdrop: 'static'\r
396                         });\r
397                         $('#delConfirm').die().live('click', function(){\r
398                             //$divOverlay.css('display', 'none');\r
399                             dataTable.fnClose(tr);\r
400                                                         //删除后端数据\r
401                             singleAlarmDel($divOverlay);\r
402                                                         //删除当前行\r
403                             $(tr).remove();\r
404                             //删除表头表格的相应行\r
405                             $('tr#' + $(tr).attr('id').replace('body', 'head'), $tableHead).remove();                            \r
406                             //刷新表格\r
407                             //dataTable.fnAdjustColumnSizing();\r
408                         });\r
409                                                 $('#myModal').on('hidden.bs.modal', function (e) {\r
410                                                           $("td", toDeleteTr).removeClass('dataTableTdSelected');\r
411                                                 })\r
412                     });\r
413                                         //展开行的情况隐藏\r
414                                         $('td.details > table.detailTable').on('hover', function(){\r
415                                                 $divOverlay.css('display', 'none');\r
416                                         });\r
417                                         $('div#myModal').on('hover', function(){\r
418                                                 $divOverlay.css('display', 'none');\r
419                                         });\r
420                                 });                             \r
421             }\r
422         });             \r
423     }\r
424 \r
425     return {\r
426 \r
427         //main function to initiate the module\r
428         init: function (options, columnsDefined, xsHiddenColumnsDefined, smHiddenColumnsDefined) {\r
429 \r
430             if (!$().dataTable) {\r
431                 return;\r
432             }\r
433 \r
434             var the = this;\r
435 \r
436             //记录需要禁掉默认排序的列\r
437             var aTargets = [];\r
438             var targetsLength = columnsDefined.length;\r
439             if(rowCheckable)targetsLength++;\r
440             if(openRowFlag)targetsLength++;\r
441             for(var i=0;i<targetsLength;i++){\r
442                 aTargets.push(i);\r
443             }\r
444             aTargetsAll = aTargets;\r
445 \r
446             // default settings\r
447             options = $.extend(true, {\r
448                 src: "",  // actual table \r
449                 filterApplyAction: "filter",\r
450                 filterCancelAction: "filter_cancel",\r
451                 resetGroupActionInputOnSuccess: true,\r
452                 dataTable: {\r
453                     //"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
454 \r
455                     "aoColumnDefs" : [{  // define columns sorting options(by default all columns are sortable extept the first checkbox column)\r
456                         'bSortable' : false,\r
457                         'aTargets' : aTargets\r
458                     }],\r
459 \r
460                     "bAutoWidth": false,   // disable fixed width and enable fluid table\r
461                     //"bSortCellsTop": true, // make sortable only the first row in thead\r
462                     "sPaginationType": "bootstrap_extended", // pagination type(bootstrap, bootstrap_full_number or bootstrap_extended)\r
463                     "bProcessing": true, // enable/disable display message box on record load\r
464                     "bServerSide": true, // enable/disable server side ajax loading\r
465                     "sAjaxSource": "", // define ajax source URL \r
466                     //"sServerMethod": "GET",\r
467 \r
468                     // handle ajax request\r
469                     "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {\r
470                         //for ICT Paging\r
471                         //var startIndex = aoData[3].value;//"iDisplayStart"\r
472                         //var pageLength = aoData[4].value;//"iDisplayLength"\r
473                         var oPaging = oSettings.oInstance.fnPagingInfo();\r
474                         //var startIndex = oPaging.iStart;\r
475                         var pageLength = oPaging.iLength;\r
476                         var curPageNo = oPaging.iPage + 1;\r
477 \r
478                         for(var k=aoData.length-1;k>=0;k--){\r
479                             var flag = -1;\r
480                             if(aoData[k].name=='pageSize'){\r
481                                 aoData[k].value=pageLength;\r
482                                 flag++;\r
483                             }\r
484                             if(aoData[k].name=='pageNo'){\r
485                                 aoData[k].value=curPageNo;\r
486                                 flag++\r
487                             }\r
488                             if(flag == 1)break;\r
489                         }\r
490 \r
491                         oSettings.jqXHR = $.ajax( {\r
492                             "dataType": 'json',\r
493                             "type": "GET",\r
494                             "url": sSource,\r
495                             "data": aoData,\r
496                             "success": function(res, textStatus, jqXHR) {\r
497                                 if (res.sMessage) {\r
498                                     openoFrameWork.alert({type: (res.sStatus == 'OK' ? 'success' : 'danger'), icon: (res.sStatus == 'OK' ? 'check' : 'warning'), message: res.sMessage, container: tableWrapper, place: 'prepend'});\r
499                                 }\r
500                                 if ($('.group-checkable', tableContainer).size() === 1) {\r
501                                     $('.group-checkable', tableContainer).attr("checked", false);\r
502                                     $.uniform.update($('.group-checkable', tableContainer));\r
503                                 }\r
504                                 if (tableOptions.onSuccess) {\r
505                                     tableOptions.onSuccess.call(the);\r
506                                 }\r
507                                 //保存数据在dataTable对象中给行详细信息面板用\r
508                                 dataTable.datas = res.response.data;\r
509                                                                 if(res.response.status < 0){\r
510                                                                         alert(res.response.data);\r
511                                                                         return;\r
512                                                                 }\r
513                                                                 \r
514                                                                 //告警字段值转换\r
515                                                                 //res = AlarmLabels.transformFieldNames(res);\r
516                                                                 /*for(var i=0;i<callbackList.length;i++){\r
517                                                                         if(getFnName(callbackList[i]).indexOf("transformFieldNames")>0){\r
518                                                                                 res = callbackList[i](res);\r
519                                                                                 break;\r
520                                                                         }\r
521                                                                 }*/\r
522                                                                 if(callbackList[1]){\r
523                                                                         res = callbackList[1](res);\r
524                                                                 }\r
525                                                                 \r
526                                 res = jsonObjectToArray(res, columns, oSettings.iDraw);\r
527                                 \r
528                                 //重绘表格\r
529                                 fnCallback(res, textStatus, jqXHR);\r
530                             },\r
531                             "error": function() {\r
532                                 if (tableOptions.onError) {\r
533                                     tableOptions.onError.call(the);\r
534                                 }\r
535                                 openoFrameWork.alert({type: 'danger', icon: 'warning', message: tableOptions.dataTable.oLanguage.sAjaxRequestGeneralError, container: tableWrapper, place: 'prepend'});\r
536                                 $('.dataTables_processing', tableWrapper).remove();\r
537                             }\r
538                         } );\r
539 \r
540                     },\r
541 \r
542                     // pass additional parameter\r
543                     "fnServerParams": function ( aoData ) {\r
544                         //here can be added an external ajax request parameters.\r
545                         //for(var i in ajaxParams) { \r
546                         for(var i=0; i<ajaxParams.length; i++){\r
547                             var param = ajaxParams[i];\r
548                             aoData.push({"name" : param.name, "value": param.value});\r
549                         }\r
550                     },\r
551 \r
552                     "fnDrawCallback": function( oSettings ) { // run some code on table redraw\r
553                         if (tableInitialized === false) { // check if table has been initialized\r
554                             tableInitialized = true; // set table initialized\r
555                             table.show(); // display table\r
556                         }\r
557                         openoFrameWork.initUniform($('input[type="checkbox"]', tableContainer));  // reinitialize uniform checkboxes on each table reload\r
558                         countSelectedRecords(); // reset selected records indicator\r
559                         //所有td不换行\r
560                         $('table#datatable_ajax').find('td').css('white-space', 'nowrap');\r
561 \r
562                         //自适应对齐表头\r
563                         var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);\r
564                         var tbodyHead = $('tbody', $tableHead);\r
565                         if(tbodyHead && tbodyHead.length >0){\r
566                             $(tbodyHead).remove();\r
567                         }\r
568 \r
569                         var $tableBody = $('table#datatable_ajax', tableWrapper);\r
570                         var trIn = $('thead > tr:nth-child(1)', $tableHead);\r
571                         var trBodyHead = $('thead > tr:nth-child(1)', $tableBody);\r
572                         var tds = $(trIn).children();\r
573                         var ths = $(trBodyHead).children();\r
574                         for(var k=0;k<tds.length;k++){\r
575                             $(ths.eq(k)).html('<div style="height: 0;overflow: hidden;">' + tds.eq(k).html() + '</div>');\r
576                         }\r
577                         var bodyRows = $('tbody > tr', $tableBody);\r
578                         for(var i=0;i<bodyRows.length;i++){\r
579                             var rowClone = $(bodyRows.eq(i)).clone();\r
580                             var tds = $(rowClone).children();\r
581                             for(var j=0;j<tds.length;j++){\r
582                                 $(tds.eq(j)).html('<div style="height: 0;overflow: hidden;">' + tds.eq(j).html() + '</div>');\r
583                                 $(tds.eq(j)).height('0px');\r
584                                 $(tds.eq(j)).css('padding-top','0px');\r
585                                 $(tds.eq(j)).css('padding-bottom','0px');\r
586                                 $(tds.eq(j)).css('border-top-width','0px');\r
587                                 $(tds.eq(j)).css('border-bottom-width','0px');\r
588                             }\r
589                             $(rowClone).height('0px');\r
590                             $tableHead.append($(rowClone).prop("outerHTML"));\r
591                         }\r
592 \r
593                         $('.dataTables_scrollBody').css('width','100%');\r
594                         $('.dataTables_scrollHead').css('width','98.5%');\r
595                         $('.dataTables_scrollHeadInner').css('padding-right', 0);\r
596 \r
597                         //添加浮动确认反确认按钮\r
598                         if(rowOverFlag){\r
599                             addRowOverlap();\r
600                         }\r
601                                                 \r
602                                                 //填充单元格颜色\r
603                                                 var divColors = $("div.cellBackgroundColor", $tableBody);\r
604                                                 $.each( divColors, function( index, divColor ){\r
605                                                         $(divColor).parent().css("background", $(divColor).css("background-color"));\r
606                                                 });\r
607                         \r
608                         //设置表格本体高度\r
609                         $('div.dataTables_scrollBody').css('height', tableHeight);\r
610                     }\r
611                 }\r
612             }, options);\r
613 \r
614             tableOptions = options;\r
615 \r
616             columns = columnsDefined;\r
617             xsHiddenColumns = xsHiddenColumnsDefined;\r
618             smHiddenColumns = smHiddenColumnsDefined;\r
619             // create table's jquery object\r
620             table = $(options.src);\r
621             tableContainer = table.parents(".table-container");\r
622             // apply the special class that used to restyle the default datatable\r
623 \r
624             $.fn.dataTableExt.oStdClasses.sWrapper = $.fn.dataTableExt.oStdClasses.sWrapper + " dataTables_extended_wrapper";\r
625 \r
626             // initialize a datatable\r
627             dataTable = table.dataTable(options.dataTable);\r
628 \r
629             tableWrapper = table.parents('.dataTables_wrapper');\r
630 \r
631             // modify table per page dropdown input by appliying some classes\r
632             $('.dataTables_length select', tableWrapper).addClass("form-control input-xsmall input-sm");\r
633 \r
634             // handle group checkboxes check/uncheck\r
635             $('.group-checkable', tableContainer).change(function () {\r
636                 var set = $('tbody > tr > td:nth-child(1) input[type="checkbox"]', table);\r
637                 var checked = $(this).is(":checked");\r
638                 $(set).each(function () {\r
639                     $(this).attr("checked", checked);\r
640                 });\r
641                 $.uniform.update(set);\r
642                 countSelectedRecords();\r
643             });\r
644 \r
645             // handle row's checkbox click\r
646             table.on('change', 'tbody > tr > td:nth-child(1) input[type="checkbox"]', function(){\r
647                 countSelectedRecords();\r
648             });\r
649 \r
650             //填充表头右边界\r
651             $('.dataTables_scrollHead').css('display','inline-block');\r
652             //var dataTables_scrollHead_height = $('.dataTables_scrollHead').css( "height" );\r
653             $(".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
654             if($.browser.mozilla){\r
655                 $('#divRightPadding').css('height', '40');\r
656             }\r
657 \r
658             //隐藏掉某些列\r
659             var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);\r
660             var $tableBody = $('table#datatable_ajax', tableWrapper);\r
661 \r
662             for(var i=0;i<xsHiddenColumns.length;i++){\r
663                 for(var j=0;j<columns.length;j++){\r
664                     if(xsHiddenColumns[i].columnId == columns[j].columnId){\r
665                         $('thead >  tr > th#' + columns[j].columnId, $tableHead).addClass('hidden-xs');\r
666                         $('thead >  tr > th#' + columns[j].columnId, $tableBody).addClass('hidden-xs');\r
667                         break;\r
668                     }\r
669                 }\r
670             }\r
671 \r
672             for(var i=0;i<smHiddenColumns.length;i++){\r
673                 for(var j=0;j<columns.length;j++){\r
674                     if(smHiddenColumns[i].columnId == columns[j].columnId){\r
675                         $('thead >  tr > th#' + columns[j].columnId, $tableHead).addClass('hidden-sm');\r
676                         $('thead >  tr > th#' + columns[j].columnId, $tableBody).addClass('hidden-sm');\r
677                         break;\r
678                     }\r
679                 }\r
680             }\r
681         },//end init------------------------------------------------------------------------------------\r
682 \r
683         getSelectedRowsCount: function() {\r
684             return $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();\r
685         },\r
686 \r
687         getSelectedRows: function() {\r
688             var rows = [];\r
689             $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).each(function(){\r
690                 rows.push({name: $(this).attr("name"), value: $(this).val()});\r
691             });\r
692 \r
693             return rows;\r
694         },\r
695 \r
696         addAjaxParam: function(name, value) {\r
697             ajaxParams.push({"name": name, "value": value});\r
698         },\r
699 \r
700         clearAjaxParams: function(name, value) {\r
701             ajaxParams = [];\r
702         },\r
703 \r
704         getDataTable: function() {\r
705             return dataTable;\r
706         },\r
707 \r
708         getTableWrapper: function() {\r
709             return tableWrapper;\r
710         },\r
711 \r
712         gettableContainer: function() {\r
713             return tableContainer;\r
714         },\r
715 \r
716         getTable: function() {\r
717             return table;\r
718         },\r
719 \r
720         setOpenRowFlag: function(openRowFlagInput) {\r
721             openRowFlag = openRowFlagInput;\r
722         },\r
723 \r
724         setRowOverFlag: function(rowOverFlagInput) {\r
725             rowOverFlag = rowOverFlagInput;\r
726         },\r
727 \r
728         setRowCheckable: function(rowCheckableInput) {\r
729             rowCheckable = rowCheckableInput;\r
730         },\r
731 \r
732         setColumnsTooLong: function(columnsTooLongInput) {\r
733             columnsTooLong = columnsTooLongInput;\r
734         },\r
735 \r
736         setSTotalRecordsSource: function(sTotalRecordsSourceInput){\r
737             sTotalRecordsSource = sTotalRecordsSourceInput;\r
738         },\r
739 \r
740         setTableHeight: function(tableHeightInput){\r
741             tableHeight = tableHeightInput;\r
742         },\r
743                 \r
744                 setCallbackList: function(list){\r
745                         if($.isArray(list)){\r
746                                 callbackList = list;\r
747                         }\r
748                 }\r
749 \r
750     };\r
751 \r
752 };\r
753 \r
754 var TableAjaxICT = function () {\r
755 \r
756     var initPickers = function () {\r
757         //init date pickers\r
758         $('.date-picker').datepicker({\r
759             //rtl: App.isRTL(),\r
760             autoclose: true\r
761         });\r
762     }\r
763 \r
764     //判断a数组是否包含b数组\r
765     function isContained(largeArray, smallArray){\r
766         if(!(largeArray instanceof Array) || !(smallArray instanceof Array))\r
767             return false;\r
768         if(largeArray.length < smallArray.length)\r
769             return false;\r
770         for(var i = 0; i < smallArray.length; i++){\r
771             var flag = false;\r
772             for(j=0;j<largeArray.length;j++){\r
773                 if(largeArray[j].columnId == smallArray[i].columnId){\r
774                     flag = true;\r
775                     break;\r
776                 }\r
777             }\r
778             if(flag==false)return false;\r
779         }\r
780         return true;\r
781     }\r
782 \r
783     var grid = new DatatableICT();\r
784         \r
785         var detailTableId = "alarmDetailInfo";\r
786 \r
787     /* Formatting function for row details */\r
788     function fnFormatDetails(oTable, nTr, columns, rowCheckable) {\r
789         //取得当前行显示数据\r
790         var tds = $(nTr).children();\r
791         var alarmId="";\r
792         if(rowCheckable){\r
793             alarmId = $(tds.eq(2)).html();\r
794         }else{\r
795             alarmId = $(tds.eq(1)).html();\r
796         }\r
797         //取得当前行完整数据\r
798         var systemType = 0;\r
799         var code = 0;\r
800         //所有字段\r
801         var resDisplayName="";\r
802         var moc="";\r
803         var alarmRaisedTime="";\r
804         var perceivedSeverity="";\r
805         var probableCauseDesc="";\r
806         var neip="";\r
807         var alarmType="";\r
808         var ackState="";\r
809         var ackTime="";\r
810         var ackUserId="";\r
811         var ackSystemId="";\r
812         var alarmChangedTime="";\r
813         var componentname="";\r
814         var position1="";\r
815         var specificproblem="";\r
816         var additionalText="";\r
817         for (var i = 0; i < oTable.datas.length; i++) {\r
818             var temp = oTable.datas[i];\r
819             if (temp.alarmId == alarmId) {\r
820                 alarmId = temp.alarmId;\r
821                 resDisplayName = temp.resDisplayName;\r
822                 alarmRaisedTime = temp.alarmRaisedTime;\r
823                 perceivedSeverity = temp.perceivedSeverity;\r
824                 probableCauseDesc = temp.probableCauseDesc;\r
825                 neip = temp.neip;\r
826                 alarmType = temp.alarmType;\r
827                 ackState = temp.ackState;\r
828                 ackTime = temp.ackTime;\r
829                 ackUserId = temp.ackUserId;\r
830                 ackSystemId = temp.ackSystemId;\r
831                 alarmChangedTime = temp.alarmChangedTime;\r
832 \r
833                 systemType = temp.systemType;\r
834                 code = temp.probableCauseCode;\r
835                 moc = temp.moc;\r
836                 componentname = temp.componentname;\r
837                 position1 = temp.position1;\r
838                 specificproblem = temp.specificproblem;\r
839                 additionalText = temp.additionalText;\r
840                 break;\r
841             }\r
842         }\r
843 \r
844         var id = alarmId;\r
845                 //获取所有展开的详细信息面板生成当前的面板id用于定位\r
846                 var detailTables = $('[class_id=detailTableAlarm]');\r
847                 if(detailTables && detailTables.length > 0){\r
848                         detailTableId = "alarmDetailInfo" + detailTables.length;\r
849                 }\r
850         var sOut = '<table id="' + detailTableId + '" class_id="detailTableAlarm" class = "detailTable" width = "800" style="table-layout: fixed;">';\r
851         sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[0].columnTitle + '</span></td><td class = "detailCellStyle" width = 160>' + alarmId + '</td>';\r
852         sOut += '<td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[4].columnTitle + '</span></td><td class = "detailCellStyle" width = 130>' + perceivedSeverity + '</td>';\r
853         sOut += '<td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[9].columnTitle + '</span></td><td class = "detailCellStyle" width = 160>' + alarmType + '</td>';\r
854         sOut += '<td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[3].columnTitle + '</span></td><td class = "detailCellStyle" width = 160 colspan = 2>' + alarmRaisedTime + '</td></tr>';\r
855 \r
856         sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[5].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + probableCauseDesc + '</td>';\r
857         sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[15].columnTitle + '</span></td><td class = "detailCellStyle">' + alarmChangedTime + '</td>';\r
858         sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[11].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 2>' + ackState + '</td></tr>';\r
859 \r
860         sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[12].columnTitle + '</span></td><td class = "detailCellStyle">' + ackTime + '</td>';\r
861         sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[13].columnTitle + '</span></td><td class = "detailCellStyle">' + ackUserId + '</td>';\r
862         sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[14].columnTitle + '</span></td><td class = "detailCellStyle">' + ackSystemId + '</td>';\r
863         sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[7].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 2>' + neip + '</td></tr>';\r
864 \r
865         sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[2].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + moc + '</td>';\r
866         sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[1].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 4>' + resDisplayName + '</td></tr>';\r
867 \r
868         sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[8].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + componentname + '</td>';\r
869         sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[16].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 4>' + position1 + '</td></tr>';\r
870 \r
871         sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[10].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 8>' + specificproblem + '</td></tr>';\r
872 \r
873         sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[6].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 8>' + additionalText + '</td></tr>';\r
874 \r
875         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 = 8>' + '</td></tr>';\r
876 \r
877         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 = 6><td style="width:80px" 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 style="width:80px" id="cancelDiv' + id + '"></td></tr>';\r
878 \r
879         sOut += '</table>';\r
880 \r
881         /*\r
882          var systemType = 0;\r
883          var code = 0;\r
884          for (var i = 0; i < oTable.datas.length; i++) {\r
885          var temp = oTable.datas[i];\r
886          if (temp.alarmId == oTr['alarmId'].value) {\r
887          systemType = temp.systemType;\r
888          code = temp.probableCauseCode;\r
889          }\r
890          }*/\r
891         var data = {\r
892             "systemType" : systemType,\r
893             "code" : code\r
894         };\r
895         var sendData = JSON.stringify(data);\r
896         $.ajax({\r
897             "dataType" : 'json',\r
898             "type" : "GET",\r
899             "url" : "/web/rest/web/fm/Maintenance" + "?" + "data=" + sendData,\r
900             "contentType" : 'application/json; charset=utf-8',\r
901             "data" : null,\r
902             "success" : function (json) {\r
903                 $('tr').find('td#defaulInfo' + id).text(json.defaulInfo);\r
904                 $('tr').find('td#customInfo' + id).text(json.customInfo);\r
905                 var modify = $('#customInfoModify' + id);\r
906                 modify.on('click', function () {\r
907                     var span = $('#modifyBtnSpan' + id);\r
908                     var customInfo = $('tr').find('td#customInfo' + id);\r
909                     var cancel = $('#cancelDiv' + id);\r
910                     if (span['0'].className === 'fa fa-pencil-square-o') {\r
911                         var value = customInfo['0'].textContent;\r
912                         customInfo['0'].textContent = '';\r
913                         customInfo['0'].innerHTML = '<textarea  id="customInfoInput' + id + '" type="textarea" cols=110 rows=4 onKeyUp="if(this.value.length > 700) this.value=this.value.substr(0,700)">' + value + '</textarea>';\r
914                         span['0'].className = 'fa fa-floppy-o';\r
915                         cancel['0'].innerHTML = '<button id = "cancelBtn' + id + '" class="btn-toolbar" type="button"><span class="fa fa-sign-out"></span></button>';\r
916                         $('#cancelBtn' + id).on('click', function () {\r
917                             customInfo['0'].innerHTML = '';\r
918                             customInfo['0'].textContent = value;\r
919                             cancel['0'].innerHTML = '';\r
920                             span['0'].className = 'fa fa-pencil-square-o';\r
921                         });\r
922                     } else {\r
923                         var inputValue = $('#customInfoInput' + id)['0'].value;\r
924                         customInfo['0'].innerHTML = '';\r
925                         customInfo['0'].textContent = inputValue;\r
926                         span['0'].className = 'fa fa-pencil-square-o';\r
927                         cancel['0'].innerHTML = '';\r
928                         var modifyData = {\r
929                             "systemType" : systemType,\r
930                             "code" : code,\r
931                             "defaulInfo" : json.defaulInfo,\r
932                             "customInfo" : inputValue\r
933                         };\r
934                         $.ajax({\r
935                             "dataType" : 'json',\r
936                             "type" : "PUT",\r
937                             "url" : "/web/rest/web/fm/Maintenance",\r
938                             "contentType" : 'application/json; charset=utf-8',\r
939                             "data" : JSON.stringify(modifyData),\r
940                             "error" : function () {\r
941                                 alert('Modify Error!');\r
942                             }\r
943                         });\r
944                     }\r
945                 });\r
946             },\r
947             "error" : function () {\r
948                 alert('Communication Error!');\r
949             }\r
950         });\r
951 \r
952         return sOut;\r
953     }\r
954 \r
955     var generateColumns = function(columns, openRowFlag, rowCheckable){\r
956         var $tableData = $('table#datatable_ajax');\r
957         var theadTR = $('thead > tr', $tableData);\r
958         if(rowCheckable){\r
959             theadTR.append('<th><input type="checkbox" class="group-checkable"></th>');\r
960         }\r
961         if(openRowFlag){\r
962             theadTR.append('<th>&nbsp;&nbsp;</th>');\r
963         }\r
964         for(var i=0;i<columns.length;i++){\r
965             theadTR.append('<TH id="' + columns[i].columnId + '" style="white-space: nowrap;">' + columns[i].columnTitle + '</TH>');\r
966         }\r
967     }\r
968 \r
969     var sortHandling = function(oTable, openRowFlag, rowCheckable){\r
970         var indexSkip = -1;\r
971         if(openRowFlag&&rowCheckable){\r
972             indexSkip = 1;\r
973         }else if(openRowFlag&&!rowCheckable||!openRowFlag&&rowCheckable){\r
974             indexSkip = 0;\r
975         }\r
976         var $sortOrder = 0;   //排序类型 1表示升序,0表示降序\r
977         var tableWrapper = $('div#datatable_ajax_wrapper');\r
978         var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);\r
979         var $tableData = $('table#datatable_ajax');\r
980         var clearSort = function(currentTh){\r
981             var ths = $tableHead.find('th').get();\r
982             var tableDataHeadTHs = $tableData.find('th').get();\r
983             $.each( ths, function( index, th ){\r
984                 if(index > indexSkip){\r
985                     if($(th).text() != currentTh.text()){\r
986                         if($(th).is('.sorting_disabled')){\r
987                             //do nothing;\r
988                         }else if($(th).is('.sorting_asc')){\r
989                             $(th).removeClass('sorting_asc').addClass('sorting_disabled');\r
990                             $(tableDataHeadTHs[index]).removeClass('sorting_asc').addClass('sorting_disabled');\r
991                         }else if($(th).is('.sorting_desc')){\r
992                             $(th).removeClass('sorting_desc').addClass('sorting_disabled');\r
993                             $(tableDataHeadTHs[index]).removeClass('sorting_desc').addClass('sorting_disabled');\r
994                         }\r
995                     }\r
996                 }\r
997             });\r
998         }\r
999 \r
1000         $('th', $tableHead).each(function( column )\r
1001         {\r
1002             if(column>indexSkip){\r
1003                 //处理三种有可能存在的排序字段,比较方法\r
1004                 var findSortKey;\r
1005                 if( $(this).is('.sort-title') || $(this).is('.sorting_disabled') )\r
1006                 {\r
1007                     findSortKey = function( $cell )\r
1008                     {\r
1009                         var cellText = $cell.text();\r
1010                         if(isNaN(cellText)){\r
1011                             return $cell.text().toUpperCase();\r
1012                         }else{\r
1013                             return parseFloat(cellText);\r
1014                         }\r
1015                         //return $cell.text().toUpperCase();\r
1016                     }\r
1017                 }\r
1018                 else if( $(this).is('.sort-date') )\r
1019                 {\r
1020                     findSortKey = function( $cell )\r
1021                     {\r
1022                         return Date.parse('1' + $cell.text());\r
1023                     }\r
1024                 }\r
1025                 else if( $(this).is('.sort-price') )\r
1026                 {\r
1027                     findSortKey = function( $cell )\r
1028                     {\r
1029                         var key =  parseFloat($cell.text().replace(/^[^\d.]*/, ''))\r
1030                         return isNaN(key) ? 0 : key;\r
1031                     }\r
1032                 }\r
1033 \r
1034                 //排序\r
1035                 if( findSortKey )\r
1036                 {\r
1037                     $(this).click(function()\r
1038                     {\r
1039                         $sortOrder = $sortOrder == 0 ? 1 : 0;\r
1040                         var tableDataHeadTHs = $tableData.find('th').get();\r
1041 \r
1042                         if($sortOrder == 1){\r
1043                             if($(this).is('.sorting_disabled')){\r
1044                                 $(this).removeClass('sorting_disabled').addClass('sorting_asc');\r
1045                                 $(tableDataHeadTHs[column]).removeClass('sorting_disabled').addClass('sorting_asc');\r
1046                             }else if($(this).is('.sorting_asc')){\r
1047                                 $(this).removeClass('sorting_asc').addClass('sorting_desc');\r
1048                                 $(tableDataHeadTHs[column]).removeClass('sorting_asc').addClass('sorting_desc');\r
1049                             }else if($(this).is('.sorting_desc')){\r
1050                                 $(this).removeClass('sorting_desc').addClass('sorting_asc');\r
1051                                 $(tableDataHeadTHs[column]).removeClass('sorting_desc').addClass('sorting_asc');\r
1052                             }\r
1053                         }else{\r
1054                             if($(this).is('.sorting_disabled')){\r
1055                                 $(this).removeClass('sorting_disabled').addClass('sorting_desc');\r
1056                                 $(tableDataHeadTHs[column]).removeClass('sorting_disabled').addClass('sorting_desc');\r
1057                             }else if($(this).is('.sorting_asc')){\r
1058                                 $(this).removeClass('sorting_asc').addClass('sorting_desc');\r
1059                                 $(tableDataHeadTHs[column]).removeClass('sorting_asc').addClass('sorting_desc');\r
1060                             }else if($(this).is('.sorting_desc')){\r
1061                                 $(this).removeClass('sorting_desc').addClass('sorting_asc');\r
1062                                 $(tableDataHeadTHs[column]).removeClass('sorting_desc').addClass('sorting_asc');\r
1063                             }\r
1064                         }\r
1065                         clearSort($(this));\r
1066 \r
1067                         var rows = $tableData.find('tbody > tr').get();\r
1068 \r
1069                         $.each( rows, function( index, row )\r
1070                         {\r
1071                             //先关掉所有行\r
1072                             if ( oTable.fnIsOpen(row) )\r
1073                             {\r
1074                                 $(row).find('.row-details').click();\r
1075                             }\r
1076                         });\r
1077 \r
1078                         //重新取得所有行,否则排序后表格显示异常\r
1079                         rows = $tableData.find('tbody > tr').get();\r
1080 \r
1081                         $.each( rows, function( index, row )\r
1082                         {\r
1083                             row.sortKey = findSortKey($(row).children('td').eq(column));\r
1084                         });\r
1085                         //排序方法\r
1086                         rows.sort(function( a, b )\r
1087                         {\r
1088                             if( $sortOrder == 1 )\r
1089                             {\r
1090                                 //升序\r
1091                                 if(a.sortKey < b.sortKey)   return -1;\r
1092                                 if(a.sortKey > b.sortKey)   return  1;\r
1093                                 return 0;\r
1094                             }\r
1095                             else\r
1096                             {\r
1097                                 //降序\r
1098                                 if(a.sortKey < b.sortKey)   return  1;\r
1099                                 if(a.sortKey > b.sortKey)   return -1;\r
1100                                 return 0;\r
1101                             }\r
1102                         });\r
1103                         //排序后的对象添加给$table\r
1104                         $.each( rows, function( index, row )\r
1105                         {\r
1106                             $tableData.children('tbody').append(row);\r
1107                             row.sortKey = null;\r
1108                         });\r
1109                     });\r
1110                 }\r
1111             }\r
1112         });\r
1113     }\r
1114 \r
1115     var handleRecords = function(requestStr, columns, xsHiddenColumns, smHiddenColumns, oLanguage, openRowFlag, rowCheckable, rowOverFlag, requestURL, requestParameters, tableHeight, columnsTooLong, sTotalRecordsSource, callbackList) {\r
1116 \r
1117         /*\r
1118          jQuery.getJSON('/web/newict/framework/thirdparty/data-tables/app-universal-i18n-datatable-' + lang + '.json',\r
1119          function(data) {\r
1120          oLanguage = data;\r
1121          });\r
1122          */\r
1123                 grid.setCallbackList(callbackList);\r
1124         grid.setOpenRowFlag(openRowFlag);\r
1125         grid.setRowCheckable(rowCheckable);\r
1126         grid.setRowOverFlag(rowOverFlag);\r
1127         grid.setColumnsTooLong(columnsTooLong);\r
1128         grid.setSTotalRecordsSource(sTotalRecordsSource);\r
1129         grid.setTableHeight(tableHeight);\r
1130         //取得查询条件\r
1131 //        if(!requestStr || requestStr.length == 0){\r
1132 //            requestStr = JSON.stringify(requestAllData);\r
1133 //        }\r
1134                 grid.clearAjaxParams();\r
1135         grid.addAjaxParam('data', requestStr);\r
1136         //取得其他参数\r
1137         for(var i=0;i<requestParameters.length;i++){\r
1138             grid.addAjaxParam(requestParameters[i].paraId,requestParameters[i].paraValue);\r
1139         }\r
1140 \r
1141         grid.init({\r
1142             src: $("#datatable_ajax"),\r
1143             onSuccess: function(grid) {\r
1144                 // execute some code after table records loaded\r
1145                 var tableWrapper = $('div#datatable_ajax_wrapper');\r
1146                 var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);\r
1147                 var ths = $tableHead.find('th').get();\r
1148                 var $tableData = $('table#datatable_ajax');\r
1149                 var tableDataHeadTHs = $tableData.find('th').get();\r
1150                 $.each( ths, function( index, th ){\r
1151                     //clear all sort direction\r
1152                     if($(th).is('.sorting_disabled')){\r
1153                         //do nothing;\r
1154                     }else if($(th).is('.sorting_asc')){\r
1155                         $(th).removeClass('sorting_asc').addClass('sorting_disabled');\r
1156                         $(tableDataHeadTHs[index]).removeClass('sorting_asc').addClass('sorting_disabled');\r
1157                     }else if($(th).is('.sorting_desc')){\r
1158                         $(th).removeClass('sorting_desc').addClass('sorting_disabled');\r
1159                         $(tableDataHeadTHs[index]).removeClass('sorting_desc').addClass('sorting_disabled');\r
1160                     }\r
1161                 });\r
1162 \r
1163             },\r
1164             onError: function(grid) {\r
1165                 // execute some code on network or other general error\r
1166             },\r
1167             dataTable: {\r
1168                 "sDom" : "tr<'row'<'col-md-6 col-sm-12'><'col-md-6 col-sm-12'pli>>", // datatable layout\r
1169                 "oLanguage": oLanguage,\r
1170                 //"bAutoWidth": true,\r
1171                 "sScrollY": tableHeight,\r
1172                 "bScrollCollapse": true,\r
1173                 "sScrollX": "100%",\r
1174                 //"sScrollXInner": "110%",\r
1175                 "aLengthMenu": [\r
1176                     [20, 50, 100],\r
1177                     [20, 50, 100] // change per page values here\r
1178                 ],\r
1179                 "iDisplayLength": 20, // default record count per page\r
1180                 "bServerSide": true, // server side processing\r
1181                 "sAjaxSource": requestURL // ajax source\r
1182             }\r
1183         }, columns, xsHiddenColumns, smHiddenColumns, openRowFlag, rowCheckable);\r
1184     }\r
1185 \r
1186     /*\r
1187      * Insert a 'details' column to the table\r
1188      */\r
1189     var insertDetails = function (oTable, columns, rowCheckable) {\r
1190 \r
1191         var $tableData = $('table#datatable_ajax');\r
1192 \r
1193         $tableData.on('click', ' tbody td .row-details', function () {\r
1194             var nTr = $(this).parents('tr')[0];\r
1195             if (oTable.fnIsOpen(nTr)) {\r
1196                 /* This row is already open - close it */\r
1197                 $(this).addClass("row-details-close").removeClass("row-details-open");\r
1198                 oTable.fnClose(nTr);\r
1199             } else {\r
1200                 /* Open this row */\r
1201                 $(this).addClass("row-details-open").removeClass("row-details-close");\r
1202                 oTable.fnOpen(nTr, fnFormatDetails(oTable, nTr, columns, rowCheckable), 'details');\r
1203                                 //填充单元格颜色\r
1204                                 var divColor = $("div.cellBackgroundColor", $("table#" + detailTableId));\r
1205                                 $(divColor).parent().css("background", $(divColor).css("background-color"));\r
1206             }                   \r
1207         });\r
1208     }\r
1209 \r
1210     return {\r
1211 \r
1212         //main function to initiate the module\r
1213         init: function (requestStr, lang, configPathPrefix, callbackList) {\r
1214 \r
1215             var oLanguage;\r
1216             var columns;\r
1217             var xsHiddenColumns;\r
1218             var smHiddenColumns;\r
1219             var columnsAll;\r
1220 \r
1221             var openRowFlag = false;\r
1222             var rowOverFlag = false;\r
1223             var rowCheckable = false;\r
1224             var requestURL="";\r
1225             var requestAllData;\r
1226             var requestParameters;\r
1227 \r
1228             var tableHeight;\r
1229             var tableWidth;\r
1230 \r
1231             var columnsTooLong;\r
1232             var sTotalRecordsSource="";\r
1233 \r
1234             //取得当前配置及国际化信息\r
1235             $.ajax({\r
1236                 dataType:   'json',\r
1237                 url:        configPathPrefix + '-' + lang + '.json',\r
1238                 async:      false,\r
1239                 contentType:'application/json; charset=utf-8',\r
1240                 "success":  function(data) {\r
1241                     oLanguage = data.language;\r
1242                     columns = data.columns;\r
1243                     xsHiddenColumns = data.xsHiddenColumns;\r
1244                     smHiddenColumns = data.smHiddenColumns;\r
1245                     columnsAll = data.columnsAll;\r
1246                     openRowFlag = data.openRowFlag == 'true'? true: false;\r
1247                     rowOverFlag = data.rowOverFlag == 'true'? true: false;\r
1248                     rowCheckable = data.rowCheckable == 'true'? true: false;\r
1249                     requestURL = data.requestURL;\r
1250                     //requestAllData = data.requestAllData;\r
1251                     requestParameters = data.requestParameters;\r
1252                     tableHeight = data.tableHeight;\r
1253                     tableWidth = data.tableWidth;\r
1254                     columnsTooLong = data.columnsTooLong;\r
1255                     sTotalRecordsSource = data.sTotalRecordsSource;\r
1256                 },\r
1257                 "error" : function (xhr, info) {\r
1258                     alert('Communication Error! Error reason:' + info);\r
1259                 }\r
1260             });\r
1261 \r
1262             $('#dataTableWrapperDiv').css('width', tableWidth);\r
1263 \r
1264             if(!isContained(xsHiddenColumns, smHiddenColumns) || !isContained(columns, xsHiddenColumns) || !isContained(columnsAll, columns)){\r
1265                 alert('Columns claim error: (smHiddenColumns <= xsHiddenColumns <= columns <= columnsAll) Please!');\r
1266                 return;\r
1267             }\r
1268 \r
1269             generateColumns(columns, openRowFlag, rowCheckable);\r
1270             //initPickers();\r
1271             handleRecords(requestStr, columns, xsHiddenColumns, smHiddenColumns, oLanguage, openRowFlag, rowCheckable, rowOverFlag, requestURL, requestParameters, tableHeight, columnsTooLong, sTotalRecordsSource, callbackList);\r
1272             //获得初始化完毕的DataTable对象\r
1273             var oTable = grid.getDataTable();\r
1274             if(openRowFlag){\r
1275                 insertDetails(oTable, columnsAll, rowCheckable);\r
1276             }\r
1277             sortHandling(oTable, openRowFlag, rowCheckable);\r
1278             //oTable.fnAdjustColumnSizing(true);\r
1279             return oTable;\r
1280         }\r
1281 \r
1282     };\r
1283 \r
1284 }();\r
1285 \r
1286 var DataTableSmartClientApp = function(datas, configPathPrefix, callbackList){\r
1287 \r
1288     var requestStr = "";\r
1289     if(datas){\r
1290         requestStr = JSON.stringify(datas);\r
1291     }\r
1292         \r
1293         var lang = getLanguage();\r
1294         //lang = 'en-US';\r
1295         /*for(var i=0;i<callbackList.length;i++){\r
1296                 if(getFnName(callbackList[i]).indexOf("i18n")>0){\r
1297                         callbackList[i](lang);\r
1298                         break;\r
1299                 }\r
1300         }*/\r
1301         if(callbackList && callbackList[0]){\r
1302                 callbackList[0](lang);\r
1303         }\r
1304         //requestStr = "";\r
1305         var oTable = TableAjaxICT.init(requestStr, lang, configPathPrefix, callbackList);\r
1306 \r
1307         //重新调节列宽以适应window resize\r
1308         $(window).one('resize', function () {\r
1309                 //oTable.DataTable.models.oSettings.bAjaxDataGet = false;\r
1310                 oTable.fnAdjustColumnSizing(false);\r
1311         } );\r
1312 }\r