-
{{ $t('tunnelWizard.oneClickInstall') }}
-
{{ $t('tunnelWizard.installCmd') }}
+
+
+
{{ $t(group.titleKey) }}
+
+
+
{{ $t('tunnelWizard.recommend') }}
+
+
{{ $t(builtin[key].name) }}
+
{{ $t(builtin[key].desc) }}
+
{{ $t(builtin[key].scenes) }}
+
+
+ {{ depStatus[key].available ? $t('tunnelWizard.depReady') : $t('tunnelWizard.notDeployed') }}
+
+
+ {{ $t('tunnelWizard.oneClickInstall') }}
+ {{ $t('tunnelWizard.installCmd') }}
+
+
+
+
+
+
{{ p.display_name }}
+
{{ $t('tunnelWizard.customPlugin') }}
+
{{ $t('tunnelWizard.customScene') }}
+
+
-
-
-
{{ p.display_name }}
-
{{ $t('tunnelWizard.customPlugin') }}
-
{{ $t('tunnelWizard.customScene') }}
-
@@ -166,6 +173,12 @@ import RouteListInput from '../components/RouteListInput.vue'
import OpenVPNOIDCGuide from '../components/OpenVPNOIDCGuide.vue'
import { PROTOCOL_META, CUSTOM_FIELDS, protocolColor, optionValue, optionLabel } from '../protocols'
+const protocolGroups = [
+ { id: 'employee', titleKey: 'tunnelWizard.groupEmployee', keys: ['wireguard', 'ikev2', 'l2tp', 'openvpn'] },
+ { id: 'site', titleKey: 'tunnelWizard.groupSite', keys: ['ipsec', 'gre'] },
+ { id: 'penetrate', titleKey: 'tunnelWizard.groupPenetrate', keys: ['frp'] },
+]
+
const { t } = useI18n()
const step = ref(0)
const form = ref({ name: '', protocol: '', config: {}, remark: '', auto_start: true, expire_at: null })
@@ -357,6 +370,8 @@ onMounted(async () => {