【功能完善】商城: 客服会话缓存

This commit is contained in:
puhui999
2024-11-09 16:58:32 +08:00
parent 1c3be2b92a
commit e342e91f79
5 changed files with 99 additions and 31 deletions

View File

@ -2,6 +2,7 @@ import { store } from '@/store'
import { defineStore } from 'pinia'
import { KeFuConversationApi, KeFuConversationRespVO } from '@/api/mall/promotion/kefu/conversation'
import { KeFuMessageRespVO } from '@/api/mall/promotion/kefu/message'
import { isEmpty } from '@/utils/is'
// TODO puhui999: 待优化完善
interface MallKefuInfoVO {
@ -23,15 +24,81 @@ export const useMallKefuStore = defineStore('mall-kefu', {
}
},
actions: {
/** 加载会话缓存列表 */
async setConversationList() {
const list = await KeFuConversationApi.getConversationList()
list.sort((a: KeFuConversationRespVO, _) => (a.adminPinned ? -1 : 1))
this.conversationList = list
this.conversationList = await KeFuConversationApi.getConversationList()
this.conversationSort()
},
/** 更新会话缓存已读 */
async updateConversationStatus(conversationId: number) {
if (isEmpty(this.conversationList)) {
return
}
const conversation = this.conversationList.find((item) => item.id === conversationId)
conversation && (conversation.adminUnreadMessageCount = 0)
},
/** 更新会话缓存 */
async updateConversation(conversationId: number) {
if (isEmpty(this.conversationList)) {
return
}
const conversation = await KeFuConversationApi.getConversation(conversationId)
this.deleteConversation(conversationId)
conversation && this.conversationList.push(conversation)
this.conversationSort()
},
/** 删除会话缓存 */
deleteConversation(conversationId: number) {
const index = this.conversationList.findIndex((item) => item.id === conversationId)
// 存在则删除
if (index > -1) {
this.conversationList.splice(index, 1)
}
},
conversationSort() {
this.conversationList.sort((obj1, obj2) => {
// 如果 obj1.adminPinned 为 trueobj2.adminPinned 为 falseobj1 应该排在前面
if (obj1.adminPinned && !obj2.adminPinned) return -1
// 如果 obj1.adminPinned 为 falseobj2.adminPinned 为 trueobj2 应该排在前面
if (!obj1.adminPinned && obj2.adminPinned) return 1
// 如果 obj1.adminPinned 和 obj2.adminPinned 都为 true比较 adminUnreadMessageCount 的值
if (obj1.adminPinned && obj2.adminPinned) {
return obj1.adminUnreadMessageCount - obj2.adminUnreadMessageCount
}
// 如果 obj1.adminPinned 和 obj2.adminPinned 都为 false比较 adminUnreadMessageCount 的值
if (!obj1.adminPinned && !obj2.adminPinned) {
return obj1.adminUnreadMessageCount - obj2.adminUnreadMessageCount
}
// 如果 obj1.adminPinned 为 trueobj2.adminPinned 为 true且 b 都大于 0比较 adminUnreadMessageCount 的值
if (
obj1.adminPinned &&
obj2.adminPinned &&
obj1.adminUnreadMessageCount > 0 &&
obj2.adminUnreadMessageCount > 0
) {
return obj1.adminUnreadMessageCount - obj2.adminUnreadMessageCount
}
// 如果 obj1.adminPinned 为 falseobj2.adminPinned 为 false且 b 都大于 0比较 adminUnreadMessageCount 的值
if (
!obj1.adminPinned &&
!obj2.adminPinned &&
obj1.adminUnreadMessageCount > 0 &&
obj2.adminUnreadMessageCount > 0
) {
return obj1.adminUnreadMessageCount - obj2.adminUnreadMessageCount
}
return 0
})
}
// async setConversationMessageList(conversationId: number) {}
}
})
export const useUserStoreWithOut = () => {
export const useMallKefuStoreWithOut = () => {
return useMallKefuStore(store)
}