You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
3.1 KiB
TypeScript

8 months ago
import type { IMMessage } from '@xkit-yx/im-store'
import { t } from './i18n'
import type { TMsgScene } from 'nim-web-sdk-ng/dist/NIM_MINIAPP_SDK/MsgServiceInterface'
const translate = (key: string): string => {
const text =
{
textMsgText: t('textMsgText'),
customMsgText: t('customMsgText'),
audioMsgText: t('audioMsgText'),
videoMsgText: t('videoMsgText'),
fileMsgText: t('fileMsgText'),
callMsgText: t('callMsgText'),
geoMsgText: t('geoMsgText'),
imgMsgText: t('imgMsgText'),
notiMsgText: t('notiMsgText'),
robotMsgText: t('robotMsgText'),
tipMsgText: t('tipMsgText'),
unknowMsgText: t('unknowMsgText'),
}[key] || ''
return `[${text}]`
}
export const getMsgContentTipByType = (
msg: Pick<IMMessage, 'type' | 'body'>
): string => {
const { type, body } = msg
switch (type) {
case 'text':
return body || translate('textMsgText')
case 'file':
return translate('fileMsgText')
case 'image':
return translate('imgMsgText')
case 'custom':
return body || translate('customMsgText')
case 'audio':
return translate('audioMsgText')
case 'g2':
return translate('callMsgText')
case 'geo':
return translate('geoMsgText')
case 'notification':
return translate('notiMsgText')
case 'robot':
return translate('robotMsgText')
case 'tip':
return translate('tipMsgText')
case 'video':
return translate('videoMsgText')
default:
return translate('unknowMsgText')
}
}
export const setTabUnread = (): void => {
const routes = getCurrentPages()
const curRoute = routes[routes.length - 1].route
const tabPaths = [
'pages/user-card/my/index',
'pages/Contact/index',
'pages/Conversation/index',
]
if (curRoute && !tabPaths.includes(curRoute)) {
// 不是首页和聊天页不需要设置tabbar的badge
return
}
const store = uni.$UIKitStore
const unread = store?.uiStore?.sessionUnread || 0
if (unread === 0) {
uni.removeTabBarBadge({
//隐藏数字
index: 0, //tabbar下标
})
} else {
uni.setTabBarBadge({
//显示数字
index: 0, //tabbar下标
text: unread > 99 ? '99+' : unread.toString(), //显示的数字
})
}
}
export const setContactTabUnread = (): void => {
const routes = getCurrentPages()
const curRoute = routes[routes.length - 1].route
const tabPaths = [
'pages/user-card/my/index',
'pages/Contact/index',
'pages/Conversation/index',
]
if (curRoute && !tabPaths.includes(curRoute)) {
// 不是首页和聊天页不需要设置tabbar的badge
return
}
const unread = uni.$UIKitStore?.sysMsgStore?.unreadSysMsgCount
if (unread === 0) {
uni.hideTabBarRedDot({
//隐藏数字
index: 1, //tabbar下标
})
} else {
uni.showTabBarRedDot({
index: 1, //tabbar下标
})
}
}
export const parseSessionId = (
sessionId: string
): { scene: TMsgScene; to: string } => {
const [scene, ...to] = sessionId.split('-')
return {
scene: scene as TMsgScene,
// 这样处理是为了防止有些用户 accid 中自带 -
to: to.join('-'),
}
}