diff --git a/frontend/src/lib/terms.ts b/frontend/src/lib/terms.ts index 2738f2e2..1ce0fe37 100644 --- a/frontend/src/lib/terms.ts +++ b/frontend/src/lib/terms.ts @@ -2878,6 +2878,8 @@ export const RUN_COMPARE_TEXT = { rowsBase: (base: string) => `基准 ${base}`, rowsTarget: (target: string) => `本次 ${target}`, literals: '变化的参数', + /** 参数前后两个值之间的箭头,读屏念这个 */ + changedTo: '改为', baseSql: '基准的 SQL', targetSql: '本次的 SQL', bothSql: '两次相同的 SQL', diff --git a/frontend/src/pages/runs/ComparePage.tsx b/frontend/src/pages/runs/ComparePage.tsx index 508b3004..30b9e8cf 100644 --- a/frontend/src/pages/runs/ComparePage.tsx +++ b/frontend/src/pages/runs/ComparePage.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react' +import { useEffect, useRef, useState } from 'react' import { Link, useLocation, useNavigate, useSearchParams } from 'react-router-dom' import { GitCompareArrows } from 'lucide-react' import { EmptyState, PageHeader, Skeleton, Spinner } from '../../components/ui' @@ -44,7 +44,11 @@ export function ComparePage() { const targetRun = useRunRecord(target) const baseRun = useRunRecord(base) - const workflowId = targetRun.data?.workflow_id + // 换基准的下拉按本次的工作流取。互换、换了本次之后新的运行记录还在路上时沿用上一次知道的工作流:能比的两次运行 + // 本来就是同一个工作流,不必让下拉先退回「正在读取」、再把同一份列表取一遍 + const lastWorkflow = useRef(undefined) + if (targetRun.state === 'ok') lastWorkflow.current = targetRun.data?.workflow_id ?? null + const workflowId = targetRun.state === 'ok' ? targetRun.data?.workflow_id : lastWorkflow.current const candidates = useCandidates(workflowId) const cmp = useComparison(target, base) diff --git a/frontend/src/pages/runs/compare/Metrics.tsx b/frontend/src/pages/runs/compare/Metrics.tsx index be97860b..319c6bee 100644 --- a/frontend/src/pages/runs/compare/Metrics.tsx +++ b/frontend/src/pages/runs/compare/Metrics.tsx @@ -108,7 +108,7 @@ function MetricRows({ m, k, detailId, open, onToggle }: { - @@ -82,7 +82,9 @@ function QueryItem({ q, k, nth }: { q: RunCompareQuery; k: string; nth: number | {q.literals.map((l, i) => (
  • {valueText(l.base)} + {/* 箭头只给眼睛看,读屏念「改为」 */} → + {T.changedTo} {valueText(l.target)}
  • ))} diff --git a/scripts/check-compare.mjs b/scripts/check-compare.mjs index e4bb797d..a010b0b3 100644 --- a/scripts/check-compare.mjs +++ b/scripts/check-compare.mjs @@ -558,6 +558,8 @@ await section('换基准、互换', async () => { check('换基准:重新请求对比', compareHits(log, T, B2) === 1) check('换基准:页面换成新的一份', (await texts(page, '[data-compare-notes] li')).includes(NOTE_B2)) check('换基准:基准卡跟着换', (await text(page, '[data-compare-run="base"]')).includes('9/21')) + const lists = () => log.filter((k) => k.startsWith('GET /api/runs?') && k.includes(`workflow_id=${WF}`)).length + const listsBefore = lists() await page.locator('button[data-compare-swap]').click() await until(async () => new URL(page.url()).searchParams.get('target') === B2) await until(async () => compareHits(log, B2, T) === 1) @@ -566,6 +568,9 @@ await section('换基准、互换', async () => { check('互换:重新请求对比', compareHits(log, B2, T) === 1) await settled(page) check('互换:两张卡跟着对调', (await page.locator('[data-compare-run="target"] a[data-compare-run-link]').getAttribute('href')) === `/runs/${B2}`) + check('互换:同一工作流的运行列表不重取,下拉照常可用', lists() === listsBefore + && await page.locator('select[data-compare-base-picker]').isEnabled() && await page.locator('select[data-compare-base-picker]').inputValue() === T, + `${listsBefore} → ${lists()}`) }) await section('过时的答复不盖掉新的', async () => {