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)
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(() => {
@@ -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)
// 获取失败时设置为空数组