fix(frontend): 修复 AdminTaskDetailPage 中 useMutation 的 Hook 调用顺序

- 将 useMutation 提升至组件顶层,避免因位于 query.isLoading 等早期 return 分支之后导致 React Hooks 顺序变动报错
- 验证方式:前端类型检查(0 error)、单测 132 项全通及前端 Vite 重新构建成功
This commit is contained in:
yml2213
2026-10-10 18:40:07 +08:00
parent 122144a2b7
commit 9b29f7513a
@@ -86,6 +86,24 @@ export default function AdminTaskDetailPage() {
enabled: Boolean(taskId),
})
const detail = query.data?.data
const orderId = detail?.order?.orderId ? String(detail.order.orderId) : ''
const statusMutation = useMutation({
mutationFn: (data: { status: 'active' | 'paused' | 'closed'; reason?: string }) => {
if (!orderId) throw new Error('当前任务无关联订单信息')
return updateAdminOrderClaimStatus(orderId, data)
},
onSuccess: () => {
message.success('订单兑换状态已更新')
setStatusModalVisible(false)
setStatusReason('')
void query.refetch()
},
onError: (err: unknown) => {
message.error(err instanceof Error ? err.message : '更新状态失败')
},
})
const canManageTaskLifecycle = hasAdminRole('operator')
const canOperateIndustryVoucher = hasAdminRole('support')
const canCloseTasks = hasAdminRole('support')
@@ -241,7 +259,6 @@ export default function AdminTaskDetailPage() {
)
}
const orderId = resolvedDetail.order?.orderId ? String(resolvedDetail.order.orderId) : ''
const platformOrderId =
resolvedDetail.order?.platformOrderId || resolvedDetail.task.platformOrderId || ''
const h5ClaimUrl = platformOrderId
@@ -250,22 +267,6 @@ export default function AdminTaskDetailPage() {
const claimStatus = resolvedDetail.order?.claimStatus || 'active'
const claimStatusReason = resolvedDetail.order?.claimStatusReason || ''
const statusMutation = useMutation({
mutationFn: (data: { status: 'active' | 'paused' | 'closed'; reason?: string }) => {
if (!orderId) throw new Error('当前任务无关联订单信息')
return updateAdminOrderClaimStatus(orderId, data)
},
onSuccess: () => {
message.success('订单兑换状态已更新')
setStatusModalVisible(false)
setStatusReason('')
void query.refetch()
},
onError: (err: unknown) => {
message.error(err instanceof Error ? err.message : '更新状态失败')
},
})
const handleCopyH5Link = () => {
if (!h5ClaimUrl) return
navigator.clipboard