From 20e7391b15d145b871b62fa039adf53039bf2b94 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 6 Oct 2026 18:00:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E6=95=B4=E7=90=86=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E7=BB=B4=E5=BA=A6=E6=8C=89=E9=92=AE=E4=B8=8D=E9=9A=8F?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E6=B6=88=E5=A4=B1=EF=BC=8C=E5=85=B3=E9=94=AE?= =?UTF-8?q?=E8=AF=8D=E5=BB=B6=E6=97=B6=E5=86=99=E5=85=A5=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E5=86=B2=E6=8E=89=E5=88=9A=E9=80=89=E7=9A=84=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 维度只在没有可选值又没选时隐藏;只有一个值照常显示,免得选了一个条件后别的按钮跳没。 - 搜索框的延时写 URL 只在关键词真变了时执行:否则它带着旧参数,会把 400ms 内刚点的维度条件冲掉。 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei --- apps/web/app/components/organize/record-filters.tsx | 4 ++-- apps/web/app/routes/console/organize.tsx | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/web/app/components/organize/record-filters.tsx b/apps/web/app/components/organize/record-filters.tsx index 726a9c0c..992c3966 100644 --- a/apps/web/app/components/organize/record-filters.tsx +++ b/apps/web/app/components/organize/record-filters.tsx @@ -25,8 +25,8 @@ export function RecordFilterChips({ className="scroll-bleed -mx-1 flex min-w-0 gap-1.5 overflow-x-auto px-1 pb-0.5 [scrollbar-width:none]" > {dims - // 只有一个可选值又没选时不用筛(比如只有一个媒体库目录) - .filter((d) => d.options.length > 1 || !!values[d.key]) + // 没有可选值又没选时不显示(比如还没有带分类的记录);随筛选变化按钮不跳动,只有一个值也照常显示 + .filter((d) => d.options.length > 0 || !!values[d.key]) .map((d) => ( onChange(d.key, x)} /> ))} diff --git a/apps/web/app/routes/console/organize.tsx b/apps/web/app/routes/console/organize.tsx index 126c140c..4eda2afd 100644 --- a/apps/web/app/routes/console/organize.tsx +++ b/apps/web/app/routes/console/organize.tsx @@ -386,10 +386,12 @@ export default function OrganizePage() { const byIds = useFileRecords({ ids }, ids.length > 0); const navigate = useNavigate(); const qc = useQueryClient(); + // 只在关键词真变了时写 URL:否则这次延时写入会带着旧的查询参数,把刚点的维度条件冲掉 useEffect(() => { + if (qInput.trim() === v.q) return; const t = setTimeout(() => setFilter("q", qInput.trim()), 400); return () => clearTimeout(t); - }, [qInput, setFilter]); + }, [qInput, v.q, setFilter]); // 时间筛选换成具体时刻只在切换时算一次,避免每次渲染查询键都变 const since = useMemo(() => sinceOf(v.time), [v.time]); const base: Omit = {