import SettingMer from '@/libs/settingMer' import Vue from 'vue' import ElementUI from 'element-ui' import router from '../router' import { roterPre } from '@/settings' function bindEvent(vm) { vm.$on('notice', function(data) { this.$notify.info({ title: data.title || '消息', message: data.message, duration: 5000, onClick() { console.log('click') } }) }) } function createWebScoket(token) { return new WebSocket(`${SettingMer.wsSocketUrl}?type=admin&token=${token}`) } function notice(token) { const ws = createWebScoket(token) const vm = new Vue() let ping function send(type, data) { ws.send(JSON.stringify({ type, data })) } ws.onopen = function() { vm.$emit('open') ping = setInterval(function() { send('ping') }, 10000) } ws.onmessage = function(res) { vm.$emit('message', res) const data = JSON.parse(res.data) if (data.status === 200) { vm.$emit(data.data.status, data.data.result) } // console.log(res) if (data.type === 'notice') { const h = vm.$createElement ElementUI.Notification({ title: data.data.data.title, message: h('a', { style: 'color: teal' }, data.data.data.message), onClick() { if (data.data.type === 'new_product') { router.push({ path: `${roterPre}/product/examine?id=`+data.data.data.id }) }else if (data.data.type === 'new_seckill') { router.push({ path: `${roterPre}/marketing/seckill/list?id=`+data.data.data.id }) }else if (data.data.type === 'new_presell') { router.push({ path: `${roterPre}/marketing/presell/list?id=`+data.data.data.id+`&type=`+data.data.data.type+`&status=0` }) }else if (data.data.type === 'new_group') { router.push({ path: `${roterPre}/marketing/combination/combination_goods?id=`+data.data.data.id+`&status=0` }) }else if (data.data.type === 'new_assist') { router.push({ path: `${roterPre}/marketing/assist/goods_list?id=`+data.data.data.id+`&status=0` }) }else if (data.data.type === 'new_intention') { router.push({ path: `${roterPre}/merchant/application?id=`+data.data.data.id+`&status=0` }) }else if (data.data.type === 'new_goods') { router.push({ path: `${roterPre}/marketing/broadcast/list?id=`+data.data.data.id+`&status=0` }) }else if (data.data.type === 'new_broadcast') { router.push({ path: `${roterPre}/marketing/studio/list?id=`+data.data.data.id+`&status=0` }) }else if (data.data.type === 'new_bag') { router.push({ path: `${roterPre}/promoter/gift` }) } } }) } } ws.onclose = function(e) { vm.$emit('close', e) console.log('on close') clearInterval(ping) } bindEvent(vm) return function() { ws.close() } } export default notice