From ec3dbb3fe47a731248b39f737261c71a2c87b6d0 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Mon, 17 Aug 2026 18:00:42 +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/app/router/index.ts | 2 - src/core/navigation/adminNavigation.ts | 1 - .../api/platformFirstLegOrders.test.ts | 17 - .../api/platformFirstLegOrders.ts | 22 - .../PlatformFirstLegOrdersPanel.test.ts | 130 --- .../PlatformFirstLegOrdersPanel.vue | 744 ------------------ .../pages/FirstLegOrdersView.vue | 7 - src/modules/first-leg-orders/routes.ts | 10 - .../components/InboundTaskList.test.ts | 12 + .../inbounds/components/InboundTaskList.vue | 61 +- .../InboundWorkflowWorkspace.test.ts | 6 +- .../MeasurementEvidenceThumbnail.test.ts | 27 + .../MeasurementEvidenceThumbnail.vue | 2 +- .../review/MeasurementReviewPanel.test.ts | 22 +- .../review/MeasurementReviewPanel.vue | 9 +- .../components/WeightImageThumbnail.vue | 1 + .../WeightOcrPanel.behavior.test.ts | 5 +- .../weight/components/WeightOcrPanel.test.ts | 5 +- .../weight/components/WeightOcrPanel.vue | 9 +- .../unified-orders/api/unifiedOrders.test.ts | 18 + .../unified-orders/api/unifiedOrders.ts | 16 + .../pages/UnifiedOrdersView.test.ts | 36 +- .../pages/UnifiedOrdersView.vue | 244 +++++- 23 files changed, 407 insertions(+), 999 deletions(-) delete mode 100644 src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.test.ts delete mode 100644 src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.vue delete mode 100644 src/modules/first-leg-orders/pages/FirstLegOrdersView.vue delete mode 100644 src/modules/first-leg-orders/routes.ts create mode 100644 src/modules/inbounds/measurement/components/MeasurementEvidenceThumbnail.test.ts diff --git a/src/app/router/index.ts b/src/app/router/index.ts index 46ff10a7..8d3cc627 100644 --- a/src/app/router/index.ts +++ b/src/app/router/index.ts @@ -4,7 +4,6 @@ import AppLayout from '@/app/layouts/AppLayout.vue' import { decideRouteAccess } from '@/core/routing/accessDecision' import { useAccessPreviewStore } from '@/core/access/accessPreview' import { downloadRoutes } from '@/modules/downloads/routes' -import { firstLegOrderRoutes } from '@/modules/first-leg-orders/routes' import { inboundRoutes } from '@/modules/inbounds/routes' import { unifiedOrderRoutes } from '@/modules/unified-orders/routes' import { fbaPricingRoutes } from '@/modules/fba-pricing/routes' @@ -62,7 +61,6 @@ const router = createRouter({ ...customerRoutes, ...warehouseRoutes, ...unifiedOrderRoutes, - ...firstLegOrderRoutes, ...inboundRoutes, ...fbaPricingRoutes, ...warehouseResourceRoutes, diff --git a/src/core/navigation/adminNavigation.ts b/src/core/navigation/adminNavigation.ts index 919c88e0..a25c227d 100644 --- a/src/core/navigation/adminNavigation.ts +++ b/src/core/navigation/adminNavigation.ts @@ -160,7 +160,6 @@ export const adminNavigation: AdminNavigationNode[] = [ title: '通用', icon: PrototypeGeneralIcon, children: [ - // { key: 'first-leg-orders', title: '头程订单', icon: ClipboardList, path: '/orders/first-leg', permission: 'platform:order:list', hidden: true }, { key: 'general-product', title: '产品信息', icon: Database, path: '/prototype/general/product-information', hidden: true }, { key: 'general-fee', title: '费用项目', icon: Database, path: '/master-data/fee-items', permission: 'firstleg:fee-item:view' }, { key: 'warehouses', title: '仓库管理', icon: WarehouseIcon, path: '/warehouses', permission: 'platform:warehouse:list' }, diff --git a/src/modules/first-leg-orders/api/platformFirstLegOrders.test.ts b/src/modules/first-leg-orders/api/platformFirstLegOrders.test.ts index 05d3e156..c76bf7a8 100644 --- a/src/modules/first-leg-orders/api/platformFirstLegOrders.test.ts +++ b/src/modules/first-leg-orders/api/platformFirstLegOrders.test.ts @@ -5,7 +5,6 @@ import { acceptPlatformFirstLegOrder, addPlatformFirstLegOrderNote, approvePlatformFirstLegOrder, - batchApprovePlatformFirstLegOrders, cancelPlatformFirstLegOrder, completePlatformFirstLegOrder, getPlatformFirstLegOrder, @@ -97,22 +96,6 @@ describe('platform first-leg order API', () => { expect(http.post).toHaveBeenNthCalledWith(6, '/platform/v1/orders/first-leg/90001/internal-notes', { content: '已联系客户确认' }, { params: { tenantId: '10001' } }) }) - it('uses the formal tenant-scoped batch approval contract and preserves long order ids', async () => { - vi.mocked(http.post).mockResolvedValue({ - code: '200', message: 'success', - data: { total: 2, successCount: 1, failureCount: 1, successOrderIds: ['2089223263733518337'], failedOrders: [{ orderId: '2089223263733518338', code: 'A0409', message: '订单状态已变化' }] }, - }) - - await expect(batchApprovePlatformFirstLegOrders('2089176869176389634', [ - '2089223263733518337', '2089223263733518338', - ])).resolves.toMatchObject({ total: 2, successCount: 1, failureCount: 1 }) - expect(http.post).toHaveBeenCalledWith( - '/platform/v1/orders/first-leg/batch-approve', - { orderIds: ['2089223263733518337', '2089223263733518338'] }, - { params: { tenantId: '2089176869176389634' } }, - ) - }) - it('writes the backend express contract as names, not a guessed master-data ID', async () => { vi.mocked(http.put).mockResolvedValue({ code: '200', message: 'success', data: null }) diff --git a/src/modules/first-leg-orders/api/platformFirstLegOrders.ts b/src/modules/first-leg-orders/api/platformFirstLegOrders.ts index 7d2479e8..22ce4117 100644 --- a/src/modules/first-leg-orders/api/platformFirstLegOrders.ts +++ b/src/modules/first-leg-orders/api/platformFirstLegOrders.ts @@ -115,20 +115,6 @@ export interface PlatformTenantOrderStatistics { asOf: string } -export interface PlatformOrderBatchReviewFailure { - orderId: number | string - code: string - message: string -} - -export interface PlatformOrderBatchReviewResult { - total: number - successCount: number - failureCount: number - successOrderIds: Array - failedOrders: PlatformOrderBatchReviewFailure[] -} - type PlatformFirstLegOrderPagePayload = Omit & { page: number | string size: number | string @@ -190,14 +176,6 @@ export function approvePlatformFirstLegOrder(tenantId: string, orderId: string) return postData(`/platform/v1/orders/first-leg/${orderId}/approve`, undefined, { tenantId }) } -export function batchApprovePlatformFirstLegOrders(tenantId: string, orderIds: string[]) { - return postData( - '/platform/v1/orders/first-leg/batch-approve', - { orderIds }, - { tenantId }, - ) -} - export function acceptPlatformFirstLegOrder(tenantId: string, orderId: string) { return postData(`/platform/v1/orders/first-leg/${orderId}/accept`, undefined, { tenantId }) } diff --git a/src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.test.ts b/src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.test.ts deleted file mode 100644 index 3f6f7c52..00000000 --- a/src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.test.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { readFileSync } from 'node:fs' -import { resolve } from 'node:path' -import { describe, expect, it } from 'vitest' - -const source = readFileSync(resolve(process.cwd(), 'src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.vue'), 'utf8') - -describe('PlatformFirstLegOrdersPanel review queue', () => { - it('loads one cross-tenant page by default and keeps enterprise as an optional filter', () => { - expect(source).toContain("status: 'SUBMITTED'") - expect(source).toContain("tenantId: filters.value.tenantId || undefined") - expect(source).toContain('listPlatformTenants') - expect(source).toContain("key: 'tenantId'") - expect(source).toContain('customerDisplay(row as PlatformFirstLegOrderResource).name') - expect(source).toContain('result.pages') - - const queryFieldsSource = source.slice(source.indexOf('const queryFields'), source.indexOf('const orderColumns')) - expect(source).toContain("listPlatformTenants({ page: currentPage, size: 200, status: 'ACTIVE' })") - expect(queryFieldsSource).toContain("key: 'tenantId'") - expect(queryFieldsSource).toContain("type: 'select'") - expect(queryFieldsSource).toContain('filterable: true') - expect(queryFieldsSource).toContain('tenant.legalName?.trim() || tenant.tenantName') - expect(queryFieldsSource).not.toContain('tenantCode') - expect(queryFieldsSource).not.toContain('客户编码') - }) - - it('does not retain the historical fixed tenant', () => { - expect(source).not.toContain('PlatformTenantSelector') - expect(source).not.toContain('selectedTenantId') - }) - - it('resets to the pending review queue instead of all statuses', () => { - expect(source).toContain(':search-on-reset="false"') - expect(source).toContain("filters.value = { ...filters.value, status: 'SUBMITTED' }") - expect(source).toContain('await nextTick()') - }) - - it('supports tenant-aware batch approval with partial failure feedback', () => { - expect(source).toContain("key: 'selection', type: 'selection'") - expect(source).toContain("row.status === 'SUBMITTED' && !batchReviewLoading.value") - expect(source).toContain('@selection-change="handleReviewSelectionChange"') - expect(source).toContain('