通知消息完善
parent
fcdfa6aa7b
commit
50f5b88146
|
@ -211,6 +211,8 @@ class UserProfileSerializer(CustomModelSerializer):
|
||||||
"""
|
"""
|
||||||
admin = serializers.SerializerMethodField(read_only=True)
|
admin = serializers.SerializerMethodField(read_only=True)
|
||||||
deptId = serializers.IntegerField(source='dept.id', read_only=True)
|
deptId = serializers.IntegerField(source='dept.id', read_only=True)
|
||||||
|
# 未读通知数量
|
||||||
|
# unread_msg_count = serializers.SerializerMethodField(read_only=True)
|
||||||
|
|
||||||
def get_admin(self, obj: UserProfile):
|
def get_admin(self, obj: UserProfile):
|
||||||
role_list = obj.role.all().values_list('admin', flat=True)
|
role_list = obj.role.all().values_list('admin', flat=True)
|
||||||
|
@ -218,6 +220,13 @@ class UserProfileSerializer(CustomModelSerializer):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# def get_unread_msg_count(self, obj: UserProfile):
|
||||||
|
# UserProfile.objects.all()
|
||||||
|
# role_list = obj.role.all().values_list('admin', flat=True)
|
||||||
|
# if True in list(set(role_list)):
|
||||||
|
# return True
|
||||||
|
# return False
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = UserProfile
|
model = UserProfile
|
||||||
depth = 1
|
depth = 1
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
|
from django.db import models
|
||||||
from django.db.models import *
|
from django.db.models import *
|
||||||
|
|
||||||
|
from apps.op_drf.fields import UpdateDateTimeField, CreateDateTimeField
|
||||||
from apps.op_drf.models import CoreModel
|
from apps.op_drf.models import CoreModel
|
||||||
|
from apps.permission.models import UserProfile
|
||||||
|
|
||||||
"""
|
"""
|
||||||
消息通知模型
|
消息通知模型
|
||||||
|
@ -8,14 +11,14 @@ from apps.op_drf.models import CoreModel
|
||||||
|
|
||||||
|
|
||||||
class MessagePush(CoreModel):
|
class MessagePush(CoreModel):
|
||||||
content = TextField(verbose_name="通知内容")
|
|
||||||
title = CharField(max_length=128, verbose_name="通知标题")
|
title = CharField(max_length=128, verbose_name="通知标题")
|
||||||
is_read = BooleanField(default=False, verbose_name="是否已读")
|
content = TextField(verbose_name="通知内容")
|
||||||
message_type = CharField(max_length=64, verbose_name="消息类型")
|
message_type = CharField(max_length=8, verbose_name="消息类型")
|
||||||
is_reviewed = BooleanField(default=False, verbose_name="是否审核")
|
is_reviewed = BooleanField(default=True, verbose_name="是否审核")
|
||||||
is_send = BooleanField(default=False, verbose_name="是否已发送")
|
status = CharField(max_length=8, verbose_name="消息状态")
|
||||||
recipient_id = ManyToManyField(to="permission.UserProfile", db_constraint=False, null=True, blank=True,
|
user = ManyToManyField(to="permission.UserProfile",
|
||||||
related_name="recipient", related_query_name="recipient_query")
|
related_name="user", related_query_name="user_query", through='MessagePushUser',
|
||||||
|
through_fields=('message_push', 'user'))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = '消息通知'
|
verbose_name = '消息通知'
|
||||||
|
@ -23,3 +26,20 @@ class MessagePush(CoreModel):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.title}"
|
return f"{self.title}"
|
||||||
|
|
||||||
|
|
||||||
|
class MessagePushUser(models.Model):
|
||||||
|
message_push = ForeignKey(MessagePush, on_delete=CASCADE, db_constraint=False,
|
||||||
|
related_name="messagepushuser_message_push",
|
||||||
|
verbose_name='消息通知', help_text='消息通知')
|
||||||
|
|
||||||
|
user = ForeignKey(UserProfile, on_delete=CASCADE, db_constraint=False,
|
||||||
|
related_name="messagepushuser_user",
|
||||||
|
verbose_name='用户', help_text='用户')
|
||||||
|
is_read = BooleanField(default=False, verbose_name="是否已读")
|
||||||
|
update_datetime = UpdateDateTimeField() # 修改时间
|
||||||
|
create_datetime = CreateDateTimeField() # 创建时间
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "消息通知与用户关系"
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from apps.op_drf.serializers import CustomModelSerializer
|
from apps.op_drf.serializers import CustomModelSerializer
|
||||||
|
from apps.permission.serializers import UserProfileSerializer
|
||||||
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
|
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
|
||||||
|
|
||||||
|
|
||||||
# ================================================= #
|
# ================================================= #
|
||||||
# ************** 字典管理 序列化器 ************** #
|
# ************** 字典管理 序列化器 ************** #
|
||||||
# ================================================= #
|
# ================================================= #
|
||||||
from permission.serializers import UserProfileSerializer
|
|
||||||
|
|
||||||
|
|
||||||
class DictDataSerializer(CustomModelSerializer):
|
class DictDataSerializer(CustomModelSerializer):
|
||||||
"""
|
"""
|
||||||
|
@ -155,20 +155,48 @@ class SaveFileCreateUpdateSerializer(CustomModelSerializer):
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================= #
|
||||||
|
# ************** 消息通知 序列化器 ************** #
|
||||||
|
# ================================================= #
|
||||||
class MessagePushSerializer(CustomModelSerializer):
|
class MessagePushSerializer(CustomModelSerializer):
|
||||||
"""消息通知 序列化器"""
|
"""
|
||||||
|
消息通知 简单序列化器
|
||||||
|
"""
|
||||||
|
# users = UserProfileSerializer(read_only=True)
|
||||||
|
users = serializers.SerializerMethodField(read_only=True)
|
||||||
|
|
||||||
|
def get_users(self, obj):
|
||||||
|
return UserProfileSerializer(obj.user.all(), many=True).data
|
||||||
|
|
||||||
# recipient_id = UserProfileSerializer()
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = MessagePush
|
model = MessagePush
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
depth = 1
|
|
||||||
|
|
||||||
def save(self, **kwargs):
|
def save(self, **kwargs):
|
||||||
return super().save(**kwargs)
|
return super().save(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
class MessagePushCreateUpdateSerializer(CustomModelSerializer):
|
class MessagePushCreateUpdateSerializer(CustomModelSerializer):
|
||||||
|
"""
|
||||||
|
消息通知 创建/更新时的列化器
|
||||||
|
"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = MessagePush
|
model = MessagePush
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
|
class ExportMessagePushSerializer(CustomModelSerializer):
|
||||||
|
"""
|
||||||
|
导出 消息通知 简单序列化器
|
||||||
|
"""
|
||||||
|
users = serializers.CharField(read_only=True)
|
||||||
|
|
||||||
|
def get_users(self, obj):
|
||||||
|
return ','.join(MessagePush.objects.filter(id=obj.id).values_list('user__username', flat=True))
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = MessagePush
|
||||||
|
fields = (
|
||||||
|
'id', 'title', 'content', 'message_type', 'is_reviewed', 'status', 'users', 'creator', 'modifier',
|
||||||
|
'update_datetime', 'create_datetime')
|
||||||
|
|
|
@ -22,6 +22,8 @@ urlpatterns = [
|
||||||
# 用户获取个人消息通知列表页
|
# 用户获取个人消息通知列表页
|
||||||
re_path('message/list/(?P<pk>.*)/', MessagePushModelViewSet.as_view({"get": "get_message_list"})),
|
re_path('message/list/(?P<pk>.*)/', MessagePushModelViewSet.as_view({"get": "get_message_list"})),
|
||||||
# 用户获取个人通知列表
|
# 用户获取个人通知列表
|
||||||
re_path('message/receive/', MessagePushModelViewSet.as_view({"get": "get_received_messages"}))
|
re_path('message/receive/', MessagePushModelViewSet.as_view({"get": "get_received_messages"})),
|
||||||
|
# 消息通知导出
|
||||||
|
re_path('message/export/', MessagePushModelViewSet.as_view({'get': 'export',})),
|
||||||
]
|
]
|
||||||
urlpatterns += router.urls
|
urlpatterns += router.urls
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
|
||||||
|
from apps.op_drf.filters import DataLevelPermissionsFilter
|
||||||
from apps.op_drf.viewsets import CustomModelViewSet
|
from apps.op_drf.viewsets import CustomModelViewSet
|
||||||
from apps.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter
|
from apps.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter
|
||||||
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
|
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
|
||||||
|
@ -7,8 +8,7 @@ from apps.system.serializers import DictDataSerializer, DictDataCreateUpdateSeri
|
||||||
DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \
|
DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \
|
||||||
ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \
|
ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \
|
||||||
ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \
|
ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \
|
||||||
MessagePushSerializer, MessagePushCreateUpdateSerializer
|
MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer
|
||||||
from apps.op_drf.filters import DataLevelPermissionsFilter
|
|
||||||
from utils.export_excel import export_excel_save_model
|
from utils.export_excel import export_excel_save_model
|
||||||
from utils.response import SuccessResponse
|
from utils.response import SuccessResponse
|
||||||
|
|
||||||
|
@ -151,9 +151,8 @@ class MessagePushModelViewSet(CustomModelViewSet):
|
||||||
serializer_class = MessagePushSerializer
|
serializer_class = MessagePushSerializer
|
||||||
create_serializer_class = MessagePushCreateUpdateSerializer
|
create_serializer_class = MessagePushCreateUpdateSerializer
|
||||||
update_serializer_class = MessagePushCreateUpdateSerializer
|
update_serializer_class = MessagePushCreateUpdateSerializer
|
||||||
|
extra_filter_backends = [DataLevelPermissionsFilter]
|
||||||
extra_filter_backends = []
|
ordering = "-update_datetime" # 默认排序
|
||||||
ordering = "id" # 默认排序
|
|
||||||
|
|
||||||
def get_message_list(self, request: Request, *args, **kwargs):
|
def get_message_list(self, request: Request, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -189,3 +188,15 @@ class MessagePushModelViewSet(CustomModelViewSet):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def export(self, request: Request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
导出岗位
|
||||||
|
:param request:
|
||||||
|
:param args:
|
||||||
|
:param kwargs:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
field_data = ['消息序号', '标题', '内容', '消息类型', '是否审核', '消息状态','通知接收消息用户', '创建者', '修改者', '修改时间', '创建时间']
|
||||||
|
data = ExportMessagePushSerializer(MessagePush.objects.all(), many=True).data
|
||||||
|
return SuccessResponse(export_excel_save_model(request, field_data, data, '导出岗位数据.xls'))
|
||||||
|
|
|
@ -28,7 +28,7 @@ MONGO_PORT = 27017
|
||||||
REDIS_DB = 1
|
REDIS_DB = 1
|
||||||
REDIS_HOST = '127.0.0.1'
|
REDIS_HOST = '127.0.0.1'
|
||||||
REDIS_PORT = 6379
|
REDIS_PORT = 6379
|
||||||
REDIS_PASSWORD = ''
|
REDIS_PASSWORD = 'q1w2e3r4T%Y^U&'
|
||||||
|
|
||||||
# ================================================= #
|
# ================================================= #
|
||||||
# ************** 默认配置 ************** #
|
# ************** 默认配置 ************** #
|
||||||
|
|
|
@ -132,7 +132,7 @@ def export_excel_save_model(request,field_data,data,FilName):
|
||||||
savefile.type = 'application/vnd.ms-excel'
|
savefile.type = 'application/vnd.ms-excel'
|
||||||
savefile.size = os.path.getsize(os.path.join(settings.MEDIA_ROOT, file_rul))
|
savefile.size = os.path.getsize(os.path.join(settings.MEDIA_ROOT, file_rul))
|
||||||
savefile.address = '本地存储'
|
savefile.address = '本地存储'
|
||||||
savefile.creator = request.user.username
|
savefile.creator = request.user.id
|
||||||
savefile.modifier = request.user.username
|
savefile.modifier = request.user.username
|
||||||
savefile.save()
|
savefile.save()
|
||||||
return SaveFileSerializer(savefile).data
|
return SaveFileSerializer(savefile).data
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "message",
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
methods: {}
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
Loading…
Reference in New Issue