diff --git a/frontend/src/views/admin/SettingsView.vue b/frontend/src/views/admin/SettingsView.vue index ba402dd6f2..5ea5723c2e 100644 --- a/frontend/src/views/admin/SettingsView.vue +++ b/frontend/src/views/admin/SettingsView.vue @@ -1767,9 +1767,21 @@
{{ t('admin.settings.payment.typeDisabled') }} — {{ t('admin.settings.payment.enableTypesFirst') }}
- -
- {{ t('admin.settings.payment.supportedTypes') }}: {{ provider.supported_types || '-' }} + +
+ {{ t('admin.settings.payment.supportedTypes') }}: +
@@ -3082,6 +3094,37 @@ async function toggleProviderField(provider: ProviderInstance, field: 'enabled' else provider.refund_enabled = newValue } catch (err: unknown) { appStore.showError(extractApiErrorMessage(err, t('common.error'))) } } +function getProviderAvailableTypes(providerKey: string) { + const types = PROVIDER_SUPPORTED_TYPES[providerKey] || [] + return types.map(typeVal => { + if (typeVal === 'easypay' && providerKey === 'easypay') { + return { value: typeVal, label: t('admin.settings.payment.easypayRedirect') } + } + const found = allPaymentTypes.value.find(pt => pt.value === typeVal) + return found || { value: typeVal, label: typeVal } + }) +} +function isCardTypeSelected(provider: ProviderInstance, type: string): boolean { + return (provider.supported_types || '').split(',').map(s => s.trim()).filter(Boolean).includes(type) +} +async function toggleCardSupportedType(provider: ProviderInstance, type: string) { + const current = (provider.supported_types || '').split(',').map(s => s.trim()).filter(Boolean) + let updated: string[] + if (current.includes(type)) { + updated = current.filter(t => t !== type) + } else { + updated = [...current, type] + } + if (updated.length === 0) { + appStore.showError(t('admin.settings.payment.validationTypesRequired')) + return + } + const newVal = updated.join(',') + try { + await adminAPI.payment.updateProvider(provider.id, { supportedTypes: newVal } as any) + provider.supported_types = newVal + } catch (err: unknown) { appStore.showError(extractApiErrorMessage(err, t('common.error'))) } +} async function loadProviders() { providersLoading.value = true try { const res = await adminAPI.payment.getProviders(); providers.value = res.data || [] } @@ -3115,15 +3158,18 @@ async function handleSaveProvider() { appStore.showError(t('admin.settings.payment.validationTypesRequired')) return } - // Validate required config fields (only for new providers — editing may leave sensitive fields empty) - if (!editingProvider.value) { - const fields = PROVIDER_CONFIG_FIELDS[providerForm.provider_key] || [] - for (const f of fields) { - if (!f.optional && !(providerConfig[f.key] || '').trim()) { - const label = f.label || t(`admin.settings.payment.field_${f.key}`) - appStore.showError(t('admin.settings.payment.validationFieldRequired', { field: label })) - return - } + // Validate required config fields + const fields = PROVIDER_CONFIG_FIELDS[providerForm.provider_key] || [] + for (const f of fields) { + if (f.optional) continue + const val = (providerConfig[f.key] || '').trim() + // On create: all required fields must be filled + // On edit: sensitive fields can be left empty (backend keeps existing values) + // non-sensitive required fields must be filled if user entered any config + if (!editingProvider.value && !val) { + const label = f.label || t(`admin.settings.payment.field_${f.key}`) + appStore.showError(t('admin.settings.payment.validationFieldRequired', { field: label })) + return } } providerSaving.value = true