消化一批 P3:GEOIP 附加参数、坏 JSON 跳行、兜底丢弃;请求连接两页保活
ini 里 []GEOIP,CN,no-resolve 的附加参数原来被并进类别名,生成字段错位 的规则;现在拆出来放在目标之后。表里已有 MATCH 时配方的 []FINAL 不再 追加成死行,改为丢弃并在成功提示里注明——已有兜底是用户自己安排的 分流终点。 遥测流里偶发的坏 JSON 行改为跳过,原来一行坏数据会杀掉整个流进 5 秒 重试循环。请求页:跟随底部的阈值从 24px 降到 8px(原值比行高还大, 向上滚不足一行就被新日志拽回);silent 级别下的空状态不再说「没有流量 经过」。logs.test 的 localStorage 桩用完删掉,bun test 单进程跑,全局 残留会影响之后的测试文件。api.ts 的 format 注释照 provider.go:37 纠正。 请求页和连接页包进 KeepAlive:切走不销毁,筛选词、排序、滚动位置留住。 KeepAlive 常驻、子组件自己 v-if 进出;连接页的轮询改挂 activated—— 挂载时它也触发,继续用 onMounted 会叠两个定时器,切走时停掉轮询。
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
* 收集在 web/log-store.ts 的常驻单例里——日志跨页面留存,切走再回来不清空。
|
||||
* 这个组件只管呈现:筛选、暂停、清空、跟随滚动。
|
||||
*/
|
||||
import { computed, nextTick, onMounted, ref, watch } from 'vue'
|
||||
import { computed, nextTick, onActivated, onMounted, ref, watch } from 'vue'
|
||||
import { kernel } from '../runtime'
|
||||
import { LEVELS } from '../logs'
|
||||
import { clearLogs, ended, failure, level, paused, revision, rows } from '../log-store'
|
||||
@@ -34,7 +34,9 @@ let follow = true
|
||||
function onScroll() {
|
||||
const el = listEl.value
|
||||
if (!el) return
|
||||
follow = el.scrollTop + el.clientHeight >= el.scrollHeight - 24
|
||||
// 阈值必须小于一行的高度(约 25px),否则向上滚不足一行仍算「在底部」,
|
||||
// 新日志会把人拽回去。8px 只容浏览器的取整误差
|
||||
follow = el.scrollTop + el.clientHeight >= el.scrollHeight - 8
|
||||
}
|
||||
|
||||
async function scrollToBottom(force = false) {
|
||||
@@ -49,6 +51,9 @@ watch(revision, () => void scrollToBottom())
|
||||
|
||||
// 切回这一页时接上离开时的进度,直接落到最新一条
|
||||
onMounted(() => void scrollToBottom(true))
|
||||
// 组件包在 KeepAlive 里,切走期间元素脱离文档、scrollHeight 不可靠,
|
||||
// 跟随模式的自动滚动可能把位置写歪;切回来重新贴底(手动上滚过的不动)
|
||||
onActivated(() => void scrollToBottom())
|
||||
|
||||
const visible = computed(() => {
|
||||
const q = query.value.trim().toLowerCase()
|
||||
@@ -94,7 +99,11 @@ const visible = computed(() => {
|
||||
{{ rows.length > 0 ? '内核未连接,日志不再更新。' : '内核未连接,无法读取日志。' }}
|
||||
</p>
|
||||
<p v-else-if="rows.length === 0 && !failure && !ended" class="state">
|
||||
暂无日志。没有流量经过内核时不会产生请求记录。
|
||||
{{
|
||||
level === 'silent'
|
||||
? '级别为 silent 时内核不输出日志。'
|
||||
: '暂无日志。没有流量经过内核时不会产生请求记录。'
|
||||
}}
|
||||
</p>
|
||||
<p v-else-if="visible.length === 0 && rows.length > 0" class="state">
|
||||
没有包含「{{ query.trim() }}」的日志。
|
||||
|
||||
Reference in New Issue
Block a user