From 9fb796194e163f4fa2cdf760cc2c259cebd970bd Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 19 Apr 2026 00:30:07 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(im):=20=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E7=9A=84=20IM=20=E5=A2=9E=E5=8A=A0=20Layout=20=E6=95=B4?= =?UTF-8?q?=E4=BD=93=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/im/message/group/index.ts | 53 ++++++++++++ src/api/im/message/private/index.ts | 41 ++++++++++ src/layout/components/ToolHeader.vue | 31 +++---- src/router/modules/remaining.ts | 107 +++++++++++++++++++++++-- src/views/im/manager/friend/index.vue | 21 +++++ src/views/im/manager/group/index.vue | 21 +++++ src/views/im/manager/message/index.vue | 21 +++++ 7 files changed, 275 insertions(+), 20 deletions(-) create mode 100644 src/api/im/message/group/index.ts create mode 100644 src/api/im/message/private/index.ts create mode 100644 src/views/im/manager/friend/index.vue create mode 100644 src/views/im/manager/group/index.vue create mode 100644 src/views/im/manager/message/index.vue diff --git a/src/api/im/message/group/index.ts b/src/api/im/message/group/index.ts new file mode 100644 index 000000000..47dd0f007 --- /dev/null +++ b/src/api/im/message/group/index.ts @@ -0,0 +1,53 @@ +import request from '@/config/axios' + +// 群聊消息发送 Request VO +export interface ImGroupMessageSendReqVO { + clientMessageId: string // 客户端消息编号 + groupId: number // 群编号 + type: number // 消息类型 + content: string // 消息内容 + atUserIds?: number[] // @ 用户编号列表 + receiverUserIds?: number[] // 定向接收用户编号列表 + needReceipt?: boolean // 是否需要回执 +} + +// 群聊消息 Response VO +export interface ImGroupMessageRespVO { + id: string // 消息编号 + clientMessageId: string // 客户端消息编号 + senderId: string // 发送人编号 + groupId: string // 群编号 + type: number // 消息类型 + content: string // 消息内容 + status: number // 消息状态 + sendTime: string // 发送时间 + atUserIds?: number[] // @ 用户编号列表 + receiverUserIds?: number[] // 定向接收用户编号列表 + receiptStatus?: number // 回执状态 + readCount?: number // 已读人数 +} + +// 发送群聊消息 +export const sendGroupMessage = (data: ImGroupMessageSendReqVO) => { + return request.post({ url: '/im/message/group/send', data }) +} + +// 增量拉取群聊消息 +export const pullGroupMessages = (params: { minId: string; size: number }) => { + return request.get({ url: '/im/message/group/pull', params }) +} + +// 标记群聊消息已读 +export const readGroupMessages = (groupId: string) => { + return request.put({ url: '/im/message/group/read', params: { groupId } }) +} + +// 撤回群聊消息 +export const recallGroupMessage = (id: string) => { + return request.delete({ url: '/im/message/group/recall', params: { id } }) +} + +// 查询群消息已读用户列表 +export const getGroupReadUsers = (params: { groupId: string; messageId: string }) => { + return request.get({ url: '/im/message/group/read-users', params }) +} diff --git a/src/api/im/message/private/index.ts b/src/api/im/message/private/index.ts new file mode 100644 index 000000000..3073d3741 --- /dev/null +++ b/src/api/im/message/private/index.ts @@ -0,0 +1,41 @@ +import request from '@/config/axios' + +// 私聊消息发送 Request VO +export interface ImPrivateMessageSendReqVO { + clientMessageId: string // 客户端消息编号 + receiverId: number // 接收人编号 + type: number // 消息类型 + content: string // 消息内容 +} + +// 私聊消息 Response VO +export interface ImPrivateMessageRespVO { + id: number // 消息编号 + clientMessageId: string // 客户端消息编号 + senderId: number // 发送人编号 + receiverId: number // 接收人编号 + type: number // 消息类型 + content: string // 消息内容 + status: number // 消息状态 + sendTime: string // 发送时间 +} + +// 发送私聊消息 +export const sendPrivateMessage = (data: ImPrivateMessageSendReqVO) => { + return request.post({ url: '/im/message/private/send', data }) +} + +// 增量拉取私聊消息 +export const pullPrivateMessages = (params: { minId: string; size: number }) => { + return request.get({ url: '/im/message/private/pull', params }) +} + +// 标记私聊消息已读 +export const readPrivateMessages = (friendId: string) => { + return request.put({ url: '/im/message/private/read', params: { friendId } }) +} + +// 撤回私聊消息 +export const recallPrivateMessage = (id: string) => { + return request.delete({ url: '/im/message/private/recall', params: { id } }) +} diff --git a/src/layout/components/ToolHeader.vue b/src/layout/components/ToolHeader.vue index 9965847e9..0437f39bd 100644 --- a/src/layout/components/ToolHeader.vue +++ b/src/layout/components/ToolHeader.vue @@ -1,7 +1,7 @@ + + diff --git a/src/views/im/manager/group/index.vue b/src/views/im/manager/group/index.vue new file mode 100644 index 000000000..dc1839086 --- /dev/null +++ b/src/views/im/manager/group/index.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/src/views/im/manager/message/index.vue b/src/views/im/manager/message/index.vue new file mode 100644 index 000000000..d8cea4b31 --- /dev/null +++ b/src/views/im/manager/message/index.vue @@ -0,0 +1,21 @@ + + + + +