@aochuang/client-sdk 1.0.344 → 1.0.346

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 (141) 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-session.js +19 -6
  29. package/services/client-chat/client-chat-wechat/client-chat.js +87 -25
  30. package/services/client-chat/client-chat-wework/client-chat-concats.js +17 -81
  31. package/services/client-chat/client-chat-wework/client-chat-message.js +5 -5
  32. package/services/client-chat/client-chat-wework/client-chat-session.js +2 -50
  33. package/services/client-chat/client-chat-wework/client-chat-socket.js +1 -9
  34. package/services/client-chat/client-chat-wework/client-chat.js +11 -278
  35. package/services/client-chat/client-chat-wework/utils.js +5 -5
  36. package/uni-common/account-portray/account-portray.vue +51 -0
  37. package/uni-common/account-select/account-select-item.vue +172 -0
  38. package/uni-common/account-select/account-select.vue +252 -0
  39. package/uni-common/all-friend-avatar/all-friend-avatar.vue +49 -0
  40. package/uni-common/friend-avatar/default.svg +1 -0
  41. package/uni-common/friend-avatar/friend-avatar.vue +27 -0
  42. package/uni-common/friend-avatar/index.js +3 -0
  43. package/uni-common/friend-loader/friend-loader.vue +53 -0
  44. package/uni-common/friend-portray/friend-portray.vue +56 -0
  45. package/uni-common/group-avatar/default.svg +1 -0
  46. package/uni-common/group-avatar/group-avatar.vue +18 -0
  47. package/uni-common/group-avatar/index.js +3 -0
  48. package/uni-common/room-avatar/default.svg +6 -0
  49. package/uni-common/room-avatar/index.js +3 -0
  50. package/uni-common/room-avatar/room-avatar.vue +27 -0
  51. package/uni-common/room-loader/room-loader.vue +53 -0
  52. package/uni-common/room-portray/room-portray.vue +56 -0
  53. package/uni-components/chat-control/calling/calling.vue +91 -0
  54. package/uni-components/chat-control/calling/phone-fill.svg +1 -0
  55. package/uni-components/chat-control/calling/vidicon-fill.svg +1 -0
  56. package/uni-components/chat-control/channel-video/channel-video.vue +89 -0
  57. package/uni-components/chat-control/channel-video-card/channel-video-card.vue +105 -0
  58. package/uni-components/chat-control/channel-video-live/channel-video-live.vue +92 -0
  59. package/uni-components/chat-control/chat-control-config-item/chat-control-config-item.vue +20 -0
  60. package/uni-components/chat-control/chat-control-config-item/index.js +3 -0
  61. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-app.vue +25 -0
  62. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-h5.vue +21 -0
  63. package/{components/wework-chat-control/wework-chat-control-config.vue → uni-components/chat-control/chat-control-config.vue} +13 -16
  64. package/uni-components/chat-control/chat-control.vue +218 -0
  65. package/uni-components/chat-control/company-card/company-card.vue +123 -0
  66. package/uni-components/chat-control/const.js +28 -0
  67. package/uni-components/chat-control/expression/expression.vue +41 -0
  68. package/uni-components/chat-control/image/image.vue +68 -0
  69. package/uni-components/chat-control/index.js +89 -0
  70. package/uni-components/chat-control/location/location.vue +110 -0
  71. package/uni-components/chat-control/member-change/member-change.vue +32 -0
  72. package/uni-components/chat-control/quote-message/quote-message.vue +216 -0
  73. package/uni-components/chat-control/real-time-position/real-time-position.vue +62 -0
  74. package/uni-components/chat-control/redpacket/red-envelope.svg +1 -0
  75. package/uni-components/chat-control/redpacket/redpacket.vue +75 -0
  76. package/uni-components/chat-control/share-card/share-card.vue +101 -0
  77. package/uni-components/chat-control/system/system.vue +69 -0
  78. package/uni-components/chat-control/system-batch-message/system-batch-message.vue +30 -0
  79. package/uni-components/chat-control/system-text/system-text.vue +32 -0
  80. package/uni-components/chat-control/text/text.vue +67 -0
  81. package/uni-components/chat-control/text-with-at/text-with-at.vue +51 -0
  82. package/uni-components/chat-control/transfer/red-transfer.svg +1 -0
  83. package/uni-components/chat-control/transfer/transfer.vue +80 -0
  84. package/uni-components/chat-control/unkonw/unkonw.vue +37 -0
  85. package/uni-components/chat-control/url/icons/file-excel-line.svg +1 -0
  86. package/uni-components/chat-control/url/icons/file-info-line.svg +1 -0
  87. package/uni-components/chat-control/url/icons/file-music-line.svg +1 -0
  88. package/uni-components/chat-control/url/icons/file-pdf-line.svg +1 -0
  89. package/uni-components/chat-control/url/icons/file-ppt-line.svg +1 -0
  90. package/uni-components/chat-control/url/icons/file-settings-line.svg +1 -0
  91. package/uni-components/chat-control/url/icons/file-text-line.svg +1 -0
  92. package/uni-components/chat-control/url/icons/file-unknow-line.svg +1 -0
  93. package/uni-components/chat-control/url/icons/file-word-line.svg +1 -0
  94. package/uni-components/chat-control/url/icons/file-zip-line.svg +1 -0
  95. package/uni-components/chat-control/url/icons/index.js +24 -0
  96. package/uni-components/chat-control/url/miniprogram.svg +1 -0
  97. package/uni-components/chat-control/url/url-miniprogram.vue +116 -0
  98. package/uni-components/chat-control/url/url.vue +306 -0
  99. package/uni-components/chat-control/url-new/icons/file-excel-line.svg +1 -0
  100. package/uni-components/chat-control/url-new/icons/file-info-line.svg +1 -0
  101. package/uni-components/chat-control/url-new/icons/file-music-line.svg +1 -0
  102. package/uni-components/chat-control/url-new/icons/file-pdf-line.svg +1 -0
  103. package/uni-components/chat-control/url-new/icons/file-ppt-line.svg +1 -0
  104. package/uni-components/chat-control/url-new/icons/file-settings-line.svg +1 -0
  105. package/uni-components/chat-control/url-new/icons/file-text-line.svg +1 -0
  106. package/uni-components/chat-control/url-new/icons/file-unknow-line.svg +1 -0
  107. package/uni-components/chat-control/url-new/icons/file-word-line.svg +1 -0
  108. package/uni-components/chat-control/url-new/icons/file-zip-line.svg +1 -0
  109. package/uni-components/chat-control/url-new/icons/index.js +24 -0
  110. package/uni-components/chat-control/url-new/url-new.vue +110 -0
  111. package/uni-components/chat-control/utils.js +12 -0
  112. package/uni-components/chat-control/video/video.vue +156 -0
  113. package/uni-components/chat-control/voice/voice.vue +166 -0
  114. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-collect.vue +84 -0
  115. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-system.vue +28 -0
  116. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet.vue +85 -0
  117. package/uni-components/chat-editor/chat-editor-func/chat-editor-func.vue +157 -0
  118. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at-panel.vue +158 -0
  119. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at.vue +61 -0
  120. package/uni-components/chat-editor/chat-editor-func-button/chat-editor-func-button.vue +58 -0
  121. package/uni-components/chat-editor/chat-editor-func-file/chat-editor-func-file.vue +54 -0
  122. package/uni-components/chat-editor/chat-editor-func-image/chat-editor-func-image.vue +42 -0
  123. package/uni-components/chat-editor/chat-editor-func-video/chat-editor-func-video.vue +42 -0
  124. package/uni-components/chat-editor/chat-editor-func-voice/chat-editor-func-voice.vue +25 -0
  125. package/uni-components/chat-editor/chat-editor-message-send/chat-editor-message-send.vue +158 -0
  126. package/uni-components/chat-editor/chat-editor-quote/chat-editor-quote.vue +75 -0
  127. package/uni-components/chat-editor/chat-editor.vue +257 -0
  128. package/uni-components/chat-editor/index.js +10 -0
  129. package/uni-components/chat-editor/util.js +65 -0
  130. package/uni-components/chat-panel/chat-panel-chats-box.vue +238 -0
  131. package/uni-components/chat-panel/chat-panel-chats-forward/chat-panel-chats-forward.vue +273 -0
  132. package/uni-components/chat-panel/chat-panel-chats-item.vue +578 -0
  133. package/uni-components/chat-panel/chat-panel-chats-status/chat-panel-chats-status.vue +71 -0
  134. package/uni-components/chat-panel/chat-panel-chats.vue +368 -0
  135. package/uni-components/chat-panel/chat-panel.vue +227 -0
  136. package/uni-components/contacts-group-select/contacts-group-select-item.vue +85 -0
  137. package/uni-components/contacts-group-select/contacts-group-select-panel.vue +119 -0
  138. package/uni-components/contacts-group-select/contacts-group-select.vue +150 -0
  139. package/components/wework-chat-control/wework-chat-control-config-item.vue +0 -24
  140. package/components/wework-chat-control/wework-chat-control-config-msg.vue +0 -25
  141. package/components/wework-chat-panel/chat-panel-chat-status/chat-panel-chat-status.vue +0 -73
