From 6354f5ca6622a96e4ec1db4eca12452260c6a382 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Tue, 4 Aug 2026 12:57:50 +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 --- .../api/platformFirstLegOrders.test.ts | 18 ++- .../api/platformFirstLegOrders.ts | 5 +- .../PlatformFirstLegOrdersPanel.test.ts | 34 +++++ .../PlatformFirstLegOrdersPanel.vue | 120 +++++++++++++----- 4 files changed, 139 insertions(+), 38 deletions(-) create mode 100644 src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.test.ts diff --git a/src/modules/first-leg-orders/api/platformFirstLegOrders.test.ts b/src/modules/first-leg-orders/api/platformFirstLegOrders.test.ts index 9bd69448..45d5d285 100644 --- a/src/modules/first-leg-orders/api/platformFirstLegOrders.test.ts +++ b/src/modules/first-leg-orders/api/platformFirstLegOrders.test.ts @@ -24,18 +24,30 @@ describe('platform first-leg order API', () => { vi.mocked(http.put).mockReset() }) - it('queries a tenant-scoped order page with server pagination and filters', async () => { + it('queries the cross-tenant review queue with one server-paginated request', async () => { const page = { records: [], page: 2, size: 20, total: 0, pages: 0 } vi.mocked(http.get).mockResolvedValue({ code: '200', message: 'success', data: page }) - await expect(listPlatformFirstLegOrders('10001', { + await expect(listPlatformFirstLegOrders({ keyword: 'FL2026', status: 'SUBMITTED', createdFrom: '2026-07-01T00:00:00', createdTo: '2026-07-31T23:59:59', page: 2, size: 20, })).resolves.toEqual(page) expect(http.get).toHaveBeenCalledWith('/platform/v1/orders/first-leg', { params: { - tenantId: '10001', keyword: 'FL2026', status: 'SUBMITTED', createdFrom: '2026-07-01T00:00:00', createdTo: '2026-07-31T23:59:59', page: 2, size: 20, + keyword: 'FL2026', status: 'SUBMITTED', createdFrom: '2026-07-01T00:00:00', createdTo: '2026-07-31T23:59:59', page: 2, size: 20, }, }) + expect(http.get).toHaveBeenCalledTimes(1) + }) + + it('adds the optional enterprise filter without changing server pagination', async () => { + const page = { records: [], page: 1, size: 20, total: 0, pages: 0 } + vi.mocked(http.get).mockResolvedValue({ code: '200', message: 'success', data: page }) + + await listPlatformFirstLegOrders({ tenantId: '2084455952401629185', status: 'SUBMITTED', page: 1, size: 20 }) + + expect(http.get).toHaveBeenCalledWith('/platform/v1/orders/first-leg', { + params: { tenantId: '2084455952401629185', status: 'SUBMITTED', page: 1, size: 20 }, + }) }) it('uses the platform lifecycle routes and target tenant query parameter', async () => { diff --git a/src/modules/first-leg-orders/api/platformFirstLegOrders.ts b/src/modules/first-leg-orders/api/platformFirstLegOrders.ts index b9ece137..4c974476 100644 --- a/src/modules/first-leg-orders/api/platformFirstLegOrders.ts +++ b/src/modules/first-leg-orders/api/platformFirstLegOrders.ts @@ -106,6 +106,7 @@ export interface PlatformFirstLegOrderPageResource { } export interface PlatformFirstLegOrderQuery { + tenantId?: string keyword?: string status?: PlatformFirstLegOrderStatus customerId?: string @@ -126,8 +127,8 @@ async function postData(path: string, body?: unknown, params?: Record('/platform/v1/orders/first-leg', { tenantId, ...query }) +export function listPlatformFirstLegOrders(query: PlatformFirstLegOrderQuery) { + return getData('/platform/v1/orders/first-leg', { ...query }) } export function getPlatformFirstLegOrder(tenantId: string, orderId: string) { diff --git a/src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.test.ts b/src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.test.ts new file mode 100644 index 00000000..6543d43d --- /dev/null +++ b/src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.test.ts @@ -0,0 +1,34 @@ +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('tenantName((row as PlatformFirstLegOrderResource).tenantId)') + expect(source).toContain('result.pages') + }) + + 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('passes the order tenant through detail and lifecycle actions', () => { + expect(source).toContain('tenantId: String(order.tenantId)') + expect(source).toContain('getPlatformFirstLegOrder(tenantId, orderId)') + expect(source).toContain('approvePlatformFirstLegOrder(tenantId, String(order.id))') + expect(source).not.toContain('loadedTenantId.value') + }) +}) diff --git a/src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.vue b/src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.vue index adc48f3b..9e11e1c7 100644 --- a/src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.vue +++ b/src/modules/first-leg-orders/components/PlatformFirstLegOrdersPanel.vue @@ -1,5 +1,5 @@