From 4b15704d8ea92fa131b82944fdaf99603140cdc0 Mon Sep 17 00:00:00 2001 From: erio Date: Mon, 6 Apr 2026 18:06:36 +0800 Subject: [PATCH] fix(frontend): provider list respects enabled payment types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create provider dialog: only show provider types whose payment types are enabled (e.g. no Stripe option if stripe not enabled above) - Provider cards: grey out + disable edit when their type is disabled - Show "(类型已禁用)" warning on greyed-out provider cards - Delete still allowed on disabled providers (cleanup) --- frontend/src/i18n/locales/en.ts | 1 + frontend/src/i18n/locales/zh.ts | 1 + frontend/src/views/admin/SettingsView.vue | 33 ++++++++++++++++++----- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts index ea6ef6db44..199590aaf7 100644 --- a/frontend/src/i18n/locales/en.ts +++ b/frontend/src/i18n/locales/en.ts @@ -4353,6 +4353,7 @@ export default { providerAlipay: 'Alipay (Direct)', providerWxpay: 'WeChat Pay (Direct)', providerStripe: 'Stripe', + typeDisabled: 'type disabled', productNamePrefix: 'Product Name Prefix', productNameSuffix: 'Product Name Suffix', preview: 'Preview', diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts index 5dc6e86b20..7daaa71923 100644 --- a/frontend/src/i18n/locales/zh.ts +++ b/frontend/src/i18n/locales/zh.ts @@ -4526,6 +4526,7 @@ export default { providerAlipay: '支付宝官方', providerWxpay: '微信官方', providerStripe: 'Stripe', + typeDisabled: '类型已禁用', productNamePrefix: '商品名前缀', productNameSuffix: '商品名后缀', preview: '预览', diff --git a/frontend/src/views/admin/SettingsView.vue b/frontend/src/views/admin/SettingsView.vue index 4c2836c0d6..f0d36f5237 100644 --- a/frontend/src/views/admin/SettingsView.vue +++ b/frontend/src/views/admin/SettingsView.vue @@ -1731,20 +1731,21 @@
-
+
-
- +
+
{{ provider.name }} {{ providerKeyLabel(provider.provider_key) }} + ({{ t('admin.settings.payment.typeDisabled') }})
{{ provider.enabled ? t('common.enabled') : t('common.disabled') }} - +
@@ -1768,7 +1769,7 @@
-
@@ -2967,6 +2968,23 @@ const providerKeyOptions = computed(() => [ { value: 'wxpay', label: t('admin.settings.payment.providerWxpay') }, { value: 'stripe', label: t('admin.settings.payment.providerStripe') }, ]) + +// Only show provider types whose payment types are enabled above +const enabledProviderKeyOptions = computed(() => { + const enabled = form.payment_enabled_types.split(',').map(s => s.trim()).filter(Boolean) + return providerKeyOptions.value.filter(opt => { + // easypay is available if easypay OR alipay OR wxpay is enabled + if (opt.value === 'easypay') return enabled.includes('easypay') || enabled.includes('alipay') || enabled.includes('wxpay') + return enabled.includes(opt.value) + }) +}) + +// Check if a provider instance's type is still enabled +function isProviderEnabled(providerKey: string): boolean { + const enabled = form.payment_enabled_types.split(',').map(s => s.trim()).filter(Boolean) + if (providerKey === 'easypay') return enabled.includes('easypay') || enabled.includes('alipay') || enabled.includes('wxpay') + return enabled.includes(providerKey) +} const loadBalanceOptions = computed(() => [ { value: 'round-robin', label: t('admin.settings.payment.strategyRoundRobin') }, { value: 'least-amount', label: t('admin.settings.payment.strategyLeastAmount') }, @@ -3008,8 +3026,9 @@ async function loadProviders() { finally { providersLoading.value = false } } function resetProviderForm() { - providerForm.name = ''; providerForm.provider_key = 'easypay' - providerForm.supported_types = (PROVIDER_SUPPORTED_TYPES['easypay'] || []).join(',') + const defaultKey = enabledProviderKeyOptions.value[0]?.value || 'easypay' + providerForm.name = ''; providerForm.provider_key = defaultKey + providerForm.supported_types = (PROVIDER_SUPPORTED_TYPES[defaultKey] || []).join(',') providerForm.enabled = true; providerForm.refund_enabled = false Object.keys(providerConfig).forEach(k => { (providerConfig as any)[k] = '' }) }