This commit is contained in:
2026-10-09 17:36:34 +08:00
parent 07ba9fcb7c
commit 9891ac3e29
8 changed files with 99 additions and 21 deletions
+14 -5
View File
@@ -22,6 +22,8 @@ import {
getMerchantOrderWorkbench,
type MerchantUnifiedOrderDetail,
type MerchantOrderWorkbenchQuery,
type MerchantOrderProgress,
type OrderQueueCounts,
type MerchantUnifiedOrderRow,
} from '@/modules/first-leg/api/unifiedOrders'
import type { MerchantTenantStatus } from '@/modules/tenant-management/public'
@@ -396,7 +398,8 @@ export const useFirstLegOrdersStore = defineStore('client-first-leg-orders', ()
const orders = ref<FirstLegOrder[]>([])
const orderDetails = ref<Record<string, FirstLegOrder>>({})
const total = ref(0)
const queueCounts = ref({ all: 0, fee: 0, customs: 0, draft: 0 })
const queueCounts = ref<OrderQueueCounts>({ all: 0, fee: 0, customs: 0, draft: 0, loaded: 0, declared: 0, cleared: 0, scheduled: 0, delivering: 0, delivered: 0 })
const orderProgress = ref<Record<string, MerchantOrderProgress>>({})
const queryChannelNames = ref<string[]>([])
let listRequest = 0
const pendingSubmissions = new Map<string, { key: string; payload: { expectedVersion: number } }>()
@@ -451,7 +454,8 @@ export const useFirstLegOrdersStore = defineStore('client-first-leg-orders', ()
loadError.value = ''
orders.value = []
total.value = 0
queueCounts.value = { all: 0, fee: 0, customs: 0, draft: 0 }
queueCounts.value = { all: 0, fee: 0, customs: 0, draft: 0, loaded: 0, declared: 0, cleared: 0, scheduled: 0, delivering: 0, delivered: 0 }
orderProgress.value = {}
const [orderResult, warehouseResult] = await Promise.allSettled([
getMerchantOrderWorkbench(query), loadWarehouseType('DOMESTIC'),
])
@@ -466,14 +470,19 @@ export const useFirstLegOrdersStore = defineStore('client-first-leg-orders', ()
|| Number(result.page.size) !== size || Number(result.page.pages) !== pages
|| result.page.records.length !== Math.min(size, Math.max(0, count - (expectedPage - 1) * size))
|| new Set(result.page.records.map(row => String(row.orderId))).size !== result.page.records.length
|| ['all', 'fee', 'customs', 'draft'].some(key => { const value = result.queues[key as keyof typeof result.queues]; return !Number.isSafeInteger(Number(value)) || Number(value) < 0 })
|| ['all', 'fee', 'customs', 'draft', 'loaded', 'declared', 'cleared', 'scheduled', 'delivering', 'delivered'].some(key => { const value = result.queues[key as keyof typeof result.queues]; return !Number.isSafeInteger(Number(value)) || Number(value) < 0 })
|| Number(result.queues[query.queue ?? 'all']) !== count
|| !Array.isArray(result.progress) || result.progress.length !== result.page.records.length
|| new Set(result.progress.map(p => String(p.orderId))).size !== result.progress.length
|| result.progress.some(p => !result.page.records.some(row => String(row.orderId) === String(p.orderId))
|| !['none', 'loaded', 'declared', 'cleared', 'scheduled', 'delivering', 'delivered'].includes(p.stage) || typeof p.partial !== 'boolean')
|| !Array.isArray(result.channelNames)) {
loadError.value = '订单分页数据不完整,请重新加载'
} else {
orders.value = result.page.records.map(item => mapUnifiedOrderRow(item, warehouses.value))
total.value = count
queueCounts.value = { all: Number(result.queues.all), fee: Number(result.queues.fee), customs: Number(result.queues.customs), draft: Number(result.queues.draft) }
queueCounts.value = Object.fromEntries(Object.entries(result.queues).map(([key, value]) => [key, Number(value)])) as OrderQueueCounts
orderProgress.value = Object.fromEntries(result.progress.map(p => [String(p.orderId), p]))
queryChannelNames.value = result.channelNames
}
} catch { loadError.value = '订单分页数据不完整,请重新加载' }
@@ -629,5 +638,5 @@ export const useFirstLegOrdersStore = defineStore('client-first-leg-orders', ()
return loadOrderAggregate(id)
}
return { orders, orderDetails, total, queueCounts, queryChannelNames, warehouses, loading, loadedFromApi, loadError, warehouseLoadError, getById, load, loadDetail, loadDraftDetail, loadWarehouseDetail, loadWarehouseType, beginDraftEdit, saveDraft, prepareCancellation, cancelOrder, saveDraftBatch, submitSaved, hasPendingSubmission, isSubmissionRetry, beginNewSubmissionEdit, saveDraftForSubmission }
return { orders, orderDetails, total, queueCounts, orderProgress, queryChannelNames, warehouses, loading, loadedFromApi, loadError, warehouseLoadError, getById, load, loadDetail, loadDraftDetail, loadWarehouseDetail, loadWarehouseType, beginDraftEdit, saveDraft, prepareCancellation, cancelOrder, saveDraftBatch, submitSaved, hasPendingSubmission, isSubmissionRetry, beginNewSubmissionEdit, saveDraftForSubmission }
})