fix(xray): clear outbound test state on delete to prevent result bleed (#4205)

This commit is contained in:
Ali Fotouhi 2026-05-10 13:33:00 +03:30 committed by GitHub
parent cf5767acd1
commit 9cbba130ab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 2 deletions

View file

@ -48,7 +48,7 @@ const inboundTagOptions = computed(() => {
return [...out];
});
const emit = defineEmits(['reset-traffic', 'test', 'show-warp', 'show-nord']);
const emit = defineEmits(['reset-traffic', 'test', 'show-warp', 'show-nord', 'delete']);
// === Modal state ====================================================
const modalOpen = ref(false);
@ -86,7 +86,7 @@ function confirmDelete(idx) {
okText: t('delete'),
okType: 'danger',
cancelText: t('cancel'),
onOk: () => { props.templateSettings.outbounds.splice(idx, 1); },
onOk: () => { emit('delete', idx); },
});
}
function setFirst(idx) {

View file

@ -57,6 +57,15 @@ async function onTestOutbound(idx) {
if (outbound) await testOutbound(idx, outbound);
}
function onDeleteOutbound(idx) {
templateSettings.value.outbounds.splice(idx, 1);
outboundTestStates.value = Object.fromEntries(
Object.entries(outboundTestStates.value)
.filter(([k]) => Number(k) !== idx)
.map(([k, v]) => [Number(k) > idx ? Number(k) - 1 : Number(k), v]),
);
}
// === Advanced tab radio-driven view ==============================
// Mirrors the legacy advanced page: a 4-way radio toggles which slice
// of the xray config the textarea edits the full config, just the
@ -298,6 +307,7 @@ function confirmRestart() {
:is-mobile="isMobile"
@reset-traffic="resetOutboundsTraffic"
@test="onTestOutbound"
@delete="onDeleteOutbound"
@show-warp="showWarp"
@show-nord="showNord"
/>