Browse Source

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

liling 1 year ago
parent
commit
f495996efd

+ 27 - 0
src/api/scd.js

@@ -47,6 +47,30 @@ function getLoadScd(data){
         params:data
         params:data
     })
     })
 }
 }
+// 修改并保存指定检测间隔下的IED装置列表
+function stickIed(data){
+    return request({
+        url:`/admin/update/check_area/ied`,
+        method:"post",
+        data,
+    })
+}
+// 查询指定检测间隔下的IED装置列表
+function getTikIed(data){
+    return request({
+        url:`/admin/get/check_area/ied`,
+        method:"get",
+        params:data,
+    })
+}
+// 
+function scdAllIed(data){
+    return request({
+        url:`/scd/area/ied/list`,
+        method:"get",
+        params:data,
+    })
+}
 export default {
 export default {
     getAllScd,
     getAllScd,
     getScdMiddle,
     getScdMiddle,
@@ -54,4 +78,7 @@ export default {
     scdReal,
     scdReal,
     loadScd,
     loadScd,
     getLoadScd,
     getLoadScd,
+    stickIed,
+    getTikIed,
+    scdAllIed,
 }
 }

+ 16 - 11
src/pages/mission/MissionVue.vue

@@ -15,11 +15,14 @@
                 <NoBox v-if="btnSelect == 0 && taskList.length == 0 && sizeNum == 0" :btnSelect="btnSelect"
                 <NoBox v-if="btnSelect == 0 && taskList.length == 0 && sizeNum == 0" :btnSelect="btnSelect"
                     :taskList="taskList" @backToMission="backToMission"></NoBox>
                     :taskList="taskList" @backToMission="backToMission"></NoBox>
                 <!-- 有检测任务的盒子 -->
                 <!-- 有检测任务的盒子 -->
-                <HaveMis v-if="btnSelect == 0 && taskList.length != 0 && sizeNum == 0"  @hmBack="hmBack" @haveBack="haveBack"></HaveMis>
+                <HaveMis v-if="btnSelect == 0 && taskList.length != 0 && sizeNum == 0" @hmBack="hmBack"
+                    @haveBack="haveBack"></HaveMis>
                 <!-- 新建任务盒子 -->
                 <!-- 新建任务盒子 -->
-                <CreateNew v-if="btnSelect == 1" :btnSelect="btnSelect" :taskList="taskList" @createBack="createBack"></CreateNew>
+                <CreateNew v-if="btnSelect == 1" :btnSelect="btnSelect" :taskList="taskList" @createBack="createBack">
+                </CreateNew>
                 <!-- 正在检测盒子 -->
                 <!-- 正在检测盒子 -->
                 <StartMission v-if="btnSelect == 0 && sizeNum == 1" @smBack="smBack" :startMis="startMis"></StartMission>
                 <StartMission v-if="btnSelect == 0 && sizeNum == 1" @smBack="smBack" :startMis="startMis"></StartMission>
+                <HistoryMis v-if="btnSelect == 2"></HistoryMis>
             </div>
             </div>
         </div>
         </div>
     </div>
     </div>
@@ -31,6 +34,7 @@ import NoBox from './components/NoMisBox'
 import CreateNew from './components/CreateMis'
 import CreateNew from './components/CreateMis'
 import HaveMis from './components/HaveMis.vue';
 import HaveMis from './components/HaveMis.vue';
 import StartMission from './components/StartMission.vue';
 import StartMission from './components/StartMission.vue';
+import HistoryMis from './components/HistoryMis.vue';
 import task from '@/api/task';
 import task from '@/api/task';
 export default {
 export default {
     setup() {
     setup() {
@@ -57,12 +61,12 @@ export default {
             task.getTask({}).then(res => {
             task.getTask({}).then(res => {
                 if (res.data) {
                 if (res.data) {
                     taskList.value = res.data
                     taskList.value = res.data
-                    console.log(taskList.value.length,'value');
                 }
                 }
             })
             })
         }
         }
         function misChange(row, num) {
         function misChange(row, num) {
             btnSelect.value = num
             btnSelect.value = num
+            console.log(num,'num');
         }
         }
         function createMis() {
         function createMis() {
             btnSelect.value = 1
             btnSelect.value = 1
@@ -70,21 +74,21 @@ export default {
         function backToMission(data) {
         function backToMission(data) {
             btnSelect.value = data
             btnSelect.value = data
         }
         }
-        function hmBack(data,obj) {
+        function hmBack(data, obj) {
             startMis.value = obj
             startMis.value = obj
             sizeNum.value = data
             sizeNum.value = data
         }
         }
-        function smBack(data){
+        function smBack(data) {
             sizeNum.value = data
             sizeNum.value = data
         }
         }
-        function createBack(data){
+        function createBack(data) {
             btnSelect.value = data
             btnSelect.value = data
         }
         }
-        function haveBack(data){
-            if(typeof value === 'object' && value === null){
-                taskList.value = data
-            }else{
+        function haveBack(data) {
+            if (data == null) {
                 taskList.value = []
                 taskList.value = []
+            } else {
+                taskList.value = data
             }
             }
         }
         }
         onMounted(() => {
         onMounted(() => {
@@ -110,7 +114,8 @@ export default {
         NoBox,
         NoBox,
         CreateNew,
         CreateNew,
         HaveMis,
         HaveMis,
-        StartMission
+        StartMission,
+        HistoryMis,
     }
     }
 }
 }
 </script>
 </script>

+ 110 - 15
src/pages/mission/components/CreateMis.vue

@@ -55,7 +55,11 @@
                 </el-form>
                 </el-form>
             </div>
             </div>
             <!-- 间隔、装置列表 -->
             <!-- 间隔、装置列表 -->
-            <div class="gapAndUnit" v-if="false">
+            <div>
+                <el-button style="width: 200px;height: 30px;" @click="backMent">返回</el-button>
+                <el-button style="width: 200px;height: 30px;" @click="saveMent" type="primary">保存</el-button>
+            </div>
+            <div class="gapAndUnit" v-if="successScd">
                 <!-- 间隔列表 -->
                 <!-- 间隔列表 -->
                 <div class="gapBox">
                 <div class="gapBox">
                     <div style="display: flex;justify-content: flex-start;align-items: center;margin: 5px;">
                     <div style="display: flex;justify-content: flex-start;align-items: center;margin: 5px;">
@@ -66,10 +70,11 @@
                             <span>间隔列表</span>
                             <span>间隔列表</span>
                         </div>
                         </div>
                     </div>
                     </div>
-                    <p :class="jgSelect == index ? 'result' : ''" v-for="(item, index) in jgList"
+                    <!-- <p :class="jgSelect == index ? 'result' : ''" v-for="(item, index) in jgList"
                         style="text-align: left;cursor: pointer;" @click="jgClick(item, index)">
                         style="text-align: left;cursor: pointer;" @click="jgClick(item, index)">
                         {{ item.name }}
                         {{ item.name }}
-                    </p>
+                    </p> -->
+                    <el-tree :props="anyProps" :data="anyData" @node-click="handleCheckChange" />
                 </div>
                 </div>
                 <!-- 装置列表 -->
                 <!-- 装置列表 -->
                 <div class="unitBox">
                 <div class="unitBox">
@@ -81,17 +86,24 @@
                             <span>装置列表——间隔:<em>{{ jg }}</em></span>
                             <span>装置列表——间隔:<em>{{ jg }}</em></span>
                         </div>
                         </div>
                         <div style="margin-left: 5px;">
                         <div style="margin-left: 5px;">
-                            <span>检测模型:<em v-for="(item, index) in mx">{{ mx[index] }}</em></span>
+                            <!-- <span>检测模型:<em v-for="(item, index) in mx">{{ mx[index] }}</em></span> -->
+                            <el-button type="primary" size="small" plain @click="checkTime">选择装置</el-button>
                         </div>
                         </div>
+
                     </div>
                     </div>
-                    <div style="display: flex;justify-content: flex-start;align-items: center;">
-                        <p class="chooseSpan" v-for="(item, index) in mx">{{ mx[index] }}</p>
+                    <div v-loading="iedLoading">
+                        <!-- <div v-for="(item, index) in mx">
+                            {{ item.ied_name }}
+                        </div> -->
+                        <el-tag v-for="(item, index) in mx" :key="item.ied_name" size="large" class="mx-1" type="info"
+                            closable effect="plain" @close="tagClose(item, index)">
+                            {{ item.ied_name }}
+                        </el-tag>
                     </div>
                     </div>
                 </div>
                 </div>
             </div>
             </div>
-            <div>
-                <el-button style="width: 200px;height: 30px;" @click="backMent">返回</el-button>
-                <el-button style="width: 200px;height: 30px;" @click="saveMent" type="primary">保存</el-button>
+            <div v-if="successScd">
+                <el-button style="width: 200px;height: 30px;" type="primary" @click="iedSave">保存</el-button>
             </div>
             </div>
         </div>
         </div>
         <!-- 模态框组件 -->
         <!-- 模态框组件 -->
@@ -99,6 +111,8 @@
             <LookScd v-if="scdLooks" :scdLooks="scdLooks" @nowBack="nowBack" @lookNum="lookNum"></LookScd>
             <LookScd v-if="scdLooks" :scdLooks="scdLooks" @nowBack="nowBack" @lookNum="lookNum"></LookScd>
             <ModelTree v-if="treeMool" :treeMool="treeMool" @treeBack="treeBack" @treeNum="treeNum"></ModelTree>
             <ModelTree v-if="treeMool" :treeMool="treeMool" @treeBack="treeBack" @treeNum="treeNum"></ModelTree>
             <FlashCreate v-if="fcModal" :fcModal="fcModal" @fcBack="fcBack"></FlashCreate>
             <FlashCreate v-if="fcModal" :fcModal="fcModal" @fcBack="fcBack"></FlashCreate>
+            <CheckIed v-if="iedModal" :iedModal="iedModal" :loadScdId="loadScdId" @iedBack="iedBack"
+                @iedArrBack="iedArrBack"></CheckIed>
         </div>
         </div>
     </div>
     </div>
 </template>
 </template>
@@ -113,6 +127,7 @@ import cid from '@/api/cid/cid';
 import LookScd from '../modalComp/LookScd.vue';
 import LookScd from '../modalComp/LookScd.vue';
 import ModelTree from '../modalComp/ModelTree.vue';
 import ModelTree from '../modalComp/ModelTree.vue';
 import FlashCreate from '../modalComp/FlashCreate.vue';
 import FlashCreate from '../modalComp/FlashCreate.vue';
+import CheckIed from '../modalComp/CheckIed.vue';
 import { ElMessage, ElLoading } from 'element-plus';
 import { ElMessage, ElLoading } from 'element-plus';
 export default {
 export default {
     props: {
     props: {
@@ -165,6 +180,16 @@ export default {
         let fcModal = ref(false)//创建变电站模态框
         let fcModal = ref(false)//创建变电站模态框
         let scdLoading = ref(false)//上传scd文件后进行分析
         let scdLoading = ref(false)//上传scd文件后进行分析
         let loadScdId = ref(0)//上传成功后拿到的scdid
         let loadScdId = ref(0)//上传成功后拿到的scdid
+        let successScd = ref(false)//保存任务后继续选择的间隔模型
+        let iedModal = ref(false)//checkied.vue模态框状态
+        let loadAreaId = ref("")
+        let iedName = ref("")//一串ied名称字符串
+        let iedLoading = ref(false)//加载ied
+        let anyProps = ref({
+            label: "area_name",
+            id: "area_id",
+        })
+        let anyData = ref([])
         function searchAllFlash() {
         function searchAllFlash() {
             flashPower.getAllArea({}).then(res => {
             flashPower.getAllArea({}).then(res => {
                 flashPower.getAllFlashPower({ pid: res.data[0].pid }).then(res => {
                 flashPower.getAllFlashPower({ pid: res.data[0].pid }).then(res => {
@@ -183,6 +208,7 @@ export default {
         //变电站下拉框change事件
         //变电站下拉框change事件
         function flashChange(e) {
         function flashChange(e) {
             // searchScd(e)
             // searchScd(e)
+            newMission.value.flashId = e
         }
         }
         function bmChange(e) {
         function bmChange(e) {
             newMission.value.reportNow = e.id
             newMission.value.reportNow = e.id
@@ -213,7 +239,7 @@ export default {
         function saveMent() {//保存检测任务
         function saveMent() {//保存检测任务
             task.createTask({
             task.createTask({
                 name: newMission.value.misName,
                 name: newMission.value.misName,
-                station_id: 861,
+                station_id: newMission.value.flashId - 0,
                 memo: newMission.value.misMes,
                 memo: newMission.value.misMes,
                 report_id: newMission.value.reportNow - 0,
                 report_id: newMission.value.reportNow - 0,
                 scd_id: loadScdId.value - 0,
                 scd_id: loadScdId.value - 0,
@@ -225,8 +251,11 @@ export default {
                         type: "success"
                         type: "success"
                     })
                     })
                     // emit("createBack", 0)
                     // emit("createBack", 0)
-                    scd.getLoadScd({scd_id:loadScdId.value-0}).then(res=>{
-                        console.log(res,'rsssss');
+                    scd.getLoadScd({ scd_id: loadScdId.value - 0 }).then(res => {
+                        if (res.code == 0) {
+                            successScd.value = true
+                            anyData.value = res.data
+                        }
                     })
                     })
                 }
                 }
             })
             })
@@ -253,6 +282,47 @@ export default {
                 })
                 })
             })
             })
         }
         }
+        function handleCheckChange(e) {
+            loadAreaId.value = e.area_id
+            iedLoading.value = true
+            scd.getTikIed({ scd_id: loadScdId.value - 0, area_id: e.area_id - 0 }).then(res => {
+                if (res.data != null) {
+                    mx.value = res.data
+                    iedName.value = mx.value.map(item => item.ied_name).join(',')
+                    iedLoading.value = false
+                } else {
+                    mx.value = []
+                    iedLoading.value = false
+                }
+            })
+        }
+        function iedSave() {
+            scd.stickIed({ scd_id: loadScdId.value - 0, area_id: loadAreaId.value - 0, ied_ids: iedName.value }).then(res => {
+                console.log(res, 'res');
+                if (res.code == 0) {
+                    ElMessage({
+                        type: "success",
+                        message: "添加ied成功!",
+                        duration: 1500,
+                    })
+                    emit("createBack", 0)
+                } else {
+                    ElMessage({
+                        type: "error",
+                        message: res.msg,
+                        duration: 1500,
+                    })
+                }
+            })
+        }
+        function tagClose(row, num) {
+           mx.value.splice(mx.value.indexOf(row), 1)
+           iedName.value = mx.value.map(item => item.ied_name).join(', ');
+           console.log(iedName,'iedname');
+        }
+        function checkTime() {
+            iedModal.value = true
+        }
         function addFlash() {
         function addFlash() {
             fcModal.value = true
             fcModal.value = true
         }
         }
@@ -267,7 +337,7 @@ export default {
         }
         }
         function treeNum(data, name) {
         function treeNum(data, name) {
             mxId.value = data
             mxId.value = data
-            mx.value = name
+            // mx.value = name
             cmodel.value = name.toString()
             cmodel.value = name.toString()
         }
         }
         function lookNum(name, id) {
         function lookNum(name, id) {
@@ -280,6 +350,14 @@ export default {
         function fcBack(data) {
         function fcBack(data) {
             fcModal.value = data
             fcModal.value = data
         }
         }
+        function iedBack(data) {
+            iedModal.value = data
+        }
+        function iedArrBack(data) {
+            mx.value = mx.value.concat(data)
+            iedName.value = mx.value.map(item => item.ied_name).join(', ');
+        }
+
         onMounted(() => {
         onMounted(() => {
             searchAllFlash()
             searchAllFlash()
         })
         })
@@ -307,7 +385,6 @@ export default {
             mxList,//模型列表
             mxList,//模型列表
             treeNum,//modelTree.vue返回的id函数
             treeNum,//modelTree.vue返回的id函数
             mxId,//模型id
             mxId,//模型id
-            lookNum,//lookscd.vue返回的scd名称和id函数
             rmList,//报告模板列表
             rmList,//报告模板列表
             scdId,//lookscd.vue返回的数据
             scdId,//lookscd.vue返回的数据
             scdName,//lookscd.vue返回的数据
             scdName,//lookscd.vue返回的数据
@@ -320,13 +397,27 @@ export default {
             fcBack,//flashcreate.vue返回的模态框值
             fcBack,//flashcreate.vue返回的模态框值
             nowUpload,//文件上传
             nowUpload,//文件上传
             scdLoading,
             scdLoading,
-            loadScdId//上传成功后拿到的scdid
+            loadScdId,//上传成功后拿到的scdid
+            successScd,//保存任务后继续选择的间隔模型
+            handleCheckChange,//树形组件
+            anyData,
+            anyProps,
+            iedModal,//checkied.vue模态框状态
+            iedBack,//checkied.vue返回模态框状态
+            checkTime,//打开选择ied
+            iedArrBack,//checkied.vue返回选择数组
+            tagClose,
+            loadAreaId,//area_id
+            iedSave,//保存ied状态
+            iedName,//一串ied字符串
+            iedLoading,
         }
         }
     },
     },
     components: {
     components: {
         LookScd,
         LookScd,
         ModelTree,//选择模型
         ModelTree,//选择模型
         FlashCreate,//创建变电站
         FlashCreate,//创建变电站
+        CheckIed,//选择ied
     }
     }
 }
 }
 </script>
 </script>
@@ -396,4 +487,8 @@ em {
     text-align: center;
     text-align: center;
     line-height: 30px;
     line-height: 30px;
 }
 }
+.mx-1{
+    margin-right: 10px;
+    border: 1px solid #5779D7;
+}
 </style>
 </style>

+ 27 - 16
src/pages/mission/components/HaveMis.vue

@@ -17,24 +17,24 @@
         </div>
         </div>
         <div style="display: flex;justify-content: flex-start;align-items: center;overflow-x: auto;">
         <div style="display: flex;justify-content: flex-start;align-items: center;overflow-x: auto;">
           <!-- <template> -->
           <!-- <template> -->
-          <div class="intBox" v-for="(item,index) in misList" :style="{ 'background-image': `url(${imgBack})` }">
-            <div class="intBoxOne">
+          <div class="intBox" v-for="(item,index) in misList">
+            <div class="intBoxOne"> 
               <p class="intOne">
               <p class="intOne">
-                <span>{{ item.name }}</span>
-                <span>详情→</span>
+                <span style="font-size: 18px;color: #1A2447;">{{ item.name }}</span>
+                <span style="font-size: 12px;" @click="deldel(item,index)">删除</span>
               </p>
               </p>
               <p>
               <p>
-                <img src="../../../assets/icon/white_flash.png" alt="" />
-                <span class="commonSpan">{{ item.station_name }}</span>
+                <!-- <img src="../../../assets/icon/white_flash.png" alt="" /> -->
+                <span style="font-size: 12px;color:#7484AB" class="commonSpan">{{ item.station_name }}</span>
               </p>
               </p>
               <p>
               <p>
-                <img src="../../../assets/icon//white_clock.png" alt="" />
-                <span class="commonSpan">{{ item.ut }}</span>
+                <!-- <img src="../../../assets/icon//white_clock.png" alt="" /> -->
+                <span style="font-size: 12px;color:#7484AB" class="commonSpan">{{ item.ut }}</span>
               </p>
               </p>
             </div>
             </div>
             <!-- 点击检测 -->
             <!-- 点击检测 -->
             <div class="setNow">
             <div class="setNow">
-              <span class="setnowspan" @click="startNow(item,index)">立即检测</span>
+              <span style="font-size: 16px;color:blue" class="setnowspan" @click="startNow(item,index)">立即检测</span>
             </div>
             </div>
           </div>
           </div>
           <!-- </template> -->
           <!-- </template> -->
@@ -120,6 +120,11 @@ export default {
         console.log(res,'正在');
         console.log(res,'正在');
       })
       })
     }
     }
+    function deldel(row){
+      task.delTask({id:row.id}).then(res=>{
+        getList()
+      })
+    }
     onMounted(()=>{
     onMounted(()=>{
       getList()
       getList()
     })
     })
@@ -131,6 +136,7 @@ export default {
       goNetStructPicture,
       goNetStructPicture,
       getList,
       getList,
       misList,
       misList,
+      deldel,
     };
     };
   },
   },
 };
 };
@@ -214,7 +220,11 @@ p {
   line-height: 20px;
   line-height: 20px;
   background-repeat: no-repeat;
   background-repeat: no-repeat;
   background-size: 100% 100%;
   background-size: 100% 100%;
-  margin-right: 5px;
+  margin: 15px 15px;
+  /* border: 1px solid #255ce7; */
+  background-color: #F6F9FF;
+  border-radius: 5px;
+  box-shadow: inset 0px -3px 3px 0px #C8D4EC;
   /* border: 1px solid brown; */
   /* border: 1px solid brown; */
   /* background-image: url(../../../assets/image/card_blue.png); */
   /* background-image: url(../../../assets/image/card_blue.png); */
 }
 }
@@ -222,22 +232,24 @@ p {
 .intBoxOne {
 .intBoxOne {
   padding-top: 5px;
   padding-top: 5px;
 }
 }
-
+.intOne{
+  position: relative;
+}
 .intOne span:nth-child(2) {
 .intOne span:nth-child(2) {
-  margin-left: 70px;
+  /* margin-left: 70px; */
   font-size: 14px;
   font-size: 14px;
-  color: white;
+  position: absolute;
+  top: 0px;
+  right: 10px;
 }
 }
 
 
 .intOne span:nth-child(1) {
 .intOne span:nth-child(1) {
   margin-left: 5px;
   margin-left: 5px;
   font-size: 18px;
   font-size: 18px;
-  color: white;
 }
 }
 
 
 .commonSpan {
 .commonSpan {
   font-size: 14px;
   font-size: 14px;
-  color: white;
 }
 }
 
 
 .setNow {
 .setNow {
@@ -246,7 +258,6 @@ p {
 }
 }
 
 
 .setnowspan {
 .setnowspan {
-  color: white;
   font-size: 17px;
   font-size: 17px;
   cursor: pointer;
   cursor: pointer;
 }
 }

+ 156 - 0
src/pages/mission/components/HistoryMis.vue

@@ -0,0 +1,156 @@
+<template>
+    <div style="margin-left: 20px;position: relative;">
+        <div style="display: flex;justify-content: flex-start;align-items: center;">
+            <div style="margin-right: 20px;">
+                <span>名称:</span>
+                <el-input v-model="names" style="width: 200px;" placeholder="请输入名称"></el-input>
+            </div>
+            <div style="margin-right: 20px;">
+                <span>时间:</span>
+                <el-date-picker v-model="getTime" @change="timeChange" type="datetimerange" start-placeholder="开始时间"
+                    end-placeholder="结束时间" format="YYYY-MM-DD HH:mm:ss" date-format="YYYY/MM/DD ddd"
+                    time-format="A hh:mm:ss" />
+            </div>
+            <div>
+                <el-button @click="searchMis" type="primary">查询</el-button>
+                <el-button @click="reload">重置</el-button>
+            </div>
+        </div>
+        <div>
+            <el-table :data="tableData" style="width: 98%" stripe>
+                <el-table-column fixed label="序号" width="150">
+                    <template #default="scope">
+                        {{ scope.$index + 1 }}
+                    </template>
+                </el-table-column>
+                <el-table-column prop="name" label="任务名称" width="200" />
+                <el-table-column label="状态" width="120">
+                    <template #default="scoped">
+                        {{ filterState(scoped.row.state) }}
+                    </template>
+                </el-table-column>
+                <el-table-column prop="ct" label="创建时间" width="200" />
+                <el-table-column prop="scd_name" label="SCD名称" width="auto" />
+                <el-table-column prop="station_name" label="变电站" width="120" />
+                <el-table-column prop="username" label="创建人" width="120" />
+                <el-table-column prop="voltage_name" label="电压等级" width="120" />
+                <el-table-column fixed="right" label="操作" width="120">
+                    <template #default="scoped">
+                        <el-popconfirm title="你确定删除吗?" @confirm="sureDelMis">
+                            <template #reference>
+                                <el-button link type="primary" size="small" @click="delMis(scoped.row)">删除</el-button>
+                            </template>
+                        </el-popconfirm>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <div>
+            <PageNation :totals="totals" :pageNum="pageNum" :pageSize="pageSize" @pageBack="pageBack"
+                style="position: absolute;top: 750px;right: 50px;"></PageNation>
+        </div>
+    </div>
+</template>
+
+<script>
+import { ref, onMounted, watch, toRefs } from 'vue';
+import moment from 'moment';
+import PageNation from './PageNation.vue';
+import task from '@/api/task';
+import { ElMessage } from 'element-plus';
+export default {
+    setup() {
+        let tableData = ref([])//表格内容
+        let pageNum = ref(1)//页码
+        let pageSize = ref(10)//页数
+        let totals = ref(0)//总数
+        let getTime = ref('')//时间选择器
+        let startTime = ref("")//开始时间
+        let endTime = ref("")//结束时间
+        let names = ref('')//根据名称
+        let delId = ref(0)//需要删除的id
+        function reload() {
+            task.getTask({ pageno: 1, pagesize: 20 }).then(res => {
+                tableData.value = res.data
+                totals.value = res.count
+            })
+        }
+        function filterState(num) {
+            if (num == 0) {
+                return "未检测"
+            } else if (num == 1) {
+                return "检测中"
+            } else if (num == 2) {
+                return "检测结束"
+            } else if (num == 3) {
+                return "检测中断"
+            }
+        }
+        function searchMis() {
+            task.getTask({
+                pageno: 1,
+                pagesize: 20,
+                name: names.value,
+                start_time: startTime.value,
+                end_time: endTime.value
+            }).then(res => {
+                tableData.value = res.data
+            })
+        }
+        function timeChange(e) {
+            if (e == null) {
+                return
+            } else {
+                let a = moment(e[0]).format("YYYY-MM-DD")//开始时间
+                let b = moment(e[1]).format("YYYY-MM-DD")//结束时间
+                startTime.value = a
+                endTime.value = b
+            }
+        }
+        function delMis(e) {
+            delId.value = e.id
+        }
+        function sureDelMis() {
+            task.delTask({
+                id: delId.value - 0
+            }).then(res => {
+                if (res.code == 0) {
+                    ElMessage({
+                        type: "success",
+                        message: "删除成功"
+                    })
+                    reload()
+                }
+            })
+        }
+        function pageBack(data) {
+            tableData.value = data
+        }
+        onMounted(() => {
+            reload()
+        })
+        return {
+            reload,//初始化组件
+            tableData,//表格数据
+            filterState,//筛选状态
+            totals,
+            pageNum,
+            pageSize,
+            pageBack,//分页组件返回数据
+            getTime,
+            names,
+            searchMis,//查询按钮
+            timeChange,//时间选择器change事件
+            startTime,//开始时间
+            endTime,//结束时间
+            delMis,//删除任务
+            sureDelMis,//确认删除
+        }
+    },
+    components: {
+        PageNation,
+    }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 77 - 0
src/pages/mission/components/PageNation.vue

@@ -0,0 +1,77 @@
+<template>
+    <div>
+        <el-pagination v-model:current-page="currentPage" v-model:page-size="pageSize" :page-sizes="[10, 20, 30, 40]"
+            :small="small" :disabled="disabled" :background="background" layout="total, sizes, prev, pager, next, jumper"
+            :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+    </div>
+</template>
+
+<script>
+import { ref, onMounted, toRefs, watch } from 'vue'
+import task from '@/api/task'
+export default {
+    props: {
+        totals: {
+            type: Number,
+            required: true,
+        },
+        pageNum: {
+            type: Number,
+            required: true
+        },
+        pageSize: {
+            type: Number,
+            required: true
+        }
+    },
+    setup(props, { emit }) {
+        let currentPage = ref(1)//页码
+        let pageSize = ref(10)//页数
+        let small = ref(false)
+        let disabled = ref(false)
+        let background = ref(false)
+        let total = ref(100)//总数
+        function reload() {
+            currentPage.value = props.pageNum
+            pageSize.value = props.pageSize
+            total.value = props.totals
+        }
+        function handleSizeChange(e) {//每页条数
+            pageSize.value = e
+            task.getTask({
+                pageno: currentPage.value - 0,
+                pagesize: pageSize.value - 0
+            }).then(res => {
+                total.value = res.count
+                emit("pageBack",res.data)
+            })
+        }
+        function handleCurrentChange(e) {//页码
+            currentPage.value = e
+            task.getTask({
+                pageno: currentPage.value - 0,
+                pagesize: pageSize.value - 0
+            }).then(res => {
+                total.value = res.count
+                emit("pageBack",res.data)
+            })
+        }
+        onMounted(() => {
+            reload()
+        })
+        return {
+            currentPage,
+            pageSize,
+            small,
+            disabled,
+            background,
+            total,
+            reload,
+            handleCurrentChange,
+            handleSizeChange,
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 90 - 0
src/pages/mission/modalComp/CheckIed.vue

@@ -0,0 +1,90 @@
+<template>
+    <div>
+        <el-dialog v-model="dialogVisible" draggable title="选择ied" width="30%" @close="sureclose">
+            <el-tree :data="treeList" :props="treeProps" @check-change="handleNodeClick" show-checkbox
+                style="height: 300px;overflow-y: auto;" />
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="cleanBox">取消</el-button>
+                    <el-button type="primary" @click="sureArr">
+                        确认
+                    </el-button>
+                </span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import { ref, onMounted, watch, onBeforeUnmount, toRefs } from 'vue';
+import scd from '@/api/scd';
+export default {
+    props: {
+        iedModal: {
+            type: Boolean,
+            required: true
+        },
+        loadScdId: {
+            type: Number || String,
+            required: true
+        }
+    },
+    setup(props, { emit }) {
+        let dialogVisible = ref(false)
+        let resultId = ref(0)
+        let treeList = ref([])
+        let checkArr = ref([])
+        let treeProps = ref({
+            label: "ied_name",
+            id: "area_id",
+        })
+        watch(() => props.loadScdId, (newVal) => {
+            resultId.value = newVal
+        })
+        function reload() {
+            dialogVisible.value = props.iedModal
+            resultId.value = props.loadScdId
+            scd.scdAllIed({ scd_id: resultId.value - 0 }).then(res => {
+                treeList.value = res.data
+            })
+        }
+        function modalClose() {
+            dialogVisible.value = false
+            emit("iedBack", dialogVisible.value)
+        }
+        function modalSure() {
+            emit("iedArrBack", checkArr.value);
+            dialogVisible.value = false
+            emit("iedBack", dialogVisible.value)
+        }
+        function handleNodeClick(e) {
+            const existingIndex = checkArr.value.findIndex(item => item.id === e.id);
+            if (existingIndex === -1) {
+                // 如果 e.id 不在 checkArr 中,则将 e 添加到 checkArr
+                checkArr.value.push(e);
+            } else {
+                // 如果 e.id 已经在 checkArr 中,则从 checkArr 中删除
+                checkArr.value.splice(existingIndex, 1);
+            }
+           
+        }
+
+        onMounted(() => {
+            reload()
+        })
+        return {
+            reload,
+            dialogVisible,
+            sureclose: modalClose,
+            cleanBox: modalClose,
+            sureArr: modalSure,
+            treeList,
+            treeProps,
+            handleNodeClick,
+            checkArr,
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 3 - 3
src/pages/netStructPicture/components/CidTree.vue

@@ -78,7 +78,7 @@ export default {
         function tagClick(row, num) {
         function tagClick(row, num) {
             tagChoose.value = num
             tagChoose.value = num
             cid.findFile({
             cid.findFile({
-                scd_id: 300000082,
+                scd_id: 488000132,
                 ied_name: row.desc,
                 ied_name: row.desc,
                 pageno: 1,
                 pageno: 1,
                 pagesize: 10,
                 pagesize: 10,
@@ -90,7 +90,7 @@ export default {
                 pageindex: 1,
                 pageindex: 1,
                 pagesize: 10,
                 pagesize: 10,
                 station_id: 861,
                 station_id: 861,
-                scd_id: 300000082,
+                scd_id: 488000132,
                 is_checkin: 2,
                 is_checkin: 2,
                 ied_name: row.ied_name
                 ied_name: row.ied_name
             }).then(res => {
             }).then(res => {
@@ -106,7 +106,7 @@ export default {
             console.log(e, 'eee');
             console.log(e, 'eee');
         }
         }
         onMounted(() => {
         onMounted(() => {
-            cid.getAll({ scd_id: 300000082, ied_name: "" }).then(res => {
+            cid.getAll({ scd_id: 488000132, ied_name: "" }).then(res => {
                 tagList.value = res.data
                 tagList.value = res.data
             })
             })
         })
         })

+ 12 - 5
src/utils/request.js

@@ -1,8 +1,8 @@
 import axios from 'axios'
 import axios from 'axios'
 // import md5 from 'js-md5'
 // import md5 from 'js-md5'
-import { Message } from 'element-plus'
+import { ElMessage } from 'element-plus'
 import vue from "vue"
 import vue from "vue"
-import router from '@/router'
+import { useRouter } from 'vue-router'
 // 请求url
 // 请求url
 const service = axios.create({
 const service = axios.create({
     // baseURL: window.STATIC_CONFIG.proxyUrl, // url = base url + request url
     // baseURL: window.STATIC_CONFIG.proxyUrl, // url = base url + request url
@@ -76,13 +76,20 @@ service.interceptors.response.use(
         return res
         return res
     },
     },
     error => {
     error => {
-        // console.log(error,'相应拦截器error');
+        console.log(error,'相应拦截器error');
+        if(error.code == "ERR_NETWORK"){
+            ElMessage({
+                type:"error",
+                message:"网络错误,请重新登录",
+            })
+            useRouter().push("/login")
+        }
         if (error.response.status === 401) {
         if (error.response.status === 401) {
-            Message({
+            ElMessage({
                 message: "登陆已过期,请重新登录",
                 message: "登陆已过期,请重新登录",
                 type: "error"
                 type: "error"
             })
             })
-            router.push("/login")
+            useRouter().push("/login")
             sessionStorage.removeItem('userInfo')
             sessionStorage.removeItem('userInfo')
             sessionStorage.removeItem('userToken')
             sessionStorage.removeItem('userToken')
         }
         }