Selaa lähdekoodia

更新冬梅的文件

liling 1 vuosi sitten
vanhempi
commit
318dd5e418

+ 8 - 8
src/pages/components/drawModal/AbilityModal.vue

@@ -3,7 +3,7 @@
         <el-dialog v-model="dialogVisible" title="装置功能配置" width="70%" @close="handleClose"
             :close-on-click-modal="false">
             <div style="border-bottom: 1px solid #dbdbdb;">
-            <h1>装置编码设置:</h1>
+                <h1>装置编码设置:</h1>
                 <span>默认装置编码:</span>
                 <el-input style="width:300px;margin: 10px 10px;" v-model="oldType" disabled></el-input>
                 <span>自定义装置编码:</span>
@@ -133,10 +133,10 @@ export default {
                 tableData.value = res.data
             })
             flow.getIedType({
-                id:modelIds.value-0,
-                ied_type:iedTypes.value
-            }).then(res=>{
-                console.log(res,'sadsdada');
+                id: modelIds.value - 0,
+                ied_type: iedTypes.value
+            }).then(res => {
+                newType.value = res.data
             })
         }
 
@@ -246,7 +246,7 @@ export default {
                 model_id: modelIds.value - 0
             }).then(res => {
                 loading.close()
-                if (res.code !=0) {
+                if (res.code != 0) {
                     ElMessage({
                         message: res.msg,
                         type: 'error'
@@ -257,13 +257,13 @@ export default {
                     model_id: modelIds.value - 0,
                     ied_type: iedTypes.value
                 }).then(res => {
-                    if (res.code == 0) {                            
+                    if (res.code == 0) {
                         tableData.value = res.data
                         ElMessage({
                             message: "端子已全部成功删除",
                             type: "success"
                         });
-                    }else{
+                    } else {
                         ElMessage({
                             message: res.msg,
                             type: "error"

+ 23 - 22
src/pages/netStructPicture/components/Gsix.vue

@@ -157,6 +157,7 @@ const getData = async () => {
     comptype: "u",
     itemcode: cClickCode.value,
   });
+  if(!res.data) return;
   if (res.data && cClickCode.value != "scd.ied") {
     res.data.forEach((item) => {
       let text;
@@ -332,6 +333,7 @@ const clickUpTypeImgRight = (arr, event, name, list) => {
 };
 const CommunicationS1 = ref([]); //站控层的修改时有新增和修改的数据
 const clickUpTypeImgUpDel = (arr, event) => {
+  if(!arr||!arr[1]||!arr[1].DAI) return;
   arr[1].DAI.forEach((item1) => {
     let found = false;
     arr[0].DAI.forEach((item2) => {
@@ -365,7 +367,7 @@ const clickUpTypeImgUpAdd = (arr, event) => {
   // //nnerText是展示在左侧的数据,nnerTextRight是展示在右侧的数据,如果nnerTextRight为空,那么同时展示在左侧最下方表示新增
   clickLineResult();
   setTopDiffName(event);
-  if (arr.length && arr.length > 0) {
+  if (arr.length && arr.length > 0&& arr[0].P) {
     arr[0].P.forEach((item1) => {
       let foundMatch = false;
 
@@ -630,6 +632,7 @@ const setLeaderlineMain = () => {
   const mainLeftStartDom = document.getElementById("leftMainDom");
   const mainRightStartDom = document.getElementById("rightMainDom");
   if (domListLeftMain.value.size > 0) {
+    LeaderLine.positionByWindowResize = false;
     for (const [key, value] of domListLeftMain.value) {
       let line;
       line = new LeaderLine(mainLeftStartDom, value, lineStyleLeftMain);
@@ -666,6 +669,7 @@ const setLeaderlines = (types) => {
         if (key == key2) {
           const startDom = domListAdd.value;
           let line;
+          LeaderLine.positionByWindowResize = false;
           line = new LeaderLine(startDom, value, lineStyleAdd);
           leaderLineShow.value.push(line);
           let lineValue;
@@ -683,6 +687,7 @@ const setLeaderlines = (types) => {
         if (key == key2) {
           const startDom = domListDel.value;
           let line;
+          LeaderLine.positionByWindowResize = false;
           line = new LeaderLine(value, startDom, lineStyleDel);
           leaderLineShow.value.push(line);
           let lineValue;
@@ -728,6 +733,7 @@ const setLeaderlines = (types) => {
         //又有新增又有修改,站控层===
         if (typeof key == "string" && key.includes("add") && key == key2) {
           let line4; //从左往右的线条
+          LeaderLine.positionByWindowResize = false;
           line4 = new LeaderLine(startDom, value, lineStyleAdd);
           leaderLineShow.value.push(line4);
           let lineValue5;
@@ -737,6 +743,7 @@ const setLeaderlines = (types) => {
         }
         //又有新增又有修改,站控层===
         for (const [key3, value3] of domListUpRightName.value) {
+          LeaderLine.positionByWindowResize = false;
           //修改和删除
           if (typeof key2 == "string" && key2.includes("del") && key2 == key3) {
             let line4; //从右往左的线条
@@ -780,13 +787,11 @@ const setLeaderlines = (types) => {
       endSocket: "left",
     };
     //右侧点击修改数据
-    console.log('domListUpRightName.value', domListUpRightName.value)
     for (const [key, value] of domListUpRightName.value) {
       for (const [key2, value2] of domListUpMiddleName.value) {
         for (const [key3, value3] of domListUpLeftName.value) {
-          console.log('key,key,key3', key,key,key3)
           if (key == key2 && key2 == key3) {
- 
+            LeaderLine.positionByWindowResize = false;
             let line; //从左往右的线条
             line = new LeaderLine(value, startDom, lineStylUp);
             leaderLineShow.value.push(line);
@@ -833,36 +838,32 @@ const newPositionLine2 = (diffline) => {
         if (line) {
           hiddenLineDialog();
           line.position();
-          line.positionByWindowResize = false;
         }
       });
       leaderLineShow.value.forEach((line) => {
         if (line) {
           hiddenLine2();
           line.position();
-          line.positionByWindowResize = false;
         }
       });
       //中间展示图片的
     }),
     false
   );
-  document.getElementById("treedomCid").addEventListener(
-    "resize",
-    AnimEvent.add(function () {
-      leaderLineMain.value.forEach((line) => {
-        hiddenLineDialog();
-        line.position();
-        line.positionByWindowResize = false;
-      });
-      leaderLineShow.value.forEach((line) => {
-        hiddenLine2();
-        line.position();
-        line.positionByWindowResize = false;
-      });
-    }),
-    false
-  );
+  // document.getElementById("treedomCid").addEventListener(
+  //   "resize",
+  //   AnimEvent.add(function () {
+  //     leaderLineMain.value.forEach((line) => {
+  //       hiddenLineDialog();
+  //       line.position();
+  //     });
+  //     leaderLineShow.value.forEach((line) => {
+  //       hiddenLine2();
+  //       line.position();
+  //     });
+  //   }),
+  //   false
+  // );
 };
 const removeLine2 = () => {
   const elmWrapper = document.getElementById("wrapper");

+ 11 - 2
src/pages/netStructPicture/components/ScdNow.vue

@@ -137,6 +137,7 @@ const lineWrite = () => {
   let addId = document.getElementById("addId");
   let editId = document.getElementById("editId");
   let delId = document.getElementById("delId");
+  LeaderLine.positionByWindowResize = false;
   lineList.value.push(
     new LeaderLine(oldIed, addId, {
       color: "#7484AB", //连接线颜色
@@ -232,7 +233,7 @@ watch(
           iedVer.value[key].list.push(item);
         }
       }
-
+      console.log('iedVer.valu===', iedVer.value)
       setTimeout(() => {
         lineWrite();
       }, 50);
@@ -281,7 +282,7 @@ const lookAddOrDel = async (comData, del) => {
     ied_name: comData[0].ied_name,
     reset: 1,
   });
-
+  console.log('iedRelationData.value111111111', iedRelationData.value)
   checkDialogData.value = iedRes.data ? iedRes.data[comData[0].ied_name] : null;
   if (del != "edit") {
     openBig.value = true;
@@ -328,6 +329,14 @@ watch(
   }
 );
 const openScl = ref(false);
+watch(()=>openScl.value,(newValue)=>{
+  if (!newValue) {
+      setTimeout(() => {
+        lineWrite(); //时间400是一定需要的,不然显示了会马上删除,暂未找到原因
+      }, 400);
+    }
+})
+
 const lookEdit = (comData) => {
   openScl.value = true;
   lookAddOrDel(comData, "edit");

+ 1 - 0
src/pages/netStructPicture/components/basicInfo.vue

@@ -546,6 +546,7 @@ const getLine = () => {
       color: "#7F8EB2",
     }),
   };
+  LeaderLine.positionByWindowResize = false;
   leaderLines.value.push(new LeaderLine(middlDom, topDom, lineStyleTop)); //上面和中间连线
   if (mainTitle.value && mainTitle.value.length > 0) {
     leaderLines.value.push(

+ 2 - 1
src/pages/netStructPicture/components/dialogIndex.vue

@@ -40,7 +40,7 @@
         }">
           <!-- isPhoto是输入输出控制块的, -->
           <component :is="activeNavName" :checkData="checkData" :isOpen="isOpen" :iedRelation="iedRelation"
-            @result="result" :isPhoto="isPhoto" :delScdId="delScdId"></component>
+            @result="result" :isPhoto="isPhoto" :delScdId="delScdId" :isScdView="isScdView"></component>
         </div>
       </div>
     </div>
@@ -218,6 +218,7 @@ const isPhoto = ref("photo");
 const clickInoutNav = (item, index) => {
   isPhoto.value = item.code;
   inoutItemNavIndex.value = index;
+  
 };
 </script>
 <style scoped lang="scss">

+ 2 - 0
src/pages/netStructPicture/components/gsix2.vue

@@ -1,3 +1,5 @@
+
+<!-- 这个版块未使用了 -->
 <template>
     <div class="bigBox" id="bigBox">
         <div id="leftBox">

+ 52 - 16
src/pages/netStructPicture/components/inoutControl.vue

@@ -48,7 +48,7 @@
             class="midlestyle"
             v-for="(item, index) in svInfo"
             :key="index"
-            :class="{ 'smv-color': item.attr_name == 'smvcb0' }"
+            :class="{ 'smv-color': item.attr_name == 'smvcb0','smv-color':item.isred }"
             :ref="(el) => setdomMiddle2(el, item)"
           >
             <div>{{ `${item.ldinst}/${item.attr_name}` }}</div>
@@ -103,6 +103,7 @@
         :isPhoto="isPhoto"
         :checkData="checkData"
         :svInfo="svInfo"
+        :delScdId="delScdId"
       ></inoutSendOrRv>
     </div>
     <inoutDialog
@@ -153,10 +154,14 @@ const props = defineProps({
     type: Object,
     default: () => {},
   },
-  delScdId:{
-    type:String,
-    default: '',
-  }
+  delScdId: {
+    type: String,
+    default: "",
+  },
+  isScdView: {
+    type: Boolean,
+    default: false,
+  },
 });
 const svInfo = ref(null);
 
@@ -169,6 +174,7 @@ const getIedChild = async () => {
     ied_name: props.checkData.ied_name,
     forcerefresh: 0,
   });
+  if (!childRes.data || !listData2.value.list) return;
   if (childRes.data) {
     //左右侧内部侧数据组装
     listData2.value.list.forEach((item, index) => {
@@ -205,12 +211,13 @@ const getIedChild = async () => {
 const getNetworkInfo = async () => {
   const svResInfo = await iednetworkInfo({
     scd_id: scdIdValue,
-    ied_name: props.checkData.ied_name,
+    ied_name: listData2.value.ied_name,
   });
   const svResInfoCtrl = await iedSVSendCtrlblock({
     scd_id: scdIdValue,
-    ied_name: props.checkData.ied_name,
+    ied_name: listData2.value.ied_name
   });
+  if(!svResInfoCtrl.data ||!svResInfo.data) return;
   if (svResInfoCtrl.data && svResInfoCtrl.data.GSEControl) {
     //处理数据得到APPID
     svResInfo.data.forEach((item) => {
@@ -220,10 +227,16 @@ const getNetworkInfo = async () => {
         }
       });
     });
-    svInfo.value = [
+    if(svResInfoCtrl.data.SampledValueControl){
+      svResInfoCtrl.data.SampledValueControl.forEach(item=>item.isred = true)
+      svInfo.value = [
       ...svResInfoCtrl.data.SampledValueControl,
       ...svResInfoCtrl.data.GSEControl,
     ];
+    }else{
+      svInfo.value = svResInfoCtrl.data.GSEControl
+    }
+
     if (svInfo.value && svInfo.value.length > 3) {
       middleElement.value.style.marginTop = "20px";
     } else {
@@ -282,6 +295,7 @@ const setdomRight2Child2 = (el, item) => {
 const processArray = (arr) => {
   // ref_ied_id作为键,obj作为值
   const uniqueObjects = new Map();
+  if (!arr) return;
   // 遍历数组
   for (const obj of arr) {
     const { ref_ied_id } = obj;
@@ -298,12 +312,23 @@ const processArray = (arr) => {
   return Array.from(uniqueObjects.values());
 };
 //点击图片的时候筛选出数据
-const clickImg = (dataItem) => {
-  Object.values(props.iedRelation).find((item) => {
-    if (item.ied_name == dataItem.ref_ied_name) {
-      listData2.value = item;
-    }
-  });
+const clickImg = async (dataItem) => {
+  if (!props.isScdView) {
+    Object.values(props.iedRelation).find((item) => {
+      if (item.ied_name == dataItem.ref_ied_name) {
+        listData2.value = item;
+      }
+    });
+  } else {
+    //如果是从scdView进来点到直接调用接口
+    const resRla = await scdIedRelation({
+      scd_id: scdIdValue,
+      ied_name: dataItem.ref_ied_name,
+      reset: 1,
+    });
+    if (!resRla.data) return;
+    listData2.value = resRla.data[dataItem.ref_ied_name];
+  }
 };
 
 //点击后重置数据和线条
@@ -320,6 +345,7 @@ const clickResetLine2 = () => {
 // 将设备列表分成两份
 const bothSide = (data) => {
   const formatArr = processArray(data);
+  if (!formatArr) return;
   const arrlenght = formatArr.length;
   const long1 = Math.ceil(arrlenght / 2);
   leftList.value = formatArr.splice(0, long1);
@@ -465,6 +491,7 @@ const setLeaderline2 = () => {
     let line;
     const options = key.inputs_cnt.toString();
     const rectEnd = endDom.getBoundingClientRect();
+    LeaderLine.positionByWindowResize = false;
     if (key.ctrl_type == "smv") {
       line = new LeaderLine(
         endDom,
@@ -504,6 +531,7 @@ const setLeaderline2 = () => {
     let line;
     const rectEnd = endDom.getBoundingClientRect();
     const options = key.inputs_cnt.toString();
+    LeaderLine.positionByWindowResize = false;
     if (key.ctrl_type == "smv") {
       line = new LeaderLine(
         LeaderLine.pointAnchor(startDom, { x: "100%", y: rectEnd.top - 232 }),
@@ -564,6 +592,7 @@ const setLeaderline2 = () => {
               if (key2.attr_name == "smvcb0") {
                 lineStyle.color = "red";
               }
+              LeaderLine.positionByWindowResize = false;
               line = new LeaderLine(endDom, startDom, lineStyle);
               circelSet(
                 endDom,
@@ -602,6 +631,7 @@ const setLeaderline2 = () => {
               if (key2.attr_name == "smvcb0") {
                 lineStyle2.color = "red";
               }
+              LeaderLine.positionByWindowResize = false;
               line2 = new LeaderLine(startDom, endDom, lineStyle2);
               circelSet(
                 endDom,
@@ -685,7 +715,7 @@ const removeLine2 = () => {
     });
   }
 };
-let scdIdValue = '';
+let scdIdValue = "";
 onMounted(() => {
   if (props.delScdId) {
     scdIdValue = props.delScdId;
@@ -746,6 +776,7 @@ watch(
       svInfo.value = [];
       listData2.value = newValue;
       if (tabValue.value == "photo") {
+        removeLine2();
         getIedChild();
         getNetworkInfo();
         clickResetLine2();
@@ -754,7 +785,12 @@ watch(
     }
   }
 );
-
+//是否是从SCD文件一致性校核进入的该界面
+// watch(()=>props.isScdView,(newValue)=>{
+//   if(newValue){
+//     getIedChild()
+//   }
+// })
 watch(
   () => props.isOpen,
   (newValue) => {

+ 1 - 0
src/pages/netStructPicture/components/inoutDialog.vue

@@ -158,6 +158,7 @@ const setDialogLine = () => {
     let line;
     for (const [key2, value2] of dialogListLeftChild.value) {
       if (key.attr_int_addr == key2.attr_int_addr) {
+        LeaderLine.positionByWindowResize = false;
         if (props.titleUnusual == "input") {
           line = new LeaderLine(value2, value, {
             color: "#255CE7",

+ 47 - 36
src/pages/netStructPicture/components/inoutSendOrRv.vue

@@ -6,7 +6,7 @@
         :data="svTableCtrl"
         stripe
         style="width: 100%"
-        :cell-style="{ color: '#000',cursor:'pointer' }"
+        :cell-style="{ color: '#000', cursor: 'pointer' }"
         @row-click="svSendRowClick"
         :highlight-current-row="true"
         ref="myTable"
@@ -54,7 +54,7 @@
         :data="svReceive"
         stripe
         style="width: 100%"
-        :cell-style="{ color: '#000',cursor:'pointer' }"
+        :cell-style="{ color: '#000', cursor: 'pointer' }"
         @row-click="svSendRowClick2"
         :highlight-current-row="true"
         ref="myTable2"
@@ -105,7 +105,7 @@
         :data="gooseCtrl"
         stripe
         style="width: 100%"
-        :cell-style="{ color: '#000',cursor:'pointer' }"
+        :cell-style="{ color: '#000', cursor: 'pointer' }"
         @row-click="svSendRowClick3"
         :highlight-current-row="true"
         ref="myTable3"
@@ -153,7 +153,7 @@
         :data="gooseReCtrl"
         stripe
         style="width: 100%"
-        :cell-style="{ color: '#000',cursor:'pointer' }"
+        :cell-style="{ color: '#000', cursor: 'pointer' }"
         @row-click="svSendRowClick4"
         :highlight-current-row="true"
         ref="myTable4"
@@ -212,6 +212,8 @@ import {
   gooseSendfcdalist,
   gooseReceivefcdalist,
 } from "@/api/iedNetwork";
+import { useRoute } from "vue-router";
+const route = useRoute();
 const props = defineProps({
   checkData: {
     type: Object,
@@ -225,8 +227,12 @@ const props = defineProps({
     type: Array,
     default: [],
   },
+  delScdId: {
+    type: String,
+    default: "",
+  },
 });
-const scdIdValue = inject("scdId");
+let scdIdValue = "";
 const myTable = ref(null);
 const myTable2 = ref(null);
 const myTable3 = ref(null);
@@ -279,7 +285,7 @@ const smvCtrlblockRe = async () => {
   });
   svReceiveTableCtrl.value = svRecResCtrl.data;
   svReceive.value = [];
-  if (svRecResCtrl.data.length > 0) {
+  if (svRecResCtrl.data && svRecResCtrl.data.length > 0) {
     svReceive.value.push(svRecResCtrl.data[0]);
   }
 };
@@ -310,40 +316,40 @@ const getGooseReList = async () => {
     scd_id: scdIdValue,
     ied_name: props.checkData.ied_name,
   });
-  if (gooseRes.data.length > 0) {
+  if (!gooseRes.data) return;
+  if (gooseRes.data && gooseRes.data.length > 0) {
+    //上面表格的数据
     gooseRes.data.forEach((item) => {
       item.children = [];
+      const alreadyExists = gooseReCtrl.value.some((arrItem) => {
+        return (
+          item.out_dataset_name == arrItem.out_dataset_name &&
+          item.out_gse_ctrl_name == arrItem.out_gse_ctrl_name &&
+          item.out_ied_desc == arrItem.out_ied_desc &&
+          item.out_ied_name == arrItem.out_ied_name
+        );
+      });
+      if (!alreadyExists) {
+        gooseReCtrl.value.push(item);
+      }
     });
-  }
-  //上面表格的数据
-  gooseRes.data.forEach((item) => {
-    const alreadyExists = gooseReCtrl.value.some((arrItem) => {
-      return (
-        item.out_dataset_name == arrItem.out_dataset_name &&
-        item.out_gse_ctrl_name == arrItem.out_gse_ctrl_name &&
-        item.out_ied_desc == arrItem.out_ied_desc &&
-        item.out_ied_name == arrItem.out_ied_name
-      );
+
+    //子列表的数据
+    gooseReCtrl.value.forEach((item) => {
+      if (gooseReCtrl.value.length > 0 && gooseRes.data.length > 0) {
+        gooseRes.data.forEach((key) => {
+          if (
+            item.out_dataset_name == key.out_dataset_name &&
+            item.out_gse_ctrl_name == key.out_gse_ctrl_name &&
+            item.out_ied_desc == key.out_ied_desc &&
+            item.out_ied_name == key.out_ied_name
+          ) {
+            item.children.push(key);
+          }
+        });
+      }
     });
-    if (!alreadyExists) {
-      gooseReCtrl.value.push(item);
-    }
-  });
-  //子列表的数据
-  gooseReCtrl.value.forEach((item) => {
-    if (gooseReCtrl.value.length > 0 && gooseRes.data.length > 0) {
-      gooseRes.data.forEach((key) => {
-        if (
-          item.out_dataset_name == key.out_dataset_name &&
-          item.out_gse_ctrl_name == key.out_gse_ctrl_name &&
-          item.out_ied_desc == key.out_ied_desc &&
-          item.out_ied_name == key.out_ied_name
-        ) {
-          item.children.push(key);
-        }
-      });
-    }
-  });
+  }
   gooseReList.value =
     gooseReCtrl.value.length > 0 ? gooseReCtrl.value[0].children : null;
 };
@@ -394,6 +400,11 @@ watch(
   }
 );
 onMounted(() => {
+  if (props.delScdId) {
+    scdIdValue = props.delScdId;
+  } else {
+    scdIdValue = route.query.id;
+  }
   getSvSendCtrl();
   smvCtrlblockRe();
   getGooseReList();

+ 5 - 3
src/pages/netStructPicture/components/netWork.vue

@@ -496,9 +496,11 @@ const repeatCover = ref(false); //都是重复的子类需要进行判断,从
 const onChangeline = (val) => {
   clickLine.value = val;
   flog.value = true;
+  if(!showAllAp.value) return;
   showAllAp.value.forEach((item) => {
     //包含inlineStyle的过滤出来成为一个数组
     let keys = Object.keys(item).filter((key) => key.startsWith("inlineStyle"));
+    if(!keys) return;
     keys.forEach((typeItem) => {
       if (val !== typeItem.replace("inlineStyle", "")) {
         //设置遮罩层
@@ -518,7 +520,8 @@ const onChangeline = (val) => {
         }
       }
       //如果不做这个判断,几条线指向统一类型的子类会被半遮盖
-      if (publicRepeat.value.value != null) {
+      if(!publicRepeat.value.value) return;
+      // if (publicRepeat.value.value != null) {
         publicRepeat.value.value.forEach((keyRepeat) => {
           if (
             keyRepeat.attr_ied_name == item.attr_ied_name &&
@@ -528,7 +531,7 @@ const onChangeline = (val) => {
             item.cover = true;
           }
         });
-      }
+      // }
     });
   });
 };
@@ -542,7 +545,6 @@ const clickNetworkInfo = (value) => {
   openBig.value = true;
   Object.values(iedRelationData.value).find((item) => {
     if (item.ied_name == value) {
-      console.log('iedRelationData.value', iedRelationData.value)
       checkDialogData.value = item;
     }
   });

+ 6 - 1
src/pages/netStructPicture/components/relationShip.vue

@@ -66,7 +66,6 @@ const props = defineProps({
     default: () => {},
   },
 });
-const delScdId = inject('delScdId')
 const middleElement = ref(null);
 const rightElement = ref(null);
 const leftElement = ref(null);
@@ -93,6 +92,7 @@ const setdomRight = (el, item) => {
 const processArray = (arr) => {
   // ref_ied_id作为键,obj作为值
   const uniqueObjects = new Map();
+  if(!arr) return;
   // 遍历数组
   for (const obj of arr) {
     const { ref_ied_id } = obj;
@@ -160,6 +160,7 @@ const clickResetLine = () => {
 // 将设备列表分成两份
 const bothSide = (data) => {
   const formatArr = processArray(data);
+  if(!formatArr) return;
   const arrlenght = formatArr.length;
   const long1 = Math.ceil(arrlenght / 2);
   leftList.value = formatArr.splice(0, long1);
@@ -228,6 +229,7 @@ const setLeaderline = () => {
     const endDom = value;
     let line;
     count += 5;
+    LeaderLine.positionByWindowResize = false;
     if (key.ref_type == 0) {
       line = new LeaderLine(
         endDom,
@@ -256,6 +258,7 @@ const setLeaderline = () => {
     const endDom = value;
     let line2;
     count2 += 5;
+    LeaderLine.positionByWindowResize = false;
     if (key.ref_type == 0) {
       line2 = new LeaderLine(
         endDom,
@@ -318,6 +321,7 @@ const newPositionLine = () => {
   document.getElementById("treedom").addEventListener(
     "scroll",
     AnimEvent.add(() => {
+      if(!leaderLines.value) return;
       leaderLines.value.forEach((line) => {
         hiddenLine();
         line.position();
@@ -329,6 +333,7 @@ const newPositionLine = () => {
   document.getElementById("treedom").addEventListener(
     "resize",
     AnimEvent.add(function () {
+      if(!leaderLines.value) return;
       leaderLines.value.forEach((line) => {
         hiddenLine();
         line.position();

+ 1 - 0
src/pages/netStructPicture/components/scdMap.vue

@@ -91,6 +91,7 @@ onMounted(() => {
 });
 onBeforeUnmount(() => {
   lookType.value = 0;
+  if(!lineList) return;
   lineList.forEach((line) => line.remove()); //清除连线
 });
 </script>

+ 2 - 0
src/pages/netStructPicture/components/scdVisual.vue

@@ -203,6 +203,7 @@ const getArea = async () => {
   const levelData = [
     ...new Set(areaRes.data.map((itemlevel) => itemlevel.voltage_level)),
   ];
+  if(!levelData) return;
   levelData.forEach((myLevelItem) => {
     const findData = allLevel.value.find((allItem) => {
       return allItem.id == myLevelItem;
@@ -212,6 +213,7 @@ const getArea = async () => {
     }
   });
   //处理主界面的数据展示
+  if(!voltageLevel.value) return;
   voltageLevel.value.forEach((item) => {
     if (item.id == "alls") return;
     item.levelData = [];

+ 1 - 1
src/pages/netStructPicture/components/soureFile.vue

@@ -38,7 +38,7 @@ const setPrefix = function (prefixIndex) {
 const formateXml = function (xmlStr) {
   let text = xmlStr;
   //使用replace去空格
-  text =
+  text = text
     "\n" +
     text
       .replace(/(<\w+)(\s.*?>)/g, ($0, name, props) => {

+ 89 - 44
src/pages/netStructPicture/components/virtualRelation.vue

@@ -4,7 +4,12 @@
     <!-- 关联图 -->
     <div class="main-cont" id="treedom3">
       <div class="main-left">
-        <div v-for="(item, index) in leftList" :key="index" class="conts" @click="clickImg(item)">
+        <div
+          v-for="(item, index) in leftList"
+          :key="index"
+          class="conts"
+          @click="clickImg(item)"
+        >
           <div class="cont-title">
             <img :src="devicePng" alt="" class="img-item" />
             <div class="cont-item">
@@ -12,11 +17,15 @@
               <div>{{ item.ref_ied_name }}</div>
             </div>
           </div>
-          <div v-for="(cItem, index2) in item.titleItems" :key="index2" :ref="(el) => setdomLeftChild3(el, cItem)">
+          <div
+            v-for="(cItem, index2) in item.titleItems"
+            :key="index2"
+            :ref="(el) => setdomLeftChild3(el, cItem)"
+          >
             <div class="text-midle">
               <div>
                 {{
-                  `${cItem.attr_ld_inst}/${cItem.attr_prefix}${cItem.attr_ln_class}.${cItem.attr_do_name}.${cItem.attr_da_name}`
+                  `${cItem.attr_ld_inst}/${cItem.attr_prefix}${cItem.attr_ln_class}${cItem.attr_ln_inst}.${cItem.attr_do_name}.${cItem.attr_da_name}`
                 }}
               </div>
               <div>{{ cItem.do_source_desc }}</div>
@@ -34,18 +43,28 @@
           </div>
         </div>
         <div class="middle-item">
-          <div class="midle-cont" v-for="(item, index) in svInfo" :key="index" :ref="(el) => setdomMiddle3(el, item)">
+          <div
+            class="midle-cont"
+            v-for="(item, index) in svInfo"
+            :key="index"
+            :ref="(el) => setdomMiddle3(el, item)"
+          >
             <div style="margin: 0 4px" v-if="!item.isDecollate">
               {{ item.no }}
             </div>
             <div class="midlestyle" v-if="!item.isDecollate">
-              <div v-if="item.attr_da_name == 'in'">
+              <div v-if="item.inout_type == 'out'">
                 {{
-                  `${item.attr_ld_inst}/${item.attr_ln_class}${item.attr_ln_inst}.${item.attr_do_name}.${item.attr_da_name}`
+                  `${item.attr_ld_inst}/${item.attr_prefix}/${item.attr_ln_class}${item.attr_ln_inst}.${item.attr_do_name}.${item.attr_da_name}`
                 }}
               </div>
-              <div v-else>{{ item.attr_int_addr }}</div>
-              <div>{{ item.do_source_desc }}</div>
+              <div v-else-if="item.inout_type == 'in'">{{ item.attr_int_addr }}</div>
+              <div v-if="item.inout_type == 'out'">
+                  {{ item.do_source_desc }}
+                </div>
+                <div v-else-if="item.inout_type == 'in'">
+                  {{ item.do_target_desc }}
+                </div>
             </div>
             <div class="midlestyle omit" v-if="item.isDecollate">
               {{ item.do_source_desc }}
@@ -55,7 +74,12 @@
       </div>
       <!-- 右侧 -->
       <div class="main-right">
-        <div v-for="(item, index) in rightList" :key="index" class="conts" @click="clickImg(item)">
+        <div
+          v-for="(item, index) in rightList"
+          :key="index"
+          class="conts"
+          @click="clickImg(item)"
+        >
           <div class="cont-title">
             <img :src="devicePng" alt="" class="img-item" />
             <div class="cont-item">
@@ -63,7 +87,11 @@
               <div>{{ item.ref_ied_name }}</div>
             </div>
           </div>
-          <div v-for="(cItem, index2) in item.titleItems" :key="index2" :ref="(el) => setdomRightChild3(el, cItem)">
+          <div
+            v-for="(cItem, index2) in item.titleItems"
+            :key="index2"
+            :ref="(el) => setdomRightChild3(el, cItem)"
+          >
             <div class="text-midle">
               <div>{{ `${cItem.attr_int_addr}` }}</div>
               <div>{{ cItem.do_target_desc }}</div>
@@ -83,13 +111,14 @@ import AnimEvent from "../../../../public/anim-event.min.js";
 import {
   //虚短子关系
   getMiddleinputs,
+  scdIedRelation,
 } from "@/api/iedNetwork";
 import { useRoute } from "vue-router";
 const route = useRoute();
 const props = defineProps({
   checkData: {
     type: Object,
-    default: () => { },
+    default: () => {},
   },
   isOpen: {
     type: Boolean,
@@ -97,16 +126,22 @@ const props = defineProps({
   },
   iedRelation: {
     type: Object,
-    default: () => { },
+    default: () => {},
   },
   delScdId: {
     type: String,
     default: "",
-  }
+  },
+  isScdView: {
+    type: Boolean,
+    default: false,
+  },
 });
 const svInfo = ref(null);
 //处理两边的数据
 const processBoth = (list, svResInfo, inoutType) => {
+  console.log('svResInfo.data', svResInfo.data)
+  if (!list||!svResInfo.data) return;
   list.forEach((item, index) => {
     item.titleItems = [];
     svResInfo.data.forEach((key) => {
@@ -123,6 +158,7 @@ const processBoth = (list, svResInfo, inoutType) => {
       }
     });
   });
+  // console.log('listaaaaaaaaa', list)
 };
 let leaderLines3 = ref([]); //控制线条显示
 const leftList = ref([]);
@@ -153,11 +189,11 @@ const setdomRightChild3 = (el, item) => {
 
 let tagList = ref(null); //左侧更改的设备列表
 //得到中间的子版块数据
-const getNetworkInfo3 = async () => {
+const getNetworkInfo3 = async (names) => {
   let svResInfo;
   svResInfo = await getMiddleinputs({
     scd_id: scdIdValue,
-    ied_name: props.checkData.ied_name,
+    ied_name: names,
   });
   const data = {
     attr_ld_inst: "",
@@ -170,6 +206,7 @@ const getNetworkInfo3 = async () => {
     isDecollate: true,
   };
   //处理两边的数据
+  console.log('leftList.value2222', leftList.value,rightList.value)
   if (svResInfo.data.length > 0) {
     processBoth(leftList.value, svResInfo, "in");
     processBoth(rightList.value, svResInfo, "out");
@@ -189,31 +226,32 @@ const getNetworkInfo3 = async () => {
 
   svInfo.value = newData;
 };
-const processArray = (arr) => {
-  // ref_ied_id作为键,obj作为值
-  const uniqueObjects = new Map();
-  // 遍历数组
-  for (const obj of arr) {
-    const { ref_ied_id } = obj;
-    // 如果当前对象的 ref_ied_id 属性已经存在于 uniqueObjects 中
-    if (uniqueObjects.has(ref_ied_id)) {
-      // 将对应对象的 ref_type 属性设为 2,箭头双向
-      uniqueObjects.get(ref_ied_id).ref_type = 2;
-    } else {
-      // 否则,将当前对象添加到 uniqueObjects 中
-      uniqueObjects.set(ref_ied_id, obj);
-    }
-  }
-  // 将 uniqueObjects 中的值转为数组并返回
-  return Array.from(uniqueObjects.values());
-};
 //点击图片的时候筛选出数据
-const clickImg = (dataItem) => {
-  Object.values(props.iedRelation).find((item) => {
-    if (item.ied_name == dataItem.ref_ied_name) {
-      listData3.value = item;
-    }
-  });
+const clickImg = async (dataItem) => {
+  if (!props.isScdView) {
+    Object.values(props.iedRelation).find((item) => {
+      if (item.ied_name == dataItem.ref_ied_name) {
+        listData3.value = item;
+      }
+    });
+  } else {
+    console.log('dataItem', dataItem)
+    // listData3.value.ied_name = dataItem.ref_ied_name;
+    // listData3.value.ied_desc = dataItem.ref_ied_desc;
+        //如果是从scdView进来点到直接调用接口
+        const resRla = await scdIedRelation({
+      scd_id: scdIdValue,
+      ied_name: dataItem.ref_ied_name,
+      reset: 1,
+    });
+    if (!resRla.data) return;
+    listData3.value = resRla.data[dataItem.ref_ied_name];
+    getNetworkInfo3(dataItem.ref_ied_name)
+    // const ResInput = await getMiddleinputs({
+    //   ied_name: dataItem.ref_ied_name,
+    //   scd_id: scdIdValue,
+    // });
+  }
 };
 
 //点击后重置数据和线条
@@ -230,6 +268,8 @@ const clickResetLine3 = () => {
 const bothSide = (data) => {
   leftList.value = [];
   rightList.value = [];
+  console.log('data=------------', data)
+  if (!data) return;
   data.forEach((item) => {
     if (item.ref_type == 2 || item.ref_type == 1) {
       item.titleItems = [];
@@ -245,6 +285,7 @@ const setLeaderline = () => {
   for (let [key, value] of domListMiddle3.value) {
     for (const [key2, value2] of domListLeftChild3.value) {
       const endDom = value2;
+      LeaderLine.positionByWindowResize = false;
       if (key.node_id == key2.node_id) {
         const line = new LeaderLine(endDom, value, {
           color: "#7484AB",
@@ -264,6 +305,7 @@ const setLeaderline = () => {
     //右侧子组件
     for (const [key2, value2] of domListRightChild3.value) {
       const endDom = value2;
+      LeaderLine.positionByWindowResize = false;
       if (key.node_id == key2.node_id) {
         const line2 = new LeaderLine(value, endDom, {
           color: "#7484AB",
@@ -285,6 +327,7 @@ const newPositionLine = () => {
   document.getElementById("treedom3").addEventListener(
     "scroll",
     AnimEvent.add(() => {
+      if (!leaderLines3.value) return;
       leaderLines3.value.forEach((line) => {
         if (line) {
           hiddenLine();
@@ -299,6 +342,7 @@ const newPositionLine = () => {
   document.getElementById("treedom3").addEventListener(
     "resize",
     AnimEvent.add(function () {
+      if (!diffline) return;
       diffline.forEach((line) => {
         hiddenLine();
         line.position();
@@ -318,8 +362,9 @@ const hiddenLine = () => {
   elmWrapper.style.transform = "none";
   var rectWrapper = elmWrapper.getBoundingClientRect();
   // Move to the origin of coordinates as the document
-  elmWrapper.style.transform = `translate(${(rectWrapper.left + window.scrollY) * -1
-    }px, ${(rectWrapper.top + window.scrollX) * -1}px)`;
+  elmWrapper.style.transform = `translate(${
+    (rectWrapper.left + window.scrollY) * -1
+  }px, ${(rectWrapper.top + window.scrollX) * -1}px)`;
 };
 const setLine = () => {
   if (listData3.value) {
@@ -347,9 +392,8 @@ onMounted(() => {
   } else {
     scdIdValue = route.query.id;
   }
-
   if (props.checkData != null) {
-    getNetworkInfo3();
+    getNetworkInfo3(listData3.value.ied_name);
   }
   //不加条件切换下方tab时会出现bug
   nextTick(() => {
@@ -362,8 +406,9 @@ watch(
     listData3.value = [];
     svInfo.value = [];
     listData3.value = newValue;
+    console.log('newValue======', newValue)
     if (newValue != null) {
-      getNetworkInfo3();
+      getNetworkInfo3(listData3.value.ied_name);
     }
     clickResetLine3();
     emit("result", newValue);

+ 6 - 1
src/pages/netStructPicture/components/virtualnformation.vue

@@ -180,6 +180,7 @@ const svInfo = ref(null);
 //处理两边的数据
 const processBoth = (list, svResInfo, inoutType) => {
   const iedNames = {};
+  if(!list||!svResInfo.data) return;
   list.forEach(async (item, index) => {
     item.titleItems = [];
     svResInfo.data.forEach((key) => {
@@ -294,7 +295,7 @@ const getNetworkInfo3 = async () => {
     ied_name: names,
     reset: 1,
   });
-middleTitelDesc.value = iedRes.data[names].desc
+middleTitelDesc.value = iedRes.data?iedRes.data[names].desc:''
   //省略号===
   const data = {
     attr_ld_inst: "",
@@ -307,6 +308,7 @@ middleTitelDesc.value = iedRes.data[names].desc
     isDecollate: true,
   };
   //省略号===
+  if(!svResInfo.data) return;
   svResInfo.data.sort(function (a, b) {
     return a.no - b.no; // 从小到大排序
   });
@@ -366,6 +368,7 @@ const setLeaderline = () => {
   for (let [key, value] of domListMiddle3.value) {
     for (const [key2, value2] of domListLeftChild3.value) {
       const endDom = value2;
+      LeaderLine.positionByWindowResize = false;
       if (key.node_id == key2.node_id) {
         const line = new LeaderLine(endDom, value, {
           color: "#7484AB",
@@ -406,6 +409,7 @@ const newPositionLine = () => {
   document.getElementById("treedom3").addEventListener(
     "scroll",
     AnimEvent.add(() => {
+      if(!leaderLines3.value) return;
       leaderLines3.value.forEach((line) => {
         if (line) {
           hiddenLine();
@@ -420,6 +424,7 @@ const newPositionLine = () => {
   document.getElementById("treedom3").addEventListener(
     "resize",
     AnimEvent.add(function () {
+      if(!diffline) return;
       diffline.forEach((line) => {
         hiddenLine();
         line.position();

+ 151 - 69
src/pages/netStructPicture/newTitle/SlcCheck.vue

@@ -13,27 +13,67 @@
           <img :src="HardDrives" alt="" />
           <span>基本语法校验结果</span>
         </div>
-        <el-tree class="trees" :data="treeData" :props="defaultProps" @node-click="handleNodeClick" icon="ico"
-          node-key="pid" :expand-on-click-node="false" :default-expanded-keys="[0]" highlight-current>
+        <el-tree
+          class="trees"
+          :data="treeData"
+          :props="defaultProps"
+          @node-click="handleNodeClick"
+          icon="ico"
+          node-key="pid"
+          :expand-on-click-node="false"
+          :default-expanded-keys="[0]"
+          highlight-current
+        >
           <template #default="{ node, data }">
             <span class="custom-trees">
-              <span class="custom-tree-node" v-if="data.datatype == 'SCLSyntax' ||
-                data.datatype == 'Communication' ||
-                data.datatype == 'DataTypeTemplates' ||
-                !data.datatype
-                "><img :src="FileCodeOne" alt="" />
-                <span class="label">{{ node.label }}</span></span>
-              <span class="custom-tree-node" v-else-if="data.datatype || data.pid == 0">
-                <img :src="node.expanded ? FolderOpentop : FolderNotchOne" alt="" />
-                <span class="label">{{ node.label }}</span></span>
-              <img class="alert-level" :src="dangerError" alt="" v-if="data.alert_level == 'error'" />
-              <img class="alert-level" :src="dangerWarning" alt="" v-else-if="data.alert_level == 'waring'" />
-              <img class="alert-level" :src="dangerTip" alt="" v-else-if="data.alert_level == 'hint'" />
+              <span
+                class="custom-tree-node"
+                v-if="
+                  data.datatype == 'SCLSyntax' ||
+                  data.datatype == 'Communication' ||
+                  data.datatype == 'DataTypeTemplates' ||
+                  !data.datatype
+                "
+                ><img :src="FileCodeOne" alt="" />
+                <span class="label">{{ node.label }}</span></span
+              >
+              <span
+                class="custom-tree-node"
+                v-else-if="data.datatype || data.pid == 0"
+              >
+                <img
+                  :src="node.expanded ? FolderOpentop : FolderNotchOne"
+                  alt=""
+                />
+                <span class="label">{{ node.label }}</span></span
+              >
+              <img
+                class="alert-level"
+                :src="dangerError"
+                alt=""
+                v-if="data.alert_level == 'error'"
+              />
+              <img
+                class="alert-level"
+                :src="dangerWarning"
+                alt=""
+                v-else-if="data.alert_level == 'waring'"
+              />
+              <img
+                class="alert-level"
+                :src="dangerTip"
+                alt=""
+                v-else-if="data.alert_level == 'hint'"
+              />
             </span>
           </template>
         </el-tree>
       </div>
-      <div class="tableBox" v-loading="tableLoading" element-loading-text="正在查询校验信息中">
+      <div
+        class="tableBox"
+        v-loading="tableLoading"
+        element-loading-text="正在查询校验信息中"
+      >
         <div class="allMis">
           <div class="result">
             <div @click="excelPort" class="anniu">
@@ -46,25 +86,39 @@
             </div>
           </div>
           <div class="statistics">
-            <span @click="clickStatistics">全部:{{ errorNum + warningNum + hintNum }}</span>
-            <span @click="clickStatistics('error')">错误:<em style="color: #e82c2d">{{
-              errorNum ? errorNum : 0
-            }}</em></span>
-            <span @click="clickStatistics('waring')">告警:<em style="color: #ff7808">{{
-              warningNum ? warningNum : 0
-            }}</em></span>
-            <span @click="clickStatistics('hint')">提示:<em style="color: #3064e8">{{
-              hintNum ? hintNum : 0
-            }}</em></span>
+            <span @click="clickStatistics"
+              >全部:{{ errorNum + warningNum + hintNum }}</span
+            >
+            <span @click="clickStatistics('error')"
+              >错误:<em style="color: #e82c2d">{{
+                errorNum ? errorNum : 0
+              }}</em></span
+            >
+            <span @click="clickStatistics('waring')"
+              >告警:<em style="color: #ff7808">{{
+                warningNum ? warningNum : 0
+              }}</em></span
+            >
+            <span @click="clickStatistics('hint')"
+              >提示:<em style="color: #3064e8">{{
+                hintNum ? hintNum : 0
+              }}</em></span
+            >
           </div>
         </div>
         <div class="table-data" v-if="tableData">
-          <el-table :data="tableData.data" style="width: 100%" stripe height="90%"
-            :cell-style="{ color: '#1A2447', border: 'none', height: '69px' }" :header-cell-style="{
+          <el-table
+            :data="tableData.data"
+            style="width: 100%"
+            stripe
+            height="90%"
+            :cell-style="{ color: '#1A2447', border: 'none', height: '69px' }"
+            :header-cell-style="{
               color: '#7484AB',
               background: '#F7F8FB',
               borderBottom: '1px solid #A3ADE0',
-            }">
+            }"
+          >
             <el-table-column prop="ied_name" label="装置名称" width="80">
               <template #default="scope">
                 <span v-if="scope.row.ied_name">{{ scope.row.ied_name }}</span>
@@ -74,26 +128,45 @@
             <el-table-column prop="ied_desc" label="装置描述" width="200" />
             <el-table-column prop="alert_level" label="等级" width="100">
               <template #default="scope">
-                <span v-if="scope.row.alert_level === 'waring'" class="waring">警告</span>
-                <span v-else-if="scope.row.alert_level === 'error'" class="error">错误</span>
-                <span v-else-if="scope.row.alert_level === 'hint'" class="hint">提示</span>
+                <span v-if="scope.row.alert_level === 'waring'" class="waring"
+                  >警告</span
+                >
+                <span
+                  v-else-if="scope.row.alert_level === 'error'"
+                  class="error"
+                  >错误</span
+                >
+                <span v-else-if="scope.row.alert_level === 'hint'" class="hint"
+                  >提示</span
+                >
               </template>
             </el-table-column>
             <el-table-column prop="line_no" label="行号" width="100">
               <template #default="scope">
-                <span style="
+                <span
+                  style="
                     color: #255ce7;
                     cursor: pointer;
                     border-bottom: 1px solid #255ce7;
-                  " @click="lineNoClick(scope.row)">{{ scope.row.line_no }}</span>
+                  "
+                  @click="lineNoClick(scope.row)"
+                  >{{ scope.row.line_no }}</span
+                >
               </template>
             </el-table-column>
             <el-table-column prop="parse_result" label="描述" />
-            <el-table-column prop="apply_standard" label="标准及条款" width="250">
+            <el-table-column
+              prop="apply_standard"
+              label="标准及条款"
+              width="250"
+            >
               <template #default="scope">
                 <span>{{ getBeforeComma(scope.row.apply_standard) }}</span>
-                <span v-if="!getAfterComma(scope.row.apply_standard)" style="margin-left: 10px">{{
-                  scope.row.apply_standard_no }}</span>
+                <span
+                  v-if="!getAfterComma(scope.row.apply_standard)"
+                  style="margin-left: 10px"
+                  >{{ scope.row.apply_standard_no }}</span
+                >
                 <div v-else>
                   {{ getAfterComma(scope.row.apply_standard) }}
                   <span>{{ scope.row.apply_standard_no }}</span>
@@ -118,7 +191,13 @@
       </div>
     </div>
     <!-- 导出所有结果 -->
-    <el-dialog v-model="exportModal" width="25vw" style="height: 200px" append-to-body draggable>
+    <el-dialog
+      v-model="exportModal"
+      width="25vw"
+      style="height: 200px"
+      append-to-body
+      draggable
+    >
       <template #header>
         <div class="my-header">
           <div class="title">数据导出</div>
@@ -127,7 +206,9 @@
       <div v-if="!exportLink" class="export-ink">正在导出数据中...</div>
       <div v-else class="export-ink">
         数据文件已生成完成,
-        <el-link :href="exportLink" type="primary" class="load">点击立即下载</el-link>
+        <el-link :href="exportLink" type="primary" class="load"
+          >点击立即下载</el-link
+        >
       </div>
     </el-dialog>
     <!-- 点击行号 -->
@@ -141,8 +222,11 @@
       <el-scrollbar height="500px">
         <div class="main-cont-line">
           <div class="main-line">
-            <div v-for="(item, index) in lineNoData" :key="index"
-              :class="{ 'click-line': item.split(' <')[0] == clicklineNOData }">
+            <div
+              v-for="(item, index) in lineNoData"
+              :key="index"
+              :class="{ 'click-line': item.split(' <')[0] == clicklineNOData }"
+            >
               {{ item }}
             </div>
           </div>
@@ -215,7 +299,7 @@ const reload = () => {
     slc.getErrorByLevel({ scd_id: scdid.value }), //获取错误,告警,提示统计数据levelData
     slc.getScdByIdFromMission({
       pageno: 1,
-      pagesize:pagesize.value,
+      pagesize: pagesize.value,
       scd_id: scdid.value,
     }), //获取表格的全部数据resultList
     slc.getScdByIdTree({ scd_id: scdid.value }), //获取侧边栏树的数据treeList
@@ -239,22 +323,21 @@ const levelStatic = (val) => {
   errorNum.value = 0;
   hintNum.value = 0;
   warningNum.value = 0;
-  if (val) {
-    val.forEach((item) => {
-      item.cnt = parseInt(item.cnt);
-      switch (item.alert_level) {
-        case "error":
-          errorNum.value = item.cnt;
-          break;
-        case "hint":
-          hintNum.value = item.cnt;
-          break;
-        case "waring":
-          warningNum.value = item.cnt;
-          break;
-      }
-    });
-  }
+  if (!val) return;
+  val.forEach((item) => {
+    item.cnt = parseInt(item.cnt);
+    switch (item.alert_level) {
+      case "error":
+        errorNum.value = item.cnt;
+        break;
+      case "hint":
+        hintNum.value = item.cnt;
+        break;
+      case "waring":
+        warningNum.value = item.cnt;
+        break;
+    }
+  });
 };
 //处理左侧树的数据
 const buildTree = (data, parentId) => {
@@ -273,12 +356,11 @@ const buildTree = (data, parentId) => {
   return result;
 };
 //点击右侧分页
-const handleCurrentChange =  (val) => {
- 
+const handleCurrentChange = (val) => {
   pageindex.value = val;
-  common()
+  common();
 };
-const common =async () =>{
+const common = async () => {
   tableData.value = null;
   tableLoading.value = true;
   const nodeName = clickTreeData.value ? clickTreeData.value.datatype : "";
@@ -296,7 +378,7 @@ const common =async () =>{
     tableLoading.value = false;
   }
   tableData.value = res;
-}
+};
 //点击全部、错误等
 const levelClick = ref("");
 const clickStatistics = (level) => {
@@ -349,7 +431,7 @@ const excelPort = () => {
   exportLink.value = "";
   const nodeName = clickTreeData.value ? clickTreeData.value.datatype : "";
   const nodeId = clickTreeData.value ? clickTreeData.value.id : "";
-  console.log(nodeName,nodeId);
+  console.log(nodeName, nodeId);
   exportModal.value = true;
   //导出excel
   scdExpTableData({
@@ -388,10 +470,10 @@ const lineNoClick = async (val) => {
   });
   lineNoData.value = res.data;
 };
-const handleSizeChange = (val) =>{
+const handleSizeChange = (val) => {
   pagesize.value = val;
-  common()
-}
+  common();
+};
 onMounted(() => {
   reload();
 });
@@ -466,7 +548,7 @@ em {
     display: flex;
     font-size: 16px;
 
-    &>span {
+    & > span {
       margin-right: 16px;
     }
   }
@@ -545,7 +627,7 @@ em {
 }
 
 .custom-tree-node {
-  &>img:first-child {
+  & > img:first-child {
     width: 18px;
     height: 18px;
     vertical-align: middle;
@@ -731,7 +813,7 @@ em {
 .main-line {
   margin-top: -20px;
 
-  &>div:first-child {
+  & > div:first-child {
     padding-top: 40px;
   }
 }