tj
2025-06-05 bba272999cc546f65781bf3d20245a3f819af67f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<template>
  <div class="app-nav-bar">
    <div class="nav-content">
      <breadcrumb />
      <div class="right-info">
        <lin-notify
          height="370"
          :value="value"
          :hidden="hidden"
          :trigger="'click'"
          @readAll="readAll"
          @viewAll="viewAll"
          :messages="messages"
          @readMessages="readMessages"
        >
        </lin-notify>
        <clear-tab></clear-tab>
        <screenfull /> <user></user>
      </div>
    </div>
  </div>
</template>
 
<script>
import store from '@/store'
import Config from '@/config'
import { getToken } from '@/lin/util/token'
import User from './user'
import ClearTab from './clear-tab'
import Breadcrumb from './breadcrumb'
import Screenfull from './screen-full'
 
export default {
  name: 'NavBar',
  data() {
    return {
      value: 0,
      hidden: false,
      messages: [],
      path: `//api.s.colorful3.com/ws/message?token=${getToken('access_token').split(' ')[1]}`,
    }
  },
  created() {
    if (Config.websocketEnable) {
      this.$connect(this.path, { format: 'json' })
      this.$options.sockets.onmessage = data => {
        console.log(JSON.parse(data.data))
        this.messages.push(JSON.parse(data.data))
      }
      this.$options.sockets.onerror = err => {
        console.error(err)
        this.$message.error('token已过期,请重新登录')
        store.dispatch('loginOut')
        const { origin } = window.location
        window.location.href = origin
      }
    }
  },
  watch: {
    messages: {
      handler() {
        this.value = this.messages.filter(msg => msg.is_read === false).length
        if (this.value === 0) {
          this.hidden = true
        } else {
          this.hidden = false
        }
      },
      immediate: true,
    },
  },
  methods: {
    readAll() {
      console.log('点击了readAll')
    },
    viewAll() {
      console.log('点击了viewAll')
    },
    readMessages(msg, index) {
      this.messages[index].is_read = true
    },
  },
  components: {
    Breadcrumb,
    User,
    Screenfull,
    ClearTab,
  },
}
</script>
 
<style lang="scss" scoped>
.app-nav-bar {
  width: 100%;
  height: $navbar-height;
  display: flex;
  align-items: center;
  .logo.js-min-logo {
    width: 64px;
    font-size: 16px;
    color: #fff;
  }
  .nav-content {
    flex: 1;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding-left: 10px;
    padding-right: $navbar-padding;
    .right-info {
      display: flex;
      align-items: center;
    }
  }
}
</style>