Просмотр исходного кода

Merge branch 'master' of http://94.191.59.107:3000/houwenfeng/scd_tools_ui

“yueshang” 1 год назад
Родитель
Сommit
4cf1716e11

+ 61 - 31
src/pages/components/draw/DrawDesigns.vue

@@ -11,7 +11,7 @@
             :endTarget="endTarget" :numCase="numCase" :startText="startText" :endText="endText" :lineType="lineType"
             @lineBack="lineBack">
         </LineDouble>
-        <GroupModelAdd v-if="groupType" :groupType="groupType" :modelId="modelId" @groupBack="groupBack"></GroupModelAdd>
+        <GroupModelAdd v-if="groupType" :groupType="groupType" :groupNodeId="groupNodeId" :modelId="modelId" @groupBack="groupBack"></GroupModelAdd>
     </div>
 </template>
 
@@ -121,6 +121,7 @@ export default {
         let fun = ref()//储存父节点传来的函数
         let funOne = ref()//储存父节点传来的函数
         let groupType = ref(false)//GroupModelAdd.vue组件显示与否
+        let groupNodeId=ref('') //当前设置ied_type的分组节点ID
         watch(() => props.lineMenuColor, (newVal) => {
             copyColor.value = newVal
         })
@@ -227,6 +228,11 @@ export default {
                             type: "error"
                         })
                     }
