');
}
var iedList = ied_strcut_detail.children("span.salve_ied");
for (var i = 0; i < iedList.length; i++) {
if (i % 2 == 0) iedList.eq(i).addClass("left");
else iedList.eq(i).addClass("right");
}
ied_strcut_detail.children("span.ied_show_block.left").each(function(ind) {
var t = 150;
if (ind > 0) {
var $tmp = ied_strcut_detail.children("span.ied_show_block.left:eq(" + (ind - 1) + ")");
t = $tmp.position().top + $tmp.height() + 30;
}
$(this).css({
left: "5rem",
top: t + "px"
});
});
ied_strcut_detail.children("span.ied_show_block.right").each(function(ind) {
var t = 150;
if (ind > 0) {
var $tmp = ied_strcut_detail.children("span.ied_show_block.right:eq(" + (ind - 1) + ")");
t = $tmp.position().top + $tmp.height() + 30;
}
$(this).css({
left: "90rem",
top: t + "px"
});
});
//计算主IED的高度
var lastLeftEle = ied_strcut_detail.children("span.ied_show_block.left:last");
var lastRigthEle = ied_strcut_detail.children("span.ied_show_block.right:last");
if (lastLeftEle.length > 0 && lastRigthEle.length > 0)
selfIed.css("height", Math.max(lastLeftEle.position().top + lastLeftEle.height(), lastRigthEle.position().top + lastRigthEle.height()) + 50 + "px");
else if (lastLeftEle.length > 0)
selfIed.css("height", Math.max(lastLeftEle.position().top + lastLeftEle.height(), 0) + 50 + "px");
else if (lastRigthEle.length > 0)
selfIed.css("height", Math.max(0, lastRigthEle.position().top + lastRigthEle.height()) + 50 + "px");
else return;
//生成主IED的控制块
makeSlefIedBlock(selfIed, data, drawRelationLine);
}
var drawRelationLine = function(data) {
var selfIed = ied_strcut_detail.children(".ied_show_block.self_ied");
ied_strcut_detail.append("
");
var canvas = PoliceObject.p_createCanvas(ied_strcut_detail.find("canvas"));
//---------------------------
//绘制连接线
var selfIedXY = selfIed.position();
ied_strcut_detail.find(".ied_show_block.left .block").each(function() {
//左侧ied输入到主IED的连接线
var t = $(this),
xy = t.position();
var leftSelf = selfIedXY.left + selfIed.css("margin-left").replace("px", "") * 1;
var left = xy.left + t.width() + t.parent().parent().position().left + (t.css("margin-left").replace("px", "") * 1) + 2;
var top = xy.top + (t.height() / 2) + t.parent().parent().position().top + (t.css("margin-top").replace("px", "") * 1) + 1;
var lineColor = "#134BEA";
var attrtype = $.trim(t.attr('attr_type')).toLocaleLowerCase();
if (attrtype != "" && "smv,sv".indexOf(attrtype) > -1) {
lineColor = "red";
t.css({
"color": lineColor,
"border-color": lineColor
});
}
PoliceObject.p_drawLine(canvas, [left, top], [leftSelf, top], lineColor);
var n1 = PoliceObject.p_drawNumber(ied_strcut_detail, [leftSelf, top], [left, top], t.attr('inputs_cnt'), "left");
n1.attr({
"m_iedname": selfIed.attr("ied_name"),
"s_iedname": t.parents(".salve_ied").attr("ied_name"),
"s_ctrlid": t.attr('ctrl_id')
});
});
ied_strcut_detail.find(".ied_show_block.right .block").each(function() {
//右侧ied输入到主IED的连接线
var t = $(this),
xy = t.position();
var left1 = selfIedXY.left + selfIed.width() + selfIed.css("margin-left").replace("px", "") * 1 + 5;
var left2 = xy.left + t.parent().parent().position().left + (t.css("margin-left").replace("px", "") * 1) + 2;
var top = xy.top + (t.height() / 2) + t.parent().parent().position().top + (t.css("margin-top").replace("px", "") * 1) + 1;
var lineColor = "#134BEA";
var attrtype = $.trim(t.attr('attr_type')).toLocaleLowerCase();
if (attrtype != "" && "smv,sv".indexOf(attrtype) > -1) {
lineColor = "red";
t.css({
"color": lineColor,
"border-color": lineColor
});
}
PoliceObject.p_drawLine(canvas, [left2, top], [left1, top], lineColor);
var n1 = PoliceObject.p_drawNumber(ied_strcut_detail, [left1, top], [left2, top], t.attr('inputs_cnt'), "right");
n1.attr({
"m_iedname": selfIed.attr("ied_name"),
"s_iedname": t.parents(".salve_ied").attr("ied_name"),
"s_ctrlid": t.attr('ctrl_id')
});
});
//绘制输出连接线
var outR_cnt = 0;
var outL_cnt = 0;
for (var i = 0; i < data.ControlBlock.length; i++) {
var item = data.ControlBlock[i];
//主IED输出到其他IED
var sourceCtrl = selfIed.find(".block[node_id='" + item.ctrl_id + "']");
//目标IED
var toIed = ied_strcut_detail.find(".ied_show_block[ied_name='" + item.source_ied_name + "']");
var x1, y1, x2, y2 = 0;
var w, h, l, t = 0;
var lineColor = "#516380";
var attrtype = $.trim(sourceCtrl.attr('attr_type')).toLocaleLowerCase();
if (attrtype != "" && "smv,sv".indexOf(attrtype) > -1) {
lineColor = "red";
sourceCtrl.css({
"color": lineColor,
"border-color": lineColor
});
}
if (item.ref_type == 0) {
var direction = "";
if (toIed.hasClass("left")) {
direction = "left";
//在左边
x1 = selfIedXY.left + sourceCtrl.position().left + sourceCtrl.css("margin-left").replace("px", "") * 1 + selfIed.css("margin-left").replace("px", "") * 1;
y1 = selfIedXY.top + sourceCtrl.position().top + sourceCtrl.css("margin-top").replace("px", "") * 1 + selfIed.css("margin-top").replace("px", "") * 1 + sourceCtrl.height() / 2;
x2 = toIed.position().left + toIed.width();
y2 = toIed.position().top + (toIed.height() / 2);
PoliceObject.p_drawLine(canvas, [x1, y1], [x2, y2 + outL_cnt * 8], lineColor);
outL_cnt++;
} else {
direction = "right";
//在右边
x1 = selfIedXY.left + sourceCtrl.position().left + sourceCtrl.width() + sourceCtrl.css("margin-left").replace("px", "") * 1 + selfIed.css("margin-left").replace("px", "") * 1 + 5;
y1 = selfIedXY.top + sourceCtrl.position().top + sourceCtrl.css("margin-top").replace("px", "") * 1 + (sourceCtrl.height() / 2);
x2 = toIed.position().left;
y2 = toIed.position().top + (toIed.height() / 2);
PoliceObject.p_drawLine(canvas, [x1, y1], [x2, y2 + outR_cnt * 8], lineColor);
outR_cnt++;
}
var n1 = PoliceObject.p_drawNumber(ied_strcut_detail, [x1, y1], [x2, y2], item.inputs_cnt, direction);
n1.attr({
"m_iedname": selfIed.attr("ied_name"),
"s_iedname": item.source_ied_name,
"m_ctrlid": item.ctrl_id,
"s_ctrlid": ""
});
}
}
//绑定控制块关系数量,点击数量打开许端子详细关系窗口
ied_strcut_detail.find(".inputs_num").off().on('click', function() {
var tmpEle = $(this);
DialogObject.Open($("#dialog_public"), {
size: ["100rem", "55rem"],
para: {
"title": "虚端子—详细信息",
"s_ied_name": $.trim(tmpEle.attr("s_iedname")),
"m_ied_name": $.trim(tmpEle.attr("m_iedname")),
"m_ctrlid": $.trim(tmpEle.attr("m_ctrlid")),
"s_ctrlid": $.trim(tmpEle.attr("s_ctrlid")),
"scd_id": ied_strcut_detail.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID
},
callback: function(win, p1) {
win.find(".caption>b").html(p1.title);
var h = (win.height() - win.find(".caption").height() - win.find(".footer").height() - win.find(".dataitemlist").css("padding-top").replace("px", "") * 1);
var dataContent = win.find(".dataitemlist").height(h + "px").html(Tools.LoadingText("正在加载数据中...")).slimscroll({
height: h + "px",
width: "100%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/inputs", p1, function(r) {
dataContent.html("
");
if (r.code != 0) {
layer.msg(r.msg);
return;
}
var mIedEle = dataContent.find("#m_ied");
var sIedEle = dataContent.find("#s_ied");
mIedData = PoliceObject.GetIedData(p1.m_ied_name, p1.scd_id)
sIedData = PoliceObject.GetIedData(p1.s_ied_name, p1.scd_id)
mIedEle.append('
' + p1.m_ied_name + '' + mIedData.desc + '
');
sIedEle.append('
' + p1.s_ied_name + '' + sIedData.desc + '
');
//获取控制块信息
var inout_type = ""; //相对于主IED的输入输出关系
for (var i = 0; i < mIedData.ControlBlock.length; i++) {
var ctrlInfo = mIedData.ControlBlock[i];
if (ctrlInfo.ctrl_id == p1.m_ctrlid || ctrlInfo.ctrl_id == p1.s_ctrlid) {
inout_type = ctrlInfo.ref_type;
//console.log(ctrlInfo)
if (ctrlInfo.ref_type == 1) {
//输入控制块
mIedEle.append('
' + (r.data[0].to_ld_inst || '') + " " + (r.data[0].to_ld_desc || '') + '
');
//输出控制块
sIedEle.append('
' + ctrlInfo.ld_inst + " " + ctrlInfo.ld_desc + '
' + ctrlInfo.ctrl_name + '' + ctrlInfo.datset_desc + '
');
} else {
sIedEle.append('
' + (r.data[0].to_ld_inst || '') + " " + (r.data[0].to_ld_desc || '') + '
');
//输出控制块
mIedEle.append('
' + ctrlInfo.ld_inst + " " + ctrlInfo.ld_desc + '
' + ctrlInfo.ctrl_name + '' + ctrlInfo.datset_desc + '
');
}
break;
}
}
var mIedEleCtl = mIedEle.children("div:last");
var sIedEleCtl = sIedEle.children("div:last");
//生成许端子元素
for (var i = 0; i < r.data.length; i++) {
var item = r.data[i];
var fIntAddr = item.attr_ld_inst + "/" + (item.attr_prefix || '') + item.attr_ln_class + item.attr_ln_inst + "." + item.attr_do_name + "." + item.attr_da_name;
if (inout_type == 1) {
mIedEleCtl.append('
' + item.to_doi_desc + '' + item.attr_int_addr + '
');
sIedEleCtl.append('
' + item.from_doi_desc + '' + fIntAddr + '
');
} else {
mIedEleCtl.append('
' + item.from_doi_desc + '' + fIntAddr + '
');
sIedEleCtl.append('
' + item.to_doi_desc + '' + item.attr_int_addr + '
');
}
}
//重新计算 区域高度
mIedEle.height(mIedEleCtl.height() + 120 * hRate);
sIedEle.height(sIedEleCtl.height() + 120 * hRate);
var maxH = Math.max(mIedEle.height(), sIedEle.height()) + 100 * hRate;
//dataContent.height(maxH);
//绘制连接
dataContent.append("
");
var canvas = PoliceObject.p_createCanvas(win.find("#canvas"));
var m_ied_position = $("#m_ied").position();
var s_ied_position = win.find("#s_ied").position();
mIedEle.find(".inputs_extref").each(function(ind) {
var ele = $(this),
eleXY = ele.position();
var y = m_ied_position.top + eleXY.top + ele.parent().position().top + ele.height() / 2 - dataContent.css("padding-top").replace("px", "") * 1;
var x = ele.offset().left - ele.css("margin-left").replace("px", "") * 1 - ele.parent().position().left - win.css("padding-left").replace("px", "") * 1;
var masterIedJoinPoint = [x, y];
var s_ied_extref = win.find("#s_ied .inputs_extref:eq(" + ind + ")");
var sy = s_ied_position.top + s_ied_extref.position().top + s_ied_extref.parent().position().top + s_ied_extref.height() / 2 - dataContent.css("padding-top").replace("px", "") * 1;
var sx = s_ied_extref.offset().left - s_ied_extref.css("margin-left").replace("px", "") * 1 - s_ied_extref.parent().position().left - s_ied_extref.width() - win.css("padding-left").replace("px", "") * 1;
var salveJoinPoint = [sx, sy];
if (p1.m_ctrlid != "") {
//m_Ied->s_Ied:连线从左到右,箭头在右
PoliceObject.p_drawLine(canvas, masterIedJoinPoint, salveJoinPoint, "#134BEA");
} else {
//m_Ied<-s_Ied:连线从右到左,箭头在左
PoliceObject.p_drawLine(canvas, salveJoinPoint, masterIedJoinPoint, "#134BEA")
}
})
});
}
});
});
}
var makeSlefIedBlock = function(iedEle, data, callback) {
var count = 0;
if (data.SampledValueControl != null && data.SampledValueControl.length > 0) {
for (var i = 0; i < data.SampledValueControl.length; i++) {
var item = data.SampledValueControl[i];
iedEle.append('
' + item.ldinst + '/' + item.attr_name + '
' + item.datset_desc + '
');
count++;
}
}
if (data.GSEControl != null && data.GSEControl.length > 0) {
for (var i = 0; i < data.GSEControl.length; i++) {
var item = data.GSEControl[i];
//if(item.attr_type!="GOOSE") continue;
iedEle.append('
' + item.ldinst + '/' + item.attr_name + '
' + item.datset_desc + '
');
count++;
}
}
PoliceObject.LoadIedNetWorkInfo(data.ied_name, ied_strcut_detail.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID, function(r) {
for (var i = 0; i < r.length; i++) {
var tmpEle = iedEle.children(".block[cb_name='" + r[i].ld_inst + "/" + r[i].cb_name + "']");
if (tmpEle.length == 0 || r[i].address_json == "") continue;
var addressJson = JSON.parse(r[i].address_json);
tmpEle.children("div:eq(2)").html("APPID:" + (addressJson["APPID"] || ""));
}
var lastBlock = iedEle.find(".block:last");
var totalH = lastBlock.position().top + lastBlock.height() + 60 + lastBlock.css("margin-top").replace("px", "") * 1;
var iedEleH = iedEle.height();
var marginTop = 0;
if (iedEleH < totalH) {
iedEle.height(totalH + "px");
} else {
marginTop = (iedEleH - totalH) / 2;
iedEle.find(".block:first").css("margin-top", marginTop + "px");
}
if (callback != null) callback(data);
});
}
if (evt != null) {
var $t = $(evt);
//切换显示div
var chs = $t.parents(".dataitemlist").children(".content");
chs.children("div:eq(" + $t.index() + ")").removeClass("hidden");
chs.children("div:not(" + $t.index() + ")").addClass("hidden");
}
var ele = $("#ied_relation").removeClass("hidden");
ele.parents(".site_device_list").attr("ied_name", ieddata.ied_name).find("b").html(ieddata.desc + "(" + ieddata.ied_name + ")—详细信息");
ele.children("div.tools").children("li").off().on("click", function() {
var liclass = $.trim($(this).attr("class").replace("layui-this", ""));
switch (liclass) {
case "ref_map":
//块关联图
PoliceObject.LoadIedCtrlRelation(null, ieddata);
break;
case "sv_send":
//sv发送
PoliceObject.LoadIedSVSendBlockTable(null, ieddata);
break;
case "sv_revice":
//sv接收
PoliceObject.LoadIedSVReviceBlockTable(null, ieddata);
break;
case "goose_send":
//goose接收
PoliceObject.LoadIedGooseSendBlockTable(null, ieddata);
break;
case "goose_revice":
//goose接收
PoliceObject.LoadIedGooseReviceBlockTable(null, ieddata);
break;
default:
break;
}
});
if (!ele.children("div.tools").find(".ref_map").hasClass("layui-this")) {
//如果当前不是块关联图,自动切换过去
ele.children("div.tools").find(".ref_map").addClass("layui-this").trigger('click');
return;
}
var ied_strcut_detail = ele.find("#ied_strcut_detail").html("");
ied_strcut_detail.html(Tools.LoadingText("正在加载装置(" + ieddata.ied_name + ")数据中..."));
if (ieddata["GSEControl"] != null || ieddata["SampledValueControl"] != null) {
//判断装置关联关系是否已分析.未分析时重新分析
if ($.trim(ieddata["isreset"]) != "1" && (ieddata.list == null || ieddata.list.length <= 1)) {
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/relation", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"ied_name": ieddata.ied_name,
"reset": "1"
}, function(r) {
if (r.code != 0) {
layer.msg("获取装置信息失败:" + r.msg)
return;
}
layer.closeAll();
if (r.data == null) {
return
}
ieddata = r.data[ieddata.ied_name];
ieddata["isreset"] = "1";
PoliceObject.IedList[ieddata.ied_name] = ieddata;
PoliceObject.LoadIedCtrlRelation(null, ieddata, "1");
});
return;
} else {
tmp_load(ieddata);
}
} else {
var scdid = $.trim(ied_strcut_detail.parents(".site_device_list").attr("scd_id"));
scdid = scdid == "" ? PoliceObject.ScdID : scdid
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/ctrlblock", {
"scd_id": scdid,
"ied_name": ieddata.ied_name
}, function(r) {
if (r.code != 0) {
layer.msg(r.msg);
return;
}
ieddata["GSEControl"] = r.data.GSEControl;
ieddata["SampledValueControl"] = r.data.SampledValueControl;
PoliceObject.IedList[ieddata.ied_name] = ieddata;
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/ref/ctrlblock", {
"scd_id": scdid,
"ied_name": ieddata.ied_name,
"forcerefresh": ieddata["isforcerefresh"] == null ? "0" : ieddata["isforcerefresh"]
}, function(r1) {
if (r1.code != 0) {
layer.msg(r1.msg);
return;
}
if ($.trim(ieddata["isforcerefresh"]) != "1") {
//判断返回的块关系数是否与装置关系数相同,如果不同重新生成一次
if (r1.data != null && r1.data.length < ieddata.list.length) {
ieddata["GSEControl"] = null;
ieddata["SampledValueControl"] = null;
ieddata["isforcerefresh"] = "1";
PoliceObject.LoadIedCtrlRelation(null, ieddata);
return;
}
}
ieddata["isforcerefresh"] = "0";
ieddata["ControlBlock"] = r1.data;
PoliceObject.IedList[ieddata.ied_name] = ieddata;
tmp_load(ieddata);
});
});
}
},
//装置关联关系
LoadIedGraph: function(evt, ieddata, node_type, isreset) {
if (ieddata == null) return;
//加载IED列表树
this.LoadIedTreeList($("#ied_list_tree"));
if (evt != null) {
var $t = $(evt);
//切换显示div
var chs = $t.parents(".dataitemlist").children(".content");
chs.children("div:eq(" + $t.index() + ")").removeClass("hidden");
chs.children("div:not(" + $t.index() + ")").addClass("hidden");
}
var ele = $("#ied_info").removeClass("hidden");
ele.parents(".site_device_list").attr("ied_name", ieddata.ied_name).find("b").html(ieddata.desc + "(" + ieddata.ied_name + ")—详细信息");
var ied_strcut_detail = ele.find("#ied_strcut_detail").html("");
var iedRefList = ieddata.list;
if (iedRefList == null || iedRefList.length == 0) {
return;
}
if (iedRefList.length == 1 && isreset == null) {
//尝试重新分析该装置关系
this.GetIedData(ieddata.ied_name);
PoliceObject.LoadIedGraph(null, PoliceObject.IedList[ieddata.ied_name], node_type, 1);
return
}
ied_strcut_detail.slimscroll({
height: ied_strcut_detail.height() + "px",
width: "100%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
ied_strcut_detail.append('
');
var selfIed = ied_strcut_detail.children(".ied_show_block.self_ied").html("
" + ieddata.ied_name + "
" + ieddata.desc + "
").attr("ied_name", ieddata.ied_name);
var iddXY = ied_strcut_detail.position();
for (var i = 0; i < ieddata.list.length; i++) {
var itme = ieddata.list[i];
var existRefIed = ied_strcut_detail.find("span[ied_name='" + itme.ref_ied_name + "']");
if (itme.ref_ied_name == null || itme.ref_ied_name == "" || existRefIed.length > 0) {
if (existRefIed.attr("ref_type") != itme.ref_type) {
//双向输入输出关系
existRefIed.attr("ref_type", '2');
}
continue;
}
if (itme.ref_type == "1") {
//输入关系
ied_strcut_detail.append('
' + itme.ref_ied_name + '
' + itme.ref_ied_desc + '
');
} else {
//输出关系
ied_strcut_detail.append('
' + itme.ref_ied_name + '
' + itme.ref_ied_desc + '
');
}
}
ied_strcut_detail.find(".ied_show_item").off().on('click', function() {
//点击装置进行切换
PoliceObject.LoadIedGraph(null, PoliceObject.IedList[$(this).attr("ied_name")]);
});
var iedList = ied_strcut_detail.children("span.salve_ied");
for (var i = 0; i < iedList.length; i++) {
if (i % 2 == 0) iedList.eq(i).addClass("left");
else iedList.eq(i).addClass("right");
}
var leftIedCount = 0;
ied_strcut_detail.children("span.ied_show_block.left").each(function(ind) {
var t = 0;
if (ind > 0) {
var $tmp = ied_strcut_detail.children("span.ied_show_block.left:eq(" + (ind - 1) + ")");
t = $tmp.position().top + $tmp.height() + 50;
}
$(this).css({
left: "5rem",
top: t + "px"
});
leftIedCount++;
});
var rightIedCount = 0; //右边IED显示的装置总数
ied_strcut_detail.children("span.ied_show_block.right").each(function(ind) {
var t = 0;
if (ind > 0) {
var $tmp = ied_strcut_detail.children("span.ied_show_block.right:eq(" + (ind - 1) + ")");
t = $tmp.position().top + $tmp.height() + 50;
}
$(this).css({
left: "90rem",
top: t + "px"
});
rightIedCount++;
});
//计算主IED的高度
var lastLeftEle = ied_strcut_detail.children("span.ied_show_block.left:last");
var lastRigthEle = ied_strcut_detail.children("span.ied_show_block.right:last");
if (lastLeftEle.length > 0 && lastRigthEle.length > 0) {
selfIed.css("height", Math.max(lastLeftEle.position().top + lastLeftEle.height(), lastRigthEle.position().top + lastRigthEle.height()) + 50 + "px");
} else if (lastLeftEle.length > 0)
selfIed.css("height", Math.max(lastLeftEle.position().top + lastLeftEle.height(), 500) + 50 + "px");
else if (lastRigthEle.length > 0)
selfIed.css("height", Math.max(500, lastRigthEle.position().top + lastRigthEle.height()) + 50 + "px");
if (selfIed.height() < 500) selfIed.height(500); //中间的主IED最小高度
//当右边装置数量不是偶数时,需要重新排列右边装置的位置,主要是top位置
//if (rightIedCount % 2 != 0) {
var rightIedFirst = ied_strcut_detail.children("span.ied_show_block.right:first");
if (rightIedFirst.length > 0) {
var newRightFirstIedTop = (selfIed.height() - rightIedCount * (rightIedFirst.height() + (rightIedCount == 1 ? 0 : 50))) / 2;
var topSubValue = newRightFirstIedTop - rightIedFirst.css("top").replace("px", "") * 1;
//微调每一个右侧IED的top
ied_strcut_detail.children("span.ied_show_block.right").each(function() {
var v_ied_oldtop = $(this).css("top").replace("px", "") * 1;
var t = v_ied_oldtop + topSubValue + selfIed.css("top").replace("px", "") * 1;
if (t < 0) t = 0;
$(this).css("top", t + "px");
});
}
var leftIedFirst = ied_strcut_detail.children("span.ied_show_block.left:first");
if (leftIedFirst.length > 0) {
var newLeftFirstIedTop = (selfIed.height() - leftIedCount * (leftIedFirst.height() + (leftIedCount == 1 ? 0 : 50))) / 2;
var topSubValue = newLeftFirstIedTop - leftIedFirst.css("top").replace("px", "") * 1;
//微调每一个左侧IED的top
ied_strcut_detail.children("span.ied_show_block.left").each(function() {
var v_ied_oldtop = $(this).css("top").replace("px", "") * 1;
var t = v_ied_oldtop + topSubValue + selfIed.css("top").replace("px", "") * 1;
if (t < 0) t = 10;
$(this).css("top", t + "px");
});
}
ied_strcut_detail.append("
");
var canvas = this.p_createCanvas(ied_strcut_detail.find("canvas"));
//绘制连接线
//主设备的左右边连接点[x,y]
var masterIedLeftJoinPoint = [selfIed.position().left + selfIed.css("margin-left").replace("px", "") * 1, selfIed.position().top + selfIed.height() / 2];
var masterIedRightJoinPoint = [selfIed.position().left + selfIed.width() + selfIed.css("margin-left").replace("px", "") * 1, selfIed.position().top + selfIed.height() / 2];
//绘制左边连接
var inIedCnt = 0;
ied_strcut_detail.children("span.ied_show_block.left").each(function(ind) {
var t = $(this);
var salveRightJoinPoint = [t.position().left + t.width() + 5 - (t.width() * 0.2), t.position().top + t.height() / 2];
if (t.attr("ref_type") == "0") //输出到其他IED
PoliceObject.p_drawLine(canvas, masterIedLeftJoinPoint, salveRightJoinPoint, "#134BEA");
else if (t.attr("ref_type") == "1") {
PoliceObject.p_drawLine(canvas, salveRightJoinPoint, [masterIedLeftJoinPoint[0], masterIedLeftJoinPoint[1] + inIedCnt * 5], "#516380");
inIedCnt++;
} else {
PoliceObject.p_drawLine(canvas, [masterIedLeftJoinPoint[0], masterIedLeftJoinPoint[1] + inIedCnt * 5], salveRightJoinPoint, "#516380");
PoliceObject.p_drawLine(canvas, salveRightJoinPoint, [masterIedLeftJoinPoint[0], masterIedLeftJoinPoint[1] + inIedCnt * 5], "#134BEA");
inIedCnt++;
}
//var n1 = PoliceObject.p_drawNumber(ied_strcut_detail, masterIedLeftJoinPoint, salveRightJoinPoint, 12, "left");
//n1.attr("ied_name", t.attr("ied_name"));
});
//绘制右边连接
var outIedCnt = 0;
ied_strcut_detail.children("span.ied_show_block.right").each(function(ind) {
var t = $(this);
var salveLeftJoinPoint = [t.position().left + (t.width() * 0.2) - 5, t.position().top + t.height() / 2];
if (t.attr("ref_type") == "0") //输出到其他IED
{
PoliceObject.p_drawLine(canvas, masterIedRightJoinPoint, salveLeftJoinPoint, "#134BEA");
} else if (t.attr("ref_type") == "1") {
PoliceObject.p_drawLine(canvas, salveLeftJoinPoint, [masterIedRightJoinPoint[0], masterIedRightJoinPoint[1] + outIedCnt * 5], "#516380");
outIedCnt++;
} else {
PoliceObject.p_drawLine(canvas, [masterIedRightJoinPoint[0], masterIedRightJoinPoint[1] + outIedCnt * 5], salveLeftJoinPoint, "#516380");
PoliceObject.p_drawLine(canvas, salveLeftJoinPoint, [masterIedRightJoinPoint[0], masterIedRightJoinPoint[1] + outIedCnt * 5], "#134BEA");
outIedCnt++;
}
//var n1 = PoliceObject.p_drawNumber(ied_strcut_detail, masterIedRightJoinPoint, salveLeftJoinPoint, 12, "right");
//n1.attr("ied_name", t.attr("ied_name"));
});
},
//指定指定SCD下的ied信息
OtherIedList: {},
GetIedData: function(ied_name, scdid) {
if (scdid == null || scdid == PoliceObject.ScdID) scdid = "";
var ieddata = scdid != PoliceObject.ScdID ? PoliceObject.OtherIedList[scdid + ied_name] : PoliceObject.IedList[ied_name];
if (ieddata == null) {
layer.msg("正在获取装置信息...", {
time: 0
});
$.ajaxSettings.async = false;
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/relation", {
"scd_id": (scdid == null || scdid == "") ? PoliceObject.ScdID : scdid,
"ied_name": ied_name,
"reset": "1"
}, function(r) {
$.ajaxSettings.async = true;
if (r.code != 0) {
layer.msg("获取装置信息失败:" + r.msg)
return null;
}
layer.closeAll();
if (r.data == null) {
return null;
}
ieddata = r.data[ied_name];
if (scdid != null && scdid != "" && scdid == PoliceObject.ScdID) PoliceObject.IedList[ied_name] = ieddata;
else PoliceObject.OtherIedList[scdid + ied_name] = ieddata
return ieddata;
});
$.ajaxSettings.async = true;
}
layer.closeAll();
return ieddata;
},
LoadIedAllPointRelation: function(evt, refdata) {
if (evt != null) {
var $t = $(evt);
//切换显示div
var chs = $t.parents(".dataitemlist").children(".content");
chs.children("div:eq(" + $t.index() + ")").removeClass("hidden");
chs.children("div:not(" + $t.index() + ")").addClass("hidden");
}
var ele = $("#ied_allpoint_info").removeClass("hidden");
ele.parents(".site_device_list").attr("ied_name", refdata.ied_name).find("b").html(refdata.desc + "(" + refdata.ied_name + ")—详细信息");
var dataitemlist = ele.find("#ied_strcut_detail").html(PoliceObject.LoddingText);
var curIedName = refdata.ied_name;
/*
for (var iedname in PoliceObject.IedList) {
//输出关系
if (curIedName == iedname) {
for (var i = 0; i < PoliceObject.IedList[iedname].list.length; i++) {
var itme = PoliceObject.IedList[iedname].list[i];
if (itme.ref_type == "1") {
//输入关系
ref_ied_list.append('
' + itme.ref_ied_desc + '');
} else {
//输出关系
ref_ied_list.append('
' + itme.ref_ied_desc + '');
}
}
}
}*/
var v_scdid = ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID;
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/inputs", {
"scd_id": v_scdid,
"ied_name": curIedName
}, function(r) {
PoliceObject.drawIedInputsRelation(v_scdid, refdata, dataitemlist, r.data);
})
},
//绘制装置的输入输出关系图
drawIedInputsRelation: function(v_scdid, refdata, dataitemlist, data) {
var w = dataitemlist.width(),
h = dataitemlist.height();
var curIedName = refdata.ied_name
//定义IED名称图形,该图形固定显示在中间,并且不显示连接点
dataitemlist.html("
");
var links = [];
var tmp = {};
var masterIed = dataitemlist.find(".master_ied");
var preExtrefEle_no = 0;
for (var i = 0; i < data.length; i++) {
var item = data[i];
if (item.no != null) {
if (preExtrefEle_no > 0 && (preExtrefEle_no + 1) != (item.no * 1)) {
//判断no是否是连续的,不连续时使用一个...代表中间有间隔
masterIed.append("
...
");
}
preExtrefEle_no = item.no * 1;
}
var daname = $.trim(item["attr_da_name"]) == "" ? "" : "." + item["attr_da_name"];
var targetName = item["attr_ld_inst"] + "/" + item["attr_prefix"] + item["attr_ln_class"] + item["attr_ln_inst"] + "." + item["attr_do_name"] + daname;
if (item.inout_type == "out") {
masterIed.append("
" + (item["no"] || '') + "" + targetName + "
" + item["do_source_desc"] + "
");
} else {
masterIed.append("
" + (item["no"] || '') + "" + item["attr_int_addr"] + "
" + item["do_target_desc"] + "
");
}
var ied_slave = dataitemlist.find(".ied." + item.inout_type + "[ied_name='" + item.ied_name + "']");
if (ied_slave.length == 0) {
var iedObj = PoliceObject.GetIedData(item.ied_name, item.scd_id || v_scdid)
if (item.inout_type == "in") {
var inIedCnt = dataitemlist.find(".ied.in:last");
var top = inIedCnt.length == 0 ? 10 : inIedCnt.height() + inIedCnt.position().top + 10;
if (iedObj == null) {
console.log(item)
continue;
}
dataitemlist.append("
");
} else {
var inIedCnt = dataitemlist.find(".ied.out:last");
var top = inIedCnt.length == 0 ? 10 : inIedCnt.height() + inIedCnt.position().top + 10;
if (iedObj == null) {
console.log(item)
continue;
}
dataitemlist.append("
");
}
ied_slave = dataitemlist.find(".ied." + item.inout_type + "[ied_name='" + item.ied_name + "']");
}
if (item.inout_type == "out") {
ied_slave.attr("class", "ied out");
//显示在主设备右边
ied_slave.find(".master_ied").append("
" + item["attr_int_addr"] + "
" + item["do_target_desc"] + "
");
} else {
ied_slave.attr("class", "ied in");
//显示在主设备左边
ied_slave.find(".master_ied").append("
" + targetName + "
" + item["do_source_desc"] + "
");
}
}
if (item.opt == null) {
dataitemlist.find(".ied").off().on('click', function() {
//切换装置
PoliceObject.LoadIedAllPointRelation(null, PoliceObject.GetIedData($(this).attr("ied_name"), v_scdid));
});
}
var maxTopHei = 0;
dataitemlist.find(".ied.out").each(function(ind) {
var $t = $(this);
var thisIedName = $t.attr("ied_name");
var master_ied_first_extref = masterIed.children(".extref[to_ied_name='" + thisIedName + "']:first");
if (ind == 0) {
$t.css({
"left": "auto",
"right": "10%",
"top": master_ied_first_extref.position().top + "px"
});
} else {
var prev = dataitemlist.find(".ied.out:eq(" + (ind - 1) + ")");
$t.css({
"left": "auto",
"right": "10%",
"top": (prev.position().top * 1 + prev.height() + 30) + "px"
});
}
var tmpH = $t.position().top * 1 + $t.height();
if (maxTopHei < tmpH) maxTopHei = tmpH;
});
dataitemlist.find(".ied.in").each(function(ind) {
var $t = $(this);
if (ind == 0) {
$t.css({
"left": "20%",
"right": "auto",
"top": "1rem"
});
} else {
var prev = dataitemlist.find(".ied.in:eq(" + (ind - 1) + ")");
$t.css({
"left": "20%",
"right": "auto",
"top": (prev.position().top * 1 + prev.height() + 30) + "px"
});
}
var tmpH = $t.position().top * 1 + $t.height();
if (maxTopHei < tmpH) maxTopHei = tmpH;
});
var masterParentIed = masterIed.parent();
var master_ied_H = masterParentIed.position().top * 1 + masterParentIed.height();
if (maxTopHei < master_ied_H) maxTopHei = master_ied_H;
dataitemlist.append("
");
dataitemlist.slimscroll({
height: dataitemlist.height() + "px",
width: "100%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
dataitemlist.append("
");
var canvas = PoliceObject.p_createCanvas(dataitemlist.find("canvas"));
var lastIed = dataitemlist.find(".ied.blank");
var topP = dataitemlist.offset();
dataitemlist.find(".extref").each(function() {
var $t = $(this),
toiedname = $.trim($t.attr("to_ied_name")),
toextref = $t.attr("to_addr");
var currIedname = $t.parent().parent().attr("ied_name");
if (toiedname == "") {
return;
}
var point = $t.find(".linkpoint_right,.linkpoint_left");
try {
if (point.length > 0) {
var toEle = dataitemlist.find(".ied[ied_name='" + toiedname + "'] .extref[intaddr='" + toextref + "'][in_ied_name='" + currIedname + "']").find(".linkpoint_right,.linkpoint_left");
var p = point.position(),
p1 = point.parents(".ied");
var t = toEle.position(),
t1 = toEle.parents(".ied");
var sourceLeft = p1.position().left * 1;
if (point.hasClass("linkpoint_right")) sourceLeft = sourceLeft + p1.width() + 5 - (p1.css("margin-left").replace("px", "") * -1);
else sourceLeft = p1.left - (p1.css("margin-left").replace("px", "") * -1);
var targetLeft = t1.position().left * 1;
if (toEle.hasClass("linkpoint_right")) targetLeft = targetLeft + t1.width() + 5 - (t1.css("margin-left").replace("px", "") * -1);
else targetLeft = targetLeft - (t1.css("margin-left").replace("px", "") * -1);
//p_drawPoly(canvascontext, [sourceLeft, p.top * 1 - topP.top + 5], [targetLeft, t.top * 1 - topP.top + 5]);
PoliceObject.p_drawLine(canvas, [sourceLeft, p1.position().top * 1 + 5 + point.parent().position().top + point.position().top], [targetLeft, t1.position().top + toEle.parent().position().top + toEle.position().top + 5], "#A6B1BF");
}
} catch (e) {
console.log(e)
}
})
},
//加载装置基本信息
LoadIedStrcut: function(evt, ieddata) {
//console.log(ieddata)
if (evt != null) {
var $t = $(evt);
//切换显示div
var chs = $t.parents(".dataitemlist").children(".content");
chs.children("div:eq(" + $t.index() + ")").removeClass("hidden");
chs.children("div:not(" + $t.index() + ")").addClass("hidden");
}
var ele = $("#ied_basicinfo").removeClass("hidden");
if (ele.parent().hasClass("slimScrollDiv")) {
ele.parent().removeClass("hidden");
}
var ied_strcut_detail = ele.find("#ied_strcut_detail").html(PoliceObject.LoddingText);
ele.slimscroll({
height: ele.height() + "px",
width: "100%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
var iddXY = ied_strcut_detail.position();
$.getJSON(Global.AccessUrl + "/api/screen/scd/node/attrs", {
"scd_id": ied_strcut_detail.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"node_id": ieddata.node_id,
"ied_name": ieddata.ied_name,
}, function(list) {
var thisIedName = list.data.name;
var wh = 200 * wRate;
var l = (ele.width() - wh) / 2;
ied_strcut_detail.html('
' + list.data.desc + '
' + list.data.name + '
' + list.data.manufacturer + '
' + list.data.type + '
');
//生成IED装备固上定位置的连接点(上下左右)
var tmpIed = ied_strcut_detail.find(".ied_strcut");
var tmpIedOffset = tmpIed.position();
//主设备上的4连接点坐标
var iedTopPointXY = [tmpIedOffset.left + tmpIed.width() / 2, tmpIedOffset.top - iddXY.top];
var iedBottompointXY = [tmpIedOffset.left + tmpIed.width() / 2, tmpIedOffset.top - iddXY.top + tmpIed.height()];
var iedLeftPointXY = [tmpIedOffset.left, tmpIedOffset.top - iddXY.top + tmpIed.height() / 2];
var iedRightPointXY = [tmpIedOffset.left + tmpIed.width(), tmpIedOffset.top - iddXY.top + tmpIed.height() / 2];
//在界面上创建主IED在连接点
ied_strcut_detail.append('
');
//固定的dataset关系
ied_strcut_detail.append('
');
var accesspointEle = ied_strcut_detail.find(".accessPoint[accessPoint='DataSet']").css("left", function() {
return iedTopPointXY[0] - $(this).width() / 2;
});
var datasetPointStart = ied_strcut_detail.find(".ied_linkpoint[accessPoint='DataSet']").css({
"left": iedTopPointXY[0],
"top": accesspointEle.position().top + accesspointEle.height() - iddXY.top - 10
});
//生成固定的dataset连接线
var datasetlineheight = (iddXY.top + iedTopPointXY[1] - datasetPointStart.position().top);
ied_strcut_detail.append('
DataSet
');
//加载DataSet列表
PoliceObject.LoadDataSet(thisIedName);
$.getJSON(Global.AccessUrl + "/api/screen/scd/node/list", {
"scd_id": ied_strcut_detail.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"pagesize": 10000,
"ied_name": thisIedName,
"name": "AccessPoint"
}, function(result) {
//生成访问点并进行布局。现固定支持最多3个accesspoint
for (var i = 0; i < result.data.length; i++) {
var master_link_point = ied_strcut_detail.find(".ied_linkpoint[ind=" + (i + 1) + "]").removeClass("hidden");
if (master_link_point.length == 0) continue;
var item = result.data[i];
var css = "";
var linkpoint_css = "";
var top = master_link_point.position().top - iddXY.top;
var linpoint_left = 0;
if (i == 0) {
//底边区域:第一个访问点生成及位置
var top1 = top + 120;
var left = master_link_point.position().left - ied_strcut_detail.width() / 2;
//left=master_link_point.offset().left-left;
css = 'width:39rem;height:auto;left:50%;top:' + top1 + 'px;margin-left: -20rem;min-height: 5rem;';
linpoint_left = iedBottompointXY[0];
linkpoint_css = 'top: ' + (top1 - 5) + 'px;';
} else if (i == 1) {
//右边区域:第2个访问点生成及位置
var top1 = top - 20;
css = 'width:39rem;height:auto;left:17%;top:' + top1 + 'px;margin-left: -20rem;min-height: 5rem;';
linkpoint_css = 'top: ' + iedLeftPointXY[1] + 'px;';
} else if (i == 2) {
//右边区域:第3个访问点生成及位置
var top1 = top - 20;
//var left=master_link_point.offset().left-ied_strcut_detail.width()*0.75;
css = 'width:39rem;height:auto;left:80%;top:' + top1 + 'px;margin-left: -20rem;min-height: 5rem;';
linkpoint_css = 'top: ' + iedRightPointXY[1] + 'px;';
}
//生成AccessPoint区域
ied_strcut_detail.append('
' + item.attr_name + ' (' + (item.attr_desc || '—') + ')
正在加载网络信息...
LDevice
');
if (i > 0) {
//计算左右2侧accesspoint上的连接点left位置
accesspointEle = ied_strcut_detail.find(".accessPoint[accessPoint='" + item.attr_name + "']");
linpoint_left = accesspointEle.position().left + accesspointEle.css("margin-left").replace("px", "") * 1;
if (i == 1) linpoint_left = linpoint_left + accesspointEle.width();
}
//生成目标连接点
ied_strcut_detail.append('
');
}
//生成连线
ied_strcut_detail.find(".ied_linkpoint[accessPoint='ied']").each(function() {
var $t = $(this),
start = $t.position();
if (!$t.hasClass("hidden")) {
var ind = $t.attr("ind");
if (ind == "") return; //dataset的连接点不具备ind属性
//需要连接的目标AccessPoint
var toEle = ied_strcut_detail.find(".ied_linkpoint[ind=" + ind + "][accessPoint!='ied']"),
to = toEle.position();
//计算连线长度
var line_width = Math.abs(start.left - to.left);
if (ind == 1) {
//连线高度
line_width = Math.abs(start.top - to.top);
ied_strcut_detail.append('
AccessPoint
');
} else {
//判断目标AccessPoint在主IED在左边还是右边
if (start.left < to.left)
ied_strcut_detail.append('
AccessPoint
');
else {
ied_strcut_detail.append('
AccessPoint
');
}
}
}
});
//获取每个访问点下的Ldevice列表
for (var i = 0; i < result.data.length; i++) {
PoliceObject.LoadLdeviceList(result.data[i].node_id, result.data[i].attr_name);
}
//获取设备的网络信息
PoliceObject.LoadIedNetWorkInfo(ieddata.ied_name, ied_strcut_detail.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID, function(r) {
var tmpEle = ied_strcut_detail.find(".accessPoint .networkinfo").html("");
for (var i = 0; i < r.length; i++) {
var apName = r[i].ap_name;
var accesspointEle = ied_strcut_detail.find(".accessPoint[accessPoint='" + apName + "']");
if (accesspointEle.length == 0) continue;
var address_json = $.trim(r[i].address_json);
if (address_json == "") continue;
address_json = JSON.parse(address_json);
var accesspointNetEle = accesspointEle.children(".networkinfo");
var netHtml = [];
netHtml.push('
');
netHtml.push('
MAC-Address:' + (address_json['MAC-Address'] || "无") + '
');
netHtml.push('
VLAN-PRIORITY:' + (address_json['VLAN-PRIORITY'] || "无") + '
');
netHtml.push('
APPID:' + (address_json['APPID'] || "无") + '
');
netHtml.push('
VLAN-ID:' + (address_json['VLAN-ID'] || "无") + '
');
netHtml.push('
');
accesspointNetEle.append(netHtml.join(""));
var accesspointNumnerEle = accesspointEle.children(".networkinfo_nmuber");
accesspointNumnerEle.append('
' + (accesspointNumnerEle.children("span").length + 1) + '');
}
ied_strcut_detail.find(".accessPoint[accessPoint]").each(function() {
var t123 = $(this).find(".networkinfo");
if (t123.children("div").length == 0) {
t123.addClass("hidden")
}
});
ied_strcut_detail.find(".networkinfo_nmuber").each(function() {
var me = $(this);
var mespan = me.children('span');
if (mespan.length > 1) me.removeClass("hidden");
else return;
mespan.off().on('click', function() {
var t = $(this);
var tp = t.parent().prev();
t.parent().children(".active").removeClass("active");
tp.children("div").addClass("hidden");
tp.children("div[cbname='" + t.attr("title") + "']").removeClass("hidden");
t.addClass("active");
}).eq(0).trigger('click');
});
});
});
});
},
//加载装置定值条目
LoadIedDingzhiTable: function(evt, ieddata) {
///api/screen/scd/dingzhi/list?scd_id=4000002&pagesize=10000&ied_name=AE1101&name=DataSet
var $t = null;
if (evt != null) {
var $t = $(evt);
//切换显示div
var chs = $t.parents(".dataitemlist").children(".content");
chs.children("div:eq(" + $t.index() + ")").removeClass("hidden");
chs.children("div:not(" + $t.index() + ")").addClass("hidden");
}
var ele = $("#ied_dingzhiinfo").removeClass("hidden");
var ied_strcut_detail = ele.find("#ied_strcut_detail").html(PoliceObject.LoddingText);
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/dingzhi", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"ied_name": ieddata.ied_name
}, function(jsondata) {
if (jsondata.code != 0) {
layer.msg(jsondata.msg)
return;
}
if (jsondata.data.length == 0) {
ied_strcut_detail.html(Tools.HintText("没有定值信息"));
return;
}
ied_strcut_detail.html('
定值条目列表详情(共 条)
');
var tmpDsList = ied_strcut_detail.find(".datasetlist");
for (var i = 0; i < jsondata.data.length; i++) {
jsondata.data[i]["fcdalist"] = JSON.stringify(jsondata.data[i]["list"]);
}
tmpDsList.html(template("dingzhi_datasetlist_tpl", jsondata)).find("tbody>tr").off('click').on('click', function() {
tmpDsList.find("tr.active").removeClass("active");
var fcdalist = $.trim($(this).addClass("active").attr("fcdalist"));
var targetdiv = ied_strcut_detail.find(".fcdalist");
$("#dataset_fcda_total").html("-");
if (fcdalist == "") {
targetdiv.html(Tools.HintText("没有条目信息"));
return;
}
fcdalist = JSON.parse(fcdalist);
ied_strcut_detail.find("#dataset_fcda_total").html(fcdalist.length);
targetdiv.html(template("dingzhi_fcdalist_tpl", {
"data": fcdalist
})).find("tbody>tr").off('click').on('click', function() {
targetdiv.find("tr.active").removeClass("active");
$(this).addClass("active");
});
targetdiv.children(".detailtable").slimscroll({
height: targetdiv.height() - targetdiv.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
});
tmpDsList.children(".detailtable").slimscroll({
height: tmpDsList.height() - (tmpDsList.css("margin").replace("px", "") * 2) - tmpDsList.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
tmpDsList.height(tmpDsList.height() - 24).find("tbody>tr:first").trigger('click');
});
},
//加载信息点表
LoadIedPointTable: function(evt, ieddata) {
///api/screen/scd/dingzhi/list?scd_id=4000002&pagesize=10000&ied_name=AE1101&name=DataSet
var $t = null;
if (evt != null) {
var $t = $(evt);
//切换显示div
var chs = $t.parents(".dataitemlist").children(".content");
chs.children("div:eq(" + $t.index() + ")").removeClass("hidden");
chs.children("div:not(" + $t.index() + ")").addClass("hidden");
}
var ele = $("#ied_pointtableinfo").removeClass("hidden");
var ied_strcut_detail = ele.find("#ied_strcut_detail").html(PoliceObject.LoddingText);
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/pointtable", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"ied_name": ieddata.ied_name
}, function(jsondata) {
if (jsondata.code != 0) {
layer.msg(jsondata.msg)
return;
}
if (jsondata.data.length == 0) {
ied_strcut_detail.html(Tools.HintText("没有信息点表"));
return;
}
ied_strcut_detail.html('
点表条目列表详情(共 条)
');
var tmpDsList = ied_strcut_detail.find(".datasetlist");
for (var i = 0; i < jsondata.data.length; i++) {
jsondata.data[i]["fcdalist"] = JSON.stringify(jsondata.data[i]["list"]);
jsondata.data[i]["point_cnt"] = jsondata.data[i]["list"].length;
}
tmpDsList.html(template("pointtable_datasetlist_tpl", jsondata)).find("tbody>tr").off('click').on('click', function() {
tmpDsList.find("tr.active").removeClass("active");
var fcdalist = $.trim($(this).addClass("active").attr("fcdalist"));
var targetdiv = ied_strcut_detail.find(".fcdalist");
$("#dataset_fcda_total").html("-");
if (fcdalist == "") {
targetdiv.html(Tools.HintText("没有条目信息"));
return;
}
fcdalist = JSON.parse(fcdalist);
ied_strcut_detail.find("#dataset_fcda_total").html(fcdalist.length);
targetdiv.html(template("pointtable_fcdalist_tpl", {
"data": fcdalist
})).find("tbody>tr").off('click').on('click', function() {
targetdiv.find("tr.active").removeClass("active");
$(this).addClass("active");
});
targetdiv.children(".detailtable").slimscroll({
height: targetdiv.height() - targetdiv.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
});
tmpDsList.children(".detailtable").slimscroll({
height: tmpDsList.height() - (tmpDsList.css("margin").replace("px", "") * 2) - tmpDsList.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
tmpDsList.height(tmpDsList.height() - 24).find("tbody>tr:first").trigger('click');
});
},
//加载信息点表
LoadIedSourceXML: function(evt, ieddata) {
var $t = null;
if (evt != null) {
var $t = $(evt);
//切换显示div
var chs = $t.parents(".dataitemlist").children(".content");
chs.children("div:eq(" + $t.index() + ")").removeClass("hidden");
chs.children("div:not(" + $t.index() + ")").addClass("hidden");
}
var ele = $("#ied_sourcexmlinfo").removeClass("hidden");
var ied_strcut_detail = ele.find("#ied_strcut_detail").html(PoliceObject.LoddingText);
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/sourcexml", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"ied_name": ieddata.ied_name
}, function(jsondata) {
if (jsondata.code != 0) {
layer.msg(jsondata.msg)
return;
}
ied_strcut_detail.html("
");
});
},
//加载SV发送列表
LoadIedSVSendBlockTable: function(evt, ieddata) {
var ele = $("#ied_relation").removeClass("hidden");
var ied_strcut_detail = ele.find("#ied_strcut_detail").html(Tools.LoadingText("正在加载装置(" + ieddata.ied_name + ")数据中..."));
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/ctrlblock", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"ied_name": ieddata.ied_name
}, function(jsondata) {
if (jsondata.code != 0) {
ied_strcut_detail.html(jsondata.msg);
return;
}
if (jsondata.data.SampledValueControl == null || jsondata.data.SampledValueControl.length == 0) {
ied_strcut_detail.html(Tools.HintText("该装置无SV发送"))
return;
}
var h = template('svsend_datasetlist_tpl', {
"data": jsondata.data.SampledValueControl
});
ied_strcut_detail.html('
SMV端子列表详情(共 条)
');
var tmpDsList = ied_strcut_detail.find(".datasetlist");
tmpDsList.html(h).find("tbody>tr").off('click').on('click', function() {
tmpDsList.find("tr.active").removeClass("active");
var fcdalist = $.trim($(this).addClass("active").attr("fcdalist"));
var ctrlId = $(this).attr("ctrl_id")
var targetdiv = ied_strcut_detail.find(".fcdalist");
$("#dataset_fcda_total").html("-");
targetdiv.html(Tools.HintText("正在加载端子列表数据..."));
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/smv_ctrlblock/sendfcdalist", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"ied_name": ieddata.ied_name,
"ctrlid": ctrlId
}, function(jsondata) {
if (jsondata.code != 0) {
targetdiv.html(Tools.HintText(jsondata.msg));
return;
}
if (jsondata.data == null || jsondata.data.length == 0) {
$("#dataset_fcda_total").html("0");
targetdiv.html(Tools.HintText("未查找到端子列表"));
return;
}
$("#dataset_fcda_total").html(jsondata.data.length);
targetdiv.html(template('svsend_fcdalist_tpl', jsondata));
targetdiv.children(".detailtable").slimscroll({
height: targetdiv.height() - targetdiv.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
})
});
tmpDsList.children(".detailtable").slimscroll({
height: tmpDsList.height() - (tmpDsList.css("margin").replace("px", "") * 2) - tmpDsList.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
tmpDsList.height(tmpDsList.height() - 24).find("tbody>tr:first").trigger('click');
});
},
//加载SV接收列表
LoadIedSVReviceBlockTable: function(evt, ieddata) {
var ele = $("#ied_relation").removeClass("hidden");
var ied_strcut_detail = ele.find("#ied_strcut_detail").html(Tools.LoadingText("正在加载装置(" + ieddata.ied_name + ")数据中..."));
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/smv_ctrlblock/receive", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"ied_name": ieddata.ied_name
}, function(jsondata) {
if (jsondata.code != 0) {
ied_strcut_detail.html(jsondata.msg);
return;
}
if (jsondata.data == null || jsondata.data.length == 0) {
ied_strcut_detail.html(Tools.HintText("该装置无SV接收"))
return;
}
//拆分为主从结构
var masterdatalist = [],
tmplist = {};
for (var i = 0; i < jsondata.data.length; i++) {
var item = jsondata.data[i];
var key = item.out_ied_name + item.out_smv_ctrl_name + item.out_dataset_name;
if (tmplist[key] == null) {
tmplist[key] = {
"info": item,
"list": [item]
};
} else {
tmplist[key]["list"].push(item);
}
}
for (var k in tmplist) {
tmplist[k]["info"]["list"] = JSON.stringify(tmplist[k]["list"]);
masterdatalist.push(tmplist[k]);
}
var h = template('svrev_datasetlist_tpl', {
"data": masterdatalist
});
tmplist = null;
masterdatalist = null;
ied_strcut_detail.html('
SMV端子列表详情(共 条)
');
var tmpDsList = ied_strcut_detail.find(".datasetlist");
tmpDsList.html(h).find("tbody>tr").off('click').on('click', function() {
tmpDsList.find("tr.active").removeClass("active");
var fcdalist = $.trim($(this).addClass("active").attr("fcdalist"));
var ctrlId = $(this).attr("ctrl_id")
var targetdiv = ied_strcut_detail.find(".fcdalist");
ied_strcut_detail.find("#dataset_fcda_total").html("-");
if (fcdalist == "") {
ied_strcut_detail.find("#dataset_fcda_total").html("0");
targetdiv.html(Tools.HintText("未查找到端子列表"));
return;
}
fcdalist = JSON.parse(fcdalist);
ied_strcut_detail.find("#dataset_fcda_total").html(fcdalist.length);
targetdiv.html(template('svrev_fcdalist_tpl', {
"data": fcdalist
}));
targetdiv.children(".detailtable").slimscroll({
height: targetdiv.height() - targetdiv.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
});
tmpDsList.children(".detailtable").slimscroll({
height: tmpDsList.height() - (tmpDsList.css("margin").replace("px", "") * 2) - tmpDsList.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
tmpDsList.height(tmpDsList.height() - 24).find("tbody>tr:first").trigger('click');
});
},
//加载goose发送列表
LoadIedGooseSendBlockTable: function(evt, ieddata) {
var ele = $("#ied_relation").removeClass("hidden");
var ied_strcut_detail = ele.find("#ied_strcut_detail").html(Tools.LoadingText("正在加载装置(" + ieddata.ied_name + ")数据中..."));
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/ctrlblock", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"ied_name": ieddata.ied_name
}, function(jsondata) {
if (jsondata.code != 0) {
ied_strcut_detail.html(jsondata.msg);
return;
}
if (jsondata.data.GSEControl == null || jsondata.data.GSEControl.length == 0) {
ied_strcut_detail.html(Tools.HintText("该装置无GOOSE发送"))
return;
}
var h = template('goosesend_datasetlist_tpl', {
"data": jsondata.data.GSEControl
});
ied_strcut_detail.html('
GOOSE端子列表详情(共 条)
');
var tmpDsList = ied_strcut_detail.find(".datasetlist");
tmpDsList.html(h).find("tbody>tr").off('click').on('click', function() {
tmpDsList.find("tr.active").removeClass("active");
var fcdalist = $.trim($(this).addClass("active").attr("fcdalist"));
var ctrlId = $(this).attr("ctrl_id")
var targetdiv = ied_strcut_detail.find(".fcdalist");
$("#dataset_fcda_total").html("-");
targetdiv.html(Tools.HintText("正在加载端子列表数据..."));
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/goose_ctrlblock/sendfcdalist", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"ied_name": ieddata.ied_name,
"ctrlid": ctrlId
}, function(jsondata) {
if (jsondata.code != 0) {
targetdiv.html(Tools.HintText(jsondata.msg));
return;
}
if (jsondata.data == null || jsondata.data.length == 0) {
$("#dataset_fcda_total").html("0");
targetdiv.html(Tools.HintText("未查找到端子列表"));
return;
}
$("#dataset_fcda_total").html(jsondata.data.length);
targetdiv.html(template('goosesend_fcdalist_tpl', jsondata));
targetdiv.children(".detailtable").slimscroll({
height: targetdiv.height() - targetdiv.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
})
});
tmpDsList.children(".detailtable").slimscroll({
height: tmpDsList.height() - (tmpDsList.css("margin").replace("px", "") * 2) - tmpDsList.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
tmpDsList.height(tmpDsList.height() - 24).find("tbody>tr:first").trigger('click');
});
},
//加载GOOSE接收列表
LoadIedGooseReviceBlockTable: function(evt, ieddata) {
var ele = $("#ied_relation").removeClass("hidden");
var ied_strcut_detail = ele.find("#ied_strcut_detail").html(Tools.LoadingText("正在加载装置(" + ieddata.ied_name + ")数据中..."));
$.getJSON(Global.AccessUrl + "/api/screen/scd/ied/goose_ctrlblock/receive", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"ied_name": ieddata.ied_name
}, function(jsondata) {
if (jsondata.code != 0) {
ied_strcut_detail.html(jsondata.msg);
return;
}
if (jsondata.data == null || jsondata.data.length == 0) {
ied_strcut_detail.html(Tools.HintText("该装置无GOOSE接收"))
return;
}
//拆分为主从结构
var masterdatalist = [],
tmplist = {};
for (var i = 0; i < jsondata.data.length; i++) {
var item = jsondata.data[i];
var key = item.out_ied_name + item.out_smv_ctrl_name + item.out_dataset_name;
if (tmplist[key] == null) {
tmplist[key] = {
"info": item,
"list": [item]
};
} else {
tmplist[key]["list"].push(item);
}
}
for (var k in tmplist) {
tmplist[k]["info"]["list"] = JSON.stringify(tmplist[k]["list"]);
masterdatalist.push(tmplist[k]);
}
var h = template('gooserev_datasetlist_tpl', {
"data": masterdatalist
});
tmplist = null;
masterdatalist = null;
ied_strcut_detail.html('
GOOSE端子列表详情(共 条)
');
var tmpDsList = ied_strcut_detail.find(".datasetlist");
tmpDsList.html(h).find("tbody>tr").off('click').on('click', function() {
tmpDsList.find("tr.active").removeClass("active");
var fcdalist = $.trim($(this).addClass("active").attr("fcdalist"));
var ctrlId = $(this).attr("ctrl_id")
var targetdiv = ied_strcut_detail.find(".fcdalist");
ied_strcut_detail.find("#dataset_fcda_total").html("-");
if (fcdalist == "") {
ied_strcut_detail.find("#dataset_fcda_total").html("0");
targetdiv.html(Tools.HintText("未查找到端子列表"));
return;
}
fcdalist = JSON.parse(fcdalist);
ied_strcut_detail.find("#dataset_fcda_total").html(fcdalist.length);
targetdiv.html(template('gooserev_fcdalist_tpl', {
"data": fcdalist
}));
targetdiv.children(".detailtable").slimscroll({
height: targetdiv.height() - targetdiv.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
});
tmpDsList.children(".detailtable").slimscroll({
height: tmpDsList.height() - (tmpDsList.css("margin").replace("px", "") * 2) - tmpDsList.find(".headertable").height() + "px",
width: "99%",
alwaysVisible: false,
wheelStep: 10,
size: "6px",
color: "#03aee7"
});
tmpDsList.height(tmpDsList.height() - 24).find("tbody>tr:first").trigger('click');
});
},
//加载DataSet列表
LoadDataSet: function(thisIedName) {
var $ied_strcut = $("#ied_basicinfo");
var $datasetList = $("#ied_basicinfo #dataset_list");
if ($datasetList.length == 0) {
$ied_strcut.append('
');
$datasetList = $("#ied_basicinfo #dataset_list");
} else {
$datasetList.removeClass("hidden").html("");
}
var datasetEle = $ied_strcut.find(".accessPoint[accessPoint='DataSet']");
$datasetList.css({
"left": "1rem",
"top": datasetEle.position().top
});
$.getJSON(Global.AccessUrl + "/api/screen/scd/node/list", {
"scd_id": $ied_strcut.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"pagesize": 10000,
"ied_name": thisIedName,
"name": "DataSet"
}, function(result) {
var eles = [];
for (var i = 0; i < result.data.length; i++) {
eles.push('
' + result.data[i].attr_name + '(' + result.data[i].attr_desc + ')');
}
$datasetList.html(eles.join("")).children("span").off().on('click', function() {
var t = $(this);
PoliceObject.LoadFCDAList(this, t.attr("dataset_id"), t.find("span:last").text());
});
var datasetPoint = $(".ied_linkpoint[accesspoint='DataSet']").css({
"top": $datasetList.position().top + $datasetList.height() + (15 * hRate) + "px"
})
var h1 = $(".ied_linkpoint.top").position().top - datasetPoint.position().top;
datasetPoint.next().css({
"top": datasetPoint.position().top + 5 + "px",
"height": h1 + "px",
"line-height": h1 + "px"
});
});
},
//加载AccessPoint下的LDevice列表
LoadLdeviceList: function(accessPointId, accessPointName) {
var ele = $("#ied_basicinfo .accessPoint[accesspoint='" + accessPointName + "']");
if (ele.length == 0) return;
$.getJSON(Global.AccessUrl + "/api/screen/scd/ldevice/list", {
"scd_id": ele.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"accessPointId": accessPointId
}, function(r) {
if (r.data == null) {
return;
}
var $ldeviceList = ele.find(".ldevice_list");
for (var i = 0; i < r.data.length; i++) {
var item = r.data[i];
var txt = item.attr_inst;
if (item.attr_desc != "") txt += "
" + item.attr_desc + "";
$ldeviceList.append('

' + txt + '
');
}
});
},
//加载LDevice下的LN列表
LoadLnList: function(ele, ldeviceId) {
var $ied_strcut = $("#ied_basicinfo");
var ied_strcut_detail = $("#ied_basicinfo #ied_strcut_detail");
layer.msg("正在加载LN列表...", {
time: 0
});
var showLnList = $ied_strcut.find("#showLnList");
if (showLnList.length == 0) {
$ied_strcut.append("
");
showLnList = $ied_strcut.find("#showLnList");
} else {
showLnList.removeClass("hidden").find(".ln_list table").html("");
}
var toEle = $(ele),
toXY = toEle.position();
showLnList.find(".caption").html(toEle.text() + "—LN/LN0节点列表");
showLnList.css({
top: $ied_strcut.height() * 0.25,
left: ($ied_strcut.width() - showLnList.width()) / 2
});
var lndatalistEle = showLnList.find(".ln_list table");
$.getJSON(Global.AccessUrl + "/api/screen/scd/node/list", {
"scd_id": ied_strcut_detail.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"parent_node_id": ldeviceId,
"pagesize": 1000,
"name": "LN0"
}, function(r) {
var trs = [];
for (var i = 0; i < r.data.length; i++) {
var item = r.data[i];
trs.push("
1 | " + (item.attr_inst || " ") + " | " + item.attr_ln_class + " | " + item.attr_ln_type + " | " + item.attr_desc + " |
");
}
lndatalistEle.prepend(trs.join(""));
lndatalistEle.find("tr").each(function(ind, ele) {
$(ele).children("td:first").html(ind + 1);
});
});
$.getJSON(Global.AccessUrl + "/api/screen/scd/node/list", {
"scd_id": ied_strcut_detail.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"parent_node_id": ldeviceId,
"pagesize": 1000,
"name": "LN"
}, function(r) {
var trs = [];
layer.closeAll();
for (var i = 0; i < r.data.length; i++) {
var item = r.data[i];
trs.push("
序号 | " + (item.attr_inst || " ") + " | " + item.attr_ln_class + " | " + item.attr_ln_type + " | " + item.attr_desc + " |
");
}
lndatalistEle.append(trs.join(""));
lndatalistEle.find("tr").each(function(ind, ele) {
$(ele).children("td:first").html(ind + 1);
});
});
lndatalistEle.off().on("click", "tr", function() {
var jsondata = JSON.parse($(this).attr("json"));
//暂时屏蔽该逻辑
/*
DialogObject.Open($("#dialog_public"), {
callback: PoliceObject.LoadLnStrcut,
para: jsondata,
size: ["100rem", "70rem"]
});
*/
});
},
LoadLnStrcut: function(win, para) {
win.find(".caption>b").html((para.attr_ln_class == "LLN0" ? "LLN0" : "LN") + "结构详情—" + para.attr_desc);
var h = (win.height() - win.find(".caption").height() - win.find(".footer").height());
win.find(".dataitemlist").height(h + "px");
var ln_strcut_detail = win.find("#ln_strcut_detail");
layer.msg("正在加载DOI数据...", {
time: 0
});
//生成根节点
var trs = [{
"id": para.node_id,
"isroot": true,
"topic": para.attr_desc || para.attr_ln_class
}];
kmsjsmap.inited = kmsjsmap.isInit = false; //重置初始化状态为未初始化
var jsmind = kmsjsmap.init({
container: ln_strcut_detail[0],
data: trs,
editable: false,
onRelation: function(item) {
if (item.children.length == 0 && item.data.badge != "" && !item.data.isloaded) {
//加载该节点下的子节点
var node = jsmind.get_node(item.id);
//console.log('当前选择中的是', node)
PoliceObject.AppendMindNodes(para.scdid, jsmind, node, item.id, item.topic);
}
}
});
//移除组件自带的放大缩小插件
win.find(".lui-jsmind-innerToolBar").remove();
PoliceObject.AppendMindNodeType(para.scdid, jsmind, jsmind.get_node(para.node_id), para.node_id);
},
AppendMindNodeType: function(scdid, jsmind, parentItem, pid, callback) {
layer.closeAll();
//获取下级节点及数量
$.getJSON(Global.AccessUrl + "/api/screen/scd/node/children/stat", {
"scd_id": scdid,
"node_id": pid
}, function(r) {
parentItem.data.isloaded = true;
if (r.data == null || r.data.length == 0) {
if (callback != null) callback();
return;
}
jsmind.options.editable = true;
for (var i = 0; i < r.data.length; i++) {
var cItem = r.data[i];
var nid = pid + "_" + cItem.node_name;
jsmind.data.jm.add_node(parentItem, nid, cItem.node_name, {
"badge": cItem.cnt,
"isloaded": false
});
}
jsmind.options.editable = false;
if (callback != null) callback();
});
},
//加载指定节点的子节点到导图中
AppendMindNodes: function(scdid, jsmind, parentItem, pid, nodeName, callback) {
$.getJSON(Global.AccessUrl + "/api/screen/scd/node/list", {
"scd_id": scdid,
"parent_node_id": pid,
"name": nodeName,
"pagesize": 10000
}, function(r) {
parentItem.data.isloaded = true;
if (r.data == null || r.data.length == 0) {
if (callback != null) callback();
return;
}
jsmind.options.editable = true;
for (var i = 0; i < r.data.length; i++) {
var daiItem = r.data[i];
var sddr = daiItem.attr_saddr;
var txt = daiItem.attr_name;
if (daiItem.node_name == "SDI") {
if ($.trim(daiItem.attr_desc) != "") txt = txt + "(" + daiItem.attr_desc + ")";
}
if (daiItem.node_name == "DAI") {
if ($.trim(daiItem.attr_saddr) != "") txt = txt + "(sAddr:" + daiItem.attr_saddr + ")";
}
if (daiItem.node_name == "Val") {
txt = daiItem.node_value;
}
if (daiItem.node_name == "FCDA") {
txt = daiItem.attr_ln_class + "_" + daiItem.attr_ln_inst;
}
if (daiItem.node_name == "ExtRef") {
txt = daiItem.attr_ln_class + "_" + daiItem.attr_ln_inst + "(intAddr:" + daiItem.attr_int_addr + ")";
}
var nid = daiItem.node_id || daiItem.nodeid;
var newNode = jsmind.data.jm.add_node(parentItem, nid, txt, {
"badge": "",
"isloaded": false
});
PoliceObject.AppendMindNodeType(jsmind, newNode, nid);
}
jsmind.options.editable = false;
if (callback != null) callback();
});
},
//加载DataSet下的FCDA列表
LoadFCDAList: function(ele, dataset_id, dataset_name) {
var $ied_strcut = $("#ied_basicinfo");
var ied_strcut_detail = $ied_strcut.find("#ied_strcut_detail");
layer.msg("正在加载FCDA列表...", {
time: 0
});
var showLnList = $ied_strcut.find("#showLnList");
if (showLnList.length == 0) {
$ied_strcut.append("
ldInst | prefix | lnClass | lnInst | doName | daName | fc |
");
showLnList = $ied_strcut.find("#showLnList");
} else {
showLnList.removeClass("hidden").find(".ln_list table").html("");
}
var toEle = $(ele),
toXY = toEle.position();
showLnList.find(".caption").html(dataset_name + "—FCDA列表");
showLnList.css({
top: $ied_strcut.height() * 0.25,
left: ($ied_strcut.width() - showLnList.width()) / 2
});
var lndatalistEle = showLnList.find(".ln_list table");
$.getJSON(Global.AccessUrl + "/api/screen/scd/node/list", {
"scd_id": ied_strcut_detail.parents(".site_device_list").attr("scd_id") || PoliceObject.ScdID,
"parent_node_id": dataset_id,
"pagesize": 1000,
"name": "FCDA"
}, function(r) {
var trs = [];
layer.closeAll();
for (var i = 0; i < r.data.length; i++) {
var item = r.data[i];
trs.push("
" + (item.attr_ld_inst || " ") + " | " + (item.attr_prefix || " ") + " | " + (item.attr_ln_class || " ") + " | " + (item.attr_ln_inst || " ") + " | " + (item.attr_do_name || " ") + " | " + (item.attr_da_name || " ") + " | " + (item.attr_fc || " ") + " |
");
}
lndatalistEle.prepend(trs.join(""));
});
},
p_createCanvas: function(canvasconEle) {
var canvas = canvasconEle[0];
canvas.width = canvasconEle.width();
canvas.height = canvasconEle.height();
var canvascontext = canvas.getContext('2d');
return canvascontext
},
p_drawPoly(canvascontext, point1, point2) {
//canvascontext.setLineDash([]);
canvascontext.strokeStyle = "#08b008";
canvascontext.lineWidth = 1;
canvascontext.lineJoin = 'round';
canvascontext.lineCap = 'round';
canvascontext.beginPath();
canvascontext.moveTo(point1[0], point1[1]);
canvascontext.lineTo(point1[0] + 10, point1[1]);
canvascontext.stroke();
canvascontext.closePath();
canvascontext.beginPath();
canvascontext.moveTo(point1[0] + 9, point1[1]);
if (point2[1] < point1[1]) canvascontext.quadraticCurveTo(point1[0] + 50, point1[1] - 20, point2[0], point2[1]);
else canvascontext.quadraticCurveTo(point1[0] + 50, point1[1] + 20, point2[0], point2[1]);
canvascontext.stroke();
},
p_drawNumber: function(ele, masterIedJoinPoint, salveJoinPoint, num, direction) {
//额外加减的11px为数字高宽的一半
if (direction == "left") {
var numberLeft = masterIedJoinPoint[0] - (masterIedJoinPoint[0] - salveJoinPoint[0]) / 2 - 11;
var numberTop = masterIedJoinPoint[1] - (masterIedJoinPoint[1] - salveJoinPoint[1]) / 2 - 11;
return ele.append('
' + num + '').find(".inputs_num:last");
} else {
//右边的
var numberLeft = masterIedJoinPoint[0] + (salveJoinPoint[0] - masterIedJoinPoint[0]) / 2 - 11;
var numberTop = masterIedJoinPoint[1] - (masterIedJoinPoint[1] - salveJoinPoint[1]) / 2 - 11;
return ele.append('
' + num + '').find(".inputs_num:last");
}
},
p_drawLine: function(cxt, point1, point2, color) {
/*cxt.strokeStyle = "#fff";
cxt.lineWidth = 1;
cxt.lineJoin = 'round';
cxt.lineCap = 'round';
//cxt.fillStyle = paintConfig.fillStyle;
cxt.beginPath();
cxt.moveTo(point1[0], point1[1]);
cxt.lineTo(point2[0], point2[1]);
cxt.stroke();*/
//this.p_drawArrow(cxt, point1[0], point1[1], point2[0], point2[1], 30, 10, 1, color);
this.p_drawArrow2(cxt, point1[0], point1[1], point2[0], point2[1], 1, 1, 18, 5, color, 1.5)
},
//
//ctx:Canvas绘图环境
//fromX, fromY:起点坐标(也可以换成p1,只不过它是一个数组)
//toX, toY:终点坐标 (也可以换成p2,只不过它是一个数组)
//theta:三角斜边一直线夹角
//headlen:三角斜边长度
//width:箭头线宽度
//color:箭头颜色
p_drawArrow: function(ctx, fromX, fromY, toX, toY, theta, headlen, width, color) {
theta = typeof(theta) != 'undefined' ? theta : 30;
headlen = typeof(theta) != 'undefined' ? headlen : 10;
width = typeof(width) != 'undefined' ? width : 1;
color = typeof(color) != 'undefined' ? color : '#fff';
// 计算各角度和对应的P2,P3坐标
var angle = Math.atan2(fromY - toY, fromX - toX) * 180 / Math.PI,
angle1 = (angle + theta) * Math.PI / 180,
angle2 = (angle - theta) * Math.PI / 180,
topX = headlen * Math.cos(angle1),
topY = headlen * Math.sin(angle1),
botX = headlen * Math.cos(angle2),
botY = headlen * Math.sin(angle2);
ctx.save();
ctx.beginPath();
var arrowX = fromX - topX,
arrowY = fromY - topY;
ctx.moveTo(arrowX, arrowY);
ctx.moveTo(fromX, fromY);
ctx.lineTo(toX, toY);
arrowX = toX + topX;
arrowY = toY + topY;
ctx.moveTo(arrowX, arrowY);
ctx.lineTo(toX, toY);
arrowX = toX + botX;
arrowY = toY + botY;
ctx.lineTo(arrowX, arrowY);
ctx.strokeStyle = color;
ctx.lineWidth = width;
ctx.stroke();
ctx.restore();
},
// Draw arrow head
drawHead: function(ctx, x0, y0, x1, y1, x2, y2, style, color, width) {
if (typeof(x0) == 'string') {
x0 = parseInt(x0);
}
if (typeof(y0) == 'string') {
y0 = parseInt(y0);
}
if (typeof(x1) == 'string') {
x1 = parseInt(x1);
}
if (typeof(y1) == 'string') {
y1 = parseInt(y1);
}
if (typeof(x2) == 'string') {
x2 = parseInt(x2);
}
if (typeof(y2) == 'string') {
y2 = parseInt(y2);
}
var radius = 3,
twoPI = 2 * Math.PI;
ctx.save();
ctx.beginPath();
ctx.strokeStyle = color;
ctx.fillStyle = color;
ctx.lineWidth = width;
ctx.moveTo(x0, y0);
ctx.lineTo(x1, y1);
ctx.lineTo(x2, y2);
switch (style) {
case 0:
var backdist = Math.sqrt(((x2 - x0) * (x2 - x0)) + ((y2 - y0) * (y2 - y0)));
ctx.arcTo(x1, y1, x0, y0, .55 * backdist);
ctx.fill();
break;
case 1:
ctx.beginPath();
ctx.moveTo(x0, y0);
ctx.lineTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.lineTo(x0, y0);
ctx.fill();
break;
case 2:
ctx.stroke();
break;
case 3:
var cpx = (x0 + x1 + x2) / 3;
var cpy = (y0 + y1 + y2) / 3;
ctx.quadraticCurveTo(cpx, cpy, x0, y0);
ctx.fill();
break;
case 4:
var cp1x, cp1y, cp2x, cp2y, backdist;
var shiftamt = 5;
if (x2 == x0) {
backdist = y2 - y0;
cp1x = (x1 + x0) / 2;
cp2x = (x1 + x0) / 2;
cp1y = y1 + backdist / shiftamt;
cp2y = y1 - backdist / shiftamt;
} else {
backdist = Math.sqrt(((x2 - x0) * (x2 - x0)) + ((y2 - y0) * (y2 - y0)));
var xback = (x0 + x2) / 2;
var yback = (y0 + y2) / 2;
var xmid = (xback + x1) / 2;
var ymid = (yback + y1) / 2;
var m = (y2 - y0) / (x2 - x0);
var dx = (backdist / (2 * Math.sqrt(m * m + 1))) / shiftamt;
var dy = m * dx;
cp1x = xmid - dx;
cp1y = ymid - dy;
cp2x = xmid + dx;
cp2y = ymid + dy;
}
ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x0, y0);
ctx.fill();
break;
}
ctx.restore();
},
// draw arrow
//p_drawArrow2(ctx, 100, 50, 200, 50, 1, 1, 18, 5, '#f36', 1);
//p_drawArrow2(ctx, 300, 50, 450, 50, 2, 1, 18, 4, 'blue', 0.5);
p_drawArrow2: function(ctx, x1, y1, x2, y2, style, which, angle, d, color, width) {
if (typeof(x1) == 'string') {
x1 = parseInt(x1);
}
if (typeof(y1) == 'string') {
y1 = parseInt(y1);
}
if (typeof(x2) == 'string') {
x2 = parseInt(x2);
}
if (typeof(y2) == 'string') {
y2 = parseInt(y2);
}
style = typeof(style) != 'undefined' ? style : 3;
which = typeof(which) != 'undefined' ? which : 1;
angle = typeof(angle) != 'undefined' ? angle : Math.PI / 9;
d = typeof(d) != 'undefined' ? d : 10;
color = typeof(color) != 'undefined' ? color : '#fff';
width = typeof(width) != 'undefined' ? width : 1;
var toDrawHead = typeof(style) != 'function' ? this.drawHead : style;
var dist = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
var ratio = (dist - d / 3) / dist;
var tox, toy, fromx, fromy;
if (which & 1) {
tox = Math.round(x1 + (x2 - x1) * ratio);
toy = Math.round(y1 + (y2 - y1) * ratio);
} else {
tox = x2;
toy = y2;
}
if (which & 2) {
fromx = x1 + (x2 - x1) * (1 - ratio);
fromy = y1 + (y2 - y1) * (1 - ratio);
} else {
fromx = x1;
fromy = y1;
}
ctx.beginPath();
ctx.strokeStyle = color;
ctx.lineWidth = width;
ctx.moveTo(fromx, fromy);
ctx.lineTo(tox, toy);
ctx.stroke();
var lineangle = Math.atan2(y2 - y1, x2 - x1);
var h = Math.abs(d / Math.cos(angle));
if (which & 1) {
var angle1 = lineangle + Math.PI + angle;
var topx = x2 + Math.cos(angle1) * h;
var topy = y2 + Math.sin(angle1) * h;
var angle2 = lineangle + Math.PI - angle;
var botx = x2 + Math.cos(angle2) * h;
var boty = y2 + Math.sin(angle2) * h;
toDrawHead(ctx, topx, topy, x2, y2, botx, boty, style, color, width);
}
if (which & 2) {
var angle1 = lineangle + angle;
var topx = x1 + Math.cos(angle1) * h;
var topy = y1 + Math.sin(angle1) * h;
var angle2 = lineangle - angle;
var botx = x1 + Math.cos(angle2) * h;
var boty = y1 + Math.sin(angle2) * h;
toDrawHead(ctx, topx, topy, x1, y1, botx, boty, style, color, width);
}
},
AlwaysTimer: function() {
var time = new Date();
var year = time.getFullYear();
var month = time.getMonth() + 1;
var date = time.getDate();
var hour = time.getHours();
var minutes = time.getMinutes();
var seconds = time.getSeconds();
month = month < 10 ? "0" + month : month;
date = date < 10 ? "0" + date : date;
if (hour < 10) {
hour = "0" + hour;
}
if (minutes < 10) {
minutes = "0" + minutes;
}
if (seconds < 10) {
seconds = "0" + seconds;
}
$(".yyyymmdd").html(year + "-" + month + "-" + date);
$(".week").html(PoliceObject.GetWeek());
$(".hour_minute").html(hour + ":" + minutes + ":" + seconds);
setTimeout('PoliceObject.AlwaysTimer()', 1000);
},
GetWeek: function() {
var time = new Date();
var day = time.getDay();
var weeks = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
return weeks[day];
}
}