refactor: simplify public proxy traffic table
CI / verify (push) Canceled after 0s

This commit is contained in:
2026-10-24 20:31:27 +08:00
parent 56f04ae12b
commit b9d43538b5
+3 -28
View File
@@ -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<FrpProxy[]>([])
const routeDetails = ref<FrpAgentRouteDetail[]>([])
const routeHealth = ref<FrpAgentRouteHealth[]>([])
const proxyTraffic = ref<Record<string, FrpProxyTraffic>>({})
const trafficErrors = ref<Record<string, string>>({})
const agentStatus = ref<FrpAgentStatus | null>(null)
const statusLoaded = ref(false)
const routeDrift = ref<FrpRouteDriftReport | null>(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<DataTableColumns<FrpProxy>>(() => [
[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 = ''