项目中有些系统消息需要实时提醒,如果数据量不大的情况下可以考虑定时器。

页面效果

在这里插入图片描述

主要代码
<script>
    export default {
        data() {
            return {
                websocket: null,
            }
        },
    created(){
           //页面刚进入时开启长连接
            this.initWebSocket()
       },
    destroyed: function() {
       //页面销毁时关闭长连接
      this.websocketclose();
    },
    methods: { 
      initWebSocket(){ //初始化weosocket 
        var userId = getSessiontoken('userId');
               const wsuri = "ws://114.116.108.246:81/websocket/socketServer?userId="+userId;//连接地址,可加参数
        this.websocket = new WebSocket(wsuri); 
        this.websocket.onopen = this.websocketonopen;
        this.websocket.onerror = this.websocketonerror;
        this.websocket.onmessage = this.websocketonmessage; 
        this.websocket.onclose = this.websocketclose;
       }, 

      websocketonopen() {
        console.log("WebSocket连接成功");
      },
      websocketonerror(e) { //错误
        console.log("WebSocket连接发生错误");
      },
      websocketonmessage(e){ //数据接收 
       this.$notify({
	            title: '系统通知提醒',
	            message: e.data,
	            position: 'bottom-right',
	            duration: 90000,
	            type: 'warning'
	          });

      }, 

      websocketsend(agentData){//数据发送 
        this.websock.send(agentData); 
      }, 

      websocketclose(e){ //关闭 
        console.log("connection closed (" + e.code + ")"); 
     },
   }, 
  }
 </script>
数据接收的数据格式为

在这里插入图片描述

补充一

数据格式相关
在这里插入图片描述

websocketonmessage(e){ 
	console.log("ee",e);
	console.log("eeee",e.data);
    const redata = JSON.parse(e.data);
    console.log("eeee---",redata);
 }
补充二

当项目退出时需要关闭所有消息提示框

 let notify = this.$notify({
     title: '系统通知提醒',
      message: redata.message,
      position: 'bottom-right',
      duration: 0,
      type: 'warning',
      onClose: function(e){
        let param = {
          token: getSessiontoken('token'),
          messageId: redata.messageId + ''
        }
        updateMessage(param).then(function (res) {
          var obj = JSON.parse(utilFile.decrypt(res.data.a));
        }).catch(function (err) {
          console.log(err);
        })
      }
    });
    this.instanceList[redata.messageId] = notify;


//用instanceList接收所有提示信息,点击退出按钮时,删除所有
 var _this = this;
 for (let key in _this.instanceList) {
     _this.instanceList[key].close();
     delete _this.instanceList[key];
 }
Logo

前往低代码交流专区

更多推荐