From 9b29f7513ad688b357298060e38950bf4c62fb79 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sat, 10 Oct 2026 18:40:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(frontend):=20=E4=BF=AE=E5=A4=8D=20AdminTask?= =?UTF-8?q?DetailPage=20=E4=B8=AD=20useMutation=20=E7=9A=84=20Hook=20?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 useMutation 提升至组件顶层,避免因位于 query.isLoading 等早期 return 分支之后导致 React Hooks 顺序变动报错 - 验证方式:前端类型检查(0 error)、单测 132 项全通及前端 Vite 重新构建成功 --- .../src/pages/admin/AdminTaskDetailPage.tsx | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx b/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx index 978472dc..4168067f 100644 --- a/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx +++ b/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx @@ -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