From 8ce070bd777afcb38f9fc8c030df64f97d6ad2bf Mon Sep 17 00:00:00 2001 From: root Date: Thu, 26 Feb 2026 18:38:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=20sessionStorage=20?= =?UTF-8?q?=E4=BF=9D=E6=8C=81=20tab=20=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:navigate(-1) 浏览器后退不会传递 location.state 解决方案: - 切换 tab 时保存到 sessionStorage - 页面加载时优先从 sessionStorage 恢复 tab 修改文件: - frontend/src/pages/business-trip/list.tsx - frontend/src/pages/approval/list.tsx Co-Authored-By: Claude Opus 4.6 --- frontend/src/pages/approval/list.tsx | 10 +++++++--- frontend/src/pages/business-trip/list.tsx | 8 ++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/frontend/src/pages/approval/list.tsx b/frontend/src/pages/approval/list.tsx index 024188b..76d2445 100644 --- a/frontend/src/pages/approval/list.tsx +++ b/frontend/src/pages/approval/list.tsx @@ -47,8 +47,10 @@ export default function ApprovalList() { const navigate = useNavigate() const location = useLocation() - // 从 location.state 获取之前的 tab,默认为 'my' - const initialTab = ((location.state as any)?.fromTab as string) || 'my' + // 优先从 sessionStorage 恢复 tab,其次从 location.state,最后默认为 'my' + const savedTab = sessionStorage.getItem('approval-tab') as string + const stateTab = ((location.state as any)?.fromTab as string) || undefined + const initialTab = (savedTab && ['my', 'pending', 'approved', 'cc'].includes(savedTab)) ? savedTab : (stateTab || 'my') const [activeTab, setActiveTab] = useState<'my' | 'pending' | 'approved' | 'cc'>(initialTab) const [list, setList] = useState([]) const [loading, setLoading] = useState(false) @@ -117,7 +119,9 @@ export default function ApprovalList() { // 切换标签 const handleTabChange = (key: string) => { console.log('🔄 Tab changing from', activeTab, 'to', key) - setActiveTab(key as 'my' | 'pending' | 'approved') + setActiveTab(key as 'my' | 'pending' | 'approved' | 'cc') + // 保存 tab 到 sessionStorage + sessionStorage.setItem('approval-tab', key) setList([]) setHasMore(false) setPage(1) diff --git a/frontend/src/pages/business-trip/list.tsx b/frontend/src/pages/business-trip/list.tsx index b3a0483..492902f 100644 --- a/frontend/src/pages/business-trip/list.tsx +++ b/frontend/src/pages/business-trip/list.tsx @@ -33,8 +33,10 @@ export default function BusinessTripList() { const navigate = useNavigate() const location = useLocation() - // 从 location.state 获取之前的 tab,默认为 'my' - const initialTab = ((location.state as any)?.fromTab as string) || 'my' + // 优先从 sessionStorage 恢复 tab,其次从 location.state,最后默认为 'my' + const savedTab = sessionStorage.getItem('business-trip-tab') as string + const stateTab = ((location.state as any)?.fromTab as string) || undefined + const initialTab = (savedTab && ['my', 'pending', 'approved'].includes(savedTab)) ? savedTab : (stateTab || 'my') const [activeTab, setActiveTab] = useState<'my' | 'pending' | 'approved'>(initialTab) const [list, setList] = useState([]) const [loading, setLoading] = useState(false) @@ -77,6 +79,8 @@ export default function BusinessTripList() { // 切换标签 const handleTabChange = (key: string) => { setActiveTab(key as 'my' | 'pending' | 'approved') + // 保存 tab 到 sessionStorage + sessionStorage.setItem('business-trip-tab', key) setList([]) setHasMore(true) setPage(1)