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