customerServe.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. import {
  2. YeIMUniSDK,
  3. YeIMUniSDKDefines
  4. } from './yeim-uni-sdk2.js'
  5. import {
  6. login
  7. } from '@/request/api/chat.js'
  8. import md5 from '@/js_sdk/js-md5/build/md5.min.js';
  9. import config from "@/config";
  10. let userIds, isListenerChatList = false;
  11. const connect = success => {
  12. if (!userIds) return;
  13. let code = YeIMUniSDK.getInstance().readyState();
  14. if (code === 0) return setTimeout(() => {
  15. if (success) success();
  16. }, 5000)
  17. if (code === 1) {
  18. if (success) success();
  19. return;
  20. }
  21. YeIMUniSDK.getInstance().connect({
  22. userId: userIds,
  23. token: uni.getStorageSync('serveChatToken'),
  24. success: (response) => {
  25. if (response.code === 200) {
  26. $serveChat.listenerList();
  27. if (success) success();
  28. }
  29. },
  30. fail: (err) => {
  31. console.log(err);
  32. logins();
  33. }
  34. });
  35. }
  36. const logins = () => {
  37. let timestamp = (new Date()).getTime() + 86400 * 1000; //1000天后过期
  38. let sign = md5(String(userIds) + timestamp + "50abd47112ebe8c5a73f4694c96a49ce");
  39. login({
  40. userId: userIds,
  41. timestamp: timestamp,
  42. sign: sign
  43. }).then(res => {
  44. if (res.state) {
  45. uni.setStorageSync('serveChatToken', res.data.token);
  46. connect();
  47. }
  48. })
  49. }
  50. const $serveChat = {
  51. init() {
  52. //初始化YeIMUniSDK
  53. YeIMUniSDK.init({
  54. baseURL: config.baseUrl + '/im', // YeIMServer http url (如无特殊需求,服务端启动后仅需修改ip或者域名即可)
  55. socketURL: config.socketURL, // YeIMServer socket url(如无特殊需求,服务端启动后仅需修改ip或者域名即可)
  56. /**
  57. * 日志等级
  58. * 0 普通日志,日志量较多,接入时建议使用
  59. * 1 关键性日志,日志量较少,生产环境时建议使用
  60. * 2 无日志级别,SDK 将不打印任何日志
  61. */
  62. logLevel: 2, // 日志等级,
  63. reConnectInterval: 3000, // 重连时间间隔
  64. reConnectTotal: 99, // 最大重连次数,0不限制一直重连
  65. heartInterval: 35000, //心跳时间间隔(默认30s)
  66. });
  67. },
  68. connect(userId) {
  69. userIds = userId;
  70. if (!userId) return;
  71. if (!uni.getStorageSync('serveChatToken')) {
  72. logins()
  73. } else {
  74. connect();
  75. }
  76. },
  77. getConversationList(success) {
  78. connect(() => {
  79. YeIMUniSDK.getInstance().getConversationList({
  80. page: 1, //页码
  81. limit: 100, //每页数量
  82. success: success,
  83. fail: (err) => {
  84. console.log(err);
  85. }
  86. });
  87. });
  88. },
  89. getHistoryMessageList(nextMessageId, userId, success, fail) {
  90. connect(() => {
  91. YeIMUniSDK.getInstance().getHistoryMessageList({
  92. nextMessageId: nextMessageId,
  93. conversationId: userId,
  94. success: success,
  95. fail: fail
  96. });
  97. });
  98. },
  99. sendImage(userId, success) {
  100. connect(() => {
  101. uni.chooseImage({
  102. count: 1, //图片数量
  103. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  104. sourceType: ['album'], //从相册选择
  105. success: res => {
  106. uni.getImageInfo({
  107. src: res.tempFilePaths[0],
  108. success: image => {
  109. //创建图片消息
  110. let message = YeIMUniSDK.getInstance()
  111. .createImageMessage({
  112. toId: userId, //接收者用户ID字符串
  113. conversationType: YeIMUniSDKDefines
  114. .CONVERSATION_TYPE
  115. .PRIVATE, //会话类型:私聊
  116. body: {
  117. file: {
  118. tempFilePath: res.tempFilePaths[
  119. 0], //本地图片临时路径
  120. width: image.width, //图片宽度
  121. height: image.height //图片高度
  122. }
  123. },
  124. extra: "",
  125. onProgress: (progress) => {
  126. // console.log(progress);
  127. }
  128. });
  129. //发送消息
  130. uni.showLoading();
  131. YeIMUniSDK.getInstance().sendMessage({
  132. message: message,
  133. success: success,
  134. fail: (err) => {
  135. uni.hideLoading();
  136. uni.showToast({
  137. title: '发送失败',
  138. icon: "none"
  139. });
  140. }
  141. });
  142. }
  143. });
  144. }
  145. });
  146. });
  147. },
  148. sendText(userId, content, success) {
  149. connect(() => {
  150. //创建文字消息
  151. let message = YeIMUniSDK.getInstance().createTextMessage({
  152. toId: userId, //接收者用户ID字符串
  153. conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
  154. body: {
  155. text: content //文本消息内容字符串
  156. },
  157. extra: ""
  158. });
  159. //发送消息
  160. YeIMUniSDK.getInstance().sendMessage({
  161. message: message,
  162. success: success,
  163. fail: (err) => {
  164. uni.hideLoading();
  165. uni.showToast({
  166. title: '发送失败',
  167. icon: "none"
  168. });
  169. }
  170. });
  171. });
  172. },
  173. disConnect() {
  174. let code = YeIMUniSDK.getInstance().readyState();
  175. if (code === 1) YeIMUniSDK.getInstance().disConnect();
  176. },
  177. listenerList() {
  178. if (isListenerChatList) return;
  179. connect(() => {
  180. isListenerChatList = true;
  181. //监听会话列表更新
  182. YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.CONVERSATION_LIST_CHANGED, (
  183. list) => {
  184. uni.$emit('changeServeChatList', list);
  185. });
  186. })
  187. },
  188. clearConversationUnread(conversationId) {
  189. //清除指定会话未读数,并给对方发送已读回执
  190. YeIMUniSDK.getInstance().clearConversationUnread(conversationId);
  191. }
  192. }
  193. export default $serveChat;