♻️ refactor(im): 重命名 IM 模块中的多个类和文件以简化结构
parent
6d6515c06d
commit
6664afb851
|
|
@ -0,0 +1,45 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// IM 好友 Response VO
|
||||
export interface ImFriendRespVO {
|
||||
id: number // 关系记录编号
|
||||
friendUserId: number // 好友的用户编号
|
||||
muted?: boolean // 是否免打扰
|
||||
status?: number // 好友状态(0=正常,1=已删除)
|
||||
addTime?: string // 添加好友时间
|
||||
deleteTime?: string // 删除好友时间
|
||||
// 聚合字段(自 AdminUser)
|
||||
nickname?: string // 好友昵称
|
||||
avatar?: string // 好友头像
|
||||
}
|
||||
|
||||
// IM 好友更新 Request VO
|
||||
export interface ImFriendUpdateReqVO {
|
||||
friendUserId: number // 好友的用户编号
|
||||
muted: boolean // 是否免打扰
|
||||
}
|
||||
|
||||
// 获得当前登录用户的好友列表
|
||||
export const getMyFriendList = () => {
|
||||
return request.get<ImFriendRespVO[]>({ url: '/im/friend/list' })
|
||||
}
|
||||
|
||||
// 获得好友详情
|
||||
export const getFriend = (friendUserId: number | string) => {
|
||||
return request.get<ImFriendRespVO>({ url: '/im/friend/get', params: { friendUserId } })
|
||||
}
|
||||
|
||||
// 添加好友(双向建立关系)
|
||||
export const addFriend = (friendUserId: number | string) => {
|
||||
return request.post<boolean>({ url: '/im/friend/add', params: { friendUserId } })
|
||||
}
|
||||
|
||||
// 删除好友(双向软删除)
|
||||
export const deleteFriend = (friendUserId: number | string) => {
|
||||
return request.delete<boolean>({ url: '/im/friend/delete', params: { friendUserId } })
|
||||
}
|
||||
|
||||
// 更新好友信息(当前仅免打扰)
|
||||
export const updateFriend = (data: ImFriendUpdateReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/friend/update', data })
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 群 Response VO
|
||||
export interface ImGroupRespVO {
|
||||
id: number // 编号
|
||||
name: string // 群名称
|
||||
ownerUserId: number // 群主用户编号
|
||||
avatar?: string // 群头像
|
||||
notice?: string // 群公告
|
||||
banned?: boolean // 是否封禁
|
||||
bannedTime?: string // 封禁时间
|
||||
status: number // 群状态(0=正常,1=已解散)
|
||||
dissolvedTime?: string // 解散时间
|
||||
createTime?: string // 创建时间
|
||||
}
|
||||
|
||||
// 群创建 Request VO
|
||||
export interface ImGroupCreateReqVO {
|
||||
name: string // 群名称
|
||||
}
|
||||
|
||||
// 群更新 Request VO
|
||||
export interface ImGroupUpdateReqVO {
|
||||
id: number // 群编号
|
||||
name?: string // 群名称
|
||||
avatar?: string // 群头像
|
||||
notice?: string // 群公告
|
||||
}
|
||||
|
||||
// 获得当前登录用户的群列表
|
||||
export const getMyGroupList = () => {
|
||||
return request.get<ImGroupRespVO[]>({ url: '/im/group/list' })
|
||||
}
|
||||
|
||||
// 获得群详情
|
||||
export const getGroup = (id: number | string) => {
|
||||
return request.get<ImGroupRespVO>({ url: '/im/group/get', params: { id } })
|
||||
}
|
||||
|
||||
// 创建群
|
||||
export const createGroup = (data: ImGroupCreateReqVO) => {
|
||||
return request.post<ImGroupRespVO>({ url: '/im/group/create', data })
|
||||
}
|
||||
|
||||
// 更新群
|
||||
export const updateGroup = (data: ImGroupUpdateReqVO) => {
|
||||
return request.put<ImGroupRespVO>({ url: '/im/group/update', data })
|
||||
}
|
||||
|
||||
// 解散群
|
||||
export const dissolveGroup = (id: number | string) => {
|
||||
return request.delete<boolean>({ url: '/im/group/dissolve', params: { id } })
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 群成员 Response VO
|
||||
export interface ImGroupMemberRespVO {
|
||||
id: number // 编号
|
||||
groupId: number // 群编号
|
||||
userId: number // 用户编号
|
||||
displayUserName?: string // 组内显示名(群主设置的备注)
|
||||
displayGroupName?: string // 群显示备注(当前用户对群的备注)
|
||||
muted?: boolean // 是否免打扰
|
||||
status?: number // 成员状态(0=在群,1=退群)
|
||||
joinTime?: string // 入群时间
|
||||
quitTime?: string // 退群时间
|
||||
createTime?: string // 创建时间
|
||||
// 聚合字段(自 AdminUser)
|
||||
nickname?: string // 用户昵称
|
||||
avatar?: string // 用户头像
|
||||
}
|
||||
|
||||
// 群成员邀请 Request VO
|
||||
export interface ImGroupMemberInviteReqVO {
|
||||
groupId: number // 群编号
|
||||
memberUserIds: number[] // 被邀请的用户编号列表
|
||||
}
|
||||
|
||||
// 群成员移除 Request VO
|
||||
export interface ImGroupMemberRemoveReqVO {
|
||||
groupId: number // 群编号
|
||||
memberUserIds: number[] // 被移除的用户编号列表
|
||||
}
|
||||
|
||||
// 群成员更新 Request VO
|
||||
export interface ImGroupMemberUpdateReqVO {
|
||||
groupId: number // 群编号
|
||||
displayUserName?: string // 群内昵称
|
||||
displayGroupName?: string // 群名备注
|
||||
muted?: boolean // 是否免打扰
|
||||
}
|
||||
|
||||
// 邀请用户加入群
|
||||
export const inviteGroupMember = (data: ImGroupMemberInviteReqVO) => {
|
||||
return request.post<boolean>({ url: '/im/group/invite', data })
|
||||
}
|
||||
|
||||
// 退出群
|
||||
export const quitGroup = (groupId: number | string) => {
|
||||
return request.delete<boolean>({ url: '/im/group/quit', params: { groupId } })
|
||||
}
|
||||
|
||||
// 移除群成员
|
||||
export const removeGroupMember = (data: ImGroupMemberRemoveReqVO) => {
|
||||
return request.delete<boolean>({ url: '/im/group/kicking', data })
|
||||
}
|
||||
|
||||
// 获得群成员详情
|
||||
export const getGroupMember = (id: number | string) => {
|
||||
return request.get<ImGroupMemberRespVO>({ url: '/im/group-member/get', params: { id } })
|
||||
}
|
||||
|
||||
// 获得指定群的成员列表(聚合 AdminUser 昵称 / 头像)
|
||||
export const getGroupMemberList = (groupId: number | string) => {
|
||||
return request.get<ImGroupMemberRespVO[]>({
|
||||
url: '/im/group-member/list',
|
||||
params: { groupId }
|
||||
})
|
||||
}
|
||||
|
||||
// 更新群成员
|
||||
export const updateGroupMember = (data: ImGroupMemberUpdateReqVO) => {
|
||||
return request.put<boolean>({ url: '/im/group-member/update', data })
|
||||
}
|
||||
|
|
@ -1,30 +1,36 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 群聊消息 Response VO
|
||||
export interface ImGroupMessageRespVO {
|
||||
id: number // 消息编号
|
||||
clientMessageId: string // 客户端消息编号
|
||||
senderId: number // 发送人编号
|
||||
groupId: number // 群编号
|
||||
type: number // 消息类型
|
||||
content: string // 消息内容(JSON 格式)
|
||||
status: number // 消息状态
|
||||
sendTime: string // 发送时间
|
||||
atUserIds?: number[] // @ 目标用户编号列表
|
||||
receiverUserIds?: number[] // 定向接收用户编号列表
|
||||
receiptStatus?: number // 回执状态
|
||||
readCount?: number // 已读人数(回执消息、且发送人为当前用户时有值)
|
||||
}
|
||||
|
||||
// 群聊消息发送 Request VO
|
||||
export interface ImGroupMessageSendReqVO {
|
||||
clientMessageId: string // 客户端消息编号
|
||||
groupId: number // 群编号
|
||||
type: number // 消息类型
|
||||
content: string // 消息内容
|
||||
atUserIds?: number[] // @ 用户编号列表
|
||||
receiverUserIds?: number[] // 定向接收用户编号列表
|
||||
needReceipt?: boolean // 是否需要回执
|
||||
content: string // 消息内容(JSON 格式)
|
||||
atUserIds?: number[] // @ 目标用户编号列表
|
||||
receipt?: 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 // 已读人数
|
||||
// 群聊历史消息列表 Request VO
|
||||
export interface ImGroupMessageListReqVO {
|
||||
groupId: number | string // 群编号
|
||||
maxId?: number | string // 起始消息编号(不含),为空则从最新消息开始
|
||||
limit: number // 拉取数量(1 ~ 200)
|
||||
}
|
||||
|
||||
// 发送群聊消息
|
||||
|
|
@ -32,22 +38,36 @@ export const sendGroupMessage = (data: ImGroupMessageSendReqVO) => {
|
|||
return request.post<ImGroupMessageRespVO>({ url: '/im/message/group/send', data })
|
||||
}
|
||||
|
||||
// 增量拉取群聊消息
|
||||
export const pullGroupMessages = (params: { minId: string; size: number }) => {
|
||||
// 拉取群聊消息(增量)
|
||||
export const pullGroupMessages = (params: { minId: number | string; size: number }) => {
|
||||
return request.get<ImGroupMessageRespVO[]>({ url: '/im/message/group/pull', params })
|
||||
}
|
||||
|
||||
// 查询群聊历史消息
|
||||
export const getGroupMessageList = (params: ImGroupMessageListReqVO) => {
|
||||
return request.get<ImGroupMessageRespVO[]>({ url: '/im/message/group/list', params })
|
||||
}
|
||||
|
||||
// 标记群聊消息已读
|
||||
export const readGroupMessages = (groupId: string) => {
|
||||
return request.put({ url: '/im/message/group/read', params: { groupId } })
|
||||
export const readGroupMessages = (groupId: number | string, messageId: number | string) => {
|
||||
return request.put<boolean>({
|
||||
url: '/im/message/group/read',
|
||||
params: { groupId, messageId }
|
||||
})
|
||||
}
|
||||
|
||||
// 撤回群聊消息
|
||||
export const recallGroupMessage = (id: string) => {
|
||||
return request.delete({ url: '/im/message/group/recall', params: { id } })
|
||||
export const recallGroupMessage = (id: number | string) => {
|
||||
return request.delete<ImGroupMessageRespVO>({
|
||||
url: '/im/message/group/recall',
|
||||
params: { id }
|
||||
})
|
||||
}
|
||||
|
||||
// 查询群消息已读用户列表
|
||||
export const getGroupReadUsers = (params: { groupId: string; messageId: string }) => {
|
||||
return request.get<string[]>({ url: '/im/message/group/read-users', params })
|
||||
// 获取群消息已读用户列表
|
||||
export const getGroupReadUsers = (params: {
|
||||
groupId: number | string
|
||||
messageId: number | string
|
||||
}) => {
|
||||
return request.get<number[]>({ url: '/im/message/group/read-users', params })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,5 @@
|
|||
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 // 消息编号
|
||||
|
|
@ -15,27 +7,50 @@ export interface ImPrivateMessageRespVO {
|
|||
senderId: number // 发送人编号
|
||||
receiverId: number // 接收人编号
|
||||
type: number // 消息类型
|
||||
content: string // 消息内容
|
||||
content: string // 消息内容(JSON 格式)
|
||||
status: number // 消息状态
|
||||
sendTime: string // 发送时间
|
||||
}
|
||||
|
||||
// 私聊消息发送 Request VO
|
||||
export interface ImPrivateMessageSendReqVO {
|
||||
clientMessageId: string // 客户端消息编号
|
||||
receiverId: number // 接收人编号
|
||||
type: number // 消息类型
|
||||
content: string // 消息内容(JSON 格式)
|
||||
}
|
||||
|
||||
// 私聊历史消息列表 Request VO
|
||||
export interface ImPrivateMessageListReqVO {
|
||||
receiverId: number | string // 接收人编号(对方)
|
||||
maxId?: number | string // 起始消息编号(不含),为空则从最新消息开始
|
||||
limit: number // 拉取数量(1 ~ 200)
|
||||
}
|
||||
|
||||
// 发送私聊消息
|
||||
export const sendPrivateMessage = (data: ImPrivateMessageSendReqVO) => {
|
||||
return request.post<ImPrivateMessageRespVO>({ url: '/im/message/private/send', data })
|
||||
}
|
||||
|
||||
// 增量拉取私聊消息
|
||||
export const pullPrivateMessages = (params: { minId: string; size: number }) => {
|
||||
// 拉取私聊消息(增量)
|
||||
export const pullPrivateMessages = (params: { minId: number | string; size: number }) => {
|
||||
return request.get<ImPrivateMessageRespVO[]>({ url: '/im/message/private/pull', params })
|
||||
}
|
||||
|
||||
// 查询私聊历史消息
|
||||
export const getPrivateMessageList = (params: ImPrivateMessageListReqVO) => {
|
||||
return request.get<ImPrivateMessageRespVO[]>({ url: '/im/message/private/list', params })
|
||||
}
|
||||
|
||||
// 标记私聊消息已读
|
||||
export const readPrivateMessages = (friendId: string) => {
|
||||
return request.put({ url: '/im/message/private/read', params: { friendId } })
|
||||
export const readPrivateMessages = (receiverId: number | string) => {
|
||||
return request.put<boolean>({ url: '/im/message/private/read', params: { receiverId } })
|
||||
}
|
||||
|
||||
// 撤回私聊消息
|
||||
export const recallPrivateMessage = (id: string) => {
|
||||
return request.delete({ url: '/im/message/private/recall', params: { id } })
|
||||
export const recallPrivateMessage = (id: number | string) => {
|
||||
return request.delete<ImPrivateMessageRespVO>({
|
||||
url: '/im/message/private/recall',
|
||||
params: { id }
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,39 +0,0 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
/**
|
||||
* IM 用户查询 API
|
||||
*
|
||||
* 已迁移到 system 模块:
|
||||
* - 点头像弹名片:`GET /system/user/get-simple`
|
||||
* - 按昵称搜索(加好友):`GET /system/user/list-by-nickname`
|
||||
* 登录用户信息统一使用 `/system/user/profile/get`
|
||||
*/
|
||||
|
||||
/** IM 用户精简信息(对齐后端 UserSimpleRespVO) */
|
||||
export interface ImUserSimpleRespVO {
|
||||
id: number
|
||||
nickname: string
|
||||
avatar?: string
|
||||
/** 0=未知 1=男 2=女 */
|
||||
sex?: number
|
||||
deptId?: number
|
||||
deptName?: string
|
||||
/** 是否在线(后端暂不支持,前端占位;后续由 WebSocket session 计算) */
|
||||
online?: boolean
|
||||
}
|
||||
|
||||
/** 按用户编号查询用户精简信息(点头像弹名片) */
|
||||
export const getSimpleUser = (id: number | string) => {
|
||||
return request.get<ImUserSimpleRespVO>({
|
||||
url: '/system/user/get-simple',
|
||||
params: { id }
|
||||
})
|
||||
}
|
||||
|
||||
/** 按昵称模糊搜索用户(加好友) */
|
||||
export const getSimpleUserListByNickname = (nickname: string) => {
|
||||
return request.get<ImUserSimpleRespVO[]>({
|
||||
url: '/system/user/list-by-nickname',
|
||||
params: { nickname }
|
||||
})
|
||||
}
|
||||
|
|
@ -17,6 +17,24 @@ export interface UserVO {
|
|||
createTime: Date
|
||||
}
|
||||
|
||||
// 获取用户精简信息列表
|
||||
export const getSimpleUserList = (): Promise<UserVO[]> => {
|
||||
return request.get({ url: '/system/user/simple-list' })
|
||||
}
|
||||
|
||||
// 按用户编号查询用户精简信息(点头像弹名片)
|
||||
export const getSimpleUser = (id: number | string) => {
|
||||
return request.get<UserVO>({ url: '/system/user/get-simple', params: { id } })
|
||||
}
|
||||
|
||||
// 按昵称模糊搜索用户(加好友)
|
||||
export const getSimpleUserListByNickname = (nickname: string) => {
|
||||
return request.get<UserVO[]>({
|
||||
url: '/system/user/list-by-nickname',
|
||||
params: { nickname }
|
||||
})
|
||||
}
|
||||
|
||||
// 查询用户管理列表
|
||||
export const getUserPage = (params: PageParam) => {
|
||||
return request.get({ url: '/system/user/page', params })
|
||||
|
|
@ -36,7 +54,6 @@ export const getDeptUser = (id: number): Promise<UserVO[]> => {
|
|||
return request.get({ url: '/system/user/simple-list?id=' + id })
|
||||
}
|
||||
|
||||
|
||||
// 查询用户详情
|
||||
export const getUser = (id: number) => {
|
||||
return request.get({ url: '/system/user/get?id=' + id })
|
||||
|
|
@ -89,8 +106,3 @@ export const updateUserStatus = (id: number, status: number) => {
|
|||
}
|
||||
return request.put({ url: '/system/user/update-status', data: data })
|
||||
}
|
||||
|
||||
// 获取用户精简信息列表
|
||||
export const getSimpleUserList = (): Promise<UserVO[]> => {
|
||||
return request.get({ url: '/system/user/simple-list' })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -751,33 +751,31 @@ const remainingRouter: AppRouteRecordRaw[] = [
|
|||
// 统一 /im 分组:下分 home(聊天壳)+ manager(Layout 管理壳)
|
||||
path: '/im',
|
||||
name: 'Im',
|
||||
redirect: '/im/home/message',
|
||||
redirect: '/im/home/chat',
|
||||
meta: { hidden: false, title: 'IM 即时通讯' },
|
||||
children: [
|
||||
{
|
||||
// 聊天壳:全屏沉浸式应用,带 ToolBar + keep-alive
|
||||
// hidden:true 不在 yudao 侧边栏菜单显示;三个子 Tab 通过内部 ToolBar 切换
|
||||
path: 'home',
|
||||
component: () => import('@/views/im/home/Index.vue'),
|
||||
name: 'ImHome',
|
||||
redirect: '/im/home/message',
|
||||
redirect: '/im/home/chat',
|
||||
meta: { hidden: true, title: '聊天' },
|
||||
children: [
|
||||
{
|
||||
path: 'message',
|
||||
component: () => import('@/views/im/home/pages/MessagePage.vue'),
|
||||
name: 'ImHomeMessage',
|
||||
path: 'chat',
|
||||
component: () => import('@/views/im/home/pages/chat/MessagePage.vue'),
|
||||
name: 'ImHomeChat',
|
||||
meta: { hidden: true, title: '消息' }
|
||||
},
|
||||
{
|
||||
path: 'friend',
|
||||
component: () => import('@/views/im/home/pages/FriendPage.vue'),
|
||||
component: () => import('@/views/im/home/pages/friend/FriendPage.vue'),
|
||||
name: 'ImHomeFriend',
|
||||
meta: { hidden: true, title: '好友' }
|
||||
},
|
||||
{
|
||||
path: 'group',
|
||||
component: () => import('@/views/im/home/pages/GroupPage.vue'),
|
||||
component: () => import('@/views/im/home/pages/group/GroupPage.vue'),
|
||||
name: 'ImHomeGroup',
|
||||
meta: { hidden: true, title: '群聊' }
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue