From 50660abf11c2dfab8dda987bd686adc57f1380d5 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Fri, 9 Oct 2026 16:49:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E9=A2=98=E7=9B=AE=E5=88=97=E8=A1=A8):=20?= =?UTF-8?q?=E5=88=87=E4=BA=86=E5=87=A0=E4=B8=AA=E7=9F=A5=E8=AF=86=E7=82=B9?= =?UTF-8?q?=E5=86=8D=E6=8C=89=E5=90=8E=E9=80=80=EF=BC=8C=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E5=9B=9E=E5=88=B0=E4=BA=86=E5=85=A8=E9=83=A8=E9=A2=98=E7=9B=AE?= =?UTF-8?q?=E3=80=81=E9=A1=B5=E9=9D=A2=E8=BF=98=E5=81=9C=E5=9C=A8=E4=B8=8A?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=9F=A5=E8=AF=86=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- apps/web/src/shared/composables/pagination.ts | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/apps/web/src/shared/composables/pagination.ts b/apps/web/src/shared/composables/pagination.ts index 6b14b04..e96524e 100644 --- a/apps/web/src/shared/composables/pagination.ts +++ b/apps/web/src/shared/composables/pagination.ts @@ -49,7 +49,14 @@ export function usePagination>( // 同步其他查询参数 Object.keys(initialQuery).forEach((key) => { const value = route.query[key] - if (value !== undefined) { + if (value === undefined) { + // 地址里没有这一项(后退到不带筛选的地址、点顶栏回到列表)就是没筛, + // 不能留着上一个地址的值:后退回 /problem 页面还停在上一个知识点。 + // 和 clearQuery 一样清成空值 —— initialQuery 是进页面时从地址读的,不一定是空的 + const initialValue = initialQuery[key] + writable[key] = + typeof initialValue === "boolean" ? false : typeof initialValue === "number" ? 0 : "" + } else { // 处理不同类型的参数 if (typeof initialQuery[key] === "boolean") { writable[key] = value === "1" || value === "true" @@ -65,7 +72,21 @@ export function usePagination>( // 更新 URL function updateRoute() { const newQuery = filterEmptyValue(query) - router.push({ + // 和当前地址只差默认的 page / limit(后退到 /problem,同步完又补上 ?page=1&limit=30): + // 是同一个页面,用 replace,别多压一条历史、让人得多按一次后退 + const normalized = (q: Record) => + JSON.stringify( + Object.entries(q) + .filter(([key, value]) => { + if (key === "page") return String(value) !== String(defaultPage) + if (key === "limit") return String(value) !== String(defaultLimit) + return value != null && value !== "" + }) + .map(([key, value]) => [key, String(value)]) + .sort(), + ) + const navigate = normalized(route.query) === normalized(newQuery) ? router.replace : router.push + navigate({ path: route.path, query: newQuery, })