fix(client): read all customs order pages with bounded concurrency
This commit is contained in:
@@ -4,13 +4,10 @@ import { RefreshCcw } from '@lucide/vue'
|
||||
import DataTable, { type DataTableColumn } from '@/components/common/DataTable.vue'
|
||||
import QueryToolbar, { type QueryField, type QueryModel } from '@/components/common/QueryToolbar.vue'
|
||||
import type { TableAction } from '@/components/common/tableActions'
|
||||
import { useFirstLegOrdersStore } from '../public'
|
||||
import { getMerchantCustomsForOrder, isMerchantCustomsUnavailable, type MerchantCustomsContainer } from '../api/customs'
|
||||
import { isCustomsOrderCandidate } from '../utils/customsEligibility'
|
||||
import type { MerchantCustomsContainer } from '../api/customs'
|
||||
import { readCustomsDocuments, type CustomsDocumentRow } from '../utils/customsDocumentsReader'
|
||||
import CustomsDocumentsDialog from '../components/CustomsDocumentsDialog.vue'
|
||||
import type { FirstLegOrder } from '../types/firstLegOrder'
|
||||
|
||||
const store = useFirstLegOrdersStore()
|
||||
const loading = ref(false)
|
||||
const errorMessage = ref('')
|
||||
const queryModel = ref<QueryModel>({ orderNo: '', inboundCode: '', containerNo: '', status: '' })
|
||||
@@ -37,7 +34,7 @@ const columns: DataTableColumn[] = [
|
||||
{ label: '资料覆盖', slotName: 'coverage', width: 110, align: 'center' },
|
||||
{ label: '状态', slotName: 'status', width: 130 },
|
||||
]
|
||||
const records = ref<Array<{ order: FirstLegOrder; detail: MerchantCustomsContainer }>>([])
|
||||
const records = ref<CustomsDocumentRow[]>([])
|
||||
const dialogOpen = ref(false)
|
||||
const selectedOrderId = ref('')
|
||||
const selectedDetail = ref<MerchantCustomsContainer | null>(null)
|
||||
@@ -77,12 +74,8 @@ async function load() {
|
||||
if (loading.value) return
|
||||
loading.value = true; errorMessage.value = ''
|
||||
try {
|
||||
await store.load()
|
||||
if (store.loadError) throw new Error(store.loadError)
|
||||
const candidates = store.orders.filter(isCustomsOrderCandidate)
|
||||
const results = await Promise.allSettled(candidates.map(async (order) => ({ order, detail: await getMerchantCustomsForOrder(order.id) })))
|
||||
records.value = results.flatMap((result) => result.status === 'fulfilled' && result.value.detail.inbounds.some((item) => item.orderId === result.value.order.id && item.taxMode === 'TAX_REFUND') ? [result.value] : [])
|
||||
const failedCount = results.filter((result) => result.status === 'rejected' && !isMerchantCustomsUnavailable(result.reason)).length
|
||||
const { records: loadedRecords, failedCount } = await readCustomsDocuments()
|
||||
records.value = loadedRecords
|
||||
if (failedCount) errorMessage.value = `${failedCount} 票订单的报关资料加载失败,请重新加载`
|
||||
} catch (error) {
|
||||
records.value = []
|
||||
@@ -90,7 +83,7 @@ async function load() {
|
||||
} finally { loading.value = false }
|
||||
}
|
||||
function openDetail(item: unknown) {
|
||||
const value = item as { order: FirstLegOrder; detail: MerchantCustomsContainer }
|
||||
const value = item as CustomsDocumentRow
|
||||
selectedOrderId.value = value.order.id; selectedDetail.value = value.detail; dialogOpen.value = true
|
||||
}
|
||||
function updateDetail(value: MerchantCustomsContainer) {
|
||||
|
||||
Reference in New Issue
Block a user