@aochuang/client-sdk 1.0.324 → 1.0.326
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.
|
@@ -16,9 +16,10 @@
|
|
|
16
16
|
<div class="sdk-chat-layout__body">
|
|
17
17
|
<bi-resizable
|
|
18
18
|
direction="vertical"
|
|
19
|
-
:initialSize="
|
|
19
|
+
:initialSize="initialSize"
|
|
20
20
|
:minSize="200"
|
|
21
21
|
:maxSize="480"
|
|
22
|
+
@change="handleSizeChange"
|
|
22
23
|
>
|
|
23
24
|
<template v-if="$slots.foot">
|
|
24
25
|
<template slot="panel">
|
|
@@ -39,6 +40,19 @@ export default {
|
|
|
39
40
|
name: 'SdkChatLayout',
|
|
40
41
|
components: {
|
|
41
42
|
BiResizable
|
|
43
|
+
},
|
|
44
|
+
props: {
|
|
45
|
+
initialSize: {
|
|
46
|
+
type: Number,
|
|
47
|
+
default: 200
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
methods: {
|
|
51
|
+
handleSizeChange (value) {
|
|
52
|
+
this.$emit('change', {
|
|
53
|
+
value
|
|
54
|
+
})
|
|
55
|
+
}
|
|
42
56
|
}
|
|
43
57
|
}
|
|
44
58
|
</script>
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
<div class="sdk-layout__wrap">
|
|
7
7
|
<bi-resizable
|
|
8
8
|
direction="horizontal"
|
|
9
|
-
:initialSize="
|
|
9
|
+
:initialSize="initialSize"
|
|
10
10
|
:minSize="270"
|
|
11
11
|
:maxSize="480"
|
|
12
|
+
@change="handleSizeChange"
|
|
12
13
|
>
|
|
13
14
|
<template slot="content">
|
|
14
15
|
<slot></slot>
|
|
@@ -32,6 +33,19 @@ export default {
|
|
|
32
33
|
name: 'SdkLayout',
|
|
33
34
|
components: {
|
|
34
35
|
BiResizable
|
|
36
|
+
},
|
|
37
|
+
props: {
|
|
38
|
+
initialSize: {
|
|
39
|
+
type: Number,
|
|
40
|
+
default: 270
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
methods: {
|
|
44
|
+
handleSizeChange (evt) {
|
|
45
|
+
this.$emit('change', {
|
|
46
|
+
value: evt
|
|
47
|
+
})
|
|
48
|
+
}
|
|
35
49
|
}
|
|
36
50
|
}
|
|
37
51
|
</script>
|
package/package.json
CHANGED
|
@@ -30,6 +30,8 @@ export default class ClientChatMessage {
|
|
|
30
30
|
|
|
31
31
|
messageMap = {}
|
|
32
32
|
|
|
33
|
+
lastMessageTimeMap = {}
|
|
34
|
+
|
|
33
35
|
// 记录一下临时更新的消息,主要是客服端发送消息后,如果失败的时候后端会返回两条消息,一条完整的接口一条失败的状态结果,两个消息顺序没发保证完整结构-》状态结果,所以要先把状态结果临时存一下,后面新增消息的时候从这里找一下,同步一下sendStatus和errMsg
|
|
34
36
|
tempMessageMap = {}
|
|
35
37
|
|
|
@@ -118,6 +120,8 @@ export default class ClientChatMessage {
|
|
|
118
120
|
delete this.tempMessageMap[data.id]
|
|
119
121
|
}
|
|
120
122
|
const groupField = data[this.groupField]
|
|
123
|
+
const lastMessageTime = this.getLastMessageTime(groupField)
|
|
124
|
+
const isBeforeLastMessage = !data.isSend && lastMessageTime && data[this.sortField] < lastMessageTime
|
|
121
125
|
if (!this.data.messageData[groupField]) {
|
|
122
126
|
Vue.set(this.data.messageData, groupField, {})
|
|
123
127
|
}
|
|
@@ -133,6 +137,7 @@ export default class ClientChatMessage {
|
|
|
133
137
|
}
|
|
134
138
|
this.data.messageData[groupField][sortFields.day][sortFields.milliseconds].push(data)
|
|
135
139
|
this.messageMap[data.id] = data
|
|
140
|
+
this.setLastMessageTime(groupField, data[this.sortField], data)
|
|
136
141
|
// 发送中的消息并且不是临时占位消息,需要增加轮询结果逻辑
|
|
137
142
|
if (data.isSend && data.sendStatus === 1 && !data._temp) {
|
|
138
143
|
// 排除一下系统消息,因为后端系统消息的sendStatus永远为1,这会导致前端总是轮训去调用接口检查消息状态
|
|
@@ -143,13 +148,15 @@ export default class ClientChatMessage {
|
|
|
143
148
|
if (fireEvent !== false) {
|
|
144
149
|
// 如果消息包含这种情况,就不能往外发送add-message事件
|
|
145
150
|
// 因为例如群发的消息,他没有会话,导致前端在处理来了新消息通知铃声提醒,获取会话一直获取不到,然后会总是发送请求
|
|
146
|
-
if (!isAutoReadMessage(data) && !shouldIgnoreSessionByMessage(data) && !isDeletedMsg(data) && !isBlockedMsg(data)) {
|
|
151
|
+
if (!isBeforeLastMessage && !isAutoReadMessage(data) && !shouldIgnoreSessionByMessage(data) && !isDeletedMsg(data) && !isBlockedMsg(data)) {
|
|
147
152
|
this.event && this.event.emit('add-message', {
|
|
148
153
|
data
|
|
149
154
|
})
|
|
150
155
|
}
|
|
151
156
|
this.onAddMessageSuccess && this.onAddMessageSuccess({
|
|
152
|
-
data
|
|
157
|
+
data,
|
|
158
|
+
lastMessageTime,
|
|
159
|
+
isBeforeLastMessage
|
|
153
160
|
})
|
|
154
161
|
}
|
|
155
162
|
}
|
|
@@ -562,6 +569,7 @@ export default class ClientChatMessage {
|
|
|
562
569
|
task.cancel()
|
|
563
570
|
})
|
|
564
571
|
this.tempMessageMap = {}
|
|
572
|
+
this.lastMessageTimeMap = {}
|
|
565
573
|
this.data.messageData = {}
|
|
566
574
|
}
|
|
567
575
|
|
|
@@ -588,6 +596,23 @@ export default class ClientChatMessage {
|
|
|
588
596
|
* 最后接收的一条好友消息时间
|
|
589
597
|
*/
|
|
590
598
|
setLastReceiveMessageTime (messageTime) {
|
|
599
|
+
if (!messageTime || (this.data.lastReceiveMessageTime && messageTime <= this.data.lastReceiveMessageTime)) {
|
|
600
|
+
return
|
|
601
|
+
}
|
|
591
602
|
this.data.lastReceiveMessageTime = messageTime
|
|
592
603
|
}
|
|
593
|
-
|
|
604
|
+
|
|
605
|
+
getLastMessageTime (groupField) {
|
|
606
|
+
return this.lastMessageTimeMap[groupField]
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
setLastMessageTime (groupField, messageTime, message) {
|
|
610
|
+
if (!groupField || !messageTime || (message && message.msgType === '_EMPTY_')) {
|
|
611
|
+
return
|
|
612
|
+
}
|
|
613
|
+
const lastMessageTime = this.getLastMessageTime(groupField)
|
|
614
|
+
if (!lastMessageTime || messageTime > lastMessageTime) {
|
|
615
|
+
this.lastMessageTimeMap[groupField] = messageTime
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
@@ -379,13 +379,16 @@ class ClientChat {
|
|
|
379
379
|
clientChat: this,
|
|
380
380
|
checkMessageSendResultMethod: options.checkMessageSendResultMethod,
|
|
381
381
|
loadLossMessageDataMethod: options.loadLossFriendMessageDataMethod,
|
|
382
|
-
onAddMessageSuccess: ({ data }) => {
|
|
382
|
+
onAddMessageSuccess: ({ data, isBeforeLastMessage }) => {
|
|
383
383
|
const accountId = options.getLoginAccountIdMethod ? options.getLoginAccountIdMethod() : data.accountId
|
|
384
384
|
let sessionId = createSessionId(accountId, data.wechatFriendId)
|
|
385
385
|
// 更新会话
|
|
386
386
|
if (!sessionId) {
|
|
387
387
|
return
|
|
388
388
|
}
|
|
389
|
+
if (isBeforeLastMessage) {
|
|
390
|
+
return
|
|
391
|
+
}
|
|
389
392
|
if (isAutoReadMessage(data)) {
|
|
390
393
|
return this.handleAutoReadMessageSession(sessionId)
|
|
391
394
|
}
|
|
@@ -513,7 +516,7 @@ class ClientChat {
|
|
|
513
516
|
clientChat: this,
|
|
514
517
|
checkMessageSendResultMethod: options.checkMessageSendResultMethod,
|
|
515
518
|
loadLossMessageDataMethod: options.loadLossRoomMessageDataMethod,
|
|
516
|
-
onAddMessageSuccess: ({ data }) => {
|
|
519
|
+
onAddMessageSuccess: ({ data, isBeforeLastMessage }) => {
|
|
517
520
|
const accountId = options.getLoginAccountIdMethod ? options.getLoginAccountIdMethod() : data.accountId
|
|
518
521
|
let sessionId = createSessionId(accountId, data.wechatChatroomId)
|
|
519
522
|
const atMessage = getAtMessageContent(data)
|
|
@@ -521,6 +524,9 @@ class ClientChat {
|
|
|
521
524
|
if (!sessionId) {
|
|
522
525
|
return
|
|
523
526
|
}
|
|
527
|
+
if (isBeforeLastMessage) {
|
|
528
|
+
return
|
|
529
|
+
}
|
|
524
530
|
if (isAutoReadMessage(data)) {
|
|
525
531
|
return this.handleAutoReadMessageSession(sessionId)
|
|
526
532
|
}
|