diff --git a/frontend/src/pages/business-trip/apply.tsx b/frontend/src/pages/business-trip/apply.tsx index 3426589..b85be1b 100644 --- a/frontend/src/pages/business-trip/apply.tsx +++ b/frontend/src/pages/business-trip/apply.tsx @@ -87,7 +87,11 @@ export default function BusinessTripApply() { const hasRestoredRef = useRef(false) // 加载默认审批人和抄送人(仅在首次加载且没有草稿数据时) + const defaultLoadedRef = useRef(false) useEffect(() => { + // 防止重复加载 + if (defaultLoadedRef.current) return + const loadDefaultApprovers = async () => { // 如果已经有存储的草稿数据,不加载默认值 if (sessionStorage.getItem('businessTripDraft')) { @@ -112,13 +116,14 @@ export default function BusinessTripApply() { setCcUsers(defaultData.cc_users) sessionStorage.setItem('selectedCc', JSON.stringify(defaultData.cc_users)) } + defaultLoadedRef.current = true } catch (error) { console.error('Failed to load default approvers:', error) } } loadDefaultApprovers() - }, []) + }, [location.state?.fromSelection]) // 处理从选择页面返回的数据和草稿恢复 useEffect(() => { diff --git a/frontend/src/pages/business-trip/select-approver.tsx b/frontend/src/pages/business-trip/select-approver.tsx index 869e8d1..336891d 100644 --- a/frontend/src/pages/business-trip/select-approver.tsx +++ b/frontend/src/pages/business-trip/select-approver.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react' +import { useState, useEffect, useRef } from 'react' import { useNavigate, useLocation } from 'react-router-dom' import { useTranslation } from 'react-i18next' import { NavBar, SearchBar, Button, Toast, Empty } from 'antd-mobile' @@ -39,10 +39,13 @@ export default function SelectUserPage() { const [loading, setLoading] = useState(false) const [hasMore, setHasMore] = useState(true) const [page, setPage] = useState(1) - const [defaultLoaded, setDefaultLoaded] = useState(false) + const initialLoadedRef = useRef(false) // 获取初始选中的用户(从 sessionStorage 或后端默认配置) const loadInitialSelected = async () => { + // 防止重复加载 + if (initialLoadedRef.current) return + const type = location.state?.type || 'approver' const storageKey = type === 'approver' ? 'selectedApprovers' : 'selectedCc' @@ -53,6 +56,7 @@ export default function SelectUserPage() { const parsed = JSON.parse(storedData) if (parsed.length > 0) { setSelectedUsers(parsed) + initialLoadedRef.current = true return } } catch (e) { @@ -72,6 +76,7 @@ export default function SelectUserPage() { // 获取失败时设置为空数组 setSelectedUsers([]) } + initialLoadedRef.current = true } // 加载用户列表