|  | @@ -57,10 +57,7 @@
 | 
	
		
			
				|  |  |          style="width: 100%"
 | 
	
		
			
				|  |  |          v-loading="loading"
 | 
	
		
			
				|  |  |          element-loading-text="Loading..."
 | 
	
		
			
				|  |  | -        :element-loading-spinner="svg"
 | 
	
		
			
				|  |  | -        element-loading-svg-view-box="-10, -10, 50, 50"
 | 
	
		
			
				|  |  |          element-loading-background="rgba(0, 10, 0, 0.1)"
 | 
	
		
			
				|  |  | -        @size-change="handleSizeChange"
 | 
	
		
			
				|  |  |          :row-class-name="tableRowClassName"
 | 
	
		
			
				|  |  |          :header-cell-style="{'background':' #375A88'}"
 | 
	
		
			
				|  |  |         @select="projectsSelectionSelect"
 | 
	
	
		
			
				|  | @@ -84,7 +81,6 @@
 | 
	
		
			
				|  |  |      layout="prev, total,pager, next, jumpe,"      
 | 
	
		
			
				|  |  |      :total="parseInt(total)"
 | 
	
		
			
				|  |  |      class="mt-4"
 | 
	
		
			
				|  |  | -    @size-change="handleSizeChange2"
 | 
	
		
			
				|  |  |      @current-change="handleCurrentChange2"
 | 
	
		
			
				|  |  |    />
 | 
	
		
			
				|  |  |    </div>
 | 
	
	
		
			
				|  | @@ -153,7 +149,6 @@
 | 
	
		
			
				|  |  |          <template #title>
 | 
	
		
			
				|  |  |              <el-icon class="iconimg Frame2" fit="contain" ></el-icon>  
 | 
	
		
			
				|  |  |            火灾<el-icon class="header-icon">
 | 
	
		
			
				|  |  | -            <info-filled />
 | 
	
		
			
				|  |  |            </el-icon>
 | 
	
		
			
				|  |  |          </template>
 | 
	
		
			
				|  |  |          <div class="asides_content">
 | 
	
	
		
			
				|  | @@ -254,7 +249,6 @@
 | 
	
		
			
				|  |  |          <template #title>
 | 
	
		
			
				|  |  |              <el-icon class="iconimg Frame3" fit="contain" ></el-icon>  
 | 
	
		
			
				|  |  |            突水<el-icon class="header-icon">
 | 
	
		
			
				|  |  | -            <info-filled />
 | 
	
		
			
				|  |  |            </el-icon>
 | 
	
		
			
				|  |  |          </template>
 | 
	
		
			
				|  |  |          <div class="asides_content">
 | 
	
	
		
			
				|  | @@ -353,7 +347,14 @@ const props= defineProps({
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   });
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | + let websock=ref(null);
 | 
	
		
			
				|  |  | + let times=ref({
 | 
	
		
			
				|  |  | +      lockReconnect: false, //是否真正建立连接
 | 
	
		
			
				|  |  | +      timeout: 28 * 1000, //30秒一次心跳
 | 
	
		
			
				|  |  | +      timeoutObj: null, //心跳倒计时
 | 
	
		
			
				|  |  | +      serverTimeout0bj: null, //
 | 
	
		
			
				|  |  | +      timeoutnum: null, //断开重连倒计时
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  |   let zqname=ref({});
 | 
	
		
			
				|  |  |   let shiguobj=ref({
 | 
	
		
			
				|  |  |          source:'自荐',
 | 
	
	
		
			
				|  | @@ -547,9 +548,6 @@ aid.value=val.aid;
 | 
	
		
			
				|  |  |  idobj.value.name=val.name;
 | 
	
		
			
				|  |  |  idobj.value.time=val.time;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function handleSizeChange2(val) {
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  |  function handleCurrentChange2(val){ 
 | 
	
		
			
				|  |  |      currentPage4.value=val;
 | 
	
		
			
				|  |  |      getdata();
 | 
	
	
		
			
				|  | @@ -692,6 +690,107 @@ const calculate=()=>{
 | 
	
		
			
				|  |  |              ElMessage.error(err.returnMsg)
 | 
	
		
			
				|  |  |            })
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +const projectsSelectionSelect=()=>{
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +// 日志
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function initWebSocket() {
 | 
	
		
			
				|  |  | +      //初始化weosocket
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // const wsuri = "ws://192.168.0.43:8087//websocket?projectId="+this.pid; ws://192.168.0.131/diswebsocket?projectId=5
 | 
	
		
			
				|  |  | +      const wsurl =
 | 
	
		
			
				|  |  | +        "ws://" +
 | 
	
		
			
				|  |  | +        process.env.VUE_APP_BASE_websokt +
 | 
	
		
			
				|  |  | +        "/diswebsocket?projectId=" +'5'
 | 
	
		
			
				|  |  | +        // aid.value;
 | 
	
		
			
				|  |  | +        websock = new WebSocket(wsurl);
 | 
	
		
			
				|  |  | +        websock.onopen = websocketonopen;
 | 
	
		
			
				|  |  | +        websock.onmessage = websocketonmessage;
 | 
	
		
			
				|  |  | +        websock.onerror = websocketonerror;
 | 
	
		
			
				|  |  | +        websock.onclose = websocketclose;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | + 	// Websoket连接成功事件
 | 
	
		
			
				|  |  | +   const websocketonopen = (res) => {
 | 
	
		
			
				|  |  | +      console.log("WebSocket连接成功", res);
 | 
	
		
			
				|  |  | +      start();
 | 
	
		
			
				|  |  | +      beginprocess();
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    // Websoket接收消息事件
 | 
	
		
			
				|  |  | +    const websocketonmessage = (res) => {
 | 
	
		
			
				|  |  | +     // console.log("数据", res);
 | 
	
		
			
				|  |  | +      logs.value=res.data;
 | 
	
		
			
				|  |  | +      emit('getthislog',logs.value);
 | 
	
		
			
				|  |  | +      if(res.data.includes("Simulating")){
 | 
	
		
			
				|  |  | +        let  data=res.data.replace(/\s/g, "");
 | 
	
		
			
				|  |  | +      console.log(data);
 | 
	
		
			
				|  |  | +        let num=data.match(/hour(\S*)minute/)[1];///hour(\S*)minut/
 | 
	
		
			
				|  |  | +        console.log(num)
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      reset();
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    // Websoket连接错误事件
 | 
	
		
			
				|  |  | +    const websocketonerror = (res) => {
 | 
	
		
			
				|  |  | +      console.log("连接错误", res);
 | 
	
		
			
				|  |  | +      socket.close();
 | 
	
		
			
				|  |  | +      reconnect();
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    // Websoket断开事件
 | 
	
		
			
				|  |  | +    const websocketclose = (res) => {
 | 
	
		
			
				|  |  | +      console.log("断开连接", res);
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +      // 创建 websocket 的实例
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +     // 心跳包
 | 
	
		
			
				|  |  | +     const reconnect = () => {
 | 
	
		
			
				|  |  | +      if (times.value.lockReconnect) return;
 | 
	
		
			
				|  |  | +      times.value.lockReconnect = true;
 | 
	
		
			
				|  |  | +      //没连接上会一直重连,设置延迟避免请求过多
 | 
	
		
			
				|  |  | +      times.value.timeoutnum && clearTimeout(times.value.timeoutnum);
 | 
	
		
			
				|  |  | +      times.value.timeoutnum = setTimeout(function () {
 | 
	
		
			
				|  |  | +        //新连接
 | 
	
		
			
				|  |  | +     initWebSocket();
 | 
	
		
			
				|  |  | +        times.value.lockReconnect = false;
 | 
	
		
			
				|  |  | +      }, 10000);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    const  reset = () => {
 | 
	
		
			
				|  |  | +      //重置心跳
 | 
	
		
			
				|  |  | +      clearTimeout(times.value.timeoutObj);
 | 
	
		
			
				|  |  | +      clearTimeout(times.value.serverTimeoutObj);
 | 
	
		
			
				|  |  | +    start();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    const start = () => {
 | 
	
		
			
				|  |  | +      //开启心跳
 | 
	
		
			
				|  |  | +      times.value.timeoutObj && clearTimeout(times.value.timeoutObj);
 | 
	
		
			
				|  |  | +      times.value.serverTimeoutObj && clearTimeout(times.value.serverTimeoutObj);
 | 
	
		
			
				|  |  | +      times.value.timeoutObj = setTimeout(function () {
 | 
	
		
			
				|  |  | +        //这里发送一个心跳,后端收到后,返回一个心跳消息
 | 
	
		
			
				|  |  | +        if (websock.readyState == 1) {
 | 
	
		
			
				|  |  | +          //如果连接正常
 | 
	
		
			
				|  |  | +         websock.send("heartCheck");
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          //否则重连
 | 
	
		
			
				|  |  | +          reconnect();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        times.value.serverTimeoutObj = setTimeout(function () {
 | 
	
		
			
				|  |  | +          // 超时关闭
 | 
	
		
			
				|  |  | +          websock.close(); //如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
 | 
	
		
			
				|  |  | +        }, times.value.timeout);
 | 
	
		
			
				|  |  | +      }, times.value.timeout);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +   onMounted(()=>{
 | 
	
		
			
				|  |  | +    init();
 | 
	
		
			
				|  |  | +   //getdata();
 | 
	
		
			
				|  |  | +   })
 | 
	
		
			
				|  |  | +       // 组件被销毁之前,清空 sock 对象
 | 
	
		
			
				|  |  | +   onBeforeUnmount(() => {
 | 
	
		
			
				|  |  | +      // 关闭连接
 | 
	
		
			
				|  |  | +      websocketclose;
 | 
	
		
			
				|  |  | +      // 销毁 websocket 实例对象
 | 
	
		
			
				|  |  | +      websock.value = null;
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  onMounted(() => {
 | 
	
		
			
				|  |  |  });
 | 
	
		
			
				|  |  |  
 |