diff --git a/apps/admin-web/src/pages/AdminRechargeProductPage.tsx b/apps/admin-web/src/pages/AdminRechargeProductPage.tsx index 84c2d714c..695bef442 100644 --- a/apps/admin-web/src/pages/AdminRechargeProductPage.tsx +++ b/apps/admin-web/src/pages/AdminRechargeProductPage.tsx @@ -19,7 +19,7 @@ import { } from '../api/adminApiClient'; import type { ProfileRechargeProductConfigAdminResponse } from '../api/adminApiTypes'; import { useAdminWriteConfirm } from '../components/useAdminWriteConfirm'; -import { handlePageError, parsePositiveIntegerOrZero } from './pageUtils'; +import { handlePageError, parsePositiveInteger } from './pageUtils'; interface AdminRechargeProductPageProps { token: string; @@ -117,6 +117,13 @@ export function AdminRechargeProductPage({ } setErrorMessage(''); + // 中文注释:价格分与基础泥点必须是正整数;空串/非法输入不能静默落库成 0。 + const normalizedPriceCents = parsePositiveInteger(priceCents); + const normalizedPointsAmount = parsePositiveInteger(pointsAmount); + if (normalizedPriceCents === null || normalizedPointsAmount === null) { + setErrorMessage('价格分与基础泥点必须是大于 0 的整数'); + return; + } const confirmed = await confirmWrite({ action: enabled ? '保存充值商品' : '停用充值商品', target: productId.trim(), @@ -130,9 +137,9 @@ export function AdminRechargeProductPage({ const response = await upsertProfileRechargeProduct(token, { productId: productId.trim(), title: title.trim(), - priceCents: parsePositiveIntegerOrZero(priceCents), + priceCents: normalizedPriceCents, kind: 'points', - pointsAmount: parsePositiveIntegerOrZero(pointsAmount), + pointsAmount: normalizedPointsAmount, badgeLabel: badgeLabel.trim(), description: description.trim(), enabled,