@@ -164,9 +164,8 @@ const messageList = ref<KeFuMessageRespVO[]>([]) // 消息列表
164
164
const conversation = ref <KeFuConversationRespVO >({} as KeFuConversationRespVO ) // 用户会话
165
165
const showNewMessageTip = ref (false ) // 显示有新消息提示
166
166
const queryParams = reactive ({
167
- pageNo: 1 ,
168
- pageSize: 10 ,
169
- conversationId: 0
167
+ conversationId: 0 ,
168
+ createTime: undefined
170
169
})
171
170
const total = ref (0 ) // 消息总条数
172
171
const refreshContent = ref (false ) // 内容刷新,主要解决会话消息页面高度不一致导致的滚动功能精度失效
@@ -175,14 +174,20 @@ const refreshContent = ref(false) // 内容刷新,主要解决会话消息页面
175
174
const getMessageContent = computed (() => (item : any ) => jsonParse (item .content ))
176
175
/** 获得消息列表 */
177
176
const getMessageList = async () => {
178
- const res = await KeFuMessageApi .getKeFuMessagePage (queryParams )
179
- total .value = res .total
177
+ const res = await KeFuMessageApi .getKeFuMessageList (queryParams )
178
+ if (isEmpty (res )) {
179
+ // 当返回的是空列表说明没有消息或者已经查询完了历史消息
180
+ skipGetMessageList .value = true
181
+ return
182
+ }
183
+ queryParams .createTime = formatDate (res .at (- 1 ).createTime ) as any
184
+
180
185
// 情况一:加载最新消息
181
- if (queryParams .pageNo === 1 ) {
182
- messageList .value = res . list
186
+ if (! queryParams .createTime ) {
187
+ messageList .value = res
183
188
} else {
184
189
// 情况二:加载历史消息
185
- for (const item of res . list ) {
190
+ for (const item of res ) {
186
191
pushMessage (item )
187
192
}
188
193
}
@@ -216,8 +221,7 @@ const refreshMessageList = async (message?: any) => {
216
221
}
217
222
pushMessage (message )
218
223
} else {
219
- // TODO @puhui999:不基于 page 做。而是流式分页;通过 createTime 排序查询;
220
- queryParams .pageNo = 1
224
+ queryParams .createTime = undefined
221
225
await getMessageList ()
222
226
}
223
227
@@ -234,24 +238,21 @@ const refreshMessageList = async (message?: any) => {
234
238
// TODO @puhui999:可优化:可以考虑本地做每个会话的消息 list 缓存;然后点击切换时,读取缓存;然后异步获取新消息,merge 下;
235
239
const getNewMessageList = async (val : KeFuConversationRespVO ) => {
236
240
// 会话切换,重置相关参数
237
- queryParams .pageNo = 1
238
241
messageList .value = []
239
242
total .value = 0
240
243
loadHistory .value = false
241
244
refreshContent .value = false
242
245
// 设置会话相关属性
243
246
conversation .value = val
244
247
queryParams .conversationId = val .id
248
+ queryParams .createTime = undefined
245
249
// 获取消息
246
250
await refreshMessageList ()
247
251
}
248
252
defineExpose ({ getNewMessageList , refreshMessageList })
249
253
250
254
const showKeFuMessageList = computed (() => ! isEmpty (conversation .value )) // 是否显示聊天区域
251
- const skipGetMessageList = computed (() => {
252
- // 已加载到最后一页的话则不触发新的消息获取
253
- return total .value > 0 && Math .ceil (total .value / queryParams .pageSize ) === queryParams .pageNo
254
- }) // 跳过消息获取
255
+ const skipGetMessageList = ref (false ) // 跳过消息获取
255
256
256
257
/** 处理表情选择 */
257
258
const handleEmojiSelect = (item : Emoji ) => {
@@ -345,8 +346,6 @@ const handleOldMessage = async () => {
345
346
return
346
347
}
347
348
loadHistory .value = true
348
- // 加载消息列表
349
- queryParams .pageNo += 1
350
349
await getMessageList ()
351
350
// 等页面加载完后,获得上一页最后一条消息的位置,控制滚动到它所在位置
352
351
scrollbarRef .value ! .setScrollTop (innerRef .value ! .clientHeight - oldPageHeight )
0 commit comments