@aochuang/client-sdk 1.0.278

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/README.md +93 -0
  2. package/common/avatar/avatar.vue +86 -0
  3. package/common/avatar/index.js +3 -0
  4. package/common/badge/badge.vue +105 -0
  5. package/common/badge/index.js +3 -0
  6. package/common/context-menu/context-menu-box.vue +61 -0
  7. package/common/context-menu/context-menu-group.vue +162 -0
  8. package/common/context-menu/context-menu-item.vue +179 -0
  9. package/common/context-menu/context-menu.vue +201 -0
  10. package/common/context-menu/index.js +3 -0
  11. package/common/context-menu/utils.js +138 -0
  12. package/common/friend-avatar/default.svg +1 -0
  13. package/common/friend-avatar/friend-avatar.vue +29 -0
  14. package/common/friend-avatar/index.js +3 -0
  15. package/common/image/index.js +3 -0
  16. package/common/index.js +17 -0
  17. package/common/room-avatar/default.svg +6 -0
  18. package/common/room-avatar/index.js +3 -0
  19. package/common/room-avatar/room-avatar.vue +29 -0
  20. package/common/scroll-load-more/index.js +3 -0
  21. package/common/scroll-load-more/scroll-load-more.vue +195 -0
  22. package/common/user-avatar/default.svg +1 -0
  23. package/common/user-avatar/index.js +3 -0
  24. package/common/user-avatar/user-avatar.vue +29 -0
  25. package/components/account-select/account-select-skeleton.vue +56 -0
  26. package/components/account-select/account-select.vue +205 -0
  27. package/components/account-select/all.svg +1 -0
  28. package/components/account-select/index.js +3 -0
  29. package/components/chat-editor/MENTION_TOKEN_SUMMARY.md +74 -0
  30. package/components/chat-editor/chat-editor-button/chat-editor-button.vue +78 -0
  31. package/components/chat-editor/chat-editor-suggestions/chat-editor-suggestions.vue +329 -0
  32. package/components/chat-editor/chat-editor-toolbar/chat-editor-toolbar-item.vue +28 -0
  33. package/components/chat-editor/chat-editor-toolbar/chat-editor-toolbar.vue +17 -0
  34. package/components/chat-editor/chat-editor.vue +933 -0
  35. package/components/chat-editor/index.js +12 -0
  36. package/components/chat-editor/utils.js +189 -0
  37. package/components/chat-friend-profile/chat-friend-profile.vue +118 -0
  38. package/components/chat-friend-profile/index.js +3 -0
  39. package/components/chat-layout/chat-layout.vue +71 -0
  40. package/components/chat-layout/index.js +3 -0
  41. package/components/chat-panel/chat-panel-box.vue +350 -0
  42. package/components/chat-panel/chat-panel-chat.vue +121 -0
  43. package/components/chat-panel/chat-panel-chats.vue +674 -0
  44. package/components/chat-panel/chat-panel-empty.vue +32 -0
  45. package/components/chat-panel/chat-panel-increment.vue +80 -0
  46. package/components/chat-panel/chat-panel-inner-msg.vue +25 -0
  47. package/components/chat-panel/chat-panel-loading.vue +29 -0
  48. package/components/chat-panel/chat-panel-nearest.vue +136 -0
  49. package/components/chat-panel/chat-panel.vue +292 -0
  50. package/components/chat-panel/index.js +3 -0
  51. package/components/chat-panel/util.js +83 -0
  52. package/components/chat-room-profile/chat-room-profile.vue +103 -0
  53. package/components/chat-room-profile/index.js +3 -0
  54. package/components/contacts-friend-select/contacts-friend-select-skeleton.vue +41 -0
  55. package/components/contacts-friend-select/contacts-friend-select.vue +204 -0
  56. package/components/contacts-friend-select/index.js +3 -0
  57. package/components/contacts-group-select/contacts-group-select-item.vue +98 -0
  58. package/components/contacts-group-select/contacts-group-select-skeleton.vue +81 -0
  59. package/components/contacts-group-select/contacts-group-select.vue +396 -0
  60. package/components/contacts-group-select/index.js +3 -0
  61. package/components/contacts-room-select/contacts-room-select-skeleton.vue +41 -0
  62. package/components/contacts-room-select/contacts-room-select.vue +208 -0
  63. package/components/contacts-room-select/index.js +3 -0
  64. package/components/index.js +43 -0
  65. package/components/layout/index.js +3 -0
  66. package/components/layout/layout.vue +70 -0
  67. package/components/session-select/index.js +11 -0
  68. package/components/session-select/session-select-item-skeleton.vue +59 -0
  69. package/components/session-select/session-select-item.vue +190 -0
  70. package/components/session-select/session-select.vue +386 -0
  71. package/components/wechat-chat-control/calling/calling.vue +227 -0
  72. package/components/wechat-chat-control/calling/phone-fill.svg +1 -0
  73. package/components/wechat-chat-control/calling/vidicon-fill.svg +1 -0
  74. package/components/wechat-chat-control/channel-live/channel-live.vue +198 -0
  75. package/components/wechat-chat-control/channel-live/quote-icon.svg +1 -0
  76. package/components/wechat-chat-control/channel-video/channel-video.vue +180 -0
  77. package/components/wechat-chat-control/channel-video/quote-icon.svg +1 -0
  78. package/components/wechat-chat-control/channel-video-card/channel-video-card.vue +139 -0
  79. package/components/wechat-chat-control/channel-video-card/quote-icon.svg +1 -0
  80. package/components/wechat-chat-control/company-card/company-card.vue +136 -0
  81. package/components/wechat-chat-control/company-card/quote-icon.svg +1 -0
  82. package/components/wechat-chat-control/custom-expression/custom-expression.vue +45 -0
  83. package/components/wechat-chat-control/empty/empty.vue +27 -0
  84. package/components/wechat-chat-control/file-url/file-url.vue +307 -0
  85. package/components/wechat-chat-control/file-url/icons/file-excel-line.svg +1 -0
  86. package/components/wechat-chat-control/file-url/icons/file-info-line.svg +1 -0
  87. package/components/wechat-chat-control/file-url/icons/file-music-line.svg +1 -0
  88. package/components/wechat-chat-control/file-url/icons/file-pdf-line.svg +1 -0
  89. package/components/wechat-chat-control/file-url/icons/file-ppt-line.svg +1 -0
  90. package/components/wechat-chat-control/file-url/icons/file-settings-line.svg +1 -0
  91. package/components/wechat-chat-control/file-url/icons/file-text-line.svg +1 -0
  92. package/components/wechat-chat-control/file-url/icons/file-unknow-line.svg +1 -0
  93. package/components/wechat-chat-control/file-url/icons/file-word-line.svg +1 -0
  94. package/components/wechat-chat-control/file-url/icons/file-zip-line.svg +1 -0
  95. package/components/wechat-chat-control/file-url/icons/index.js +24 -0
  96. package/components/wechat-chat-control/image/image.vue +344 -0
  97. package/components/wechat-chat-control/image/index.js +1 -0
  98. package/components/wechat-chat-control/image/util.js +29 -0
  99. package/components/wechat-chat-control/index.js +104 -0
  100. package/components/wechat-chat-control/jx-sys-text/jx-sys-text.vue +28 -0
  101. package/components/wechat-chat-control/location/location.vue +179 -0
  102. package/components/wechat-chat-control/location/offline-bg.png +0 -0
  103. package/components/wechat-chat-control/member-change/member-change.vue +37 -0
  104. package/components/wechat-chat-control/music/icons/163.png +0 -0
  105. package/components/wechat-chat-control/music/icons/163.svg +12 -0
  106. package/components/wechat-chat-control/music/icons/default.png +0 -0
  107. package/components/wechat-chat-control/music/icons/default.svg +1 -0
  108. package/components/wechat-chat-control/music/icons/kuwo.png +0 -0
  109. package/components/wechat-chat-control/music/icons/qq.png +0 -0
  110. package/components/wechat-chat-control/music/icons/qq.svg +1 -0
  111. package/components/wechat-chat-control/music/music.vue +156 -0
  112. package/components/wechat-chat-control/music/utils.js +30 -0
  113. package/components/wechat-chat-control/quote-message/quote-message.vue +257 -0
  114. package/components/wechat-chat-control/real-time-position/icon.svg +1 -0
  115. package/components/wechat-chat-control/real-time-position/real-time-position.vue +57 -0
  116. package/components/wechat-chat-control/red-envelopes/quote-icon.svg +1 -0
  117. package/components/wechat-chat-control/red-envelopes/red-envelope.svg +1 -0
  118. package/components/wechat-chat-control/red-envelopes/red-envelopes.vue +168 -0
  119. package/components/wechat-chat-control/revoke-me-message/revoke-me-message.vue +41 -0
  120. package/components/wechat-chat-control/revoke-other-message/revoke-other-message.vue +41 -0
  121. package/components/wechat-chat-control/revoke-you-message/revoke-you-message.vue +41 -0
  122. package/components/wechat-chat-control/room-calling/phone-fill.svg +1 -0
  123. package/components/wechat-chat-control/room-calling/room-calling.vue +52 -0
  124. package/components/wechat-chat-control/room-calling/vidicon-fill.svg +1 -0
  125. package/components/wechat-chat-control/share-card/quote-icon.svg +1 -0
  126. package/components/wechat-chat-control/share-card/share-card.vue +140 -0
  127. package/components/wechat-chat-control/system/system.vue +122 -0
  128. package/components/wechat-chat-control/system-batch-message/system-batch-message.vue +28 -0
  129. package/components/wechat-chat-control/system-money/system-money.vue +39 -0
  130. package/components/wechat-chat-control/text/icons/icon.svg +6 -0
  131. package/components/wechat-chat-control/text/text.vue +164 -0
  132. package/components/wechat-chat-control/text-with-at/text-with-at.vue +88 -0
  133. package/components/wechat-chat-control/transfer/collection.svg +1 -0
  134. package/components/wechat-chat-control/transfer/quote-icon.svg +1 -0
  135. package/components/wechat-chat-control/transfer/red-transfer.svg +1 -0
  136. package/components/wechat-chat-control/transfer/refund.svg +1 -0
  137. package/components/wechat-chat-control/transfer/transfer.svg +1 -0
  138. package/components/wechat-chat-control/transfer/transfer.vue +263 -0
  139. package/components/wechat-chat-control/unknow/unknow.vue +21 -0
  140. package/components/wechat-chat-control/url/icons/link.svg +1 -0
  141. package/components/wechat-chat-control/url/icons/video.svg +6 -0
  142. package/components/wechat-chat-control/url/miniprogram.svg +1 -0
  143. package/components/wechat-chat-control/url/url-file.vue +47 -0
  144. package/components/wechat-chat-control/url/url-link.vue +169 -0
  145. package/components/wechat-chat-control/url/url-merge.vue +164 -0
  146. package/components/wechat-chat-control/url/url-miniprogram.vue +259 -0
  147. package/components/wechat-chat-control/url/url.vue +116 -0
  148. package/components/wechat-chat-control/util.js +234 -0
  149. package/components/wechat-chat-control/video/icons/video.svg +1 -0
  150. package/components/wechat-chat-control/video/video.vue +304 -0
  151. package/components/wechat-chat-control/voice/icons/voice.svg +1 -0
  152. package/components/wechat-chat-control/voice/voice.vue +464 -0
  153. package/components/wechat-chat-control/wechat-chat-control-config-item.vue +24 -0
  154. package/components/wechat-chat-control/wechat-chat-control-config-msg.vue +21 -0
  155. package/components/wechat-chat-control/wechat-chat-control-config.vue +57 -0
  156. package/components/wechat-chat-panel/chat-panel-chat-status/chat-panel-chat-status.vue +69 -0
  157. package/components/wechat-chat-panel/chat-panel-item.vue +695 -0
  158. package/components/wechat-chat-panel/chat-panel.vue +257 -0
  159. package/components/wechat-chat-panel/index.js +3 -0
  160. package/components/wework-chat-control/calling/calling.vue +223 -0
  161. package/components/wework-chat-control/calling/phone-fill.svg +1 -0
  162. package/components/wework-chat-control/calling/vidicon-fill.svg +1 -0
  163. package/components/wework-chat-control/channel-live/channel-live.vue +198 -0
  164. package/components/wework-chat-control/channel-live/quote-icon.svg +1 -0
  165. package/components/wework-chat-control/channel-video/channel-video.vue +180 -0
  166. package/components/wework-chat-control/channel-video/quote-icon.svg +1 -0
  167. package/components/wework-chat-control/company-card/company-card.vue +136 -0
  168. package/components/wework-chat-control/company-card/quote-icon.svg +1 -0
  169. package/components/wework-chat-control/custom-expression/custom-expression.vue +34 -0
  170. package/components/wework-chat-control/empty/empty.vue +27 -0
  171. package/components/wework-chat-control/expression/expression.vue +53 -0
  172. package/components/wework-chat-control/file-url/file-url.vue +247 -0
  173. package/components/wework-chat-control/file-url/icons/file-excel-line.svg +1 -0
  174. package/components/wework-chat-control/file-url/icons/file-info-line.svg +1 -0
  175. package/components/wework-chat-control/file-url/icons/file-music-line.svg +1 -0
  176. package/components/wework-chat-control/file-url/icons/file-pdf-line.svg +1 -0
  177. package/components/wework-chat-control/file-url/icons/file-ppt-line.svg +1 -0
  178. package/components/wework-chat-control/file-url/icons/file-settings-line.svg +1 -0
  179. package/components/wework-chat-control/file-url/icons/file-text-line.svg +1 -0
  180. package/components/wework-chat-control/file-url/icons/file-unknow-line.svg +1 -0
  181. package/components/wework-chat-control/file-url/icons/file-word-line.svg +1 -0
  182. package/components/wework-chat-control/file-url/icons/file-zip-line.svg +1 -0
  183. package/components/wework-chat-control/file-url/icons/index.js +24 -0
  184. package/components/wework-chat-control/image/image.vue +296 -0
  185. package/components/wework-chat-control/image/index.js +1 -0
  186. package/components/wework-chat-control/image/util.js +21 -0
  187. package/components/wework-chat-control/index.js +105 -0
  188. package/components/wework-chat-control/jx-sys-text/jx-sys-text.vue +28 -0
  189. package/components/wework-chat-control/link/link.vue +100 -0
  190. package/components/wework-chat-control/location/location.vue +181 -0
  191. package/components/wework-chat-control/location/offline-bg.png +0 -0
  192. package/components/wework-chat-control/red-envelopes/quote-icon.svg +1 -0
  193. package/components/wework-chat-control/red-envelopes/red-envelope.svg +1 -0
  194. package/components/wework-chat-control/red-envelopes/red-envelopes.vue +168 -0
  195. package/components/wework-chat-control/share-card/quote-icon.svg +1 -0
  196. package/components/wework-chat-control/share-card/share-card.vue +140 -0
  197. package/components/wework-chat-control/text/icons/icon.svg +6 -0
  198. package/components/wework-chat-control/text/text.vue +157 -0
  199. package/components/wework-chat-control/unknow/unknow.vue +21 -0
  200. package/components/wework-chat-control/url/icons/link.svg +1 -0
  201. package/components/wework-chat-control/url/icons/video.svg +6 -0
  202. package/components/wework-chat-control/url/miniprogram.svg +1 -0
  203. package/components/wework-chat-control/url/url-file.vue +37 -0
  204. package/components/wework-chat-control/url/url-link.vue +169 -0
  205. package/components/wework-chat-control/url/url-merge.vue +164 -0
  206. package/components/wework-chat-control/url/url-miniprogram.vue +248 -0
  207. package/components/wework-chat-control/url/url.vue +103 -0
  208. package/components/wework-chat-control/util.js +223 -0
  209. package/components/wework-chat-control/video/icons/video.svg +1 -0
  210. package/components/wework-chat-control/video/video.vue +304 -0
  211. package/components/wework-chat-control/voice/icons/voice.svg +1 -0
  212. package/components/wework-chat-control/voice/voice.vue +464 -0
  213. package/components/wework-chat-panel/chat-panel-controls/company-card/company-card.vue +35 -0
  214. package/components/wework-chat-panel/chat-panel-controls/expression/expression.vue +36 -0
  215. package/components/wework-chat-panel/chat-panel-controls/file-url/file-url.vue +35 -0
  216. package/components/wework-chat-panel/chat-panel-controls/image/image.vue +36 -0
  217. package/components/wework-chat-panel/chat-panel-controls/index.js +35 -0
  218. package/components/wework-chat-panel/chat-panel-controls/jx-sys-text/jx-sys-text.vue +28 -0
  219. package/components/wework-chat-panel/chat-panel-controls/link/link.vue +35 -0
  220. package/components/wework-chat-panel/chat-panel-controls/location/location.vue +35 -0
  221. package/components/wework-chat-panel/chat-panel-controls/text/text.vue +43 -0
  222. package/components/wework-chat-panel/chat-panel-controls/unkonw/unkonw.vue +39 -0
  223. package/components/wework-chat-panel/chat-panel-controls/video/video.vue +37 -0
  224. package/components/wework-chat-panel/chat-panel-controls/voice/voice.vue +35 -0
  225. package/components/wework-chat-panel/chat-panel-item.vue +650 -0
  226. package/components/wework-chat-panel/chat-panel.vue +163 -0
  227. package/components/wework-chat-panel/index.js +3 -0
  228. package/package.json +23 -0
  229. package/services/client-chat/client-chat-wechat/client-chat-account.js +426 -0
  230. package/services/client-chat/client-chat-wechat/client-chat-concats.js +1029 -0
  231. package/services/client-chat/client-chat-wechat/client-chat-draft.js +92 -0
  232. package/services/client-chat/client-chat-wechat/client-chat-message.js +588 -0
  233. package/services/client-chat/client-chat-wechat/client-chat-session-manage.js +67 -0
  234. package/services/client-chat/client-chat-wechat/client-chat-session.js +1048 -0
  235. package/services/client-chat/client-chat-wechat/client-chat-socket.js +215 -0
  236. package/services/client-chat/client-chat-wechat/client-chat.js +1065 -0
  237. package/services/client-chat/client-chat-wechat/index.js +3 -0
  238. package/services/client-chat/client-chat-wechat/utils.js +82 -0
  239. package/services/client-chat/client-chat-wework/client-chat-account.js +310 -0
  240. package/services/client-chat/client-chat-wework/client-chat-concats.js +772 -0
  241. package/services/client-chat/client-chat-wework/client-chat-message.js +278 -0
  242. package/services/client-chat/client-chat-wework/client-chat-session.js +929 -0
  243. package/services/client-chat/client-chat-wework/client-chat-socket.js +64 -0
  244. package/services/client-chat/client-chat-wework/client-chat.js +330 -0
  245. package/services/client-chat/client-chat-wework/index.js +3 -0
  246. package/services/client-chat/client-chat-wework/utils.js +82 -0
  247. package/services/index.js +10 -0
  248. package/services/socket/index.js +5 -0
  249. package/services/socket/socket.js +797 -0
  250. package/services/socket/utils.js +7 -0
  251. package/uni-common/account-portray/account-portray.vue +51 -0
  252. package/uni-common/account-select/account-select-item.vue +172 -0
  253. package/uni-common/account-select/account-select.vue +252 -0
  254. package/uni-common/all-friend-avatar/all-friend-avatar.vue +49 -0
  255. package/uni-common/friend-avatar/default.svg +1 -0
  256. package/uni-common/friend-avatar/friend-avatar.vue +27 -0
  257. package/uni-common/friend-avatar/index.js +3 -0
  258. package/uni-common/friend-loader/friend-loader.vue +53 -0
  259. package/uni-common/friend-portray/friend-portray.vue +56 -0
  260. package/uni-common/group-avatar/default.svg +1 -0
  261. package/uni-common/group-avatar/group-avatar.vue +18 -0
  262. package/uni-common/group-avatar/index.js +3 -0
  263. package/uni-common/room-avatar/default.svg +6 -0
  264. package/uni-common/room-avatar/index.js +3 -0
  265. package/uni-common/room-avatar/room-avatar.vue +27 -0
  266. package/uni-common/room-loader/room-loader.vue +53 -0
  267. package/uni-common/room-portray/room-portray.vue +56 -0
  268. package/uni-components/chat-control/calling/calling.vue +91 -0
  269. package/uni-components/chat-control/calling/phone-fill.svg +1 -0
  270. package/uni-components/chat-control/calling/vidicon-fill.svg +1 -0
  271. package/uni-components/chat-control/channel-video/channel-video.vue +89 -0
  272. package/uni-components/chat-control/channel-video-card/channel-video-card.vue +105 -0
  273. package/uni-components/chat-control/channel-video-live/channel-video-live.vue +92 -0
  274. package/uni-components/chat-control/chat-control-config-item/chat-control-config-item.vue +20 -0
  275. package/uni-components/chat-control/chat-control-config-item/index.js +3 -0
  276. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-app.vue +25 -0
  277. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-h5.vue +21 -0
  278. package/uni-components/chat-control/chat-control-config.vue +59 -0
  279. package/uni-components/chat-control/chat-control.vue +218 -0
  280. package/uni-components/chat-control/company-card/company-card.vue +123 -0
  281. package/uni-components/chat-control/const.js +28 -0
  282. package/uni-components/chat-control/expression/expression.vue +41 -0
  283. package/uni-components/chat-control/image/image.vue +68 -0
  284. package/uni-components/chat-control/index.js +89 -0
  285. package/uni-components/chat-control/location/location.vue +110 -0
  286. package/uni-components/chat-control/member-change/member-change.vue +32 -0
  287. package/uni-components/chat-control/quote-message/quote-message.vue +216 -0
  288. package/uni-components/chat-control/real-time-position/real-time-position.vue +62 -0
  289. package/uni-components/chat-control/redpacket/red-envelope.svg +1 -0
  290. package/uni-components/chat-control/redpacket/redpacket.vue +75 -0
  291. package/uni-components/chat-control/share-card/share-card.vue +101 -0
  292. package/uni-components/chat-control/system/system.vue +69 -0
  293. package/uni-components/chat-control/system-batch-message/system-batch-message.vue +30 -0
  294. package/uni-components/chat-control/system-text/system-text.vue +32 -0
  295. package/uni-components/chat-control/text/text.vue +67 -0
  296. package/uni-components/chat-control/text-with-at/text-with-at.vue +51 -0
  297. package/uni-components/chat-control/transfer/red-transfer.svg +1 -0
  298. package/uni-components/chat-control/transfer/transfer.vue +80 -0
  299. package/uni-components/chat-control/unkonw/unkonw.vue +37 -0
  300. package/uni-components/chat-control/url/icons/file-excel-line.svg +1 -0
  301. package/uni-components/chat-control/url/icons/file-info-line.svg +1 -0
  302. package/uni-components/chat-control/url/icons/file-music-line.svg +1 -0
  303. package/uni-components/chat-control/url/icons/file-pdf-line.svg +1 -0
  304. package/uni-components/chat-control/url/icons/file-ppt-line.svg +1 -0
  305. package/uni-components/chat-control/url/icons/file-settings-line.svg +1 -0
  306. package/uni-components/chat-control/url/icons/file-text-line.svg +1 -0
  307. package/uni-components/chat-control/url/icons/file-unknow-line.svg +1 -0
  308. package/uni-components/chat-control/url/icons/file-word-line.svg +1 -0
  309. package/uni-components/chat-control/url/icons/file-zip-line.svg +1 -0
  310. package/uni-components/chat-control/url/icons/index.js +24 -0
  311. package/uni-components/chat-control/url/miniprogram.svg +1 -0
  312. package/uni-components/chat-control/url/url-miniprogram.vue +116 -0
  313. package/uni-components/chat-control/url/url.vue +306 -0
  314. package/uni-components/chat-control/url-new/icons/file-excel-line.svg +1 -0
  315. package/uni-components/chat-control/url-new/icons/file-info-line.svg +1 -0
  316. package/uni-components/chat-control/url-new/icons/file-music-line.svg +1 -0
  317. package/uni-components/chat-control/url-new/icons/file-pdf-line.svg +1 -0
  318. package/uni-components/chat-control/url-new/icons/file-ppt-line.svg +1 -0
  319. package/uni-components/chat-control/url-new/icons/file-settings-line.svg +1 -0
  320. package/uni-components/chat-control/url-new/icons/file-text-line.svg +1 -0
  321. package/uni-components/chat-control/url-new/icons/file-unknow-line.svg +1 -0
  322. package/uni-components/chat-control/url-new/icons/file-word-line.svg +1 -0
  323. package/uni-components/chat-control/url-new/icons/file-zip-line.svg +1 -0
  324. package/uni-components/chat-control/url-new/icons/index.js +24 -0
  325. package/uni-components/chat-control/url-new/url-new.vue +110 -0
  326. package/uni-components/chat-control/utils.js +12 -0
  327. package/uni-components/chat-control/video/video.vue +156 -0
  328. package/uni-components/chat-control/voice/voice.vue +166 -0
  329. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-collect.vue +84 -0
  330. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-system.vue +28 -0
  331. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet.vue +85 -0
  332. package/uni-components/chat-editor/chat-editor-func/chat-editor-func.vue +157 -0
  333. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at-panel.vue +158 -0
  334. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at.vue +61 -0
  335. package/uni-components/chat-editor/chat-editor-func-button/chat-editor-func-button.vue +58 -0
  336. package/uni-components/chat-editor/chat-editor-func-file/chat-editor-func-file.vue +54 -0
  337. package/uni-components/chat-editor/chat-editor-func-image/chat-editor-func-image.vue +42 -0
  338. package/uni-components/chat-editor/chat-editor-func-video/chat-editor-func-video.vue +42 -0
  339. package/uni-components/chat-editor/chat-editor-func-voice/chat-editor-func-voice.vue +25 -0
  340. package/uni-components/chat-editor/chat-editor-message-send/chat-editor-message-send.vue +158 -0
  341. package/uni-components/chat-editor/chat-editor-quote/chat-editor-quote.vue +75 -0
  342. package/uni-components/chat-editor/chat-editor.vue +257 -0
  343. package/uni-components/chat-editor/index.js +10 -0
  344. package/uni-components/chat-editor/util.js +65 -0
  345. package/uni-components/chat-panel/chat-panel-chats-box.vue +238 -0
  346. package/uni-components/chat-panel/chat-panel-chats-forward/chat-panel-chats-forward.vue +273 -0
  347. package/uni-components/chat-panel/chat-panel-chats-item.vue +578 -0
  348. package/uni-components/chat-panel/chat-panel-chats-status/chat-panel-chats-status.vue +71 -0
  349. package/uni-components/chat-panel/chat-panel-chats.vue +368 -0
  350. package/uni-components/chat-panel/chat-panel.vue +227 -0
  351. package/uni-components/contacts-group-select/contacts-group-select-item.vue +85 -0
  352. package/uni-components/contacts-group-select/contacts-group-select-panel.vue +119 -0
  353. package/uni-components/contacts-group-select/contacts-group-select.vue +150 -0
  354. package/utils/color.js +178 -0
  355. package/utils/data.js +11 -0
  356. package/utils/date.js +107 -0
  357. package/utils/event.js +3 -0
  358. package/utils/file.js +26 -0
  359. package/utils/index.js +5 -0
  360. package/utils/json.js +40 -0
  361. package/utils/log.js +243 -0
  362. package/utils/queue.js +97 -0
  363. package/utils/regexp.js +9 -0
  364. package/utils/string.js +66 -0
  365. package/utils/url.js +48 -0
  366. package/utils/util.js +130 -0
