mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-05 23:56:42 +08:00
优化消息处理逻辑
This commit is contained in:
@@ -34,7 +34,9 @@ function handleSSEMessage(event: MessageEvent) {
|
|||||||
const message = event.data
|
const message = event.data
|
||||||
if (message) {
|
if (message) {
|
||||||
const object = JSON.parse(message)
|
const object = JSON.parse(message)
|
||||||
if (compareTime(object.date, lastTime.value) <= 0) return
|
// 使用reg_time或date字段进行比较
|
||||||
|
const messageTime = object.reg_time || object.date
|
||||||
|
if (compareTime(messageTime, lastTime.value) <= 0) return
|
||||||
messages.value.push(object)
|
messages.value.push(object)
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
emit('scroll') // 新消息到达时触发智能滚动
|
emit('scroll') // 新消息到达时触发智能滚动
|
||||||
@@ -76,14 +78,23 @@ async function loadMessages({ done }: { done: any }) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// 取最后一条时间为存量消息最新时间
|
// 取最后一条时间为存量消息最新时间
|
||||||
lastTime.value =
|
const lastMessage = currData.value[currData.value.length - 1]
|
||||||
currData.value[currData.value.length - 1].reg_time ?? currData.value[currData.value.length - 1].date ?? ''
|
lastTime.value = lastMessage.reg_time || lastMessage.date || ''
|
||||||
|
|
||||||
|
// 合并数据并重新排序
|
||||||
|
const allMessages = [...currData.value, ...messages.value]
|
||||||
|
allMessages.sort((a, b) => {
|
||||||
|
const timeA = a.reg_time || a.date || ''
|
||||||
|
const timeB = b.reg_time || b.date || ''
|
||||||
|
return compareTime(timeA, timeB)
|
||||||
|
})
|
||||||
|
messages.value = allMessages
|
||||||
|
|
||||||
// 合并数据
|
|
||||||
messages.value = [...currData.value, ...messages.value]
|
|
||||||
// 首次加载时滚动到底部
|
// 首次加载时滚动到底部
|
||||||
if (page.value === 1) {
|
if (page.value === 1) {
|
||||||
emit('scroll')
|
nextTick(() => {
|
||||||
|
emit('scroll')
|
||||||
|
})
|
||||||
}
|
}
|
||||||
// 页码+1
|
// 页码+1
|
||||||
page.value++
|
page.value++
|
||||||
@@ -96,15 +107,37 @@ async function loadMessages({ done }: { done: any }) {
|
|||||||
// 取消加载中
|
// 取消加载中
|
||||||
loading.value = false
|
loading.value = false
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error)
|
console.error('加载消息失败:', error)
|
||||||
|
loading.value = false
|
||||||
|
done('error')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 比较yyyy-MM-dd HH:mm:ss时间大小
|
// 比较yyyy-MM-dd HH:mm:ss时间大小
|
||||||
function compareTime(time1: string, time2: string) {
|
function compareTime(time1: string, time2: string) {
|
||||||
|
if (!time1 && !time2) return 0
|
||||||
if (!time1) return -1
|
if (!time1) return -1
|
||||||
if (!time2) return 1
|
if (!time2) return 1
|
||||||
return new Date(time1.replaceAll(/-/g, '/')).getTime() - new Date(time2.replaceAll(/-/g, '/')).getTime()
|
|
||||||
|
try {
|
||||||
|
// 统一时间格式处理,支持多种格式
|
||||||
|
const normalizeTime = (time: string) => {
|
||||||
|
// 如果是ISO格式,直接使用
|
||||||
|
if (time.includes('T')) {
|
||||||
|
return new Date(time).getTime()
|
||||||
|
}
|
||||||
|
// 如果是yyyy-MM-dd HH:mm:ss格式,替换-为/
|
||||||
|
return new Date(time.replaceAll(/-/g, '/')).getTime()
|
||||||
|
}
|
||||||
|
|
||||||
|
const timestamp1 = normalizeTime(time1)
|
||||||
|
const timestamp2 = normalizeTime(time2)
|
||||||
|
|
||||||
|
return timestamp1 - timestamp2
|
||||||
|
} catch (error) {
|
||||||
|
console.error('时间比较错误:', error, 'time1:', time1, 'time2:', time2)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 图片加载完成时触发智能滚动
|
// 图片加载完成时触发智能滚动
|
||||||
|
|||||||
Reference in New Issue
Block a user