From 1305753b715811516217b4f8bad6e0bf4c981437 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sun, 20 Sep 2026 10:06:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/navigation/adminNavigation.test.ts | 2 +- src/core/navigation/adminNavigation.ts | 2 +- src/modules/container-loading/routes.ts | 2 +- .../pages/UnifiedOrdersView.coLoad.test.ts | 15 ++++++++++++++- .../pages/UnifiedOrdersView.test.ts | 2 ++ .../unified-orders/pages/UnifiedOrdersView.vue | 11 +++++++++-- 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/core/navigation/adminNavigation.test.ts b/src/core/navigation/adminNavigation.test.ts index eec419ae..79180a7d 100644 --- a/src/core/navigation/adminNavigation.test.ts +++ b/src/core/navigation/adminNavigation.test.ts @@ -41,7 +41,7 @@ describe('adminNavigation', () => { expect(adminNavigation.find((item) => item.key === 'container-management')?.children?.map((item) => item.title)).toEqual([ '订舱列表', '拖车列表', - '送柜报关', + '货柜列表', '清关提柜', ]) expect(adminNavigation.find((item) => item.key === 'overseas-inventory')?.children?.map((item) => item.title)).toEqual([ diff --git a/src/core/navigation/adminNavigation.ts b/src/core/navigation/adminNavigation.ts index e4c2b908..e5574aef 100644 --- a/src/core/navigation/adminNavigation.ts +++ b/src/core/navigation/adminNavigation.ts @@ -91,7 +91,7 @@ export const adminNavigation: AdminNavigationNode[] = [ children: [ { key: 'booking-list', title: '订舱列表', icon: ClipboardList, path: '/ocean-bookings', permission: 'platform:firstleg:ocean-booking:list' }, { key: 'truck-list', title: '拖车列表', icon: Truck, path: '/trucking', permission: 'platform:firstleg:truck-appointment:list' }, - { key: 'domestic-container-workbench', title: '送柜报关', icon: WarehouseIcon, path: '/container-loading/domestic', permission: 'platform:firstleg:container:list' }, + { key: 'domestic-container-workbench', title: '货柜列表', icon: WarehouseIcon, path: '/container-loading/domestic', permission: 'platform:firstleg:container:list' }, { key: 'overseas-container-workbench', title: '清关提柜', icon: ClipboardList, path: '/container-loading/overseas', permission: 'platform:firstleg:terminal-drayage:list' }, ], }, diff --git a/src/modules/container-loading/routes.ts b/src/modules/container-loading/routes.ts index c7c45dd4..a7e6c5d9 100644 --- a/src/modules/container-loading/routes.ts +++ b/src/modules/container-loading/routes.ts @@ -5,7 +5,7 @@ export const containerLoadingRoutes = [ path: 'container-loading/domestic', name: 'domestic-container-workbench', component: () => import('./pages/DomesticContainersView.vue'), - meta: { title: '送柜报关', description: '管理国内送柜、装柜、出口报关与出仓', permission: 'platform:firstleg:container:list' }, + meta: { title: '货柜列表', description: '管理国内送柜、装柜、出口报关与出仓', permission: 'platform:firstleg:container:list' }, }, { path: 'container-loading/domestic/:containerId', diff --git a/src/modules/unified-orders/pages/UnifiedOrdersView.coLoad.test.ts b/src/modules/unified-orders/pages/UnifiedOrdersView.coLoad.test.ts index 3852fc22..f2551cba 100644 --- a/src/modules/unified-orders/pages/UnifiedOrdersView.coLoad.test.ts +++ b/src/modules/unified-orders/pages/UnifiedOrdersView.coLoad.test.ts @@ -39,7 +39,7 @@ function mountView() { AdminPage: { template: '
' }, ListPageLayout: { template: '
' }, QueryToolbar: { template: '
' }, - DataTable: { name: 'DataTable', props: ['data', 'columns'], emits: ['selection-change'], template: '
' }, + DataTable: { name: 'DataTable', props: ['data', 'columns', 'rowClassName'], emits: ['selection-change'], template: '
' }, AppDialog: { name: 'AppDialog', props: ['modelValue', 'confirmText', 'confirmDisabled', 'confirmLoading'], emits: ['confirm', 'update:modelValue'], methods: { close() { this.$emit('update:modelValue', false) } }, template: '
' }, ApiErrorMeta: { props: ['details'], template: '
{{ details.code }} {{ details.requestId }} {{ details.traceId }}
' }, CopyButton: { props: ['value', 'label'], template: '' }, @@ -199,6 +199,19 @@ describe('UnifiedOrdersView co-load group behavior', () => { expect(wrapper.text()).not.toContain('5001') }) + it('highlights rows in a current co-load group but not cancelled groups', async () => { + const activeRow = { ...rows[0], coLoadGroup: { status: 'ACTIVE', memberCount: 2, memberInboundCodes: ['IN-1', 'IN-2'] } } + const cancelledRow = { ...rows[1], coLoadGroup: { status: 'CANCELLED', memberCount: 2, memberInboundCodes: ['IN-1', 'IN-2'] } } + vi.mocked(listPlatformUnifiedOrders).mockResolvedValue({ records: [activeRow, cancelledRow], page: 1, size: 20, total: 2, pages: 1 }) + const wrapper = mountView() + await flushPromises() + const rowClassName = wrapper.findComponent({ name: 'DataTable' }).props('rowClassName') as (scope: { row: UnifiedOrderResource }) => string + + expect(rowClassName({ row: activeRow })).toBe('is-coload-group-row') + expect(rowClassName({ row: cancelledRow })).toBe('') + expect(rowClassName({ row: rows[0] })).toBe('') + }) + it('cancels an ACTIVE group by the clicked member inbound code and preserves dialog error evidence', async () => { const rowsWithGroup = rows.map((row) => ({ ...row, coLoadGroup: { status: 'ACTIVE', memberCount: 2, memberInboundCodes: ['IN-1', 'IN-2'] } })) vi.mocked(listPlatformUnifiedOrders).mockResolvedValue({ records: rowsWithGroup, page: 1, size: 20, total: 2, pages: 1 }) diff --git a/src/modules/unified-orders/pages/UnifiedOrdersView.test.ts b/src/modules/unified-orders/pages/UnifiedOrdersView.test.ts index f37ad3c5..7249a96e 100644 --- a/src/modules/unified-orders/pages/UnifiedOrdersView.test.ts +++ b/src/modules/unified-orders/pages/UnifiedOrdersView.test.ts @@ -232,6 +232,8 @@ describe('UnifiedOrdersView contract', () => { expect(source).toContain("{ key: 'detail', label: '详情', priority: 500 }") expect(source).toContain('...unifiedOrderSecondaryActions(row).map') expect(source).toContain(' { diff --git a/src/modules/unified-orders/pages/UnifiedOrdersView.vue b/src/modules/unified-orders/pages/UnifiedOrdersView.vue index 95a4b80e..86f0e4ff 100644 --- a/src/modules/unified-orders/pages/UnifiedOrdersView.vue +++ b/src/modules/unified-orders/pages/UnifiedOrdersView.vue @@ -1811,6 +1811,10 @@ function coLoadGroup(row: UnifiedOrderResource) { return row.coLoadGroup || null } +function unifiedOrderRowClassName({ row }: { row: UnifiedOrderResource }) { + return row.coLoadGroup && row.coLoadGroup.status !== 'CANCELLED' ? 'is-coload-group-row' : '' +} + function coLoadGroupMemberLabel(group: CoLoadGroup) { const orderCount = new Set(group.members.map((member) => member.orderId)).size return group.members.length === orderCount @@ -2009,7 +2013,7 @@ function moreUnifiedOrderActionsLabel(row: UnifiedOrderResource) { } function unifiedOrderActionLabel(action: UnifiedOrderRowAction) { if (action === 'note') return '备注' - if (action === 'approve') return '通过' + if (action === 'approve') return '审核' return '测量' } function unifiedOrderRowActions(row: UnifiedOrderResource): RowActionItem[] { @@ -2648,7 +2652,7 @@ onBeforeUnmount(() => {