diff --git a/frontend/src/pages/xray/BalancerFormModal.vue b/frontend/src/pages/xray/BalancerFormModal.vue index 47dd2d41..05aabfeb 100644 --- a/frontend/src/pages/xray/BalancerFormModal.vue +++ b/frontend/src/pages/xray/BalancerFormModal.vue @@ -61,6 +61,16 @@ const isValid = computed( () => !tagEmpty.value && !duplicateTag.value && !emptySelector.value, ); +const fallbackSupported = computed( + () => form.strategy === 'leastPing' || form.strategy === 'leastLoad', +); + +watch(() => form.strategy, (next) => { + if (next !== 'leastPing' && next !== 'leastLoad') { + form.fallbackTag = ''; + } +}); + const tagValidateStatus = computed(() => { if (tagEmpty.value) return 'error'; if (duplicateTag.value) return 'warning'; @@ -111,8 +121,9 @@ const okText = computed(() => - - + + {{ tag || `(${t('none')})` }} diff --git a/frontend/src/pages/xray/BalancersTab.vue b/frontend/src/pages/xray/BalancersTab.vue index 0cf5b602..255ed108 100644 --- a/frontend/src/pages/xray/BalancersTab.vue +++ b/frontend/src/pages/xray/BalancersTab.vue @@ -145,10 +145,11 @@ function syncObservatories() { } function buildWireBalancer(form) { + const supportsFallback = form.strategy === 'leastPing' || form.strategy === 'leastLoad'; const out = { tag: form.tag, selector: [...form.selector], - fallbackTag: form.fallbackTag, + fallbackTag: supportsFallback ? form.fallbackTag : '', }; if (form.strategy && form.strategy !== 'random') { out.strategy = { type: form.strategy };