import { CustomType, GroupSystemMessageTypes, AddFriendQrCodePrefix, AddGroupQrCodePrefix, } from "@/pages_im/constant"; import { subUserOnlineStatus } from "../api/imApi"; import { GroupAtType, MessageType, SessionType, } from "../constant/imConstants"; import { initDayjs, formatMessageTime, formatHyperlink, parseLink, conversationSort, parseAt, sec2Time, parseMessageByType, formatConversionTime, caculateTimeago, secFormat, bytesToSize, tipMessaggeFormat, } from "./imUtils"; export { formatMessageTime, formatHyperlink, parseLink, conversationSort, parseAt, sec2Time, parseMessageByType, formatConversionTime, caculateTimeago, secFormat, bytesToSize, tipMessaggeFormat, }; const nomalTypes = [ GroupAtType.AtMe, GroupAtType.AtAll, GroupAtType.AtAllAtMe, GroupAtType.AtGroupNotice, ]; import IMSDK from "openim-uniapp-polyfill"; import store from "@/store"; export const getDesignatedUserOnlineState = (userID, targetID) => { return new Promise(async (resolve, reject) => { let status = 0; try { const data = await subUserOnlineStatus(userID, targetID); status = data.statusList[0].status; } catch (e) { reject(e); } // const onlineStr = switchOnline( // statusObj.status, // statusObj.detailPlatformStatus // ); const onlineStr = status ? "在线" : "离线"; resolve(onlineStr); }); }; export const markConversationAsRead = (conversation, fromChating = false) => { //const _IMSDK = getIMSDK(); if (conversation.unreadCount !== 0) { IMSDK.asyncApi( IMSDK.IMMethods.MarkConversationMessageAsRead, IMSDK.uuid(), conversation.conversationID, ); } const isNomalAtType = nomalTypes.includes(conversation.groupAtType); if (isNomalAtType) { console.log('ResetConversationGroupAtType', conversation.conversationID) IMSDK.asyncApi( IMSDK.IMMethods.ResetConversationGroupAtType, IMSDK.uuid(), conversation.conversationID, ); } }; export const prepareConversationState = (conversation, back2Tab = false, refreshChat = true) => { markConversationAsRead(conversation); if (conversation.conversationType === SessionType.WorkingGroup) { store.dispatch("conversation/getCurrentGroup", conversation.groupID); store.dispatch("conversation/getCurrentMemberInGroup", conversation.groupID); } // store.dispatch("message/resetMessageState"); store.commit("conversation/SET_CURRENT_CONVERSATION", conversation); let url = `/pages_im/pages/conversation/chating1/index?back2Tab=${back2Tab}`; if (conversation.conversationType === SessionType.Notification) { url = "/pages_im/pages/conversation/notifyMessageList/index"; } uni.navigateTo({ url }); }; export const navigateToDesignatedConversation = (sourceID, sessionType, back2Tab = false, refreshChat = true) => { console.log("qxj navigateToDesignatedConversation back2Tab", back2Tab); return new Promise(async (resolve, reject) => { try { const _IMSDK = IMSDK; const { data } = await _IMSDK.asyncApi( _IMSDK.IMMethods.GetOneConversation, _IMSDK.uuid(), { sessionType, sourceID } ); prepareConversationState(data, back2Tab); resolve(data); } catch (e) { reject(e); } }); }; export const setConversation = (conversationID, exStr) => { return new Promise(async (resolve, reject) => { try { //const _IMSDK = getIMSDK(); const _IMSDK = IMSDK; const { data } = await _IMSDK.asyncApi( _IMSDK.IMMethods.SetConversation, _IMSDK.uuid(), { conversationID: conversationID, isPinned: false, ex: exStr } ); console.log("qxj data:" + JSON.stringify(data)); resolve(); } catch (e) { reject(e); } }); }; export const scanQrCodeResult = (result) => { if (result?.includes(AddFriendQrCodePrefix)) { const userID = result.replace(AddFriendQrCodePrefix, ""); uni.navigateTo({ url: `/pages_im/common/userCard/index?sourceID=${userID}&isScan=true`, }); } else if (result?.includes(AddGroupQrCodePrefix)) { const groupID = result.replace(AddGroupQrCodePrefix, ""); uni.navigateTo({ url: `/pages/common/groupCard/index?sourceID=${groupID}&isScan=true`, }); } else { uni.$u.toast("未识别到有效内容"); } }; export const callingModule = uni.requireNativePlugin("OUICalling"); export const meetingModule = uni.requireNativePlugin("OUIMeeting"); export const offlinePushInfo = { title: "河山恒康", desc: "您有一条新消息", ex: "", iOSPushSound: "", iOSBadgeCount: true, }; export const getOfflinePushInfo = (data) => { } export const getConversationContent = (message, currentUserID) => { let myID = currentUserID; if (!myID) { try { const currentStore = getStore(); myID = currentStore.getters.storeCurrentUserID; } catch (e) { // console.warn("Store not available in getConversationContent"); } } if ( !message.groupID || GroupSystemMessageTypes.includes(message.contentType) || message.sendID === myID || message.contentType === MessageType.GroupAnnouncementUpdated ) { return parseMessageByType(message, myID); } return `${message.senderNickname}:${parseMessageByType(message, myID)}`; }; export const meetingErrorHandle = ({ errCode, errMsg }) => { let message = "" if (errCode === 1004) { message = "会议已结束或会议不存在!" } else if (errCode === 200001) { message = "您已在其他会议中!" } uni.$u.toast(message || errMsg); }