+ {bars.map((q, idx) => {
+ if (!q) {
+ return (
+
+ );
+ }
+ const isEntry = type === "entryToExit";
+ const latency = isEntry ? q.entryToExitLatency : q.exitToBingLatency;
+ const loss = isEntry ? q.entryToExitLoss : q.exitToBingLoss;
+ const timeStr = new Date(q.timestamp).toLocaleTimeString("zh-CN");
+
+ let colorClass = "bg-success";
+ let statusText = "优秀";
+
+ if (q.errorMessage || (loss !== undefined && loss > 0)) {
+ colorClass = "bg-danger";
+ statusText = q.errorMessage ? "错误" : `丢包 ${loss?.toFixed(1)}%`;
+ } else if (latency < 0) {
+ colorClass = "bg-danger";
+ statusText = "探测失败";
+ } else if (latency > 200) {
+ colorClass = "bg-danger";
+ statusText = "极差";
+ } else if (latency > 100) {
+ colorClass = "bg-warning";
+ statusText = "较差";
+ }
+
+ const displayLatency = latency >= 0 ? `${latency.toFixed(0)}ms` : "-";
+ const tooltip = `${timeStr} | ${displayLatency} | ${statusText}`;
+
+ return (
+
+ );
+ })}
+