From 3f2bb3f09afaf8203e758e1ca2bb0b8a0750819d Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sat, 10 Oct 2026 18:46:49 +0800 Subject: [PATCH] =?UTF-8?q?fix(admin):=20=E4=BF=AE=E5=A4=8D=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=E5=90=AF=E7=94=A8=E8=AE=A2=E5=8D=95=E5=85=91=E6=8D=A2?= =?UTF-8?q?=E6=97=B6=20orderId=20=E9=97=AD=E5=8C=85=E5=A4=B1=E6=95=88?= =?UTF-8?q?=E5=8F=8A=20H5=20=E9=A1=B5=E9=9D=A2=E9=87=8D=E8=AF=95=E6=9C=BA?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复任务详情页和订单详情页中 statusMutation 闭包提前捕获空 orderId 导致恢复启用请求未发出的问题,改为动态从 query.data 解析最新的 orderId - 订单详情页统一切换为 App.useApp 提供的 modal/message 实例,保证异步弹窗与提示稳定渲染 - H5 买家领取页面在暂停或关闭等异常状态卡片中增加【重新检测状态】按钮,客服恢复启用后买家可一键重新加载最新状态 - 验证方式:前端类型检查(0 error)、单测 132 项全通及前端 Vite 重新构建成功 --- .../src/pages/admin/AdminOrderDetailPage.tsx | 16 ++++++++---- .../src/pages/admin/AdminTaskDetailPage.tsx | 7 +++--- apps/frontend/src/pages/claim/ClaimPage.tsx | 25 ++++++++++++++++++- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/apps/frontend/src/pages/admin/AdminOrderDetailPage.tsx b/apps/frontend/src/pages/admin/AdminOrderDetailPage.tsx index c9b377ed..d9b33543 100644 --- a/apps/frontend/src/pages/admin/AdminOrderDetailPage.tsx +++ b/apps/frontend/src/pages/admin/AdminOrderDetailPage.tsx @@ -7,6 +7,7 @@ import { } from '@ant-design/icons' import { Alert, + App, Button, Card, Descriptions, @@ -17,7 +18,6 @@ import { Table, Tag, Typography, - message, } from 'antd' import type { TableColumnsType } from 'antd' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' @@ -34,6 +34,7 @@ import { formatAdminDateTime } from '@/utils/admin-time' export default function AdminOrderDetailPage() { const navigate = useNavigate() const queryClient = useQueryClient() + const { message, modal } = App.useApp() const { orderId = '' } = useParams() const [statusModalVisible, setStatusModalVisible] = useState(false) const [targetStatus, setTargetStatus] = useState<'active' | 'paused' | 'closed'>('active') @@ -47,8 +48,11 @@ export default function AdminOrderDetailPage() { const detail = query.data?.data const statusMutation = useMutation({ - mutationFn: (data: { status: 'active' | 'paused' | 'closed'; reason?: string }) => - updateAdminOrderClaimStatus(orderId, data), + mutationFn: async (data: { status: 'active' | 'paused' | 'closed'; reason?: string }) => { + const targetOrderId = orderId || detail?.order?.orderId + if (!targetOrderId) throw new Error('订单 ID 缺失') + return updateAdminOrderClaimStatus(targetOrderId, data) + }, onSuccess: () => { message.success('订单兑换状态已更新') setStatusModalVisible(false) @@ -71,10 +75,12 @@ export default function AdminOrderDetailPage() { const openStatusModal = (status: 'active' | 'paused' | 'closed') => { if (status === 'active') { - Modal.confirm({ + modal.confirm({ title: '恢复启用订单兑换', content: '恢复后,买家可正常进入 H5 页面提交 UID 领取,确认恢复吗?', - onOk: () => statusMutation.mutateAsync({ status: 'active', reason: '管理员恢复启用' }), + onOk: async () => { + await statusMutation.mutateAsync({ status: 'active', reason: '管理员恢复启用' }) + }, }) return } diff --git a/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx b/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx index d1bcaa6d..10c1c917 100644 --- a/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx +++ b/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx @@ -89,9 +89,10 @@ export default function AdminTaskDetailPage() { 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) + mutationFn: async (data: { status: 'active' | 'paused' | 'closed'; reason?: string }) => { + const resolvedOrderId = query.data?.data?.order?.orderId || detail?.order?.orderId + if (!resolvedOrderId) throw new Error('当前任务无关联订单信息') + return updateAdminOrderClaimStatus(resolvedOrderId, data) }, onSuccess: () => { message.success('订单兑换状态已更新') diff --git a/apps/frontend/src/pages/claim/ClaimPage.tsx b/apps/frontend/src/pages/claim/ClaimPage.tsx index f052de01..0b391c9a 100644 --- a/apps/frontend/src/pages/claim/ClaimPage.tsx +++ b/apps/frontend/src/pages/claim/ClaimPage.tsx @@ -1,10 +1,11 @@ import { ExclamationCircleOutlined, LoadingOutlined, + ReloadOutlined, StopOutlined, WarningOutlined, } from '@ant-design/icons' -import { Card, Empty, Spin } from 'antd' +import { Button, Card, Empty, Spin } from 'antd' import QRCode from 'qrcode' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useParams } from 'react-router' @@ -255,17 +256,39 @@ export default function ClaimPage() {

订单兑换已暂停

{errorMessage}

+ ) : errorMessage.includes('关闭') || errorMessage.includes('退款') ? ( <>

订单不可兑换

{errorMessage}

+ ) : ( <>

{errorMessage}

+ )}