From 63b783c8f5de867a66178a94b7a81745c2756ef5 Mon Sep 17 00:00:00 2001 From: teukkk Date: Tue, 17 Jun 2025 16:44:17 +0800 Subject: [PATCH] feat: systemChatUserGroup --- ui/src/api/chat-user/chat-user.ts | 6 +- ui/src/api/system/chat-user.ts | 12 +- ui/src/api/system/user-group.ts | 36 +- ui/src/api/type/common.ts | 6 +- ui/src/api/type/systemChatUser.ts | 29 ++ ui/src/locales/lang/zh-CN/views/chat-user.ts | 5 + ui/src/views/chat-user/index.vue | 17 +- .../group/component/CreateGroupDialog.vue | 122 ------ .../component/CreateOrUpdateGroupDialog.vue | 71 ++++ ui/src/views/system-chat-user/group/index.vue | 381 ++++++++++++++---- 10 files changed, 454 insertions(+), 231 deletions(-) create mode 100644 ui/src/api/type/systemChatUser.ts delete mode 100644 ui/src/views/system-chat-user/group/component/CreateGroupDialog.vue create mode 100644 ui/src/views/system-chat-user/group/component/CreateOrUpdateGroupDialog.vue diff --git a/ui/src/api/chat-user/chat-user.ts b/ui/src/api/chat-user/chat-user.ts index ef59baec1..0c8a39073 100644 --- a/ui/src/api/chat-user/chat-user.ts +++ b/ui/src/api/chat-user/chat-user.ts @@ -19,12 +19,12 @@ const getUserGroupUserList: ( resource: ChatUserResourceParams, user_group_id: string, page: pageRequest, - param: any, + username_or_nickname: string, loading?: Ref, -) => Promise>> = (resource, user_group_id, page, param, loading) => { +) => Promise>> = (resource, user_group_id, page, username_or_nickname, loading) => { return get( `${prefix}/${resource.resource_type}/${resource.resource_id}/user_group_id/${user_group_id}/${page.current_page}/${page.page_size}`, - param, + username_or_nickname ? { username_or_nickname } : undefined, loading, ) } diff --git a/ui/src/api/system/chat-user.ts b/ui/src/api/system/chat-user.ts index 730de1ce5..0279b25bf 100644 --- a/ui/src/api/system/chat-user.ts +++ b/ui/src/api/system/chat-user.ts @@ -1,9 +1,18 @@ import { Result } from '@/request/Result' import { get, put, post, del } from '@/request/index' import type { pageRequest } from '@/api/type/common' +import type { ChatUserItem } from '@/api/type/systemChatUser' import type { Ref } from 'vue' - const prefix = '/system/chat_user' + + +/** + * 用户列表 + */ +const getChatUserList: (loading?: Ref) => Promise> = (loading) => { + return get(`${prefix}/list`, undefined, loading) +} + /** * 用户分页列表 * @query 参数 @@ -71,4 +80,5 @@ export default { delUserManage, postUserManage, putUserManagePassword, + getChatUserList } diff --git a/ui/src/api/system/user-group.ts b/ui/src/api/system/user-group.ts index 59363266a..d793bd072 100644 --- a/ui/src/api/system/user-group.ts +++ b/ui/src/api/system/user-group.ts @@ -1,13 +1,15 @@ -import {Result} from '@/request/Result' -import {get, post, del, put} from '@/request/index' -import type {Ref} from 'vue' +import { Result } from '@/request/Result' +import { get, post, del } from '@/request/index' +import type { Ref } from 'vue' +import type { ChatUserGroupUserItem, } from '@/api/type/systemChatUser' +import type { pageRequest, PageList, ListItem } from '@/api/type/common' const prefix = '/system/group' /** * 获取用户组列表 */ -const getUserGroup: (loading?: Ref) => Promise> = () => { +const getUserGroup: (loading?: Ref) => Promise> = () => { return get(`${prefix}`) } @@ -19,7 +21,7 @@ const getUserGroup: (loading?: Ref) => Promise> = () => { "name": "string" } */ -const postUserGroup: (data: any, loading?: Ref) => Promise> = ( +const postUserGroup: (data: ListItem, loading?: Ref) => Promise> = ( data, loading, ) => { @@ -30,7 +32,7 @@ const postUserGroup: (data: any, loading?: Ref) => Promise) => Promise> = ( +const delUserGroup: (user_group_id: string, loading?: Ref) => Promise> = ( user_group_id, loading, ) => { @@ -48,7 +50,7 @@ const delUserGroup: (user_group_id: String, loading?: Ref) => Promise, loading?: Ref, ) => Promise> = (user_group_id, body, loading) => { return post(`${prefix}/${user_group_id}/add_member`, body, {}, loading) @@ -64,16 +66,32 @@ const postAddMember: ( */ const postRemoveMember: ( user_group_id: string, - body: any, + body: Record, loading?: Ref, ) => Promise> = (user_group_id, body, loading) => { - return post(`${prefix}/${user_group_id}`, body, {}, loading) + return post(`${prefix}/${user_group_id}/remove_member`, body, {}, loading) } +/** + * 获取用户组的成员列表 + */ +const getUserListByGroup: ( + user_group_id: string, + page: pageRequest, + username: string, + loading?: Ref, +) => Promise>> = (user_group_id, page, username, loading) => { + return get( + `${prefix}/${user_group_id}/user_list/${page.current_page}/${page.page_size}`, + username ? { username } : undefined, + loading, + ) +} export default { getUserGroup, postUserGroup, delUserGroup, postAddMember, postRemoveMember, + getUserListByGroup } diff --git a/ui/src/api/type/common.ts b/ui/src/api/type/common.ts index f5674e206..7b5b71f6d 100644 --- a/ui/src/api/type/common.ts +++ b/ui/src/api/type/common.ts @@ -18,4 +18,8 @@ interface PageList { records: T } -export type { KeyValue, Dict, pageRequest, PageList } +interface ListItem { + name: string, + id?: string, +} +export type { KeyValue, Dict, pageRequest, PageList, ListItem } diff --git a/ui/src/api/type/systemChatUser.ts b/ui/src/api/type/systemChatUser.ts new file mode 100644 index 000000000..c561f9165 --- /dev/null +++ b/ui/src/api/type/systemChatUser.ts @@ -0,0 +1,29 @@ +interface ChatUserItem { + create_time: string, + email: string, + id: string, + nick_name: string, + phone: string, + source: string, + update_time: string, + username: string, + is_active: boolean, + user_group_ids?: string[], + user_group_names?: string[], +} + +// TODO +interface ChatUserGroupUserItem { + id: string, + is_auth: boolean, + email: string, + phone: string, + nick_name: string, + username: string, + password: string, + source: string, + is_active: boolean, + create_time: string, + update_time: string, +} +export type { ChatUserGroupUserItem, ChatUserItem } \ No newline at end of file diff --git a/ui/src/locales/lang/zh-CN/views/chat-user.ts b/ui/src/locales/lang/zh-CN/views/chat-user.ts index 63e06ab9e..80cdf2119 100644 --- a/ui/src/locales/lang/zh-CN/views/chat-user.ts +++ b/ui/src/locales/lang/zh-CN/views/chat-user.ts @@ -6,5 +6,10 @@ export default { authorization: '授权', group: { title: '用户组', + name: '用户组名称', + delete: { + confirmTitle: '是否删除用户组:', + confirmMessage: '删除后,该用户组下的成员将全部移除,请谨慎操作!', + }, } } diff --git a/ui/src/views/chat-user/index.vue b/ui/src/views/chat-user/index.vue index dce81985a..05dc09e70 100644 --- a/ui/src/views/chat-user/index.vue +++ b/ui/src/views/chat-user/index.vue @@ -37,7 +37,7 @@ - {{ current?.user_count }} + {{ paginationConfig.total }} @@ -48,9 +48,9 @@
@@ -60,7 +60,7 @@
+ @changePage="getList"> @@ -150,9 +150,9 @@ function clickUserGroup(item: ChatUserGroupItem) { const rightLoading = ref(false) -const searchType = ref('username_or_nickname') +const searchType = ref('name') const searchForm = ref>({ - username_or_nickname: '', + name: '', }) const automaticAuthorization = ref(false) const paginationConfig = reactive({ @@ -166,10 +166,7 @@ const tableData = ref([]) async function getList() { if (!current.value?.id) return try { - const params = { - [searchType.value]: searchForm.value[searchType.value], - } - const res = await ChatUserApi.getUserGroupUserList(resource, current.value?.id, paginationConfig, params, rightLoading) + const res = await ChatUserApi.getUserGroupUserList(resource, current.value?.id, paginationConfig, searchForm.value.name, rightLoading) tableData.value = res.data.records paginationConfig.total = res.data.total } catch (error) { diff --git a/ui/src/views/system-chat-user/group/component/CreateGroupDialog.vue b/ui/src/views/system-chat-user/group/component/CreateGroupDialog.vue deleted file mode 100644 index 148c25198..000000000 --- a/ui/src/views/system-chat-user/group/component/CreateGroupDialog.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - diff --git a/ui/src/views/system-chat-user/group/component/CreateOrUpdateGroupDialog.vue b/ui/src/views/system-chat-user/group/component/CreateOrUpdateGroupDialog.vue new file mode 100644 index 000000000..89d7f91ea --- /dev/null +++ b/ui/src/views/system-chat-user/group/component/CreateOrUpdateGroupDialog.vue @@ -0,0 +1,71 @@ + + + diff --git a/ui/src/views/system-chat-user/group/index.vue b/ui/src/views/system-chat-user/group/index.vue index 04943f090..57c4e1068 100644 --- a/ui/src/views/system-chat-user/group/index.vue +++ b/ui/src/views/system-chat-user/group/index.vue @@ -1,117 +1,328 @@