From 84c5129225f8e616bd659029b7aa78a1bedddfae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 24 Sep 2026 17:20:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E5=AE=9A=E4=BB=B7=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E8=A7=A3=E6=9E=90=E4=B8=8D=E5=86=8D=E6=8A=8A=E5=B0=8F?= =?UTF-8?q?=E6=95=B0=E4=B8=8E=E5=8D=8A=E6=88=AA=E6=95=B0=E5=AD=97=E9=9D=99?= =?UTF-8?q?=E9=BB=98=E6=88=AA=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - apps/admin-web/src/pages/adminEditorGenerationPricing.ts:parsePositiveInteger 改用 Number + Number.isInteger,`3.9`、`12abc` 这类输入收敛成 0 交给提交前校验,而不是截成 3 / 12 - apps/admin-web/src/pages/adminEditorGenerationPricing.test.ts:补小数与尾随非数字字符的用例 --- .../src/pages/adminEditorGenerationPricing.test.ts | 4 +++- apps/admin-web/src/pages/adminEditorGenerationPricing.ts | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/admin-web/src/pages/adminEditorGenerationPricing.test.ts b/apps/admin-web/src/pages/adminEditorGenerationPricing.test.ts index b4fc133a6..f0b62b7e2 100644 --- a/apps/admin-web/src/pages/adminEditorGenerationPricing.test.ts +++ b/apps/admin-web/src/pages/adminEditorGenerationPricing.test.ts @@ -28,10 +28,12 @@ function pricingFixture(): EditorGenerationPricingConfigPayload { }; } -test('数值解析把空串、非数字与 0 收敛成 0', () => { +test('数值解析把空串、非数字、小数与 0 收敛成 0', () => { expect(parsePositiveInteger('12')).toBe(12); expect(parsePositiveInteger('')).toBe(0); expect(parsePositiveInteger('abc')).toBe(0); + expect(parsePositiveInteger('12abc')).toBe(0); + expect(parsePositiveInteger('3.9')).toBe(0); expect(parsePositiveInteger('0')).toBe(0); expect(parsePositiveInteger('-3')).toBe(0); }); diff --git a/apps/admin-web/src/pages/adminEditorGenerationPricing.ts b/apps/admin-web/src/pages/adminEditorGenerationPricing.ts index 677a62325..69f0b0054 100644 --- a/apps/admin-web/src/pages/adminEditorGenerationPricing.ts +++ b/apps/admin-web/src/pages/adminEditorGenerationPricing.ts @@ -31,10 +31,12 @@ export function editorModel3dAddOnLabel(addOn: string) { return EDITOR_MODEL3D_ADD_ON_LABELS[addOn] ?? addOn; } -/** 输入框文本转整数;空串、非数字、0 与负数一律收敛成 0,交给提交前校验拦住。 */ +/** 输入框文本转整数;空串、非数字、小数、0 与负数一律收敛成 0,交给提交前校验拦住。 */ export function parsePositiveInteger(value: string) { - const parsed = Number.parseInt(value, 10); - return Number.isFinite(parsed) && parsed > 0 ? parsed : 0; + // 用 Number 而不是 parseInt:parseInt 会把 `3.9` 截成 3、`12abc` 截成 12, + // 等于把编辑中的半截输入静默当成合法值存下去。 + const parsed = Number(value); + return Number.isInteger(parsed) && parsed > 0 ? parsed : 0; } export function isPositiveMudPoints(value: number | null | undefined) {