新功能: 顶部加入消息通知图标

pull/79/head
猿小天 2022-11-14 00:00:56 +08:00
parent 56129cffe1
commit 1eab32568f
9 changed files with 43 additions and 44 deletions

View File

@ -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:

View File

@ -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)

View File

@ -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 是该路由的消费者
] ]

View File

@ -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="获取成功")

View File

@ -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

View File

@ -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 {

View File

@ -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: {}
})
}

View File

@ -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: [ // 表单校验规则
{ {

View File

@ -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)