fix: 修复选择审批人后抄送人消失的问题

- 使用 useRef 防止默认审批人/抄送人数据重复加载
- 确保从选择页面返回时,另一类型的数据不受影响

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-25 18:57:56 +08:00
parent 3968e94195
commit ee931e49b7
2 changed files with 13 additions and 3 deletions
+6 -1
View File
@@ -87,7 +87,11 @@ export default function BusinessTripApply() {
const hasRestoredRef = useRef(false)
// 加载默认审批人和抄送人(仅在首次加载且没有草稿数据时)
const defaultLoadedRef = useRef(false)
useEffect(() => {
// 防止重复加载
if (defaultLoadedRef.current) return
const loadDefaultApprovers = async () => {
// 如果已经有存储的草稿数据,不加载默认值
if (sessionStorage.getItem('businessTripDraft')) {
@@ -112,13 +116,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)
}
}
loadDefaultApprovers()
}, [])
}, [location.state?.fromSelection])
// 处理从选择页面返回的数据和草稿恢复
useEffect(() => {
@@ -1,4 +1,4 @@
import { useState, useEffect } from 'react'
import { useState, useEffect, useRef } from 'react'
import { useNavigate, useLocation } from 'react-router-dom'
import { useTranslation } from 'react-i18next'
import { NavBar, SearchBar, Button, Toast, Empty } from 'antd-mobile'
@@ -39,10 +39,13 @@ export default function SelectUserPage() {
const [loading, setLoading] = useState(false)
const [hasMore, setHasMore] = useState(true)
const [page, setPage] = useState(1)
const [defaultLoaded, setDefaultLoaded] = useState(false)
const initialLoadedRef = useRef(false)
// 获取初始选中的用户(从 sessionStorage 或后端默认配置)
const loadInitialSelected = async () => {
// 防止重复加载
if (initialLoadedRef.current) return
const type = location.state?.type || 'approver'
const storageKey = type === 'approver' ? 'selectedApprovers' : 'selectedCc'
@@ -53,6 +56,7 @@ export default function SelectUserPage() {
const parsed = JSON.parse(storedData)
if (parsed.length > 0) {
setSelectedUsers(parsed)
initialLoadedRef.current = true
return
}
} catch (e) {
@@ -72,6 +76,7 @@ export default function SelectUserPage() {
// 获取失败时设置为空数组
setSelectedUsers([])
}
initialLoadedRef.current = true
}
// 加载用户列表