fix(usage): preserve failed status for active request refreshes

This commit is contained in:
zhefox
2026-05-24 18:48:50 +08:00
parent bbd4338e8e
commit 2207b60834
6 changed files with 153 additions and 15 deletions
+24 -3
View File
@@ -156,6 +156,7 @@ import {
hasUsageFallback,
isUsageRecordFailed,
isUsageUpstreamStream,
normalizeRequestStatus,
resolveDisplayRequestStatus,
} from '@/features/usage/utils/status'
import type { DateRangeParams, FilterStatusValue, RequestStatus } from '@/features/usage/types'
@@ -974,6 +975,8 @@ function handleDetailRequestState(update: {
const record = currentRecords.value.find(record => record.id === update.id)
if (!record) return
const nextStatus = resolveDetailUpdateStatus(update)
const statusPriority: Record<RequestStatus, number> = {
pending: 0,
streaming: 1,
@@ -981,11 +984,11 @@ function handleDetailRequestState(update: {
failed: 2,
cancelled: 2,
}
if (update.status) {
if (nextStatus) {
const currentRank = record.status ? statusPriority[record.status] : 0
const nextRank = statusPriority[update.status]
const nextRank = statusPriority[nextStatus]
if (nextRank >= currentRank) {
record.status = update.status
record.status = nextStatus
}
}
if ('statusCode' in update) {
@@ -1005,6 +1008,24 @@ function handleDetailRequestState(update: {
}
}
function resolveDetailUpdateStatus(update: {
status?: RequestStatus
statusCode?: number | null
imageProgress?: ImageProgress | null
errorMessage?: string | null
}): RequestStatus | undefined {
const status = normalizeRequestStatus(update.status)
const hasFailureSignal =
(typeof update.statusCode === 'number' && update.statusCode >= 400) ||
(typeof update.errorMessage === 'string' && update.errorMessage.trim().length > 0) ||
update.imageProgress?.phase === 'failed'
if ((status == null || status === 'pending' || status === 'streaming') && hasFailureSignal) {
return 'failed'
}
return status
}
function prefetchRequestDetail(id: string) {
if (!isAdminPage.value) return
void dashboardApi.prefetchRequestDetail(id).catch(error => {