im-ui-mobile
Version:
A Vue3.0 + Typescript instant messaging component library for Uniapp
205 lines (204 loc) • 3.98 kB
TypeScript
import type { RTC_STATE, MESSAGE_TYPE } from '../utils/enums.d.ts';
/**
* 通话模式类型
*/
export type RtcMode = 'audio' | 'video' | 'voice';
/**
* RTC 信息接口
*/
export interface RtcInfo {
friend: Friend;
mode: RtcMode;
state: RTC_STATE;
isHost?: boolean;
}
/**
* 聊天
*/
export interface Chat {
id?: string | number;
targetId: number;
type: 'PRIVATE' | 'GROUP';
showName: string;
headImage: string;
isDnd: boolean;
lastContent: string;
lastSendTime?: number;
unreadCount: number;
hotMinIdx: number;
readedMessageIdx: number;
messages: Message[];
atMe: boolean;
atAll: boolean;
stored: boolean;
delete: boolean;
lastTimeTip?: number;
sendNickName?: string;
}
/**
* 消息
*/
export interface Message {
id?: number;
tmpId?: number;
type: number;
content: string;
sendTime?: number;
selfSend?: boolean;
status?: number;
sendNickName?: string;
atUserIds?: number[];
sendId?: number;
recvId?: number;
groupId?: number;
receipt?: boolean;
receiptOk?: boolean;
readedCount?: number;
quoteMessage?: Message;
fileId?: string;
}
/**
* 好友信息接口
*/
export interface Friend {
id: number;
nickName: string;
headImage?: string;
online: boolean;
onlineWeb: boolean;
onlineApp: boolean;
isDnd: boolean;
deleted?: boolean;
remarkName?: string;
gender?: number;
signature?: string;
remarkNickName?: string;
showNickName?: string;
[key: string]: any;
}
/**
* 在线终端信息接口
*/
export interface OnlineTerminal {
userId: string | number;
terminals: number[];
}
/**
* 菜单项
*/
export interface MenuItem {
key: string;
name: string;
icon?: string;
color?: string;
[key: string]: any;
}
export interface WebRTCMessage {
type: number;
content: string;
sendId: number;
selfSend?: boolean;
}
export interface GroupMember {
id?: number;
userId: number;
showNickName: string;
headImage?: string;
quit?: boolean;
[key: string]: any;
}
/**
* 群组信息接口
*/
export interface Group {
id: number;
ownerId: number;
isBanned?: boolean;
reason?: string;
name: string;
headImage: string;
isDnd: boolean;
quit?: boolean;
topMessage?: string;
memberCount?: number;
createTime?: number;
showGroupName: string;
headImageThumb?: string;
remarkGroupName?: string;
remarkNickName?: string;
notice?: string;
[key: string]: any;
}
/**
* 上传图片相应数据
*/
export interface UploadImageResponse {
originUrl: string;
thumbUrl: string;
[key: string]: any;
}
/**
* 发送消息项
*/
export interface SubmitItem {
type: MESSAGE_TYPE;
content: string | ImageItem | FileItem;
atUserIds?: number[];
}
export interface ImageItem {
fileId: number;
file: File;
url: string;
}
export interface FileItem {
fileId: number;
file: File;
}
export interface ApiResponse<T = any> {
data?: T;
code?: number;
message?: string;
success?: boolean;
timestamp?: number;
path?: string;
}
export interface RecorderError {
errMsg: string;
}
export interface UploadRecorderFileResponse {
code: number;
data: string;
message?: string;
}
export interface UploadRecorderFileResult {
duration: number;
url: string;
}
export interface RecorderFile {
tempFilePath: string;
}
/**
* 用户信息接口
*/
export interface UserInfo {
id: number;
nickName: string;
headImage: string;
headImageThumb?: string;
email?: string;
phone?: string;
gender?: number;
signature?: string;
isBanned?: boolean;
reason?: string;
userName?: string;
sex?: number;
online?: boolean;
[key: string]: any;
}
export interface Response<T> {
code: number;
message: string;
result: T;
success: boolean;
}