diff --git a/apps/frontend/src/layouts/AdminLayout.tsx b/apps/frontend/src/layouts/AdminLayout.tsx index 4c929c16..d202203f 100644 --- a/apps/frontend/src/layouts/AdminLayout.tsx +++ b/apps/frontend/src/layouts/AdminLayout.tsx @@ -527,6 +527,28 @@ function patchAdminOrderCaches( } } +function getOrderSortTimestamp(item: unknown): number { + if (!item || typeof item !== 'object') return 0 + const record = item as Record + const timeStr = String(record.paidAt || record.createdAt || '').trim() + if (!timeStr) return 0 + const t = dayjs(timeStr).valueOf() + return Number.isFinite(t) ? t : 0 +} + +function sortAdminOrdersDesc(items: unknown[]): unknown[] { + return [...items].sort((a, b) => { + const timeA = getOrderSortTimestamp(a) + const timeB = getOrderSortTimestamp(b) + if (timeB !== timeA) { + return timeB - timeA + } + const idA = Number((a as Record)?.orderId || 0) + const idB = Number((b as Record)?.orderId || 0) + return idB - idA + }) +} + function patchAdminOrderListEnvelope( current: unknown, event: RealtimeEvent, @@ -544,6 +566,9 @@ function patchAdminOrderListEnvelope( ? items.filter((entry) => Number((entry as { orderId?: unknown })?.orderId) !== id) : upsertById(items, event.data, 'orderId', insert) + // 严格保持按支付/创建时间倒序排列,避免后台同步历史单(如 15/16 号)时盲目插在第 1 行 + nextItems = sortAdminOrdersDesc(nextItems) + if (insert && nextItems.length > pageSize) { nextItems = nextItems.slice(0, pageSize) }