Ver código fonte

新增删除间隔列表,新增还有问题

“yueshang” 1 ano atrás
pai
commit
9baa5723d7

+ 1 - 1
public/index.html

@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <html lang="">
-<script src="./SmCrypto.min.js"></script>
+<!-- <script src="./SmCrypto.min.js"></script> -->
 
 <head>
   <meta charset="utf-8">

+ 17 - 0
src/api/task.js

@@ -59,6 +59,21 @@ function reladyTask(data){
         data
     })
 }
+//新增间隔列表
+function intervalAdd(data){
+    return request({
+        url:`/admin/new/check_area`,
+        method:"post",
+        data
+    })
+}
+function intervalDel(data){
+    return request({
+        url:`/admin/del/check_area`,
+        method:"post",
+        data
+    })
+}
 export default {
     getTask,
     tackStart,
@@ -68,4 +83,6 @@ export default {
     lookStep,
     getTaskById,
     reladyTask,
+    intervalAdd,
+    intervalDel
 }

BIN
src/assets/image/Close.png


+ 11 - 2
src/pages/login/LoginNow.vue

@@ -65,7 +65,7 @@ export default {
     let timer = ref(null); //添加防抖,防止用户多次点击
     function encryptPassword(password) {
       if (typeof SmCrypto == "undefined") {
-        window.location.reload();
+        // window.location.reload();
       } else {
         let val = SmCrypto.doSm3AndSm2Encrypt(password) + "0000";
         let ascCode = 0;
@@ -105,6 +105,7 @@ export default {
           pwd: kis,
         })
         .then((res) => {
+          console.log("res==", res);
           if (res.returncode === 200) {
             isLogin.value = true;
             sessionStorage.setItem("loginStatus", isLogin.value);
@@ -146,8 +147,16 @@ export default {
     function WinMin() {
       windowEx.Min();
     }
-    onMounted(() => {
+    onMounted(async () => {
       window.addEventListener("keyup", handleKeyUp);
+      // 异步加载SmCrypto.min.js,避免二次登录 的问题,页面刷新导致sm重新加载,没有再次初始化的问题
+      await new Promise((resolve, reject) => {
+        const script = document.createElement("script");
+        script.src = "./SmCrypto.min.js";
+        script.onload = resolve;
+        script.onerror = reject;
+        document.head.appendChild(script);
+      });
     });
     onBeforeUnmount(() => {
       window.removeEventListener("keyup", handleKeyUp);

+ 136 - 22
src/pages/mission/components/CreateMis.vue

@@ -141,7 +141,7 @@
         </el-form>
       </div>
       <!-- 间隔、装置列表 -->
-      <div style="margin-top: 10px">
+      <div >
         <el-button class="backs" @click="backMent">返回</el-button>
         <el-button
           style="width: 124px; height: 30px; background: #255ce7"
@@ -154,22 +154,29 @@
         <!-- 间隔列表 -->
         <div class="gapBox">
           <div
-            style="
-              display: flex;
-              justify-content: flex-start;
-              align-items: center;
-              margin: 5px;
-            "
+            class="interval"
+            style="justify-content: space-between; margin: 5px"
           >
-            <div>
+            <div class="interval">
               <img
                 src="../../../assets/icon/DotsNine.png"
                 alt=""
+                class="img-interval"
                 style="vertical-align: middle"
               />
+              <span
+                style="
+                  font-size: 16px;
+                  font-weight: 400;
+                  height: 24px;
+                  line-height: 24px;
+                  margin-left: 5px;
+                "
+                >间隔列表</span
+              >
             </div>
-            <div style="height: 24px; line-height: 22px; margin-left: 5px">
-              <span style="font-size: 16px; font-weight: 400">间隔列表</span>
+            <div class="img-interval border-r" @click="addInterval">
+              <img :src="addPng" class="img-interval" />
             </div>
           </div>
           <!-- <p :class="jgSelect == index ? 'result' : ''" v-for="(item, index) in jgList"
@@ -182,16 +189,26 @@
             :data="anyData"
             @node-click="handleCheckChange"
             node-key="id"
+            highlight-current
           >
             <template #default="{ node, data }">
-              <el-badge
-                v-if="data.isLog"
-                :value="data.filterLength"
-                class="item"
-              >
-                <span>{{ node.label }}</span>
-              </el-badge>
-              <span v-else>{{ node.label }}</span>
+              <div class="trees interval">
+                <el-badge
+                  v-if="data.isLog"
+                  :value="data.filterLength"
+                  class="item"
+                >
+                  <span>{{ node.label }}</span>
+                </el-badge>
+                <span v-else>{{ node.label }}</span>
+                <img
+                  v-if="loadAreaId == data.area_id"
+                  @click="delInterval(data)"
+                  :src="ClosePng"
+                  alt=""
+                  class="img-interval-child"
+                />
+              </div>
             </template>
           </el-tree>
         </div>
@@ -264,9 +281,10 @@
               @click="tagClick(item, index)"
               size="large"
               :class="item.isChoose ? 'mx-2' : 'mx-1'"
-              closable="true"
+              closable
               effect="plain"
-              @close="tagClose(item)"
+              @close="tagClose(item, index)"
+              style="cursor: pointer"
             >
               {{ "[" + item.ied_name + "]" + (item.attr_desc || "") }}
               <span style="color: rgb(112, 112, 210); font-weight: bold">{{
@@ -342,6 +360,8 @@ import CheckIed from "../modalComp/CheckIed.vue";
 import database from "@/assets/image/database.png";
 import clickChose from "@/assets/image/click_chose.png";
 import scdicon from "@/assets/image/scdicon.png";
+import addPng from "@/assets/image/scdcheck/add.png";
+import ClosePng from "@/assets/image/Close.png";
 import { ElMessage, ElMessageBox, ElLoading } from "element-plus";
 export default {
   props: {
@@ -465,6 +485,12 @@ export default {
                 treeNeedAry.push(item.sys_model_id);
                 return item.model_id;
               });
+              areaType.value = arr.join();
+          //     res.data.forEach(item=>{
+          //   arrType.push(item.area_id);
+          //   areaType.value = arrType.join();
+          // })
+              console.log('arr======', arr)
               newMission.value.cmodel = modelnames.join(",");
               mxId.value = arr;
               treeNeed.value = treeNeedAry;
@@ -482,12 +508,15 @@ export default {
         return;
       }
     }
+    const modelId = ref(null);
+    const areaType = ref('');
     function loadAreaInfo(scdid) {
       mx.value = [];
       iedLoading.value = true;
       scd.getLoadScd({ scd_id: scdid }).then((res) => {
         iedLoading.value = false;
         if (res.code == 0) {
+         
           successScd.value = true;
           if (res.data == null) {
             ElMessage({
@@ -496,6 +525,8 @@ export default {
             });
             return;
           }
+          modelId.value = res.data.length?res.data[0].model_id:null;
+          const arrType= [];
           anyData.value = res.data.map((item) => {
             //获取可能有问题的ied数量,比如没找到的装置
             let alertieds =
@@ -658,6 +689,7 @@ export default {
         });
     }
     function handleCheckChange(e) {
+      console.log("e====", e);
       jg.value = e.area_name;
       loadAreaId.value = e.area_id;
       flashLevel.value = e.model_name.split("]")[1];
@@ -754,12 +786,13 @@ export default {
         });
     }
     function tagClose(row, num) {
+      console.log("row", row, num);
       ElMessageBox.confirm(
         "确认从该间隔移除当前装置" + row.ied_name + "吗?",
         "删除装置"
       )
         .then(() => {
-          mx.value.splice(mx.value.indexOf(row), 1);
+          mx.value.splice(num, 1);
           iedName.value = mx.value.map((item) => item.ied_name).join(",");
         })
         .catch(() => {});
@@ -782,6 +815,7 @@ export default {
       emit("createBack", 0);
     }
     function treeBack(data) {
+      console.log('data', data)
       treeMool.value = data;
     }
     function modelOpen() {
@@ -789,6 +823,7 @@ export default {
     }
     //模型树选择返回的模型数据
     function treeNum(data, name) {
+      console.log('data=====', data)
       mxId.value = data;
       // cmodel.value = name.toString()
       newMission.value.cmodel = name.toString();
@@ -883,7 +918,57 @@ export default {
           // 用户点击取消或关闭对话框
         });
     }
-
+    //新增间隔
+    const addInterval = () => {
+      ElMessageBox.prompt("名称", "添加间隔", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        inputPattern: /.+/,
+        inputErrorMessage: "间隔名称不能为空",
+      })
+        .then(async ({ value }) => {
+          const types = mxId.value.filter(item=>item != undefined)
+          const data = {
+            area_name:value,
+            scd_id:loadScdId.value - 0,
+            model_id:modelId.value - 0,
+            area_type:types.join()
+          }
+          const res = await task.intervalAdd(data);
+          const meg =
+            res && res.code == 0
+              ? { type: "success", message: `添加成功` }
+              : { type: "error", message: `添加失败` };
+          ElMessage(meg);
+        })
+        .catch(() => {});
+    };
+    //删除间隔
+    const delInterval =  (data) => {
+      console.log('data', data)
+      ElMessageBox
+        .confirm(
+          `确认删除 [${data.area_name}] 间隔吗?`,
+          "提示",
+          {
+            confirmButtonText: "确认",
+            cancelButtonText: "取消",
+            type: "warning",
+          }
+        )
+        .then(async () => {
+          const res = await task.intervalDel({scd_id:loadScdId.value - 0,area_id :data.area_id});
+          const meg =
+            res && res.code == 0
+              ? { type: "success", message: `删除成功` }
+              : { type: "error", message: `删除失败` };
+          ElMessage(meg);
+          if(res && res.code == 0){
+            loadAreaInfo(loadScdId.value * 1);
+          }
+        })
+        .catch(() => {});
+    };
     onMounted(() => {
       searchAllFlash();
       reload();
@@ -958,6 +1043,10 @@ export default {
       database,
       clickChose,
       scdicon,
+      addPng,
+      addInterval, //添加间隔
+      delInterval,
+      ClosePng,
     };
   },
   components: {
@@ -1132,4 +1221,29 @@ em {
   box-shadow: inset 0px 2px 1px 0px rgba(255, 255, 255, 0.6),
     0px 2px 4px 0px rgba(138, 157, 205, 0.63);
 }
+.interval {
+  display: flex;
+  align-items: center;
+}
+.img-interval {
+  width: 20px;
+  height: 20px;
+}
+.img-interval-child {
+  width: 14px;
+  height: 14px;
+  border: 1px solid #e50505;
+  border-radius: 3px;
+}
+.border-r {
+  border: 1px solid #255ce7;
+  border-radius: 3px;
+}
+.trees {
+  width: 90%;
+  justify-content: space-between;
+  img {
+    margin-right: 3px;
+  }
+}
 </style>

+ 3 - 1
src/pages/mission/components/HistoryMis.vue

@@ -34,7 +34,7 @@
         :cell-style="{ height:'58px' }"
         stripe
       >
-        <el-table-column fixed label="序号" width="150">
+        <el-table-column fixed label="序号" width="60">
           <template #default="scope">
             {{ scope.$index + 1 }}
           </template>
@@ -74,6 +74,7 @@
               type="primary"
               size="small"
               @click="relady(scoped.row)"
+              style="color: #255CE7;"
               >重新检测</el-button
             >
             <el-button
@@ -82,6 +83,7 @@
               type="danger"
               size="small"
               @click="delMis(scoped.row)"
+              style="color: #E50505;"
               >删除</el-button
             >
             <!-- <el-button v-if="scoped.row.state == '2'" link type="primary" size="small"