diff --git a/apps/system_manage/api/chat_user.py b/apps/system_manage/api/chat_user.py index 3ff2e893ea9..3c259464c08 100644 --- a/apps/system_manage/api/chat_user.py +++ b/apps/system_manage/api/chat_user.py @@ -1,11 +1,12 @@ # coding=utf-8 """ - @project: MaxKB - @Author:虎虎 - @file: user.py - @date:2025/4/14 19:23 - @desc: +@project: MaxKB +@Author:虎虎 +@file: user.py +@date:2025/4/14 19:23 +@desc: """ + from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import OpenApiParameter @@ -25,14 +26,11 @@ def get_data(self): class CreateChatUserRequestSerializer(CreateUserSerializer): user_group_ids = serializers.ListField( - child=serializers.CharField(required=True), - required=True, - label=_('User Group IDs') + child=serializers.CharField(required=True), required=True, label=_("User Group IDs") ) class ChatUserAPI(APIMixin): - @staticmethod def get_response(): return ChatUserResponse @@ -43,31 +41,31 @@ def get_request(): @staticmethod def get_parameters(): - return [OpenApiParameter( - name="user_id", - description=_('User ID'), - type=OpenApiTypes.STR, - location=OpenApiParameter.PATH, - required=True, - )] + return [ + OpenApiParameter( + name="user_id", + description=_("User ID"), + type=OpenApiTypes.STR, + location=OpenApiParameter.PATH, + required=True, + ) + ] class BatchAddGroupApi(APIMixin): - @staticmethod def get_request(): return ChatUserSerializer.BatchAddGroup class UserPasswordResponse(APIMixin): - @staticmethod def get_response(): return PasswordResponse class Password(serializers.Serializer): - password = serializers.CharField(required=True, label=_('Password')) + password = serializers.CharField(required=True, label=_("Password")) class PasswordResponse(ResultSerializer): @@ -77,22 +75,22 @@ def get_data(self): class EditChatUserRequestSerializer(ChatUserSerializer.UserEditInstance): user_group_ids = serializers.ListField( - child=serializers.CharField(required=True), - required=True, - label=_('User Group IDs') + child=serializers.CharField(required=True), required=True, label=_("User Group IDs") ) class EditUserApi(APIMixin): @staticmethod def get_parameters(): - return [OpenApiParameter( - name="user_id", - description=_('User ID'), - type=OpenApiTypes.STR, - location=OpenApiParameter.PATH, - required=True, - )] + return [ + OpenApiParameter( + name="user_id", + description=_("User ID"), + type=OpenApiTypes.STR, + location=OpenApiParameter.PATH, + required=True, + ) + ] @staticmethod def get_request(): @@ -100,21 +98,17 @@ def get_request(): class ChatUserListResponse(serializers.Serializer): - id = serializers.CharField(required=True, label=_('ID')) - username = serializers.CharField(required=True, label=_('Username')) - nick_name = serializers.CharField(required=True, label=_('Nickname')) - email = serializers.EmailField(required=False, allow_blank=True, label=_('Email')) - phone = serializers.CharField(required=False, allow_blank=True, label=_('Phone')) - is_active = serializers.BooleanField(required=False, default=True, label=_('Is Active')) + id = serializers.CharField(required=True, label=_("ID")) + username = serializers.CharField(required=True, label=_("Username")) + nick_name = serializers.CharField(required=True, label=_("Nickname")) + email = serializers.EmailField(required=False, allow_blank=True, label=_("Email")) + phone = serializers.CharField(required=False, allow_blank=True, label=_("Phone")) + is_active = serializers.BooleanField(required=False, default=True, label=_("Is Active")) user_group_ids = serializers.ListField( - child=serializers.CharField(required=True), - required=True, - label=_('User Group IDs') + child=serializers.CharField(required=True), required=True, label=_("User Group IDs") ) user_group_names = serializers.ListField( - child=serializers.CharField(required=True), - required=True, - label=_('User Group Names') + child=serializers.CharField(required=True), required=True, label=_("User Group Names") ) @@ -126,54 +120,58 @@ def get_data(self): class ChatUserPageApi(APIMixin): @staticmethod def get_parameters(): - return [OpenApiParameter( - name="username", - description=_('Username'), - type=OpenApiTypes.STR, - location=OpenApiParameter.QUERY, - required=False, - ), + return [ + OpenApiParameter( + name="username", + description=_("Username"), + type=OpenApiTypes.STR, + location=OpenApiParameter.QUERY, + required=False, + ), OpenApiParameter( name="nick_name", - description=_('Nickname'), + description=_("Nickname"), + type=OpenApiTypes.STR, + location=OpenApiParameter.QUERY, + required=False, + ), + OpenApiParameter( + name="email", + description=_("Email"), type=OpenApiTypes.STR, location=OpenApiParameter.QUERY, required=False, ), OpenApiParameter( name="source", - description=_('Source'), + description=_("Source"), type=OpenApiTypes.STR, location=OpenApiParameter.QUERY, required=False, ), OpenApiParameter( name="is_active", - description=_('Is Active'), + description=_("Is Active"), type=OpenApiTypes.BOOL, location=OpenApiParameter.QUERY, required=False, ), OpenApiParameter( - name='current_page', + name="current_page", type=OpenApiTypes.INT, - description=_('Current page'), + description=_("Current page"), required=True, location=OpenApiParameter.PATH, ), OpenApiParameter( - name='page_size', + name="page_size", type=OpenApiTypes.INT, - description=_('Page size'), + description=_("Page size"), required=True, location=OpenApiParameter.PATH, ), - ] @staticmethod def get_response(): return ChatUsersListResponse - - - diff --git a/apps/system_manage/serializers/chat_user.py b/apps/system_manage/serializers/chat_user.py index 256050c506d..e039b35f429 100644 --- a/apps/system_manage/serializers/chat_user.py +++ b/apps/system_manage/serializers/chat_user.py @@ -133,6 +133,7 @@ def _check_unique_username_and_email(self): class Query(serializers.Serializer): username = serializers.CharField(required=False, label=_("Username"), allow_null=True, allow_blank=True) nick_name = serializers.CharField(required=False, label=_("Nickname"), allow_null=True, allow_blank=True) + email = serializers.CharField(required=False, label=_("Email"), allow_null=True, allow_blank=True) source = serializers.CharField(required=False, label=_("Source"), allow_null=True, allow_blank=True) is_active = serializers.BooleanField(required=False, label=_("Is active"), allow_null=True) @@ -144,6 +145,9 @@ def get_query_set(self): nick_name = self.data.get("nick_name") if nick_name is not None: query_set = query_set.filter(Q(nick_name__contains=nick_name)) + email = self.data.get("email") + if email is not None: + query_set = query_set.filter(Q(email__contains=email)) source = self.data.get("source") if source is not None: query_set = query_set.filter(source=source) diff --git a/apps/system_manage/views/system_chat_user.py b/apps/system_manage/views/system_chat_user.py index bc8bfd11000..ba137542806 100644 --- a/apps/system_manage/views/system_chat_user.py +++ b/apps/system_manage/views/system_chat_user.py @@ -247,6 +247,7 @@ def get(self, request: Request, current_page, page_size): data={ "username": request.query_params.get("username", None), "nick_name": request.query_params.get("nick_name", None), + "email": request.query_params.get("email", None), "source": request.query_params.get("source", None), "is_active": request.query_params.get("is_active", None), "user_id": str(request.user.id), diff --git a/ui/src/views/system/chat-management/user-groups/index.vue b/ui/src/views/system/chat-management/user-groups/index.vue index 54fa640e75b..ee326e3406d 100644 --- a/ui/src/views/system/chat-management/user-groups/index.vue +++ b/ui/src/views/system/chat-management/user-groups/index.vue @@ -1,5 +1,5 @@