im-ui-mobile
Version:
A Vue3.0 + Typescript instant messaging component library for Uniapp
130 lines (119 loc) • 3.87 kB
JavaScript
// 消息类型
/**
* 消息类型枚举
* 消息类型范围
*/
export const MessageTypeRange = {
NORMAL_MIN: 0,
NORMAL_MAX: 9,
STATUS_MIN: 10,
STATUS_MAX: 19,
TIP_MIN: 20,
TIP_MAX: 29,
ACTION_MIN: 40,
ACTION_MAX: 49,
RTC_PRIVATE_MIN: 100,
RTC_PRIVATE_MAX: 199,
RTC_GROUP_MIN: 200,
RTC_GROUP_MAX: 299
};
/**
* 是否普通消息
* @param {number} type - 消息类型
* @returns {boolean} 是否是普通消息
*/
const isNormal = (type) => {
return type >= MessageTypeRange.NORMAL_MIN && type <= MessageTypeRange.NORMAL_MAX;
};
/**
* 是否状态消息
* @param {number} type - 消息类型
* @returns {boolean} 是否是状态消息
*/
const isStatus = (type) => {
return type >= MessageTypeRange.STATUS_MIN && type <= MessageTypeRange.STATUS_MAX;
};
/**
* 是否提示消息
* @param {number} type - 消息类型
* @returns {boolean} 是否是提示消息
*/
const isTip = (type) => {
return type >= MessageTypeRange.TIP_MIN && type <= MessageTypeRange.TIP_MAX;
};
/**
* 是否操作交互类消息
* @param {number} type - 消息类型
* @returns {boolean} 是否是操作交互类消息
*/
const isAction = (type) => {
return type >= MessageTypeRange.ACTION_MIN && type <= MessageTypeRange.ACTION_MAX;
};
/**
* 是否单人通话信令
* @param {number} type - 消息类型
* @returns {boolean} 是否是单人通话信令
*/
const isRtcPrivate = (type) => {
return type >= MessageTypeRange.RTC_PRIVATE_MIN && type <= MessageTypeRange.RTC_PRIVATE_MAX;
};
/**
* 是否多人通话信令
* @param {number} type - 消息类型
* @returns {boolean} 是否是多人通话信令
*/
const isRtcGroup = (type) => {
return type >= MessageTypeRange.RTC_GROUP_MIN && type <= MessageTypeRange.RTC_GROUP_MAX;
};
/**
* 获取消息类型分类
* @param {number} type - 消息类型
* @returns {string} 消息类型分类名称
*/
const getMessageCategory = (type) => {
if (isNormal(type)) return 'normal';
if (isStatus(type)) return 'status';
if (isTip(type)) return 'tip';
if (isAction(type)) return 'action';
if (isRtcPrivate(type)) return 'rtc_private';
if (isRtcGroup(type)) return 'rtc_group';
return 'unknown';
};
/**
* 验证消息类型是否有效
* @param {number} type - 消息类型
* @returns {boolean} 是否是有效的消息类型
*/
const isValidMessageType = (type) => {
return isNormal(type) ||
isStatus(type) ||
isTip(type) ||
isAction(type) ||
isRtcPrivate(type) ||
isRtcGroup(type);
};
/**
* 获取所有支持的消息类型范围
* @returns {Array} 消息类型范围描述对象数组
*/
const getMessageTypeRanges = () => {
return [
{ category: 'normal', min: MessageTypeRange.NORMAL_MIN, max: MessageTypeRange.NORMAL_MAX, description: '普通消息' },
{ category: 'status', min: MessageTypeRange.STATUS_MIN, max: MessageTypeRange.STATUS_MAX, description: '状态消息' },
{ category: 'tip', min: MessageTypeRange.TIP_MIN, max: MessageTypeRange.TIP_MAX, description: '提示消息' },
{ category: 'action', min: MessageTypeRange.ACTION_MIN, max: MessageTypeRange.ACTION_MAX, description: '操作交互类消息' },
{ category: 'rtc_private', min: MessageTypeRange.RTC_PRIVATE_MIN, max: MessageTypeRange.RTC_PRIVATE_MAX, description: '单人通话信令' },
{ category: 'rtc_group', min: MessageTypeRange.RTC_GROUP_MIN, max: MessageTypeRange.RTC_GROUP_MAX, description: '多人通话信令' }
];
};
export default {
isNormal,
isStatus,
isTip,
isAction,
isRtcPrivate,
isRtcGroup,
getMessageCategory,
isValidMessageType,
getMessageTypeRanges
};