imCommon1.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. import {
  2. CustomType,
  3. GroupSystemMessageTypes,
  4. AddFriendQrCodePrefix,
  5. AddGroupQrCodePrefix,
  6. } from "@/pages_im/constant";
  7. import {
  8. subUserOnlineStatus
  9. } from "../api/imApi";
  10. import {
  11. GroupAtType,
  12. MessageType,
  13. SessionType,
  14. } from "../constant/imConstants";
  15. import {
  16. initDayjs,
  17. formatMessageTime,
  18. formatHyperlink,
  19. parseLink,
  20. conversationSort,
  21. parseAt,
  22. sec2Time,
  23. parseMessageByType,
  24. formatConversionTime,
  25. caculateTimeago,
  26. secFormat,
  27. bytesToSize,
  28. tipMessaggeFormat,
  29. } from "./imUtils";
  30. import { html2Text } from "./common";
  31. export {
  32. formatMessageTime,
  33. formatHyperlink,
  34. parseLink,
  35. conversationSort,
  36. parseAt,
  37. sec2Time,
  38. parseMessageByType,
  39. formatConversionTime,
  40. caculateTimeago,
  41. secFormat,
  42. bytesToSize,
  43. tipMessaggeFormat,
  44. html2Text,
  45. };
  46. export const nomalTypes = [
  47. GroupAtType.AtMe,
  48. GroupAtType.AtAll,
  49. GroupAtType.AtAllAtMe,
  50. GroupAtType.AtGroupNotice,
  51. ];
  52. import IMSDK from "openim-uniapp-polyfill";
  53. import store from "@/store";
  54. // 延迟引入 store,避免循环依赖和初始化阻塞
  55. // let store;
  56. // const getStore = () => {
  57. // if (!store) {
  58. // store = require('@/store').default;
  59. // }
  60. // return store;
  61. // };
  62. export const getDesignatedUserOnlineState = (userID, targetID) => {
  63. return new Promise(async (resolve, reject) => {
  64. let status = 0;
  65. try {
  66. const data = await subUserOnlineStatus(userID, targetID);
  67. status = data.statusList[0].status;
  68. } catch (e) {
  69. reject(e);
  70. }
  71. // const onlineStr = switchOnline(
  72. // statusObj.status,
  73. // statusObj.detailPlatformStatus
  74. // );
  75. const onlineStr = status ? "在线" : "离线";
  76. resolve(onlineStr);
  77. });
  78. };
  79. export const markConversationAsRead = (conversation, fromChating = false) => {
  80. //const _IMSDK = getIMSDK();
  81. if (conversation.unreadCount !== 0) {
  82. IMSDK.asyncApi(
  83. IMSDK.IMMethods.MarkConversationMessageAsRead,
  84. IMSDK.uuid(),
  85. conversation.conversationID,
  86. );
  87. }
  88. const isNomalAtType = nomalTypes.includes(conversation.groupAtType);
  89. if (isNomalAtType) {
  90. console.log('ResetConversationGroupAtType', conversation.conversationID)
  91. IMSDK.asyncApi(
  92. IMSDK.IMMethods.ResetConversationGroupAtType,
  93. IMSDK.uuid(),
  94. conversation.conversationID,
  95. );
  96. }
  97. };
  98. export const prepareConversationState = (conversation, back2Tab = false, refreshChat = true) => {
  99. markConversationAsRead(conversation);
  100. if (conversation.conversationType === SessionType.WorkingGroup) {
  101. store.dispatch("conversation/getCurrentGroup", conversation.groupID);
  102. store.dispatch("conversation/getCurrentMemberInGroup", conversation.groupID);
  103. }
  104. // store.dispatch("message/resetMessageState");
  105. store.commit("conversation/SET_CURRENT_CONVERSATION", conversation);
  106. let url = `/pages_im/pages/conversation/chating1/index?back2Tab=${back2Tab}`;
  107. if (conversation.conversationType === SessionType.Notification) {
  108. url = "/pages_im/pages/conversation/notifyMessageList/index";
  109. }
  110. uni.navigateTo({
  111. url
  112. });
  113. };
  114. export const navigateToDesignatedConversation = (sourceID, sessionType, back2Tab = false, refreshChat = true) => {
  115. //console.log("qxj navigateToDesignatedConversation back2Tab", back2Tab);
  116. return new Promise(async (resolve, reject) => {
  117. try {
  118. const _IMSDK = IMSDK;
  119. const {
  120. data
  121. } = await _IMSDK.asyncApi(
  122. _IMSDK.IMMethods.GetOneConversation,
  123. _IMSDK.uuid(), {
  124. sessionType,
  125. sourceID
  126. }
  127. );
  128. prepareConversationState(data, back2Tab);
  129. resolve(data);
  130. } catch (e) {
  131. reject(e);
  132. }
  133. });
  134. };
  135. export const setConversation = (conversationID, exStr) => {
  136. return new Promise(async (resolve, reject) => {
  137. try {
  138. const _IMSDK = getIMSDK();
  139. const {
  140. data
  141. } = await _IMSDK.asyncApi(
  142. _IMSDK.IMMethods.SetConversation,
  143. _IMSDK.uuid(), {
  144. conversationID: conversationID,
  145. isPinned: false,
  146. ex: exStr
  147. }
  148. );
  149. console.log("qxj data:" + JSON.stringify(data));
  150. resolve();
  151. } catch (e) {
  152. reject(e);
  153. }
  154. });
  155. };
  156. export const scanQrCodeResult = (result) => {
  157. if (result?.includes(AddFriendQrCodePrefix)) {
  158. const userID = result.replace(AddFriendQrCodePrefix, "");
  159. uni.navigateTo({
  160. url: `/pages_im/common/userCard/index?sourceID=${userID}&isScan=true`,
  161. });
  162. } else if (result?.includes(AddGroupQrCodePrefix)) {
  163. const groupID = result.replace(AddGroupQrCodePrefix, "");
  164. uni.navigateTo({
  165. url: `/pages/common/groupCard/index?sourceID=${groupID}&isScan=true`,
  166. });
  167. } else {
  168. uni.$u.toast("未识别到有效内容");
  169. }
  170. };
  171. export const callingModule = uni.requireNativePlugin("OUICalling");
  172. export const meetingModule = uni.requireNativePlugin("OUIMeeting");
  173. export const offlinePushInfo = {
  174. title: "河山恒康",
  175. desc: "您有一条新消息",
  176. ex: "",
  177. iOSPushSound: "",
  178. iOSBadgeCount: true,
  179. };
  180. export const getOfflinePushInfo = (data) => {
  181. }
  182. export const getConversationContent = (message, currentUserID) => {
  183. let myID = currentUserID;
  184. if (!myID) {
  185. try {
  186. const currentStore = getStore();
  187. myID = currentStore.getters.storeCurrentUserID;
  188. } catch (e) {
  189. // console.warn("Store not available in getConversationContent");
  190. }
  191. }
  192. if (
  193. !message.groupID ||
  194. GroupSystemMessageTypes.includes(message.contentType) ||
  195. message.sendID === myID ||
  196. message.contentType === MessageType.GroupAnnouncementUpdated
  197. ) {
  198. return parseMessageByType(message, myID);
  199. }
  200. return `${message.senderNickname}:${parseMessageByType(message, myID)}`;
  201. };
  202. export const meetingErrorHandle = ({
  203. errCode,
  204. errMsg
  205. }) => {
  206. let message = ""
  207. if (errCode === 1004) {
  208. message = "会议已结束或会议不存在!"
  209. } else if (errCode === 200001) {
  210. message = "您已在其他会议中!"
  211. }
  212. uni.$u.toast(message || errMsg);
  213. }