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 }}
+ + + @@ -459,52 +470,55 @@ function confirmBulkDelete() {
+ -
- {{ client.comment.length > 80 ? client.comment.substring(0, 77) + '…' : client.comment }} -
- -
+ +
+
+ {{ statsClient.comment }} +
{{ t('pages.inbounds.traffic') }} - - {{ SizeFormatter.sizeFormat(getSum(client.email)) }} / - - + + {{ SizeFormatter.sizeFormat(getSum(statsClient.email)) }} / + +
{{ t('remained') }} - + - - {{ SizeFormatter.sizeFormat(getRem(client.email)) }} + + {{ SizeFormatter.sizeFormat(getRem(statsClient.email)) }}
{{ t('pages.inbounds.allTimeTraffic') }} - {{ SizeFormatter.sizeFormat(getAllTime(client.email)) }} + {{ SizeFormatter.sizeFormat(getAllTime(statsClient.email)) }}
{{ t('online') }} - {{ t('online') }} + {{ t('online') }} {{ t('offline') }}
{{ t('pages.inbounds.expireDate') }} - - {{ IntlUtil.formatRelativeTime(client.expiryTime) }} + + {{ IntlUtil.formatRelativeTime(statsClient.expiryTime) }} - - {{ -client.expiryTime / 86400000 }}d ({{ t('pages.client.delayedStart') }}) + + {{ -statsClient.expiryTime / 86400000 }}d ({{ t('pages.client.delayedStart') }})
-
+ 0 ? props.pageSize : rows.length || 1; @@ -388,13 +396,16 @@ function showQrCodeMenu(dbInbound) {
- +
#{{ record.id }} {{ record.remark }}
+ + + @@ -452,69 +463,6 @@ function showQrCodeMenu(dbInbound) {
- -
-
- {{ t('pages.inbounds.protocol') }} - {{ record.protocol }} - -
-
- {{ 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) }} / - - - -
-
- {{ 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 }} + +
+
+ {{ 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) }} / + + + +
+
+ {{ 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) }} + + + + +
+
+
+