Repository navigation
feat(web-admin): 节点列表搜索,离线通知列表封顶内滚 - #11
Merged
Merged
Conversation
节点多到要翻屏时,没有入口能直接定位某一台。表头上方加一个输入框,按名称、 来源地址与网卡地址过滤,无匹配时表内给出提示而不是空表。 过滤期间禁用拖动排序:一次拖放提交的是全部节点的顺序,而过滤后的列表只能 落在自己这几行上,行索引也不再是完整列表里的位置。清空搜索即恢复。 100 个节点实测:搜 hk-0 得 3 行、三个手柄置灰;搜 203.0.113.7 得 1 行; 搜 zzz 显示「没有匹配的节点」;清空后回到 100 行、手柄恢复。
列表全量铺开,节点一多就把「全部打开 / 全部关闭」顶出视野,而这两个按钮 正是节点多时最需要的。封顶 16rem 内部滚动,按钮始终可见;节点少于约十八台 时高度顶不到上限,观感不变。写法取自延迟任务弹窗里的节点勾选列表。 100 个节点实测:内容高 1392px,可视高 256px。
「还没有节点,右上角添加」与「没有匹配的节点」两条判断彼此独立,库里一台 都没有时输入任意字符会同时命中,表内堆出两行提示。后者补上 nodes.length > 0 的前提,留白也对齐前者。
CarlJia
referenced
this pull request
in CarlJia/monitor
Sep 16, 2026
独立评审(7 路本地 + codex 对抗尝试)后的修复。P0/P1 全部经独立校验器确认。 阻断项: - #1/#4 wasm 在运行时上下文里被同步调用,宿主函数里的嵌套 block_on 会 panic;release 档 panic=abort 直接终止进程,启用财务插件即崩。 call_hook/call_json_hook 补 block_in_place(与 run_one 同一形态), call_plugin_json 去掉多余的外层 block_on。新增 run_blocking:只在多线程 运行时上包一层,纯同步/单线程路径直接跑。 - #2 SSRF 预检只覆盖首个 URL,而共享 client 默认跟随重定向(含 https->http 降级),任一公网开放重定向即可绕过。新增 App::plugin_http (Policy::none()),插件出网与宿主隔离。 - #7 注册表读锁横跨插件执行,插件回头发事件重入同一把锁会死锁。 dispatch_ticks/call_json/dispatch_one 改为只在取快照时借锁。 迁移与数据边界: - #5 删列闸门按 plugin_id 限定(不再被第三方插件的 node: 前缀打开)。 - #15 四条 DROP COLUMN 收进一个事务,完成判据与待删清单同源。 - #16 Db::open 补 version > SCHEMA_VERSION 守卫(与 check_backup 一致)。 - #17 GATED_VERSION 用绝对常量,不再随 SCHEMA_VERSION 漂移。 - #6 删列前记一行非默认值行数,运维在日志里看得到这次丢了什么。 - #18/#23 plugin_data 配额统一按字节,检查与写入同一事务(BEGIN IMMEDIATE)。 - #20 无到期字段的插件事件按 payload 内容哈希(FNV-1a)定键,不再永久去重。 - #21/#22 SSRF 预检的 DNS 解析与请求超时都按剩余预算收缩。 - #24 data_list/nodes_query 用各自的上限,放不下报 -6 而不是静默截断。 契约与文档: - #13/#14 插件端点先判加载状态(400)再判能力声明(404);错误体统一纯文本。 - #8/#9/#29 README 的 nodes_query 字段、data_list 格式、tick 周期按实现改写。 - #26 表单控件按字段名推断的规则写进协议(#27 同步修掉清空价格存成 0)。 - #25 破坏性 ABI/API 变更按 SemVer 升到 2.0.0,README 补升级说明。 - #28 tg-notify 错误码表补 -9 对应的 19。 测试与 CI: - #10 删除空测试体;#11 nodes_query 测试播种节点并断言在线状态。 - #19 插件 crate 接进 CI(独立 crate,根 cargo test 覆盖不到)。 - #12 插件区分「宿主查询失败」与「确实没有节点」,清理拿不到存活集合拒删。 - #3 抽出 plugin_http_fetch,http_post/http_get 不再逐行重复。 验证:hub 166 passed;finance-stats 8;tg-notify 3;web-admin build+lint。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
问题
两页在节点多的时候都会散架。本机主控只有 8 台,看不出来;使用者里有人管几十上百台。
修改
只动
Admin.tsx,不引依赖。节点页加搜索。表头上方一个输入框,按名称、来源地址与网卡地址过滤;无匹配时表内给出「没有匹配的节点」,而不是一张空表。
过滤期间禁用拖动排序:一次拖放提交的是全部节点的顺序,而过滤后的列表只能落在自己这几行上,行索引也不再是完整列表里的位置。手柄置灰并改写
title,清空搜索即恢复。搜索只为定位,排序仍在完整列表上进行。通知页列表封顶
max-h-64内部滚动。节点少于约十八台时高度顶不到上限,观感不变。写法取自延迟任务弹窗里已有的节点勾选列表(同一文件)。为什么不分页
分页解决的是三个问题里最轻的那个(列表长),却会破坏最重的那个:排序是一个全局顺序,跨页拖拽做不到,「全部打开」的语义也会被切碎成"本页"还是"全部"。
测试
npm run lint、npm test、npm run build通过。灌 100 个节点起真实 hub,浏览器实操:
hk-0title变为「清空搜索后可拖动排序」203.0.113.7zzztrim后为空即不过滤)