fix: 修复默认审批人和抄送人不显示的问题
- 确保在所有执行路径上都设置 defaultLoadedRef - 将获取的默认数据保存到 sessionStorage - 移除 useEffect 依赖,只在组件挂载时加载一次 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
// 获取失败时设置为空数组
|
||||
|
||||
Reference in New Issue
Block a user