+                }).catch(res=>{
+                    ElMessage({
+                        message: "操作失败:服务器发生异常",
+                        type: "error"
+                    })
                 })
             } else {
                 cid.saveMap(
@@ -301,7 +307,6 @@ export default {
             numCase.value = props.svOrGoose//判断sv或者goose类型
             copyColor.value = props.lineMenuColor//颜色
             setTimeout(() => {
-                console.log('定时器执行');
                 cid.getModelInfo({ id: copyObj.value.id ? copyObj.value.id : route.query.modelid - 0, pageno: 1, pagesize: 20 }).then(res => {
                     emit("drawCor", res.data)
                     const filteredArray = res.data[0].ied_type.filter(param => param !== null)
@@ -314,6 +319,8 @@ export default {
                         children: [],
                         width: 5,
                         height: 5,
+                        x:0,
+                        y:0,
                         isShowAnchor: true,//锚点
                     }
                     needMap.value = filteredArray.map(item => {
@@ -330,7 +337,20 @@ export default {
                         }
                     })
                     needMap.value.push(groups)
-
+                    // lf.value.register(logicFlows)
+                    lf.value.extension.dndPanel.setPatternItems(needMap.value);
+                    
+                    console.log('执行了渲染.....',route.query);
+                    if (route.query.modelid != '' && route.query.modelid != null && route.query.modelid != undefined) {
+                        lastRender()
+                    }
+                    setTimeout(() => {
+                        loading.value = false
+                    }, 1000)
+                })
+            }, 1000);
+        }
+        onMounted(() => {
                     lf.value = new LogicFlow({
                         // 通过选项指定了渲染的容器和需要显示网格
                         container: container.value,//需要显示画布的容器ref
@@ -372,25 +392,30 @@ export default {
                     class MyGroup extends GroupNode.view {
                     }
                     class MyGroupModel extends GroupNode.model {
+                        
                         initNodeData(data) {
                             data.text= ""//{"value":"未命名组","x":10,"y":5,"editable":true}
-                            data.id=new Date().getTime();
+                            //data.id=(new Date().getTime())+"";
                             super.initNodeData(data);
-                            //this.isRestrict = true;
-                            this.resizable = true;
-                            this.foldable = true;
                             this.width = 200;
                             this.height = 150;
                             this.foldedWidth = 100;
-                            this.foldedHeight = 100;
-                            this.isShowAnchor = true;
-                            
+                            this.foldedHeight = 100;                           
                         }   
+                        
+                        setAttributes(){
+                            this.resizable = true;
+                            this.foldable = false; //不允许收起来
+                            this.isShowAnchor = false;   
+                        }
+                        
                         getNodeStyle() {
                             const stl = super.getNodeStyle()
                             stl.strokeDasharray= '4 4'
+                            //stl.stroke="rgb(255,255,255)"
                             return stl
                         }
+                        
                         getAnchorStyle(anchorInfo) {
                             const style = super.getAnchorStyle(anchorInfo);
                             style.stroke = "rgb(24, 125, 255)";
@@ -399,13 +424,14 @@ export default {
                             style.hover.fill = "rgb(24, 125, 255)";
                             style.hover.stroke = "rgb(24, 125, 255)";
                             return style;
-                        }  
+                        }                        
                         getTextStyle() {
                             const style = super.getTextStyle();
                             style.fontSize = 12;
                             style.color="#666"
+                            style.textAlign="left"
                             return style;
-                        }                             
+                        }                
                     }
                     lf.value.register({
                         type: "svEdge",
@@ -553,32 +579,22 @@ export default {
                     })
                     //当将节点托入画布后触发事件
                     lf.value.on('node:dnd-add',function (nodedata){
-                        console.log(nodedata,'node');
                         if(nodedata.data.type=='my-group'){
-                            let nodeid=nodedata.data.id
                             // 添加的是分组节点,需要打开一个窗口让用户设置该节点的ied_type并保存到properties中
-                            let ied_type="user set iedtype"
-                            lf.value.getNodeModelById(nodeid).setProperties({
+                            let ied_type="TMP"
+                            const g=lf.value.getNodeModelById(nodedata.data.id);
+                            g.setProperties({
                                 ied_type: ied_type,
-                                id:-99  //分组的装置类型id固定为0
+                                id:'-99'  //分组的装置类型id固定为-99
                             });
+                            groupNodeId.value = nodedata.data.id
                             groupType.value = true
                         }
                     })
-                    // lf.value.register(logicFlows)
-                    lf.value.extension.dndPanel.setPatternItems(needMap.value);
+                    lf.value.on("node:resize",function(data){
+                        //if(data.oldNodeSize.type!="my-group") return;                         
+                    })
                     lf.value.render();
-                    console.log('执行了渲染');
-                    if (route.query.modelid != '' && route.query.modelid != null && route.query.modelid != undefined) {
-                        lastRender()
-                    }
-                    setTimeout(() => {
-                        loading.value = false
-                    }, 1000)
-                })
-            }, 1000);
-        }
-        onMounted(() => {
             listMap()
         })
         function abilityBack(data) {
@@ -589,7 +605,20 @@ export default {
         }
         // GroupModelAdd.vue返回状态
         function groupBack(data){
-            groupType.value = data
+            console.log(data)
+            groupType.value = data.show
+            //设置窗口关闭时
+            if(!data.show && data.ied_type!=''){
+                //更新分组的装置类型编码属性ied_type
+                const g=lf.value.getNodeModelById(data.groupNodeId);
+                console.log(g)
+                g.setProperties({
+                    ied_type: data.ied_type,
+                });
+            }else{
+                //未设置装置编码,自动删除
+                lf.value.deleteNode(data.groupNodeId)
+            }
         }
         onBeforeUnmount(() => {
             // lf.value.remove()
@@ -635,6 +664,7 @@ export default {
             listMap,//组件初始化
             funOne,//储存父节点传来的函数
             groupType,//GroupModelAdd.vue组件显示与否
+            groupNodeId,
             groupBack,// GroupModelAdd.vue返回状态
         }
     },

+ 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 => {
-                newType.value = res.data
+                id:modelIds.value-0,
+                ied_type:iedTypes.value
+            }).then(res=>{
+                console.log(res,'sadsdada');
             })
         }
 
@@ -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"

+ 18 - 7
src/pages/components/drawModal/GroupModelAdd.vue

@@ -1,10 +1,10 @@
 <template>
     <div>
-        <el-dialog v-model="dialogVisible" title="装置端子关系配置" width="30%" @close="handleClose"
+        <el-dialog v-model="dialogVisible" title="组合装置类型编码设置" width="30%" @close="handleClose"
             :close-on-click-modal="false">
-            <span>装置编码:</span>
+            <span>组合装置编码:</span>
             <el-input v-model="iedValue" :maxlength="5" :show-word-limit="true" style="width: 300px;"
-                placeholder="请输入装置编码"></el-input>
+                placeholder="请输入编码,仅支持大写英文字母"></el-input>
             <template #footer>
                 <span class="dialog-footer">
                     <el-button @click="cancels">取消</el-button>
@@ -29,6 +29,10 @@ export default {
             type: String,
             required: true,
         },//DrawDesigns.vue传过来的模型id
+        groupNodeId:{
+            type:String,
+            required: true,
+        }//分组装置节点ID,确定时需要回传回画布界面
     },
     setup(props, { emit }) {
         let dialogVisible = ref(false)//模态框打开/关闭状态
@@ -42,16 +46,22 @@ export default {
         // 关闭模态框
         function modalClose() {
             dialogVisible.value = false
-            emit("groupBack", dialogVisible.value)
+            emit("groupBack", {"show":dialogVisible.value,'ied_type':'',"groupNodeId":props.groupNodeId})
         }
         // 确认按钮
         function modalSure() {
-            if (iedValue.value == '') {
+            const reg= /^[A-Za-z]+$/;
+            const v = iedValue.value.replace(/ /g,'')
+            if (v == '' || !reg.test(v)) {
                 ElMessage({
-                    message: "请输入正确的编码",
+                    message: "请输入正确的组合装置编码:仅支持纯英文字母",
                     type: "error"
                 })
             } else {
+                //仅更新本地编码,此处不需要提交到后台
+                dialogVisible.value = false
+                emit("groupBack", {"show":dialogVisible.value,"ied_type":v.toUpperCase(),"groupNodeId":props.groupNodeId})
+                /*
                 flow.updateIedType({
                     id: modelType.value - 0,
                     old_iedtype: "",
@@ -71,9 +81,10 @@ export default {
                         })
                     }
                 })
-
+                */
             }
         }
+        //将输入的编码内容转为大写
         onMounted(() => {
             reload()
         })

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

@@ -157,7 +157,6 @@ 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;
@@ -333,7 +332,6 @@ 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) => {
@@ -367,7 +365,7 @@ const clickUpTypeImgUpAdd = (arr, event) => {
   // //nnerText是展示在左侧的数据,nnerTextRight是展示在右侧的数据,如果nnerTextRight为空,那么同时展示在左侧最下方表示新增
   clickLineResult();
   setTopDiffName(event);
-  if (arr.length && arr.length > 0&& arr[0].P) {
+  if (arr.length && arr.length > 0) {
     arr[0].P.forEach((item1) => {
       let foundMatch = false;
 
@@ -632,7 +630,6 @@ 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);
@@ -669,7 +666,6 @@ 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;
@@ -687,7 +683,6 @@ 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;
@@ -733,7 +728,6 @@ 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;
@@ -743,7 +737,6 @@ const setLeaderlines = (types) => {
         }
         //又有新增又有修改,站控层===
         for (const [key3, value3] of domListUpRightName.value) {
-          LeaderLine.positionByWindowResize = false;
           //修改和删除
           if (typeof key2 == "string" && key2.includes("del") && key2 == key3) {
             let line4; //从右往左的线条
@@ -787,11 +780,13 @@ 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);
@@ -838,32 +833,36 @@ 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();
-  //     });
-  //     leaderLineShow.value.forEach((line) => {
-  //       hiddenLine2();
-  //       line.position();
-  //     });
-  //   }),
-  //   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
+  );
 };
 const removeLine2 = () => {
   const elmWrapper = document.getElementById("wrapper");

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

@@ -137,7 +137,6 @@ 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", //连接线颜色
@@ -233,7 +232,7 @@ watch(
           iedVer.value[key].list.push(item);
         }
       }
-      console.log('iedVer.valu===', iedVer.value)
+
       setTimeout(() => {
         lineWrite();
       }, 50);
@@ -282,7 +281,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;
@@ -329,14 +328,6 @@ watch(
   }
 );
 const openScl = ref(false);
-watch(()=>openScl.value,(newValue)=>{
-  if (!newValue) {
-      setTimeout(() => {
-        lineWrite(); //时间400是一定需要的,不然显示了会马上删除,暂未找到原因
-      }, 400);
-    }
-})
-
 const lookEdit = (comData) => {
   openScl.value = true;
   lookAddOrDel(comData, "edit");

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

@@ -546,7 +546,6 @@ 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(

+ 1 - 2
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" :isScdView="isScdView"></component>
+            @result="result" :isPhoto="isPhoto" :delScdId="delScdId"></component>
         </div>
       </div>
     </div>
@@ -218,7 +218,6 @@ const isPhoto = ref("photo");
 const clickInoutNav = (item, index) => {
   isPhoto.value = item.code;
   inoutItemNavIndex.value = index;
-  
 };
 </script>
 <style scoped lang="scss">

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

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

+ 16 - 52
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','smv-color':item.isred }"
+            :class="{ 'smv-color': item.attr_name == 'smvcb0' }"
             :ref="(el) => setdomMiddle2(el, item)"
           >
             <div>{{ `${item.ldinst}/${item.attr_name}` }}</div>
@@ -103,7 +103,6 @@
         :isPhoto="isPhoto"
         :checkData="checkData"
         :svInfo="svInfo"
-        :delScdId="delScdId"
       ></inoutSendOrRv>
     </div>
     <inoutDialog
@@ -154,14 +153,10 @@ const props = defineProps({
     type: Object,
     default: () => {},
   },
-  delScdId: {
-    type: String,
-    default: "",
-  },
-  isScdView: {
-    type: Boolean,
-    default: false,
-  },
+  delScdId:{
+    type:String,
+    default: '',
+  }
 });
 const svInfo = ref(null);
 
@@ -174,7 +169,6 @@ 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) => {
@@ -211,13 +205,12 @@ const getIedChild = async () => {
 const getNetworkInfo = async () => {
   const svResInfo = await iednetworkInfo({
     scd_id: scdIdValue,
-    ied_name: listData2.value.ied_name,
+    ied_name: props.checkData.ied_name,
   });
   const svResInfoCtrl = await iedSVSendCtrlblock({
     scd_id: scdIdValue,
-    ied_name: listData2.value.ied_name
+    ied_name: props.checkData.ied_name,
   });
-  if(!svResInfoCtrl.data ||!svResInfo.data) return;
   if (svResInfoCtrl.data && svResInfoCtrl.data.GSEControl) {
     //处理数据得到APPID
     svResInfo.data.forEach((item) => {
@@ -227,16 +220,10 @@ const getNetworkInfo = async () => {
         }
       });
     });
-    if(svResInfoCtrl.data.SampledValueControl){
-      svResInfoCtrl.data.SampledValueControl.forEach(item=>item.isred = true)
-      svInfo.value = [
+    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 {
@@ -295,7 +282,6 @@ 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;
@@ -312,23 +298,12 @@ const processArray = (arr) => {
   return Array.from(uniqueObjects.values());
 };
 //点击图片的时候筛选出数据
-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];
-  }
+const clickImg = (dataItem) => {
+  Object.values(props.iedRelation).find((item) => {
+    if (item.ied_name == dataItem.ref_ied_name) {
+      listData2.value = item;
+    }
+  });
 };
 
 //点击后重置数据和线条
@@ -345,7 +320,6 @@ 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);
@@ -491,7 +465,6 @@ 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,
@@ -531,7 +504,6 @@ 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 }),
@@ -592,7 +564,6 @@ const setLeaderline2 = () => {
               if (key2.attr_name == "smvcb0") {
                 lineStyle.color = "red";
               }
-              LeaderLine.positionByWindowResize = false;
               line = new LeaderLine(endDom, startDom, lineStyle);
               circelSet(
                 endDom,
@@ -631,7 +602,6 @@ const setLeaderline2 = () => {
               if (key2.attr_name == "smvcb0") {
                 lineStyle2.color = "red";
               }
-              LeaderLine.positionByWindowResize = false;
               line2 = new LeaderLine(startDom, endDom, lineStyle2);
               circelSet(
                 endDom,
@@ -715,7 +685,7 @@ const removeLine2 = () => {
     });
   }
 };
-let scdIdValue = "";
+let scdIdValue = '';
 onMounted(() => {
   if (props.delScdId) {
     scdIdValue = props.delScdId;
@@ -776,7 +746,6 @@ watch(
       svInfo.value = [];
       listData2.value = newValue;
       if (tabValue.value == "photo") {
-        removeLine2();
         getIedChild();
         getNetworkInfo();
         clickResetLine2();
@@ -785,12 +754,7 @@ watch(
     }
   }
 );
-//是否是从SCD文件一致性校核进入的该界面
-// watch(()=>props.isScdView,(newValue)=>{
-//   if(newValue){
-//     getIedChild()
-//   }
-// })
+
 watch(
   () => props.isOpen,
   (newValue) => {

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

@@ -158,7 +158,6 @@ 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",

+ 36 - 47
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,8 +212,6 @@ import {
   gooseSendfcdalist,
   gooseReceivefcdalist,
 } from "@/api/iedNetwork";
-import { useRoute } from "vue-router";
-const route = useRoute();
 const props = defineProps({
   checkData: {
     type: Object,
@@ -227,12 +225,8 @@ const props = defineProps({
     type: Array,
     default: [],
   },
-  delScdId: {
-    type: String,
-    default: "",
-  },
 });
-let scdIdValue = "";
+const scdIdValue = inject("scdId");
 const myTable = ref(null);
 const myTable2 = ref(null);
 const myTable3 = ref(null);
@@ -285,7 +279,7 @@ const smvCtrlblockRe = async () => {
   });
   svReceiveTableCtrl.value = svRecResCtrl.data;
   svReceive.value = [];
-  if (svRecResCtrl.data && svRecResCtrl.data.length > 0) {
+  if (svRecResCtrl.data.length > 0) {
     svReceive.value.push(svRecResCtrl.data[0]);
   }
 };
@@ -316,40 +310,40 @@ const getGooseReList = async () => {
     scd_id: scdIdValue,
     ied_name: props.checkData.ied_name,
   });
-  if (!gooseRes.data) return;
-  if (gooseRes.data && gooseRes.data.length > 0) {
-    //上面表格的数据
+  if (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);
-      }
-    });
-
-    //子列表的数据
-    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);
-          }
-        });
-      }
     });
   }
+  //上面表格的数据
+  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
+      );
+    });
+    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;
 };