@@ -0,0 +1,92 @@
1
+ import Vue from 'vue'
2
+ import { unique } from '../../../utils/string.js'
3
+
4
+ export default class ClientChatDraft {
5
+ data = Vue.observable({
6
+ /**
7
+ * 草稿消息
8
+ * [{
9
+ * id: 'xxx', // 本地唯一id
10
+ * targetId: 'xxx', // 群或者好友id
11
+ * targetType: null, // 草稿类型,0:好友,1:群
12
+ * msgType: null, // 消息类型
13
+ * content: null, // 消息内容
14
+ * createTime: null // 创建时间
15
+ * }]
16
+ */
17
+ draftData: []
18
+ })
19
+
20
+ constructor (options) {
21
+ options = Object.assign({
22
+ clientChat: this
23
+ }, options)
24
+ if (!options.clientChat) {
25
+ throw new Error('必须将clientChat传递过来')
26
+ }
27
+ this.clientChat = options.clientChat
28
+ }
29
+
30
+ addDraftItem (data) {
31
+ if (!data) {
32
+ throw new Error('草稿数据不能为空')
33
+ }
34
+ if (!data.targetId) {
35
+ throw new Error('缺少targetId参数')
36
+ }
37
+ if (![0, 1].includes(data.targetType)) {
38
+ throw new Error('参数targetType无效')
39
+ }
40
+ if (!data.msgType) {
41
+ throw new Error('缺少msgType参数')
42
+ }
43
+ if (!data.content) {
44
+ throw new Error('缺少content参数')
45
+ }
46
+ if (this.data.draftData.some(v => v.targetType === data.targetType && v.targetId === data.targetId)) {
47
+ return
48
+ }
49
+ const nextItem = Object.assign({}, data, {
50
+ id: unique(),
51
+ createTime: Date.now()
52
+ })
53
+ this.data.draftData.push(nextItem)
54
+ return nextItem
55
+ }
56
+
57
+ removeDraftItem (id) {
58
+ let index = -1
59
+ this.data.draftData.some((v, i) => {
60
+ if (v.id === id) {
61
+ index = i
62
+ return true
63
+ }
64
+ })
65
+ if (index < 0) {
66
+ return
67
+ }
68
+ this.data.draftData.splice(index, 1)
69
+ }
70
+
71
+ getDraftItem (id) {
72
+ let index = -1
73
+ this.data.draftData.some((v, i) => {
74
+ if (v.id === id) {
75
+ index = i
76
+ return true
77
+ }
78
+ })
79
+ if (index < 0) {
80
+ return
81
+ }
82
+ return this.data.draftData[index]
83
+ }
84
+
85
+ findDraftItem (fn) {
86
+ return this.data.draftData.find((v) => {
87
+ return fn({
88
+ item: v
89
+ })
90
+ })
91
+ }
92
+ }
@@ -0,0 +1,588 @@
1
+ import Vue from 'vue'
2
+ import Event from '../../../utils/event.js'
3
+ import { unique } from '../../../utils/string.js'
4
+ import { formatDate } from '../../../utils/date.js'
5
+ import { createPromise } from '../../../utils/util'
6
+ import { encodeHtmlEntities } from '@aochuang/common/utils/string.js'
7
+
8
+ export default class ClientChatMessage {
9
+
10
+ data = Vue.observable({
11
+ /**
12
+ * {
13
+ * groupField: {
14
+ * day: { // 按照天分组,这样的好处是就不用做排序了,用浏览器的机制
15
+ * milliseconds: [ // 按照毫秒分组,一般不可能毫秒级还有多条消息,这里用数组只是防止真的存在
16
+ * // 消息数据
17
+ * ...
18
+ * ]
19
+ * },
20
+ * }
21
+ * }
22
+ */
23
+ messageData: {},
24
+ /**
25
+ * 最后接收的一条消息时间
26
+ */
27
+ lastReceiveMessageTime: null,
28
+ })
29
+
30
+ messageMap = {}
31
+
32
+ // 记录一下临时更新的消息,主要是客服端发送消息后,如果失败的时候后端会返回两条消息,一条完整的接口一条失败的状态结果,两个消息顺序没发保证完整结构-》状态结果,所以要先把状态结果临时存一下,后面新增消息的时候从这里找一下,同步一下sendStatus和errMsg
33
+ tempMessageMap = {}
34
+
35
+ // 需要检查消息结果的消息记录
36
+ checkMessageSendResultTaskList = []
37
+
38
+ get messageData () {
39
+ return this.data.messageData
40
+ }
41
+
42
+ get lastReceiveMessageTime () {
43
+ return this.data.lastReceiveMessageTime
44
+ }
45
+
46
+ constructor (options) {
47
+ options = Object.assign({
48
+ clientChat: this,
49
+ queryMethod: null,
50
+ sortField: null, // 排序的字段,必须是唯一的,例如时间
51
+ groupField: null, // 分组的字段
52
+ checkMessageSendResultMethod: null, // 检查消息发送结果
53
+ loadLossMessageDataMethod: null, // 加载丢失的消息数据,例如socket断开期间没有收到的数据
54
+ onAddMessageSuccess: null // 新增消息成功回调事件
55
+ }, options)
56
+ if (!options.clientChat) {
57
+ throw new Error('必须将clientChat传递过来')
58
+ }
59
+ if (!options.checkMessageSendResultMethod) {
60
+ throw new Error('缺少checkMessageSendResultMethod配置')
61
+ }
62
+ this.queryMethod = options.queryMethod
63
+ this.clientChat = options.clientChat
64
+ this.groupField = options.groupField
65
+ this.sortField = options.sortField
66
+ this.checkMessageSendResultMethod = options.checkMessageSendResultMethod
67
+ this.loadLossMessageDataMethod = options.loadLossMessageDataMethod
68
+ this.onAddMessageSuccess = options.onAddMessageSuccess
69
+ this.event = new Event()
70
+ }
71
+
72
+ getSortField (time) {
73
+ const step = 1000 * 60 * 60 * 24
74
+ const day = Math.floor(time / step)
75
+ const milliseconds = time - (day * step)
76
+ return {
77
+ day: day, // Math.abs(day - 1000000),
78
+ milliseconds: milliseconds // Math.abs(milliseconds - 86400000)
79
+ }
80
+ }
81
+ /**
82
+ * 新增消息
83
+ * @param { Object } data - 消息数据
84
+ * @example
85
+ * addMessage({
86
+ * "accountId": "1775049357349355520",
87
+ * "accountNickName": "杨雨",
88
+ * "accountRealName": "杨雨",
89
+ * "accountUserName": "18627032190",
90
+ * "content": "kkkk",
91
+ * "createTime": 1723710023517,
92
+ * "id": "6612b84538679a8c881e9f8482ccda9e9b35c00d",
93
+ * "isDeleted": false,
94
+ * "isSend": false,
95
+ * "msgId": "1245",
96
+ * "msgSubType": 0,
97
+ * "msgSvrId": "4319123759514541049",
98
+ * "msgType": 1,
99
+ * "origin": "0",
100
+ * "sendStatus": 0, // 0发送成功,1发送中,2发送失败,3发送超时
101
+ * "tenantId": "1761952223049924608",
102
+ * "wechatAccountId": "ad9d9ae2a8be4f27311312cdd4af3549dc8427ef",
103
+ * "wechatFriendId": "2089efcc7f8f40b00b7f05fa4c6dfd3bb642774d",
104
+ * "wechatChatroomId": "2089efcc7f8f40b00b7f05fa4c6dfd3bb642774d", //群的时候才有
105
+ * "wechatTime": 1723710022000
106
+ * })
107
+ */
108
+ addMessage (data, fireEvent) {
109
+ if (!data || !data.id || !data[this.groupField] || !data[this.sortField]) {
110
+ throw new Error('缺少必须参数')
111
+ }
112
+ if (this.messageMap[data.id]) {
113
+ return
114
+ }
115
+ if (this.tempMessageMap[data.id]) {
116
+ data = Object.assign(data, this.tempMessageMap[data.id])
117
+ delete this.tempMessageMap[data.id]
118
+ }
119
+ const groupField = data[this.groupField]
120
+ if (!this.data.messageData[groupField]) {
121
+ Vue.set(this.data.messageData, groupField, {})
122
+ }
123
+ const sortFields = this.getSortField(data[this.sortField])
124
+ if (!this.data.messageData[groupField][sortFields.day]) {
125
+ Vue.set(this.data.messageData[groupField], sortFields.day, {})
126
+ }
127
+ if (!this.data.messageData[groupField][sortFields.day][sortFields.milliseconds]) {
128
+ Vue.set(this.data.messageData[groupField][sortFields.day], sortFields.milliseconds, [])
129
+ }
130
+ if (this.data.messageData[groupField][sortFields.day][sortFields.milliseconds].some(v => v.id === data.id)) {
131
+ return
132
+ }
133
+ this.data.messageData[groupField][sortFields.day][sortFields.milliseconds].push(data)
134
+ this.messageMap[data.id] = data
135
+ // 发送中的消息并且不是临时占位消息,需要增加轮询结果逻辑
136
+ if (data.isSend && data.sendStatus === 1 && !data._temp) {
137
+ // 排除一下系统消息,因为后端系统消息的sendStatus永远为1,这会导致前端总是轮训去调用接口检查消息状态
138
+ if (data.msgType !== 90000) {
139
+ this.addCheckMessageSendResultTask(data)
140
+ }
141
+ }
142
+ if (fireEvent !== false) {
143
+ this.event && this.event.emit('add-message', {
144
+ data
145
+ })
146
+ this.onAddMessageSuccess && this.onAddMessageSuccess({
147
+ data
148
+ })
149
+ }
150
+ }
151
+
152
+ removeMessage (id) {
153
+ if (!id) {
154
+ return
155
+ }
156
+ // 删除检查结果轮询任务
157
+ this.removeCheckMessageSendResultTask(id)
158
+ // 删除临时消息记录
159
+ delete this.tempMessageMap[id]
160
+ // 删除其他逻辑
161
+ const message = this.messageMap[id]
162
+ if (!message) {
163
+ return
164
+ }
165
+ delete this.messageMap[id]
166
+ const groupField = message[this.groupField]
167
+ const sortFields = this.getSortField(message[this.sortField])
168
+ if (!this.data.messageData[groupField]) {
169
+ return
170
+ }
171
+ if (!this.data.messageData[groupField][sortFields.day]) {
172
+ return
173
+ }
174
+ if (!this.data.messageData[groupField][sortFields.day][sortFields.milliseconds]) {
175
+ return
176
+ }
177
+ const index = this.data.messageData[groupField][sortFields.day][sortFields.milliseconds].indexOf(message)
178
+ if (index < 0) {
179
+ return
180
+ }
181
+ this.data.messageData[groupField][sortFields.day][sortFields.milliseconds].splice(index, 1)
182
+ if (!this.data.messageData[groupField][sortFields.day][sortFields.milliseconds].length) {
183
+ delete this.data.messageData[groupField][sortFields.day][sortFields.milliseconds]
184
+ }
185
+ if (!Object.keys(this.data.messageData[groupField][sortFields.day]).length) {
186
+ delete this.data.messageData[groupField][sortFields.day]
187
+ }
188
+ if (!Object.keys(this.data.messageData[groupField]).length) {
189
+ delete this.data.messageData[groupField]
190
+ }
191
+ }
192
+
193
+ updateMessage (id, props) {
194
+ const message = this.getMessage(id)
195
+ if (!message) {
196
+ // 缓存一下
197
+ this.tempMessageMap[id] = props
198
+ return
199
+ }
200
+ if (!props) {
201
+ return
202
+ }
203
+ const groupField = message[this.groupField]
204
+ const newSortFields = this.getSortField(props[this.sortField])
205
+ const oldSortFields = this.getSortField(message[this.sortField])
206
+ Object.keys(props).forEach(key => {
207
+ Vue.set(message, key, props[key])
208
+ // 需要更新一下时间,因为引用消息依赖时间,更新了时间还需要把排序数据更新一下,如果不更新,后面删除不掉
209
+ if (this.sortField === key) {
210
+ // 先删除前一次时间排序消息
211
+ if (this.data.messageData[groupField] && this.data.messageData[groupField][oldSortFields.day] && this.data.messageData[groupField][oldSortFields.day][oldSortFields.milliseconds]) {
212
+ const index = this.data.messageData[groupField][oldSortFields.day][oldSortFields.milliseconds].indexOf(message)
213
+ if (index >= 0) {
214
+ this.data.messageData[groupField][oldSortFields.day][oldSortFields.milliseconds].splice(index, 1)
215
+ if (!this.data.messageData[groupField][oldSortFields.day][oldSortFields.milliseconds].length) {
216
+ delete this.data.messageData[groupField][oldSortFields.day][oldSortFields.milliseconds]
217
+ }
218
+ if (!Object.keys(this.data.messageData[groupField][oldSortFields.day]).length) {
219
+ delete this.data.messageData[groupField][oldSortFields.day]
220
+ }
221
+ if (!Object.keys(this.data.messageData[groupField]).length) {
222
+ delete this.data.messageData[groupField]
223
+ }
224
+ }
225
+ if (!this.data.messageData[groupField]) {
226
+ Vue.set(this.data.messageData, groupField, {})
227
+ }
228
+ if (!this.data.messageData[groupField][newSortFields.day]) {
229
+ Vue.set(this.data.messageData[groupField], newSortFields.day, {})
230
+ }
231
+ if (!this.data.messageData[groupField][newSortFields.day][newSortFields.milliseconds]) {
232
+ Vue.set(this.data.messageData[groupField][newSortFields.day], newSortFields.milliseconds, [])
233
+ }
234
+ if (!this.data.messageData[groupField][newSortFields.day][newSortFields.milliseconds].some(v => v.id === message.id)) {
235
+ this.data.messageData[groupField][newSortFields.day][newSortFields.milliseconds].push(message)
236
+ }
237
+ }
238
+ }
239
+ })
240
+ }
241
+
242
+ findMessage (fn) {
243
+ let result
244
+ Object.keys(this.messageMap).some(key => {
245
+ if (fn({
246
+ message: this.messageMap[key]
247
+ })) {
248
+ result = this.messageMap[key]
249
+ return true
250
+ }
251
+ })
252
+ return result
253
+ }
254
+
255
+ filterMessage (fn) {
256
+ let result = []
257
+ Object.keys(this.data.messageData).forEach(groupKey => {
258
+ let isBreak = false
259
+ const groupData = this.data.messageData[groupKey] || {}
260
+ Object.keys(groupData).some(key => {
261
+ if (isBreak) {
262
+ return true
263
+ }
264
+ const dayData = groupData[key]
265
+ return Object.keys(dayData).some(key1 => {
266
+ if (isBreak) {
267
+ return true
268
+ }
269
+ const millisecondsData = dayData[key1] || []
270
+ return millisecondsData.some(item => {
271
+ if (isBreak) {
272
+ return true
273
+ }
274
+ if (fn({
275
+ groupId: groupKey,
276
+ message: item,
277
+ isBreak: () => {
278
+ isBreak = true
279
+ }
280
+ }) !== false) {
281
+ result.push(item)
282
+ }
283
+ })
284
+ })
285
+ })
286
+ })
287
+ return result
288
+ }
289
+
290
+ getMessage (id) {
291
+ return this.messageMap[id]
292
+ }
293
+
294
+ clearMessage () {
295
+ Object.keys(this.messageMap).forEach(key => {
296
+ this.removeMessage(key)
297
+ })
298
+ }
299
+
300
+ sendMessage (data) {
301
+ const id = unique() + ''
302
+ const sendData = Object.assign({
303
+ content: null,
304
+ msgType: null,
305
+ msgSubType: 0,
306
+ wechatAccountId: null,
307
+ wechatFriendId: null,
308
+ wechatChatroomId: null
309
+ }, data, {
310
+ seq: id,
311
+ cmdType: 'CmdSendMessage'
312
+ })
313
+ const newMessage = Object.assign({
314
+ id,
315
+ content: null,
316
+ msgType: null,
317
+ msgSubType: 0,
318
+ wechatTime: Date.now(),
319
+ isSend: true,
320
+ sendStatus: 1,
321
+ wechatAccountId: null,
322
+ wechatFriendId: null,
323
+ wechatChatroomId: null,
324
+ _temp: true // 临时占位消息标识符
325
+ }, data)
326
+ // 如果是文本消息,需要转义一下,保持和后端一样的逻辑
327
+ if (newMessage.msgType === 1) {
328
+ // 先decode是因为复制的场景有可能时候转义之后的,在encode是为了和后端保持一致,空格能正确展示
329
+ newMessage.content = encodeHtmlEntities(newMessage.content)
330
+ }
331
+ return this.clientChat.socket.sendMessage(sendData, () => {
332
+ // 先插入临时消息,减少loading,让用户更快的输入发送消息
333
+ this.addMessage(newMessage)
334
+ }).then(({ data }) => {
335
+ if (data.sendStatus === 0) {
336
+ // 发送成功
337
+ } else if (data.sendStatus === 2) {
338
+ // 发送失败
339
+ } else if (data.sendStatus === 1) {
340
+ // 发送中
341
+ }
342
+ // 如果返回的是对象,证明发送成功了,如果返回的不是对象,是报错字符串,交给外面处理错误
343
+ if (data && typeof data === 'object') {
344
+ this.removeMessage(newMessage.id)
345
+ this.addMessage(data)
346
+ } else if (typeof data === 'string') {
347
+ this.updateMessage(newMessage.id, {
348
+ sendStatus: 2,
349
+ resultMsg: data || '发送失败'
350
+ })
351
+ }
352
+ return data
353
+ }, err => {
354
+ let errMsg = '发送失败'
355
+ if (err && err.message) {
356
+ errMsg = err.message
357
+ } else if (err && err.errMsg) {
358
+ errMsg = err.errMsg
359
+ }
360
+ this.updateMessage(newMessage.id, {
361
+ sendStatus: 2,
362
+ resultMsg: errMsg
363
+ })
364
+ return Promise.reject(err)
365
+ })
366
+ }
367
+
368
+ forwardMessage (data) {
369
+ const id = unique() + ''
370
+ const sendData = Object.assign({
371
+ messageId: null,
372
+ messageTime: null,
373
+ isFriendMessage: false,
374
+ wechatAccountId: null,
375
+ wechatFriendId: null,
376
+ wechatChatroomId: null
377
+ }, data, {
378
+ seq: id,
379
+ cmdType: 'CmdForwardMessage'
380
+ })
381
+ return this.clientChat.socket.sendMessage(sendData).then(({ data }) => {
382
+ if (data.sendStatus === 0) {
383
+ // 发送成功
384
+ } else if (data.sendStatus === 2) {
385
+ // 发送失败
386
+ } else if (data.sendStatus === 1) {
387
+ // 发送中
388
+ }
389
+ // 如果返回的是对象,证明发送成功了,如果返回的不是对象,是报错字符串,交给外面处理错误
390
+ if (data && typeof data === 'object') {
391
+ this.addMessage(data)
392
+ } else if (typeof data === 'string') {
393
+ return Promise.reject(data)
394
+ }
395
+ return data
396
+ }, err => {
397
+ return Promise.reject(err)
398
+ })
399
+ }
400
+
401
+ reloadMessageData (params) {
402
+ this.clearMessage()
403
+ return this.loadMessageData(params)
404
+ }
405
+
406
+ /***
407
+ * 远程加载消息
408
+ * {
409
+ * ....
410
+ * upward: true,
411
+ * bigWechatTime: 1738894978000,
412
+ * smallWechatTime: 1738894978000
413
+ * }
414
+ */
415
+ loadMessageData (params) {
416
+ if (!params) {
417
+ throw new Error('缺少必须参数')
418
+ }
419
+ if (!params[this.groupField]) {
420
+ throw new Error('缺少必须参数' + this.groupField)
421
+ }
422
+ if (typeof params.upward === 'undefined') {
423
+ throw new Error('缺少必须参数upward')
424
+ }
425
+ if (typeof params.bigWechatTime === 'undefined') {
426
+ throw new Error('缺少必须参数bigWechatTime')
427
+ }
428
+ if (typeof params.smallWechatTime === 'undefined') {
429
+ throw new Error('缺少必须参数smallWechatTime')
430
+ }
431
+ return this.queryMethod(params).then(rs => {
432
+ // 做个去重
433
+ if (rs && rs.data && rs.data.length) {
434
+ rs.data = rs.data.filter(v => !this.messageMap[v.id])
435
+ }
436
+ if (rs.data) {
437
+ if (rs.data.length) {
438
+ rs.data.forEach(item => {
439
+ this.addMessage(item, false)
440
+ })
441
+ } else {
442
+ if (params.upward === false) {
443
+ if (params.smallWechatTime && params.bigWechatTime) {
444
+ const now = Date.now()
445
+ if (params.smallWechatTime < Date.now()) {
446
+ this.addMessage({
447
+ id: unique(),
448
+ msgType: '_EMPTY_',
449
+ wechatTime: now,
450
+ createTime: now,
451
+ [this.groupField]: params[this.groupField],
452
+ content: `${formatDate(params.smallWechatTime)}至${formatDate(now)}没有聊天消息`
453
+ }, false)
454
+ }
455
+ }
456
+ } else {
457
+ if (params.smallWechatTime && params.bigWechatTime) {
458
+ this.addMessage({
459
+ id: unique(),
460
+ msgType: '_EMPTY_',
461
+ wechatTime: params.smallWechatTime,
462
+ createTime: params.smallWechatTime,
463
+ [this.groupField]: params[this.groupField],
464
+ content: `${formatDate(params.smallWechatTime)}至${formatDate(params.bigWechatTime)}没有聊天消息`
465
+ }, false)
466
+ }
467
+ }
468
+ }
469
+ }
470
+ return rs.data
471
+ })
472
+ }
473
+
474
+ addCheckMessageSendResultTask (message) {
475
+ if (!message || !message.id) {
476
+ return
477
+ }
478
+ if (this.checkMessageSendResultTaskList.some(v => v.id === message.id)) {
479
+ return
480
+ }
481
+ let timer = null
482
+ const task = {
483
+ id: message.id,
484
+ promise: createPromise(),
485
+ check: () => {
486
+ if (!message.isSend || message.sendStatus !== 1) {
487
+ task.promise.resolve()
488
+ return
489
+ }
490
+ const createTime = message.createTime || message.createDate // 3.0是createDate,1.0好像是createTime
491
+ if (Date.now() - createTime > 5 * 60 * 1000) { // 5分钟认为超时
492
+ task.promise.resolve({
493
+ sendStatus: 3, // 3是超时
494
+ resultMsg: '消息发送超时'
495
+ })
496
+ return
497
+ }
498
+ clearTimeout(timer)
499
+ timer = setTimeout(() => {
500
+ if (!message.isSend || message.sendStatus !== 1) {
501
+ task.promise.resolve()
502
+ return
503
+ }
504
+ const rs = this.checkMessageSendResultMethod({
505
+ message
506
+ })
507
+ if (rs && rs.then) {
508
+ rs.then((rs) => {
509
+ if (rs.data.sendStatus === 1) {
510
+ task.check()
511
+ } else {
512
+ task.promise.resolve({
513
+ sendStatus: rs.data.sendStatus,
514
+ resultMsg: rs.data.resultMsg
515
+ })
516
+ }
517
+ }, () => {
518
+ // 因为后端写入是异步的,中间有个等待过程,这种情况调用后端接口会返回500状态,需要再轮询
519
+ task.check()
520
+ })
521
+ }
522
+ }, 3000)
523
+ },
524
+ cancel: () => {
525
+ clearTimeout(timer)
526
+ task.promise.reject('reject')
527
+ }
528
+ }
529
+ this.checkMessageSendResultTaskList.push(task)
530
+ task.check()
531
+ task.promise.then(rs => {
532
+ this.updateMessage(message.id, rs || {})
533
+ }).finally(() => {
534
+ this.removeCheckMessageSendResultTask(message.id)
535
+ })
536
+ }
537
+
538
+ removeCheckMessageSendResultTask (id) {
539
+ let index = -1
540
+ let task = null
541
+ this.checkMessageSendResultTaskList.some((v, i) => {
542
+ if (v.id === id) {
543
+ index = i
544
+ task = v
545
+ return true
546
+ }
547
+ })
548
+ if (!task || index < 0) {
549
+ return
550
+ }
551
+ task.cancel()
552
+ this.checkMessageSendResultTaskList.splice(index, 1)
553
+ }
554
+
555
+ reset () {
556
+ this.checkMessageSendResultTaskList.forEach(task => {
557
+ task.cancel()
558
+ })
559
+ this.tempMessageMap = {}
560
+ this.data.messageData = {}
561
+ }
562
+
563
+ loadLossMessageData () {
564
+ if (!this.loadLossMessageDataMethod) {
565
+ throw new Error('[ClientChatWechat]缺少loadLossMessageDataMethod方法定义')
566
+ }
567
+ this.loadLossMessageDataMethod({
568
+ lastReceiveMessageTime: this.data.lastReceiveMessageTime
569
+ }).then((rs) => {
570
+ // 做个去重
571
+ if (rs && rs.data && rs.data.length) {
572
+ rs.data = rs.data.filter(v => !this.messageMap[v.id])
573
+ }
574
+ if (rs.data.length) {
575
+ rs.data.forEach(item => {
576
+ this.addMessage(item)
577
+ })
578
+ }
579
+ })
580
+ }
581
+
582
+ /**
583
+ * 最后接收的一条好友消息时间
584
+ */
585
+ setLastReceiveMessageTime (messageTime) {
586
+ this.data.lastReceiveMessageTime = messageTime
587
+ }
588
+ }