mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-24 23:43:46 +08:00
refactor(payment): use string[] for supported_types throughout frontend+backend API
- Backend API returns/accepts supported_types as string[] (converts to/from DB comma string) - Frontend ProviderInstance.supported_types is string[], no more parseTypes - Remove all split/join conversions for supported_types - payment_enabled_types also uses string[] consistently
This commit is contained in:
@@ -209,7 +209,6 @@ import {
|
||||
PROVIDER_SUPPORTED_TYPES,
|
||||
PROVIDER_CALLBACK_PATHS,
|
||||
WEBHOOK_PATHS,
|
||||
parseTypes,
|
||||
getAvailableTypes,
|
||||
extractBaseUrl,
|
||||
} from './providerConfig'
|
||||
@@ -243,7 +242,7 @@ const { t } = useI18n()
|
||||
const form = reactive({
|
||||
name: '',
|
||||
provider_key: 'easypay',
|
||||
supported_types: '',
|
||||
supported_types: [] as string[],
|
||||
enabled: true,
|
||||
refund_enabled: false,
|
||||
})
|
||||
@@ -282,7 +281,7 @@ const resolvedFields = computed(() => {
|
||||
})
|
||||
|
||||
const limitableTypes = computed(() => {
|
||||
const selected = parseTypes(form.supported_types).filter(t => t !== 'easypay')
|
||||
const selected = form.supported_types.filter(t => t !== 'easypay')
|
||||
return selected.map(v => {
|
||||
const found = props.allPaymentTypes.find(pt => pt.value === v)
|
||||
return found || { value: v, label: v }
|
||||
@@ -291,18 +290,19 @@ const limitableTypes = computed(() => {
|
||||
|
||||
// --- Methods ---
|
||||
function isTypeSelected(type: string): boolean {
|
||||
return parseTypes(form.supported_types).includes(type)
|
||||
return form.supported_types.includes(type)
|
||||
}
|
||||
|
||||
function toggleType(type: string) {
|
||||
const current = parseTypes(form.supported_types)
|
||||
form.supported_types = current.includes(type)
|
||||
? current.filter(t => t !== type).join(',')
|
||||
: [...current, type].join(',')
|
||||
if (form.supported_types.includes(type)) {
|
||||
form.supported_types = form.supported_types.filter(t => t !== type)
|
||||
} else {
|
||||
form.supported_types = [...form.supported_types, type]
|
||||
}
|
||||
}
|
||||
|
||||
function onKeyChange() {
|
||||
form.supported_types = (PROVIDER_SUPPORTED_TYPES[form.provider_key] || []).join(',')
|
||||
form.supported_types = [...(PROVIDER_SUPPORTED_TYPES[form.provider_key] || [])]
|
||||
clearConfig()
|
||||
applyDefaults()
|
||||
}
|
||||
@@ -357,7 +357,7 @@ function handleSave() {
|
||||
emitValidationError(t('admin.settings.payment.validationNameRequired'))
|
||||
return
|
||||
}
|
||||
if (!form.supported_types.trim()) {
|
||||
if (form.supported_types.length === 0) {
|
||||
emitValidationError(t('admin.settings.payment.validationTypesRequired'))
|
||||
return
|
||||
}
|
||||
@@ -408,7 +408,7 @@ function emitValidationError(msg: string) {
|
||||
function reset(defaultKey: string) {
|
||||
form.name = ''
|
||||
form.provider_key = defaultKey
|
||||
form.supported_types = (PROVIDER_SUPPORTED_TYPES[defaultKey] || []).join(',')
|
||||
form.supported_types = [...(PROVIDER_SUPPORTED_TYPES[defaultKey] || [])]
|
||||
form.enabled = true
|
||||
form.refund_enabled = false
|
||||
clearConfig()
|
||||
|
||||
@@ -66,7 +66,6 @@ import Icon from '@/components/icons/Icon.vue'
|
||||
import ToggleSwitch from './ToggleSwitch.vue'
|
||||
import type { ProviderInstance } from '@/types/payment'
|
||||
import type { TypeOption } from './providerConfig'
|
||||
import { parseTypes } from './providerConfig'
|
||||
|
||||
const PROVIDER_KEY_LABELS: Record<string, string> = {
|
||||
easypay: 'admin.settings.payment.providerEasypay',
|
||||
@@ -93,6 +92,6 @@ const { t } = useI18n()
|
||||
const keyLabel = computed(() => t(PROVIDER_KEY_LABELS[props.provider.provider_key] || props.provider.provider_key))
|
||||
|
||||
function isSelected(type: string): boolean {
|
||||
return parseTypes(props.provider.supported_types).includes(type)
|
||||
return props.provider.supported_types.includes(type)
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -104,7 +104,7 @@ export interface ProviderInstance {
|
||||
provider_key: string
|
||||
name: string
|
||||
config: Record<string, string>
|
||||
supported_types: string
|
||||
supported_types: string[]
|
||||
enabled: boolean
|
||||
refund_enabled: boolean
|
||||
limits: string
|
||||
|
||||
@@ -2800,8 +2800,6 @@ async function saveBetaPolicySettings() {
|
||||
|
||||
// ==================== Provider Management ====================
|
||||
|
||||
import { parseTypes } from '@/components/payment/providerConfig'
|
||||
|
||||
const allPaymentTypes = computed(() => [
|
||||
{ value: 'easypay', label: t('payment.methods.easypay') },
|
||||
{ value: 'alipay', label: t('payment.methods.alipay') },
|
||||
@@ -2901,18 +2899,16 @@ async function handleToggleField(provider: ProviderInstance, field: 'enabled' |
|
||||
}
|
||||
|
||||
async function handleToggleType(provider: ProviderInstance, type: string) {
|
||||
const current = parseTypes(provider.supported_types)
|
||||
const updated = current.includes(type)
|
||||
? current.filter(t => t !== type)
|
||||
: [...current, type]
|
||||
const updated = provider.supported_types.includes(type)
|
||||
? provider.supported_types.filter(t => t !== type)
|
||||
: [...provider.supported_types, 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
|
||||
await adminAPI.payment.updateProvider(provider.id, { supportedTypes: updated } as any)
|
||||
provider.supported_types = updated
|
||||
} catch (err: unknown) { appStore.showError(extractApiErrorMessage(err, t('common.error'))) }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user