@aochuang/client-sdk 1.0.363 → 1.0.365

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 (168) hide show
  1. package/components/index.js +1 -6
  2. package/components/layout/layout.vue +4 -1
  3. package/components/session-select/session-select-item.vue +9 -8
  4. package/components/wechat-chat-control/image/image.vue +8 -13
  5. package/components/wechat-chat-control/url/url-miniprogram.vue +5 -1
  6. package/components/wework-chat-control/channel-live/channel-live.vue +2 -7
  7. package/components/wework-chat-control/company-card/company-card.vue +1 -1
  8. package/components/wework-chat-control/custom-expression/custom-expression.vue +1 -2
  9. package/components/wework-chat-control/file-url/file-url.vue +16 -34
  10. package/components/wework-chat-control/image/image.vue +2 -137
  11. package/components/wework-chat-control/index.js +7 -15
  12. package/components/wework-chat-control/location/location.vue +3 -3
  13. package/components/wework-chat-control/red-envelopes/red-envelopes.vue +2 -3
  14. package/components/wework-chat-control/text/text.vue +144 -24
  15. package/components/wework-chat-control/url/url-miniprogram.vue +7 -6
  16. package/components/wework-chat-control/url/url.vue +2 -26
  17. package/components/wework-chat-control/util.js +17 -26
  18. package/components/wework-chat-control/video/video.vue +2 -10
  19. package/components/wework-chat-control/voice/voice.vue +2 -9
  20. package/components/wework-chat-panel/chat-panel-controls/company-card/company-card.vue +35 -0
  21. package/components/wework-chat-panel/chat-panel-controls/expression/expression.vue +36 -0
  22. package/components/wework-chat-panel/chat-panel-controls/file-url/file-url.vue +35 -0
  23. package/components/wework-chat-panel/chat-panel-controls/image/image.vue +36 -0
  24. package/components/wework-chat-panel/chat-panel-controls/index.js +35 -0
  25. package/components/wework-chat-panel/chat-panel-controls/jx-sys-text/jx-sys-text.vue +28 -0
  26. package/components/wework-chat-panel/chat-panel-controls/link/link.vue +35 -0
  27. package/components/wework-chat-panel/chat-panel-controls/location/location.vue +35 -0
  28. package/components/wework-chat-panel/chat-panel-controls/text/text.vue +43 -0
  29. package/components/wework-chat-panel/chat-panel-controls/unkonw/unkonw.vue +39 -0
  30. package/components/wework-chat-panel/chat-panel-controls/video/video.vue +37 -0
  31. package/components/wework-chat-panel/chat-panel-controls/voice/voice.vue +35 -0
  32. package/components/wework-chat-panel/chat-panel-item.vue +25 -56
  33. package/components/wework-chat-panel/chat-panel.vue +13 -96
  34. package/package.json +3 -10
  35. package/services/client-chat/client-chat-wechat/client-chat-session.js +290 -79
  36. package/services/client-chat/client-chat-wechat/client-chat.js +69 -99
  37. package/services/client-chat/client-chat-wework/client-chat-account.js +1 -84
  38. package/services/client-chat/client-chat-wework/client-chat-concats.js +17 -81
  39. package/services/client-chat/client-chat-wework/client-chat-message.js +5 -45
  40. package/services/client-chat/client-chat-wework/client-chat-session.js +4 -59
  41. package/services/client-chat/client-chat-wework/client-chat-socket.js +1 -13
  42. package/services/client-chat/client-chat-wework/client-chat.js +11 -320
  43. package/services/client-chat/client-chat-wework/utils.js +5 -5
  44. package/uni-common/account-portray/account-portray.vue +51 -0
  45. package/uni-common/account-select/account-select-item.vue +172 -0
  46. package/uni-common/account-select/account-select.vue +252 -0
  47. package/uni-common/all-friend-avatar/all-friend-avatar.vue +49 -0
  48. package/uni-common/friend-avatar/default.svg +1 -0
  49. package/uni-common/friend-avatar/friend-avatar.vue +27 -0
  50. package/uni-common/friend-avatar/index.js +3 -0
  51. package/uni-common/friend-loader/friend-loader.vue +53 -0
  52. package/uni-common/friend-portray/friend-portray.vue +56 -0
  53. package/uni-common/group-avatar/default.svg +1 -0
  54. package/uni-common/group-avatar/group-avatar.vue +18 -0
  55. package/uni-common/group-avatar/index.js +3 -0
  56. package/uni-common/room-avatar/default.svg +6 -0
  57. package/uni-common/room-avatar/index.js +3 -0
  58. package/uni-common/room-avatar/room-avatar.vue +27 -0
  59. package/uni-common/room-loader/room-loader.vue +53 -0
  60. package/uni-common/room-portray/room-portray.vue +56 -0
  61. package/uni-components/chat-control/calling/calling.vue +91 -0
  62. package/uni-components/chat-control/calling/phone-fill.svg +1 -0
  63. package/uni-components/chat-control/calling/vidicon-fill.svg +1 -0
  64. package/uni-components/chat-control/channel-video/channel-video.vue +89 -0
  65. package/uni-components/chat-control/channel-video-card/channel-video-card.vue +105 -0
  66. package/uni-components/chat-control/channel-video-live/channel-video-live.vue +92 -0
  67. package/uni-components/chat-control/chat-control-config-item/chat-control-config-item.vue +20 -0
  68. package/uni-components/chat-control/chat-control-config-item/index.js +3 -0
  69. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-app.vue +25 -0
  70. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-h5.vue +21 -0
  71. package/{components/wework-chat-control/wework-chat-control-config.vue → uni-components/chat-control/chat-control-config.vue} +13 -16
  72. package/uni-components/chat-control/chat-control.vue +218 -0
  73. package/uni-components/chat-control/company-card/company-card.vue +123 -0
  74. package/uni-components/chat-control/const.js +28 -0
  75. package/uni-components/chat-control/expression/expression.vue +41 -0
  76. package/uni-components/chat-control/image/image.vue +68 -0
  77. package/uni-components/chat-control/index.js +89 -0
  78. package/uni-components/chat-control/location/location.vue +110 -0
  79. package/uni-components/chat-control/member-change/member-change.vue +32 -0
  80. package/uni-components/chat-control/quote-message/quote-message.vue +216 -0
  81. package/uni-components/chat-control/real-time-position/real-time-position.vue +62 -0
  82. package/uni-components/chat-control/redpacket/red-envelope.svg +1 -0
  83. package/uni-components/chat-control/redpacket/redpacket.vue +75 -0
  84. package/uni-components/chat-control/share-card/share-card.vue +101 -0
  85. package/uni-components/chat-control/system/system.vue +69 -0
  86. package/uni-components/chat-control/system-batch-message/system-batch-message.vue +30 -0
  87. package/uni-components/chat-control/system-text/system-text.vue +32 -0
  88. package/uni-components/chat-control/text/text.vue +67 -0
  89. package/uni-components/chat-control/text-with-at/text-with-at.vue +51 -0
  90. package/uni-components/chat-control/transfer/red-transfer.svg +1 -0
  91. package/uni-components/chat-control/transfer/transfer.vue +80 -0
  92. package/uni-components/chat-control/unkonw/unkonw.vue +37 -0
  93. package/uni-components/chat-control/url/icons/file-excel-line.svg +1 -0
  94. package/uni-components/chat-control/url/icons/file-info-line.svg +1 -0
  95. package/uni-components/chat-control/url/icons/file-music-line.svg +1 -0
  96. package/uni-components/chat-control/url/icons/file-pdf-line.svg +1 -0
  97. package/uni-components/chat-control/url/icons/file-ppt-line.svg +1 -0
  98. package/uni-components/chat-control/url/icons/file-settings-line.svg +1 -0
  99. package/uni-components/chat-control/url/icons/file-text-line.svg +1 -0
  100. package/uni-components/chat-control/url/icons/file-unknow-line.svg +1 -0
  101. package/uni-components/chat-control/url/icons/file-word-line.svg +1 -0
  102. package/uni-components/chat-control/url/icons/file-zip-line.svg +1 -0
  103. package/uni-components/chat-control/url/icons/index.js +24 -0
  104. package/uni-components/chat-control/url/miniprogram.svg +1 -0
  105. package/uni-components/chat-control/url/url-miniprogram.vue +116 -0
  106. package/uni-components/chat-control/url/url.vue +306 -0
  107. package/uni-components/chat-control/url-new/icons/file-excel-line.svg +1 -0
  108. package/uni-components/chat-control/url-new/icons/file-info-line.svg +1 -0
  109. package/uni-components/chat-control/url-new/icons/file-music-line.svg +1 -0
  110. package/uni-components/chat-control/url-new/icons/file-pdf-line.svg +1 -0
  111. package/uni-components/chat-control/url-new/icons/file-ppt-line.svg +1 -0
  112. package/uni-components/chat-control/url-new/icons/file-settings-line.svg +1 -0
  113. package/uni-components/chat-control/url-new/icons/file-text-line.svg +1 -0
  114. package/uni-components/chat-control/url-new/icons/file-unknow-line.svg +1 -0
  115. package/uni-components/chat-control/url-new/icons/file-word-line.svg +1 -0
  116. package/uni-components/chat-control/url-new/icons/file-zip-line.svg +1 -0
  117. package/uni-components/chat-control/url-new/icons/index.js +24 -0
  118. package/uni-components/chat-control/url-new/url-new.vue +110 -0
  119. package/uni-components/chat-control/utils.js +12 -0
  120. package/uni-components/chat-control/video/video.vue +156 -0
  121. package/uni-components/chat-control/voice/voice.vue +166 -0
  122. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-collect.vue +84 -0
  123. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-system.vue +28 -0
  124. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet.vue +85 -0
  125. package/uni-components/chat-editor/chat-editor-func/chat-editor-func.vue +157 -0
  126. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at-panel.vue +158 -0
  127. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at.vue +61 -0
  128. package/uni-components/chat-editor/chat-editor-func-button/chat-editor-func-button.vue +58 -0
  129. package/uni-components/chat-editor/chat-editor-func-file/chat-editor-func-file.vue +54 -0
  130. package/uni-components/chat-editor/chat-editor-func-image/chat-editor-func-image.vue +42 -0
  131. package/uni-components/chat-editor/chat-editor-func-video/chat-editor-func-video.vue +42 -0
  132. package/uni-components/chat-editor/chat-editor-func-voice/chat-editor-func-voice.vue +25 -0
  133. package/uni-components/chat-editor/chat-editor-message-send/chat-editor-message-send.vue +158 -0
  134. package/uni-components/chat-editor/chat-editor-quote/chat-editor-quote.vue +75 -0
  135. package/uni-components/chat-editor/chat-editor.vue +257 -0
  136. package/uni-components/chat-editor/index.js +10 -0
  137. package/uni-components/chat-editor/util.js +65 -0
  138. package/uni-components/chat-panel/chat-panel-chats-box.vue +238 -0
  139. package/uni-components/chat-panel/chat-panel-chats-forward/chat-panel-chats-forward.vue +273 -0
  140. package/uni-components/chat-panel/chat-panel-chats-item.vue +578 -0
  141. package/uni-components/chat-panel/chat-panel-chats-status/chat-panel-chats-status.vue +71 -0
  142. package/uni-components/chat-panel/chat-panel-chats.vue +368 -0
  143. package/uni-components/chat-panel/chat-panel.vue +227 -0
  144. package/uni-components/contacts-group-select/contacts-group-select-item.vue +85 -0
  145. package/uni-components/contacts-group-select/contacts-group-select-panel.vue +119 -0
  146. package/uni-components/contacts-group-select/contacts-group-select.vue +150 -0
  147. package/common/.DS_Store +0 -0
  148. package/components/.DS_Store +0 -0
  149. package/components/wechat-chat-control/.DS_Store +0 -0
  150. package/components/wechat-chat-control/transfer/.DS_Store +0 -0
  151. package/components/wechat-chat-control/url/.DS_Store +0 -0
  152. package/components/wechat-chat-control/voice/.DS_Store +0 -0
  153. package/components/wework-chat-control/channel-card/channel-card.vue +0 -144
  154. package/components/wework-chat-control/link/.DS_Store +0 -0
  155. package/components/wework-chat-control/merge-message/merge-message-panel.vue +0 -63
  156. package/components/wework-chat-control/merge-message/merge-message.vue +0 -84
  157. package/components/wework-chat-control/merge-message/util.js +0 -59
  158. package/components/wework-chat-control/metting/enterprise-wechat.png +0 -0
  159. package/components/wework-chat-control/metting/meeting-video.svg +0 -4
  160. package/components/wework-chat-control/metting/metting.vue +0 -181
  161. package/components/wework-chat-control/text/text-default.vue +0 -99
  162. package/components/wework-chat-control/text/text-quote.vue +0 -105
  163. package/components/wework-chat-control/url/url-channel-live.vue +0 -53
  164. package/components/wework-chat-control/video/.DS_Store +0 -0
  165. package/components/wework-chat-control/wework-chat-control-config-item.vue +0 -24
  166. package/components/wework-chat-control/wework-chat-control-config-msg.vue +0 -25
  167. package/components/wework-chat-panel/chat-panel-chat-status/chat-panel-chat-status.vue +0 -73
  168. package/services/.DS_Store +0 -0
