diff --git a/docs/reviews/assets/biz-compare-config-mobile.png b/docs/reviews/assets/biz-compare-config-mobile.png new file mode 100644 index 0000000..9752405 Binary files /dev/null and b/docs/reviews/assets/biz-compare-config-mobile.png differ diff --git a/docs/reviews/assets/biz-compare-config.png b/docs/reviews/assets/biz-compare-config.png new file mode 100644 index 0000000..b5be99c Binary files /dev/null and b/docs/reviews/assets/biz-compare-config.png differ diff --git a/docs/reviews/assets/biz-compare-desktop.png b/docs/reviews/assets/biz-compare-desktop.png index 17926f3..92feb94 100644 Binary files a/docs/reviews/assets/biz-compare-desktop.png and b/docs/reviews/assets/biz-compare-desktop.png differ diff --git a/docs/reviews/assets/biz-compare-error.png b/docs/reviews/assets/biz-compare-error.png index e032b23..d030ede 100644 Binary files a/docs/reviews/assets/biz-compare-error.png and b/docs/reviews/assets/biz-compare-error.png differ diff --git a/docs/reviews/assets/biz-compare-jobs.png b/docs/reviews/assets/biz-compare-jobs.png new file mode 100644 index 0000000..f0f37f4 Binary files /dev/null and b/docs/reviews/assets/biz-compare-jobs.png differ diff --git a/docs/reviews/assets/biz-compare-legacy.png b/docs/reviews/assets/biz-compare-legacy.png index a374dee..a6c03ba 100644 Binary files a/docs/reviews/assets/biz-compare-legacy.png and b/docs/reviews/assets/biz-compare-legacy.png differ diff --git a/docs/reviews/assets/biz-compare-narrow.png b/docs/reviews/assets/biz-compare-narrow.png index f6f316a..bfec41c 100644 Binary files a/docs/reviews/assets/biz-compare-narrow.png and b/docs/reviews/assets/biz-compare-narrow.png differ diff --git a/docs/reviews/assets/biz-compare-runs-mobile.png b/docs/reviews/assets/biz-compare-runs-mobile.png new file mode 100644 index 0000000..1056b23 Binary files /dev/null and b/docs/reviews/assets/biz-compare-runs-mobile.png differ diff --git a/docs/reviews/assets/biz-compare-runs.png b/docs/reviews/assets/biz-compare-runs.png new file mode 100644 index 0000000..0044588 Binary files /dev/null and b/docs/reviews/assets/biz-compare-runs.png differ diff --git a/docs/reviews/biz-compare-review-2026-10-10.md b/docs/reviews/biz-compare-review-2026-10-10.md index f3150e1..65e342e 100644 --- a/docs/reviews/biz-compare-review-2026-10-10.md +++ b/docs/reviews/biz-compare-review-2026-10-10.md @@ -37,10 +37,12 @@ LLDP 数据存于 `biz_state_lldp_neighbor`,原搜索只读 `biz_state_metric_ - 两个 HeroUI Input 使用了 `isDisabled`,实际需要 `disabled`;过滤值与容差输入的禁用状态已修正。 - 列表缓存缺少并发合并,慢请求可以覆盖强制刷新结果或在失效后重新填充缓存;现在共享请求、保护失效状态并抑制过期的后台通知。 - 清理中英文文案中的重复键,解决相关类型检查错误。 +- 操作后任务选择“同操作前”时原来没有加载批次列表;现在按实际使用的任务读取并共享缓存。切换采集任务时清除原批次选择,避免把上一个任务的批次带入配置。 +- 原通用下拉框嵌套了两个 label,标签不能正确关联控件;现在使用明确的 `htmlFor/id`,并关联提示文本。 ## 性能改动与实际收益范围 -- 合并两套轮询,下一轮在本轮请求完成后启动。模拟浏览器测试中,运行任务在 5.2 秒内请求历史列表和详情各两次,没有重复轮询,也不会因慢请求持续叠加。 +- 合并两套轮询,下一轮在本轮请求完成后启动。模拟浏览器测试中,运行任务在 5.2 秒内历史列表和详情各请求 2–3 次(包含可能尚未完成的初始加载),没有重复轮询,也不会因慢请求持续叠加。 - 已保存的失败、新增、变化等结果在数据库中筛选并分页,避免每次翻页重新加载和对比原始批次。回归测试明确验证这一查询路径不调用 `compare_rows`。 - 同一前后采集任务的批次请求共用短期缓存,列表后台刷新合并同一请求;6 项缓存测试覆盖并发、强制刷新、失败重试与失效竞态。 - 模板查找使用 Map,避免列表搜索与绘制逐项线性查找模板。 @@ -72,10 +74,19 @@ LLDP 数据存于 `biz_state_lldp_neighbor`,原搜索只读 `biz_state_metric_ ## UI 改动 +任务列表、创建向导、任务配置、对比批次和结果区统一使用深色平面、细边框、小圆角、低饱和蓝色和等宽数字。任务配置按作业参数、前后数据源、检查范围、端口映射四个区块组织;数据源左右配对,显示设备地址和采集数量。保存配置作为配置页主操作,删除操作降低视觉权重。 + +批次页增加最近 50 条记录的统计、刷新、加载、错误重试;刷新失败保留已载入记录。已完成只表示执行结束,业务失败/成功/新增数量单独显示。排队与运行使用不同文案,未知进度使用不确定进度条;时间、批次标识和前后采集信息便于核查。页签支持方向键及 Home/End,窄屏配置改为单列,批次表在独立容器中横向滚动。 + 结果区分为当前检查项/全表通过率、结果类型、搜索与辅助操作三层。增加明确的分页范围、清空筛选、加载状态、错误重试和搜索无结果提示。筛选按钮增加按下状态,字段筛选增加展开状态与键盘焦点提示。后续增加了执行配置保存状态及旧记录限制提示。 窄屏检查项导航改为紧凑的横向排列,避免一个检查项占据整行的大块区域。浏览器检查覆盖 1440px、768px、390px;筛选栏没有横向溢出。结果表保留必要的横向滚动。 +- [任务列表](assets/biz-compare-jobs.png) +- [桌面任务配置](assets/biz-compare-config.png) +- [390px 任务配置](assets/biz-compare-config-mobile.png) +- [桌面对比批次](assets/biz-compare-runs.png) +- [390px 对比批次](assets/biz-compare-runs-mobile.png) - [桌面结果区](assets/biz-compare-desktop.png) - [768px 结果区](assets/biz-compare-narrow.png) - [加载失败与重试](assets/biz-compare-error.png) @@ -85,10 +96,10 @@ LLDP 数据存于 `biz_state_lldp_neighbor`,原搜索只读 `biz_state_metric_ - Python:87 项通过,1 项百万行基准默认跳过;单独启用百万行基准后通过。新增测试覆盖搜索、历史配置快照、有界抽样与游标导出。 - 缓存:6 项 Node 测试通过。 -- 浏览器:10 个场景通过,包括配置保存状态、旧记录提示、结果布局、错误清除旧明细、重试、清空筛选、窄屏布局、旧任务响应保护、单套轮询、无运行时异常。 +- 浏览器:27 个场景通过,包括任务列表文案、配置保存数据、同任务批次加载与切换清理、自动模式、检查项开关、创建向导、键盘页签、批次统计/状态/刷新/错误重试、配置保存状态、旧记录提示、结果布局、筛选、窄屏布局、旧任务响应保护、单套轮询、无运行时异常。 - Vite 生产打包成功。 - 本次业务对比页面的类型错误已经修复。全项目 `tsc -b` 仍被 `BizStatePage.tsx`、`BizMigrationPage.tsx` 中原有的类型/未使用变量错误阻塞。 -- 页面 ESLint 原有 34 个错误,主要是 `any` 与现有 React Hook 写法;本次未增加错误。结果请求依赖警告已修正。缓存模块没有 lint 错误。 +- 页面 ESLint 原有 34 个错误,主要是 `any` 与现有 React Hook 写法;批次列表增加类型后减少了 `any`,本次未增加错误。结果请求依赖警告已修正。通用下拉框和缓存模块没有 lint 错误。 - PostgreSQL 路径验证了 SQL 编译与规则降级分支,没有在真实 PostgreSQL 数据库上执行查询或测量执行计划。 可重复执行的检查: diff --git a/web/src/components/ui/FieldSelect.tsx b/web/src/components/ui/FieldSelect.tsx index cc65495..2b12ebd 100644 --- a/web/src/components/ui/FieldSelect.tsx +++ b/web/src/components/ui/FieldSelect.tsx @@ -1,4 +1,4 @@ -import type { ReactNode, SelectHTMLAttributes } from "react"; +import { useId, type ReactNode, type SelectHTMLAttributes } from "react"; import { Label } from "@heroui/react"; /** Compact labeled native select — HeroUI Select is heavy for dense ops forms. */ @@ -9,6 +9,8 @@ export function FieldSelect({ fullWidth, className = "", children, + id, + "aria-describedby": describedBy, ...props }: { label?: ReactNode; @@ -18,17 +20,26 @@ export function FieldSelect({ className?: string; children: ReactNode; } & SelectHTMLAttributes) { + const generatedId = useId(); + const selectId = id || generatedId; + const hintId = `${selectId}-hint`; return ( -