@@ -400,11 +394,6 @@ watch(
   }
 );
 onMounted(() => {
-  if (props.delScdId) {
-    scdIdValue = props.delScdId;
-  } else {
-    scdIdValue = route.query.id;
-  }
   getSvSendCtrl();
   smvCtrlblockRe();
   getGooseReList();

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

@@ -496,11 +496,9 @@ 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", "")) {
         //设置遮罩层
@@ -520,8 +518,7 @@ const onChangeline = (val) => {
         }
       }
       //如果不做这个判断,几条线指向统一类型的子类会被半遮盖
-      if(!publicRepeat.value.value) return;
-      // if (publicRepeat.value.value != null) {
+      if (publicRepeat.value.value != null) {
         publicRepeat.value.value.forEach((keyRepeat) => {
           if (
             keyRepeat.attr_ied_name == item.attr_ied_name &&
@@ -531,7 +528,7 @@ const onChangeline = (val) => {
             item.cover = true;
           }
         });
-      // }
+      }
     });
   });
 };
@@ -545,6 +542,7 @@ 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;
     }
   });

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

@@ -66,6 +66,7 @@ const props = defineProps({
     default: () => {},
   },
 });
+const delScdId = inject('delScdId')
 const middleElement = ref(null);
 const rightElement = ref(null);
 const leftElement = ref(null);
