From 1eab32568f29e6602cbf6b9a8c4f146e4c451ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Mon, 14 Nov 2022 00:00:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=8A=9F=E8=83=BD:=20=E9=A1=B6?= =?UTF-8?q?=E9=83=A8=E5=8A=A0=E5=85=A5=E6=B6=88=E6=81=AF=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/application/websocketConfig.py | 2 +- backend/dvadmin/system/consumers.py | 8 +++-- backend/dvadmin/system/routing.py | 2 +- .../dvadmin/system/views/message_center.py | 36 +++++++++++-------- web/src/api/websocket.js | 5 +-- web/src/layout/header-aside/layout.vue | 5 ++- web/src/views/system/messageCenter/api.js | 13 +------ web/src/views/system/messageCenter/crud.js | 14 +++----- web/src/views/system/messageCenter/index.vue | 2 +- 9 files changed, 43 insertions(+), 44 deletions(-) diff --git a/backend/application/websocketConfig.py b/backend/application/websocketConfig.py index eb96d6f..8db1b59 100644 --- a/backend/application/websocketConfig.py +++ b/backend/application/websocketConfig.py @@ -89,7 +89,7 @@ async def websocket_application(scope, receive, send): # 其他情况,正常的WebSocket消息 elif event['type'] == 'websocket.receive': - print(11,event) + if event['text'] == 'ping': await send(message('system', 'text', 'pong!')) else: diff --git a/backend/dvadmin/system/consumers.py b/backend/dvadmin/system/consumers.py index d7290fc..044c955 100644 --- a/backend/dvadmin/system/consumers.py +++ b/backend/dvadmin/system/consumers.py @@ -62,7 +62,7 @@ class DvadminWebSocket(AsyncJsonWebsocketConsumer): else: send_dict.setdefault(self.chat_group_name,{}) await self.accept() - await self.send_json(message('system', 'INFO', '连接成功')) + await self.send_json(message('system', 'SYSTEM', '连接成功')) except InvalidSignatureError: await self.disconnect(None) @@ -75,6 +75,11 @@ class DvadminWebSocket(AsyncJsonWebsocketConsumer): print("连接关闭") await self.close(close_code) + +class MegCenter(DvadminWebSocket): + """ + 消息中心 + """ async def receive(self, text_data=None, byte_text_data=None): print(text_data) try: @@ -83,7 +88,6 @@ class DvadminWebSocket(AsyncJsonWebsocketConsumer): print('数据无法被json格式化', e) await self.disconnect(400) else: - print(123,text_data_json) # 获取将要推送信息的目标身份标识,调用保存在 send_dict中的信息发送函数 message_id = text_data_json.get('message_id', None) user_list = await _get_message_center_instance(message_id) diff --git a/backend/dvadmin/system/routing.py b/backend/dvadmin/system/routing.py index 79372d1..3f4ecbb 100644 --- a/backend/dvadmin/system/routing.py +++ b/backend/dvadmin/system/routing.py @@ -3,5 +3,5 @@ from django.urls import path from . import consumers websocket_urlpatterns = [ - path('ws//', consumers.DvadminWebSocket.as_asgi()), #consumers.DvadminWebSocket 是该路由的消费者 + path('ws//', consumers.MegCenter.as_asgi()), #consumers.DvadminWebSocket 是该路由的消费者 ] \ No newline at end of file diff --git a/backend/dvadmin/system/views/message_center.py b/backend/dvadmin/system/views/message_center.py index 574f89c..bcd147c 100644 --- a/backend/dvadmin/system/views/message_center.py +++ b/backend/dvadmin/system/views/message_center.py @@ -133,7 +133,7 @@ class MessageCenterViewSet(CustomModelViewSet): retrieve:单例 destroy:删除 """ - queryset = MessageCenter.objects.all() + queryset = MessageCenter.objects.order_by('create_datetime') serializer_class = MessageCenterSerializer create_serializer_class = MessageCenterCreateSerializer extra_filter_backends = [] @@ -144,6 +144,9 @@ class MessageCenterViewSet(CustomModelViewSet): return MessageCenter.objects.all() def retrieve(self, request, *args, **kwargs): + """ + 重写查看 + """ pk = kwargs.get('pk') user_id = self.request.user.id queryset = MessageCenterTargetUser.objects.filter(users__id=user_id,messagecenter__id=pk).first() @@ -154,16 +157,6 @@ class MessageCenterViewSet(CustomModelViewSet): serializer = self.get_serializer(instance) 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]) def get_self_receive(self,request): @@ -171,11 +164,26 @@ class MessageCenterViewSet(CustomModelViewSet): 获取接收到的消息 """ self_user_id = self.request.user.id - queryset = MessageCenterTargetUser.objects.filter(users__id=self_user_id).exclude(messagecenter__is_deleted=True) - queryset = self.filter_queryset(queryset) + queryset = MessageCenterTargetUser.objects.filter(users__id=self_user_id).exclude(messagecenter__is_deleted=True).order_by('-create_datetime') + # queryset = self.filter_queryset(queryset) page = self.paginate_queryset(queryset) if page is not None: serializer = MessageCenterTargetUserListSerializer(page, many=True, request=request) return self.get_paginated_response(serializer.data) serializer = MessageCenterTargetUserListSerializer(queryset, many=True, request=request) - return SuccessResponse(data=serializer.data, msg="获取成功") \ No newline at end of file + 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="获取成功") \ No newline at end of file diff --git a/web/src/api/websocket.js b/web/src/api/websocket.js index 2e7ad67..269f452 100644 --- a/web/src/api/websocket.js +++ b/web/src/api/websocket.js @@ -22,7 +22,7 @@ function webSocketOnError (e) { } function webSocketOnMessage (e) { const data = JSON.parse(e.data) - if (data.contentType === 'INFO') { + if (data.contentType === 'SYSTEM') { ElementUI.Notification({ title: 'websocket', message: data.content, @@ -38,7 +38,7 @@ function webSocketOnMessage (e) { position: 'bottom-right', duration: 0 }) - } else if (data.contentType === 'TEXT') { + } else if (data.contentType === 'INFO') { ElementUI.Notification({ title: '温馨提示', message: data.content, @@ -48,6 +48,7 @@ function webSocketOnMessage (e) { }) } else { console.log(data.content) + return data } } // 关闭websiocket diff --git a/web/src/layout/header-aside/layout.vue b/web/src/layout/header-aside/layout.vue index 601d890..469c25d 100644 --- a/web/src/layout/header-aside/layout.vue +++ b/web/src/layout/header-aside/layout.vue @@ -41,6 +41,7 @@ + @@ -111,6 +112,7 @@ import d2HeaderTheme from './components/header-theme' import d2HeaderUser from './components/header-user' import d2HeaderLog from './components/header-log' import d2HeaderColor from './components/header-color' +import d2HeaderMessage from './components/header-message' import { mapState, mapGetters, mapActions } from 'vuex' import mixinSearch from './mixins/search' export default { @@ -127,7 +129,8 @@ export default { d2HeaderTheme, d2HeaderUser, d2HeaderLog, - d2HeaderColor + d2HeaderColor, + d2HeaderMessage }, provide () { return { diff --git a/web/src/views/system/messageCenter/api.js b/web/src/views/system/messageCenter/api.js index 03fc4b7..b40c940 100644 --- a/web/src/views/system/messageCenter/api.js +++ b/web/src/views/system/messageCenter/api.js @@ -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: {} - }) -} + diff --git a/web/src/views/system/messageCenter/crud.js b/web/src/views/system/messageCenter/crud.js index 8c4dd64..a2824c0 100644 --- a/web/src/views/system/messageCenter/crud.js +++ b/web/src/views/system/messageCenter/crud.js @@ -3,7 +3,7 @@ import { request } from '@/api/service' export const crudOptions = (vm) => { return { indexRow: { // 或者直接传true,不显示title,不居中 - width:60, + width: 60, title: '序号', align: 'center' }, @@ -125,9 +125,7 @@ export const crudOptions = (vm) => { }, width: 130, type: 'table-selector', - show () { - return vm.tabActivted === 'send' - }, + disabled: true, dict: { cache: false, url: '/api/system/user/', @@ -194,9 +192,7 @@ export const crudOptions = (vm) => { search: { disabled: true }, - show () { - return vm.tabActivted === 'send' - }, + disabled: true, width: 130, type: 'table-selector', dict: { @@ -266,9 +262,6 @@ export const crudOptions = (vm) => { disabled: true }, width: 130, - show () { - return vm.tabActivted === 'send' - }, type: 'table-selector', dict: { cache: false, @@ -288,6 +281,7 @@ export const crudOptions = (vm) => { }) } }, + disabled: true, form: { rules: [ // 表单校验规则 { diff --git a/web/src/views/system/messageCenter/index.vue b/web/src/views/system/messageCenter/index.vue index 647a3e4..ca48634 100644 --- a/web/src/views/system/messageCenter/index.vue +++ b/web/src/views/system/messageCenter/index.vue @@ -62,7 +62,7 @@ export default { return AddObj(row).then(res => { const message = { message_id: res.data.id, - contentType: 'TEXT', + contentType: 'INFO', content: '您有新的消息,请到消息中心查看~' } this.$websocket.webSocketSend(message)