Fix business compare history, search, sampling and exports

This commit is contained in:
oliver 2026-10-10 23:20:50 +08:00
parent afa8e06b2d
commit 4d5101ec3a
19 changed files with 1598 additions and 274 deletions

View file

@ -474,6 +474,10 @@ const en = {
sideAfter: "After",
sidesVs: "vs",
sidesTitle: "Compare sides",
configSnapshot: "Execution settings saved",
configSnapshotHint: "Template rules and port mapping are fixed for this run. Later edits do not affect historical lookup. The downloaded report includes the execution settings.",
configLegacy: "Legacy run: settings not saved",
configLegacyHint: "This run has no configuration snapshot. Success lookup and compact row reconstruction use the current settings, which may differ from the original execution.",
pick: "Select…",
sameAsBefore: "Same as before / select…",
autoHint: "auto: new after-task batches trigger compare",
@ -532,8 +536,14 @@ const en = {
ranWithDuration: "Compare finished ({{s}}s)",
unchangedNotStored: "Success rows were counted but not stored. Set “Store success rows” to sample and re-run for spot-check.",
unchangedSampleHint: "{{total}} success rows total; browsing a stratified sample of {{listed}}. Search any route for live source lookup. Pass rate uses all {{total}}.",
liveSearchHint: "Field filters look up source batches live; tabs only filter kind. E.g. direction=out, network=1.1.1.1.",
liveSearchTruncatedHint: "Search results truncated — narrow the field filters.",
liveSearchHint: "Pairs are completed from source batches before filtering. Pass rate still uses the full sheet.",
liveSearchTruncatedHint: "Search limit reached; some entries are omitted. Narrow the filters. Incomplete key groups were skipped.",
clearSearch: "Clear filters",
resultLoading: "Loading comparison details…",
resultRange: "{{from}}–{{to}} of {{total}}",
resultLoadFailed: "Could not load comparison details",
retry: "Retry",
searchEmpty: "No results match these filters. Clear filters or select another result type.",
clearKeyFilters: "Clear fields",
storeUnchanged: "Store success rows",
storeUnchangedAuto: "Auto (full if small / sample 5k + hydrate if large)",
@ -567,8 +577,6 @@ const en = {
pickBatchRun: "Select compare run",
pickRun: "Select run…",
runCount: "{{n}} runs",
resultEmpty: "No matching diff rows",
resultFilterPh: "Free text, or direction:out network:1.1.1.1",
kindAll: "All",
kindDiff: "Fail",
kindAdded: "Added",
@ -712,7 +720,6 @@ const en = {
newBaseline: "New baseline batch",
needProjectFields: "Enter a name and pick old/new portrait tasks",
needExpectPorts: "Select at least one expected object for this batch",
needBaselineFirst: "Save an old baseline batch first to list expect objects",
needBothBaselines: "Save both old and new baseline batches before evaluating",
errOldBaselineRequired: "Old baseline batch is required",
errNewBaselineRequired: "New baseline batch is required",

View file

@ -473,6 +473,10 @@ const zh = {
sideAfter: "操作后",
sidesVs: "比对",
sidesTitle: "比对双方",
configSnapshot: "执行配置已保存",
configSnapshotHint: "此记录的模板规则和端口映射已固定;后续编辑不影响历史回查,下载报告包含执行配置。",
configLegacy: "旧记录:未保存执行配置",
configLegacyHint: "此记录创建时未保存配置快照;成功行回查和精简明细还原使用当前配置,修改配置后可能与当时结果不同。",
pick: "选择…",
sameAsBefore: "同操作前 / 选择…",
autoHint: "auto:操作后任务新批次到达会自动跑比对",
@ -531,8 +535,14 @@ const zh = {
ranWithDuration: "比对完成(耗时 {{s}} 秒)",
unchangedNotStored: "成功行仅统计数量未落库。可在任务配置将「成功行保存」改为抽样后重新比对(抽查用)。",
unchangedSampleHint: "成功共 {{total}} 条,明细抽样 {{listed}} 条(分层抽查)。要查任意路由请输入筛选条件——将按原表即时判定。通过率按全部 {{total}} 计。",
liveSearchHint: "按字段回查原表即时判定;页签只过滤种类。例:direction=out,network=1.1.1.1。",
liveSearchTruncatedHint: "搜索结果已截断,请再收窄字段条件。",
liveSearchHint: "从原始批次补齐同一业务的前后数据后筛选;通过率仍按全表统计。",
liveSearchTruncatedHint: "搜索已达上限,部分业务未展示。请收窄条件;不完整的业务分组已跳过。",
clearSearch: "清空筛选",
resultLoading: "正在加载对比明细…",
resultRange: "{{from}}–{{to}} / {{total}} 条",
resultLoadFailed: "对比明细加载失败",
retry: "重试",
searchEmpty: "当前筛选条件下没有匹配结果,可清空筛选或切换结果类型。",
clearKeyFilters: "清空字段",
storeUnchanged: "成功行保存",
storeUnchangedAuto: "自动(小表全量 / 大表抽样 5000+原表补全)",
@ -778,7 +788,6 @@ const zh = {
metaBaseline: "基线",
baselineOk: "已设",
baselineMissing: "缺",
needBaselineFirst: "先设基线",
enableHighfreq: "开启高频",
highfreqReady: "高频已就绪",
collectNow: "立即采集",
@ -830,10 +839,6 @@ const zh = {
currentMissingBanner: "缺当前批次:{{metrics}}",
highfreqReadyInactive: "高频已绑定(窗口未开,未立即采集)",
collectPartial: "部分失败(成功 {{ok}} / 失败 {{fail}})",
confirmProjectDone: "确认完成项目并暂停全部高频?",
projectMarkedDone: "已完成,高频已停",
confirmDeleteProject: "确认删除项目?将停高频并清批次记录。",
projectDeleted: "已删除",
errMetricNeedsBindings: "监控项「{{metric}}」需要参数绑定({{params}}),割接高频暂不支持,请去掉该项",
errNoProfileForMetric: "监控项「{{metric}}」在当前设备厂商下无可用采集 profile",
acceptTitle: "本批验收",