diff --git a/frontend/src/pages/xray/BalancerFormModal.vue b/frontend/src/pages/xray/BalancerFormModal.vue
new file mode 100644
index 00000000..c77411f7
--- /dev/null
+++ b/frontend/src/pages/xray/BalancerFormModal.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ s.label }}
+
+
+
+
+
+ {{ t }}
+
+
+
+
+
+ {{ t || '(none)' }}
+
+
+
+
+
diff --git a/frontend/src/pages/xray/BalancersTab.vue b/frontend/src/pages/xray/BalancersTab.vue
new file mode 100644
index 00000000..2c4023a8
--- /dev/null
+++ b/frontend/src/pages/xray/BalancersTab.vue
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
+ Add balancer
+
+
+
+
+
+
+ Add balancer
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+
+
+
+
+ Edit
+
+
+ Delete
+
+
+
+
+
+
+
+
+ {{ STRATEGY_LABELS[record.strategy] || record.strategy }}
+
+
+
+
+ {{ sel }}
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/pages/xray/DnsTab.vue b/frontend/src/pages/xray/DnsTab.vue
new file mode 100644
index 00000000..e20c9a90
--- /dev/null
+++ b/frontend/src/pages/xray/DnsTab.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/pages/xray/XrayPage.vue b/frontend/src/pages/xray/XrayPage.vue
index 605b18da..b7cf1f58 100644
--- a/frontend/src/pages/xray/XrayPage.vue
+++ b/frontend/src/pages/xray/XrayPage.vue
@@ -18,6 +18,8 @@ import AppSidebar from '@/components/AppSidebar.vue';
import BasicsTab from './BasicsTab.vue';
import RoutingTab from './RoutingTab.vue';
import OutboundsTab from './OutboundsTab.vue';
+import BalancersTab from './BalancersTab.vue';
+import DnsTab from './DnsTab.vue';
import { useXraySetting } from './useXraySetting.js';
// Phase 6-i: scaffold + advanced JSON tab. Other tabs (Basics, Routing,
@@ -183,14 +185,14 @@ function confirmRestart() {
Balancers
-
+
DNS
-
+