rebuild GUI structure(only changed modules' name)
[vnfsdk/refrepo.git] / performance / src / main / webapp / performance / js / alarmsUtil.js
1 /*
2  * Copyright 2016-2017, CMCC Technologies Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *         http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 var alarmsUtil = {};
17 var alarmTemp=[];
18
19 alarmsUtil.timeRender = function (obj) {
20         if (obj.aData[obj.mDataProp] == -1 || obj.aData[obj.mDataProp] == 0) {
21                 return "";
22         } else {
23                 var date = new Date(obj.aData[obj.mDataProp]);
24                 return commonUtil.parseDate(date, 'yyyy-MM-dd hh:mm:ss');
25         }
26 };
27
28 alarmsUtil.LinkRender = function (obj) {
29         return '<a href="">' + obj.aData[obj.mDataProp] + '</a>';
30 };
31  
32 alarmsUtil.ackState = function (obj) {
33         
34         var innerHtml = "";
35         var ackState = obj.aData.ackState;
36         var alarmId = obj.aData.id;
37         var alarmIdArr = [alarmId];
38         var tableId="\'" + obj.oSettings.sTableId + "\'";
39         var divId="\'" + obj.oSettings.nTableWrapper.parentElement.id + "\'";
40         if (ackState == "1" && vm.ruleType == 1) {
41                 innerHtml = "<a class=\"label label-sm label-info\"   onclick=\" alarmsUtil.unaffirm([" + alarmIdArr + "]," + tableId + "," + divId + ","+obj.iDataRow+")  \">Acknowledge</a>";
42         } else if(ackState == "1" && vm.ruleType == 2){
43                 innerHtml = "<div class=\"label label-sm label-info\">Acknowledge</div>";
44         } else if(ackState == "2" ){
45                 innerHtml = "<a class=\"label label-sm acknow-purple\"    onclick=\" alarmsUtil.affirm([" + alarmIdArr + "]," + tableId + "," + divId + ","+obj.iDataRow+")\">Unacknowledge</a>";
46         } 
47         return innerHtml;
48 };
49
50 alarmsUtil.Severity = function (obj) {
51
52         var innerHtml = "";
53         var Severity = obj.aData.perceivedSeverity;
54         if (Severity == "1") {
55                 innerHtml = "<span style=\"color:#E24949 \"  class=\"ict-alarm \" ></span><sapn  \">Critical</sapn>";
56         } else if (Severity == "2") {
57                 innerHtml = "<span style=\"color:#E59313 \" class=\"ict-alarm\" ></span><sapn \">Major</sapn>";
58         } else if (Severity == "3") {
59                 innerHtml = "<span style=\"color:#F7E51B \" class=\"ict-alarm\" ></span><sapn  \">Minor</sapn>";
60         } else if (Severity == "4") {
61                 innerHtml = "<span style=\"color:#61C2DE \" class=\"ict-alarm\" ></span><sapn \">Warning</sapn>";
62         }
63         return innerHtml;
64
65 };
66
67 alarmsUtil.operate = function (obj) {
68
69         var alarmId = obj.aData.alarmId;
70         return "<div class='row col-xs-12'><div><a href='#' class=\"btn-xs grey btn-editable\" onclick=\" alarmsUtil.congfirms('" + alarmId + "')\"><i class=\"ict-delete\"></i>清除</a></div></div>";
71
72 };
73
74 alarmsUtil.congfirms = function (alarmId) {
75
76         bootbox.confirm('你确定要删除该告警吗?', function (result) { //你确定要删除该用户吗?
77
78                 if (result) {
79                         var sSource = "/web/rest/web/fm/curalarms?data={\"alarmId\":" + alarmId + "}&_dataSource=isc_PageRestDataSource_0&isc_metaDataPrefix=_&isc_dataFormat=json&_operationType=remove&_componentId=isc_com_zte_ums_aos_fm_view_eventview_table_AlarmTable_0";
80                         $.ajax({
81                                 dataType : "json",
82                                 type : "DELETE",
83                                 //数据格式:[tab标签id,tabItem的名字,图片路径,tabItem的描述,更多的LInk地址]
84                                 contentType : 'application/json; charset=utf-8',
85                                 url : sSource,
86                                 data : null,
87                                 async : false,
88                                 success : function (msg) {
89                                         setTimeout(function () {
90                                                 refreshByCond();
91                                         }, 500);
92                                 }
93                         });
94                 }
95
96         });
97
98 };
99
100 alarmsUtil.allOperate = function (obj) {
101
102         var record = obj.aData;
103         var hasModify = commonUtil.hasRigth('uep.pfl.sm.updateuser');
104         var hasDel = commonUtil.hasRigth('uep.pfl.sm.deluser');
105         var selectUsername = new String(record.userName);
106         var innerHtml = "";
107         
108         // 如果有权限,显示操作列
109         if (hasModify) {
110                 if (hasDel && selectUsername != "admin") {
111                         innerHtml = "<div class='row col-xs-12'><div class='col-xs-6 modify_user'><a class=\"btn-xs grey btn-editable\" href='#' onclick=\"vm.modifyUser('" + selectUsername + "')\"><i class=\"ict-modify\"></i>修改</a></div><div class='col-xs-6'><a href='#' class=\"btn-xs grey btn-editable\" onclick=\"smUtil.congfirms('" + selectUsername + "')\"><i class=\"ict-delete\"></i>删除</a></div></div>";
112                 } else {
113                         innerHtml = "<div class='row col-xs-12'><div class='col-xs-6 modify_user'><a class=\"btn-xs grey btn-editable\" href='#' onclick=\"vm.modifyUser('" + selectUsername + "')\"><i class=\"ict-modify\"></i>修改</a></div>";
114                 }
115         }
116
117         return innerHtml;
118
119 };
120
121 alarmsUtil.refresh = function () {
122
123         refreshByCond();
124
125 }
126
127 /*
128
129 1.确认
130
131 2.反确认
132
133  */
134
135 alarmsUtil.loopAffirm = function (type) {
136
137         var checkArr = $('#ict_alarms_table_div .details-check input[type="checkbox"]');
138         var aidArr = [];
139         for (var i = 0; i < checkArr.length; i++) {
140                 if($(checkArr[i]).prop("checked")){
141                         if ($(checkArr[i]).attr('alarmId') != 'undefined' && $(checkArr[i]).attr('alarmId') != null) {
142                                 aidArr.push($(checkArr[i]).attr('alarmId'));
143                         }
144                 }
145         }
146
147         if (type == "1" && aidArr.length > 0) {
148                 alarmsUtil.affirm(aidArr);
149         } else if (type == "2" && aidArr.length > 0) {
150                 alarmsUtil.unaffirm(aidArr);
151         }
152
153 }
154
155 /*
156
157
158
159  */
160
161 alarmsUtil.loopDelAralms = function () {
162
163         var checkArr = $('#ict_alarms_table_div .details-check input[type="checkbox"]');
164         var aidArr = [];
165         for (var i = 0; i < checkArr.length; i++) {
166                 if($(checkArr[i]).prop("checked")){
167                         if ($(checkArr[i]).attr('alarmId') != 'undefined' && $(checkArr[i]).attr('alarmId') != null) {
168                                 aidArr.push($(checkArr[i]).attr('alarmId'));
169                         }
170                 }
171         }
172
173         if (aidArr.length > 0) {
174                 bootbox.confirm('Are you sure to delete alarm(s)', function (result) { 
175                         if (result) {
176                                 var sSource = "/openoapi/umc/v1/fm/curalarms?request={\"ids\":["+ aidArr +"]}";
177                                 $.ajax({
178                                         type : "DELETE", 
179                                         dataType : "json",
180                                         contentType : 'application/json; charset=utf-8',
181                                         url : sSource,
182                                         data : null,
183                                         async : false,
184                                         success : function (msg) {
185                                                 setTimeout(function () {
186                                                         refreshByCond()
187                                                 }, 500);
188                                         }
189                                 });
190                         }
191                 });
192         }
193 }
194
195 alarmsUtil.affirm = function (alarmIdArr,tableId,divId) {
196
197         var getData = {};
198         var request = {};
199         request.ids=[];
200         for(i=0;i<alarmIdArr.length;i++){
201                 request.ids.push(alarmIdArr[i]);
202         }
203         var url = "";
204         if (vm.ruleType == 1) { //当前告警
205                 request.ackState=1;
206                 getData.request = JSON.stringify(request);
207                 url = "/openoapi/umc/v1/fm/curalarms";
208         } else { //历史告警
209                 url = "/ngict/rest/fm/hisalarms"
210         }
211
212         $.ajax({
213                 type : "PUT",
214                 contentType : 'application/json; charset=utf-8',
215                 url : url + "?" + "request=" + JSON.stringify(request),
216                 async : false,
217                 success : function (msg) {
218                         setTimeout(function () {
219                                 refreshByCond(tableId,divId);
220                         }, 100);
221                 },      
222                 error : function(msg){
223                         setTimeout(function () {
224                                 refreshByCond(tableId,divId);
225                         }, 100);        
226                 }
227         });
228
229 }
230
231 alarmsUtil.unaffirm = function (alarmIdArr,tableId,divId) {
232
233         var getData = {};
234         var request = {};
235         request.ids=[];
236         for(i=0;i<alarmIdArr.length;i++){
237                 request.ids.push(alarmIdArr[i]);
238         }
239         request.ackState=2;
240         getData.request = JSON.stringify(request);
241         var url = "";
242         if (vm.ruleType == 1) { //当前告警
243                 url = "/openoapi/umc/v1/fm/curalarms";
244                 $.ajax({
245                         "type" : "PUT",
246                         "contentType" : 'application/json; charset=utf-8',
247                         "url" : url + "?request=" + JSON.stringify(request),
248                         async : false,
249                         success : function (msg) {
250                                 setTimeout(function () {
251                                         refreshByCond(tableId,divId);
252                                 }, 100);
253                         },
254                         error : function(msg){          
255                                 setTimeout(function () {
256                                         refreshByCond(tableId,divId);
257                                 }, 100);                
258                         }
259                 });
260         } 
261
262         
263         
264 }
265
266 alarmsUtil.checkBox = function (obj) {
267
268         var alarmId = obj.aData.id;
269         var innerHtml = '<input type="checkbox" alarmId="' + alarmId + '"/> ';
270         return innerHtml;
271 }
272
273 //初始化告警码树
274 alarmsUtil.initProbableCausesTree = function () {
275         //zTree设置
276         var setting = {
277                 view : {
278                         selectedMulti : false, //设置是否可以同时选中多个借点。
279                         showIcon : true, //不显示图标
280                         showLine : false, //是否显示节点之间的连线
281                 },
282                 data : {
283                         simpleData : {
284                                 enable : true //如果设置为 true,请务必设置 setting.data.simpleData 内的其他参数: idKey / pIdKey / rootPId,并且让数据满足父子关系。
285                         }
286                 },
287                 callback : {
288                         onExpand : zTreeOnExpand, //每次节点展开后触发的事件。
289                         onCollapse : zTreeOnCollapse,
290                         //onClick: zTreeOnClick
291                 }
292         };
293         var probableCausesNodes;
294         
295         //获取告警码树数据
296         getProbableCausesTreeNodes("");
297         //创建告警码树
298         $.fn.zTree.init($("#probableCausesTree"), setting, probableCausesNodes);
299         //获取所有现有的tree节点
300         var treeObj = $.fn.zTree.getZTreeObj("probableCausesTree");
301         initDataAtTree();
302         function initDataAtTree(){
303                 getAllNodesWithoutTypeEqual2("")                
304         };
305         
306         function getAllNodesWithoutTypeEqual2(parentId){
307                 var treeNodes=treeObj.getNodesByParam("parentId", parentId, null);
308                 for(var i=0;i<treeNodes.length;i++){
309                         if(treeNodes[i].type===0){
310                                 getProbableCausesTreeNodes(treeNodes[i].id);
311                                 addNodesToTree(treeNodes[i],"probableCausesTree");
312                                 getAllNodesWithoutTypeEqual2(treeNodes[i].id);
313                         }
314                 }
315         }
316
317         function zTreeOnExpand(event, treeId, treeNode) {
318                 var childrenNodes = treeNode.children;
319                 if (!childrenNodes) { //当没有子节点的时候才加载,否则会重复加载。
320                         getProbableCausesTreeNodes(treeNode.id);
321                         addNodesToTree(treeNode,treeId);
322                 }
323         };
324         
325         function addNodesToTree(treeNode, treeId) {
326                 var obj = $.fn.zTree.getZTreeObj(treeId);
327                 var node=obj.getNodeByParam("id", treeNode.id, null)
328                 obj.addNodes(node, probableCausesNodes);
329         };
330
331         function zTreeOnCollapse(event, treeId, treeNode) {};
332
333         //告警信息中的type为0、1是父节点,2为子节点
334         function isParentNode(type) {
335                 if (type != 2)
336                         return true;
337                 else
338                         return false;
339         };
340         
341         function constructProblemCauseName(node){
342                 if(node.type===0){
343                         return node.desc;
344                 }else{
345                         return node.desc + "(" + node.value + ")";
346                 }
347         }
348
349         function getProbableCausesTreeNodes(alarmCodeParentId) {
350                 probableCausesNodes = new Array();
351                 var getData = {};
352                 var request = {};
353                 request.parentId = alarmCodeParentId;
354                 getData.request = JSON.stringify(request);
355                 $.ajax({
356                         async : false,
357                         "dataType" : 'json',
358                         "type" : "GET",
359                         "url" : "/openoapi/umc/v1/fm/probablecausestree",
360                         "data" : getData,
361                         "contentType" : 'application/json; charset=utf-8',
362                         "success" : function (res, textStatus, jqXHR) {
363                                 var nodes = res;
364                                 chkDisabled = false;
365                                 if (nodes) {
366                                         for (var i = 0; i < nodes.length; i++) {
367                                                 probableCausesNodes.push({
368                                                         id : nodes[i].id,
369                                                         pId : nodes[i].parentId,
370                                                         name : constructProblemCauseName(nodes[i]),
371                                                         chkDisabled : false,
372                                                         isParent : isParentNode(nodes[i].type),
373                                                         parentId : alarmCodeParentId,//treenode节点
374                                                         codeId : nodes[i].value,
375                                                         type : nodes[i].type
376                                                 });
377                                         }
378                                 }
379                         },
380                         "error" : function () {}
381                 });
382         }
383 }
384
385 //初始化位置树
386 alarmsUtil.initDeptTree = function () {
387         //zTree设置
388         var setting = {
389                 view : {
390                         selectedMulti : false, //设置是否可以同时选中多个借点。
391                         showIcon : true, //不显示图标
392                         showLine : false, //是否显示节点之间的连线
393                 },
394                 data : {
395                         simpleData : {
396                                 enable : true //如果设置为 true,请务必设置 setting.data.simpleData 内的其他参数: idKey / pIdKey / rootPId,并且让数据满足父子关系。
397                         }
398                 },
399                 callback : {
400                         onExpand : zTreeOnExpand, //每次节点展开后触发的事件。
401                         onCollapse : zTreeOnCollapse,
402                         //onClick: zTreeOnClick
403                 }
404         };
405         var zNodes = [];
406         initDeptTree();
407         function initDeptTree() {
408                 zNodes.push({
409                         id:"VDU",
410                         name:"VDU",
411                         isParent:true
412                 },
413                 {
414                         id:"HOST",
415                         name:"HOST",
416                         isParent:true
417                 });
418                 $.fn.zTree.init($("#deptTree"), setting, zNodes);
419                 zNodes=[];
420         }
421         function getDeptTreeNode(alarmCodeParentId) {
422                 if(alarmCodeParentId === "VDU"){
423                         url="/api/roc/v1/resource/vdus";
424                 }else if(alarmCodeParentId === "HOST"){
425                         url="/api/roc/v1/resource/hosts";
426                 }
427                 $.ajax({
428                         async : false,
429                         "dataType" : 'json',
430                         "type" : "GET",
431                         "url" : url,
432                         "contentType" : 'application/json; charset=utf-8',
433                         "success" : function (res, textStatus, jqXHR) {
434                                 var nodes = res.data;
435                                 if (nodes) {
436                                         for (var i = 0; i < nodes.length; i++) {
437                                                 zNodes.push({
438                                                         id : nodes[i].oid,
439                                                         parentId : alarmCodeParentId,//treenode节点
440                                                         name : nodes[i].name,
441                                                         isParent : false,
442                                                         oid:nodes[i].oid
443                                                 });
444                                         }
445                                 }
446                         },
447                         "error" : function () {}
448                 });
449         }
450         function zTreeOnExpand(event, treeId, treeNode) {
451                 getDeptTreeNode(treeNode.id);
452                 addNodesToTree(treeNode,treeId);
453                 zNodes=[];
454         };
455         function addNodesToTree(treeNode, treeId) {
456                 var obj = $.fn.zTree.getZTreeObj(treeId);
457                 var node=obj.getNodeByParam("id", treeNode.id, null)
458                 obj.addNodes(node, zNodes);
459         };
460         function zTreeOnCollapse(event, treeId, treeNode) {};
461 }
462
463 //初始化所有的树
464 alarmsUtil.initTree = function () {
465         //初始化告警码树和告警位置树
466         alarmsUtil.initProbableCausesTree();
467         alarmsUtil.initDeptTree();
468         
469         function initFormData(ruleType) {
470
471                 $("#confirmAction").hide();
472                 $("#filterType").hide();
473                 $("#action").hide();
474                 if (ruleType == "alarmFilter") {
475                         $("#filterType").show();
476                 } else if (ruleType == "ack") {
477                         $("#confirmAction").show();
478                 } else if (ruleType == "forward") {
479                         $("#action").show();
480                 }
481
482         }
483
484         function getNumbers(rule) {
485
486                 for (var i = 0; i < textValues.length; i++) {
487                         rule[textValues[i]] = $("input[name='" + textValues[i] + "']").val();
488                 }
489
490         }
491
492         function getCheckboxs(rule) {
493
494                 for (var i = 0; i < else_checkboxNames.length; i++) {
495                         rule[else_checkboxNames[i]] = $("input[name='" + else_checkboxNames[i] + "']").parent().hasClass('checked');
496                 }
497                 for (var item in checkboxNames_pair_spinnerIds) {
498                         rule[item] = $('#' + checkboxNames_pair_spinnerIds[item]).val();
499                 }
500         }
501
502         function setCheckboxs(rule) {
503
504                 for (var item in checkboxNames_pair_spinnerIds) {
505                         var value = 0;
506                         if (rule != "") {
507                                 value = rule[item];
508                         }
509                         $('#' + item).val(value);
510                         setSpinnerIsEnable(item, value);
511                 }
512                 for (var i = 0; i < else_checkboxNames.length; i++) {
513                         $("input[name='" + else_checkboxNames[i] + "']").parent().iCheck(rule[else_checkboxNames[i]] ? 'check' : 'uncheck');
514                 }
515         }
516 }
517
518 alarmsUtil.moveNode = function (item) {
519         if (item.hasClass("ict-arrowRight")) {
520                 alarmsUtil.rightNode(item);
521         } else if (item.hasClass("ict-arrowLeft")) {
522                 alarmsUtil.leftNode(item);
523         } else {
524                 alarmsUtil.removeAll(item);
525         }
526 }
527
528 /*树添加信息到右侧的功能*/
529
530 alarmsUtil.rightNode = function (item) {
531
532         var selecedNodeIds = [];
533         var treeType = item.attr('treeType');
534         var obj = $.fn.zTree.getZTreeObj(treeType);
535         var treeNodes = obj.getSelectedNodes();
536         var $table;
537
538         if (treeType == "deptTree") {
539                 var $tds = $("#selectedDeptTreeTable  td");
540                 $table = $("#selectedDeptTreeTable");
541                 for (var i = 0; i < $tds.length; i++) {
542                         selecedNodeIds.push($tds.eq(i).attr('nodeid'));
543                 }
544         } else if (treeType == "probableCausesTree") {
545                 var $tds = $("#selectedProbableCausesTreeTable  td");
546                 $table = $("#selectedProbableCausesTreeTable");
547                 for (var i = 0; i < $tds.length; i++) {
548                         var systemTypeAndProbableCause={};
549                         systemTypeAndProbableCause.codeId=$tds.eq(i).attr('codeId');
550                         systemTypeAndProbableCause.parentid=$tds.eq(i).attr('parentid');
551                         systemTypeAndProbableCause.type=$tds.eq(i).attr('type');
552                         selecedNodeIds.push(systemTypeAndProbableCause);
553                 }
554         }
555         
556         //树上被选中的元素
557         for (var i = 0; i < treeNodes.length; i++) {
558
559                 var htmlStr = "";
560                 var text = treeNodes[i].name;
561                 var id = treeNodes[i].id;
562                 var codeId = treeNodes[i].codeId;
563                 var type;
564                 var parentId;
565                 if (treeType == "deptTree") {
566                         var oid = treeNodes[i].oid;
567                         htmlStr = "<tr><td nodeId=" + id + "  oid=" + oid + "  >" + text + "</td></tr>";
568                 } else if (treeType == "probableCausesTree") {
569
570                         parentId = treeNodes[i].parentId;
571                         type = treeNodes[i].type;
572                         htmlStr = "<tr><td codeId=" + codeId + "  parentId=" + parentId + " type=" + type + "  >" + text + "</td></tr>";
573                 }
574                 
575                 if(treeType == "probableCausesTree"){
576                         if(treeNodes[i].type === 2){
577                                 for(i=0;i<selecedNodeIds.length;i++){
578                                         if(selecedNodeIds[i].codeId === codeId || selecedNodeIds[i].codeId === parentId){
579                                                 bootbox.alert("此节点(子树)或其父子树已经被添加!", function () {});
580                                                 return;
581                                         }
582                                 }
583                         }else if(treeNodes[i].type === 1){
584                                 $('#selectedProbableCausesTreeTable [parentid='+codeId+']').remove();
585                                 for(i=0;i<selecedNodeIds.length;i++){
586                                         if(selecedNodeIds[i].codeId === codeId ){
587                                                 bootbox.alert("此节点(子树)或其父子树已经被添加!", function () {});
588                                                 return;
589                                         }
590                                 }
591                         }else if(treeNodes[i].type === 0){
592                                 bootbox.alert("不支持添加MOC", function () {});
593                                 break;
594                         }
595                 }
596
597                 $table.append(htmlStr);
598
599         }
600
601         $('#selectedDeptTreeTable td').on("click", function () {
602
603                 //获得所有选择的td
604                 var $tds = $('#selectedDeptTree td');
605                 //遍历改变样式
606                 for (var i = 0; i < $tds.length; i++) {
607                         $tds.eq(i).removeClass('tallCellSelected');
608                         $tds.eq(i).parent().removeClass('checked');
609                 }
610                 //当前td设为选中
611                 $(this).addClass('tallCellSelected');
612                 $(this).parent().addClass("checked"); //tr 添加一个 checked 样式。
613         });
614
615         $('#selectedProbableCausesTreeTable td').on("click", function () {
616
617                 //获得所有选择的td
618                 var $tds = $('#selectedProbableCausesTreeTable td');
619                 //遍历改变样式
620                 for (var i = 0; i < $tds.length; i++) {
621                         $tds.eq(i).removeClass('tallCellSelected');
622                         $tds.eq(i).parent().removeClass('checked');
623                 }
624                 //当前td设为选中
625                 $(this).addClass('tallCellSelected');
626                 $(this).parent().addClass("checked"); //tr 添加一个 checked 样式。
627         });
628
629 }
630
631
632
633 alarmsUtil.leftNode = function (item) {
634
635         var treeType = item.attr('treeType');
636         if (treeType == "deptTree") {
637                 $('#selectedDeptTreeTable').children().children(".checked").remove();
638         } else if (treeType == "probableCausesTree") {
639                 $('#selectedProbableCausesTreeTable').children().children(".checked").remove();
640         }
641
642 }
643
644 alarmsUtil.removeAll = function (item) {
645
646         var treeType = item.attr('treeType');
647         if (treeType == "deptTree") { //如果是资源树
648                 $('#selectedDeptTreeTable').children().remove();
649         } else if (treeType == "probableCausesTree") {
650                 $('#selectedProbableCausesTreeTable').children().remove();
651         }
652 }
653
654
655
656
657
658 //调用datarangepicker组件 datarange 初始化
659
660 alarmsUtil.setDateRange = function (dataRangeId, vm) {
661
662         var open = 'right';
663         var optionSet1 = {
664                 startDate : "2015-08-02",
665                 endDate : "2015-08-03",
666                 format : 'YYYY-MM-DD h:mm A',
667                 dateLimit : {
668                         days : 180
669                 },
670                 showWeekNumbers : false,
671                 timePicker : true,
672                 timePickerIncrement : 5,
673                 opens : open,
674                 separator : ' - ',
675                 locale : {
676                         applyLabel : $.i18n.prop('ngict_fm_iui_curalarm_ok'),
677                         cancelLabel : $.i18n.prop('ngict_fm_iui_curalarm_cancel'),
678                         fromLabel : $.i18n.prop('ngict_fm_iui_curalarm_from'),
679                         toLabel : $.i18n.prop('ngict_fm_iui_curalarm_to'),
680                         daysOfWeek : [
681                                 $.i18n.prop('ngict_fm_iui_curalarm_Sun'),
682                                 $.i18n.prop('ngict_fm_iui_curalarm_Mon'),
683                                 $.i18n.prop('ngict_fm_iui_curalarm_Tues'),
684                                 $.i18n.prop('ngict_fm_iui_curalarm_Wed'),
685                                 $.i18n.prop('ngict_fm_iui_curalarm_Thurs'),
686                                 $.i18n.prop('ngict_fm_iui_curalarm_Fri'),
687                                 $.i18n.prop('ngict_fm_iui_curalarm_Sat')
688                                 ],
689                         monthNames : [$.i18n.prop('ngict_fm_iui_curalarm_January'), $.i18n.prop('ngict_fm_iui_curalarm_February'), $.i18n.prop('ngict_fm_iui_curalarm_March'), $.i18n.prop('ngict_fm_iui_curalarm_April'), $.i18n.prop('ngict_fm_iui_curalarm_May'), $.i18n.prop('ngict_fm_iui_curalarm_June'), $.i18n.prop('ngict_fm_iui_curalarm_July'), $.i18n.prop('ngict_fm_iui_curalarm_August'), $.i18n.prop('ngict_fm_iui_curalarm_September'), $.i18n.prop('ngict_fm_iui_curalarm_October'), $.i18n.prop('ngict_fm_iui_curalarm_November'), $.i18n.prop('ngict_fm_iui_curalarm_December')],
690                         firstDay : 1
691                 }
692         };
693
694         //datarangepicker确认
695         $('input[id="' + dataRangeId + '"]').bind('apply.daterangepicker', function () {
696                 //获取时间范围,查询
697                 // 都设置为0点
698                 setTime($(this));
699                 // 更新tooltip内容
700                 $(this).attr("data-original-title", $(this).val());
701         });
702
703         $('input[id="' + dataRangeId + '"]').daterangepicker(optionSet1);
704
705 };
706
707 //关闭打开datarangepicker选择器
708 alarmsUtil.dateRangeEnableDisable = function (customDateRangeId) {
709
710         $('#' + customDateRangeId).on('ifChecked', function () {
711
712                 if (customDateRangeId == "customAckTime") {
713                         vm.dataRangeLocationDisabled = false;
714                         if(vm.fmConds.ackTimeStarTime!=null && vm.fmConds.ackTimeEndTime!=null){
715                                 vm.fmConds.ackTimeMode=0;
716                         }
717                 } else if (customDateRangeId == "customRaisedTime") {
718                         vm.dataRangeTypeDisabled = false;
719                         if(vm.fmConds.alarmRaisedStartTime!=null && vm.fmConds.alarmRaisedEndTime!=null){
720                                 vm.fmConds.alarmRaisedTimeMode=0;
721                         }
722                 } else if (customDateRangeId == "customClearTime"){
723                         vm.dataRangeCodeDisabled = false;
724                         if(vm.fmConds.clearedTimeStartTime!=null && vm.fmConds.clearedTimeEndTime!=null){
725                                 vm.fmConds.clearedTimeMode=0;
726                         }
727                 }
728         });
729         //setTime($('#' + dataRangeId));
730
731         $('#' + customDateRangeId).on('ifUnchecked', function () {
732
733                 if (customDateRangeId == "customAckTime") {
734
735                         vm.dataRangeLocationDisabled = true;
736                         vm.fmConds.ackTimeMode=null;
737
738                 } else if (customDateRangeId == "customRaisedTime") {
739
740                         vm.dataRangeTypeDisabled = true;
741                         vm.fmConds.alarmRaisedTimeMode=null;
742                         
743                 } else if (customDateRangeId == "customClearTime"){
744                 
745                         vm.dataRangeCodeDisabled = true;
746                         vm.fmConds.clearedTimeMode=null;
747                         
748                 }
749         });
750
751 }
752
753 //checkbox时间选择
754 alarmsUtil.dateRangeCustom = function (vm) {
755
756         $("input[name=timeConfirm]").on("ifClicked", function () {
757                 if ($(this).parent().hasClass("checked")) {
758                         $(this).iCheck('uncheck');
759                 }
760         });
761
762         $("input[name=timeOccur]").on("ifClicked", function () {
763                 if ($(this).parent().hasClass("checked")) {
764                         $(this).iCheck('uncheck');
765                 }
766         });
767
768         $("input[name=timeClear]").on("ifClicked", function () {
769                 if ($(this).parent().hasClass("checked")) {
770                         $(this).iCheck('uncheck');
771                 }
772         });
773
774         $("input[cond_id=time]").on('ifChecked', function () {
775
776                 var nowTime = (new Date()).toLocaleDateString();
777                 var condDate = $(this).attr("cond_value");
778
779                 if ($(this).attr("name") == "timeConfirm") {
780                         if (condDate == "1") {
781                                 vm.fmConds.ackRelativeTime = 1 * 24 * 60 * 60 * 1000;
782                                 vm.fmConds.ackTimeMode = 1;
783                         } else if (condDate == "2") {
784                                 vm.fmConds.ackRelativeTime = 2 * 24 * 60 * 60 * 1000;
785                                 vm.fmConds.ackTimeMode = 1;
786                         } else if (condDate == "7") {
787                                 vm.fmConds.ackRelativeTime = 7 * 24 * 60 * 60 * 1000;
788                                 vm.fmConds.ackTimeMode = 1;
789                         }
790                 }
791
792                 if ($(this).attr("name") == "timeOccur") {
793                         if (condDate == "1") {
794                                 vm.fmConds.alarmRaisedRelativeTime = 1 * 24 * 60 * 60 * 1000;
795                                 vm.fmConds.alarmRaisedTimeMode = 1;
796                         } else if (condDate == "2") {
797                                 vm.fmConds.alarmRaisedRelativeTime = 2 * 24 * 60 * 60 * 1000;
798                                 vm.fmConds.alarmRaisedTimeMode = 1;
799                         } else if (condDate == "7") {
800                                 vm.fmConds.alarmRaisedRelativeTime = 7 * 24 * 60 * 60 * 1000;
801                                 vm.fmConds.alarmRaisedTimeMode = 1;
802                         }
803                 }
804
805                 if ($(this).attr("name") == "timeClear") {
806                         if (condDate == "1") {
807                                 vm.fmConds.clearedTimeRelativeTime =1 * 24 * 60 * 60 * 1000;
808                                 vm.fmConds.clearedTimeMode = 1;
809                         } else if (condDate == "2") {
810                                 vm.fmConds.clearedTimeRelativeTime =2 * 24 * 60 * 60 * 1000;
811                                 vm.fmConds.clearedTimeMode = 1;
812                         } else if (condDate == "7") {
813                                 vm.fmConds.clearedTimeRelativeTime =7 * 24 * 60 * 60 * 1000;
814                                 vm.fmConds.clearedTimeMode = 1;
815                         }
816                 }
817
818                 //refreshByCond();
819         });
820         
821         $("input[cond_id=time]").on('ifUnchecked', function () {
822                 if ($(this).attr("name") == "timeConfirm") {
823                         vm.fmConds.ackRelativeTime = null;
824                         vm.fmConds.ackTimeMode = null;
825                 }else if ($(this).attr("name") == "timeOccur") {
826                         vm.fmConds.alarmRaisedRelativeTime = null;
827                         vm.fmConds.alarmRaisedTimeMode = null;
828                 }else if ($(this).attr("name") == "timeClear") {
829                         vm.fmConds.clearedTimeRelativeTime = null;
830                         vm.fmConds.clearedTimeMode = null;
831                 }
832         });
833
834 }
835
836
837 /*格式化日期*/
838 Date.prototype.format = function (format) {
839
840         /*
841
842          * format="yyyy-MM-dd hh:mm:ss";
843
844          */
845         var o = {
846                 "M+" : this.getMonth() + 1,
847                 "d+" : this.getDate(),
848                 "h+" : this.getHours(),
849                 "m+" : this.getMinutes(),
850                 "s+" : this.getSeconds(),
851                 "q+" : Math.floor((this.getMonth() + 3) / 3),
852                 "S" : this.getMilliseconds()
853         }
854         if (/(y+)/.test(format)) {
855                 format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4
856                                          - RegExp.$1.length));
857         }
858         for (var k in o) {
859                 if (new RegExp("(" + k + ")").test(format)) {
860                         format = format.replace(RegExp.$1, RegExp.$1.length == 1
861                                          ? o[k]
862                                          : ("00" + o[k]).substr(("" + o[k]).length));
863                 }
864         }
865         return format;
866
867 }
868
869 //daterangepicker设置时间
870 function setTime($obj) {
871
872         var title = $obj.attr('dtitle');
873         var arr = $obj.val().split(' - ');
874         //排除日历组件空字符串的情况。
875         if (arr[0] != '') {
876                 var starTime = new Date(arr[0].replace(/-/g, "/")).getTime();
877                 var endTime = new Date(arr[1].replace(/-/g, "/")).getTime();
878                 if (title == "ackTime") {
879                         vm.fmConds.ackTimeStarTime = starTime;
880                         vm.fmConds.ackTimeEndTime = endTime;
881                         vm.fmConds.ackTimeMode=0;
882                 } else if (title == "raisedTime") {
883                         vm.fmConds.alarmRaisedStartTime = starTime;
884                         vm.fmConds.alarmRaisedEndTime = endTime;
885                         vm.fmConds.alarmRaisedTimeMode=0;
886                 } else if (title == "clearTime") {
887                         vm.fmConds.clearedTimeStartTime = starTime;
888                         vm.fmConds.clearedTimeEndTime = endTime;
889                         vm.fmConds.clearedTimeMode=0;
890                 }
891         }
892 }
893
894 /*
895 @param type 1 day 2 week  3 month  4 year
896  */
897 function reduceDate(date, val, type) {
898
899         var d = new Date(date);
900         if (type == 'day') {
901                 d.setDate(d.getDate() - val);
902         } else if (type == 'week') {
903                 d.setDate(d.getDate() - val * 7);
904         } else if (type == 'month') {
905                 d.setMonth(d.getMonth() - val);
906         } else if (type == 'year') {
907                 d.setFullYear(d.getFullYear() - val);
908         }
909         var month = d.getMonth() + 1;
910         var day = d.getDate();
911         if (month < 10) {
912                 month = "0" + month;
913         }
914         if (day < 10) {
915                 day = "0" + day;
916         }
917         var val = d.getFullYear() + "-" + month + "-" + day;
918         return val;
919 }
920
921 alarmsUtil.condSave = function (cond, saveUrl, name) {
922
923         var conds = [];
924         if (cond.severity != null && cond.severity != "undefined" && cond.severity.length > 0) {
925                 var severity = '{ "type": "Severity", "data": [{"severity": "' + cond.severity + '"}]}'; //级别
926                 var severityObj = window.JSON.parse(severity)
927                         conds.push(severityObj);
928         }
929         if (cond.ackState != null && cond.ackState != "undefined") {
930                 var ackState = '{ "type": "AckState", "data": [{"ackState": "' + cond.ackState + '"}]}'; //级别
931                 var ackStateObj = window.JSON.parse(ackState)
932                         conds.push(ackStateObj);
933         }
934         if (cond.filterState != null && cond.filterState != "undefined") {
935                 var filterState = '{ "type": "FilterState", "data": [{"filterState": "' + cond.filterState + '"}]}'; //级别
936                 var filterStateObj = window.JSON.parse(filterState)
937                         conds.push(filterStateObj);
938         }
939
940         if (cond.ackTimeStarTime != null && cond.ackTimeStarTime != "undefined") {
941                 var ackTime = '{ "type": "AckTime", "data": [{"mode":"0","start":"' + cond.ackTimeStarTime + '","end":"' + cond.ackTimeEndTime + '" }]}'; //级别
942                 var ackTimeObj = window.JSON.parse(ackTime)
943                         conds.push(ackTimeObj);
944         }
945         if (cond.alarmRaisedStartTime != null && cond.alarmRaisedStartTime != "undefined") {
946                 var alarmRaisedTime = '{ "type": "RaisedTime", "data": [{"mode":"0","start":"' + cond.alarmRaisedStartTime + '","end":"' + cond.alarmRaisedEndTime + '" }]}'; //级别
947                 var alarmRaisedTimeObj = window.JSON.parse(alarmRaisedTime)
948                         conds.push(alarmRaisedTimeObj);
949         }
950
951         if (cond.clearedTimeStarTime != null && cond.clearedTimeStarTime != "undefined") {
952                 var clearedTime = '{ "type": "ClearedTime", "data": [{"mode":"0","start":"' + cond.clearedTimeStarTime + '","end":"' + cond.clearedTimeEndime + '" }]}'; //级别
953                 var severityObj = window.JSON.parse(clearedTime)
954                         conds.push(severityObj);
955         }
956         var resJsonObj = AlarmConds.parseActiveConds2JSon(conds);
957         resJsonObj.rule.name = name;
958         resJsonObj.rule.ruleType = vm.ruleType;
959         var resStr = window.JSON.stringify(resJsonObj);
960         var dataSource = "isc_AosRestDataSource_1";
961         var operationType = "add";
962         var data1 = {
963                 dataSource : dataSource,
964                 operationType : operationType,
965                 data : resJsonObj,
966                 oldValues : null
967         };
968         $.ajax({
969                 dataType : "json",
970                 type : "POST",
971                 contentType : 'application/json; charset=utf-8',
972                 url : saveUrl,
973                 data : JSON.stringify(data1),
974                 async : false,
975                 success : function (msg) {
976                         $('#saveModalCancle').trigger("click");
977                 }
978         });
979
980 }
981
982 Array.prototype.contains = function (item) {
983         return RegExp("(^|,)" + item.toString() + "($|,)").test(this);
984 };
985
986 /*
987 @param  alarmsType  1当前告警  2历史告警
988 @param  condRuleId  查询条件的RuleId
989  */
990 alarmsUtil.queryByParma = function (alarmsType, condRuleId) {
991
992         //1.判断是当前告警还是历史告警。
993
994         var sourceUrl;
995         if (alarmsType == 1) { //当前告警
996                 sourceUrl = '/web/rest/web/fm/curqueryview?' + 'data={"ruleType":1,"ruleSort":1}&isc_flag=smartClient&_operationType=fetch&_startRow=0&_endRow=75&_textMatchStyle=exact&_componentId=condList&_dataSource=isc_RestDataSource_7&isc_metaDataPrefix=_&isc_dataFormat=json';
997                 vm.ruleType = 1;
998                 vm.$queryAlarmsInfoUrl = "/ngict/rest/fm/curalarms";
999                 vm.curalarmsType = "curalarms";
1000                 vm.showClear = true; //清除按钮
1001
1002         } else if(alarmsType == 2){ //历史告警
1003
1004                 sourceUrl = '/web/rest/web/fm/curqueryview?' + 'data={"ruleType":2,"ruleSort":1}&isc_flag=smartClient&_operationType=fetch&_startRow=0&_endRow=75&_textMatchStyle=exact&_componentId=condList&_dataSource=isc_RestDataSource_7&isc_metaDataPrefix=_&isc_dataFormat=json';
1005                 vm.ruleType = 2;
1006                 vm.$queryAlarmsInfoUrl = "/ngict/rest/fm/hisalarms";
1007                 vm.hisalarmsType = "hisalarms";
1008                 vm.showClear = false; //清除按钮
1009         }else if(alarmsType == 3){ //通知
1010                 sourceUrl = '/web/rest/web/fm/curqueryview?' + 'data={"ruleType":2,"ruleSort":1}&isc_flag=smartClient&_operationType=fetch&_startRow=0&_endRow=75&_textMatchStyle=exact&_componentId=condList&_dataSource=isc_RestDataSource_7&isc_metaDataPrefix=_&isc_dataFormat=json';
1011                 vm.ruleType = 3;
1012                 vm.$queryAlarmsInfoUrl = "/ngict/rest/fm/notify";
1013                 vm.notificationType = "notification";
1014                 vm.showClear = false; //清除按钮
1015         }
1016
1017         //如果没传condRuleId 直接返回
1018         if (condRuleId == null || condRuleId == "undefined") {
1019                 return;
1020         }
1021
1022         //2.取出告警规则的数据。
1023
1024         $.ajax({
1025                 type : "get",
1026                 data : null,
1027                 url : sourceUrl,
1028                 async : false,
1029                 success : function (msg) {
1030                         //1.遍历返回的条件数组确定是哪一个rule规则。
1031                         var ruleCondArr = msg.response.data;
1032                         var xmlData = "";
1033                         for (var i = 0; i < ruleCondArr.length; i++) {
1034                                 if (ruleCondArr[i].ruleId == condRuleId) { //condRuleId
1035                                         xmlData = "<xml>" + ruleCondArr[i].ruleData + "</xml>" //在jQuery裡,如果要直接将字串转成XML物件,记得前后方要加上<xml>及</xml>,才会被当成XML处理;
1036                                                 break;
1037                                 }
1038                         };
1039
1040                         //3.解析数据的xml联动页面的组件。
1041                         $(xmlData).find("CompoundCond").each(function () {
1042                                 //1.级别
1043                                 for (var i = 0; i < vm.severityTypes.length; i++) {
1044                                         vm.severityTypes[i].value = false;
1045                                 }
1046                                 if ($(this).find("PerceivedSeverity").attr('value') != null && $(this).find("PerceivedSeverity ").attr('value') != 'undefined') {
1047                                         var perceivedSeverityArr = $(this).find("PerceivedSeverity ").attr('value').split(',');
1048                                         for (var i = 0; i < perceivedSeverityArr.length; i++) {
1049                                                 if (perceivedSeverityArr.contains(vm.severityTypes[i].id)) {
1050                                                         vm.severityTypes[i].value = true;
1051                                                 }
1052                                         };
1053                                 }
1054
1055                                 //2.确认状态
1056                                 for (var i = 0; i < vm.ackStateTypes.length; i++) {
1057                                         vm.ackStateTypes[i].value = false;
1058                                 };
1059                                 var ackStateV = $(this).find("AckState").attr('value');
1060                                 if (ackStateV != null && ackStateV != "undefined") {
1061                                         var ackStateArr = ackStateV.split(',');
1062                                         for (var i = 0; i < vm.ackStateTypes.length; i++) {
1063                                                 if (ackStateArr.contains(vm.ackStateTypes[i].id)) {
1064                                                         vm.ackStateTypes[i].value = true;
1065                                                 }
1066                                         };
1067                                 }
1068
1069                                 //3.可见性
1070                                 if(vm.ruleType === 1){
1071                                         for (var i = 0; i < vm.filterStateTypes.length; i++) {
1072                                                         vm.filterStateTypes[i].value = false;
1073                                                 };
1074                                         var filterStateV = $(this).find("FilterState").attr('value')
1075                                                 if (filterStateV != null && filterStateV != "undefined") {
1076                                                         var filterStateArr = filterStateV.split(',');
1077                                                         for (var i = 0; i < vm.filterStateTypes.length; i++) {
1078                                                                 if (filterStateArr.contains(vm.filterStateTypes[i].id)) {
1079                                                                         vm.filterStateTypes[i].value = true;
1080                                                                 }
1081                                                         };
1082                                                 }
1083                                 }
1084                                         //4.确认时间
1085
1086                                 var dataRangeAck = $('input[dtitle="ackTime"]'); //日历组件
1087                                 vm.fmConds.ackTimeStarTime = null;
1088                                 vm.fmConds.ackTimeEndTime = null;
1089                                 dataRangeAck.val('');
1090                                 var ackTimeStartMs = $(this).find("AckTime").attr('start');
1091                                 var ackTimeEndMs = $(this).find("AckTime").attr('end');
1092                                 if (ackTimeStartMs != null && ackTimeStartMs != "undefined" && ackTimeEndMs != null && ackTimeEndMs != "undefined") {
1093                                         vm.fmConds.ackTimeStarTime = ackTimeStartMs; //确认时间
1094                                         vm.fmConds.ackTimeEndTime = ackTimeEndMs;
1095                                         var ackTimeStarTime = new Date(parseInt(ackTimeStartMs)).format('yyyy-MM-dd');
1096                                         var ackTimeEndTime = new Date(parseInt(ackTimeEndMs)).format('yyyy-MM-dd');
1097                                         dataRangeAck.val(ackTimeStarTime + ' - ' + ackTimeEndTime);
1098                                 }
1099
1100                                 //5.发生时间
1101                                 vm.fmConds.alarmRaisedStartTime = null;
1102                                 vm.fmConds.alarmRaisedEndTime = null;
1103                                 var dataRangeRaised = $('input[dtitle="raisedTime"]'); //日历组件
1104                                 dataRangeRaised.val('');
1105                                 var raisedTimeStartMs = $(this).find("RaisedTime").attr('start');
1106                                 var raisedTimeEndMs = $(this).find("RaisedTime").attr('end');
1107                                 if (raisedTimeStartMs != null && raisedTimeStartMs != "undefined" && raisedTimeEndMs != null && raisedTimeEndMs != "undefined") {
1108                                         vm.fmConds.alarmRaisedStartTime = raisedTimeStartMs; //发生时间
1109                                         vm.fmConds.alarmRaisedEndTime = raisedTimeEndMs;
1110                                         var raisedTimeStart = new Date(parseInt(raisedTimeStartMs)).format('yyyy-MM-dd');
1111                                         var raisedTimeEnd = new Date(parseInt(raisedTimeEndMs)).format('yyyy-MM-dd');
1112                                         dataRangeRaised.val(raisedTimeStart + ' - ' + raisedTimeEnd);
1113                                 }
1114
1115                                 //6.清除时间
1116
1117
1118                                 //7.告警码
1119
1120                                 vm.fmConds.probableCause = null;
1121                                 var probableCauseArr = $(this).find("ProbableCause").attr('value');
1122                                 if (probableCauseArr != null && probableCauseArr != "undefined") {
1123                                         for (var i = 0; i < probableCauseArr.length; i++) {
1124                                                 vm.fmConds.probableCause = probableCauseArr;
1125                                                 // 联动
1126                                         };
1127                                 }
1128
1129                                 //8.告警位置
1130                                 vm.fmConds.probableCause = null;
1131                                 var newPositionCondArr = $(this).find("NewPositionCond").attr('value');
1132                                 if (newPositionCondArr != null && newPositionCondArr != "undefined")
1133                                         for (var i = 0; i < newPositionCondArr.length; i++) {
1134                                                 // 联动
1135                                         };
1136
1137                                 //9.告警类型
1138                                 vm.fmConds.alarmType = null;
1139                                 var alarmTypeArr = $(this).find("AlarmType").attr('value');
1140                                 if (alarmTypeArr != null && alarmTypeArr != "undefined") {
1141                                         for (var i = 0; i < alarmTypeArr.length; i++) {
1142                                                 vm.fmConds.alarmType = alarmTypeArr;
1143                                         };
1144                                 }
1145                         });
1146                 }
1147         });
1148 }
1149
1150
1151 /*
1152  获取系统类型中的告警码数量
1153 */
1154 alarmsUtil.getProbableCauseCountBySystemType=function(systemType){
1155         
1156         //"/ngict/rest/fm/probableCause?request={"systemTypes":[6,12]}"
1157         var getData={};
1158         var request={};
1159         request.systemTypes=systemType;
1160         getData.request = JSON.stringify(request);
1161         $.ajax({
1162                 type : "get",
1163                 data : getData,
1164                 url : "/ngict/rest/fm/probableCause",
1165                 async : true,
1166                 success : function (msg) {
1167                         vm.alarmCodeSelectedCount+=msg.length;
1168                 }});
1169 }