fix: 所有支付入口关闭时正确显示"入口未开放"提示

当没有可用支付方式(未配置或被禁用)且没有订阅套餐时,
显示"充值/订阅 入口未开放"提示,而不是空的订阅UI
This commit is contained in:
erio
2026-03-14 00:54:05 +08:00
parent 405fab8c8d
commit ce223f09d8

View File

@@ -130,6 +130,8 @@ function PayContent() {
const hasChannels = channels.length > 0;
// 是否有可售卖套餐
const hasPlans = plans.length > 0;
// 是否可以充值(未禁用且有支付方式)
const canTopUp = !balanceDisabled && config.enabledPaymentTypes.length > 0;
useEffect(() => {
if (typeof window === 'undefined') return;
@@ -467,8 +469,8 @@ function PayContent() {
};
// ── 渲染 ──
// R7: 检查是否所有入口都关闭
const allEntriesClosed = channelsLoaded && balanceDisabled && !hasPlans;
// R7: 检查是否所有入口都关闭(无可用充值方式 且 无订阅套餐)
const allEntriesClosed = channelsLoaded && !canTopUp && !hasPlans;
const showMainTabs = channelsLoaded && !allEntriesClosed && (hasChannels || hasPlans);
const pageTitle = showMainTabs
? pickLocaleText(locale, '选择适合你的 订阅套餐', 'Choose Your Plan')
@@ -595,7 +597,7 @@ function PayContent() {
</svg>
</div>
<p className={['text-lg font-medium mb-2', isDark ? 'text-slate-200' : 'text-slate-800'].join(' ')}>
{pickLocaleText(locale, '充值/订阅入口已被管理员关闭', 'Recharge / Subscription entry has been closed by admin')}
{pickLocaleText(locale, '充值/订阅 入口未开放', 'Recharge / Subscription entry is not available')}
</p>
<p className={['text-sm', isDark ? 'text-slate-400' : 'text-slate-500'].join(' ')}>
{pickLocaleText(locale, '如有疑问,请联系管理员', 'Please contact the administrator if you have questions')}
@@ -606,9 +608,9 @@ function PayContent() {
{/* ── 有渠道配置新版UI ── */}
{channelsLoaded && showMainTabs && (activeMobileTab === 'pay' || !isMobile) && !selectedPlan && !showTopUpForm && (
<>
<MainTabs activeTab={balanceDisabled ? 'subscribe' : mainTab} onTabChange={setMainTab} showSubscribeTab={hasPlans} showTopUpTab={!balanceDisabled} isDark={isDark} locale={locale} />
<MainTabs activeTab={!canTopUp ? 'subscribe' : mainTab} onTabChange={setMainTab} showSubscribeTab={hasPlans} showTopUpTab={canTopUp} isDark={isDark} locale={locale} />
{mainTab === 'topup' && !balanceDisabled && (
{mainTab === 'topup' && canTopUp && (
<div className="mt-6">
{/* 按量付费说明 banner */}
<div className={[
@@ -793,7 +795,7 @@ function PayContent() {
)}
{/* ── 无渠道配置传统充值UI ── */}
{channelsLoaded && !showMainTabs && !balanceDisabled && config.enabledPaymentTypes.length > 0 && !selectedPlan && (
{channelsLoaded && !showMainTabs && canTopUp && !selectedPlan && (
<>
{isMobile ? (
activeMobileTab === 'pay' ? (