From 100a3e516744ce070ddbce9755581f990abe85da Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Fri, 8 May 2026 13:12:53 +0200 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20Phase=205d-vi=20=E2=80=94=20s?= =?UTF-8?q?ettings=20Subscription=20formats=20tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ports the subscription/json partial — paths/URIs for the JSON and Clash formats plus the four packed-JSON sub-fields: fragment, noises, mux, and direct routing rules. - subJsonFragment / subJsonMux / subJsonNoises / subJsonRules are each a JSON string on the wire; the tab exposes their fields as computed v-models that read+write the underlying JSON. Toggling a top-level switch off resets the field to "" (matches legacy semantics). - Direct routing rules surface the IP and domain entries of the seed rule array as multi-select tag inputs; setting/removing tags edits the rules array in place rather than rebuilding it from scratch, so manually-added rules are preserved. - Tab is gated on subJsonEnable || subClashEnable in the parent (only rendered when the user actually opted into one of those formats). This closes Phase 5d — full settings page parity with the legacy panel across all five tabs. Co-Authored-By: Claude Opus 4.7 --- frontend/src/pages/settings/SettingsPage.vue | 3 +- .../pages/settings/SubscriptionFormatsTab.vue | 480 ++++++++++++++++++ 2 files changed, 482 insertions(+), 1 deletion(-) create mode 100644 frontend/src/pages/settings/SubscriptionFormatsTab.vue diff --git a/frontend/src/pages/settings/SettingsPage.vue b/frontend/src/pages/settings/SettingsPage.vue index 3eaed232..d1920b3c 100644 --- a/frontend/src/pages/settings/SettingsPage.vue +++ b/frontend/src/pages/settings/SettingsPage.vue @@ -18,6 +18,7 @@ import GeneralTab from './GeneralTab.vue'; import SecurityTab from './SecurityTab.vue'; import TelegramTab from './TelegramTab.vue'; import SubscriptionGeneralTab from './SubscriptionGeneralTab.vue'; +import SubscriptionFormatsTab from './SubscriptionFormatsTab.vue'; const antdThemeConfig = computed(() => ({ algorithm: themeState.isDark ? antdTheme.darkAlgorithm : antdTheme.defaultAlgorithm, @@ -242,7 +243,7 @@ const alertVisible = ref(true); Subscription (Formats) - + diff --git a/frontend/src/pages/settings/SubscriptionFormatsTab.vue b/frontend/src/pages/settings/SubscriptionFormatsTab.vue new file mode 100644 index 00000000..998aa755 --- /dev/null +++ b/frontend/src/pages/settings/SubscriptionFormatsTab.vue @@ -0,0 +1,480 @@ + + + + +