From f3a9e442e9c3a1c67959dbc5c124ae6cc00cf1ac Mon Sep 17 00:00:00 2001 From: root Date: Thu, 26 Feb 2026 18:36:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=BF=94=E5=9B=9E=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=97=B6=E4=BF=9D=E6=8C=81=E4=B9=8B=E5=89=8D=E7=9A=84=20tab=20?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:从详情页返回时,列表总是重置到"我发起的" tab 解决方案: 1. 导航到详情页时传递 state: { fromTab: activeTab } 2. 列表页从 location.state.fromTab 恢复 tab 状态 修改文件: - frontend/src/pages/approval/list.tsx - frontend/src/pages/business-trip/list.tsx Co-Authored-By: Claude Opus 4.6 --- frontend/src/pages/approval/list.tsx | 9 ++++++--- frontend/src/pages/business-trip/list.tsx | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/frontend/src/pages/approval/list.tsx b/frontend/src/pages/approval/list.tsx index 3cf1c74..024188b 100644 --- a/frontend/src/pages/approval/list.tsx +++ b/frontend/src/pages/approval/list.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useRef } from 'react' -import { useNavigate } from 'react-router-dom' +import { useNavigate, useLocation } from 'react-router-dom' import { useTranslation } from 'react-i18next' import { List, Card, Tag, Tabs, PullToRefresh, InfiniteScroll } from 'antd-mobile' import { @@ -45,8 +45,11 @@ const businessTypeConfig: Record = { export default function ApprovalList() { const { t } = useTranslation() const navigate = useNavigate() + const location = useLocation() - const [activeTab, setActiveTab] = useState<'my' | 'pending' | 'approved' | 'cc'>('my') + // 从 location.state 获取之前的 tab,默认为 'my' + const initialTab = ((location.state as any)?.fromTab as string) || 'my' + const [activeTab, setActiveTab] = useState<'my' | 'pending' | 'approved' | 'cc'>(initialTab) const [list, setList] = useState([]) const [loading, setLoading] = useState(false) const [hasMore, setHasMore] = useState(false) @@ -144,7 +147,7 @@ export default function ApprovalList() { // 查看详情 const handleViewDetail = (id: number) => { - navigate(`/approval/${id}`) + navigate(`/approval/${id}`, { state: { fromTab: activeTab } }) } // 格式化日期 diff --git a/frontend/src/pages/business-trip/list.tsx b/frontend/src/pages/business-trip/list.tsx index c3e4df6..b3a0483 100644 --- a/frontend/src/pages/business-trip/list.tsx +++ b/frontend/src/pages/business-trip/list.tsx @@ -1,5 +1,5 @@ import { useState, useEffect } from 'react' -import { useNavigate } from 'react-router-dom' +import { useNavigate, useLocation } from 'react-router-dom' import { useTranslation } from 'react-i18next' import { List, Card, Tag, Button, Tabs, PullToRefresh, InfiniteScroll } from 'antd-mobile' import { AddOutline, ClockCircleOutline, CheckCircleOutline, CloseCircleOutline, ExclamationCircleOutline } from 'antd-mobile-icons' @@ -31,8 +31,11 @@ interface BusinessTripItem { export default function BusinessTripList() { const { t } = useTranslation() const navigate = useNavigate() + const location = useLocation() - const [activeTab, setActiveTab] = useState<'my' | 'pending' | 'approved'>('my') + // 从 location.state 获取之前的 tab,默认为 'my' + const initialTab = ((location.state as any)?.fromTab as string) || 'my' + const [activeTab, setActiveTab] = useState<'my' | 'pending' | 'approved'>(initialTab) const [list, setList] = useState([]) const [loading, setLoading] = useState(false) const [hasMore, setHasMore] = useState(true) @@ -97,7 +100,7 @@ export default function BusinessTripList() { // 查看详情 const handleViewDetail = (id: number) => { - navigate(`/business-trip/detail/${id}`) + navigate(`/business-trip/detail/${id}`, { state: { fromTab: activeTab } }) } // 新建申请