✨ feat(im): 统一 im 的 api 风格,保持一致性
parent
18e5c97bf3
commit
841d2cb763
|
|
@ -1,6 +1,6 @@
|
||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
/** 用户端表情包项(精简版) */
|
// 用户端表情包项(精简版)
|
||||||
export interface ImFacePackUserItemVO {
|
export interface ImFacePackUserItemVO {
|
||||||
id: number
|
id: number
|
||||||
url: string
|
url: string
|
||||||
|
|
@ -9,7 +9,7 @@ export interface ImFacePackUserItemVO {
|
||||||
height: number
|
height: number
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 用户端表情包 + 嵌套 items */
|
// 用户端表情包 + 嵌套 items
|
||||||
export interface ImFacePackUserVO {
|
export interface ImFacePackUserVO {
|
||||||
id: number
|
id: number
|
||||||
name: string
|
name: string
|
||||||
|
|
@ -17,7 +17,7 @@ export interface ImFacePackUserVO {
|
||||||
items: ImFacePackUserItemVO[]
|
items: ImFacePackUserItemVO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 拉取所有启用的系统表情包(含表情列表) */
|
// 拉取所有启用的系统表情包(含表情列表)
|
||||||
export const getFacePackList = () => {
|
export const getFacePackList = () => {
|
||||||
return request.get<ImFacePackUserVO[]>({ url: '/im/face-pack/list' })
|
return request.get<ImFacePackUserVO[]>({ url: '/im/face-pack/list' })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
/** 个人表情 */
|
// 个人表情
|
||||||
export interface ImFaceUserItemVO {
|
export interface ImFaceUserItemVO {
|
||||||
id: number
|
id: number
|
||||||
url: string
|
url: string
|
||||||
|
|
@ -9,7 +9,7 @@ export interface ImFaceUserItemVO {
|
||||||
height: number
|
height: number
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加个人表情请求 */
|
// 添加个人表情请求
|
||||||
export interface ImFaceUserItemSaveReqVO {
|
export interface ImFaceUserItemSaveReqVO {
|
||||||
url: string
|
url: string
|
||||||
name?: string
|
name?: string
|
||||||
|
|
@ -17,17 +17,17 @@ export interface ImFaceUserItemSaveReqVO {
|
||||||
height: number
|
height: number
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获取我的个人表情列表 */
|
// 获取我的个人表情列表
|
||||||
export const getFaceUserItemList = () => {
|
export const getFaceUserItemList = () => {
|
||||||
return request.get<ImFaceUserItemVO[]>({ url: '/im/face-user-item/list' })
|
return request.get<ImFaceUserItemVO[]>({ url: '/im/face-user-item/list' })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加个人表情;同 URL 重复添加服务端抛 FACE_USER_ITEM_DUPLICATED,调用方按 catch 提示「已添加过」 */
|
// 添加个人表情
|
||||||
export const createFaceUserItem = (data: ImFaceUserItemSaveReqVO) => {
|
export const createFaceUserItem = (data: ImFaceUserItemSaveReqVO) => {
|
||||||
return request.post<number>({ url: '/im/face-user-item/create', data })
|
return request.post<number>({ url: '/im/face-user-item/create', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除个人表情 */
|
// 删除个人表情
|
||||||
export const deleteFaceUserItem = (id: number) => {
|
export const deleteFaceUserItem = (id: number) => {
|
||||||
return request.delete({ url: '/im/face-user-item/delete?id=' + id })
|
return request.delete({ url: '/im/face-user-item/delete?id=' + id })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,111 +1,35 @@
|
||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
import type {
|
|
||||||
ImCallEndReasonValue,
|
|
||||||
ImCallParticipantStatusValue
|
|
||||||
} from '@/views/im/utils/constants'
|
|
||||||
|
|
||||||
/** 发起通话请求 VO */
|
// 创建新通话请求 VO
|
||||||
export interface ImRtcCallInviteReqVO {
|
export interface ImRtcCallCreateReqVO {
|
||||||
scene: number
|
conversationType: number
|
||||||
mediaType: number
|
mediaType: number
|
||||||
peerUserId?: number
|
|
||||||
groupId?: number
|
groupId?: number
|
||||||
/** 群通话场景:前端选定的子集;为空回退到群活跃成员 */
|
inviteeIds: number[] // 被邀请的用户编号集合;私聊必传 1 个对端,群聊必传至少 1 人
|
||||||
inviteeIds?: number[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 通话中添加成员请求 VO */
|
// 通话中追加邀请请求 VO;仅群通话可用
|
||||||
export interface ImRtcCallInviteMoreReqVO {
|
export interface ImRtcCallInviteReqVO {
|
||||||
room: string
|
room: string
|
||||||
inviteeIds: number[]
|
inviteeIds: number[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 通话会话 VO;invite / join / accept / refreshToken 共用 */
|
// 通话会话 VO;create / join / accept / refreshToken 共用
|
||||||
export interface ImRtcCallRespVO {
|
export interface ImRtcCallRespVO {
|
||||||
/** 业务通话编号(同时作为 LiveKit 房间名) */
|
room: string // 业务通话编号(同时作为 LiveKit 房间名)
|
||||||
room: string
|
|
||||||
livekitUrl: string
|
livekitUrl: string
|
||||||
token?: string
|
token?: string // ENDED 状态时为 null(无需 connect LiveKit)
|
||||||
scene: number
|
conversationType: number
|
||||||
mediaType: number
|
mediaType: number
|
||||||
status: number
|
status: number
|
||||||
|
endReason?: number // 结束原因;仅 status=ENDED 时有值
|
||||||
inviterId: number
|
inviterId: number
|
||||||
groupId?: number
|
groupId?: number
|
||||||
inviteeIds?: number[]
|
inviteeIds?: number[]
|
||||||
joinedUserIds?: number[]
|
joinedUserIds?: number[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/** RTC_CALL 通话信令载荷(通话信令统一入口);status 区分子类型(复用参与者状态枚举);走 ImPrivateMessageDTO.content 仅推参与方 */
|
// 群活跃通话查询响应;不含 token
|
||||||
export interface ImRtcCallNotification {
|
|
||||||
/** 信令对应的参与者状态变迁;取值参见 ImCallParticipantStatus */
|
|
||||||
status: ImCallParticipantStatusValue
|
|
||||||
/** 业务通话编号(同时作为 LiveKit 房间名) */
|
|
||||||
room: string
|
|
||||||
conversationType: number
|
|
||||||
mediaType: number
|
|
||||||
groupId?: number
|
|
||||||
/** INVITE 专属 */
|
|
||||||
livekitUrl?: string
|
|
||||||
/** INVITE 专属 */
|
|
||||||
token?: string
|
|
||||||
/** INVITE 专属 */
|
|
||||||
inviterUserId?: number
|
|
||||||
/** INVITE 专属 */
|
|
||||||
inviterNickname?: string
|
|
||||||
/** INVITE 专属 */
|
|
||||||
inviterAvatar?: string
|
|
||||||
/** ACCEPT / REJECT / CANCEL / HUNGUP 专属 */
|
|
||||||
operatorUserId?: number
|
|
||||||
/** 操作者昵称;按需展示,普通文案不依赖 */
|
|
||||||
operatorNickname?: string
|
|
||||||
/** 操作者头像;按需展示,普通文案不依赖 */
|
|
||||||
operatorAvatar?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
/** RTC_PARTICIPANT_CONNECTED 通话参与者加入载荷;LiveKit webhook participant_joined 转推;callStore +userId 进 joinedUserIds;群聊场景非邀请成员靠 mediaType/inviterUserId 字段首次填充胶囊条 */
|
|
||||||
export interface ImRtcParticipantConnectedNotification {
|
|
||||||
room: string
|
|
||||||
userId: number
|
|
||||||
conversationType: number
|
|
||||||
groupId?: number
|
|
||||||
mediaType?: number
|
|
||||||
inviterUserId?: number
|
|
||||||
}
|
|
||||||
|
|
||||||
/** RTC_PARTICIPANT_DISCONNECTED 通话参与者离开载荷;LiveKit webhook participant_left 转推;callStore -userId 出 joinedUserIds */
|
|
||||||
export interface ImRtcParticipantDisconnectedNotification {
|
|
||||||
room: string
|
|
||||||
userId: number
|
|
||||||
conversationType: number
|
|
||||||
groupId?: number
|
|
||||||
}
|
|
||||||
|
|
||||||
/** RTC_CALL_START 通话开始载荷;仅群聊;入消息流;前端渲染聊天 tip「{inviterNickname} 发起了{voice/video}通话」;与 END 两段式配对 */
|
|
||||||
export interface ImRtcCallStartNotification {
|
|
||||||
room: string
|
|
||||||
conversationType: number
|
|
||||||
mediaType: number
|
|
||||||
inviterUserId: number
|
|
||||||
inviterNickname?: string
|
|
||||||
inviterAvatar?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
/** RTC_CALL_END 通话结束载荷;入消息流;私聊渲染准气泡,群聊渲染 tip「{voice/video}通话已结束 [时长 X]」 */
|
|
||||||
export interface ImRtcCallEndNotification {
|
|
||||||
room: string
|
|
||||||
conversationType: number
|
|
||||||
mediaType: number
|
|
||||||
endReason: ImCallEndReasonValue
|
|
||||||
durationSeconds?: number
|
|
||||||
/** 操作者用户编号;HANGUP/CANCEL/REJECT 触发人;webhook 兜底为 null */
|
|
||||||
operatorUserId?: number
|
|
||||||
/** 操作者昵称;按需展示,普通文案不依赖 */
|
|
||||||
operatorNickname?: string
|
|
||||||
/** 操作者头像;按需展示,普通文案不依赖 */
|
|
||||||
operatorAvatar?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 群活跃通话查询响应;不含 token */
|
|
||||||
export interface ImRtcGroupCallRespVO {
|
export interface ImRtcGroupCallRespVO {
|
||||||
room: string
|
room: string
|
||||||
groupId: number
|
groupId: number
|
||||||
|
|
@ -115,47 +39,47 @@ export interface ImRtcGroupCallRespVO {
|
||||||
inviteeIds?: number[]
|
inviteeIds?: number[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 发起新通话;同好友对 / 同群已有进行中通话直接抛错(群场景应改走 joinCall) */
|
// 创建新通话;私聊或群聊根据 conversationType 区分
|
||||||
export const inviteCall = (data: ImRtcCallInviteReqVO) => {
|
export const createCall = (data: ImRtcCallCreateReqVO) => {
|
||||||
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/invite', data })
|
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/create', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 加入已有群通话;用于胶囊条「加入」按钮 */
|
// 通话中追加邀请;仅群通话可用
|
||||||
|
export const inviteCall = (data: ImRtcCallInviteReqVO) => {
|
||||||
|
return request.post<boolean>({ url: '/im/rtc/invite', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加入已有群通话;用于胶囊条「加入」按钮
|
||||||
export const joinCall = (room: string) => {
|
export const joinCall = (room: string) => {
|
||||||
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/join', params: { room } })
|
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/join', params: { room } })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 通话中添加成员;仅群通话可用 */
|
// 接听通话
|
||||||
export const inviteMoreCall = (data: ImRtcCallInviteMoreReqVO) => {
|
|
||||||
return request.post<boolean>({ url: '/im/rtc/invite-more', data })
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 接听通话 */
|
|
||||||
export const acceptCall = (room: string) => {
|
export const acceptCall = (room: string) => {
|
||||||
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/accept', params: { room } })
|
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/accept', params: { room } })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 拒绝通话 */
|
// 拒绝通话
|
||||||
export const rejectCall = (room: string) => {
|
export const rejectCall = (room: string) => {
|
||||||
return request.post<boolean>({ url: '/im/rtc/reject', params: { room } })
|
return request.post<boolean>({ url: '/im/rtc/reject', params: { room } })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 取消邀请;主叫接通前调用 */
|
// 取消邀请;主叫接通前调用
|
||||||
export const cancelCall = (room: string) => {
|
export const cancelCall = (room: string) => {
|
||||||
return request.post<boolean>({ url: '/im/rtc/cancel', params: { room } })
|
return request.post<boolean>({ url: '/im/rtc/cancel', params: { room } })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 离开通话;接通后调用 */
|
// 离开通话;接通后调用
|
||||||
export const leaveCall = (room: string) => {
|
export const leaveCall = (room: string) => {
|
||||||
return request.post<boolean>({ url: '/im/rtc/leave', params: { room } })
|
return request.post<boolean>({ url: '/im/rtc/leave', params: { room } })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 重新签发 Token;客户端重连或 Token 过期续期 */
|
// 重新签发 Token;客户端重连或 Token 过期续期
|
||||||
export const refreshCallToken = (room: string) => {
|
export const refreshCallToken = (room: string) => {
|
||||||
return request.get<ImRtcCallRespVO>({ url: '/im/rtc/refresh-token', params: { room } })
|
return request.get<ImRtcCallRespVO>({ url: '/im/rtc/refresh-token', params: { room } })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 查询当前进行中的通话;目前仅群聊场景(胶囊条),后端 API 已留扩展点;返回 null 表示无活跃通话 */
|
// 查询当前进行中的通话;目前仅群聊场景(胶囊条),返回 null 表示无活跃通话
|
||||||
export const getActiveCall = (groupId: number) => {
|
export const getActiveCall = (groupId: number) => {
|
||||||
return request.get<ImRtcGroupCallRespVO | null>({
|
return request.get<ImRtcGroupCallRespVO | null>({
|
||||||
url: '/im/rtc/get-active-call',
|
url: '/im/rtc/get-active-call',
|
||||||
|
|
|
||||||
|
|
@ -12,32 +12,32 @@ export interface ImManagerFacePackItemVO {
|
||||||
createTime?: Date
|
createTime?: Date
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得表情分页 */
|
// 获得表情分页
|
||||||
export const getManagerFacePackItemPage = (params: PageParam) => {
|
export const getManagerFacePackItemPage = (params: PageParam) => {
|
||||||
return request.get({ url: '/im/manager/face-pack-item/page', params })
|
return request.get({ url: '/im/manager/face-pack-item/page', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得表情详情 */
|
// 获得表情详情
|
||||||
export const getManagerFacePackItem = (id: number) => {
|
export const getManagerFacePackItem = (id: number) => {
|
||||||
return request.get({ url: '/im/manager/face-pack-item/get?id=' + id })
|
return request.get({ url: '/im/manager/face-pack-item/get?id=' + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 新增表情 */
|
// 新增表情
|
||||||
export const createManagerFacePackItem = (data: ImManagerFacePackItemVO) => {
|
export const createManagerFacePackItem = (data: ImManagerFacePackItemVO) => {
|
||||||
return request.post({ url: '/im/manager/face-pack-item/create', data })
|
return request.post({ url: '/im/manager/face-pack-item/create', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 修改表情 */
|
// 修改表情
|
||||||
export const updateManagerFacePackItem = (data: ImManagerFacePackItemVO) => {
|
export const updateManagerFacePackItem = (data: ImManagerFacePackItemVO) => {
|
||||||
return request.put({ url: '/im/manager/face-pack-item/update', data })
|
return request.put({ url: '/im/manager/face-pack-item/update', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除表情 */
|
// 删除表情
|
||||||
export const deleteManagerFacePackItem = (id: number) => {
|
export const deleteManagerFacePackItem = (id: number) => {
|
||||||
return request.delete({ url: '/im/manager/face-pack-item/delete?id=' + id })
|
return request.delete({ url: '/im/manager/face-pack-item/delete?id=' + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 批量删除表情 */
|
// 批量删除表情
|
||||||
export const deleteManagerFacePackItemList = (ids: number[]) => {
|
export const deleteManagerFacePackItemList = (ids: number[]) => {
|
||||||
return request.delete({
|
return request.delete({
|
||||||
url: '/im/manager/face-pack-item/delete-list',
|
url: '/im/manager/face-pack-item/delete-list',
|
||||||
|
|
|
||||||
|
|
@ -9,32 +9,32 @@ export interface ImManagerFacePackVO {
|
||||||
createTime?: Date
|
createTime?: Date
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得表情包分页 */
|
// 获得表情包分页
|
||||||
export const getManagerFacePackPage = (params: PageParam) => {
|
export const getManagerFacePackPage = (params: PageParam) => {
|
||||||
return request.get({ url: '/im/manager/face-pack/page', params })
|
return request.get({ url: '/im/manager/face-pack/page', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得表情包详情 */
|
// 获得表情包详情
|
||||||
export const getManagerFacePack = (id: number) => {
|
export const getManagerFacePack = (id: number) => {
|
||||||
return request.get({ url: '/im/manager/face-pack/get?id=' + id })
|
return request.get({ url: '/im/manager/face-pack/get?id=' + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 新增表情包 */
|
// 新增表情包
|
||||||
export const createManagerFacePack = (data: ImManagerFacePackVO) => {
|
export const createManagerFacePack = (data: ImManagerFacePackVO) => {
|
||||||
return request.post({ url: '/im/manager/face-pack/create', data })
|
return request.post({ url: '/im/manager/face-pack/create', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 修改表情包 */
|
// 修改表情包
|
||||||
export const updateManagerFacePack = (data: ImManagerFacePackVO) => {
|
export const updateManagerFacePack = (data: ImManagerFacePackVO) => {
|
||||||
return request.put({ url: '/im/manager/face-pack/update', data })
|
return request.put({ url: '/im/manager/face-pack/update', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除表情包 */
|
// 删除表情包
|
||||||
export const deleteManagerFacePack = (id: number) => {
|
export const deleteManagerFacePack = (id: number) => {
|
||||||
return request.delete({ url: '/im/manager/face-pack/delete?id=' + id })
|
return request.delete({ url: '/im/manager/face-pack/delete?id=' + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 批量删除表情包 */
|
// 批量删除表情包
|
||||||
export const deleteManagerFacePackList = (ids: number[]) => {
|
export const deleteManagerFacePackList = (ids: number[]) => {
|
||||||
return request.delete({
|
return request.delete({
|
||||||
url: '/im/manager/face-pack/delete-list',
|
url: '/im/manager/face-pack/delete-list',
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,12 @@ export interface ImManagerFaceUserItemVO {
|
||||||
createTime?: Date
|
createTime?: Date
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得用户表情分页 */
|
// 获得用户表情分页
|
||||||
export const getManagerFaceUserItemPage = (params: PageParam) => {
|
export const getManagerFaceUserItemPage = (params: PageParam) => {
|
||||||
return request.get({ url: '/im/manager/face-user-item/page', params })
|
return request.get({ url: '/im/manager/face-user-item/page', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除用户表情 */
|
// 删除用户表情
|
||||||
export const deleteManagerFaceUserItem = (id: number) => {
|
export const deleteManagerFaceUserItem = (id: number) => {
|
||||||
return request.delete({ url: '/im/manager/face-user-item/delete?id=' + id })
|
return request.delete({ url: '/im/manager/face-user-item/delete?id=' + id })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue