From 568f2dea8a7274b68cd00c4ae910a9ffaf6f48ba Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Thu, 10 Sep 2026 14:41:47 +0800 Subject: [PATCH] fix(admin): remove duplicate loading list heading --- .../ContainerDetailView.emptyReturn.behavior.test.ts | 7 ++++++- .../pages/ContainerDetailView.test.ts | 2 ++ .../container-loading/pages/ContainerDetailView.vue | 11 ++++++++--- .../components/LoadingListDetailDrawer.vue | 6 ++++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/modules/container-loading/pages/ContainerDetailView.emptyReturn.behavior.test.ts b/src/modules/container-loading/pages/ContainerDetailView.emptyReturn.behavior.test.ts index c6293ed9..87653a42 100644 --- a/src/modules/container-loading/pages/ContainerDetailView.emptyReturn.behavior.test.ts +++ b/src/modules/container-loading/pages/ContainerDetailView.emptyReturn.behavior.test.ts @@ -14,7 +14,7 @@ const routeState = vi.hoisted(() => ({ params: { containerId: '9001' }, query: { const routerPush = vi.hoisted(() => vi.fn()) vi.mock('@/core/access/accessPreview', () => ({ useAccessPreviewStore: () => ({ can: canAccess }) })) vi.mock('vue-router', () => ({ useRoute: () => routeState, useRouter: () => ({ push: routerPush }) })) -vi.mock('@/modules/loading-lists', () => ({ ContainerFeesPanel: { template: '
' }, LoadingListDetailDrawer: { name: 'LoadingListDetailDrawer', props: ['detail', 'error', 'loading'], template: '
{{ detail?.planNo }}
' }, PalletLabelPrintDialog: { template: '
' }, getConfirmedLoadingList: vi.fn(), getPreloadPlan: vi.fn() })) +vi.mock('@/modules/loading-lists', () => ({ ContainerFeesPanel: { template: '
' }, LoadingListDetailDrawer: { name: 'LoadingListDetailDrawer', props: ['detail', 'error', 'loading', 'mode', 'embedded'], template: '
{{ detail?.planNo }}
' }, PalletLabelPrintDialog: { template: '
' }, getConfirmedLoadingList: vi.fn(), getPreloadPlan: vi.fn() })) vi.mock('@/modules/ocean-bookings', () => ({ listOceanBookingLinkCandidates: vi.fn() })) vi.mock('@/modules/outbound-dispatch', () => ({ confirmContainerOutboundDispatch: vi.fn(), getContainerOutboundDispatch: vi.fn() })) vi.mock('@/modules/port-schedules', () => ({ CarrierScheduleQueryPanel: { template: '
' } })) @@ -140,6 +140,11 @@ describe('domestic container loading list and booking link', () => { expect(tabs.find((tab) => tab.attributes('aria-selected') === 'true')?.text()).toBe(permitted ? '装柜清单' : '送柜报关') expect(getPreloadPlan).toHaveBeenCalledTimes(permitted && planStatus !== 'COMPLETED' ? 1 : 0) expect(getConfirmedLoadingList).toHaveBeenCalledTimes(permitted && planStatus === 'COMPLETED' ? 1 : 0) + if (permitted) { + const drawer = wrapper.findComponent({ name: 'LoadingListDetailDrawer' }) + expect(drawer.props('mode')).toBe(planStatus === 'COMPLETED' ? 'confirmed' : 'preload') + expect(drawer.props('embedded')).not.toBeUndefined() + } wrapper.unmount() } } diff --git a/src/modules/container-loading/pages/ContainerDetailView.test.ts b/src/modules/container-loading/pages/ContainerDetailView.test.ts index 66b00fb3..c871f0cd 100644 --- a/src/modules/container-loading/pages/ContainerDetailView.test.ts +++ b/src/modules/container-loading/pages/ContainerDetailView.test.ts @@ -34,6 +34,8 @@ describe('ContainerDetailView customs integration', () => { expect(source).toContain('getPreloadPlan') expect(source).toContain('label="装柜清单"') expect(source).toContain('打印装柜清单') + expect(source).toContain("const loadingListMode = computed(() => detail.value?.planStatus === 'COMPLETED' ? 'confirmed' : 'preload')") + expect(source).toContain(' { } as Record)[status || ''] || '海外履约中' }) const primaryStatusText = computed(() => isDomestic.value ? statusText(detail.value?.planStatus) : overseasStageText.value) +const loadingListMode = computed(() => detail.value?.planStatus === 'COMPLETED' ? 'confirmed' : 'preload') +const loadingListHeading = computed(() => loadingListMode.value === 'confirmed' ? '装柜清单' : '预装清单') +const loadingListDescription = computed(() => loadingListMode.value === 'confirmed' + ? '装柜明细、PDA 证据与报关关联均以当前柜次为边界。' + : '核对预装明细与 PDA 作业准备情况,装柜完成后再处理整柜报关。') const overseasDestinationText = computed(() => [detail.value?.destinationWarehouseCode, detail.value?.destinationWarehouseName].filter(Boolean).join(' / ') || '—') const emptyReturnWarningText = computed(() => { const warning = workbenchDetail.value?.terminalDrayage?.emptyReturnWarning @@ -543,10 +548,10 @@ onMounted(async () => { await load(); if (isOverseas.value && route.query.action
-

装柜清单

清单明细、PDA 证据与报关关联均以当前柜次为边界。

打印装柜清单
+

{{ loadingListHeading }}

{{ loadingListDescription }}

打印装柜清单
- +
diff --git a/src/modules/loading-lists/components/LoadingListDetailDrawer.vue b/src/modules/loading-lists/components/LoadingListDetailDrawer.vue index 4e354a13..6d874e16 100644 --- a/src/modules/loading-lists/components/LoadingListDetailDrawer.vue +++ b/src/modules/loading-lists/components/LoadingListDetailDrawer.vue @@ -17,6 +17,7 @@ const props = defineProps<{ detail: LoadingDetail | null error: ApiErrorDetails | null canEdit: boolean + embedded?: boolean canEditTransport?: boolean transportNote?: string confirmSaving?: boolean @@ -145,9 +146,9 @@ function formatNumber(value?: number | null, digits = 3) {