fix: 简化逻辑,确保新建申请时加载默认审批人

- 移除草稿恢复逻辑(从列表页新建时清除所有旧数据)
- 简化 useEffect 为两种情况:
  1. 从选择页面返回:恢复 sessionStorage 数据
  2. 从列表页新建:清除旧数据,加载默认配置

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-25 21:42:21 +08:00
parent 67fe4bcb0e
commit 76ce4ba1b6
+12 -51
View File
@@ -88,20 +88,16 @@ export default function BusinessTripApply() {
// 统一处理:草稿恢复、默认审批人加载、选择页面返回
const initRef = useRef(false)
const fromSelectionRef = useRef(false)
useEffect(() => {
const fromSelection = location.state?.fromSelection
fromSelectionRef.current = !!fromSelection
console.log('📍 Page init:', { fromSelection, initRef: initRef.current })
console.log('🔍 SessionStorage keys:', Object.keys(sessionStorage))
console.log('📍 Page init:', { fromSelection, locationState: location.state, initRef: initRef.current })
// 1. 从选择页面返回:恢复所有人员数据
if (fromSelection) {
console.log('🔄 Returning from selection page')
const approversData = sessionStorage.getItem('selectedApprovers')
console.log('📦 approvers data:', approversData)
if (approversData) {
setApprovers(JSON.parse(approversData))
console.log('✅ Restored approvers')
@@ -110,7 +106,6 @@ export default function BusinessTripApply() {
}
const ccData = sessionStorage.getItem('selectedCc')
console.log('📦 cc data:', ccData)
if (ccData) {
setCcUsers(JSON.parse(ccData))
console.log('✅ Restored CC')
@@ -127,48 +122,21 @@ export default function BusinessTripApply() {
}
initRef.current = true
// 3. 恢复草稿数据(理由、行程)
const draftData = sessionStorage.getItem('businessTripDraft')
console.log('📦 draft data exists:', !!draftData)
if (draftData) {
console.log('📦 Restoring draft data')
try {
const draft = JSON.parse(draftData)
if (draft.reason) setReason(draft.reason)
if (draft.itineraries && draft.itineraries.length > 0) {
const restoredItineraries = draft.itineraries.map((item: any) => ({
...item,
startTime: item.startTime ? new Date(item.startTime) : null,
endTime: item.endTime ? new Date(item.endTime) : null,
}))
setItineraries(restoredItineraries)
}
// 恢复草稿关联的人员数据
const approversData = sessionStorage.getItem('selectedApprovers')
const ccData = sessionStorage.getItem('selectedCc')
console.log('📦 draft approvers:', approversData)
console.log('📦 draft cc:', ccData)
if (approversData) setApprovers(JSON.parse(approversData))
if (ccData) setCcUsers(JSON.parse(ccData))
} catch (error) {
console.error('❌ Failed to restore draft:', error)
}
return
}
// 4. 首次进入且无草稿:加载默认审批人和抄送人
console.log('🔄 Loading default approvers from backend...')
console.log('🔑 Token exists:', !!localStorage.getItem('token'))
// 3. 从列表页新建申请:清除旧数据,加载默认配置
console.log('🆕 New application - clearing old data and loading defaults')
sessionStorage.removeItem('businessTripDraft')
sessionStorage.removeItem('selectedApprovers')
sessionStorage.removeItem('selectedCc')
setReason('')
setItineraries([{ startTime: null, endTime: null, departure: '', destination: '', transport: '', tripType: '' as 'oneway' | 'roundtrip' | '', remark: '' }])
setApprovers([])
setCcUsers([])
// 4. 加载默认审批人和抄送人
const loadDefaultApprovers = async () => {
// 清除旧数据
console.log('🧹 Clearing old selection data')
sessionStorage.removeItem('selectedApprovers')
sessionStorage.removeItem('selectedCc')
console.log('📡 Calling API...')
try {
console.log('📡 Calling API...')
const defaultData = await businessTripApi.getDefaultApprovers()
console.log('✅ API Response:', defaultData)
@@ -176,21 +144,14 @@ export default function BusinessTripApply() {
console.log('✅ Setting approvers:', defaultData.approvers)
setApprovers(defaultData.approvers)
sessionStorage.setItem('selectedApprovers', JSON.stringify(defaultData.approvers))
} else {
console.log('⚠️ No approvers in response')
}
if (defaultData.cc_users && defaultData.cc_users.length > 0) {
console.log('✅ Setting cc_users:', defaultData.cc_users)
setCcUsers(defaultData.cc_users)
sessionStorage.setItem('selectedCc', JSON.stringify(defaultData.cc_users))
} else {
console.log('⚠️ No cc_users in response')
}
console.log('📊 Final state - approvers:', defaultData.approvers?.length, 'cc:', defaultData.cc_users?.length)
} catch (error: any) {
console.error('❌ Failed to load default approvers:', error.message)
console.error('❌ Error details:', error)
}
}