From a7089936a4bf2a0c25d6c0b651efbb5e06c78911 Mon Sep 17 00:00:00 2001 From: erio Date: Sun, 15 Mar 2026 12:03:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=97=B6=E9=97=AA=E7=8E=B0=E3=80=8C=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E6=9C=AA=E5=BC=80=E6=94=BE=E3=80=8D=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit allEntriesClosed 判断需要等 userLoaded 和 channelsLoaded 都完成, 避免 channelsLoaded 先完成但 config 还未加载时误判为入口关闭。 --- src/app/pay/page.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/app/pay/page.tsx b/src/app/pay/page.tsx index f014b37..dbdc920 100644 --- a/src/app/pay/page.tsx +++ b/src/app/pay/page.tsx @@ -82,6 +82,7 @@ function PayContent() { const [showTopUpForm, setShowTopUpForm] = useState(false); const [selectedPlan, setSelectedPlan] = useState(null); const [channelsLoaded, setChannelsLoaded] = useState(false); + const [userLoaded, setUserLoaded] = useState(false); const [config, setConfig] = useState({ enabledPaymentTypes: [], @@ -217,7 +218,10 @@ function PayContent() { } } } - } catch {} + } catch { + } finally { + setUserLoaded(true); + } }, [token, locale]); // 加载渠道和订阅套餐 @@ -487,8 +491,8 @@ function PayContent() { // ── 渲染 ── // R7: 检查是否所有入口都关闭(无可用充值方式 且 无订阅套餐) - const allEntriesClosed = channelsLoaded && !canTopUp && !hasPlans; - const showMainTabs = channelsLoaded && !allEntriesClosed && (hasChannels || hasPlans); + const allEntriesClosed = channelsLoaded && userLoaded && !canTopUp && !hasPlans; + const showMainTabs = channelsLoaded && userLoaded && !allEntriesClosed && (hasChannels || hasPlans); const pageTitle = showMainTabs ? pickLocaleText(locale, '选择适合你的 充值/订阅服务', 'Choose Your Recharge / Subscription') : pickLocaleText(locale, 'Sub2API 余额充值', 'Sub2API Balance Recharge'); @@ -613,7 +617,7 @@ function PayContent() { )} {/* 加载中 */} - {!channelsLoaded && config.enabledPaymentTypes.length === 0 && ( + {(!channelsLoaded || !userLoaded) && !allEntriesClosed && (
@@ -887,7 +891,7 @@ function PayContent() { )} {/* ── 无渠道配置:传统充值UI ── */} - {channelsLoaded && !showMainTabs && canTopUp && !selectedPlan && ( + {channelsLoaded && userLoaded && !showMainTabs && canTopUp && !selectedPlan && ( <> {isMobile ? ( activeMobileTab === 'pay' ? (