评审 P1 修正一批

设置:显式主题补 color-scheme,滚动条和 select 弹层这些 UA 部件不看
变量。连接:断开失败的提示与轮询取数分成两条通道,不再被下一秒的轮询
成功抹掉;排序加 id 决胜,内核快照的遍历序无序,空闲连接下载量普遍
相同,没有决胜键行会在断开按钮下面跳。仪表盘与请求:一条流断了连带
收掉同组连接;断流不等于内核没了(配置重载掐断流而 online 从未翻转),
5 秒自动重连。规则:正则类规则(DOMAIN-REGEX 等三种)按内核的
payloadCanContainComma 语义拆分与禁入结构化编辑,顶层逗号不再把正则
截一半当目标;findRuleIssues 注释里对内核校验的错误断言改正。
This commit is contained in:
2026-08-11 21:14:03 +08:00
parent bd087aabea
commit 35eb463633
8 changed files with 102 additions and 18 deletions
+23 -3
View File
@@ -51,7 +51,10 @@ function startStreams() {
.catch(() => {})
// 正常结束也是断了:这两个流本身永不结束
.finally(() => {
if (!ctrl.signal.aborted) streamFailed.value = true
if (ctrl.signal.aborted) return
// 一条断了把另一条也收掉:界面已经显示离线,不留一条看不见的活连接
ctrl.abort()
streamFailed.value = true
})
run('/traffic', (p) => {
@@ -84,7 +87,7 @@ onMounted(() => {
}
})
// 内核从离线恢复(比如路由页保存配置触发的重载)时重新接上;掉线时收掉
// 内核从离线恢复(外壳的心跳每 10 秒探测一次)时重新接上;掉线时收掉
watch(
() => kernel.value.online,
(online) => {
@@ -100,7 +103,24 @@ watch(
},
)
onBeforeUnmount(stopStreams)
// 断流不等于内核没了:配置重载会掐断流,内核几秒内就回来、online 从未翻转。
// 稍后重试一次;再失败会重新走到这里,形成 5 秒一次的重试节奏,直到接上或离开页面
let retryTimer = 0
watch(streamFailed, (failed) => {
window.clearTimeout(retryTimer)
if (!failed) return
retryTimer = window.setTimeout(() => {
if (!kernel.value.online) return // 真离线交给上面那个 watch
streamFailed.value = false
startStreams()
void loadConfigs()
}, 5000)
})
onBeforeUnmount(() => {
stopStreams()
window.clearTimeout(retryTimer)
})
const latest = computed(() => samples.value.at(-1) ?? null)