diff --git a/frontend/src/pages/activities_page.tsx b/frontend/src/pages/activities_page.tsx index 5f2dffe..8001a45 100644 --- a/frontend/src/pages/activities_page.tsx +++ b/frontend/src/pages/activities_page.tsx @@ -117,7 +117,7 @@ function ActivityCard({ activity }: { activity: Activity }) { ) { navigate(`/resources/${activity.resource?.id}`); } else if (activity.type === ActivityType.ResourceCommented) { - navigate(`/resources/${activity.comment?.resource.id}`); + navigate(`/resources/${activity.comment?.resource.id}#comments`); } }} > diff --git a/frontend/src/pages/resource_details_page.tsx b/frontend/src/pages/resource_details_page.tsx index 198d252..f65f636 100644 --- a/frontend/src/pages/resource_details_page.tsx +++ b/frontend/src/pages/resource_details_page.tsx @@ -99,6 +99,37 @@ export default function ResourcePage() { const navigate = useNavigate(); + // 标签页与hash的映射 + const tabHashList = ["description", "files", "comments"]; + // 读取hash对应的tab索引 + function getPageFromHash(hash: string) { + const h = hash.replace(/^#/, ""); + const idx = tabHashList.indexOf(h); + return idx === -1 ? 0 : idx; + } + // 设置hash + function setHashByPage(idx: number) { + window.location.hash = "#" + tabHashList[idx]; + } + + // 初始状态读取hash + useEffect(() => { + setPage(getPageFromHash(window.location.hash)); + // 监听hash变化 + const onHashChange = () => { + setPage(getPageFromHash(window.location.hash)); + }; + window.addEventListener("hashchange", onHashChange); + return () => window.removeEventListener("hashchange", onHashChange); + // eslint-disable-next-line + }, []); + + // 切换标签页时同步hash + const handleTabChange = (idx: number) => { + setPage(idx); + setHashByPage(idx); + }; + if (isNaN(id)) { return (
@@ -153,9 +184,7 @@ export default function ResourcePage() { type="radio" name="my_tabs" checked={page === 0} - onChange={() => { - setPage(0); - }} + onChange={() => handleTabChange(0)} /> {t("Description")} @@ -169,9 +198,7 @@ export default function ResourcePage() { type="radio" name="my_tabs" checked={page === 1} - onChange={() => { - setPage(1); - }} + onChange={() => handleTabChange(1)} /> {t("Files")} @@ -185,9 +212,7 @@ export default function ResourcePage() { type="radio" name="my_tabs" checked={page === 2} - onChange={() => { - setPage(2); - }} + onChange={() => handleTabChange(2)} /> {t("Comments")}