后台定价输入解析不再把小数与半截数字静默截断

- 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:补小数与尾随非数字字符的用例
This commit is contained in:
2026-09-24 17:20:12 +08:00
parent 7adf560f15
commit 84c5129225
2 changed files with 8 additions and 4 deletions
@@ -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);
});
@@ -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 而不是 parseIntparseInt 会把 `3.9` 截成 3、`12abc` 截成 12
// 等于把编辑中的半截输入静默当成合法值存下去。
const parsed = Number(value);
return Number.isInteger(parsed) && parsed > 0 ? parsed : 0;
}
export function isPositiveMudPoints(value: number | null | undefined) {