上篇文章介绍了一个后台产生故障,前台接受修改树节点的icon,这是相对的故障解决之后,根据修改的故障等级和故障的设备id,来修改相应icon。
相应的逻辑是,当页面确定消除故障是,会根据故障等级和设备id去数据库消除,然后再action层获取数据(这边方法下一个文章说一下),前台就根据这个子节点去修改当前的icon,然后选中子节点的父节点 ,去遍历当前子节点判断当前父节点最高的故障等级是不是消除的故障等级,如果是就修改成消除之后的最大故障等级,如果不是,只修改当前子节点的icon,其他不变。
var faultinfo = JSON.parse(event.data);
var roonodes = treeForTab.getRootNode().childNodes;
for(var i=0;i<faultinfo.length;i++){
findchildnode(roonodes[0],faultinfo[i]);
}
// 获取主节点
// 开始递归
function findchildnode(roonodes,data) {
var faultLevel = data.faultMaxLevel;
var moduleId = data.moduleId;
var childnodes = roonodes.childNodes;
for (var i = 0; i < childnodes.length; i++) { // 从节点中取出子节点依次遍历
var rootnode = childnodes[i];
var maxLevel = rootnode.get("faultMaxLevel");
var rootnodeModuleId = rootnode.get("moduleId");
if (moduleId == rootnodeModuleId&&rootnode.childNodes.length==0) {
//if (maxLevel >faultLevel) {
rootnode.set("faultMaxLevel",faultLevel);
var imgUrl = setImg(rootnode,faultLevel)
if(imgUrl!=null){
var parentnode = rootnode.parentNode;
findnownode(parentnode);
}
//}
}
if (rootnode.childNodes.length > 0) { // 判断子节点下是否存在子节点,个人觉得判断是否leaf不太合理,因为有时候不是leaf的节点也可能没有子节点
findchildnode(rootnode,data); // 如果存在子节点 递归
}
}
}
function findnownode(parentnode) {
var childNodes = parentnode.childNodes;
var pLevel = parentnode.get("faultMaxLevel");
var maxLevel = 0 ;
for (var i = 0, l = childNodes.length; i < l; i++) {
var child = childNodes[i];
var level = child.get("faultMaxLevel");
maxLevel = level>maxLevel?level:maxLevel;
}
if (maxLevel!=pLevel){
parentnode.set("faultMaxLevel",maxLevel);
setImg(parentnode,maxLevel);
// 设置parent的最大level
// 设置图片
var pNode = parentnode.parentNode;
if (null != pNode) {
findnownode(pNode);
}
}
}
function setParentIcon(node, icon) {
var parent = node.parentNode;
if (parent != null) {
parent.set("icon", icon);
}
}
function setImg(rootnode,faultLevel) {
var imgUrl = null;
if (faultLevel == 5) {
imgUrl = "image/Notice16.png"
} else if (faultLevel == 10) {
imgUrl = "image/GeneralWarning16.png"
} else if (faultLevel == 15) {
imgUrl = "image/UrgentWarning16.png"
} else if(faultLevel == 20){
imgUrl = "image/SeriousWarning16.png"
}else if(faultLevel == 0){
imgUrl ='';
}
if (imgUrl !=null) {
rootnode.set("icon", imgUrl);
}
return imgUrl;
}