Skip to content

Commit df34f65

Browse files
author
puhui999
committed
【功能完善】商城: 客服会话消息缓存
1 parent e342e91 commit df34f65

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

src/store/modules/mall/kefu.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { KeFuConversationApi, KeFuConversationRespVO } from '@/api/mall/promotio
44
import { KeFuMessageRespVO } from '@/api/mall/promotion/kefu/message'
55
import { isEmpty } from '@/utils/is'
66

7-
// TODO puhui999: 待优化完善
87
interface MallKefuInfoVO {
98
conversationList: KeFuConversationRespVO[] // 会话列表
109
conversationMessageList: Map<number, KeFuMessageRespVO[]> // 会话消息
@@ -19,11 +18,17 @@ export const useMallKefuStore = defineStore('mall-kefu', {
1918
getConversationList(): KeFuConversationRespVO[] {
2019
return this.conversationList
2120
},
22-
getConversationMessageList(): Map<number, KeFuMessageRespVO[]> {
23-
return this.conversationMessageList
21+
getConversationMessageList(): (conversationId: number) => KeFuMessageRespVO[] | undefined {
22+
return (conversationId: number) => this.conversationMessageList.get(conversationId)
2423
}
2524
},
2625
actions: {
26+
//======================= 会话消息相关 =======================
27+
/** 缓存历史消息 */
28+
saveMessageList(conversationId: number, messageList: KeFuMessageRespVO[]) {
29+
this.conversationMessageList.set(conversationId, messageList)
30+
},
31+
//======================= 会话相关 =======================
2732
/** 加载会话缓存列表 */
2833
async setConversationList() {
2934
this.conversationList = await KeFuConversationApi.getConversationList()

src/views/mall/promotion/kefu/components/KeFuConversationList.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ const emits = defineEmits<{
9393
(e: 'change', v: KeFuConversationRespVO): void
9494
}>()
9595
const openRightMessage = (item: KeFuConversationRespVO) => {
96+
// 同一个会话则不处理
97+
if (activeConversationId.value === item.id) {
98+
return
99+
}
96100
activeConversationId.value = item.id
97101
emits('change', item)
98102
}

src/views/mall/promotion/kefu/components/KeFuMessageList.vue

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -236,19 +236,20 @@ const refreshMessageList = async (message?: any) => {
236236
}
237237
}
238238
239-
/** 获得新会话的消息列表 */
240-
// TODO @puhui999:可优化:可以考虑本地做每个会话的消息 list 缓存;然后点击切换时,读取缓存;然后异步获取新消息,merge 下;
239+
/** 获得新会话的消息列表, 点击切换时,读取缓存;然后异步获取新消息,merge 下; */
241240
const getNewMessageList = async (val: KeFuConversationRespVO) => {
242-
// 会话切换,重置相关参数
243-
messageList.value = []
244-
total.value = 0
241+
// 1. 缓存当前会话消息列表
242+
kefuStore.saveMessageList(conversation.value.id, messageList.value)
243+
// 2.1 会话切换,重置相关参数
244+
messageList.value = kefuStore.getConversationMessageList(val.id) || []
245+
total.value = messageList.value.length || 0
245246
loadHistory.value = false
246247
refreshContent.value = false
247-
// 设置会话相关属性
248+
// 2.2 设置会话相关属性
248249
conversation.value = val
249250
queryParams.conversationId = val.id
250251
queryParams.createTime = undefined
251-
// 获取消息
252+
// 3. 获取消息
252253
await refreshMessageList()
253254
}
254255
defineExpose({ getNewMessageList, refreshMessageList })
@@ -299,8 +300,8 @@ const sendMessage = async (msg: any) => {
299300
message.value = ''
300301
// 加载消息列表
301302
await refreshMessageList()
302-
// 异步刷新
303-
kefuStore.updateConversation(conversation.value.id)
303+
// 更新会话缓存
304+
await kefuStore.updateConversation(conversation.value.id)
304305
}
305306
306307
/** 滚动到底部 */

0 commit comments

Comments
 (0)