diff --git a/frontend/src/pages/inbounds/InboundInfoModal.vue b/frontend/src/pages/inbounds/InboundInfoModal.vue index 99d0855b..4bfef885 100644 --- a/frontend/src/pages/inbounds/InboundInfoModal.vue +++ b/frontend/src/pages/inbounds/InboundInfoModal.vue @@ -19,41 +19,20 @@ import { useDatepicker } from '@/composables/useDatepicker.js'; const { t } = useI18n(); const { datepicker } = useDatepicker(); -// One modal handles every protocol's info / share view because the -// legacy template did the same. The big v-if forks at the top decide -// which sub-block of the body renders: -// • multi-user inbound (VMess/VLess/Trojan/SS-multi/Hysteria) → per- -// client row + share links -// • SS single-user → connection details + share link -// • WireGuard → secret/peers + per-peer config download -// • Mixed/HTTP/Tunnel → connection details only -// -// We display links via QrPanel — each link gets its own QR + copy + -// (for WireGuard configs) download button. - const props = defineProps({ open: { type: Boolean, default: false }, - // Result of inbounds-page checkFallback() so the link-gen sees the - // root inbound's listen/port/security when the dbInbound is a - // domain-socket fallback (`@`). dbInbound: { type: Object, default: null }, - // Index into inbound.clients to focus on for multi-user inbounds. clientIndex: { type: Number, default: 0 }, - // Sidecar config the legacy panel keyed off `app.*`. remarkModel: { type: String, default: '-ieo' }, expireDiff: { type: Number, default: 0 }, trafficDiff: { type: Number, default: 0 }, ipLimitEnable: { type: Boolean, default: false }, tgBotEnable: { type: Boolean, default: false }, - // Address of the node hosting this inbound; '' for local. Wired - // through to share/QR link generation so node-managed inbounds - // produce links that connect to the node, not the central panel. nodeAddress: { type: String, default: '' }, subSettings: { type: Object, default: () => ({ enable: false, subURI: '', subJsonURI: '', subJsonEnable: false }), }, - // Email -> ts (last-online unix-ms) map fetched at the page level. lastOnlineMap: { type: Object, default: () => ({}) }, }); @@ -598,7 +577,8 @@ const showSubscriptionTab = computed(
Gateway
{{ ip }}
+ class="value-tag">{{ + ip }}
DNS
@@ -612,7 +592,8 @@ const showSubscriptionTab = computed(
Auto system routes
{{ cidr }}
+ color="green">{{ + cidr }}
@@ -670,12 +651,101 @@ const showSubscriptionTab = computed( {{ account.pass }} - - + + + + + +
+ + + @@ -897,6 +967,7 @@ const showSubscriptionTab = computed( white-space: normal; word-break: break-all; display: inline-block; + margin-right: 0; } .value-block { @@ -927,6 +998,27 @@ const showSubscriptionTab = computed( flex-shrink: 0; } +.share-buttons, +.share-mobile { + margin-inline-start: 4px; + padding-inline-start: 8px; + border-inline-start: 1px solid rgba(128, 128, 128, 0.25); +} + +.share-mobile { + display: none; +} + +@media (max-width: 600px) { + .share-desktop { + display: none !important; + } + .share-mobile { + display: inline-flex; + align-items: center; + } +} + .security-line { display: flex; align-items: center;