From 5157ec1784a628cd9149c63019c586086825e802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sat, 3 Oct 2026 17:58:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=90=8E=E5=8F=B0=E5=85=85=E5=80=BC?= =?UTF-8?q?=E5=95=86=E5=93=81):=20=E5=88=97=E8=A1=A8=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=E6=97=B6=E9=87=8D=E7=BD=AE=E8=A1=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 抽出 DEFAULT_RECHARGE_PRODUCT_FORM 并让新建表单初始化与 resetForm 共用。 - 过滤后没有泥点商品时调用 resetForm,避免表单残留上一次选中或已删除商品的旧值被误保存。 --- .../src/pages/AdminRechargeProductPage.tsx | 60 ++++++++++++++++--- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/apps/admin-web/src/pages/AdminRechargeProductPage.tsx b/apps/admin-web/src/pages/AdminRechargeProductPage.tsx index a0bba36bb..d21f11de3 100644 --- a/apps/admin-web/src/pages/AdminRechargeProductPage.tsx +++ b/apps/admin-web/src/pages/AdminRechargeProductPage.tsx @@ -32,6 +32,19 @@ interface AdminRechargeProductPageProps { onResultChange: (result: ProfileRechargeProductConfigAdminResponse) => void; } +/** 新建泥点商品时的表单默认值;列表为空时回填它,避免残留上一次选中项。 */ +const DEFAULT_RECHARGE_PRODUCT_FORM = { + productId: 'points_60', + title: '60泥点', + priceCents: '600', + pointsAmount: '60', + bonusPoints: '0', + badgeLabel: '', + description: '60泥点', + enabled: true, + sortOrder: '0', +}; + /** * 泥点充值商品。 * @@ -47,15 +60,29 @@ export function AdminRechargeProductPage({ const [entries, setEntries] = useState< ProfileRechargeProductConfigAdminResponse[] >([]); - const [productId, setProductId] = useState('points_60'); - const [title, setTitle] = useState('60泥点'); - const [priceCents, setPriceCents] = useState('600'); - const [pointsAmount, setPointsAmount] = useState('60'); - const [bonusPoints, setBonusPoints] = useState('0'); - const [badgeLabel, setBadgeLabel] = useState(''); - const [description, setDescription] = useState('60泥点'); - const [enabled, setEnabled] = useState(true); - const [sortOrder, setSortOrder] = useState('0'); + const [productId, setProductId] = useState( + DEFAULT_RECHARGE_PRODUCT_FORM.productId, + ); + const [title, setTitle] = useState(DEFAULT_RECHARGE_PRODUCT_FORM.title); + const [priceCents, setPriceCents] = useState( + DEFAULT_RECHARGE_PRODUCT_FORM.priceCents, + ); + const [pointsAmount, setPointsAmount] = useState( + DEFAULT_RECHARGE_PRODUCT_FORM.pointsAmount, + ); + const [bonusPoints, setBonusPoints] = useState( + DEFAULT_RECHARGE_PRODUCT_FORM.bonusPoints, + ); + const [badgeLabel, setBadgeLabel] = useState( + DEFAULT_RECHARGE_PRODUCT_FORM.badgeLabel, + ); + const [description, setDescription] = useState( + DEFAULT_RECHARGE_PRODUCT_FORM.description, + ); + const [enabled, setEnabled] = useState(DEFAULT_RECHARGE_PRODUCT_FORM.enabled); + const [sortOrder, setSortOrder] = useState( + DEFAULT_RECHARGE_PRODUCT_FORM.sortOrder, + ); const [isLoading, setIsLoading] = useState(false); const [isSaving, setIsSaving] = useState(false); const [listErrorMessage, setListErrorMessage] = useState(''); @@ -80,6 +107,9 @@ export function AdminRechargeProductPage({ const firstEntry = sortedEntries[0]; if (firstEntry) { fillForm(firstEntry); + } else { + // 中文注释:列表为空时回填新建默认值,避免表单残留已删除商品的旧值被误保存。 + resetForm(); } } catch (error: unknown) { handlePageError(error, onUnauthorized, setListErrorMessage); @@ -149,6 +179,18 @@ export function AdminRechargeProductPage({ setSortOrder(String(entry.sortOrder)); } + function resetForm() { + setProductId(DEFAULT_RECHARGE_PRODUCT_FORM.productId); + setTitle(DEFAULT_RECHARGE_PRODUCT_FORM.title); + setPriceCents(DEFAULT_RECHARGE_PRODUCT_FORM.priceCents); + setPointsAmount(DEFAULT_RECHARGE_PRODUCT_FORM.pointsAmount); + setBonusPoints(DEFAULT_RECHARGE_PRODUCT_FORM.bonusPoints); + setBadgeLabel(DEFAULT_RECHARGE_PRODUCT_FORM.badgeLabel); + setDescription(DEFAULT_RECHARGE_PRODUCT_FORM.description); + setEnabled(DEFAULT_RECHARGE_PRODUCT_FORM.enabled); + setSortOrder(DEFAULT_RECHARGE_PRODUCT_FORM.sortOrder); + } + return (