@@ -115,7 +115,24 @@ class ClientChat {
115
115
  const mergeSessionCommonOptions = (options, instance) => {
116
116
  let updateSessioning = false
117
117
  let removeSessioning = false
118
- options.onAddSession = ({ session }) => {
118
+ options.onAddSession = ({ session, wechatAccountId }) => {
119
+ // 不是来源于分页的时候,没有wechatAccountId就是代表不是走的分页增加的会话,一般为获取新消息或则分配的会话
120
+ if (!wechatAccountId && instance === this.session) {
121
+ // 更新账号未读消息数量
122
+ this.account.updateAccountUnreadMessageNum(session.wechatAccountId, ({ unreadMesasgeNum, unreadMessageMuteNum }) => {
123
+ if (session.mute) {
124
+ return {
125
+ num: (unreadMesasgeNum || 0) + (session.unreadMsgCount || 0),
126
+ muteNum: (unreadMessageMuteNum || 0) + (session.unreadMsgCount || 0)
127
+ }
128
+ } else {
129
+ return {
130
+ num: (unreadMesasgeNum || 0) + (session.unreadMsgCount || 0),
131
+ muteNum: unreadMessageMuteNum
132
+ }
133
+ }
134
+ })
135
+ }
119
136
  // 同步未读会话
120
137
  if (instance !== this.sessionUnread && session.unreadMsgCount > 0) {
121
138
  const localSession = this.sessionUnread.findSession((localSession) => localSession.conversationId === session.conversationId)
@@ -278,9 +295,10 @@ class ClientChat {
278
295
  sortField: 'lastMsgTime',
279
296
  name: 'session',
280
297
  loadAssignTaskSessionDataMethod: options.loadAssignTaskSessionDataMethod,
281
- loadSessionDataMethod: options.loadSessionDataMethod,
298
+ loadSessionDataMethod: options.loadSessionDataMethod,
282
299
  updateSessionReadMethod: options.updateSessionReadMethod,
283
300
  getSessionMethod: options.getSessionMethod,
301
+ onGetSessionLog: data => this.socket && this.socket.addLog(data),
284
302
  stickyTopSessionMethod: options.stickyTopSessionMethod,
285
303
  muteNotificationSessionMethod: options.muteNotificationSessionMethod,
286
304
  getNextUnreadSessionMethod: options.getNextUnreadSessionMethod,
@@ -411,57 +429,33 @@ class ClientChat {
411
429
  }
412
430
  }
413
431
  })
414
- return this.session.getSession(sessionId, rs => {
415
- // https://vs.rpa.cn/zentao/bug-view-2411.html
416
- // 如果后端返回的未读数量是0,那么前端先自己兼容一下,因为后端更新会话是异步过程,有可能这里获取到的会话信息还是老的,并不是这个消息更新之后的信息,得看后端会不会异步改成同步
417
- if (rs && rs.data && !rs.data.unreadMsgCount) {
418
- rs.data.unreadMsgCount = data.isSend ? 0 : 1
419
- rs.data.lastMsgContent = data.content
420
- rs.data.lastMsgType = data.msgType
421
- rs.data.lastMsgTime = data.wechatTime
422
- rs.data.lastMsgId = data.id
423
- rs.data.lastUpdateTime = data.updateDate
424
- }
425
- return rs
426
- }, ({ session }) => {
427
- // 更新账号未读消息数量
428
- this.account.updateAccountUnreadMessageNum(session.wechatAccountId, ({ unreadMesasgeNum, unreadMessageMuteNum }) => {
429
- if (session.mute) {
430
- return {
431
- num: (unreadMesasgeNum || 0) + (session.unreadMsgCount || 0),
432
- muteNum: (unreadMessageMuteNum || 0) + (session.unreadMsgCount || 0)
432
+ return this.session.getSession(sessionId, (rs, context) => {
433
+ if (rs && rs.data) {
434
+ const isAfterServerMessage = data.wechatTime > context.baseLastMsgTime
435
+ const isNewerMessage = data.wechatTime > (rs.data.lastMsgTime || 0)
436
+ if (isNewerMessage) {
437
+ rs.data.lastMsgContent = data.content
438
+ rs.data.lastMsgType = data.msgType
439
+ rs.data.lastMsgTime = data.wechatTime
440
+ rs.data.lastMsgId = data.id
441
+ rs.data.lastUpdateTime = data.updateDate
442
+ }
443
+ if (!data.isSend && isAfterServerMessage) {
444
+ if (this.sessionManage.currentSession && this.sessionManage.currentSession.conversationId === sessionId && this.shouldMarkCurrentSessionRead(sessionId, data)) {
445
+ rs.data.unreadMsgCount = 0
446
+ } else {
447
+ rs.data.unreadMsgCount = (rs.data.unreadMsgCount || 0) + 1
448
+ context.unreadMessageIds.push(data.id)
433
449
  }
434
450
  } else {
435
- return {
436
- num: (unreadMesasgeNum || 0) + (session.unreadMsgCount || 0),
437
- muteNum: unreadMessageMuteNum
438
- }
439
- }
440
- })
441
- }, false).then((rs => {
442
- // 前面更新未读消息数量只是处理会话的时候,因为getSession是异步的,会导致addMessage多次执行到这里,不会倒下面更新会话的逻辑
443
- // 比如连续发了3条消息,然后getSession后端返回可能只会返回2条未读数,所以这里还需要补偿一下
444
- const session = rs.data || {}
445
- const isNewerMessage = data.wechatTime > (session.lastMsgTime || 0)
446
- if (!data.isSend && isNewerMessage) {
447
- if (!(this.sessionManage.currentSession && this.sessionManage.currentSession.conversationId === sessionId && this.shouldMarkCurrentSessionRead(sessionId, data))) {
448
- // 更新账号未读消息数量
449
- this.account.updateAccountUnreadMessageNum(session.wechatAccountId, ({ unreadMesasgeNum, unreadMessageMuteNum }) => {
450
- if (session.mute) {
451
- return {
452
- num: (unreadMesasgeNum || 0) + 1,
453
- muteNum: (unreadMessageMuteNum || 0) + 1
454
- }
455
- } else {
456
- return {
457
- num: (unreadMesasgeNum || 0) + 1,
458
- muteNum: unreadMessageMuteNum
459
- }
460
- }
461
- })
451
+ context.skippedMessageIds.push(data.id)
462
452
  }
463
453
  }
464
- }), (error) => {
454
+ return rs
455
+ }, {
456
+ messageId: data.id,
457
+ wechatTime: data.wechatTime
458
+ }).then(null, (error) => {
465
459
  this.socket.addLog({
466
460
  group: 'client-chat-message:onAddMessageSuccess',
467
461
  content: {
@@ -579,60 +573,36 @@ class ClientChat {
579
573
  }
580
574
  }
581
575
  })
582
- this.session.getSession(sessionId, (rs) => {
583
- // https://vs.rpa.cn/zentao/bug-view-2411.html
584
- // 如果后端返回的未读数量是0,那么前端先自己兼容一下,因为后端更新会话是异步过程,有可能这里获取到的会话信息还是老的,并不是这个消息更新之后的信息,得看后端会不会异步改成同步
585
- if (rs && rs.data && !rs.data.unreadMsgCount) {
586
- rs.data.unreadMsgCount = data.isSend ? 0 : 1
587
- rs.data.lastMsgContent = data.content
588
- rs.data.lastMsgType = data.msgType
589
- rs.data.lastMsgTime = data.wechatTime
590
- rs.data.lastMsgId = data.id
591
- rs.data.lastUpdateTime = data.updateDate
592
- }
593
- if (rs && rs.data && atMessage && !(this.sessionManage.currentSession && this.sessionManage.currentSession.conversationId === sessionId)) {
594
- rs.data.lastAtMsgContent = appendLastAtMsgContent(rs.data.lastAtMsgContent, atMessage)
595
- }
596
- return rs
597
- }, ({ session }) => {
598
- // 更新账号未读消息数量
599
- this.account.updateAccountUnreadMessageNum(session.wechatAccountId, ({ unreadMesasgeNum, unreadMessageMuteNum }) => {
600
- if (session.mute) {
601
- return {
602
- num: (unreadMesasgeNum || 0) + (session.unreadMsgCount || 0),
603
- muteNum: (unreadMessageMuteNum || 0) + (session.unreadMsgCount || 0)
604
- }
605
- } else {
606
- return {
607
- num: (unreadMesasgeNum || 0) + (session.unreadMsgCount || 0),
608
- muteNum: unreadMessageMuteNum
609
- }
576
+ return this.session.getSession(sessionId, (rs, context) => {
577
+ if (rs && rs.data) {
578
+ const isAfterServerMessage = data.wechatTime > context.baseLastMsgTime
579
+ const isNewerMessage = data.wechatTime > (rs.data.lastMsgTime || 0)
580
+ if (isNewerMessage) {
581
+ rs.data.lastMsgContent = data.content
582
+ rs.data.lastMsgType = data.msgType
583
+ rs.data.lastMsgTime = data.wechatTime
584
+ rs.data.lastMsgId = data.id
585
+ rs.data.lastUpdateTime = data.updateDate
610
586
  }
611
- })
612
- }, false).then(rs => {
613
- // 前面更新未读消息数量只是处理会话的时候,因为getSession是异步的,会导致addMessage多次执行到这里,不会倒下面更新会话的逻辑
614
- // 比如连续发了3条消息,然后getSession后端返回可能只会返回2条未读数,所以这里还需要补偿一下
615
- const session = rs.data || {}
616
- const isNewerMessage = data.wechatTime > (session.lastMsgTime || 0)
617
- if (!data.isSend && isNewerMessage) {
618
- if (!(this.sessionManage.currentSession && this.sessionManage.currentSession.conversationId === sessionId && this.shouldMarkCurrentSessionRead(sessionId, data))) {
619
- // 更新账号未读消息数量
620
- this.account.updateAccountUnreadMessageNum(session.wechatAccountId, ({ unreadMesasgeNum, unreadMessageMuteNum }) => {
621
- if (session.mute) {
622
- return {
623
- num: (unreadMesasgeNum || 0) + 1,
624
- muteNum: (unreadMessageMuteNum || 0) + 1
625
- }
626
- } else {
627
- return {
628
- num: (unreadMesasgeNum || 0) + 1,
629
- muteNum: unreadMessageMuteNum
630
- }
587
+ if (!data.isSend && isAfterServerMessage) {
588
+ if (this.sessionManage.currentSession && this.sessionManage.currentSession.conversationId === sessionId && this.shouldMarkCurrentSessionRead(sessionId, data)) {
589
+ rs.data.unreadMsgCount = 0
590
+ } else {
591
+ rs.data.unreadMsgCount = (rs.data.unreadMsgCount || 0) + 1
592
+ context.unreadMessageIds.push(data.id)
593
+ if (atMessage) {
594
+ rs.data.lastAtMsgContent = appendLastAtMsgContent(rs.data.lastAtMsgContent, atMessage)
631
595
  }
632
- })
596
+ }
597
+ } else {
598
+ context.skippedMessageIds.push(data.id)
633
599
  }
634
600
  }
635
- }, (error) => {
601
+ return rs
602
+ }, {
603
+ messageId: data.id,
604
+ wechatTime: data.wechatTime
605
+ }).then(null, (error) => {
636
606
  this.socket.addLog({
637
607
  group: 'client-chat-message:onAddMessageSuccess',
638
608
  content: {
@@ -5,20 +5,14 @@ export default class ClientChatAccount {
5
5
  data = Vue.observable({
6
6
  accountData: [],
7
7
  accountUnreadMessageNumData: [],
8
- accountGreetingUnreadMsgCountData: {},
9
8
  currentAccount: null
10
9
  })
11
10
 
12
11
  loadAccountDataMethod = null
13
12
 
14
13
  getAccountUnreadMessageNumMethod = null
15
-
16
- getAccountGreetingUnreadMsgCountMethod = null
17
14
 
18
15
  accountMap = {}
19
-
20
- // 好友请求数量请求合并,key为账号id列表
21
- greetingUnreadRequestMap = {}
22
16
 
23
17
  constructor (options) {
24
18
  options = Object.assign({
@@ -27,13 +21,11 @@ export default class ClientChatAccount {
27
21
  getAccountUnreadMessageNumMethod: null,
28
22
  updateAccountMessageReadMethod: null,
29
23
  deleteAccountSessionMethod: null,
30
- getAccountGreetingUnreadMsgCountMethod: null,
31
24
  onCurrentAccountChange: null,
32
25
  onAccountAdded: null,
33
26
  onAccountRemoved: null,
34
27
  onUnreadMessageNumChange: null,
35
- onDeleteAccountSession: null,
36
- onAccountLoaded: null
28
+ onDeleteAccountSession: null
37
29
  }, options)
38
30
  if (!options.loadAccountDataMethod) {
39
31
  throw new Error('缺少loadAccountDataMethod配置')
@@ -46,12 +38,10 @@ export default class ClientChatAccount {
46
38
  this.getAccountUnreadMessageNumMethod = options.getAccountUnreadMessageNumMethod
47
39
  this.updateAccountMessageReadMethod = options.updateAccountMessageReadMethod
48
40
  this.deleteAccountSessionMethod = options.deleteAccountSessionMethod
49
- this.getAccountGreetingUnreadMsgCountMethod = options.getAccountGreetingUnreadMsgCountMethod
50
41
  this.onAccountAdded = options.onAccountAdded
51
42
  this.onAccountRemoved = options.onAccountRemoved,
52
43
  this.onUnreadMessageNumChange = options.onUnreadMessageNumChange
53
44
  this.onDeleteAccountSession = options.onDeleteAccountSession
54
- this.onAccountLoaded = options.onAccountLoaded
55
45
  }
56
46
 
57
47
  get accountData () {
@@ -65,10 +55,6 @@ export default class ClientChatAccount {
65
55
  get currentAccount () {
66
56
  return this.data.currentAccount
67
57
  }
68
-
69
- get accountGreetingUnreadMsgCountData () {
70
- return this.data.accountGreetingUnreadMsgCountData
71
- }
72
58
 
73
59
  setCurrentAccount (accountId) {
74
60
  let account = null
@@ -296,9 +282,6 @@ export default class ClientChatAccount {
296
282
  this._cacheLoadPromise = this.loadAccountDataMethod()
297
283
  this._cacheLoadPromise.then(rs => {
298
284
  this.setAccountData(rs.data)
299
- this.onAccountLoaded && this.onAccountLoaded({
300
- data: rs.data
301
- })
302
285
  })
303
286
  this.cancelConnectRequest = () => {
304
287
  this._cacheLoadPromise.abort()
@@ -315,75 +298,9 @@ export default class ClientChatAccount {
315
298
  return this.loadData()
316
299
  }
317
300
 
318
- /**
319
- * 设置指定企微账号的待处理好友请求数量,并重算all
320
- */
321
- setAccountGreetingUnreadMsgCount (params) {
322
- if (!params || !params.qwAccountId) {
323
- throw new Error('缺少必须参数')
324
- }
325
- Vue.set(this.data.accountGreetingUnreadMsgCountData, params.qwAccountId, params.count || 0)
326
- this.updateAllAccountGreetingUnreadMsgCount()
327
- }
328
-
329
- updateAllAccountGreetingUnreadMsgCount () {
330
- const allCount = Object.keys(this.data.accountGreetingUnreadMsgCountData).reduce((rs, key) => {
331
- return key === 'all' ? rs : rs + (this.data.accountGreetingUnreadMsgCountData[key] || 0)
332
- }, 0)
333
- Vue.set(this.data.accountGreetingUnreadMsgCountData, 'all', allCount)
334
- }
335
-
336
- /**
337
- * 获取待处理好友请求数量
338
- * qwAccountIds不传则刷新所有账号;后端数量为0的账号不返回,所以先置0再覆盖
339
- */
340
- getAccountGreetingUnreadMsgCount (params) {
341
- if (!this.getAccountGreetingUnreadMsgCountMethod) {
342
- return Promise.reject(new Error('getAccountGreetingUnreadMsgCountMethod未定义'))
343
- }
344
- let qwAccountIds = (params || {}).qwAccountIds
345
- if (qwAccountIds && !Array.isArray(qwAccountIds)) {
346
- qwAccountIds = [qwAccountIds]
347
- }
348
- qwAccountIds = (qwAccountIds || []).filter((id, index, data) => id && data.indexOf(id) === index).map(String)
349
- const isAll = !qwAccountIds.length
350
- const requestKey = isAll ? 'all' : qwAccountIds.slice().sort().join(',')
351
- if (this.greetingUnreadRequestMap[requestKey]) {
352
- return this.greetingUnreadRequestMap[requestKey]
353
- }
354
- const request = this.getAccountGreetingUnreadMsgCountMethod({
355
- qwAccountIds: isAll ? undefined : qwAccountIds
356
- }).then(rs => {
357
- const targetIds = isAll ? Object.keys(this.accountMap) : qwAccountIds
358
- targetIds.forEach(id => {
359
- Vue.set(this.data.accountGreetingUnreadMsgCountData, id, 0)
360
- })
361
- ;((rs && rs.data) || []).forEach(item => {
362
- if (item && item.qwAccountId) {
363
- Vue.set(this.data.accountGreetingUnreadMsgCountData, String(item.qwAccountId), item.count || 0)
364
- }
365
- })
366
- this.updateAllAccountGreetingUnreadMsgCount()
367
- return this.data.accountGreetingUnreadMsgCountData
368
- }).finally(() => {
369
- delete this.greetingUnreadRequestMap[requestKey]
370
- })
371
- this.greetingUnreadRequestMap[requestKey] = request
372
- return request
373
- }
374
-
375
- /**
376
- * 刷新所有账号的待处理好友请求数量
377
- */
378
- refreshAllAccountGreetingUnreadMsgCount () {
379
- return this.getAccountGreetingUnreadMsgCount()
380
- }
381
-
382
301
  reset () {
383
302
  this.data.accountData = []
384
303
  this.data.accountUnreadMessageNumData = []
385
- this.data.accountGreetingUnreadMsgCountData = {}
386
- this.greetingUnreadRequestMap = {}
387
304
  if (this.cancelConnectRequest) {
388
305
  this.cancelConnectRequest()
389
306
  }
@@ -126,7 +126,11 @@ export default class ClientChatContacts {
126
126
  */
127
127
  roomBindMemberMap: {},
128
128
 
129
- modifiedAccountMap: {}
129
+ /**
130
+ * 标记通讯录是否修改了
131
+ * 如果修改了,比如接收到了分配好友的会话时,一定通讯录变了,变了的时候界面需要根据这个状态刷新通讯录
132
+ */
133
+ isModify: false
130
134
  })
131
135
 
132
136
  friendMap = {}
@@ -233,6 +237,10 @@ export default class ClientChatContacts {
233
237
  return this.data.roomGroupData
234
238
  }
235
239
 
240
+ get isModify () {
241
+ return this.data.isModify
242
+ }
243
+
236
244
  setRoomGroup (data) {
237
245
  this.data.roomGroupData = []
238
246
  if (data && data.length) {
@@ -483,10 +491,10 @@ export default class ClientChatContacts {
483
491
  }
484
492
  }
485
493
  const qwAccountId = this.roomMap[id].qwAccountId
486
- if (qwAccountId && this.data.accountBindRoomMap[qwAccountId] && this.data.accountBindRoomMap[qwAccountId][groupId]) {
487
- const bindIndex = this.data.accountBindRoomMap[qwAccountId][groupId].indexOf(this.roomMap[id])
494
+ if (qwAccountId && this.data.accountBindFriendMap[qwAccountId] && this.data.accountBindFriendMap[qwAccountId][groupId]) {
495
+ const bindIndex = this.data.accountBindFriendMap[qwAccountId][groupId].indexOf(this.roomMap[id])
488
496
  if (bindIndex >= 0) {
489
- this.data.accountBindRoomMap[qwAccountId][groupId].splice(bindIndex, 1)
497
+ this.data.accountBindFriendMap[qwAccountId][groupId].splice(bindIndex, 1)
490
498
  }
491
499
  }
492
500
  })
@@ -620,37 +628,6 @@ export default class ClientChatContacts {
620
628
  return rs
621
629
  })
622
630
  }
623
-
624
- /**
625
- * 强制从服务端刷新好友资料,绕过本地缓存。
626
- */
627
- refreshFriend (friendId) {
628
- if (!friendId) {
629
- return Promise.reject('缺少好友id')
630
- }
631
- if (!this.getContactsFriendMethod) {
632
- return Promise.reject(new Error('getContactsFriendMethod未定义'))
633
- }
634
- return this.getContactsFriendMethod({
635
- id: friendId
636
- }).then(rs => {
637
- if (!rs || !rs.data) {
638
- return Promise.reject('未找到好友' + friendId)
639
- }
640
- if (this.friendMap[friendId]) {
641
- const nextKeys = Object.keys(rs.data)
642
- Object.keys(this.friendMap[friendId]).forEach(key => {
643
- if (!nextKeys.includes(key)) {
644
- Vue.delete(this.friendMap[friendId], key)
645
- }
646
- })
647
- this.updateFriend(friendId, rs.data)
648
- } else {
649
- this.addFriend(rs.data)
650
- }
651
- return rs
652
- })
653
- }
654
631
 
655
632
  setRoomMemberData (roomId, data) {
656
633
  if (!roomId) {
@@ -761,52 +738,12 @@ export default class ClientChatContacts {
761
738
  })
762
739
  }
763
740
 
764
- refreshRoom (id) {
765
- if (!id) {
766
- return Promise.reject('缺少群id')
767
- }
768
- if (!this.getContactsRoomMethod) {
769
- return Promise.reject(new Error('getContactsRoomMethod未定义'))
770
- }
771
- return this.getContactsRoomMethod({
772
- id
773
- }).then(rs => {
774
- if (!rs || !rs.data) {
775
- return Promise.reject('未找到群' + id)
776
- }
777
- const localRoom = this.roomMap[id]
778
- if (localRoom) {
779
- this.removeRoom(id)
780
- const nextKeys = Object.keys(rs.data)
781
- Object.keys(localRoom).forEach(key => {
782
- if (!nextKeys.includes(key)) {
783
- Vue.delete(localRoom, key)
784
- }
785
- })
786
- Object.keys(rs.data).forEach(key => {
787
- Vue.set(localRoom, key, rs.data[key])
788
- })
789
- }
790
- this.addRoom(localRoom || rs.data)
791
- return rs
792
- })
793
- }
794
-
795
- isModify (qwAccountId) {
796
- return !!(qwAccountId && this.data.modifiedAccountMap[qwAccountId])
797
- }
798
-
799
- markModify (qwAccountIds) {
800
- const ids = Array.isArray(qwAccountIds) ? qwAccountIds : [qwAccountIds]
801
- ids.filter(Boolean).forEach(id => {
802
- Vue.set(this.data.modifiedAccountMap, id, true)
803
- })
741
+ markModify () {
742
+ this.data.isModify = true
804
743
  }
805
744
 
806
- unmarkModify (qwAccountId) {
807
- if (qwAccountId) {
808
- Vue.delete(this.data.modifiedAccountMap, qwAccountId)
809
- }
745
+ unmarkModify () {
746
+ this.data.isModify = false
810
747
  }
811
748
 
812
749
  reset () {
@@ -821,7 +758,6 @@ export default class ClientChatContacts {
821
758
  this.data.groupBindRoomMap = {}
822
759
  this.data.accountBindFriendMap = {}
823
760
  this.data.accountBindRoomMap = {}
824
- this.data.modifiedAccountMap = {}
825
761
  this._cacheFriendGroupCountMap = null
826
762
  this._cacheRoomGroupCountMap = null
827
763
  if (this.cancelConnectRequest) {
@@ -833,4 +769,4 @@ export default class ClientChatContacts {
833
769
  this.cancelRefreshRequest = null
834
770
  }
835
771
  }
836
- }
772
+ }
@@ -2,7 +2,6 @@ import Vue from 'vue'
2
2
  import Event from '../../../utils/event.js'
3
3
  import { unique } from '../../../utils/string.js'
4
4
  import { formatDate } from '../../../utils/date.js'
5
- import { createPromise } from '../../../utils/util'
6
5
 
7
6
  export default class ClientChatMessage {
8
7
 
@@ -23,8 +22,6 @@ export default class ClientChatMessage {
23
22
  })
24
23
 
25
24
  messageMap = {}
26
- tempMessageMap = {}
27
- checkMessageSendResultTaskList = []
28
25
 
29
26
  get messageData () {
30
27
  return this.data.messageData
@@ -36,18 +33,15 @@ export default class ClientChatMessage {
36
33
  queryMethod: null,
37
34
  sortField: null, // 排序的字段,必须是唯一的,例如时间
38
35
  groupField: null, // 分组的字段
39
- checkMessageSendResultMethod: null,
40
36
  onAddMessageSuccess: null // 新增消息成功回调事件
41
37
  }, options)
42
38
  if (!options.clientChat) {
43
39
  throw new Error('必须将clientChat传递过来')
44
40
  }
45
- if (!options.checkMessageSendResultMethod) throw new Error('缺少checkMessageSendResultMethod配置')
46
41
  this.queryMethod = options.queryMethod
47
42
  this.clientChat = options.clientChat
48
43
  this.groupField = options.groupField
49
44
  this.sortField = options.sortField
50
- this.checkMessageSendResultMethod = options.checkMessageSendResultMethod
51
45
  this.onAddMessageSuccess = options.onAddMessageSuccess
52
46
  this.event = new Event()
53
47
  }
@@ -80,7 +74,7 @@ export default class ClientChatMessage {
80
74
  * "msgSvrId": "4319123759514541049",
81
75
  * "msgType": 1,
82
76
  * "origin": "0",
83
- * "status": 0,
77
+ * "sendStatus": 0,
84
78
  * "tenantId": "1761952223049924608",
85
79
  * "wechatAccountId": "ad9d9ae2a8be4f27311312cdd4af3549dc8427ef",
86
80
  * "wechatFriendId": "2089efcc7f8f40b00b7f05fa4c6dfd3bb642774d",
@@ -95,10 +89,6 @@ export default class ClientChatMessage {
95
89
  if (this.messageMap[data.id]) {
96
90
  return
97
91
  }
98
- if (this.tempMessageMap[data.id]) {
99
- Object.assign(data, this.tempMessageMap[data.id])
100
- delete this.tempMessageMap[data.id]
101
- }
102
92
  const groupField = data[this.groupField]
103
93
  if (!this.data.messageData[groupField]) {
104
94
  Vue.set(this.data.messageData, groupField, {})
@@ -115,7 +105,6 @@ export default class ClientChatMessage {
115
105
  }
116
106
  this.data.messageData[groupField][sortFields.day][sortFields.milliseconds].push(data)
117
107
  this.messageMap[data.id] = data
118
- if (data.isSend && data.status === 1 && !data._temp) this.addCheckMessageSendResultTask(data)
119
108
  if (fireEvent !== false) {
120
109
  this.event && this.event.emit('add-message', {
121
110
  data
@@ -130,7 +119,6 @@ export default class ClientChatMessage {
130
119
  if (!id) {
131
120
  return
132
121
  }
133
- this.removeCheckMessageSendResultTask(id)
134
122
  const message = this.messageMap[id]
135
123
  if (!message) {
136
124
  return
@@ -166,7 +154,6 @@ export default class ClientChatMessage {
166
154
  updateMessage (id, props) {
167
155
  const message = this.getMessage(id)
168
156
  if (!message) {
169
- this.tempMessageMap[id] = props
170
157
  return
171
158
  }
172
159
  if (!props) {
@@ -228,11 +215,11 @@ export default class ClientChatMessage {
228
215
  }, data, {
229
216
  cmdType: 'CmdQwSendMessage'
230
217
  })).then(({ data }) => {
231
- if (data.status === 0) {
218
+ if (data.sendStatus === 0) {
232
219
  // 发送成功
233
- } else if (data.status === 2) {
220
+ } else if (data.sendStatus === 2) {
234
221
  // 发送失败
235
- } else if (data.status === 1) {
222
+ } else if (data.sendStatus === 1) {
236
223
  // 发送中
237
224
  }
238
225
  // 如果返回的是对象,证明发送成功了
@@ -286,35 +273,8 @@ export default class ClientChatMessage {
286
273
  this.clearMessage()
287
274
  return this.loadMessageData(params)
288
275
  }
289
-
290
- addCheckMessageSendResultTask (message) {
291
- if (this.checkMessageSendResultTaskList.some(v => v.id === message.id)) return
292
- let timer
293
- const task = { id: message.id, promise: createPromise(), check: () => {
294
- if (message.status !== 1) return task.promise.resolve()
295
- if (Date.now() - (message.createTime || message.sendTime) > 5 * 60 * 1000) return task.promise.resolve({status: 3, resultMsg: '消息发送超时'})
296
- timer = setTimeout(() => {
297
- Promise.resolve(this.checkMessageSendResultMethod({message})).then(rs => {
298
- const data = rs && rs.data
299
- if (data && data.status === 1) task.check()
300
- else task.promise.resolve(data || {})
301
- }, () => task.check())
302
- }, 3000)
303
- }, cancel: () => { clearTimeout(timer); task.promise.reject('reject') } }
304
- this.checkMessageSendResultTaskList.push(task)
305
- task.check()
306
- task.promise.then(rs => this.updateMessage(message.id, rs || {})).finally(() => this.removeCheckMessageSendResultTask(message.id))
307
- }
308
-
309
- removeCheckMessageSendResultTask (id) {
310
- const index = this.checkMessageSendResultTaskList.findIndex(v => v.id === id)
311
- if (index >= 0) { this.checkMessageSendResultTaskList[index].cancel(); this.checkMessageSendResultTaskList.splice(index, 1) }
312
- }
313
276
 
314
277
  reset () {
315
- this.checkMessageSendResultTaskList.forEach(task => task.cancel())
316
- this.checkMessageSendResultTaskList = []
317
- this.tempMessageMap = {}
318
278
  this.data.messageData = {}
319
279
  }
320
- }
280
+ }