diff --git a/frontend/src/pages/inbounds/ClientRowTable.vue b/frontend/src/pages/inbounds/ClientRowTable.vue
index dc4b8b84..8a942bff 100644
--- a/frontend/src/pages/inbounds/ClientRowTable.vue
+++ b/frontend/src/pages/inbounds/ClientRowTable.vue
@@ -217,6 +217,14 @@ watch(clients, (list) => {
if (next.size !== selected.value.size) selected.value = next;
});
+const statsClient = ref(null);
+function openStats(client) {
+ statsClient.value = client;
+}
+function closeStats() {
+ statsClient.value = null;
+}
+
function confirmBulkDelete() {
const picked = clients.value.filter((c) => selected.value.has(rowKey(c)));
if (picked.length === 0) return;
@@ -433,6 +441,9 @@ function confirmBulkDelete() {
{{ client.email }}
+
+
+
emit('toggle-enable-client', { dbInbound, client, next })" />
@@ -459,52 +470,55 @@ function confirmBulkDelete() {
+
-
-
-
+
0 ? props.pageSize : rows.length || 1;
@@ -388,13 +396,16 @@ function showQrCodeMenu(dbInbound) {
—
-
+
#{{ record.id }}
{{ record.remark }}
+
+
+
onSwitchEnable(record, next)" />
@@ -452,69 +463,6 @@ function showQrCodeMenu(dbInbound) {
-
-
-
-
{{ t('pages.inbounds.protocol') }}
-
{{ record.protocol }}
-
- {{ record.isHysteria ? 'UDP' : record.toInbound().stream.network }}
- TLS
- Reality
-
-
-
-
{{ t('pages.inbounds.port') }}
-
{{ record.port }}
-
-
-
{{ t('pages.inbounds.node') }}
-
- {{ t('pages.inbounds.localPanel') }}
-
-
- {{ nodesById.get(record.nodeId).name }}
-
-
#{{ record.nodeId }}
-
-
-
{{ t('pages.inbounds.traffic') }}
-
- {{ SizeFormatter.sizeFormat(record.up + record.down) }} /
- {{ SizeFormatter.sizeFormat(record.total) }}
-
-
-
-
-
{{ t('pages.inbounds.allTimeTraffic') }}
-
{{ SizeFormatter.sizeFormat(record.allTime || 0) }}
-
-
-
{{ t('clients') }}
-
{{ clientCount[record.id].clients }}
-
- {{ clientCount[record.id].online.length }} {{ t('online') }}
-
-
- {{ clientCount[record.id].depleted.length }} {{ t('depleted') }}
-
-
- {{ clientCount[record.id].expiring.length }} {{ t('depletingSoon') }}
-
-
-
-
{{ t('pages.inbounds.expireDate') }}
-
- {{ IntlUtil.formatRelativeTime(record.expiryTime) }}
-
-
-
-
-
-
-
+
+
+
+
+
{{ t('pages.inbounds.protocol') }}
+
{{ statsRecord.protocol }}
+
+ {{ statsRecord.isHysteria ? 'UDP' : statsRecord.toInbound().stream.network }}
+ TLS
+ Reality
+
+
+
+
{{ t('pages.inbounds.port') }}
+
{{ statsRecord.port }}
+
+
+
{{ t('pages.inbounds.node') }}
+
+ {{ t('pages.inbounds.localPanel') }}
+
+
+ {{ nodesById.get(statsRecord.nodeId).name }}
+
+
#{{ statsRecord.nodeId }}
+
+
+
{{ t('pages.inbounds.traffic') }}
+
+ {{ SizeFormatter.sizeFormat(statsRecord.up + statsRecord.down) }} /
+ {{ SizeFormatter.sizeFormat(statsRecord.total) }}
+
+
+
+
+
{{ t('pages.inbounds.allTimeTraffic') }}
+
{{ SizeFormatter.sizeFormat(statsRecord.allTime || 0) }}
+
+
+
{{ t('clients') }}
+
{{ clientCount[statsRecord.id].clients }}
+
+ {{ clientCount[statsRecord.id].online.length }} {{ t('online') }}
+
+
+ {{ clientCount[statsRecord.id].depleted.length }} {{ t('depleted') }}
+
+
+ {{ clientCount[statsRecord.id].expiring.length }} {{ t('depletingSoon') }}
+
+
+
+
{{ t('pages.inbounds.expireDate') }}
+
+ {{ IntlUtil.formatRelativeTime(statsRecord.expiryTime) }}
+
+
+
+
+
+
+
+