feat(All) 修改整体页面格式,增加地图中间模型与下方表格间的联动显示

This commit is contained in:
2025-12-19 16:50:02 +08:00
parent 1a0815759e
commit af49eb9747
9 changed files with 289 additions and 70 deletions

View File

@@ -3,9 +3,11 @@ import './ResultsPanel.css'
interface ResultsPanelProps {
results: Map<string, LatencyResult>
selectedNodeId: string | null
onNodeSelect: (nodeId: string | null) => void
}
export default function ResultsPanel({ results }: ResultsPanelProps) {
export default function ResultsPanel({ results, selectedNodeId, onNodeSelect }: ResultsPanelProps) {
if (results.size === 0) return null
const sortedNodes = [...TEST_NODES].sort((a, b) => {
@@ -34,11 +36,24 @@ export default function ResultsPanel({ results }: ResultsPanelProps) {
<div className="results-panel">
<div className="results-header">
<h2>Test Results</h2>
{avgLatency !== null && (
<div className="avg-latency">
Avg: <span style={{ color: getLatencyColor(avgLatency) }}>{avgLatency}ms</span>
<div className="results-header-right">
<div className="latency-legend">
<div className="legend-gradient"></div>
<div className="legend-labels">
<span>0ms</span>
<span>50</span>
<span>100</span>
<span>150</span>
<span>200</span>
<span>250+</span>
</div>
</div>
)}
{avgLatency !== null && (
<div className="avg-latency">
Avg: <span style={{ color: getLatencyColor(avgLatency) }}>{avgLatency}ms</span>
</div>
)}
</div>
</div>
<div className="results-grid">
@@ -47,8 +62,14 @@ export default function ResultsPanel({ results }: ResultsPanelProps) {
const isTesting = result?.status === 'testing'
const hasResult = result?.status === 'success' || result?.status === 'failed'
const isSelected = selectedNodeId === node.id
return (
<div key={node.id} className={`result-card ${hasResult ? getLatencyLevel(result?.latency ?? null) : ''}`}>
<div
key={node.id}
className={`result-card ${hasResult ? getLatencyLevel(result?.latency ?? null) : ''} ${isSelected ? 'selected' : ''}`}
onClick={() => onNodeSelect(isSelected ? null : node.id)}
>
<div className="result-region">{node.region}</div>
<div className="result-name">{node.name}</div>
<div className="result-latency">