fix: 修复默认审批人和抄送人不显示的问题

- 确保在所有执行路径上都设置 defaultLoadedRef
- 将获取的默认数据保存到 sessionStorage
- 移除 useEffect 依赖,只在组件挂载时加载一次

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-25 18:59:23 +08:00
parent ee931e49b7
commit be2e56995e
2 changed files with 26 additions and 12 deletions
+19 -7
View File
@@ -89,23 +89,35 @@ export default function BusinessTripApply() {
// 加载默认审批人和抄送人(仅在首次加载且没有草稿数据时) // 加载默认审批人和抄送人(仅在首次加载且没有草稿数据时)
const defaultLoadedRef = useRef(false) const defaultLoadedRef = useRef(false)
useEffect(() => { useEffect(() => {
// 防止重复加载
if (defaultLoadedRef.current) return
const loadDefaultApprovers = async () => { const loadDefaultApprovers = async () => {
// 防止重复加载
if (defaultLoadedRef.current) return
// 如果已经有存储的草稿数据,不加载默认值 // 如果已经有存储的草稿数据,不加载默认值
if (sessionStorage.getItem('businessTripDraft')) { if (sessionStorage.getItem('businessTripDraft')) {
defaultLoadedRef.current = true
return return
} }
// 如果已经从选择页面返回,不加载默认值 // 如果已经从选择页面返回,不加载默认值
if (location.state?.fromSelection) { if (location.state?.fromSelection) {
defaultLoadedRef.current = true
return 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 return
} }
// 从后端获取默认配置
try { try {
const defaultData = await businessTripApi.getDefaultApprovers() const defaultData = await businessTripApi.getDefaultApprovers()
if (defaultData.approvers && defaultData.approvers.length > 0) { if (defaultData.approvers && defaultData.approvers.length > 0) {
@@ -116,14 +128,14 @@ export default function BusinessTripApply() {
setCcUsers(defaultData.cc_users) setCcUsers(defaultData.cc_users)
sessionStorage.setItem('selectedCc', JSON.stringify(defaultData.cc_users)) sessionStorage.setItem('selectedCc', JSON.stringify(defaultData.cc_users))
} }
defaultLoadedRef.current = true
} catch (error) { } catch (error) {
console.error('Failed to load default approvers:', error) console.error('Failed to load default approvers:', error)
} }
defaultLoadedRef.current = true
} }
loadDefaultApprovers() loadDefaultApprovers()
}, [location.state?.fromSelection]) }, [])
// 处理从选择页面返回的数据和草稿恢复 // 处理从选择页面返回的数据和草稿恢复
useEffect(() => { useEffect(() => {
@@ -54,11 +54,9 @@ export default function SelectUserPage() {
if (storedData) { if (storedData) {
try { try {
const parsed = JSON.parse(storedData) const parsed = JSON.parse(storedData)
if (parsed.length > 0) { setSelectedUsers(parsed)
setSelectedUsers(parsed) initialLoadedRef.current = true
initialLoadedRef.current = true return
return
}
} catch (e) { } catch (e) {
console.error('Failed to parse stored data:', e) console.error('Failed to parse stored data:', e)
} }
@@ -71,6 +69,10 @@ export default function SelectUserPage() {
? (defaultData.approvers || []) ? (defaultData.approvers || [])
: (defaultData.cc_users || []) : (defaultData.cc_users || [])
setSelectedUsers(defaultUsers) setSelectedUsers(defaultUsers)
// 将默认数据也保存到 sessionStorage
if (defaultUsers.length > 0) {
sessionStorage.setItem(storageKey, JSON.stringify(defaultUsers))
}
} catch (error: any) { } catch (error: any) {
console.error('Failed to load default approvers:', error) console.error('Failed to load default approvers:', error)
// 获取失败时设置为空数组 // 获取失败时设置为空数组