From 8648950f44143c091190eae2384a6ee3edc941c5 Mon Sep 17 00:00:00 2001 From: erio Date: Tue, 7 Apr 2026 00:46:11 +0800 Subject: [PATCH] fix(payment): card/link are Stripe sub-methods, not top-level providers - Remove card/link from global allPaymentTypes (they belong inside Stripe provider) - Resolve i18n labels for Stripe sub-methods in provider dialog and card --- backend/cmd/server/VERSION | 2 +- .../src/components/payment/PaymentProviderDialog.vue | 12 +++++++++--- .../src/components/payment/PaymentProviderList.vue | 4 ++++ frontend/src/views/admin/SettingsView.vue | 2 -- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/backend/cmd/server/VERSION b/backend/cmd/server/VERSION index e48b3cf918..786c342ca1 100644 --- a/backend/cmd/server/VERSION +++ b/backend/cmd/server/VERSION @@ -1 +1 @@ -0.1.108.38 +0.1.108.39 diff --git a/frontend/src/components/payment/PaymentProviderDialog.vue b/frontend/src/components/payment/PaymentProviderDialog.vue index e56df3bffa..7d82d639f5 100644 --- a/frontend/src/components/payment/PaymentProviderDialog.vue +++ b/frontend/src/components/payment/PaymentProviderDialog.vue @@ -263,9 +263,15 @@ const stripeWebhookUrl = computed(() => const callbackPaths = computed(() => PROVIDER_CALLBACK_PATHS[form.provider_key] || null) -const availableTypes = computed(() => - getAvailableTypes(form.provider_key, props.allPaymentTypes, props.redirectLabel), -) +const availableTypes = computed(() => { + const base = getAvailableTypes(form.provider_key, props.allPaymentTypes, props.redirectLabel) + // Resolve i18n labels for types not in allPaymentTypes (e.g. card, link inside stripe) + return base.map(opt => + opt.label === opt.value + ? { ...opt, label: t(`payment.methods.${opt.value}`, opt.value) } + : opt, + ) +}) const resolvedFields = computed(() => { const fields = PROVIDER_CONFIG_FIELDS[form.provider_key] || [] diff --git a/frontend/src/components/payment/PaymentProviderList.vue b/frontend/src/components/payment/PaymentProviderList.vue index 6cd07951cd..9818d8077e 100644 --- a/frontend/src/components/payment/PaymentProviderList.vue +++ b/frontend/src/components/payment/PaymentProviderList.vue @@ -114,5 +114,9 @@ function isEnabled(providerKey: string): boolean { function getTypes(providerKey: string): TypeOption[] { return getAvailableTypes(providerKey, props.allPaymentTypes, props.redirectLabel) + .map(opt => opt.label === opt.value + ? { ...opt, label: t(`payment.methods.${opt.value}`, opt.value) } + : opt, + ) } diff --git a/frontend/src/views/admin/SettingsView.vue b/frontend/src/views/admin/SettingsView.vue index f2f1d9936b..6faf82e82c 100644 --- a/frontend/src/views/admin/SettingsView.vue +++ b/frontend/src/views/admin/SettingsView.vue @@ -2841,8 +2841,6 @@ const allPaymentTypes = computed(() => [ { value: 'easypay', label: t('payment.methods.easypay') }, { value: 'alipay', label: t('payment.methods.alipay') }, { value: 'wxpay', label: t('payment.methods.wxpay') }, - { value: 'card', label: t('payment.methods.card') }, - { value: 'link', label: t('payment.methods.link') }, { value: 'stripe', label: t('payment.methods.stripe') }, ])