|
@@ -1,8 +1,13 @@
|
|
|
<template>
|
|
|
- <div id="treedom4">
|
|
|
+ <div id="treedom4" v-loading="loading">
|
|
|
<div style="position: relative">
|
|
|
<div class="nav" id="topLine">
|
|
|
- <div class="nav-cont" v-for="(item, index) in navList" :key="index">
|
|
|
+ <div
|
|
|
+ class="nav-cont"
|
|
|
+ v-for="(item, index) in navList"
|
|
|
+ :key="index"
|
|
|
+ @click="clickNav(item)"
|
|
|
+ >
|
|
|
<img :src="cylinder" alt="" class="nav-img" />
|
|
|
<div>{{ item.attr_name }}</div>
|
|
|
<div class="describe-text">{{ `(${item.attr_desc})` }}</div>
|
|
@@ -11,56 +16,145 @@
|
|
|
</div>
|
|
|
<div class="wrapper">
|
|
|
<div class="grid">
|
|
|
- <div class="col fluid" style="margin-left: 20px" id="leftLine">
|
|
|
- <div>
|
|
|
- <div class="title">M1 (一)</div>
|
|
|
- <div>
|
|
|
- <span class="decrip">SDFDSF:</span
|
|
|
- ><span class="decrip-item">SDFSFF</span>
|
|
|
+ <div
|
|
|
+ class="col fluid"
|
|
|
+ :class="{ transp: mainTitle && mainTitle.length < 2 }"
|
|
|
+ style="margin-left: 20px"
|
|
|
+ id="leftLine"
|
|
|
+ >
|
|
|
+ <div v-if="mainTitle && mainTitle.length > 1">
|
|
|
+ <div class="title">
|
|
|
+ {{ mainTitle[1].attr_name
|
|
|
+ }}<span v-if="mainTitle[0].attr_desc">{{
|
|
|
+ `(${mainTitle[1].attr_desc})`
|
|
|
+ }}</span>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="child-item">
|
|
|
- <div class="ldevice">LDevice</div>
|
|
|
- <div>
|
|
|
- <img :src="legislation" alt="" />
|
|
|
- <div class="img-title">SVLD_PROT</div>
|
|
|
- <div class="decrip-child">(录波LD)</div>
|
|
|
+ <div class="attr-desc" v-if="moLeft">
|
|
|
+ <div>
|
|
|
+ <span class="decrip">MAC-Address:</span>
|
|
|
+ <span class="decrip-item" v-if="!moLeft.address">无</span>
|
|
|
+ <span v-else>{{ moLeft.address }}</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="decrip">VLAN-PRIORITY:</span>
|
|
|
+ <span class="decrip-item" v-if="!moLeft.priority">无</span>
|
|
|
+ <span v-else>{{ moLeft.priority }}</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="decrip">APPID:</span>
|
|
|
+ <span class="decrip-item" v-if="!moLeft.APPID">无</span>
|
|
|
+ <span v-else>{{ moLeft.APPID }}</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="decrip">VLAN-ID:</span>
|
|
|
+ <span class="decrip-item" v-if="!moLeft.vlanId">无</span>
|
|
|
+ <span v-else>{{ moLeft.vlanId }}</span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div>
|
|
|
- <img :src="legislation" alt="" />
|
|
|
- <div class="img-title">SVLD_PROT</div>
|
|
|
+ <div v-if="mainList" class="circle-all">
|
|
|
+ <span
|
|
|
+ v-for="(item, index) in mainTitle[1].list"
|
|
|
+ :key="index"
|
|
|
+ class="circel"
|
|
|
+ :class="{ 'circel active-circel': index == activeCircel }"
|
|
|
+ @click="clickCircel(item, index, 'moLeft')"
|
|
|
+ ><span v-if="item.address_json != ''">{{
|
|
|
+ index + 1
|
|
|
+ }}</span></span
|
|
|
+ >
|
|
|
</div>
|
|
|
- <div>
|
|
|
+ </div>
|
|
|
+ <div class="child-item" v-if="mainTitle && mainTitle.length > 1">
|
|
|
+ <div class="ldevice">LDevice</div>
|
|
|
+ <div
|
|
|
+ v-for="(item, index) in mainTitle[1].childList[0]"
|
|
|
+ :key="index"
|
|
|
+ @click="clickMain(item)"
|
|
|
+ class="ldevice-cont"
|
|
|
+ >
|
|
|
<img :src="legislation" alt="" />
|
|
|
- <div class="img-title">SVLD_PROT</div>
|
|
|
+ <div class="img-title">{{ item.attr_inst }}</div>
|
|
|
+ <div class="decrip-child">{{ item.attr_desc }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="col main-middle" id="middleLine"></div>
|
|
|
- <div class="col fluid" style="margin-right: 20px" id="rightLine">
|
|
|
- <div>
|
|
|
- <div class="title">M1 (一)</div>
|
|
|
- <div>
|
|
|
- <span class="decrip">SDFDSF:</span
|
|
|
- ><span class="decrip-item">SDFSFF</span>
|
|
|
+ <div
|
|
|
+ class="col fluid"
|
|
|
+ style="margin-right: 20px"
|
|
|
+ :class="{ transp: mainTitle && mainTitle.length < 3 }"
|
|
|
+ id="rightLine"
|
|
|
+ >
|
|
|
+ <div v-if="mainTitle && mainTitle.length > 2">
|
|
|
+ <div class="title">
|
|
|
+ {{ mainTitle[2].attr_name
|
|
|
+ }}<span v-if="mainTitle[0].attr_desc">{{
|
|
|
+ `(${mainTitle[2].attr_desc})`
|
|
|
+ }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="attr-desc" v-if="moRight">
|
|
|
+ <div>
|
|
|
+ <span class="decrip">MAC-Address:</span>
|
|
|
+ <span class="decrip-item" v-if="!moRight.address">无</span>
|
|
|
+ <span v-else>{{ moRight.address }}</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="decrip">VLAN-PRIORITY:</span>
|
|
|
+ <span class="decrip-item" v-if="!moRight.priority">无</span>
|
|
|
+ <span v-else>{{ moRight.priority }}</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="decrip">APPID:</span>
|
|
|
+ <span class="decrip-item" v-if="!moRight.APPID">无</span>
|
|
|
+ <span v-else>{{ moRight.APPID }}</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="decrip">VLAN-ID:</span>
|
|
|
+ <span class="decrip-item" v-if="!moRight.vlanId">无</span>
|
|
|
+ <span v-else>{{ moRight.vlanId }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="mainList" class="circle-all">
|
|
|
+ <span
|
|
|
+ v-for="(item, index) in mainTitle[2].list"
|
|
|
+ :key="index"
|
|
|
+ class="circel"
|
|
|
+ :class="{ 'circel active-circel': index == activeCircel }"
|
|
|
+ @click="clickCircel(item, index, 'moRight')"
|
|
|
+ ><span v-if="item.address_json != ''">{{
|
|
|
+ index + 1
|
|
|
+ }}</span></span
|
|
|
+ >
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="child-item">
|
|
|
+ <div class="child-item" v-if="mainTitle && mainTitle.length > 2">
|
|
|
<div class="ldevice">LDevice</div>
|
|
|
- <div>
|
|
|
+ <div
|
|
|
+ v-for="(item, index) in mainTitle[2].childList[0]"
|
|
|
+ :key="index"
|
|
|
+ @click="clickMain(item)"
|
|
|
+ class="ldevice-cont"
|
|
|
+ >
|
|
|
<img :src="legislation" alt="" />
|
|
|
- <div class="img-title">SVLD_PROT</div>
|
|
|
- <div class="decrip-child">(录波LD)</div>
|
|
|
+ <div class="img-title">{{ item.attr_inst }}</div>
|
|
|
+ <div class="decrip-child">{{ item.attr_desc }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="main-bottom" id="bottomLine">
|
|
|
- <div v-if="titleName && titleName.length > 0">
|
|
|
+ <div
|
|
|
+ class="main-bottom"
|
|
|
+ id="bottomLine"
|
|
|
+ :class="{ transp: mainTitle && mainTitle.length < 1 }"
|
|
|
+ >
|
|
|
+ <div v-if="mainTitle && mainTitle.length > 0">
|
|
|
<div class="title">
|
|
|
- {{ `${titleName[0].name}(${titleName[0].desc})` }}
|
|
|
+ {{ mainTitle[0].attr_name
|
|
|
+ }}<span v-if="mainTitle[0].attr_desc">{{
|
|
|
+ `(${mainTitle[0].attr_desc})`
|
|
|
+ }}</span>
|
|
|
</div>
|
|
|
- <div class="attr-desc">
|
|
|
+ <div class="attr-desc" v-if="moBottom">
|
|
|
<div>
|
|
|
<span class="decrip">MAC-Address:</span>
|
|
|
<span class="decrip-item" v-if="!moBottom.address">无</span>
|
|
@@ -82,35 +176,88 @@
|
|
|
<span v-else>{{ moBottom.vlanId }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-if="mainList" style="margin-bottom: 10px">
|
|
|
+ <div v-if="mainList" class="circle-all">
|
|
|
<span
|
|
|
- v-for="(item, index) in mainList[titleName[0].name].list"
|
|
|
+ v-for="(item, index) in mainTitle[0].list"
|
|
|
:key="index"
|
|
|
class="circel"
|
|
|
- @click="clickCircel(item)"
|
|
|
- >{{ index + 1 }}</span
|
|
|
+ :class="{ 'circel active-circel': index == activeCircel }"
|
|
|
+ @click="clickCircel(item, index, 'moBottom')"
|
|
|
+ ><span v-if="item.address_json != ''">{{ index + 1 }}</span></span
|
|
|
>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="child-item" v-if="titleName && titleName.length > 0">
|
|
|
+ <div class="child-item" v-if="mainTitle && mainTitle.length > 0">
|
|
|
<div class="ldevice">LDevice</div>
|
|
|
- <div>
|
|
|
+ <div class="ldevice-cont" v-for="(item, index) in mainTitle[0].childList[0]" :key="index" @click="clickMain(item)">
|
|
|
<img :src="legislation" alt="" />
|
|
|
- <div class="img-title">SVLD_PROT</div>
|
|
|
- <div class="decrip-child">(录波LD)</div>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <img :src="legislation" alt="" />
|
|
|
- <div class="img-title">SVLD_PROT</div>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <img :src="legislation" alt="" />
|
|
|
- <div class="img-title">SVLD_PROT</div>
|
|
|
+ <div class="img-title">{{ item.attr_inst }}</div>
|
|
|
+ <div class="decrip-child">{{ item.attr_desc }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div id="wrappers"></div>
|
|
|
+ <!-- 点击头部的弹框 -->
|
|
|
+ <el-dialog
|
|
|
+ @close="cancelClickNav"
|
|
|
+ v-model="isOpennav"
|
|
|
+ append-to-body
|
|
|
+ draggable
|
|
|
+ style="height: 550px"
|
|
|
+ >
|
|
|
+ <template #header>
|
|
|
+ <div class="my-header">
|
|
|
+ <div class="dialog-nav-title">
|
|
|
+ {{ `(${clickNavTitle.attr_desc}) — FCDA列表` }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <el-table
|
|
|
+ :data="clickNavData"
|
|
|
+ style="width: 100%"
|
|
|
+ stripe
|
|
|
+ height="450"
|
|
|
+ :cell-style="{ color: '#000' }"
|
|
|
+ >
|
|
|
+ <el-table-column prop="attr_ld_inst" label="ldInst" />
|
|
|
+ <el-table-column prop="attr_prefix" label="prefix"/>
|
|
|
+ <el-table-column prop="attr_ln_class" label="lnClass"/>
|
|
|
+ <el-table-column prop="attr_ln_inst" label="lnInst" />
|
|
|
+ <el-table-column prop="attr_do_name" label="doName" />
|
|
|
+ <el-table-column prop="da_datatype" label="attr_da_name" width="180"/>
|
|
|
+ <el-table-column prop="attr_fc" label="fc" />
|
|
|
+ </el-table>
|
|
|
+ </el-dialog>
|
|
|
+ <!-- 点击方框的弹窗 -->
|
|
|
+ <el-dialog
|
|
|
+ @close="cancelClickMain"
|
|
|
+ v-model="isOpenMain"
|
|
|
+ append-to-body
|
|
|
+ draggable
|
|
|
+ style="height: 550px"
|
|
|
+ >
|
|
|
+ <template #header>
|
|
|
+ <div class="my-header">
|
|
|
+ <div class="dialog-nav-title">
|
|
|
+ {{ `${clickMainTitle.attr_inst}${clickMainTitle.attr_desc} — LN/LN0节点列表` }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <el-table
|
|
|
+ :data="clickMainData"
|
|
|
+ style="width: 100%"
|
|
|
+ stripe
|
|
|
+ height="450"
|
|
|
+ :cell-style="{ color: '#000' }"
|
|
|
+ >
|
|
|
+ <el-table-column type="index" label="序号" width="80" />
|
|
|
+ <el-table-column prop="attr_inst" label="inst" />
|
|
|
+ <el-table-column prop="attr_ln_class" label="lnClass"/>
|
|
|
+ <el-table-column prop="attr_ln_type" label="lnType"/>
|
|
|
+ <el-table-column prop="attr_desc" label="desc" />
|
|
|
+ </el-table>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -118,7 +265,7 @@
|
|
|
import { defineProps, onMounted, ref, inject, nextTick, watch } from "vue";
|
|
|
import legislation from "@/assets/image/instruct/legislation.png";
|
|
|
import cylinder from "@/assets/image/instruct/cylinder.png";
|
|
|
-import { getNodeList, getNetworkInfo } from "@/api/iedNetwork";
|
|
|
+import { getNodeList, getNetworkInfo, getLdeviceList,nodeList } from "@/api/iedNetwork";
|
|
|
import LeaderLine from "../../../../public/leader-line.min.js";
|
|
|
import AnimEvent from "../../../../public/anim-event.min.js";
|
|
|
import { CloseBold } from "@element-plus/icons-vue";
|
|
@@ -138,6 +285,14 @@ const mainTitle = ref(null); //每个方框的标题
|
|
|
const moBottom = ref(null); //底部方框所展示的MAC-Address等desc
|
|
|
const moLeft = ref(null); //左侧方框所展示的MAC-Address等desc
|
|
|
const moRight = ref(null); //右侧方框所展示的MAC-Address等desc
|
|
|
+const activeCircel = ref(0); //点击数字圆圈的样式
|
|
|
+const isOpennav = ref(false);//头部点击弹窗显示
|
|
|
+const clickNavTitle= ref(null);//头部点击弹窗数据
|
|
|
+const clickNavData = ref(null);//头部点击弹窗数据
|
|
|
+const isOpenMain = ref(false);//点击方框
|
|
|
+const clickMainTitle = ref(null);
|
|
|
+const clickMainData = ref(null);
|
|
|
+const loading = ref(true);
|
|
|
const getNav = async () => {
|
|
|
const navRes = await getNodeList({
|
|
|
scd_id: scdIdValue,
|
|
@@ -154,7 +309,22 @@ const getMainTitle = async () => {
|
|
|
ied_name: props.checkData.ied_name,
|
|
|
name: "AccessPoint",
|
|
|
});
|
|
|
- mainTitle.value = mainRes.data;
|
|
|
+ //得到每个方框中LDevice中的内容
|
|
|
+ Promise.all(
|
|
|
+ mainRes.data.map(async (item) => {
|
|
|
+ item.childList = [];
|
|
|
+ const res = await getLdeviceList({
|
|
|
+ accessPointId: item.node_id,
|
|
|
+ scd_id: scdIdValue,
|
|
|
+ });
|
|
|
+ item.childList.push(res.data);
|
|
|
+ })
|
|
|
+ ).then(() => {
|
|
|
+ //等待执行完上面的api
|
|
|
+ loading.value = false;
|
|
|
+ mainTitle.value = mainRes.data;
|
|
|
+ getMainList();
|
|
|
+ });
|
|
|
};
|
|
|
const mainList = ref({});
|
|
|
const titleName = ref([]);
|
|
@@ -167,13 +337,15 @@ const getMainList = async () => {
|
|
|
scd_id: scdIdValue,
|
|
|
ied_name: props.checkData.ied_name,
|
|
|
});
|
|
|
+
|
|
|
//处理分类数据
|
|
|
for (let i = 0; i < infoRes.data.length; i++) {
|
|
|
if (infoRes.data[i].address_json != "") {
|
|
|
- infoRes.data[i].address_json.replace("MAC-Address", "address");
|
|
|
- infoRes.data[i].address_json.replace("VLAN-PRIORITY", "priority");
|
|
|
- infoRes.data[i].address_json.replace("VLAN-ID", "vlanId");
|
|
|
- infoRes.data[i].address_json = JSON.parse(infoRes.data[i].address_json);
|
|
|
+ let newData = infoRes.data[i].address_json
|
|
|
+ .replace("MAC-Address", "address")
|
|
|
+ .replace("VLAN-PRIORITY", "priority")
|
|
|
+ .replace("VLAN-ID", "vlanId");
|
|
|
+ infoRes.data[i].address_json = JSON.parse(newData);
|
|
|
}
|
|
|
let item = infoRes.data[i];
|
|
|
const key = item.ap_name;
|
|
@@ -187,21 +359,37 @@ const getMainList = async () => {
|
|
|
mainList.value[key].list.push(item);
|
|
|
}
|
|
|
}
|
|
|
- const newarr2 = [...new Set(newarr)];
|
|
|
- //处理表头描述
|
|
|
- if (newarr2 && mainTitle.value) {
|
|
|
- newarr2.map((item) => {
|
|
|
- const descObj = mainTitle.value.find((key) => key.attr_name == item);
|
|
|
- if (descObj) {
|
|
|
- titleName.value.push({ name: item, desc: descObj.attr_desc });
|
|
|
- }
|
|
|
+ //处理表头下方段落的描述
|
|
|
+ if (mainList.value && mainTitle.value) {
|
|
|
+ mainTitle.value.forEach((key) => {
|
|
|
+ key.list = [];
|
|
|
+ Object.keys(mainList.value).forEach((item) => {
|
|
|
+ if (item == key.attr_name) {
|
|
|
+ key.list = mainList.value[item].list;
|
|
|
+ }
|
|
|
+ });
|
|
|
});
|
|
|
- }
|
|
|
- if (titleName.value.length > 0 && mainList.value) {
|
|
|
- moBottom.value =
|
|
|
- mainList.value[titleName.value[0].name].list[0].address_json;
|
|
|
- console.log("address_json", moBottom.value);
|
|
|
- console.log("first", titleName.value, mainList.value);
|
|
|
+ //分布默认的左侧右侧和下侧的数据
|
|
|
+ for (let i = 0; i < mainTitle.value.length; i++) {
|
|
|
+ if (
|
|
|
+ mainTitle.value[i].list.length > 0 &&
|
|
|
+ mainTitle.value[i].list[0].address_json != ""
|
|
|
+ ) {
|
|
|
+ const targetElement = mainTitle.value[i];
|
|
|
+ switch (i) {
|
|
|
+ case 0:
|
|
|
+ moBottom.value = targetElement.list[0].address_json;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ moLeft.value = targetElement.list[0].address_json;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ moRight.value = targetElement.list[0].address_json;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ console.log("mainTitle.value", mainTitle.value);
|
|
|
}
|
|
|
};
|
|
|
//弹窗打开后使得线条在指定区域中
|
|
@@ -276,27 +464,43 @@ const getLine = () => {
|
|
|
}),
|
|
|
};
|
|
|
leaderLines.value.push(new LeaderLine(middlDom, topDom, lineStyleTop)); //上面和中间连线
|
|
|
- leaderLines.value.push(new LeaderLine(middlDom, rightDom, lineStyleright));
|
|
|
- leaderLines.value.push(new LeaderLine(middlDom, bottomDom, lineStylebottom));
|
|
|
- leaderLines.value.push(new LeaderLine(leftDom, middlDom, lineStyle));
|
|
|
+ if (mainTitle.value && mainTitle.value.length > 0) {
|
|
|
+ leaderLines.value.push(
|
|
|
+ new LeaderLine(middlDom, bottomDom, lineStylebottom)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ if (mainTitle.value && mainTitle.value.length > 2) {
|
|
|
+ leaderLines.value.push(new LeaderLine(middlDom, rightDom, lineStyleright));
|
|
|
+ }
|
|
|
+ if (mainTitle.value && mainTitle.value.length > 1) {
|
|
|
+ leaderLines.value.push(new LeaderLine(leftDom, middlDom, lineStyle));
|
|
|
+ }
|
|
|
newPositionLine2();
|
|
|
hiddenLine2();
|
|
|
};
|
|
|
//点击数字
|
|
|
-const clickCircel = (item) => {
|
|
|
-
|
|
|
- const data = JSON.stringify(item.address_json);
|
|
|
- // data.replace("MAC-Address", "address");
|
|
|
- // data.replace("VLAN-PRIORITY", "priority");
|
|
|
- // data.replace("VLAN-ID", "vlanId");
|
|
|
- moBottom.value = JSON.parse(data);
|
|
|
+const clickCircel = (item, index, type) => {
|
|
|
+ activeCircel.value = index;
|
|
|
+ let data = JSON.stringify(item.address_json);
|
|
|
+ let newData = data
|
|
|
+ .replace("MAC-Address", "address")
|
|
|
+ .replace("VLAN-PRIORITY", "priority")
|
|
|
+ .replace("VLAN-ID", "vlanId");
|
|
|
+ if (type == "moBottom") {
|
|
|
+ moBottom.value = JSON.parse(newData);
|
|
|
+ } else if (type == "moRight") {
|
|
|
+ moRight.value = JSON.parse(newData);
|
|
|
+ } else {
|
|
|
+ moLeft.value = JSON.parse(newData);
|
|
|
+ }
|
|
|
};
|
|
|
onMounted(() => {
|
|
|
getNav();
|
|
|
getMainTitle();
|
|
|
- getMainList();
|
|
|
nextTick(() => {
|
|
|
- getLine();
|
|
|
+ setTimeout(() => {
|
|
|
+ getLine();
|
|
|
+ }, 500);
|
|
|
});
|
|
|
});
|
|
|
watch(
|
|
@@ -306,8 +510,11 @@ watch(
|
|
|
if (!newValue) {
|
|
|
removeLine2();
|
|
|
leaderLines.value = [];
|
|
|
+ loading.value = false;
|
|
|
} else {
|
|
|
- getLine();
|
|
|
+ setTimeout(() => {
|
|
|
+ getLine();
|
|
|
+ }, 500);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -315,12 +522,23 @@ watch(
|
|
|
watch(
|
|
|
() => props.checkData,
|
|
|
(newValue) => {
|
|
|
- getNav();
|
|
|
- getMainTitle();
|
|
|
- getMainList();
|
|
|
- nextTick(() => {
|
|
|
- getLine();
|
|
|
- });
|
|
|
+ removeLine2();
|
|
|
+ if (newValue && leaderLines.value.length > 0) {
|
|
|
+ leaderLines.value = [];
|
|
|
+ }
|
|
|
+ if (newValue) {
|
|
|
+ activeCircel.value = 0;
|
|
|
+ isOpenMain.value = false;
|
|
|
+ isOpennav.value = false;
|
|
|
+ getNav();
|
|
|
+ loading.value = true;
|
|
|
+ getMainTitle();
|
|
|
+ nextTick(() => {
|
|
|
+ setTimeout(() => {
|
|
|
+ getLine();
|
|
|
+ }, 500);
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
);
|
|
|
const removeLine2 = () => {
|
|
@@ -329,6 +547,44 @@ const removeLine2 = () => {
|
|
|
elmWrapper.removeChild(node);
|
|
|
});
|
|
|
};
|
|
|
+//点击头部展示的弹框
|
|
|
+const clickNav =async (item) => {
|
|
|
+ clickNavTitle.value = item;
|
|
|
+ isOpennav.value = true;
|
|
|
+ const navRes = await nodeList({
|
|
|
+ scd_id: scdIdValue,
|
|
|
+ parent_node_id:item.node_id,
|
|
|
+ pagesize: 10000,
|
|
|
+ name: "FCDA",
|
|
|
+ });
|
|
|
+ clickNavData.value = navRes.data;
|
|
|
+};
|
|
|
+const cancelClickNav = () => {
|
|
|
+ clickNavData.value = null;
|
|
|
+ isOpennav.value = false;
|
|
|
+}
|
|
|
+const clickMain =async (item) => {
|
|
|
+ console.log('item', item)
|
|
|
+ clickMainTitle.value = item;
|
|
|
+ isOpenMain.value = true;
|
|
|
+ const navRes = await nodeList({
|
|
|
+ scd_id: scdIdValue,
|
|
|
+ parent_node_id:item.node_id,
|
|
|
+ pagesize: 10000,
|
|
|
+ name: "LN0",
|
|
|
+ });
|
|
|
+ const navRes2 = await nodeList({
|
|
|
+ scd_id: scdIdValue,
|
|
|
+ parent_node_id:item.node_id,
|
|
|
+ pagesize: 10000,
|
|
|
+ name: "LN",
|
|
|
+ });
|
|
|
+ clickMainData.value = [...navRes.data,...navRes2.data];
|
|
|
+};
|
|
|
+const cancelClickMain = () => {
|
|
|
+ clickMainData.value = null;
|
|
|
+ isOpenMain.value = false;
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
@@ -357,6 +613,7 @@ const removeLine2 = () => {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
|
+ cursor: pointer;
|
|
|
margin: 8px 0;
|
|
|
flex-basis: 14%;
|
|
|
.describe-text {
|
|
@@ -367,6 +624,7 @@ const removeLine2 = () => {
|
|
|
.main-bottom,
|
|
|
.fluid {
|
|
|
border: 2px dashed #a3ade0;
|
|
|
+ background-color: #f7f8f8;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
max-width: 36%;
|
|
@@ -416,19 +674,38 @@ const removeLine2 = () => {
|
|
|
color: white;
|
|
|
border-radius: 10px;
|
|
|
}
|
|
|
+ .ldevice-cont{
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
}
|
|
|
.img-title {
|
|
|
color: #134bea;
|
|
|
}
|
|
|
}
|
|
|
+.circle-all {
|
|
|
+ margin-bottom: 10px;
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+}
|
|
|
.circel {
|
|
|
color: #7c58a8;
|
|
|
- padding: 0rem 0.4rem;
|
|
|
+ width: 20px;
|
|
|
+ height: 20px;
|
|
|
+ margin-bottom: 5px;
|
|
|
+ margin-right: 5px;
|
|
|
border: 1px solid #606c93;
|
|
|
- border-radius: 1rem;
|
|
|
+ border-radius: 10px;
|
|
|
+ text-align: center;
|
|
|
+ line-height: 20px;
|
|
|
margin-left: 0.5rem;
|
|
|
cursor: pointer;
|
|
|
}
|
|
|
+.active-circel {
|
|
|
+ color: #134bea;
|
|
|
+ border: 1px solid #134bea;
|
|
|
+}
|
|
|
.Image {
|
|
|
width: 193px;
|
|
|
height: 150px;
|
|
@@ -459,7 +736,9 @@ const removeLine2 = () => {
|
|
|
/* 设置fluid样式 */
|
|
|
.fluid {
|
|
|
flex-grow: 1;
|
|
|
- background-color: #f7f8f8;
|
|
|
+}
|
|
|
+.transp {
|
|
|
+ border: none;
|
|
|
}
|
|
|
.main-bottom {
|
|
|
position: absolute;
|
|
@@ -467,4 +746,8 @@ const removeLine2 = () => {
|
|
|
transform: translateX(-50%);
|
|
|
margin-top: 40px;
|
|
|
}
|
|
|
+.dialog-nav-title{
|
|
|
+ color:#09162C;
|
|
|
+ font-size: 16px;
|
|
|
+}
|
|
|
</style>
|