@aochuang/client-sdk 1.0.344 → 1.0.345

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 (142) hide show
  1. package/components/index.js +1 -6
  2. package/components/session-select/session-select-item.vue +9 -8
  3. package/components/wechat-chat-control/calling/calling.vue +3 -0
  4. package/components/wechat-chat-control/voice/voice.vue +4 -0
  5. package/components/wework-chat-control/company-card/company-card.vue +1 -1
  6. package/components/wework-chat-control/file-url/file-url.vue +5 -2
  7. package/components/wework-chat-control/image/image.vue +2 -137
  8. package/components/wework-chat-control/index.js +6 -6
  9. package/components/wework-chat-control/text/text.vue +3 -22
  10. package/components/wework-chat-control/util.js +6 -12
  11. package/components/wework-chat-control/video/video.vue +2 -10
  12. package/components/wework-chat-control/voice/voice.vue +1 -1
  13. package/components/wework-chat-panel/chat-panel-controls/company-card/company-card.vue +35 -0
  14. package/components/wework-chat-panel/chat-panel-controls/expression/expression.vue +36 -0
  15. package/components/wework-chat-panel/chat-panel-controls/file-url/file-url.vue +35 -0
  16. package/components/wework-chat-panel/chat-panel-controls/image/image.vue +36 -0
  17. package/components/wework-chat-panel/chat-panel-controls/index.js +35 -0
  18. package/components/wework-chat-panel/chat-panel-controls/jx-sys-text/jx-sys-text.vue +28 -0
  19. package/components/wework-chat-panel/chat-panel-controls/link/link.vue +35 -0
  20. package/components/wework-chat-panel/chat-panel-controls/location/location.vue +35 -0
  21. package/components/wework-chat-panel/chat-panel-controls/text/text.vue +43 -0
  22. package/components/wework-chat-panel/chat-panel-controls/unkonw/unkonw.vue +39 -0
  23. package/components/wework-chat-panel/chat-panel-controls/video/video.vue +37 -0
  24. package/components/wework-chat-panel/chat-panel-controls/voice/voice.vue +35 -0
  25. package/components/wework-chat-panel/chat-panel-item.vue +35 -12
  26. package/components/wework-chat-panel/chat-panel.vue +12 -95
  27. package/package.json +3 -10
  28. package/services/client-chat/client-chat-wechat/client-chat-account.js +1 -1
  29. package/services/client-chat/client-chat-wechat/client-chat-session.js +106 -14
  30. package/services/client-chat/client-chat-wechat/client-chat.js +226 -50
  31. package/services/client-chat/client-chat-wework/client-chat-concats.js +17 -81
  32. package/services/client-chat/client-chat-wework/client-chat-message.js +5 -5
  33. package/services/client-chat/client-chat-wework/client-chat-session.js +2 -50
  34. package/services/client-chat/client-chat-wework/client-chat-socket.js +1 -9
  35. package/services/client-chat/client-chat-wework/client-chat.js +11 -278
  36. package/services/client-chat/client-chat-wework/utils.js +5 -5
  37. package/uni-common/account-portray/account-portray.vue +51 -0
  38. package/uni-common/account-select/account-select-item.vue +172 -0
  39. package/uni-common/account-select/account-select.vue +252 -0
  40. package/uni-common/all-friend-avatar/all-friend-avatar.vue +49 -0
  41. package/uni-common/friend-avatar/default.svg +1 -0
  42. package/uni-common/friend-avatar/friend-avatar.vue +27 -0
  43. package/uni-common/friend-avatar/index.js +3 -0
  44. package/uni-common/friend-loader/friend-loader.vue +53 -0
  45. package/uni-common/friend-portray/friend-portray.vue +56 -0
  46. package/uni-common/group-avatar/default.svg +1 -0
  47. package/uni-common/group-avatar/group-avatar.vue +18 -0
  48. package/uni-common/group-avatar/index.js +3 -0
  49. package/uni-common/room-avatar/default.svg +6 -0
  50. package/uni-common/room-avatar/index.js +3 -0
  51. package/uni-common/room-avatar/room-avatar.vue +27 -0
  52. package/uni-common/room-loader/room-loader.vue +53 -0
  53. package/uni-common/room-portray/room-portray.vue +56 -0
  54. package/uni-components/chat-control/calling/calling.vue +91 -0
  55. package/uni-components/chat-control/calling/phone-fill.svg +1 -0
  56. package/uni-components/chat-control/calling/vidicon-fill.svg +1 -0
  57. package/uni-components/chat-control/channel-video/channel-video.vue +89 -0
  58. package/uni-components/chat-control/channel-video-card/channel-video-card.vue +105 -0
  59. package/uni-components/chat-control/channel-video-live/channel-video-live.vue +92 -0
  60. package/uni-components/chat-control/chat-control-config-item/chat-control-config-item.vue +20 -0
  61. package/uni-components/chat-control/chat-control-config-item/index.js +3 -0
  62. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-app.vue +25 -0
  63. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-h5.vue +21 -0
  64. package/{components/wework-chat-control/wework-chat-control-config.vue → uni-components/chat-control/chat-control-config.vue} +13 -16
  65. package/uni-components/chat-control/chat-control.vue +218 -0
  66. package/uni-components/chat-control/company-card/company-card.vue +123 -0
  67. package/uni-components/chat-control/const.js +28 -0
  68. package/uni-components/chat-control/expression/expression.vue +41 -0
  69. package/uni-components/chat-control/image/image.vue +68 -0
  70. package/uni-components/chat-control/index.js +89 -0
  71. package/uni-components/chat-control/location/location.vue +110 -0
  72. package/uni-components/chat-control/member-change/member-change.vue +32 -0
  73. package/uni-components/chat-control/quote-message/quote-message.vue +216 -0
  74. package/uni-components/chat-control/real-time-position/real-time-position.vue +62 -0
  75. package/uni-components/chat-control/redpacket/red-envelope.svg +1 -0
  76. package/uni-components/chat-control/redpacket/redpacket.vue +75 -0
  77. package/uni-components/chat-control/share-card/share-card.vue +101 -0
  78. package/uni-components/chat-control/system/system.vue +69 -0
  79. package/uni-components/chat-control/system-batch-message/system-batch-message.vue +30 -0
  80. package/uni-components/chat-control/system-text/system-text.vue +32 -0
  81. package/uni-components/chat-control/text/text.vue +67 -0
  82. package/uni-components/chat-control/text-with-at/text-with-at.vue +51 -0
  83. package/uni-components/chat-control/transfer/red-transfer.svg +1 -0
  84. package/uni-components/chat-control/transfer/transfer.vue +80 -0
  85. package/uni-components/chat-control/unkonw/unkonw.vue +37 -0
  86. package/uni-components/chat-control/url/icons/file-excel-line.svg +1 -0
  87. package/uni-components/chat-control/url/icons/file-info-line.svg +1 -0
  88. package/uni-components/chat-control/url/icons/file-music-line.svg +1 -0
  89. package/uni-components/chat-control/url/icons/file-pdf-line.svg +1 -0
  90. package/uni-components/chat-control/url/icons/file-ppt-line.svg +1 -0
  91. package/uni-components/chat-control/url/icons/file-settings-line.svg +1 -0
  92. package/uni-components/chat-control/url/icons/file-text-line.svg +1 -0
  93. package/uni-components/chat-control/url/icons/file-unknow-line.svg +1 -0
  94. package/uni-components/chat-control/url/icons/file-word-line.svg +1 -0
  95. package/uni-components/chat-control/url/icons/file-zip-line.svg +1 -0
  96. package/uni-components/chat-control/url/icons/index.js +24 -0
  97. package/uni-components/chat-control/url/miniprogram.svg +1 -0
  98. package/uni-components/chat-control/url/url-miniprogram.vue +116 -0
  99. package/uni-components/chat-control/url/url.vue +306 -0
  100. package/uni-components/chat-control/url-new/icons/file-excel-line.svg +1 -0
  101. package/uni-components/chat-control/url-new/icons/file-info-line.svg +1 -0
  102. package/uni-components/chat-control/url-new/icons/file-music-line.svg +1 -0
  103. package/uni-components/chat-control/url-new/icons/file-pdf-line.svg +1 -0
  104. package/uni-components/chat-control/url-new/icons/file-ppt-line.svg +1 -0
  105. package/uni-components/chat-control/url-new/icons/file-settings-line.svg +1 -0
  106. package/uni-components/chat-control/url-new/icons/file-text-line.svg +1 -0
  107. package/uni-components/chat-control/url-new/icons/file-unknow-line.svg +1 -0
  108. package/uni-components/chat-control/url-new/icons/file-word-line.svg +1 -0
  109. package/uni-components/chat-control/url-new/icons/file-zip-line.svg +1 -0
  110. package/uni-components/chat-control/url-new/icons/index.js +24 -0
  111. package/uni-components/chat-control/url-new/url-new.vue +110 -0
  112. package/uni-components/chat-control/utils.js +12 -0
  113. package/uni-components/chat-control/video/video.vue +156 -0
  114. package/uni-components/chat-control/voice/voice.vue +166 -0
  115. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-collect.vue +84 -0
  116. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-system.vue +28 -0
  117. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet.vue +85 -0
  118. package/uni-components/chat-editor/chat-editor-func/chat-editor-func.vue +157 -0
  119. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at-panel.vue +158 -0
  120. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at.vue +61 -0
  121. package/uni-components/chat-editor/chat-editor-func-button/chat-editor-func-button.vue +58 -0
  122. package/uni-components/chat-editor/chat-editor-func-file/chat-editor-func-file.vue +54 -0
  123. package/uni-components/chat-editor/chat-editor-func-image/chat-editor-func-image.vue +42 -0
  124. package/uni-components/chat-editor/chat-editor-func-video/chat-editor-func-video.vue +42 -0
  125. package/uni-components/chat-editor/chat-editor-func-voice/chat-editor-func-voice.vue +25 -0
  126. package/uni-components/chat-editor/chat-editor-message-send/chat-editor-message-send.vue +158 -0
  127. package/uni-components/chat-editor/chat-editor-quote/chat-editor-quote.vue +75 -0
  128. package/uni-components/chat-editor/chat-editor.vue +257 -0
  129. package/uni-components/chat-editor/index.js +10 -0
  130. package/uni-components/chat-editor/util.js +65 -0
  131. package/uni-components/chat-panel/chat-panel-chats-box.vue +238 -0
  132. package/uni-components/chat-panel/chat-panel-chats-forward/chat-panel-chats-forward.vue +273 -0
  133. package/uni-components/chat-panel/chat-panel-chats-item.vue +578 -0
  134. package/uni-components/chat-panel/chat-panel-chats-status/chat-panel-chats-status.vue +71 -0
  135. package/uni-components/chat-panel/chat-panel-chats.vue +368 -0
  136. package/uni-components/chat-panel/chat-panel.vue +227 -0
  137. package/uni-components/contacts-group-select/contacts-group-select-item.vue +85 -0
  138. package/uni-components/contacts-group-select/contacts-group-select-panel.vue +119 -0
  139. package/uni-components/contacts-group-select/contacts-group-select.vue +150 -0
  140. package/components/wework-chat-control/wework-chat-control-config-item.vue +0 -24
  141. package/components/wework-chat-control/wework-chat-control-config-msg.vue +0 -25
  142. package/components/wework-chat-panel/chat-panel-chat-status/chat-panel-chat-status.vue +0 -73
