From 89da950c07546af93fe54216ed0764ff01d818ef Mon Sep 17 00:00:00 2001 From: WuYongJie Date: Mon, 13 Jul 2026 10:56:58 +0800 Subject: [PATCH] fix(intake): save pricing workspace explicitly --- .../useProductWorkflowRowController.ts | 6 ++- ...ntake-non-integrated-scope.service.test.ts | 39 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/furniture-3d-system/src/app/intake/non-integrated/workspaces/product-workflow/useProductWorkflowRowController.ts b/furniture-3d-system/src/app/intake/non-integrated/workspaces/product-workflow/useProductWorkflowRowController.ts index f125f2db..8ce02159 100644 --- a/furniture-3d-system/src/app/intake/non-integrated/workspaces/product-workflow/useProductWorkflowRowController.ts +++ b/furniture-3d-system/src/app/intake/non-integrated/workspaces/product-workflow/useProductWorkflowRowController.ts @@ -234,7 +234,10 @@ export function useProductWorkflowRowController({ const saved = await persistEditedProduct({ successMessage: "核价数据已保存,正在推送聚水潭", errorFallbackMessage: "推送前保存核价数据失败", - overrides: { pricingRows: currentPricingRows }, + overrides: { + pricingRows: currentPricingRows, + workspaceCategory: PRODUCT_PRICING_WORKSPACE_CATEGORY, + }, }); if (!saved) return; @@ -300,6 +303,7 @@ export function useProductWorkflowRowController({ errorFallbackMessage: "聚水潭推送成功,但保存录入状态失败", overrides: { pricingRows: nextPricingRows, + workspaceCategory: PRODUCT_PRICING_WORKSPACE_CATEGORY, ...(nextProductPricingCanBeConfirmed ? { documentWorkspaceConfirmations: nextConfirmations, diff --git a/furniture-3d-system/src/server/services/__tests__/intake-non-integrated-scope.service.test.ts b/furniture-3d-system/src/server/services/__tests__/intake-non-integrated-scope.service.test.ts index a1d60da0..6d0f748a 100644 --- a/furniture-3d-system/src/server/services/__tests__/intake-non-integrated-scope.service.test.ts +++ b/furniture-3d-system/src/server/services/__tests__/intake-non-integrated-scope.service.test.ts @@ -116,6 +116,45 @@ describe('IntakeNonIntegratedScopeService node permissions', () => { expect(() => service.assertCanPushProductPricing(otherRecord, externalUser)).toThrow() }) + it('reports unsaved product factory target SKU rows as validation failures', async () => { + const externalUser: AuthUser = { + id: 'external-user-id', + email: 'external@example.local', + name: 'ExternalUser', + role: 'USER', + status: 'ACTIVE', + businessRoles: ['EXTERNAL_INTAKE'], + departmentPaths: [], + } + const ownRecord = { + id: 'own-record', + createdBy: 'external-user-id', + designer: '', + operator: '', + purchaser: '', + visibility: 'DEPARTMENT', + departmentId: null, + teamId: null, + payload: {}, + profile: null, + skuItems: [ + { + skuItemId: 'saved-sku-id', + purchaseOwner: 'ExternalUser', + }, + ], + } + + await expect( + service.assertCanWriteRecord( + ownRecord, + externalUser, + '\u4ea7\u54c1\u5b9a\u5382', + ['saved-sku-id', 'unsaved-sku-id'], + ), + ).rejects.toThrow('SKU 尚未保存') + }) + it('uses stored payload owner fields when structured profile data is missing', async () => { const record = { id: 'payload-backed-owner-record',