From be2e56995ecc2cd302c3fc9b24a4a11821fcb6a3 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 25 Feb 2026 18:59:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E4=BA=BA=E5=92=8C=E6=8A=84=E9=80=81=E4=BA=BA?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 确保在所有执行路径上都设置 defaultLoadedRef - 将获取的默认数据保存到 sessionStorage - 移除 useEffect 依赖,只在组件挂载时加载一次 Co-Authored-By: Claude Opus 4.6 --- frontend/src/pages/business-trip/apply.tsx | 26 ++++++++++++++----- .../pages/business-trip/select-approver.tsx | 12 +++++---- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/frontend/src/pages/business-trip/apply.tsx b/frontend/src/pages/business-trip/apply.tsx index b85be1b..d3bdffc 100644 --- a/frontend/src/pages/business-trip/apply.tsx +++ b/frontend/src/pages/business-trip/apply.tsx @@ -89,23 +89,35 @@ export default function BusinessTripApply() { // 加载默认审批人和抄送人(仅在首次加载且没有草稿数据时) const defaultLoadedRef = useRef(false) useEffect(() => { - // 防止重复加载 - if (defaultLoadedRef.current) return - const loadDefaultApprovers = async () => { + // 防止重复加载 + if (defaultLoadedRef.current) return + // 如果已经有存储的草稿数据,不加载默认值 if (sessionStorage.getItem('businessTripDraft')) { + defaultLoadedRef.current = true return } // 如果已经从选择页面返回,不加载默认值 if (location.state?.fromSelection) { + defaultLoadedRef.current = true return } - // 如果已经有存储的人员数据,不加载默认值 - if (sessionStorage.getItem('selectedApprovers') || sessionStorage.getItem('selectedCc')) { + // 如果已经有存储的人员数据,恢复但不标记为已加载(允许后续更新) + const storedApprovers = sessionStorage.getItem('selectedApprovers') + const storedCc = sessionStorage.getItem('selectedCc') + if (storedApprovers || storedCc) { + if (storedApprovers) { + setApprovers(JSON.parse(storedApprovers)) + } + if (storedCc) { + setCcUsers(JSON.parse(storedCc)) + } + defaultLoadedRef.current = true return } + // 从后端获取默认配置 try { const defaultData = await businessTripApi.getDefaultApprovers() if (defaultData.approvers && defaultData.approvers.length > 0) { @@ -116,14 +128,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) } + defaultLoadedRef.current = true } 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 336891d..b34b412 100644 --- a/frontend/src/pages/business-trip/select-approver.tsx +++ b/frontend/src/pages/business-trip/select-approver.tsx @@ -54,11 +54,9 @@ export default function SelectUserPage() { if (storedData) { try { const parsed = JSON.parse(storedData) - if (parsed.length > 0) { - setSelectedUsers(parsed) - initialLoadedRef.current = true - return - } + setSelectedUsers(parsed) + initialLoadedRef.current = true + return } catch (e) { console.error('Failed to parse stored data:', e) } @@ -71,6 +69,10 @@ export default function SelectUserPage() { ? (defaultData.approvers || []) : (defaultData.cc_users || []) setSelectedUsers(defaultUsers) + // 将默认数据也保存到 sessionStorage + if (defaultUsers.length > 0) { + sessionStorage.setItem(storageKey, JSON.stringify(defaultUsers)) + } } catch (error: any) { console.error('Failed to load default approvers:', error) // 获取失败时设置为空数组