123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- <template>
- <el-popover placement="bottom"
- width="350"
- trigger="click">
- <el-tabs v-model="activeName" style="align-items: center">
- <el-tab-pane label="消息"
- name="first">
- </el-tab-pane>
- </el-tabs>
- <el-scrollbar style="height:300px">
- <avue-notice :data="data"
- :option="option"
- @click="goUrl"
- @page-change="pageChange">
- </avue-notice>
- </el-scrollbar>
- <div slot="reference">
- <el-badge :value="badge">
- <i class="el-icon-bell" @click="init"></i>
- </el-badge>
- </div>
- </el-popover>
- </template>
- <script>
- import { getMsgLogs , getMsgDetail,getMessage } from "@/api/logs";
- export default {
- name: "top-notice",
- data () {
- return {
- activeName: 'first',
- option: {
- props: {
- img: 'img',
- title: 'messageBody',
- subtitle: 'createTime',
- tag: 'tag',
- status: 'messageType'
- },
- },
- data: [],
- path:"",
- socket:"",
- badge:''
- }
- },
- created () {
- // this.webSocket();
- },
- mounted() {
- //60秒轮训消息
- window.setInterval(() => {
- setTimeout(() => {
- this.assistMessage()
- },0)
- },60000)
- this.path = "wss://trade.tubaosoft.com/api/blade-client/websocket?user=" + this.$store.getters.userInfo.user_id
- this.init();
- },
- methods: {
- //初始化
- init(){
- getMsgLogs().then(res=>{
- this.afterData(res.data.data)
- })
- if(typeof(WebSocket) === "undefined"){
- alert("您的浏览器不支持socket")
- }else{
- // 实例化socket
- this.socket = new WebSocket(this.path)
- // 监听socket连接
- this.socket.onopen = this.open
- // 监听socket错误信息
- this.socket.onerror = this.error
- // 监听socket消息
- this.socket.onmessage = this.getMessage
- this.assistMessage()
- }
- },
- open() {
- // console.log("socket连接成功")
- },
- error() {
- console.log("连接错误")
- },
- getMessage(msg){
- let msgData = JSON.parse(msg);
- if(msgData.data.unRead){
- this.badge = msgData.data.unReadNum
- }else{
- this.badge = ''
- }
- },
- send() {
- // this.socket.send(params)
- },
- close() {
- console.log("socket已经关闭")
- },
- assistMessage(){
- //辅助消息接口
- getMessage().then(res=>{
- this.getMessage(JSON.stringify(res))
- })
- },
- goUrl(row){
- if(row.url){
- this.$router.push({
- path: row.url,
- query: {params:row.parameter},
- });
- }
- getMsgDetail(row.id).then(res=>{
- this.$set(row,"isRead",res.data.data.isRead)
- this.afterData(this.data)
- this.assistMessage()
- })
- },
- afterData(data){
- if(data.length === 0 ) return this.data = []
- this.data = data.map(item =>{
- if(item.isRead == 0){
- item.tag = "未读"
- item.messageType = 1//状态 0 灰色 1 蓝色 2 橙色 3 红色 4 绿色
- }else{
- item.tag = "已读"
- item.messageType = 0
- }
- return item
- })
- },
- pageChange (page, done) {
- },
- }
- };
- </script>
- <style lang="scss" scoped>
- ::v-deep .avue-notice__more {
- display: none;
- }
- ::v-deep .avue-notice__title {
- display: flex;
- align-items: center;
- }
- ::v-deep .avue-notice__tag {
- margin-left: 15px;
- }
- </style>
|