@@ -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
+ }
@@ -74,7 +74,7 @@ export default class ClientChatMessage {
74
74
  * "msgSvrId": "4319123759514541049",
75
75
  * "msgType": 1,
76
76
  * "origin": "0",
77
- * "status": 0,
77
+ * "sendStatus": 0,
78
78
  * "tenantId": "1761952223049924608",
79
79
  * "wechatAccountId": "ad9d9ae2a8be4f27311312cdd4af3549dc8427ef",
80
80
  * "wechatFriendId": "2089efcc7f8f40b00b7f05fa4c6dfd3bb642774d",
@@ -215,11 +215,11 @@ export default class ClientChatMessage {
215
215
  }, data, {
216
216
  cmdType: 'CmdQwSendMessage'
217
217
  })).then(({ data }) => {
218
- if (data.status === 0) {
218
+ if (data.sendStatus === 0) {
219
219
  // 发送成功
220
- } else if (data.status === 2) {
220
+ } else if (data.sendStatus === 2) {
221
221
  // 发送失败
222
- } else if (data.status === 1) {
222
+ } else if (data.sendStatus === 1) {
223
223
  // 发送中
224
224
  }
225
225
  // 如果返回的是对象,证明发送成功了
@@ -277,4 +277,4 @@ export default class ClientChatMessage {
277
277
  reset () {
278
278
  this.data.messageData = {}
279
279
  }
280
- }
280
+ }
@@ -82,8 +82,7 @@ export default class ClientChatSession {
82
82
  /**
83
83
  * 删除会话
84
84
  */
85
- deleteSessionMethod: null,
86
- modifiedAccountMap: {}
85
+ deleteSessionMethod: null
87
86
  })
88
87
 
89
88
  accountIds = []
@@ -120,23 +119,6 @@ export default class ClientChatSession {
120
119
  return this.data.loading
121
120
  }
122
121
 
123
- isModify (qwAccountId) {
124
- return !!(qwAccountId && this.data.modifiedAccountMap[qwAccountId])
125
- }
126
-
127
- markModify (qwAccountIds) {
128
- const ids = Array.isArray(qwAccountIds) ? qwAccountIds : [qwAccountIds]
129
- ids.filter(Boolean).forEach(id => {
130
- Vue.set(this.data.modifiedAccountMap, id, true)
131
- })
132
- }
133
-
134
- unmarkModify (qwAccountId) {
135
- if (qwAccountId) {
136
- Vue.delete(this.data.modifiedAccountMap, qwAccountId)
137
- }
138
- }
139
-
140
122
  get loadAssignTaskSessioning () {
141
123
  return this.data.loadAssignTaskSessioning
142
124
  }
@@ -223,35 +205,6 @@ export default class ClientChatSession {
223
205
  getSessionByLocal (sessionId) {
224
206
  return this.sessionMap[sessionId]
225
207
  }
226
-
227
- /**
228
- * 强制从服务端刷新会话,绕过本地缓存。
229
- */
230
- refreshSession (sessionId) {
231
- if (!sessionId) {
232
- return Promise.reject('缺少会话id')
233
- }
234
- return this.getSessionMethod({
235
- id: sessionId
236
- }).then(rs => {
237
- if (!rs || !rs.data) {
238
- return Promise.reject('未找到会话' + sessionId)
239
- }
240
- // 事件计算出的 sessionId 是本地索引,始终保持与服务端返回对象一致。
241
- const serverSession = Object.assign({}, rs.data, {
242
- id: sessionId
243
- })
244
- const localSession = this.getSessionByLocal(sessionId)
245
- if (localSession) {
246
- this.updateSession(sessionId, serverSession)
247
- } else {
248
- this.addSession(serverSession)
249
- }
250
- return Object.assign({}, rs, {
251
- data: serverSession
252
- })
253
- })
254
- }
255
208
 
256
209
  findSession (findFn) {
257
210
  let result
@@ -962,7 +915,6 @@ export default class ClientChatSession {
962
915
  this.data.sessionData = {}
963
916
  this.data.sessionGroupData = {}
964
917
  this.data.sessionMuteMap = {}
965
- this.data.modifiedAccountMap = {}
966
918
  // this.data.sessionUnreadCountMap = {}
967
919
  this.sessionMap = {}
968
920
  if (this.cancelLoadDataRequest) {
@@ -974,4 +926,4 @@ export default class ClientChatSession {
974
926
  this.cancelRefreshRequest = null
975
927
  }
976
928
  }
977
- }
929
+ }
@@ -15,14 +15,11 @@ export default class ClietChatSocket {
15
15
  // 执行回调事件前的方法
16
16
  beforeFireCallback: null,
17
17
  onCmdQwNewMessage: null,
18
- onCmdQwContactInfoChanged: null,
19
- onCmdQwRoomInfoChanged: null,
20
18
  onCmdSendMessageResult: null,
21
19
  onCmdFriendInfoChanged: null,
22
20
  onCmdDownloadVideoResult: null,
23
21
  onCmdChatroomInfoChanged: null,
24
22
  onCmdChatroomInfoChangedBatch: null,
25
- onHeartbeatSuccess: null,
26
23
  onHeartbeatCheck: null
27
24
  }, options)
28
25
  if (!options.socket) {
@@ -30,11 +27,6 @@ export default class ClietChatSocket {
30
27
  }
31
28
  this.socket = options.socket
32
29
  this.socket.event.on('onCmdQwNewMessage', options.onCmdQwNewMessage)
33
- this.socket.event.on('onCmdQwContactInfoChanged', options.onCmdQwContactInfoChanged)
34
- this.socket.event.on('onCmdQwRoomInfoChanged', options.onCmdQwRoomInfoChanged)
35
- this.socket.event.on('onHeartbeatSuccess', (evt) => {
36
- options.onHeartbeatSuccess && options.onHeartbeatSuccess(evt)
37
- })
38
30
  this.socket.event.on('onHeartbeatCheck', ({ mergeParams }) => {
39
31
  options.onHeartbeatCheck && options.onHeartbeatCheck({
40
32
  mergeParams
@@ -70,4 +62,4 @@ export default class ClietChatSocket {
70
62
  setUrl (url) {
71
63
  this.socket.setUrl(url)
72
64
  }
73
- }
65
+ }
@@ -32,7 +32,6 @@ class ClientChat {
32
32
  getLoginUserIdMethod: null,
33
33
  getLoginUserTokenMethod: null,
34
34
  loadAccountDataMethod: null,
35
- getLoginAccountIdMethod: null, // 因为1.0有帮聊逻辑,帮聊消息以及通讯录的accountId不是登录用户的accountId,会导致找到的会话出现问题,所以这里提供一个方法让外部传入
36
35
  loadSessionDataMethod: null,
37
36
  updateSessionReadMethod: null,
38
37
  getSessionMethod: null,
@@ -58,9 +57,8 @@ class ClientChat {
58
57
  }
59
58
  if (!options.loadRoomMessageDataMethod) {
60
59
  throw new Error('loadRoomMessageDataMethod不能为空')
61
- }
60
+ }
62
61
  this.onOverwriteFriendInfoChange = options.onOverwriteFriendInfoChange
63
- this.getLoginAccountIdMethod = options.getLoginAccountIdMethod
64
62
  this.event = new Event({
65
63
  checkOnMethod: (name) => {
66
64
  if (name === 'ready') {
@@ -88,8 +86,7 @@ class ClientChat {
88
86
  sortField: 'sendTime',
89
87
  clientChat: this,
90
88
  onAddMessageSuccess: ({ data }) => {
91
- const accountId = this.getLoginAccountIdMethod ? this.getLoginAccountIdMethod() : data.qwAccountId
92
- let sessionId = createSessionId(accountId, data.contactId)
89
+ let sessionId = createSessionId(data.corpId, data.qwAccountId, data.contactId)
93
90
  // 更新会话
94
91
  if (!sessionId) {
95
92
  return
@@ -103,15 +100,6 @@ class ClientChat {
103
100
  return this.session.getSession(sessionId).then(done)
104
101
  })
105
102
  this._sessionPollRequestMap[sessionId].start().then((rs) => {
106
- // 后端更新会话是异步过程,返回的会话信息可能还未包含当前消息
107
- if (rs && rs.data && !rs.data.unreadMsgCount) {
108
- rs.data.unreadMsgCount = data.send ? 0 : 1
109
- rs.data.lastMsgContent = data.content
110
- rs.data.lastMsgType = data.msgType
111
- rs.data.lastMsgTime = data.sendTime
112
- rs.data.lastMsgId = data.id
113
- rs.data.lastUpdateTime = data.updateDate
114
- }
115
103
  // 更新账号未读消息数量
116
104
  this.account.updateAccountUnreadMessageNum(rs.data.qwAccountId, ({ unreadMesasgeNum }) => {
117
105
  return unreadMesasgeNum += (rs.data.unreadMsgCount || 0)
@@ -122,7 +110,7 @@ class ClientChat {
122
110
  } else {
123
111
  this.session.updateSession(sessionId, ({ session }) => {
124
112
  let unreadMsgCount = session.unreadMsgCount
125
- if (!data.send) {
113
+ if (!data.isSend) {
126
114
  unreadMsgCount = unreadMsgCount + 1
127
115
  }
128
116
  // 如果是当前会话,那么未读消息需要设置为0
@@ -167,8 +155,7 @@ class ClientChat {
167
155
  sortField: 'sendTime',
168
156
  clientChat: this,
169
157
  onAddMessageSuccess: ({ data }) => {
170
- const accountId = this.getLoginAccountIdMethod ? this.getLoginAccountIdMethod() : data.qwAccountId
171
- let sessionId = createSessionId(accountId, data.roomId)
158
+ let sessionId = createSessionId(data.corpId, data.qwAccountId, data.roomId)
172
159
  // 更新会话
173
160
  if (!sessionId) {
174
161
  return
@@ -183,15 +170,6 @@ class ClientChat {
183
170
  return this.session.getSession(sessionId).then(done)
184
171
  })
185
172
  this._sessionPollRequestMap[sessionId].start().then((rs) => {
186
- // 后端更新会话是异步过程,返回的会话信息可能还未包含当前消息
187
- if (rs && rs.data && !rs.data.unreadMsgCount) {
188
- rs.data.unreadMsgCount = data.send ? 0 : 1
189
- rs.data.lastMsgContent = data.content
190
- rs.data.lastMsgType = data.msgType
191
- rs.data.lastMsgTime = data.sendTime
192
- rs.data.lastMsgId = data.id
193
- rs.data.lastUpdateTime = data.updateDate
194
- }
195
173
  // 更新账号未读消息数量
196
174
  this.account.updateAccountUnreadMessageNum(rs.data.qwAccountId, ({ unreadMesasgeNum }) => {
197
175
  return unreadMesasgeNum += (rs.data.unreadMsgCount || 0)
@@ -202,7 +180,7 @@ class ClientChat {
202
180
  } else {
203
181
  this.session.updateSession(sessionId, ({ session }) => {
204
182
  let unreadMsgCount = session.unreadMsgCount
205
- if (!data.send) {
183
+ if (!data.isSend) {
206
184
  unreadMsgCount = unreadMsgCount + 1
207
185
  }
208
186
  // 如果是当前会话,那么未读消息需要设置为0
@@ -280,77 +258,6 @@ class ClientChat {
280
258
  })
281
259
  this.socket = new ClientChatSocket({
282
260
  socket: options.socket,
283
- onCmdQwContactInfoChanged: ({ data }) => {
284
- const contacts = data && (Array.isArray(data.contacts)
285
- ? data.contacts
286
- : (data.contactId ? [data] : []))
287
- if (!contacts || !contacts.length) {
288
- this.markAccountsModified(data && data.qwAccountIds)
289
- return
290
- }
291
- const tasks = []
292
- const removedTasks = []
293
- contacts.forEach(contact => {
294
- if (!contact) {
295
- return
296
- }
297
- const changeType = Number(contact.changeType)
298
- if (changeType === 1) {
299
- tasks.push(this.handleQwContactAdded(contact, data))
300
- } else if (changeType === 2) {
301
- tasks.push(this.handleQwContactUpdated(contact))
302
- } else if (changeType === 3) {
303
- removedTasks.push(this.handleQwContactRemoved(contact, data))
304
- }
305
- })
306
- return Promise.all(tasks.concat(removedTasks)).then(results => {
307
- const accountUnreadCountMap = {}
308
- removedTasks.forEach((task, index) => {
309
- const result = results[tasks.length + index]
310
- if (!result || !result.accountId || !result.unreadCount) {
311
- return
312
- }
313
- accountUnreadCountMap[result.accountId] = (accountUnreadCountMap[result.accountId] || 0) + result.unreadCount
314
- })
315
- return Promise.all(Object.keys(accountUnreadCountMap).map(accountId => {
316
- const removedUnreadCount = accountUnreadCountMap[accountId]
317
- return this.account.updateAccountUnreadMessageNum(accountId, ({ unreadMesasgeNum }) => {
318
- return Math.max(0, unreadMesasgeNum - removedUnreadCount)
319
- }).catch(error => {
320
- console.warn('[client-chat] update account unread count failed', error)
321
- })
322
- }))
323
- })
324
- },
325
- onCmdQwRoomInfoChanged: ({ data }) => {
326
- const rooms = data && (Array.isArray(data.rooms)
327
- ? data.rooms
328
- : (data.roomId ? [data] : []))
329
- if (!rooms || !rooms.length) {
330
- this.markAccountsModified(data && data.qwAccountIds)
331
- return
332
- }
333
- const tasks = []
334
- const removedTasks = []
335
- rooms.forEach(room => {
336
- if (!room) {
337
- return
338
- }
339
- const changeType = Number(room.changeType)
340
- if (changeType === 1) {
341
- tasks.push(this.handleQwRoomAdded(room, data))
342
- } else if (changeType === 2) {
343
- tasks.push(this.handleQwRoomUpdated(room))
344
- } else if (changeType === 3) {
345
- removedTasks.push(this.handleQwRoomRemoved(room, data))
346
- }
347
- })
348
- return Promise.all(tasks.concat(removedTasks)).then(results => {
349
- return this.updateRemovedSessionUnreadCounts(
350
- results.slice(tasks.length)
351
- )
352
- })
353
- },
354
261
  // 接受新消息
355
262
  onCmdQwNewMessage: ({ data }) => {
356
263
  // 插入消息
@@ -372,193 +279,19 @@ class ClientChat {
372
279
  })
373
280
  },
374
281
  onHeartbeatSuccess: ({ data }) => {
375
- const onlineMap = data || {}
282
+ if (!data.wq) {
283
+ return
284
+ }
285
+ const onlineMap = data.wq || {}
376
286
  Object.keys(onlineMap).forEach(k => {
377
287
  this.account.updateAccount(k, {
378
288
  alive: onlineMap[k]
379
- })
380
- })
381
- }
382
- })
383
- }
384
-
385
- getQwAccountCorpId (qwAccountId, corpId) {
386
- if (corpId || !qwAccountId || !this.account) {
387
- return corpId
388
- }
389
- const account = this.account.getAccountData().find(item => item.id === qwAccountId)
390
- return account && account.corpId
391
- }
392
-
393
- markAccountsModified (qwAccountIds) {
394
- if (!Array.isArray(qwAccountIds) || !qwAccountIds.length) {
395
- return
396
- }
397
- this.session.markModify(qwAccountIds)
398
- this.contacts.markModify(qwAccountIds)
399
- }
400
-
401
- updateRemovedSessionUnreadCounts (results) {
402
- const accountUnreadCountMap = {}
403
- ;(results || []).forEach(result => {
404
- if (!result || !result.accountId || !result.unreadCount) {
405
- return
406
- }
407
- accountUnreadCountMap[result.accountId] = (accountUnreadCountMap[result.accountId] || 0) + result.unreadCount
408
- })
409
- return Promise.all(Object.keys(accountUnreadCountMap).map(accountId => {
410
- const removedUnreadCount = accountUnreadCountMap[accountId]
411
- return this.account.updateAccountUnreadMessageNum(accountId, ({ unreadMesasgeNum }) => {
412
- return Math.max(0, unreadMesasgeNum - removedUnreadCount)
413
- }).catch(error => {
414
- console.warn('[client-chat] update account unread count failed', error)
415
- })
416
- }))
417
- }
418
-
419
- handleQwContactAdded (contact, eventData) {
420
- const qwAccountId = contact.qwAccountId || (eventData && eventData.qwAccountId)
421
- const corpId = this.getQwAccountCorpId(
422
- qwAccountId,
423
- contact.corpId || (eventData && eventData.corpId)
424
- )
425
- const contactId = contact.contactId
426
- const accountId = this.getLoginAccountIdMethod ? this.getLoginAccountIdMethod() : qwAccountId
427
- const sessionId = createSessionId(accountId, contactId)
428
- if (!sessionId) {
429
- return Promise.resolve()
430
- }
431
- const localSession = this.session.getSessionByLocal(sessionId)
432
- const oldUnread = localSession ? (localSession.unreadMsgCount || 0) : 0
433
- return this.session.refreshSession(sessionId).then(rs => {
434
- const serverSession = rs && rs.data
435
- const newUnread = serverSession ? (serverSession.unreadMsgCount || 0) : 0
436
- const accountId = (serverSession && serverSession.qwAccountId) || qwAccountId
437
- const unreadDiff = newUnread - oldUnread
438
- if (accountId && unreadDiff) {
439
- return this.account.updateAccountUnreadMessageNum(accountId, ({ unreadMesasgeNum }) => {
440
- return Math.max(0, unreadMesasgeNum + unreadDiff)
289
+ })
441
290
  })
442
291
  }
443
- }).catch(error => {
444
- console.warn('[client-chat] refresh added contact session failed', error)
445
- })
446
- }
447
-
448
- handleQwContactUpdated (contact) {
449
- if (!contact.contactId) {
450
- return Promise.resolve()
451
- }
452
- return this.contacts.refreshFriend(contact.contactId).catch(error => {
453
- console.warn('[client-chat] refresh contact failed', error)
454
- })
455
- }
456
-
457
- handleQwContactRemoved (contact, eventData) {
458
- if (!contact.contactId) {
459
- return Promise.resolve()
460
- }
461
- this.contacts.removeFriend(contact.contactId)
462
- let session = this.session.findSession(({ session }) => {
463
- return String(session.type) === '0' &&
464
- session.targetId === contact.contactId &&
465
- (!contact.qwAccountId || session.qwAccountId === contact.qwAccountId)
466
- })
467
- if (!session) {
468
- const qwAccountId = contact.qwAccountId || (eventData && eventData.qwAccountId)
469
- const accountId = this.getLoginAccountIdMethod ? this.getLoginAccountIdMethod() : qwAccountId
470
- const sessionId = createSessionId(
471
- accountId,
472
- contact.contactId
473
- )
474
- session = sessionId && this.session.getSessionByLocal(sessionId)
475
- }
476
- if (!session) {
477
- return Promise.resolve()
478
- }
479
- if (this.session.currentSession && this.session.currentSession.id === session.id) {
480
- this.session.setCurrentSession(null)
481
- }
482
- const accountId = session.qwAccountId || contact.qwAccountId
483
- const unreadCount = session.unreadMsgCount || 0
484
- this.session.removeSession(session.id)
485
- return Promise.resolve({
486
- accountId,
487
- unreadCount
488
292
  })
489
293
  }
490
294
 
491
- handleQwRoomAdded (room, eventData) {
492
- if (!room.roomId) {
493
- return Promise.resolve()
494
- }
495
- const qwAccountId = room.qwAccountId || (eventData && eventData.qwAccountId)
496
- const accountId = this.getLoginAccountIdMethod ? this.getLoginAccountIdMethod() : qwAccountId
497
- const sessionId = createSessionId(accountId, room.roomId)
498
- const localSession = sessionId && this.session.getSessionByLocal(sessionId)
499
- const oldUnread = localSession ? (localSession.unreadMsgCount || 0) : 0
500
- const tasks = [this.contacts.refreshRoom(room.roomId).catch(error => {
501
- console.warn('[client-chat] refresh added room failed', error)
502
- })]
503
- if (sessionId) {
504
- tasks.push(this.session.refreshSession(sessionId).then(rs => {
505
- const serverSession = rs && rs.data
506
- const unreadDiff = (serverSession ? (serverSession.unreadMsgCount || 0) : 0) - oldUnread
507
- const changedAccountId = (serverSession && serverSession.qwAccountId) || qwAccountId
508
- if (changedAccountId && unreadDiff) {
509
- return this.account.updateAccountUnreadMessageNum(changedAccountId, ({ unreadMesasgeNum }) => {
510
- return Math.max(0, unreadMesasgeNum + unreadDiff)
511
- })
512
- }
513
- }).catch(error => {
514
- console.warn('[client-chat] refresh added room session failed', error)
515
- }))
516
- }
517
- return Promise.all(tasks)
518
- }
519
-
520
- handleQwRoomUpdated (room) {
521
- if (!room.roomId) {
522
- return Promise.resolve()
523
- }
524
- return this.contacts.refreshRoom(room.roomId).catch(error => {
525
- console.warn('[client-chat] refresh room failed', error)
526
- })
527
- }
528
-
529
- handleQwRoomRemoved (room, eventData) {
530
- if (!room.roomId) {
531
- return Promise.resolve()
532
- }
533
- this.contacts.removeRoom(room.roomId)
534
- this.event.emit('roomRemoved', {
535
- roomId: room.roomId
536
- })
537
- const qwAccountId = room.qwAccountId || (eventData && eventData.qwAccountId)
538
- let session = this.session.findSession(({ session }) => {
539
- return String(session.type) === '1' &&
540
- session.targetId === room.roomId &&
541
- (!qwAccountId || session.qwAccountId === qwAccountId)
542
- })
543
- if (!session) {
544
- const accountId = this.getLoginAccountIdMethod ? this.getLoginAccountIdMethod() : qwAccountId
545
- const sessionId = createSessionId(accountId, room.roomId)
546
- session = sessionId && this.session.getSessionByLocal(sessionId)
547
- }
548
- if (!session) {
549
- return Promise.resolve()
550
- }
551
- if (this.session.currentSession && this.session.currentSession.id === session.id) {
552
- this.session.setCurrentSession(null)
553
- }
554
- const unreadCount = session.unreadMsgCount || 0
555
- this.session.removeSession(session.id)
556
- return Promise.resolve({
557
- accountId: session.qwAccountId || qwAccountId,
558
- unreadCount
559
- })
560
- }
561
-
562
295
  connect () {
563
296
  if (this.data.connectStatus === CONNECT_STATUS.Complete) {
564
297
  return Promise.resolve()
@@ -595,4 +328,4 @@ class ClientChat {
595
328
  }
596
329
  }
597
330
 
598
- export default ClientChat
331
+ export default ClientChat
@@ -13,11 +13,11 @@ export function isUni () {
13
13
  * @param accountId - 客服id
14
14
  * @param targetId - wechatFriendId | wechatChatroomId
15
15
  */
16
- export function createSessionId (accountId, targetId) {
17
- if (!accountId || !targetId) {
16
+ export function createSessionId (corpId, accountId, targetId) {
17
+ if (!corpId || !accountId || !targetId) {
18
18
  return
19
19
  }
20
- return shajs('sha1').update(`${accountId}${targetId}`).digest('hex')
20
+ return shajs('sha1').update(`${corpId}${accountId}${targetId}`).digest('hex')
21
21
  }
22
22
 
23
23
  /**
@@ -54,7 +54,7 @@ export function createSessionId (accountId, targetId) {
54
54
  * "msgSvrId": "4319123759514541049",
55
55
  * "msgType": 1,
56
56
  * "origin": "0",
57
- * "status": 0,
57
+ * "sendStatus": 0,
58
58
  * "tenantId": "1761952223049924608",
59
59
  * "wechatAccountId": "ad9d9ae2a8be4f27311312cdd4af3549dc8427ef",
60
60
  * "wechatFriendId": "2089efcc7f8f40b00b7f05fa4c6dfd3bb642774d",
@@ -79,4 +79,4 @@ export function createSessionData (message) {
79
79
  wechatAccountId: message.wechatAccountId
80
80
  }
81
81
  return nextSession
82
- }
82
+ }