|
@@ -40,7 +40,7 @@
|
|
|
<!-- 中间部分 -->
|
|
|
<div class="main-middle" ref="middleHeight" id="end">
|
|
|
<div class="middle-title" v-if="listData2">
|
|
|
- <div v-if="listData2">{{ listData2.ied_name }}</div>
|
|
|
+ <div>{{ listData2.ied_name }}</div>
|
|
|
<div v-if="listData2">{{ listData2.desc }}</div>
|
|
|
</div>
|
|
|
<div class="middle-item" ref="middleElement">
|
|
@@ -105,6 +105,16 @@
|
|
|
:svInfo="svInfo"
|
|
|
></inoutSendOrRv>
|
|
|
</div>
|
|
|
+ <inoutDialog
|
|
|
+ :circleOpen="circleOpen"
|
|
|
+ :listData2="listData2"
|
|
|
+ :checkData="checkData"
|
|
|
+ :dilogData="dilogData"
|
|
|
+ :dilogTitie="dilogTitie"
|
|
|
+ :dilogRightData="dilogRightData"
|
|
|
+ @done="done"
|
|
|
+ >
|
|
|
+ </inoutDialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script setup>
|
|
@@ -112,11 +122,14 @@ import { onMounted, watch, ref, nextTick, defineEmits, inject } from "vue";
|
|
|
import LeaderLine from "../../../../public/leader-line.min.js";
|
|
|
import AnimEvent from "../../../../public/anim-event.min.js";
|
|
|
import inoutSendOrRv from "./inoutSendOrRv";
|
|
|
+import inoutDialog from "./inoutDialog.vue";
|
|
|
import {
|
|
|
//send发送
|
|
|
iednetworkInfo,
|
|
|
iedSVSendCtrlblock,
|
|
|
gooseSendctrlblock,
|
|
|
+ scdIedRelation,
|
|
|
+ getiedInputs,
|
|
|
} from "@/api/iedNetwork";
|
|
|
import jsPlumb from "jsplumb";
|
|
|
const props = defineProps({
|
|
@@ -144,6 +157,7 @@ const props = defineProps({
|
|
|
const svInfo = ref(null);
|
|
|
const scdIdValue = inject("scdId");
|
|
|
const iedChild = ref(null);
|
|
|
+const circleOpen = ref(false); //数字点击事件
|
|
|
//得到两边子版块的数据
|
|
|
const getIedChild = async () => {
|
|
|
const childRes = await gooseSendctrlblock({
|
|
@@ -222,6 +236,7 @@ const domListRight2 = ref(new Map()); //获取右侧所有的ref
|
|
|
const domListMiddle2 = ref(new Map()); //获取中间所有的ref
|
|
|
const domListRightChild2 = ref(new Map()); //获取右侧所有子的ref
|
|
|
const domListLeftChild2 = ref(new Map()); //获取中间所有子的ref
|
|
|
+
|
|
|
const listData2 = ref(props.checkData); //线条左右两侧的数据
|
|
|
const emit = defineEmits(["result"]); //如果不加这个再次点击左侧会没有反应
|
|
|
const tabValue = ref(props.isPhoto); //点击tab切换的数据
|
|
@@ -257,6 +272,7 @@ const setdomRight2Child2 = (el, item) => {
|
|
|
domListRightChild2.value.set(item, el);
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
const processArray = (arr) => {
|
|
|
// ref_ied_id作为键,obj作为值
|
|
|
const uniqueObjects = new Map();
|
|
@@ -304,12 +320,32 @@ const bothSide = (data) => {
|
|
|
rightList.value = formatArr.splice(0);
|
|
|
};
|
|
|
//圆圈数字的位置endDom, options,posit,keys,startDom
|
|
|
-const circelSet = (endDom, options,posit,keys,startDom) => {
|
|
|
+const dilogLeftData = ref(null);
|
|
|
+const dilogRightData = ref(null);
|
|
|
+const dilogData = ref(null);
|
|
|
+const dilogTitie = ref(null);
|
|
|
+const circelSet = (endDom, options, posit, keys, startDom, keyMiddle) => {
|
|
|
let elmButton = endDom.appendChild(document.createElement("div"));
|
|
|
- // 阻止点击事件冒泡
|
|
|
- elmButton.addEventListener("click", (event) => {
|
|
|
- console.log('event', keys)
|
|
|
+ // 阻止点击事件冒泡
|
|
|
+ elmButton.addEventListener("click", async (event) => {
|
|
|
event.stopPropagation();
|
|
|
+ const ResInput = await getiedInputs({
|
|
|
+ title: "虚端子—详细信息",
|
|
|
+ s_ied_name: keys.target_ied_name,
|
|
|
+ m_ied_name: keys.source_ied_name,
|
|
|
+ m_ctrlid: "",
|
|
|
+ s_ctrlid: keys.ctrl_id,
|
|
|
+ scd_id: scdIdValue,
|
|
|
+ });
|
|
|
+ dilogData.value = ResInput.data;
|
|
|
+ const resRla = await scdIedRelation({
|
|
|
+ scd_id: scdIdValue,
|
|
|
+ ied_name: keys.target_ied_name,
|
|
|
+ reset: 1,
|
|
|
+ });
|
|
|
+ dilogTitie.value = keys;
|
|
|
+ dilogRightData.value = resRla.data;
|
|
|
+ circleOpen.value = true;
|
|
|
});
|
|
|
elmButton.className = "circel-name";
|
|
|
elmButton.innerHTML = options;
|
|
@@ -321,20 +357,25 @@ const circelSet = (endDom, options,posit,keys,startDom) => {
|
|
|
elmButton.style.borderRadius = "10px";
|
|
|
elmButton.style.background = "#255CE7";
|
|
|
elmButton.style.position = "absolute";
|
|
|
- if(posit == 'left'){
|
|
|
- elmButton.style.right =-64 + "px";
|
|
|
+ if (posit == "left") {
|
|
|
+ elmButton.style.right = -64 + "px";
|
|
|
elmButton.style.top = 13 + "px";
|
|
|
- }else if(posit == 'right'){
|
|
|
+ } else if (posit == "right") {
|
|
|
elmButton.style.left = -64 + "px";
|
|
|
elmButton.style.top = 13 + "px";
|
|
|
- }else if(posit == 'leftMiddle') {
|
|
|
- let rect = endDom.getBoundingClientRect();//左侧
|
|
|
- let rectMiddle = startDom.getBoundingClientRect();//中间
|
|
|
- console.log('rect', rect,'rectMiddle',rectMiddle)
|
|
|
- // elmButton.style.top =rect.top - rectMiddle.top +"px";
|
|
|
- elmButton.style.right =-74 + "px";
|
|
|
- }else if(posit == 'rightMiddle') {
|
|
|
- elmButton.style.left =-74 + "px";
|
|
|
+ } else if (posit == "leftMiddle" || posit == "rightMiddle") {
|
|
|
+ const dom1Rect = endDom.getBoundingClientRect();
|
|
|
+ const dom2Rect = startDom.getBoundingClientRect();
|
|
|
+ // 计算dom1和dom2矩形的中间y坐标。
|
|
|
+ const dom1MiddleY = dom1Rect.top + dom1Rect.height / 2;
|
|
|
+ const dom2MiddleY = dom2Rect.top + dom2Rect.height / 2;
|
|
|
+ elmButton.style.top =
|
|
|
+ dom1MiddleY + (dom2MiddleY - dom1MiddleY) / 2 - dom1Rect.top - 8 + "px";
|
|
|
+ if (posit == "leftMiddle") {
|
|
|
+ elmButton.style.right = -74 + "px";
|
|
|
+ } else {
|
|
|
+ elmButton.style.left = -74 + "px";
|
|
|
+ }
|
|
|
}
|
|
|
// lineData.value.forEach((ele, index) => {
|
|
|
// const text = ele.doms.querySelector("text");
|
|
@@ -376,7 +417,11 @@ const circelSet = (endDom, options,posit,keys,startDom) => {
|
|
|
// );
|
|
|
// });
|
|
|
};
|
|
|
+const done = (emits) => {
|
|
|
+ circleOpen.value = emits;
|
|
|
+};
|
|
|
let lineData = ref([]);
|
|
|
+
|
|
|
const setLeaderline2 = () => {
|
|
|
//线条样式
|
|
|
const startDom = document.getElementById("end");
|
|
@@ -396,16 +441,9 @@ const setLeaderline2 = () => {
|
|
|
path: "straight",
|
|
|
startSocket: "right",
|
|
|
endSocket: "left",
|
|
|
- middleLabel: LeaderLine.captionLabel({
|
|
|
- text: options,
|
|
|
- }),
|
|
|
}
|
|
|
);
|
|
|
- lineData.value.push({
|
|
|
- doms: document.querySelector(".leader-line:last-of-type"),
|
|
|
- leftKey: key
|
|
|
- });
|
|
|
- circelSet(endDom, options,'left',key);
|
|
|
+ circelSet(endDom, options, "left", key);
|
|
|
} else {
|
|
|
line = new LeaderLine(
|
|
|
endDom,
|
|
@@ -416,17 +454,13 @@ const setLeaderline2 = () => {
|
|
|
path: "straight",
|
|
|
startSocket: "right",
|
|
|
endSocket: "left",
|
|
|
- y: 50,
|
|
|
- middleLabel: LeaderLine.captionLabel({
|
|
|
- text: options,
|
|
|
- }),
|
|
|
+ // y: 50,
|
|
|
+ // middleLabel: LeaderLine.captionLabel({
|
|
|
+ // text: options,
|
|
|
+ // }),
|
|
|
}
|
|
|
);
|
|
|
- lineData.value.push({
|
|
|
- doms: document.querySelector(".leader-line:last-of-type"),
|
|
|
- leftKey: key,
|
|
|
- });
|
|
|
- circelSet(endDom, options,'left',key);
|
|
|
+ circelSet(endDom, options, "left", key);
|
|
|
}
|
|
|
leaderLines2.value.push(line);
|
|
|
}
|
|
@@ -448,14 +482,10 @@ const setLeaderline2 = () => {
|
|
|
endSocket: "left",
|
|
|
startPlug: "arrow1",
|
|
|
endPlug: "behind",
|
|
|
- middleLabel: LeaderLine.captionLabel(options),
|
|
|
+ // middleLabel: LeaderLine.captionLabel(options),
|
|
|
}
|
|
|
);
|
|
|
- lineData.value.push({
|
|
|
- doms: document.querySelector(".leader-line:last-of-type"),
|
|
|
- leftKey: key,
|
|
|
- });
|
|
|
- circelSet(endDom, options,'right',key);
|
|
|
+ circelSet(endDom, options, "right", key);
|
|
|
} else {
|
|
|
line = new LeaderLine(
|
|
|
LeaderLine.pointAnchor(startDom, { x: "100%", y: rectEnd.top - 232 }),
|
|
@@ -468,14 +498,10 @@ const setLeaderline2 = () => {
|
|
|
endSocket: "left",
|
|
|
startPlug: "arrow1",
|
|
|
endPlug: "behind",
|
|
|
- middleLabel: LeaderLine.captionLabel(options),
|
|
|
+ // middleLabel: LeaderLine.captionLabel(options),
|
|
|
}
|
|
|
);
|
|
|
- lineData.value.push({
|
|
|
- doms: document.querySelector(".leader-line:last-of-type"),
|
|
|
- leftKey: key,
|
|
|
- });
|
|
|
- circelSet(endDom, options,'right',key);
|
|
|
+ circelSet(endDom, options, "right", key);
|
|
|
}
|
|
|
leaderLines2.value.push(line);
|
|
|
}
|
|
@@ -499,18 +525,13 @@ const setLeaderline2 = () => {
|
|
|
startPlug: "arrow1",
|
|
|
startSocket: "right",
|
|
|
endSocket: "left",
|
|
|
- middleLabel: LeaderLine.captionLabel(options2),
|
|
|
+ // middleLabel: LeaderLine.captionLabel(options2),
|
|
|
};
|
|
|
if (key2.attr_name == "smvcb0") {
|
|
|
lineStyle.color = "red";
|
|
|
}
|
|
|
line = new LeaderLine(endDom, startDom, lineStyle);
|
|
|
- lineData.value.push({
|
|
|
- doms: document.querySelector(".leader-line:last-of-type"),
|
|
|
- leftKey: key,
|
|
|
- rightKey: key2,
|
|
|
- });
|
|
|
- circelSet(endDom, options2,'leftMiddle',key,startDom);
|
|
|
+ circelSet(endDom, options2, "leftMiddle", key, startDom, key2);
|
|
|
leaderLines2.value.push(line);
|
|
|
}
|
|
|
}
|
|
@@ -534,18 +555,13 @@ const setLeaderline2 = () => {
|
|
|
endPlug: "arrow1",
|
|
|
endSocket: "left",
|
|
|
startSocket: "right",
|
|
|
- middleLabel: LeaderLine.captionLabel(options3),
|
|
|
+ // middleLabel: LeaderLine.captionLabel(options3),
|
|
|
};
|
|
|
if (key2.attr_name == "smvcb0") {
|
|
|
lineStyle2.color = "red";
|
|
|
}
|
|
|
line2 = new LeaderLine(startDom, endDom, lineStyle2);
|
|
|
- lineData.value.push({
|
|
|
- doms: document.querySelector(".leader-line:last-of-type"),
|
|
|
- leftKey: key,
|
|
|
- rightKey: key2,
|
|
|
- });
|
|
|
- circelSet(endDom, options3,'rightMiddle',key,startDom);
|
|
|
+ circelSet(endDom, options3, "rightMiddle", key, startDom, key2);
|
|
|
leaderLines2.value.push(line2);
|
|
|
}
|
|
|
}
|
|
@@ -558,11 +574,11 @@ const setLeaderline2 = () => {
|
|
|
hiddenLine2();
|
|
|
};
|
|
|
//滚动时重定位线条
|
|
|
-const newPositionLine2 = () => {
|
|
|
+const newPositionLine2 = (diffline) => {
|
|
|
document.getElementById("treedom2").addEventListener(
|
|
|
"scroll",
|
|
|
AnimEvent.add(() => {
|
|
|
- leaderLines2.value.forEach((line) => {
|
|
|
+ diffline.forEach((line) => {
|
|
|
if (line) {
|
|
|
hiddenLine2();
|
|
|
line.position();
|
|
@@ -576,7 +592,7 @@ const newPositionLine2 = () => {
|
|
|
window.addEventListener(
|
|
|
"resize",
|
|
|
AnimEvent.add(function () {
|
|
|
- leaderLines2.value.forEach((line) => {
|
|
|
+ diffline.forEach((line) => {
|
|
|
hiddenLine2();
|
|
|
line.position();
|
|
|
line.positionByWindowResize = false;
|
|
@@ -587,8 +603,13 @@ const newPositionLine2 = () => {
|
|
|
};
|
|
|
//弹窗打开后使得线条在指定区域中
|
|
|
const hiddenLine2 = () => {
|
|
|
- if (props.isPhoto == "photo") {
|
|
|
+ if (props.isPhoto == "photo" && !circleOpen.value) {
|
|
|
const elmWrapper = document.getElementById("wrapper");
|
|
|
+ console.log(
|
|
|
+ "first",
|
|
|
+ elmWrapper,
|
|
|
+ document.body.querySelectorAll("body .leader-line")
|
|
|
+ );
|
|
|
// 移动 line
|
|
|
document.body.querySelectorAll("body .leader-line").forEach((node) => {
|
|
|
elmWrapper.appendChild(node);
|
|
@@ -596,6 +617,7 @@ const hiddenLine2 = () => {
|
|
|
elmWrapper.style.transform = "none";
|
|
|
var rectWrapper = elmWrapper.getBoundingClientRect();
|
|
|
// Move to the origin of coordinates as the document
|
|
|
+ console.log("rectWrapper2", rectWrapper);
|
|
|
elmWrapper.style.transform = `translate(${
|
|
|
(rectWrapper.left + window.scrollY) * -1
|
|
|
}px, ${(rectWrapper.top + window.scrollX) * -1}px)`;
|
|
@@ -612,9 +634,12 @@ const setLine2 = () => {
|
|
|
|
|
|
const removeLine2 = () => {
|
|
|
const elmWrapper = document.getElementById("wrapper");
|
|
|
- document.body.querySelectorAll("body .leader-line").forEach((node) => {
|
|
|
- elmWrapper.removeChild(node);
|
|
|
- });
|
|
|
+ if (elmWrapper) {
|
|
|
+ elmWrapper.querySelectorAll("body .leader-line").forEach((node) => {
|
|
|
+ // elmWrapper.removeChild(node);
|
|
|
+ node.remove();
|
|
|
+ });
|
|
|
+ }
|
|
|
};
|
|
|
onMounted(() => {
|
|
|
if (props.checkData != null && props.isPhoto == "photo") {
|
|
@@ -626,7 +651,7 @@ onMounted(() => {
|
|
|
nextTick(() => {
|
|
|
setLine2();
|
|
|
nextTick(() => {
|
|
|
- newPositionLine2();
|
|
|
+ newPositionLine2(leaderLines2.value);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
@@ -636,12 +661,18 @@ watch(
|
|
|
() => props.isPhoto,
|
|
|
(newValue) => {
|
|
|
tabValue.value = newValue;
|
|
|
+ let child = document.querySelectorAll(".circel-name");
|
|
|
+ if (child) {
|
|
|
+ child.forEach((item) => {
|
|
|
+ item.remove();
|
|
|
+ });
|
|
|
+ }
|
|
|
if (listData2.value != null && tabValue.value == "photo") {
|
|
|
nextTick(() => {
|
|
|
removeLine2();
|
|
|
clickResetLine2();
|
|
|
setLine2();
|
|
|
- newPositionLine2();
|
|
|
+ newPositionLine2(leaderLines2.value);
|
|
|
getIedChild();
|
|
|
getNetworkInfo();
|
|
|
});
|
|
@@ -651,6 +682,12 @@ watch(
|
|
|
watch(
|
|
|
() => props.checkData,
|
|
|
(newValue) => {
|
|
|
+ let child = document.querySelectorAll(".circel-name");
|
|
|
+ if (child) {
|
|
|
+ child.forEach((item) => {
|
|
|
+ item.remove();
|
|
|
+ });
|
|
|
+ }
|
|
|
listData2.value = [];
|
|
|
svInfo.value = [];
|
|
|
listData2.value = newValue;
|
|
@@ -675,10 +712,11 @@ watch(
|
|
|
domListLeftChild2.value.clear();
|
|
|
domListRightChild2.value.clear();
|
|
|
leaderLines2.value = [];
|
|
|
+ } else {
|
|
|
+ nextTick(() => {
|
|
|
+ removeLine2();
|
|
|
+ });
|
|
|
}
|
|
|
- nextTick(() => {
|
|
|
- removeLine2();
|
|
|
- });
|
|
|
}
|
|
|
);
|
|
|
watch(
|