From 129cd0f9740db5909523cda0fb909ecf9c8c15f9 Mon Sep 17 00:00:00 2001 From: peijunlei Date: Tue, 1 Sep 2026 14:31:44 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20Add=20sub-category=20handli?= =?UTF-8?q?ng=20and=20URL=20synchronization=20in=20category.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/themes/dist_static/static/js/category.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/public/themes/dist_static/static/js/category.js b/public/themes/dist_static/static/js/category.js index f003d7f..39b1644 100644 --- a/public/themes/dist_static/static/js/category.js +++ b/public/themes/dist_static/static/js/category.js @@ -16,6 +16,20 @@ function getCategoryIdFromQuery() { if (id && document.querySelector(`[data-category-item="${id}"]`)) return id; return getDefaultCategoryId(); } +function getSubIdFromQuery(categoryId) { + const subId = new URLSearchParams(window.location.search).get("sub"); + if (!subId || !categoryId) return ""; + const exists = document.querySelector(`.c-sidebar__sub[data-category-id="${categoryId}"][data-sub-id="${subId}"]`); + return exists ? subId : ""; +} +function syncUrl(state) { + const url = new URL(window.location.href); + if (state.categoryId) url.searchParams.set("cat", state.categoryId); + else url.searchParams.delete("cat"); + if (state.subId) url.searchParams.set("sub", state.subId); + else url.searchParams.delete("sub"); + window.history.replaceState(null, "", url); +} function getCategoryName(categoryId) { return document.querySelector(`.c-sidebar__trigger[data-category-id="${categoryId}"]`)?.dataset.categoryName || ""; } @@ -73,6 +87,7 @@ function bindEvents(state) { state.categoryId = trigger.dataset.categoryId; state.subId = trigger.dataset.subId; state.expandedId = trigger.dataset.categoryId; + syncUrl(state); } else { const id = trigger.dataset.categoryId; if (state.expandedId === id) state.expandedId = ""; @@ -80,9 +95,7 @@ function bindEvents(state) { state.expandedId = id; state.categoryId = id; state.subId = ""; - const url = new URL(window.location.href); - url.searchParams.set("cat", id); - window.history.replaceState(null, "", url); + syncUrl(state); } } updateView(state); @@ -93,7 +106,7 @@ $(function() { const state = { categoryId, expandedId: categoryId, - subId: "" + subId: getSubIdFromQuery(categoryId) }; setActiveNav(); updateView(state);