mirror of
https://gitee.com/hhyykk/ipms-sjy-ui.git
synced 2025-02-15 18:15:00 +08:00
【功能完善】商城: 客服会话消息缓存
This commit is contained in:
parent
e342e91f79
commit
df34f65df8
@ -4,7 +4,6 @@ import { KeFuConversationApi, KeFuConversationRespVO } from '@/api/mall/promotio
|
|||||||
import { KeFuMessageRespVO } from '@/api/mall/promotion/kefu/message'
|
import { KeFuMessageRespVO } from '@/api/mall/promotion/kefu/message'
|
||||||
import { isEmpty } from '@/utils/is'
|
import { isEmpty } from '@/utils/is'
|
||||||
|
|
||||||
// TODO puhui999: 待优化完善
|
|
||||||
interface MallKefuInfoVO {
|
interface MallKefuInfoVO {
|
||||||
conversationList: KeFuConversationRespVO[] // 会话列表
|
conversationList: KeFuConversationRespVO[] // 会话列表
|
||||||
conversationMessageList: Map<number, KeFuMessageRespVO[]> // 会话消息
|
conversationMessageList: Map<number, KeFuMessageRespVO[]> // 会话消息
|
||||||
@ -19,11 +18,17 @@ export const useMallKefuStore = defineStore('mall-kefu', {
|
|||||||
getConversationList(): KeFuConversationRespVO[] {
|
getConversationList(): KeFuConversationRespVO[] {
|
||||||
return this.conversationList
|
return this.conversationList
|
||||||
},
|
},
|
||||||
getConversationMessageList(): Map<number, KeFuMessageRespVO[]> {
|
getConversationMessageList(): (conversationId: number) => KeFuMessageRespVO[] | undefined {
|
||||||
return this.conversationMessageList
|
return (conversationId: number) => this.conversationMessageList.get(conversationId)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
|
//======================= 会话消息相关 =======================
|
||||||
|
/** 缓存历史消息 */
|
||||||
|
saveMessageList(conversationId: number, messageList: KeFuMessageRespVO[]) {
|
||||||
|
this.conversationMessageList.set(conversationId, messageList)
|
||||||
|
},
|
||||||
|
//======================= 会话相关 =======================
|
||||||
/** 加载会话缓存列表 */
|
/** 加载会话缓存列表 */
|
||||||
async setConversationList() {
|
async setConversationList() {
|
||||||
this.conversationList = await KeFuConversationApi.getConversationList()
|
this.conversationList = await KeFuConversationApi.getConversationList()
|
||||||
|
@ -93,6 +93,10 @@ const emits = defineEmits<{
|
|||||||
(e: 'change', v: KeFuConversationRespVO): void
|
(e: 'change', v: KeFuConversationRespVO): void
|
||||||
}>()
|
}>()
|
||||||
const openRightMessage = (item: KeFuConversationRespVO) => {
|
const openRightMessage = (item: KeFuConversationRespVO) => {
|
||||||
|
// 同一个会话则不处理
|
||||||
|
if (activeConversationId.value === item.id) {
|
||||||
|
return
|
||||||
|
}
|
||||||
activeConversationId.value = item.id
|
activeConversationId.value = item.id
|
||||||
emits('change', item)
|
emits('change', item)
|
||||||
}
|
}
|
||||||
|
@ -236,19 +236,20 @@ const refreshMessageList = async (message?: any) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得新会话的消息列表 */
|
/** 获得新会话的消息列表, 点击切换时,读取缓存;然后异步获取新消息,merge 下; */
|
||||||
// TODO @puhui999:可优化:可以考虑本地做每个会话的消息 list 缓存;然后点击切换时,读取缓存;然后异步获取新消息,merge 下;
|
|
||||||
const getNewMessageList = async (val: KeFuConversationRespVO) => {
|
const getNewMessageList = async (val: KeFuConversationRespVO) => {
|
||||||
// 会话切换,重置相关参数
|
// 1. 缓存当前会话消息列表
|
||||||
messageList.value = []
|
kefuStore.saveMessageList(conversation.value.id, messageList.value)
|
||||||
total.value = 0
|
// 2.1 会话切换,重置相关参数
|
||||||
|
messageList.value = kefuStore.getConversationMessageList(val.id) || []
|
||||||
|
total.value = messageList.value.length || 0
|
||||||
loadHistory.value = false
|
loadHistory.value = false
|
||||||
refreshContent.value = false
|
refreshContent.value = false
|
||||||
// 设置会话相关属性
|
// 2.2 设置会话相关属性
|
||||||
conversation.value = val
|
conversation.value = val
|
||||||
queryParams.conversationId = val.id
|
queryParams.conversationId = val.id
|
||||||
queryParams.createTime = undefined
|
queryParams.createTime = undefined
|
||||||
// 获取消息
|
// 3. 获取消息
|
||||||
await refreshMessageList()
|
await refreshMessageList()
|
||||||
}
|
}
|
||||||
defineExpose({ getNewMessageList, refreshMessageList })
|
defineExpose({ getNewMessageList, refreshMessageList })
|
||||||
@ -299,8 +300,8 @@ const sendMessage = async (msg: any) => {
|
|||||||
message.value = ''
|
message.value = ''
|
||||||
// 加载消息列表
|
// 加载消息列表
|
||||||
await refreshMessageList()
|
await refreshMessageList()
|
||||||
// 异步刷新
|
// 更新会话缓存
|
||||||
kefuStore.updateConversation(conversation.value.id)
|
await kefuStore.updateConversation(conversation.value.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 滚动到底部 */
|
/** 滚动到底部 */
|
||||||
|
Loading…
Reference in New Issue
Block a user