@@ -92,7 +93,6 @@ 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,7 +160,6 @@ 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);
@@ -229,7 +228,6 @@ const setLeaderline = () => {
     const endDom = value;
     let line;
     count += 5;
-    LeaderLine.positionByWindowResize = false;
     if (key.ref_type == 0) {
       line = new LeaderLine(
         endDom,
@@ -258,7 +256,6 @@ const setLeaderline = () => {
     const endDom = value;
     let line2;
     count2 += 5;
-    LeaderLine.positionByWindowResize = false;
     if (key.ref_type == 0) {
       line2 = new LeaderLine(
         endDom,
@@ -321,7 +318,6 @@ const newPositionLine = () => {
   document.getElementById("treedom").addEventListener(
     "scroll",
     AnimEvent.add(() => {
-      if(!leaderLines.value) return;
       leaderLines.value.forEach((line) => {
         hiddenLine();
         line.position();
@@ -333,7 +329,6 @@ const newPositionLine = () => {
   document.getElementById("treedom").addEventListener(
     "resize",
     AnimEvent.add(function () {
-      if(!leaderLines.value) return;
       leaderLines.value.forEach((line) => {
         hiddenLine();
         line.position();

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

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

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

@@ -203,7 +203,6 @@ 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;
@@ -213,7 +212,6 @@ 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) => {

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

@@ -4,12 +4,7 @@
     <!-- 关联图 -->
     <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">
@@ -17,15 +12,11 @@
               <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_ln_inst}.${cItem.attr_do_name}.${cItem.attr_da_name}`
+                  `${cItem.attr_ld_inst}/${cItem.attr_prefix}${cItem.attr_ln_class}.${cItem.attr_do_name}.${cItem.attr_da_name}`
                 }}
               </div>
               <div>{{ cItem.do_source_desc }}</div>
@@ -43,28 +34,18 @@
           </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.inout_type == 'out'">
+              <div v-if="item.attr_da_name == 'in'">
                 {{
-                  `${item.attr_ld_inst}/${item.attr_prefix}/${item.attr_ln_class}${item.attr_ln_inst}.${item.attr_do_name}.${item.attr_da_name}`
+                  `${item.attr_ld_inst}/${item.attr_ln_class}${item.attr_ln_inst}.${item.attr_do_name}.${item.attr_da_name}`
                 }}
               </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 v-else>{{ item.attr_int_addr }}</div>
+              <div>{{ item.do_source_desc }}</div>
             </div>
             <div class="midlestyle omit" v-if="item.isDecollate">
               {{ item.do_source_desc }}
@@ -74,12 +55,7 @@
       </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">
@@ -87,11 +63,7 @@
               <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>
@@ -111,14 +83,13 @@ 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,
@@ -126,22 +97,16 @@ 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) => {
@@ -158,7 +123,6 @@ const processBoth = (list, svResInfo, inoutType) => {
       }
     });
   });
-  // console.log('listaaaaaaaaa', list)
 };
 let leaderLines3 = ref([]); //控制线条显示
 const leftList = ref([]);
@@ -189,11 +153,11 @@ const setdomRightChild3 = (el, item) => {
 
 let tagList = ref(null); //左侧更改的设备列表
 //得到中间的子版块数据
-const getNetworkInfo3 = async (names) => {
+const getNetworkInfo3 = async () => {
   let svResInfo;
   svResInfo = await getMiddleinputs({
     scd_id: scdIdValue,
-    ied_name: names,
+    ied_name: props.checkData.ied_name,
   });
   const data = {
     attr_ld_inst: "",
@@ -206,7 +170,6 @@ const getNetworkInfo3 = async (names) => {
     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");
@@ -226,32 +189,31 @@ const getNetworkInfo3 = async (names) => {
 
   svInfo.value = newData;
 };
-//点击图片的时候筛选出数据
-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,
-    // });
+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;
+    }
+  });
 };
 
 //点击后重置数据和线条
@@ -268,8 +230,6 @@ 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 = [];
@@ -285,7 +245,6 @@ 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",
@@ -305,7 +264,6 @@ 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",
@@ -327,7 +285,6 @@ const newPositionLine = () => {
   document.getElementById("treedom3").addEventListener(
     "scroll",
     AnimEvent.add(() => {
-      if (!leaderLines3.value) return;
       leaderLines3.value.forEach((line) => {
         if (line) {
           hiddenLine();
@@ -342,7 +299,6 @@ const newPositionLine = () => {
   document.getElementById("treedom3").addEventListener(
     "resize",
     AnimEvent.add(function () {
-      if (!diffline) return;
       diffline.forEach((line) => {
         hiddenLine();
         line.position();
@@ -362,9 +318,8 @@ 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) {
@@ -392,8 +347,9 @@ onMounted(() => {
   } else {
     scdIdValue = route.query.id;
   }
+
   if (props.checkData != null) {
-    getNetworkInfo3(listData3.value.ied_name);
+    getNetworkInfo3();
   }
   //不加条件切换下方tab时会出现bug
   nextTick(() => {
@@ -406,9 +362,8 @@ watch(
     listData3.value = [];
     svInfo.value = [];
     listData3.value = newValue;
-    console.log('newValue======', newValue)
     if (newValue != null) {
-      getNetworkInfo3(listData3.value.ied_name);
+      getNetworkInfo3();
     }
     clickResetLine3();
 

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

@@ -180,7 +180,6 @@ 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) => {
@@ -295,7 +294,7 @@ const getNetworkInfo3 = async () => {
     ied_name: names,
     reset: 1,
   });
-middleTitelDesc.value = iedRes.data?iedRes.data[names].desc:''
+middleTitelDesc.value = iedRes.data[names].desc
   //省略号===
   const data = {
     attr_ld_inst: "",
@@ -308,7 +307,6 @@ middleTitelDesc.value = iedRes.data?iedRes.data[names].desc:''
     isDecollate: true,
   };
   //省略号===
-  if(!svResInfo.data) return;
   svResInfo.data.sort(function (a, b) {
     return a.no - b.no; // 从小到大排序
   });
@@ -368,7 +366,6 @@ 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",
@@ -409,7 +406,6 @@ const newPositionLine = () => {
   document.getElementById("treedom3").addEventListener(
     "scroll",
     AnimEvent.add(() => {
-      if(!leaderLines3.value) return;
       leaderLines3.value.forEach((line) => {
         if (line) {
           hiddenLine();
@@ -424,7 +420,6 @@ const newPositionLine = () => {
   document.getElementById("treedom3").addEventListener(
     "resize",
     AnimEvent.add(function () {
-      if(!diffline) return;
       diffline.forEach((line) => {
         hiddenLine();
         line.position();

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

@@ -13,67 +13,27 @@
           <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">
@@ -86,39 +46,25 @@
             </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>
@@ -128,45 +74,26 @@
             <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>
@@ -191,13 +118,7 @@
       </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>
@@ -206,9 +127,7 @@
       <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>
     <!-- 点击行号 -->
@@ -222,11 +141,8 @@
       <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>
@@ -299,7 +215,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
@@ -323,21 +239,22 @@ const levelStatic = (val) => {
   errorNum.value = 0;
   hintNum.value = 0;
   warningNum.value = 0;
-  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;
-    }
-  });
+  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;
+      }
+    });
+  }
 };
 //处理左侧树的数据
 const buildTree = (data, parentId) => {
@@ -356,11 +273,12 @@ 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 : "";
@@ -378,7 +296,7 @@ const common = async () => {
     tableLoading.value = false;
   }
   tableData.value = res;
-};
+}
 //点击全部、错误等
 const levelClick = ref("");
 const clickStatistics = (level) => {
@@ -431,7 +349,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({
@@ -470,10 +388,10 @@ const lineNoClick = async (val) => {
   });
   lineNoData.value = res.data;
 };
-const handleSizeChange = (val) => {
+const handleSizeChange = (val) =>{
   pagesize.value = val;
-  common();
-};
+  common()
+}
 onMounted(() => {
   reload();
 });
@@ -548,7 +466,7 @@ em {
     display: flex;
     font-size: 16px;
 
-    & > span {
+    &>span {
       margin-right: 16px;
     }
   }
@@ -627,7 +545,7 @@ em {
 }
 
 .custom-tree-node {
-  & > img:first-child {
+  &>img:first-child {
     width: 18px;
     height: 18px;
     vertical-align: middle;
@@ -813,7 +731,7 @@ em {
 .main-line {
   margin-top: -20px;
 
-  & > div:first-child {
+  &>div:first-child {
     padding-top: 40px;
   }
 }