From b9d43538b5d38c8c69a94fe71dca35ccb1cb4b34 Mon Sep 17 00:00:00 2001 From: mrlee <470349233@qq.com> Date: Sat, 24 Oct 2026 20:31:27 +0800 Subject: [PATCH] refactor: simplify public proxy traffic table --- web/src/views/ProxyRemoteView.vue | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/web/src/views/ProxyRemoteView.vue b/web/src/views/ProxyRemoteView.vue index b22288e..3786ae1 100644 --- a/web/src/views/ProxyRemoteView.vue +++ b/web/src/views/ProxyRemoteView.vue @@ -473,7 +473,7 @@ import type { CertificateRecord, FrpAgentRouteDetail, FrpAgentRouteHealth, FrpAgentStatus, FrpProxy, FrpProxyTraffic, FrpRouteDriftReport, FrpRouteUptime, FrpServer, NginxConfigVersionEntry, } from '../api/types' -import { formatBytes, formatDate, formatRate, formatRelativeTime } from '../utils/format' +import { formatBytes, formatDate, formatRelativeTime } from '../utils/format' import { copyText } from '../utils/clipboard' type Action = @@ -511,7 +511,6 @@ const candidates = ref([]) const routeDetails = ref([]) const routeHealth = ref([]) const proxyTraffic = ref>({}) -const trafficErrors = ref>({}) const agentStatus = ref(null) const statusLoaded = ref(false) const routeDrift = ref(null) @@ -663,7 +662,6 @@ async function refreshAll(options: { silent?: boolean } = { silent: true }) { track('证书列表', () => api.listCertificates(), (value) => { certificates.value = value }), track('流量采集', () => api.listFrpProxiesTraffic(), (value) => { proxyTraffic.value = value.items ?? {} - trafficErrors.value = value.errors ?? {} }), track('Agent 状态', () => api.getFrpAgentStatus(current.id), (value) => { agentStatus.value = value @@ -909,10 +907,8 @@ function protocolOf(candidate: FrpProxy) { } } -// 采集失败时把原因挂到四个流量单元格的 title 上,不再单占一列 -function trafficErrorOf(candidate: FrpProxy) { - return trafficErrors.value[String(candidate.id)] || undefined -} +// 采集失败时不再单占一列,也不挂在单元格 title 上: +// 流量明细已统一在内网穿透页展示,本页只保留「可用率」这类公网路由独有的指标。 // 视口宽度:操作列固定到右侧后必须随屏幕收窄,否则窄屏上固定列会吃掉大半个可视区 const viewportWidth = ref(window.innerWidth) @@ -975,26 +971,6 @@ const columns = computed>(() => [ [h(StatusBadge, { kind, text: `${stat.uptime_pct.toFixed(1)}%` })]) }, }, - { - title: '连接', key: 'conns', width: 80, align: 'right', - render: (row) => h('span', { class: 'mono' }, String(trafficOf(row).cur_conns)), - }, - { - title: '当前上传', key: 'in_rate', width: 100, align: 'right', - render: (row) => h('span', { class: 'mono', title: trafficErrorOf(row) }, formatRate(trafficOf(row).traffic_in_rate)), - }, - { - title: '当前下载', key: 'out_rate', width: 100, align: 'right', - render: (row) => h('span', { class: 'mono', title: trafficErrorOf(row) }, formatRate(trafficOf(row).traffic_out_rate)), - }, - { - title: '总上传', key: 'in_total', width: 95, align: 'right', - render: (row) => h('span', { class: 'mono', title: trafficErrorOf(row) }, formatBytes(trafficOf(row).traffic_in)), - }, - { - title: '总下载', key: 'out_total', width: 95, align: 'right', - render: (row) => h('span', { class: 'mono', title: trafficErrorOf(row) }, formatBytes(trafficOf(row).traffic_out)), - }, { title: '更新时间', key: 'updated_at', width: 155, render: (row) => h('div', { class: 'cell-time' }, [ @@ -1224,7 +1200,6 @@ watch(selectedId, () => { routeDetails.value = [] routeHealth.value = [] proxyTraffic.value = {} - trafficErrors.value = {} agentStatus.value = null statusLoaded.value = false loadErrorMsg.value = ''