diff --git a/dvadmin-backend/apps/permission/serializers.py b/dvadmin-backend/apps/permission/serializers.py index e9eaab5..f3d86d4 100644 --- a/dvadmin-backend/apps/permission/serializers.py +++ b/dvadmin-backend/apps/permission/serializers.py @@ -211,6 +211,8 @@ class UserProfileSerializer(CustomModelSerializer): """ admin = serializers.SerializerMethodField(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): role_list = obj.role.all().values_list('admin', flat=True) @@ -218,6 +220,13 @@ class UserProfileSerializer(CustomModelSerializer): return True 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: model = UserProfile depth = 1 diff --git a/dvadmin-backend/apps/system/models/message_push.py b/dvadmin-backend/apps/system/models/message_push.py index d9f0c95..df1a991 100644 --- a/dvadmin-backend/apps/system/models/message_push.py +++ b/dvadmin-backend/apps/system/models/message_push.py @@ -1,6 +1,9 @@ +from django.db import models from django.db.models import * +from apps.op_drf.fields import UpdateDateTimeField, CreateDateTimeField 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): - content = TextField(verbose_name="通知内容") title = CharField(max_length=128, verbose_name="通知标题") - is_read = BooleanField(default=False, verbose_name="是否已读") - message_type = CharField(max_length=64, verbose_name="消息类型") - is_reviewed = BooleanField(default=False, verbose_name="是否审核") - is_send = BooleanField(default=False, verbose_name="是否已发送") - recipient_id = ManyToManyField(to="permission.UserProfile", db_constraint=False, null=True, blank=True, - related_name="recipient", related_query_name="recipient_query") + content = TextField(verbose_name="通知内容") + message_type = CharField(max_length=8, verbose_name="消息类型") + is_reviewed = BooleanField(default=True, verbose_name="是否审核") + status = CharField(max_length=8, verbose_name="消息状态") + user = ManyToManyField(to="permission.UserProfile", + related_name="user", related_query_name="user_query", through='MessagePushUser', + through_fields=('message_push', 'user')) class Meta: verbose_name = '消息通知' @@ -23,3 +26,20 @@ class MessagePush(CoreModel): def __str__(self): 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 diff --git a/dvadmin-backend/apps/system/serializers.py b/dvadmin-backend/apps/system/serializers.py index 258d3b1..960e5e5 100644 --- a/dvadmin-backend/apps/system/serializers.py +++ b/dvadmin-backend/apps/system/serializers.py @@ -1,13 +1,13 @@ from rest_framework import serializers from apps.op_drf.serializers import CustomModelSerializer +from apps.permission.serializers import UserProfileSerializer from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush + # ================================================= # # ************** 字典管理 序列化器 ************** # # ================================================= # -from permission.serializers import UserProfileSerializer - class DictDataSerializer(CustomModelSerializer): """ @@ -155,20 +155,48 @@ class SaveFileCreateUpdateSerializer(CustomModelSerializer): fields = '__all__' +# ================================================= # +# ************** 消息通知 序列化器 ************** # +# ================================================= # 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: model = MessagePush fields = "__all__" - depth = 1 def save(self, **kwargs): return super().save(**kwargs) class MessagePushCreateUpdateSerializer(CustomModelSerializer): + """ + 消息通知 创建/更新时的列化器 + """ + class Meta: model = MessagePush 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') diff --git a/dvadmin-backend/apps/system/urls.py b/dvadmin-backend/apps/system/urls.py index e678c6a..a090de9 100644 --- a/dvadmin-backend/apps/system/urls.py +++ b/dvadmin-backend/apps/system/urls.py @@ -22,6 +22,8 @@ urlpatterns = [ # 用户获取个人消息通知列表页 re_path('message/list/(?P.*)/', 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 diff --git a/dvadmin-backend/apps/system/views.py b/dvadmin-backend/apps/system/views.py index 7547b8b..c4657ab 100644 --- a/dvadmin-backend/apps/system/views.py +++ b/dvadmin-backend/apps/system/views.py @@ -1,5 +1,6 @@ from rest_framework.request import Request +from apps.op_drf.filters import DataLevelPermissionsFilter from apps.op_drf.viewsets import CustomModelViewSet from apps.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush @@ -7,8 +8,7 @@ from apps.system.serializers import DictDataSerializer, DictDataCreateUpdateSeri DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \ ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \ ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \ - MessagePushSerializer, MessagePushCreateUpdateSerializer -from apps.op_drf.filters import DataLevelPermissionsFilter + MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer from utils.export_excel import export_excel_save_model from utils.response import SuccessResponse @@ -151,9 +151,8 @@ class MessagePushModelViewSet(CustomModelViewSet): serializer_class = MessagePushSerializer create_serializer_class = MessagePushCreateUpdateSerializer update_serializer_class = MessagePushCreateUpdateSerializer - - extra_filter_backends = [] - ordering = "id" # 默认排序 + extra_filter_backends = [DataLevelPermissionsFilter] + ordering = "-update_datetime" # 默认排序 def get_message_list(self, request: Request, *args, **kwargs): """ @@ -189,3 +188,15 @@ class MessagePushModelViewSet(CustomModelViewSet): """ 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')) diff --git a/dvadmin-backend/conf/env.example.py b/dvadmin-backend/conf/env.example.py index 95a5da9..7346180 100644 --- a/dvadmin-backend/conf/env.example.py +++ b/dvadmin-backend/conf/env.example.py @@ -28,7 +28,7 @@ MONGO_PORT = 27017 REDIS_DB = 1 REDIS_HOST = '127.0.0.1' REDIS_PORT = 6379 -REDIS_PASSWORD = '' +REDIS_PASSWORD = 'q1w2e3r4T%Y^U&' # ================================================= # # ************** 默认配置 ************** # diff --git a/dvadmin-backend/utils/export_excel.py b/dvadmin-backend/utils/export_excel.py index 89bfef3..054462c 100644 --- a/dvadmin-backend/utils/export_excel.py +++ b/dvadmin-backend/utils/export_excel.py @@ -132,7 +132,7 @@ def export_excel_save_model(request,field_data,data,FilName): savefile.type = 'application/vnd.ms-excel' savefile.size = os.path.getsize(os.path.join(settings.MEDIA_ROOT, file_rul)) savefile.address = '本地存储' - savefile.creator = request.user.username + savefile.creator = request.user.id savefile.modifier = request.user.username savefile.save() return SaveFileSerializer(savefile).data diff --git a/dvadmin-ui/src/views/system/message/index.vue b/dvadmin-ui/src/views/system/message/index.vue new file mode 100644 index 0000000..994e089 --- /dev/null +++ b/dvadmin-ui/src/views/system/message/index.vue @@ -0,0 +1,22 @@ + + + + +