diff --git a/src/components/image-editor/model3d-generation/Model3dGenerationFormModel.test.ts b/src/components/image-editor/model3d-generation/Model3dGenerationFormModel.test.ts index c22199f3b..4cdad8ba0 100644 --- a/src/components/image-editor/model3d-generation/Model3dGenerationFormModel.test.ts +++ b/src/components/image-editor/model3d-generation/Model3dGenerationFormModel.test.ts @@ -1,6 +1,9 @@ import { describe, expect, it } from 'vitest'; -import type { Model3dTextureQuality } from '../../../../packages/shared/src/contracts/model3d'; +import type { + Model3dModelVersion, + Model3dTextureQuality, +} from '../../../../packages/shared/src/contracts/model3d'; import type { Model3dAddOnPriceKey, Model3dPricingConfig, @@ -257,6 +260,10 @@ describe('模型版本', () => { expect(resolveModel3dModelVersion(undefined)).toBe( DEFAULT_MODEL3D_MODEL_VERSION, ); + // 老快照里存着已退役版本时,报价与提交也必须一起回落到默认版本,而不是查表抛异常。 + expect( + resolveModel3dModelVersion('v1.0-20190101' as Model3dModelVersion), + ).toBe(DEFAULT_MODEL3D_MODEL_VERSION); expect(normalizeModel3dModelVersion(' P2-20260801 ')).toBe('P2-20260801'); // 老快照里的退役版本不发给服务端。 expect(normalizeModel3dModelVersion('v1.0-20190101')).toBe( diff --git a/src/components/image-editor/model3d-generation/Model3dGenerationFormModel.ts b/src/components/image-editor/model3d-generation/Model3dGenerationFormModel.ts index e276ef885..0c274eaec 100644 --- a/src/components/image-editor/model3d-generation/Model3dGenerationFormModel.ts +++ b/src/components/image-editor/model3d-generation/Model3dGenerationFormModel.ts @@ -202,11 +202,16 @@ export function resolveModel3dGenerationParams({ return { ok: true, params }; } -/** 提交与报价共用的模型版本:缺字段(老快照)时回落到默认版本。 */ +/** + * 提交与报价共用的模型版本:缺字段(老快照)或存的是已退役版本时回落到默认版本。 + * + * 收敛必须发生在读表之前:`resolveModel3dModelFamily` 直接按版本查表,契约里没有的版本会抛异常, + * 面板、报价与提交体因此都得走同一个入口。 + */ export function resolveModel3dModelVersion( model: Model3dModelVersion | null | undefined, ): Model3dModelVersion { - return model ?? DEFAULT_MODEL3D_MODEL_VERSION; + return normalizeModel3dModelVersion(model); } /**