diff --git a/src/modules/customers/pages/CustomerDetailView.test.ts b/src/modules/customers/pages/CustomerDetailView.test.ts index 3c5dcb7a..2d8d64f5 100644 --- a/src/modules/customers/pages/CustomerDetailView.test.ts +++ b/src/modules/customers/pages/CustomerDetailView.test.ts @@ -136,4 +136,27 @@ describe('CustomerDetailView', () => { expect(downloadTenantQualification).toHaveBeenCalledWith(tenant.id, '/files/license.png') expect(document.querySelector('img[alt="license.png预览"]')).not.toBeNull() }) + + it('does not duplicate the first page request when retrying from a later page', async () => { + const wrapper = mount(CustomerDetailView, { attachTo: document.body, global: { plugins: [pinia, ElementPlus] } }) + await flushPromises() + vi.mocked(listPlatformFirstLegOrders).mockRejectedValueOnce(new Error('暂时不可用')) + + const vm = wrapper.vm as unknown as { orderPage: number } + vm.orderPage = 2 + await flushPromises() + expect(listPlatformFirstLegOrders).toHaveBeenCalledTimes(2) + + const ordersTab = [...document.querySelectorAll('.detail-tabs button')] + .find((button) => button.textContent?.trim() === '运单记录') + ordersTab?.click() + await flushPromises() + const retryButton = [...document.querySelectorAll('button')] + .find((button) => button.textContent?.includes('重新加载')) + retryButton?.click() + await flushPromises() + + expect(listPlatformFirstLegOrders).toHaveBeenCalledTimes(3) + expect(listPlatformFirstLegOrders).toHaveBeenLastCalledWith({ tenantId: tenant.id, page: 1, size: 10 }) + }) }) diff --git a/src/modules/customers/pages/CustomerDetailView.vue b/src/modules/customers/pages/CustomerDetailView.vue index f6d2ef76..5d60b374 100644 --- a/src/modules/customers/pages/CustomerDetailView.vue +++ b/src/modules/customers/pages/CustomerDetailView.vue @@ -53,6 +53,7 @@ const orderPage = ref(1) const orderPageSize = ref(10) const customerOrdersLoading = ref(false) const customerOrdersError = ref(null) +let skipNextOrderPageLoad = false const previews = ref>({}) const previewOpen = ref(false) const previewName = ref('') @@ -195,6 +196,7 @@ async function loadDetail() { const optional: Promise[] = [] if (access.can('platform:order:list')) { + if (orderPage.value !== 1) skipNextOrderPageLoad = true orderPage.value = 1 customerOrders.value = [] customerOrderTotal.value = 0 @@ -254,6 +256,10 @@ function handleTabKeydown(event: KeyboardEvent, key: DetailTab) { onMounted(loadDetail) onBeforeUnmount(clearPreviews) watch(orderPage, (page, previousPage) => { + if (skipNextOrderPageLoad) { + skipNextOrderPageLoad = false + return + } if (page !== previousPage) void loadCustomerOrders(page) })