|
@@ -3,18 +3,18 @@
|
|
|
<div>
|
|
|
<!-- 关联图 -->
|
|
|
<div
|
|
|
- v-if="isPhoto == 'photo'"
|
|
|
+ v-if="tabValue == 'photo'"
|
|
|
class="main-cont"
|
|
|
ref="myElement"
|
|
|
- id="treedom"
|
|
|
+ id="treedom2"
|
|
|
>
|
|
|
- <div class="main-left">
|
|
|
+ <div class="main-left" ref="leftElement">
|
|
|
<div
|
|
|
v-for="(item, index) in leftList"
|
|
|
:key="index"
|
|
|
class="conts"
|
|
|
@click="clickImg(item)"
|
|
|
- :ref="(el) => setdom(el, item)"
|
|
|
+ :ref="(el) => setdom2(el, item)"
|
|
|
>
|
|
|
<div class="cont-item">
|
|
|
<div>{{ item.ref_ied_name }}</div>
|
|
@@ -28,6 +28,7 @@
|
|
|
class="ied-desc-child"
|
|
|
v-for="(item3, index3) in cItem.childItem"
|
|
|
:key="index3"
|
|
|
+ :ref="(el) => setdomLeftChild2(el, item3)"
|
|
|
>
|
|
|
<div>{{ item3.ctrl_name }}</div>
|
|
|
<div>{{ item3.datset_desc }}</div>
|
|
@@ -36,31 +37,32 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 中间部分 -->
|
|
|
- <div class="main-middle" ref="middleHeight">
|
|
|
+ <div class="main-middle" ref="middleHeight" id="end">
|
|
|
<div class="middle-title">
|
|
|
- <div v-if="listData">{{ listData.ied_name }}</div>
|
|
|
- <div v-if="listData">{{ listData.desc }}</div>
|
|
|
+ <div v-if="listData2">{{ listData2.ied_name }}</div>
|
|
|
+ <div v-if="listData2">{{ listData2.desc }}</div>
|
|
|
</div>
|
|
|
<div class="middle-item" ref="middleElement">
|
|
|
<div
|
|
|
- class="ied-desc-child middle-child"
|
|
|
- v-for="(itemChild, index) in svInfo"
|
|
|
+ class="midlestyle"
|
|
|
+ v-for="(item, index) in svInfo"
|
|
|
:key="index"
|
|
|
+ :ref="(el) => setdomMiddle2(el, item)"
|
|
|
>
|
|
|
- <div>{{ `${itemChild.ldinst}/${itemChild.attr_name}` }}</div>
|
|
|
- <div>{{ itemChild.datset_desc }}</div>
|
|
|
- <div class="ied-desc">APPID:{{ itemChild.APPID }}</div>
|
|
|
+ <div>{{ `${item.ldinst}/${item.attr_name}` }}</div>
|
|
|
+ <div>{{ item.datset_desc }}</div>
|
|
|
+ <div class="ied-desc">APPID:{{ item.APPID }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 右侧 -->
|
|
|
- <div class="main-right">
|
|
|
+ <div class="main-right" ref="rightElement">
|
|
|
<div
|
|
|
v-for="(item, index) in rightList"
|
|
|
:key="index"
|
|
|
class="conts"
|
|
|
@click="clickImg(item)"
|
|
|
- :ref="(el) => setdomRight(el, item)"
|
|
|
+ :ref="(el) => setdomRight2(el, item)"
|
|
|
>
|
|
|
<div class="cont-item">
|
|
|
<div>{{ item.ref_ied_name }}</div>
|
|
@@ -74,6 +76,7 @@
|
|
|
class="ied-desc-child"
|
|
|
v-for="(item3, index3) in cItem.childItem"
|
|
|
:key="index3"
|
|
|
+ :ref="(el) => setdomRight2Child2(el, item3)"
|
|
|
>
|
|
|
<div>{{ item3.ctrl_name }}</div>
|
|
|
<div>{{ item3.datset_desc }}</div>
|
|
@@ -83,7 +86,7 @@
|
|
|
</div>
|
|
|
<div id="wrapper"></div>
|
|
|
</div>
|
|
|
- <div v-if="isPhoto != 'photo'">
|
|
|
+ <div v-if="tabValue != 'photo'">
|
|
|
<inoutSendOrRv
|
|
|
:isPhoto="isPhoto"
|
|
|
:checkData="checkData"
|
|
@@ -93,7 +96,7 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
<script setup>
|
|
|
-import { onMounted, watch, ref, nextTick, defineEmits, inject } from "vue";
|
|
|
+import { onMounted, watch, ref, nextTick, defineEmits, inject } from "vue";
|
|
|
import devicePng from "@/assets/image/instruct/device.png";
|
|
|
import LeaderLine from "../../../../public/leader-line.min.js";
|
|
|
import AnimEvent from "../../../../public/anim-event.min.js";
|
|
@@ -126,6 +129,10 @@ const props = defineProps({
|
|
|
type: Object,
|
|
|
default: () => {},
|
|
|
},
|
|
|
+ tabName: {
|
|
|
+ type: String,
|
|
|
+ default: "",
|
|
|
+ },
|
|
|
});
|
|
|
const svInfo = ref(null);
|
|
|
const scdIdValue = inject("scdId");
|
|
@@ -138,7 +145,7 @@ const getIedChild = async () => {
|
|
|
forcerefresh: 0,
|
|
|
});
|
|
|
//左右侧内部侧数据组装
|
|
|
- listData.value.list.forEach((item, index) => {
|
|
|
+ listData2.value.list.forEach((item, index) => {
|
|
|
item.titleItems = [];
|
|
|
childRes.data.forEach((key) => {
|
|
|
if (key.target_ied_name === item.ref_ied_name) {
|
|
@@ -177,47 +184,66 @@ const getNetworkInfo = async () => {
|
|
|
scd_id: scdIdValue,
|
|
|
ied_name: props.checkData.ied_name,
|
|
|
});
|
|
|
- if (svResInfoCtrl.data.GSEControl) {
|
|
|
+ if (svResInfoCtrl.data && svResInfoCtrl.data.GSEControl) {
|
|
|
svResInfo.data.forEach((item) => {
|
|
|
svResInfoCtrl.data.GSEControl.forEach((key) => {
|
|
|
- key.APPID =
|
|
|
- item.cb_name == key.attr_name
|
|
|
- ? JSON.parse(item.address_json).APPID
|
|
|
- : "";
|
|
|
+ if (item.cb_name == key.attr_name) {
|
|
|
+ key.APPID = JSON.parse(item.address_json).APPID;
|
|
|
+ }
|
|
|
});
|
|
|
});
|
|
|
svInfo.value = svResInfoCtrl.data.GSEControl;
|
|
|
- }
|
|
|
-};
|
|
|
-watch(
|
|
|
- () => props.checkData,
|
|
|
- (newValue) => {
|
|
|
- if (newValue != null) {
|
|
|
- getIedChild();
|
|
|
- getNetworkInfo();
|
|
|
+ if (svInfo.value && svInfo.value.length > 3) {
|
|
|
+ middleElement.value.style.marginTop = "20px";
|
|
|
+ } else {
|
|
|
+ middleElement.value.style.marginTop = "150px"; // 设置元素的垂直位置
|
|
|
}
|
|
|
}
|
|
|
-);
|
|
|
+};
|
|
|
//线条
|
|
|
const middleElement = ref(null);
|
|
|
const myElement = ref(null);
|
|
|
-let leaderLines = ref([]); //控制线条显示
|
|
|
+let leaderLines2 = ref([]); //控制线条显示
|
|
|
const leftList = ref([]);
|
|
|
const rightList = ref([]);
|
|
|
-const domList = ref(new Map()); //获取 所有的ref
|
|
|
-const domListRight = ref(new Map()); //获取 所有的ref
|
|
|
-const listData = ref(props.checkData); //线条左右两侧的数据
|
|
|
+const domList2 = ref(new Map()); //获取 所有的ref
|
|
|
+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 setdom = (el, item) => {
|
|
|
+const tabValue = ref(props.isPhoto); //点击tab切换的数据
|
|
|
+const rightElement = ref(null);
|
|
|
+const leftElement = ref(null);
|
|
|
+const setdom2 = (el, item) => {
|
|
|
//左侧dom
|
|
|
if (el) {
|
|
|
- domList.value.set(item, el);
|
|
|
+ domList2.value.set(item, el);
|
|
|
}
|
|
|
};
|
|
|
-const setdomRight = (el, item) => {
|
|
|
+const setdomRight2 = (el, item) => {
|
|
|
//右侧dom
|
|
|
if (el) {
|
|
|
- domListRight.value.set(item, el);
|
|
|
+ domListRight2.value.set(item, el);
|
|
|
+ }
|
|
|
+};
|
|
|
+const setdomMiddle2 = (el, item) => {
|
|
|
+ // 中间dom
|
|
|
+ if (el) {
|
|
|
+ domListMiddle2.value.set(item, el);
|
|
|
+ }
|
|
|
+};
|
|
|
+//左侧子Dom
|
|
|
+const setdomLeftChild2 = (el, item) => {
|
|
|
+ if (el) {
|
|
|
+ domListLeftChild2.value.set(item, el);
|
|
|
+ }
|
|
|
+};
|
|
|
+//右侧子Dom
|
|
|
+const setdomRight2Child2 = (el, item) => {
|
|
|
+ if (el) {
|
|
|
+ domListRightChild2.value.set(item, el);
|
|
|
}
|
|
|
};
|
|
|
const processArray = (arr) => {
|
|
@@ -242,51 +268,21 @@ const processArray = (arr) => {
|
|
|
const clickImg = (dataItem) => {
|
|
|
Object.values(props.iedRelation).find((item) => {
|
|
|
if (item.ied_name == dataItem.ref_ied_name) {
|
|
|
- listData.value = item;
|
|
|
+ listData2.value = item;
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
-watch(
|
|
|
- () => props.checkData,
|
|
|
- (newValue, oldV) => {
|
|
|
- listData.value = [];
|
|
|
- listData.value = newValue;
|
|
|
- if (newValue && leaderLines.value.length > 0) {
|
|
|
- // leaderLines.value.forEach((line) => line.remove()); //清除连线
|
|
|
- leaderLines.value = [];
|
|
|
- }
|
|
|
- },
|
|
|
- { deep: true }
|
|
|
-);
|
|
|
-watch(
|
|
|
- () => listData.value,
|
|
|
- (newValue) => {
|
|
|
- emit("result", newValue);
|
|
|
- clickResetLine();
|
|
|
- }
|
|
|
-);
|
|
|
-watch(
|
|
|
- () => props.isOpen,
|
|
|
- (newValue) => {
|
|
|
- if (newValue) {
|
|
|
- domList.value.clear();
|
|
|
- domListRight.value.clear();
|
|
|
- leaderLines.value = [];
|
|
|
- }
|
|
|
- nextTick(() => {
|
|
|
- middleLinePosition();
|
|
|
- removeLine();
|
|
|
- });
|
|
|
- }
|
|
|
-);
|
|
|
+
|
|
|
//点击后重置数据和线条
|
|
|
-const clickResetLine = () => {
|
|
|
- domList.value.clear();
|
|
|
- domListRight.value.clear();
|
|
|
- leaderLines.value = [];
|
|
|
- middleLinePosition();
|
|
|
- setLine();
|
|
|
- removeLine();
|
|
|
+const clickResetLine2 = () => {
|
|
|
+ domList2.value.clear();
|
|
|
+ domListRight2.value.clear();
|
|
|
+ domListMiddle2.value.clear();
|
|
|
+ domListLeftChild2.value.clear();
|
|
|
+ domListRightChild2.value.clear();
|
|
|
+ leaderLines2.value = [];
|
|
|
+ setLine2();
|
|
|
+ removeLine2();
|
|
|
};
|
|
|
// 将设备列表分成两份
|
|
|
const bothSide = (data) => {
|
|
@@ -297,110 +293,156 @@ const bothSide = (data) => {
|
|
|
rightList.value = formatArr.splice(0);
|
|
|
};
|
|
|
|
|
|
-const setLeaderline = () => {
|
|
|
+const setLeaderline2 = () => {
|
|
|
// lineArr.value = [];
|
|
|
//线条样式
|
|
|
- const lineStyle0 = {
|
|
|
- color: "#51637F",
|
|
|
- size: 2,
|
|
|
- path: "straight",
|
|
|
- startPlug: "arrow1",
|
|
|
- endPlug: "behind",
|
|
|
- startSocket: "right",
|
|
|
- endSocket: "left",
|
|
|
- };
|
|
|
- const lineStyle1 = {
|
|
|
- color: "#51637F",
|
|
|
- size: 2,
|
|
|
- path: "straight",
|
|
|
- endPlug: "arrow1",
|
|
|
- startSocket: "right",
|
|
|
- endSocket: "left",
|
|
|
- };
|
|
|
- const lineStyle2 = {
|
|
|
- color: "#134BEA",
|
|
|
- size: 2,
|
|
|
- path: "straight",
|
|
|
- startPlug: "arrow1",
|
|
|
- endPlug: "arrow1",
|
|
|
- startSocket: "right",
|
|
|
- endSocket: "left",
|
|
|
- };
|
|
|
- const lineStyleRight0 = {
|
|
|
- color: "#51637F",
|
|
|
- size: 2,
|
|
|
- path: "straight",
|
|
|
- startPlug: "arrow1",
|
|
|
- endPlug: "behind",
|
|
|
- startSocket: "left",
|
|
|
- endSocket: "right",
|
|
|
- };
|
|
|
- const lineStyleRight1 = {
|
|
|
- color: "#51637F",
|
|
|
- size: 2,
|
|
|
- path: "straight",
|
|
|
- endPlug: "arrow1",
|
|
|
- startSocket: "left",
|
|
|
- endSocket: "right",
|
|
|
- };
|
|
|
- const lineStyleRight2 = {
|
|
|
- color: "#134BEA",
|
|
|
- size: 2,
|
|
|
- path: "straight",
|
|
|
- startPlug: "arrow1",
|
|
|
- endPlug: "arrow1",
|
|
|
- startSocket: "left",
|
|
|
- endSocket: "right",
|
|
|
- };
|
|
|
const startDom = document.getElementById("end");
|
|
|
- //循环画线
|
|
|
- for (const [key, value] of domList.value) {
|
|
|
+ //左侧子组件
|
|
|
+ for (const [key, value] of domListLeftChild2.value) {
|
|
|
const endDom = value;
|
|
|
let line;
|
|
|
- if (key.ref_type == 0) {
|
|
|
- // line = new LeaderLine(endDom, startDom, lineStyle0);
|
|
|
- } else if (key.ref_type == 2) {
|
|
|
- // line = new LeaderLine(endDom, startDom, lineStyle0);
|
|
|
+ const options = key.inputs_cnt.toString();
|
|
|
+ const rectEnd = endDom.getBoundingClientRect();
|
|
|
+ if (key.ctrl_type == "smv") {
|
|
|
+ line = new LeaderLine(
|
|
|
+ endDom,
|
|
|
+ LeaderLine.pointAnchor(startDom, { x: 0, y: rectEnd.top - 222 }),
|
|
|
+ {
|
|
|
+ color: "red",
|
|
|
+ size: 2,
|
|
|
+ path: "straight",
|
|
|
+ startSocket: "right",
|
|
|
+ endSocket: "left",
|
|
|
+ middleLabel: LeaderLine.captionLabel({
|
|
|
+ text: options,
|
|
|
+ }),
|
|
|
+ }
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ line = new LeaderLine(
|
|
|
+ endDom,
|
|
|
+ LeaderLine.pointAnchor(startDom, { x: 0, y: rectEnd.top - 222 }),
|
|
|
+ {
|
|
|
+ color: "#255CE7",
|
|
|
+ size: 2,
|
|
|
+ path: "straight",
|
|
|
+ startSocket: "right",
|
|
|
+ endSocket: "left",
|
|
|
+ y: 50,
|
|
|
+ middleLabel: LeaderLine.captionLabel({
|
|
|
+ text: options,
|
|
|
+ }),
|
|
|
+ }
|
|
|
+ );
|
|
|
}
|
|
|
- // 保存进数组,方便进行遍历删除
|
|
|
- leaderLines.value.push(line);
|
|
|
+ leaderLines2.value.push(line);
|
|
|
}
|
|
|
- //循环画线右侧
|
|
|
- for (const [key, value] of domListRight.value) {
|
|
|
+ //右侧子组件
|
|
|
+ for (const [key, value] of domListRightChild2.value) {
|
|
|
const endDom = value;
|
|
|
- let line2;
|
|
|
- if (key.ref_type == 0) {
|
|
|
- // line2 = new LeaderLine(endDom, startDom, lineStyleRight0);
|
|
|
- } else if (key.ref_type == 2) {
|
|
|
- // line2 = new LeaderLine(endDom, startDom, lineStyleRight0);
|
|
|
- }
|
|
|
- // 保存进数组,方便进行遍历删除
|
|
|
- leaderLines.value.push(line2);
|
|
|
- }
|
|
|
- hiddenLine();
|
|
|
-};
|
|
|
-const middleHeight = ref(null);
|
|
|
-//设置中间盒子的所在位置
|
|
|
-const middleLinePosition = () => {
|
|
|
- setTimeout(() => {
|
|
|
- const heights = myElement.value.scrollHeight;
|
|
|
- if (leftList.value.length > 2 || rightList.value.length > 2) {
|
|
|
- middleElement.value.style.marginTop = `${(heights - 60) / 2}px`; // 设置元素的垂直位置
|
|
|
- middleHeight.value.style.height = heights
|
|
|
+ let line;
|
|
|
+ const rectEnd = endDom.getBoundingClientRect();
|
|
|
+ const options = key.inputs_cnt.toString();
|
|
|
+ if (key.ctrl_type == "smv") {
|
|
|
+ line = new LeaderLine(
|
|
|
+ LeaderLine.pointAnchor(startDom, { x: "100%", y: rectEnd.top - 222 }),
|
|
|
+ endDom,
|
|
|
+ {
|
|
|
+ color: "red",
|
|
|
+ size: 2,
|
|
|
+ path: "straight",
|
|
|
+ startSocket: "right",
|
|
|
+ endSocket: "left",
|
|
|
+ startPlug: "arrow1",
|
|
|
+ endPlug: "behind",
|
|
|
+ middleLabel: LeaderLine.captionLabel(options),
|
|
|
+ }
|
|
|
+ );
|
|
|
} else {
|
|
|
- middleElement.value.style.marginTop = "150px"; // 设置元素的垂直位置
|
|
|
+ line = new LeaderLine(
|
|
|
+ LeaderLine.pointAnchor(startDom, { x: "100%", y: rectEnd.top - 222 }),
|
|
|
+ endDom,
|
|
|
+ {
|
|
|
+ color: "#255CE7",
|
|
|
+ size: 2,
|
|
|
+ path: "straight",
|
|
|
+ startSocket: "right",
|
|
|
+ endSocket: "left",
|
|
|
+ startPlug: "arrow1",
|
|
|
+ endPlug: "behind",
|
|
|
+ middleLabel: LeaderLine.captionLabel(options),
|
|
|
+ }
|
|
|
+ );
|
|
|
}
|
|
|
- }, 0);
|
|
|
+ leaderLines2.value.push(line);
|
|
|
+ }
|
|
|
+ if (iedChild.value) {
|
|
|
+ iedChild.value.forEach((item) => {
|
|
|
+ //循环画线左侧
|
|
|
+ for (const [key, value] of domList2.value) {
|
|
|
+ let line;
|
|
|
+ for (let [key2, value2] of domListMiddle2.value) {
|
|
|
+ //中间的数据dom
|
|
|
+ if (key.ref_ied_name == item.source_ied_name) {
|
|
|
+ const endDom = value;
|
|
|
+ if (item.ctrl_id == key2.node_id) {
|
|
|
+ const startDom = value2;
|
|
|
+ const options2 = item.inputs_cnt.toString();
|
|
|
+ line = new LeaderLine(endDom, startDom, {
|
|
|
+ color: "#51637F",
|
|
|
+ size: 2,
|
|
|
+ path: "straight",
|
|
|
+ endPlug: "behind",
|
|
|
+ startPlug: "arrow1",
|
|
|
+ startSocket: "right",
|
|
|
+ endSocket: "left",
|
|
|
+ middleLabel: LeaderLine.captionLabel(options2),
|
|
|
+ });
|
|
|
+ leaderLines2.value.push(line);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //循环画线右侧
|
|
|
+ for (let [key, value] of domListRight2.value) {
|
|
|
+ let line2;
|
|
|
+ for (let [key2, value2] of domListMiddle2.value) {
|
|
|
+ //中间的数据dom
|
|
|
+ if (key.ref_ied_name == item.source_ied_name) {
|
|
|
+ const endDom = value;
|
|
|
+ if (item.ctrl_id == key2.node_id) {
|
|
|
+ const startDom = value2;
|
|
|
+ const options3 = item.inputs_cnt.toString();
|
|
|
+ line2 = new LeaderLine(startDom, endDom, {
|
|
|
+ color: "#51637F",
|
|
|
+ size: 2,
|
|
|
+ path: "straight",
|
|
|
+ startPlug: "behind",
|
|
|
+ endPlug: "arrow1",
|
|
|
+ endSocket: "left",
|
|
|
+ startSocket: "right",
|
|
|
+ middleLabel: LeaderLine.captionLabel(options3),
|
|
|
+ });
|
|
|
+ leaderLines2.value.push(line2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ hiddenLine2();
|
|
|
};
|
|
|
//滚动时重定位线条
|
|
|
-const newPositionLine = () => {
|
|
|
- document.getElementById("treedom").addEventListener(
|
|
|
+const newPositionLine2 = () => {
|
|
|
+ document.getElementById("treedom2").addEventListener(
|
|
|
"scroll",
|
|
|
AnimEvent.add(() => {
|
|
|
- leaderLines.value.forEach((line) => {
|
|
|
- hiddenLine();
|
|
|
- // line.position();
|
|
|
- // line.positionByWindowResize = false;
|
|
|
+ leaderLines2.value.forEach((line) => {
|
|
|
+ if (line) {
|
|
|
+ hiddenLine2();
|
|
|
+ line.position();
|
|
|
+ line.positionByWindowResize = false;
|
|
|
+ }
|
|
|
});
|
|
|
//中间展示图片的
|
|
|
}),
|
|
@@ -408,7 +450,7 @@ const newPositionLine = () => {
|
|
|
);
|
|
|
};
|
|
|
//弹窗打开后使得线条在指定区域中
|
|
|
-const hiddenLine = () => {
|
|
|
+const hiddenLine2 = () => {
|
|
|
const elmWrapper = document.getElementById("wrapper");
|
|
|
// 移动 line
|
|
|
document.body.querySelectorAll("body .leader-line").forEach((node) => {
|
|
@@ -421,15 +463,16 @@ const hiddenLine = () => {
|
|
|
(rectWrapper.left + window.scrollY) * -1
|
|
|
}px, ${(rectWrapper.top + window.scrollX) * -1}px)`;
|
|
|
};
|
|
|
-const setLine = () => {
|
|
|
- if (listData.value) {
|
|
|
- bothSide(listData.value.list);
|
|
|
+const setLine2 = () => {
|
|
|
+ if (listData2.value) {
|
|
|
+ bothSide(listData2.value.list);
|
|
|
}
|
|
|
setTimeout(() => {
|
|
|
- setLeaderline();
|
|
|
- }, 30);
|
|
|
+ setLeaderline2();
|
|
|
+ }, 500);
|
|
|
};
|
|
|
-const removeLine = () => {
|
|
|
+
|
|
|
+const removeLine2 = () => {
|
|
|
const elmWrapper = document.getElementById("wrapper");
|
|
|
document.body.querySelectorAll("body .leader-line").forEach((node) => {
|
|
|
elmWrapper.removeChild(node);
|
|
@@ -438,33 +481,68 @@ const removeLine = () => {
|
|
|
onMounted(() => {
|
|
|
if (props.checkData != null) {
|
|
|
getIedChild();
|
|
|
- getNetworkInfo();
|
|
|
+
|
|
|
}
|
|
|
//不加条件切换下方tab时会出现bug
|
|
|
if (props.isPhoto == "photo") {
|
|
|
+ getNetworkInfo();
|
|
|
nextTick(() => {
|
|
|
- setLine();
|
|
|
- middleLinePosition();
|
|
|
+ setLine2();
|
|
|
nextTick(() => {
|
|
|
- newPositionLine();
|
|
|
+ newPositionLine2();
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
watch(
|
|
|
() => props.isPhoto,
|
|
|
(newValue) => {
|
|
|
- if (props.isPhoto == "photo") {
|
|
|
+ tabValue.value = newValue;
|
|
|
+ if (tabValue.value == "photo") {
|
|
|
nextTick(() => {
|
|
|
- setLine();
|
|
|
- middleLinePosition();
|
|
|
- nextTick(() => {
|
|
|
- newPositionLine();
|
|
|
- });
|
|
|
+ setLine2();
|
|
|
+ newPositionLine2();
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
);
|
|
|
+watch(
|
|
|
+ () => props.checkData,
|
|
|
+ (newValue) => {
|
|
|
+ listData2.value = [];
|
|
|
+ svInfo.value = [];
|
|
|
+ listData2.value = newValue;
|
|
|
+ if (newValue != null) {
|
|
|
+ getIedChild();
|
|
|
+
|
|
|
+ }
|
|
|
+ if (tabValue.value == "photo") {
|
|
|
+ clickResetLine2();
|
|
|
+ getNetworkInfo();
|
|
|
+ }
|
|
|
+ emit("result", newValue);
|
|
|
+ if (newValue && leaderLines2.value.length > 0) {
|
|
|
+ leaderLines2.value = [];
|
|
|
+ }
|
|
|
+ }
|
|
|
+);
|
|
|
+watch(
|
|
|
+ () => props.isOpen,
|
|
|
+ (newValue) => {
|
|
|
+ if (newValue) {
|
|
|
+ domList2.value.clear();
|
|
|
+ domListRight2.value.clear();
|
|
|
+ domListMiddle2.value.clear();
|
|
|
+ domListLeftChild2.value.clear();
|
|
|
+ domListRightChild2.value.clear();
|
|
|
+ leaderLines2.value = [];
|
|
|
+ }
|
|
|
+ nextTick(() => {
|
|
|
+ removeLine2();
|
|
|
+ });
|
|
|
+ }
|
|
|
+);
|
|
|
</script>
|
|
|
<style lang="scss" scoped>
|
|
|
@mixin img-size {
|
|
@@ -479,8 +557,6 @@ watch(
|
|
|
.main-cont {
|
|
|
display: flex;
|
|
|
justify-content: space-evenly;
|
|
|
- overflow-y: auto;
|
|
|
- height: 65vh;
|
|
|
}
|
|
|
|
|
|
.leader-line {
|
|
@@ -493,6 +569,7 @@ watch(
|
|
|
.main-middle {
|
|
|
box-sizing: border-box;
|
|
|
border: 2px dashed #98a8ff;
|
|
|
+ background: #edf3ff;
|
|
|
img {
|
|
|
margin-bottom: 10px;
|
|
|
}
|
|
@@ -507,8 +584,6 @@ watch(
|
|
|
color: #ffcb11;
|
|
|
border-bottom: 1px solid #a3ade0;
|
|
|
}
|
|
|
- .middel-child {
|
|
|
- }
|
|
|
}
|
|
|
.main-right {
|
|
|
display: flex;
|
|
@@ -523,6 +598,7 @@ watch(
|
|
|
margin-bottom: 24px;
|
|
|
border: 2px dashed #98a8ff;
|
|
|
cursor: pointer;
|
|
|
+ background: #f7f8fb;
|
|
|
.cont-item {
|
|
|
@include left-and-right;
|
|
|
color: #1a2447;
|
|
@@ -543,7 +619,8 @@ watch(
|
|
|
display: block;
|
|
|
}
|
|
|
}
|
|
|
-.ied-desc-child {
|
|
|
+.ied-desc-child,
|
|
|
+.midlestyle {
|
|
|
@include left-and-right;
|
|
|
align-items: center;
|
|
|
border: 1px solid #7484ab;
|