fix: 简化逻辑,确保新建申请时加载默认审批人
- 移除草稿恢复逻辑(从列表页新建时清除所有旧数据) - 简化 useEffect 为两种情况: 1. 从选择页面返回:恢复 sessionStorage 数据 2. 从列表页新建:清除旧数据,加载默认配置 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user