新功能: 顶部加入消息通知图标
parent
56129cffe1
commit
1eab32568f
|
@ -89,7 +89,7 @@ async def websocket_application(scope, receive, send):
|
||||||
|
|
||||||
# 其他情况,正常的WebSocket消息
|
# 其他情况,正常的WebSocket消息
|
||||||
elif event['type'] == 'websocket.receive':
|
elif event['type'] == 'websocket.receive':
|
||||||
print(11,event)
|
|
||||||
if event['text'] == 'ping':
|
if event['text'] == 'ping':
|
||||||
await send(message('system', 'text', 'pong!'))
|
await send(message('system', 'text', 'pong!'))
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -62,7 +62,7 @@ class DvadminWebSocket(AsyncJsonWebsocketConsumer):
|
||||||
else:
|
else:
|
||||||
send_dict.setdefault(self.chat_group_name,{})
|
send_dict.setdefault(self.chat_group_name,{})
|
||||||
await self.accept()
|
await self.accept()
|
||||||
await self.send_json(message('system', 'INFO', '连接成功'))
|
await self.send_json(message('system', 'SYSTEM', '连接成功'))
|
||||||
except InvalidSignatureError:
|
except InvalidSignatureError:
|
||||||
await self.disconnect(None)
|
await self.disconnect(None)
|
||||||
|
|
||||||
|
@ -75,6 +75,11 @@ class DvadminWebSocket(AsyncJsonWebsocketConsumer):
|
||||||
print("连接关闭")
|
print("连接关闭")
|
||||||
await self.close(close_code)
|
await self.close(close_code)
|
||||||
|
|
||||||
|
|
||||||
|
class MegCenter(DvadminWebSocket):
|
||||||
|
"""
|
||||||
|
消息中心
|
||||||
|
"""
|
||||||
async def receive(self, text_data=None, byte_text_data=None):
|
async def receive(self, text_data=None, byte_text_data=None):
|
||||||
print(text_data)
|
print(text_data)
|
||||||
try:
|
try:
|
||||||
|
@ -83,7 +88,6 @@ class DvadminWebSocket(AsyncJsonWebsocketConsumer):
|
||||||
print('数据无法被json格式化', e)
|
print('数据无法被json格式化', e)
|
||||||
await self.disconnect(400)
|
await self.disconnect(400)
|
||||||
else:
|
else:
|
||||||
print(123,text_data_json)
|
|
||||||
# 获取将要推送信息的目标身份标识,调用保存在 send_dict中的信息发送函数
|
# 获取将要推送信息的目标身份标识,调用保存在 send_dict中的信息发送函数
|
||||||
message_id = text_data_json.get('message_id', None)
|
message_id = text_data_json.get('message_id', None)
|
||||||
user_list = await _get_message_center_instance(message_id)
|
user_list = await _get_message_center_instance(message_id)
|
||||||
|
|
|
@ -3,5 +3,5 @@ from django.urls import path
|
||||||
from . import consumers
|
from . import consumers
|
||||||
|
|
||||||
websocket_urlpatterns = [
|
websocket_urlpatterns = [
|
||||||
path('ws/<str:service_uid>/', consumers.DvadminWebSocket.as_asgi()), #consumers.DvadminWebSocket 是该路由的消费者
|
path('ws/<str:service_uid>/', consumers.MegCenter.as_asgi()), #consumers.DvadminWebSocket 是该路由的消费者
|
||||||
]
|
]
|
|
@ -133,7 +133,7 @@ class MessageCenterViewSet(CustomModelViewSet):
|
||||||
retrieve:单例
|
retrieve:单例
|
||||||
destroy:删除
|
destroy:删除
|
||||||
"""
|
"""
|
||||||
queryset = MessageCenter.objects.all()
|
queryset = MessageCenter.objects.order_by('create_datetime')
|
||||||
serializer_class = MessageCenterSerializer
|
serializer_class = MessageCenterSerializer
|
||||||
create_serializer_class = MessageCenterCreateSerializer
|
create_serializer_class = MessageCenterCreateSerializer
|
||||||
extra_filter_backends = []
|
extra_filter_backends = []
|
||||||
|
@ -144,6 +144,9 @@ class MessageCenterViewSet(CustomModelViewSet):
|
||||||
return MessageCenter.objects.all()
|
return MessageCenter.objects.all()
|
||||||
|
|
||||||
def retrieve(self, request, *args, **kwargs):
|
def retrieve(self, request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
重写查看
|
||||||
|
"""
|
||||||
pk = kwargs.get('pk')
|
pk = kwargs.get('pk')
|
||||||
user_id = self.request.user.id
|
user_id = self.request.user.id
|
||||||
queryset = MessageCenterTargetUser.objects.filter(users__id=user_id,messagecenter__id=pk).first()
|
queryset = MessageCenterTargetUser.objects.filter(users__id=user_id,messagecenter__id=pk).first()
|
||||||
|
@ -154,16 +157,6 @@ class MessageCenterViewSet(CustomModelViewSet):
|
||||||
serializer = self.get_serializer(instance)
|
serializer = self.get_serializer(instance)
|
||||||
return DetailResponse(data=serializer.data, msg="获取成功")
|
return DetailResponse(data=serializer.data, msg="获取成功")
|
||||||
|
|
||||||
@action(methods=['get'],detail=True,permission_classes=[IsAuthenticated])
|
|
||||||
def receive_view(self, request, pk):
|
|
||||||
"""
|
|
||||||
我的接收-查看
|
|
||||||
"""
|
|
||||||
instance = MessageCenterTargetUser.objects.filter(id=pk).first()
|
|
||||||
instance.is_read = True
|
|
||||||
instance.save()
|
|
||||||
serializer = MessageCenterTargetUserListSerializer(instance)
|
|
||||||
return DetailResponse(data=serializer.data, msg="获取成功")
|
|
||||||
|
|
||||||
@action(methods=['GET'],detail=False,permission_classes=[IsAuthenticated])
|
@action(methods=['GET'],detail=False,permission_classes=[IsAuthenticated])
|
||||||
def get_self_receive(self,request):
|
def get_self_receive(self,request):
|
||||||
|
@ -171,11 +164,26 @@ class MessageCenterViewSet(CustomModelViewSet):
|
||||||
获取接收到的消息
|
获取接收到的消息
|
||||||
"""
|
"""
|
||||||
self_user_id = self.request.user.id
|
self_user_id = self.request.user.id
|
||||||
queryset = MessageCenterTargetUser.objects.filter(users__id=self_user_id).exclude(messagecenter__is_deleted=True)
|
queryset = MessageCenterTargetUser.objects.filter(users__id=self_user_id).exclude(messagecenter__is_deleted=True).order_by('-create_datetime')
|
||||||
queryset = self.filter_queryset(queryset)
|
# queryset = self.filter_queryset(queryset)
|
||||||
page = self.paginate_queryset(queryset)
|
page = self.paginate_queryset(queryset)
|
||||||
if page is not None:
|
if page is not None:
|
||||||
serializer = MessageCenterTargetUserListSerializer(page, many=True, request=request)
|
serializer = MessageCenterTargetUserListSerializer(page, many=True, request=request)
|
||||||
return self.get_paginated_response(serializer.data)
|
return self.get_paginated_response(serializer.data)
|
||||||
serializer = MessageCenterTargetUserListSerializer(queryset, many=True, request=request)
|
serializer = MessageCenterTargetUserListSerializer(queryset, many=True, request=request)
|
||||||
return SuccessResponse(data=serializer.data, msg="获取成功")
|
return SuccessResponse(data=serializer.data, msg="获取成功")
|
||||||
|
|
||||||
|
@action(methods=['GET'], detail=False, permission_classes=[IsAuthenticated])
|
||||||
|
def get_newest_msg(self,request):
|
||||||
|
"""
|
||||||
|
获取最新的一条消息
|
||||||
|
"""
|
||||||
|
self_user_id = self.request.user.id
|
||||||
|
queryset = MessageCenterTargetUser.objects.filter(users__id=self_user_id).exclude(
|
||||||
|
messagecenter__is_deleted=True).order_by('create_datetime').last()
|
||||||
|
print(queryset)
|
||||||
|
data = None
|
||||||
|
if queryset:
|
||||||
|
serializer = MessageCenterTargetUserListSerializer(queryset, many=False, request=request)
|
||||||
|
data = serializer.data
|
||||||
|
return DetailResponse(data=data, msg="获取成功")
|
|
@ -22,7 +22,7 @@ function webSocketOnError (e) {
|
||||||
}
|
}
|
||||||
function webSocketOnMessage (e) {
|
function webSocketOnMessage (e) {
|
||||||
const data = JSON.parse(e.data)
|
const data = JSON.parse(e.data)
|
||||||
if (data.contentType === 'INFO') {
|
if (data.contentType === 'SYSTEM') {
|
||||||
ElementUI.Notification({
|
ElementUI.Notification({
|
||||||
title: 'websocket',
|
title: 'websocket',
|
||||||
message: data.content,
|
message: data.content,
|
||||||
|
@ -38,7 +38,7 @@ function webSocketOnMessage (e) {
|
||||||
position: 'bottom-right',
|
position: 'bottom-right',
|
||||||
duration: 0
|
duration: 0
|
||||||
})
|
})
|
||||||
} else if (data.contentType === 'TEXT') {
|
} else if (data.contentType === 'INFO') {
|
||||||
ElementUI.Notification({
|
ElementUI.Notification({
|
||||||
title: '温馨提示',
|
title: '温馨提示',
|
||||||
message: data.content,
|
message: data.content,
|
||||||
|
@ -48,6 +48,7 @@ function webSocketOnMessage (e) {
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
console.log(data.content)
|
console.log(data.content)
|
||||||
|
return data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 关闭websiocket
|
// 关闭websiocket
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
<d2-header-log />
|
<d2-header-log />
|
||||||
<d2-header-fullscreen />
|
<d2-header-fullscreen />
|
||||||
<d2-header-theme />
|
<d2-header-theme />
|
||||||
|
<d2-header-message />
|
||||||
<d2-header-size />
|
<d2-header-size />
|
||||||
<d2-header-locales />
|
<d2-header-locales />
|
||||||
<d2-header-color />
|
<d2-header-color />
|
||||||
|
@ -111,6 +112,7 @@ import d2HeaderTheme from './components/header-theme'
|
||||||
import d2HeaderUser from './components/header-user'
|
import d2HeaderUser from './components/header-user'
|
||||||
import d2HeaderLog from './components/header-log'
|
import d2HeaderLog from './components/header-log'
|
||||||
import d2HeaderColor from './components/header-color'
|
import d2HeaderColor from './components/header-color'
|
||||||
|
import d2HeaderMessage from './components/header-message'
|
||||||
import { mapState, mapGetters, mapActions } from 'vuex'
|
import { mapState, mapGetters, mapActions } from 'vuex'
|
||||||
import mixinSearch from './mixins/search'
|
import mixinSearch from './mixins/search'
|
||||||
export default {
|
export default {
|
||||||
|
@ -127,7 +129,8 @@ export default {
|
||||||
d2HeaderTheme,
|
d2HeaderTheme,
|
||||||
d2HeaderUser,
|
d2HeaderUser,
|
||||||
d2HeaderLog,
|
d2HeaderLog,
|
||||||
d2HeaderColor
|
d2HeaderColor,
|
||||||
|
d2HeaderMessage
|
||||||
},
|
},
|
||||||
provide () {
|
provide () {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -53,15 +53,4 @@ export function DelObj (id) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 我的接收-查看
|
|
||||||
* @param obj
|
|
||||||
* @returns {*}
|
|
||||||
*/
|
|
||||||
export function receiveView (obj) {
|
|
||||||
return request({
|
|
||||||
url: urlPrefix + obj.id + '/receive_view/',
|
|
||||||
method: 'get',
|
|
||||||
params: {}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { request } from '@/api/service'
|
||||||
export const crudOptions = (vm) => {
|
export const crudOptions = (vm) => {
|
||||||
return {
|
return {
|
||||||
indexRow: { // 或者直接传true,不显示title,不居中
|
indexRow: { // 或者直接传true,不显示title,不居中
|
||||||
width:60,
|
width: 60,
|
||||||
title: '序号',
|
title: '序号',
|
||||||
align: 'center'
|
align: 'center'
|
||||||
},
|
},
|
||||||
|
@ -125,9 +125,7 @@ export const crudOptions = (vm) => {
|
||||||
},
|
},
|
||||||
width: 130,
|
width: 130,
|
||||||
type: 'table-selector',
|
type: 'table-selector',
|
||||||
show () {
|
disabled: true,
|
||||||
return vm.tabActivted === 'send'
|
|
||||||
},
|
|
||||||
dict: {
|
dict: {
|
||||||
cache: false,
|
cache: false,
|
||||||
url: '/api/system/user/',
|
url: '/api/system/user/',
|
||||||
|
@ -194,9 +192,7 @@ export const crudOptions = (vm) => {
|
||||||
search: {
|
search: {
|
||||||
disabled: true
|
disabled: true
|
||||||
},
|
},
|
||||||
show () {
|
disabled: true,
|
||||||
return vm.tabActivted === 'send'
|
|
||||||
},
|
|
||||||
width: 130,
|
width: 130,
|
||||||
type: 'table-selector',
|
type: 'table-selector',
|
||||||
dict: {
|
dict: {
|
||||||
|
@ -266,9 +262,6 @@ export const crudOptions = (vm) => {
|
||||||
disabled: true
|
disabled: true
|
||||||
},
|
},
|
||||||
width: 130,
|
width: 130,
|
||||||
show () {
|
|
||||||
return vm.tabActivted === 'send'
|
|
||||||
},
|
|
||||||
type: 'table-selector',
|
type: 'table-selector',
|
||||||
dict: {
|
dict: {
|
||||||
cache: false,
|
cache: false,
|
||||||
|
@ -288,6 +281,7 @@ export const crudOptions = (vm) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
disabled: true,
|
||||||
form: {
|
form: {
|
||||||
rules: [ // 表单校验规则
|
rules: [ // 表单校验规则
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,7 +62,7 @@ export default {
|
||||||
return AddObj(row).then(res => {
|
return AddObj(row).then(res => {
|
||||||
const message = {
|
const message = {
|
||||||
message_id: res.data.id,
|
message_id: res.data.id,
|
||||||
contentType: 'TEXT',
|
contentType: 'INFO',
|
||||||
content: '您有新的消息,请到消息中心查看~'
|
content: '您有新的消息,请到消息中心查看~'
|
||||||
}
|
}
|
||||||
this.$websocket.webSocketSend(message)
|
this.$websocket.webSocketSend(message)
|
||||||
|
|
Loading…
Reference in New Issue