@@ -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
+ }
@@ -0,0 +1,51 @@
1
+ <template>
2
+ <bi-portray
3
+ :avatar="accountData && accountData.avatar"
4
+ :name="accountData && (accountData.memo || accountData.nickname)"
5
+ :loading="loading"
6
+ ></bi-portray>
7
+ </template>
8
+
9
+ <script>
10
+ import BiPortray from '@aochuang/common/uni-common/portray/portray.vue'
11
+
12
+ export default {
13
+ name: 'BiAccountPortray',
14
+ components: {
15
+ BiPortray
16
+ },
17
+ props: {
18
+ id: {
19
+ type: String,
20
+ required: true
21
+ }
22
+ },
23
+ data () {
24
+ return {
25
+ loading: false,
26
+ accountData: null
27
+ }
28
+ },
29
+ watch: {
30
+ id () {
31
+ this.loadData()
32
+ }
33
+ },
34
+ created () {
35
+ this.loadData()
36
+ },
37
+ methods: {
38
+ loadData () {
39
+ this.loading = true
40
+ this.$clientChat.account.getAccount(this.id).then(rs => {
41
+ this.accountData = rs.data
42
+ }).finally(() => {
43
+ this.loading = false
44
+ })
45
+ }
46
+ }
47
+ }
48
+ </script>
49
+
50
+ <style>
51
+ </style>
@@ -0,0 +1,172 @@
1
+ <template>
2
+ <view
3
+ class="bi-account-select-item"
4
+ :class="['bi-account-select-item--' + type, {'is-active': selected, 'is-online': isAll ? false : data && data.online, 'is-offline': isAll ? false : data && !data.online}]"
5
+ >
6
+ <view class="bi-account-select-item__icon">
7
+ <template v-if="isAll">
8
+ <bi-all-friend-avatar :size="avatarSize" :round="type === 'simple'"></bi-all-friend-avatar>
9
+ </template>
10
+ <template v-else>
11
+ <bi-avatar :src="data.avatar" :size="avatarSize" :round="type === 'simple'"></bi-avatar>
12
+ </template>
13
+ </view>
14
+ <view class="bi-account-select-item__text">
15
+ <template v-if="isAll">全部好友</template>
16
+ <template v-else>
17
+ {{ data.memo || data.nickname }}
18
+ </template>
19
+ </view>
20
+ <bi-badge class="bi-account-select-item__count" :value="unreadCount" :max="99" v-if="unreadCount"></bi-badge>
21
+ </view>
22
+ </template>
23
+
24
+ <script>
25
+ import BiAvatar from '@aochuang/common/uni-components/avatar/avatar.vue'
26
+ import BiBadge from '@aochuang/common/uni-components/badge/badge.vue'
27
+ import BiAllFriendAvatar from '../all-friend-avatar/all-friend-avatar.vue'
28
+
29
+ export default {
30
+ name: 'BiAccountSelectItem',
31
+ components: {
32
+ BiAvatar,
33
+ BiBadge,
34
+ BiAllFriendAvatar
35
+ },
36
+ props: {
37
+ isAll: {
38
+ type: Boolean
39
+ },
40
+ type: {
41
+ type: String,
42
+ validator (value) {
43
+ return ['default', 'simple'].includes(value)
44
+ }
45
+ },
46
+ selected: {
47
+ type: Boolean
48
+ },
49
+ data: {
50
+ type: Object
51
+ }
52
+ },
53
+ computed: {
54
+ avatarSize () {
55
+ return this.type === 'default' ? 'small' : 'mini'
56
+ },
57
+ accountUnreadMessageNumData () {
58
+ return this.$clientChat.account.accountUnreadMessageNumData || []
59
+ },
60
+ unreadCount () {
61
+ if (this.isAll) {
62
+ return this.accountUnreadMessageNumData.reduce((rs, account) => {
63
+ if (account.num) {
64
+ rs += account.num
65
+ }
66
+ return rs
67
+ }, 0)
68
+ } else {
69
+ const unreadMessageNumItem = this.accountUnreadMessageNumData.find(v => v.id === this.data.id)
70
+ return unreadMessageNumItem ? unreadMessageNumItem.num : 0
71
+ }
72
+ }
73
+ },
74
+ created () {
75
+ if (!this.isAll && !this.data) {
76
+ throw new Error('缺少data数据')
77
+ }
78
+ }
79
+ }
80
+ </script>
81
+
82
+ <style lang="less">
83
+ .bi-account-select-item{
84
+ display: flex;
85
+ flex-direction: row;
86
+ align-items: center;
87
+ position: relative;
88
+ transition: all .25s;
89
+ max-width: 100%;
90
+ &.is-active {
91
+ background: #3c9cff;
92
+ color: #fff;
93
+ &:after {
94
+ border-right-color: #fff;
95
+ border-bottom-color: #fff;
96
+ }
97
+ }
98
+ &.is-online {
99
+ .bi-account-select-item__icon{
100
+ &:after {
101
+ opacity: 1;
102
+ background-color: #40bf48;
103
+ border-color: #fff;
104
+ }
105
+ }
106
+ }
107
+ &.is-offline {
108
+ .bi-account-select-item__icon{
109
+ &:after {
110
+ opacity: 1;
111
+ background-color: #ccc;
112
+ border-color: #fff;
113
+ }
114
+ }
115
+ }
116
+ }
117
+ .bi-account-select-item__icon{
118
+ background-color: #eee;
119
+ margin-right: 6px;
120
+ position: relative;
121
+ line-height: 1em;
122
+ &:after {
123
+ content: '';
124
+ width: 8px;
125
+ height: 8px;
126
+ background-color: transparent;
127
+ border-radius: 50%;
128
+ border: 2px solid transparent;
129
+ position: absolute;
130
+ bottom: -2px;
131
+ right: -2px;
132
+ opacity: 0;
133
+ }
134
+ }
135
+ .bi-account-select-item__text{
136
+ flex: 1;
137
+ min-width: 0;
138
+ overflow: hidden;
139
+ text-overflow: ellipsis;
140
+ white-space: nowrap;
141
+ }
142
+ .bi-account-select-item--default {
143
+ padding: 6px 24px 6px 12px;
144
+ &:after {
145
+ content: '';
146
+ width: 6px;
147
+ height: 6px;
148
+ border: 1px solid #ccc;
149
+ border-left: 0;
150
+ border-top: 0;
151
+ transform: rotate(-45deg) translateY(-50%);
152
+ position: absolute;
153
+ right: 12px;
154
+ top: 50%;
155
+ }
156
+ .bi-account-select-item__icon {
157
+ width: 32px;
158
+ height: 32px;
159
+ border-radius: 3px;
160
+ }
161
+ }
162
+ .bi-account-select-item--simple {
163
+ .bi-account-select-item__icon {
164
+ width: 24px;
165
+ height: 24px;
166
+ border-radius: 50%;
167
+ }
168
+ .bi-account-select-item__count{
169
+ transform: scale(.8);
170
+ }
171
+ }
172
+ </style>