diff --git a/frontend/src/pages/inbounds/CopyClientsModal.vue b/frontend/src/pages/inbounds/CopyClientsModal.vue new file mode 100644 index 00000000..685bc9a0 --- /dev/null +++ b/frontend/src/pages/inbounds/CopyClientsModal.vue @@ -0,0 +1,185 @@ + + + + + + + {{ t('pages.client.copySource') }} + + + {{ item.label }} + + + + + + + {{ t('pages.client.selectAll') }} + {{ t('pages.client.clearAll') }} + + + + + + {{ t('pages.client.copyFlowLabel') }} + + {{ t('none') }} + {{ key }} + + + {{ t('pages.client.copyFlowHint') }} + + + + + diff --git a/frontend/src/pages/inbounds/InboundsPage.vue b/frontend/src/pages/inbounds/InboundsPage.vue index 5a4915f0..de02fe16 100644 --- a/frontend/src/pages/inbounds/InboundsPage.vue +++ b/frontend/src/pages/inbounds/InboundsPage.vue @@ -21,6 +21,7 @@ import InboundList from './InboundList.vue'; import InboundFormModal from './InboundFormModal.vue'; import ClientFormModal from './ClientFormModal.vue'; import ClientBulkModal from './ClientBulkModal.vue'; +import CopyClientsModal from './CopyClientsModal.vue'; import InboundInfoModal from './InboundInfoModal.vue'; import QrCodeModal from './QrCodeModal.vue'; import TextModal from '@/components/TextModal.vue'; @@ -88,6 +89,8 @@ const clientIndex = ref(null); const bulkOpen = ref(false); const bulkDbInbound = ref(null); +const copyOpen = ref(false); +const copyDbInbound = ref(null); // === Info / QR-code modals =========================================== const infoOpen = ref(false); @@ -515,10 +518,8 @@ function onRowAction({ key, dbInbound }) { exportInboundClipboard(dbInbound); break; case 'copyClients': - // Copy-clients-from-inbound is a tiny dedicated modal in legacy - // (lets you tick clients to copy across inbounds). Defer to a - // future commit — surface a friendly message for now. - message.info('Copy clients across inbounds — coming soon'); + copyDbInbound.value = dbInbound; + copyOpen.value = true; break; case 'delete': confirmDelete(dbInbound); @@ -663,6 +664,8 @@ function onRowAction({ key, dbInbound }) { :ip-limit-enable="ipLimitEnable" :traffic-diff="trafficDiff" @saved="refresh" /> +