diff --git a/apps/system_manage/serializers/chat_user.py b/apps/system_manage/serializers/chat_user.py index 561e73e1bd4..a3b4999e1fe 100644 --- a/apps/system_manage/serializers/chat_user.py +++ b/apps/system_manage/serializers/chat_user.py @@ -452,8 +452,11 @@ def get_user_list(self, with_valid=True): return ChatUserInstanceSerializer(users, many=True).data @classmethod - def list(cls): - users = ChatUser.objects.all().order_by("-create_time") + def list(cls, nick_name=None): + query_set = ChatUser.objects.all().order_by("-create_time") + if nick_name: + query_set = query_set.filter(nick_name__contains=nick_name) + users = query_set[:200] return ChatUserInstanceSerializer(users, many=True).data diff --git a/apps/system_manage/views/system_chat_user.py b/apps/system_manage/views/system_chat_user.py index 4393e0b7e6b..fe373c34827 100644 --- a/apps/system_manage/views/system_chat_user.py +++ b/apps/system_manage/views/system_chat_user.py @@ -99,7 +99,7 @@ class List(APIView): RoleConstants.WORKSPACE_MANAGE, ) def get(self, request: Request): - return result.success(ChatUserSerializer.list()) + return result.success(ChatUserSerializer.list(request.query_params.get("nick_name", None))) class Operate(APIView): authentication_classes = [TokenAuth] diff --git a/ui/src/api/admin/system/chat-management/chat-user.ts b/ui/src/api/admin/system/chat-management/chat-user.ts index fb7537496ef..a3012f12aec 100644 --- a/ui/src/api/admin/system/chat-management/chat-user.ts +++ b/ui/src/api/admin/system/chat-management/chat-user.ts @@ -17,8 +17,8 @@ import type { const prefix = '/system/chat_user' /** 获取对话用户。 */ -const getChatUser = () => { - return get(`${prefix}/list`) +const getChatUser = (query?: Dict) => { + return get(`${prefix}/list`, query) } /** 获取对话用户分页列表。 */ diff --git a/ui/src/views/system/chat-management/user-groups/dialog/CreateGroupMemberDialog.vue b/ui/src/views/system/chat-management/user-groups/dialog/CreateGroupMemberDialog.vue index 3fd26790710..7f5e0d03aab 100644 --- a/ui/src/views/system/chat-management/user-groups/dialog/CreateGroupMemberDialog.vue +++ b/ui/src/views/system/chat-management/user-groups/dialog/CreateGroupMemberDialog.vue @@ -17,18 +17,24 @@ const userOptions = ref([]) const memberForm = reactive<{ userIds: string[] }>({ userIds: [] }) const formRules: FormRules = { userIds: [{ required: true, message: '请选择对话用户', trigger: 'change' }] } -function open() { - visible.value = true +function loadUserOptions(keyword = '') { optionsLoading.value = true - return ChatUserApi.getChatUser() + return ChatUserApi.getChatUser(keyword ? { nick_name: keyword } : undefined) .then((users) => { - userOptions.value = users + const selectedUserIds = new Set(memberForm.userIds) + const selectedUserOptions = userOptions.value.filter(({ id }) => selectedUserIds.has(id)) + userOptions.value = [...new Map([...selectedUserOptions, ...users].map((user) => [user.id, user])).values()] }) .finally(() => { optionsLoading.value = false }) } +function open() { + visible.value = true + return loadUserOptions() +} + function submit() { const groupId = props.currentGroup?.id if (!groupId) return @@ -64,7 +70,17 @@ defineExpose({ open }) - +