notice-one.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <template>
  2. <el-popover placement="top-start" width="350" trigger="click" ref="popover">
  3. <el-tabs v-model="activeName" stretch>
  4. <el-tab-pane :label="spellItLabel('全部', 4)" name="first"></el-tab-pane>
  5. <el-tab-pane :label="spellItLabel('代办', 5)" name="second"></el-tab-pane>
  6. </el-tabs>
  7. <el-scrollbar>
  8. <div style="height: 280px">
  9. <div v-if="activeName === 'first'">全部</div>
  10. <div v-if="activeName === 'second'">代办</div>
  11. </div>
  12. </el-scrollbar>
  13. <div slot="reference">
  14. <el-badge :value="messageSum" class="badge">
  15. <i class="el-icon-message-solid"></i>
  16. </el-badge>
  17. </div>
  18. </el-popover>
  19. </template>
  20. <script>
  21. export default {
  22. data() {
  23. return {
  24. userInfo: {},
  25. messageSum: 0,
  26. activeName: "first",
  27. allList: [],
  28. backlogList: [],
  29. ws: null, //建立的webSocket连接
  30. lockReconnect: false, //是否真正建立连接
  31. timeout: 30 * 1000, //30秒一次心跳
  32. timeoutObj: null, //心跳倒计时
  33. timeoutnum: null, //断开 重连倒计时
  34. };
  35. },
  36. created() {
  37. const userInfo = JSON.parse(window.localStorage.getItem("saber-userInfo"));
  38. this.userInfo = userInfo.content;
  39. // this.initWebpack();
  40. },
  41. mounted() {
  42. this.$refs.popover.doShow();
  43. },
  44. methods: {
  45. initWebpack() {
  46. // this.ws = new WebSocket(
  47. // `/cz/victoriatourist/webStock/userId=${this.userInfo.user_id}`
  48. // );
  49. // const url = `ws:${location.host}/socket/api/victoriatourist/webStock/${this.userInfo.access_token}`;
  50. // const url =
  51. // "ws://36.134.91.96:10003/api/victoriatourist/webStock/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiI4NDUyMDYiLCJ1c2VyX25hbWUiOiJhZG1pbiIsInJlYWxfbmFtZSI6ImFkbeWnk-WQjSIsImF2YXRhciI6IiIsImF1dGhvcml0aWVzIjpbImFkbWluIl0sImNsaWVudF9pZCI6InNhYmVyIiwicm9sZV9uYW1lIjoiYWRtaW4iLCJsaWNlbnNlIjoicG93ZXJlZCBieSBibGFkZXgiLCJwb3N0X2lkIjoiMTYxOTYwOTExNzE1NDg4OTczMCIsInVzZXJfaWQiOiIxNjE5NjA5MTE3NTU3NTI2NTMwIiwicm9sZV9pZCI6IjE2MTk2MDkxMTU1Nzc4MzE0MjYiLCJzY29wZSI6WyJhbGwiXSwibmlja19uYW1lIjoiYWRtaW4iLCJvYXV0aF9pZCI6IiIsImRldGFpbCI6eyJ0eXBlIjoid2ViIn0sImV4cCI6MTY3ODMyOTA1OCwiZGVwdF9pZCI6IjE2MTk2MDkxMTcxMjk3MjM5MDYiLCJqdGkiOiI2OTE0YjY2Mi02OTVjLTQxNGYtYWU1ZC1mOTAxODgyOTJmZDkiLCJhY2NvdW50IjoiYWRtaW4ifQ.dUpl71ynDH06u_tpSqZGSHMmd0maXCGXZRrLUvTMqf4";
  52. // this.ws = new WebSocket(url);
  53. // this.ws.onopen = this.onopen;
  54. // this.ws.onmessage = this.onmessage;
  55. // this.ws.onclose = this.onclose;
  56. // this.ws.onerror = this.onerror;
  57. },
  58. onopen() {
  59. this.ws.send("ping");
  60. //开启心跳
  61. this.start();
  62. },
  63. start() {
  64. //开启心跳
  65. var self = this;
  66. self.timeoutObj && clearTimeout(self.timeoutObj);
  67. self.timeoutObj = setTimeout(() => {
  68. //这里发送一个心跳,后端收到后,返回一个心跳消息,
  69. if (self.ws.readyState == 1) {
  70. //如果连接正常
  71. self.ws.send("ping");
  72. } else {
  73. //否则重连
  74. self.reconnect();
  75. }
  76. }, self.timeout);
  77. },
  78. reconnect() {
  79. //重新连接
  80. if (this.lockReconnect) {
  81. return;
  82. }
  83. this.lockReconnect = true;
  84. //没连接上会一直重连,设置延迟避免请求过多
  85. this.timeoutnum && clearTimeout(this.timeoutnum);
  86. this.timeoutnum = setTimeout(() => {
  87. //新连接
  88. this.initWebpack();
  89. this.lockReconnect = false;
  90. }, 5000);
  91. },
  92. onmessage(e) {
  93. var msg = JSON.parse(e.data);
  94. console.log(msg, "assw");
  95. },
  96. onclose() {
  97. console.log("close");
  98. this.reconnect();
  99. },
  100. onerror() {
  101. console.log("error");
  102. this.reconnect();
  103. },
  104. spellItLabel(text, index) {
  105. if (index > 0) {
  106. return text + " (" + index + ")";
  107. } else {
  108. return text;
  109. }
  110. },
  111. },
  112. };
  113. </script>
  114. <style lang="less" scoped>
  115. .badge {
  116. cursor: pointer;
  117. margin: 15px 24px 15px 0;
  118. height: 20px;
  119. width: 20px;
  120. i {
  121. color: #bbbbbb;
  122. }
  123. }
  124. .notice {
  125. padding: 12px 24px;
  126. border-bottom: 1px solid #e8eaec;
  127. font-size: 12px;
  128. cursor: pointer;
  129. display: flex;
  130. }
  131. </style>