From c7ba96457adc87216c92086034e21d3cf2b78b17 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Mon, 31 Aug 2026 17:05:13 +0800 Subject: [PATCH] fix(admin): replace completed preload workspace tab --- .../pages/PreloadPlanDetailView.lifecycle.test.ts | 5 +++++ .../loading-lists/pages/PreloadPlanDetailView.test.ts | 1 + src/modules/loading-lists/pages/PreloadPlanDetailView.vue | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/modules/loading-lists/pages/PreloadPlanDetailView.lifecycle.test.ts b/src/modules/loading-lists/pages/PreloadPlanDetailView.lifecycle.test.ts index 02deec05..02b7b16c 100644 --- a/src/modules/loading-lists/pages/PreloadPlanDetailView.lifecycle.test.ts +++ b/src/modules/loading-lists/pages/PreloadPlanDetailView.lifecycle.test.ts @@ -6,11 +6,13 @@ import { getPreloadPlan } from '../api/platformLoadingLists' import PreloadPlanDetailView from './PreloadPlanDetailView.vue' const routerReplace = vi.hoisted(() => vi.fn()) +const removeWorkspaceTabs = vi.hoisted(() => vi.fn()) vi.mock('vue-router', () => ({ useRoute: () => ({ params: { planId: '1900000000000000001' }, query: { warehouseId: '1900000000000000002' } }), useRouter: () => ({ replace: routerReplace, push: vi.fn(), back: vi.fn() }), })) vi.mock('@/core/access/accessPreview', () => ({ useAccessPreviewStore: () => ({ can: () => true }) })) +vi.mock('@/core/workspace-tabs/workspaceTabs', () => ({ useWorkspaceTabsStore: () => ({ removeByIds: removeWorkspaceTabs }) })) vi.mock('../api/platformLoadingLists', () => ({ confirmPreloadPlan: vi.fn(), getPreloadPlan: vi.fn(), @@ -65,6 +67,8 @@ describe('PreloadPlanDetailView lifecycle handoff', () => { params: { planId: '1900000000000000001' }, query: { warehouseId: '1900000000000000002' }, }) + expect(removeWorkspaceTabs).toHaveBeenCalledWith(['preload-plan-detail']) + expect(routerReplace.mock.invocationCallOrder[0]).toBeLessThan(removeWorkspaceTabs.mock.invocationCallOrder[0]!) expect(message).toHaveBeenCalledWith('装柜已完成,已切换至装柜清单详情') expect(drawerError(wrapper)).toBeNull() expect(wrapper.findComponent({ name: 'LoadingListDetailDrawer' }).props('loading')).toBe(false) @@ -84,6 +88,7 @@ describe('PreloadPlanDetailView lifecycle handoff', () => { expect(getPreloadPlan).toHaveBeenCalledWith('1900000000000000001', '1900000000000000002') expect(routerReplace).not.toHaveBeenCalled() + expect(removeWorkspaceTabs).not.toHaveBeenCalled() expect(drawerError(wrapper)).toBeNull() }) diff --git a/src/modules/loading-lists/pages/PreloadPlanDetailView.test.ts b/src/modules/loading-lists/pages/PreloadPlanDetailView.test.ts index 1e0ae5ed..8230a4cd 100644 --- a/src/modules/loading-lists/pages/PreloadPlanDetailView.test.ts +++ b/src/modules/loading-lists/pages/PreloadPlanDetailView.test.ts @@ -25,6 +25,7 @@ describe('PreloadPlanDetailView prototype contract', () => { expect(source).toContain("lifecycle.detailResource === 'LOADING_LIST'") expect(source).toContain("lifecycle.planStatus !== 'COMPLETED'") expect(source).toContain("router.replace({ name: 'loading-list-detail'") + expect(source).toContain("workspace.removeByIds(['preload-plan-detail'])") expect(source).toContain('装柜已完成,已切换至装柜清单详情') expect(source).not.toContain("preloadError.code !== 'A0404'") expect(source).not.toContain('getConfirmedLoadingList') diff --git a/src/modules/loading-lists/pages/PreloadPlanDetailView.vue b/src/modules/loading-lists/pages/PreloadPlanDetailView.vue index df31bfc5..f9279729 100644 --- a/src/modules/loading-lists/pages/PreloadPlanDetailView.vue +++ b/src/modules/loading-lists/pages/PreloadPlanDetailView.vue @@ -9,12 +9,14 @@ import AppDialog from '@/shared/components/AppDialog.vue' import LoadErrorState from '@/shared/components/LoadErrorState.vue' import { getApiErrorDetails, http, unwrapApiResponse, type ApiEnvelope, type ApiErrorDetails } from '@/shared/api/http' import { useAccessPreviewStore } from '@/core/access/accessPreview' +import { useWorkspaceTabsStore } from '@/core/workspace-tabs/workspaceTabs' import LoadingListDetailDrawer from '../components/LoadingListDetailDrawer.vue' import { confirmPreloadPlan, getPreloadPlan, updateLoadingItemWarehouseRemark, updatePreloadTransport, type LoadingDetail, type LoadingItem, type PreloadSummary } from '../api/platformLoadingLists' const route = useRoute() const router = useRouter() const access = useAccessPreviewStore() +const workspace = useWorkspaceTabsStore() const loading = ref(false) const detail = ref | null>(null) const error = ref(null) @@ -93,6 +95,7 @@ async function loadDetail() { return } await router.replace({ name: 'loading-list-detail', params: { planId: planId.value }, query: { warehouseId: warehouseId.value } }) + workspace.removeByIds(['preload-plan-detail']) if (sequence === loadSequence) ElMessage.success('装柜已完成,已切换至装柜清单详情') return }