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