diff --git a/apps/frontend/src/components/admin/StatusTag.tsx b/apps/frontend/src/components/admin/StatusTag.tsx index 35a888de..4b22280d 100644 --- a/apps/frontend/src/components/admin/StatusTag.tsx +++ b/apps/frontend/src/components/admin/StatusTag.tsx @@ -29,6 +29,7 @@ const STATUS_LABELS: Record = { disabled: '已停用', dispatched_pending_return: '待退还号码', expired: '已过期', + external: '外部链接', failed: '失败', invalid: '已作废', link_generated: '已生成链接', @@ -90,6 +91,7 @@ const STATUS_COLORS: Record = { customer_processing: 'blue', delivered: 'green', disabled: 'red', + external: 'cyan', failed: 'red', invalid: 'orange', link_generated: 'cyan', diff --git a/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx b/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx index 68f129d4..97a48968 100644 --- a/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx +++ b/apps/frontend/src/pages/admin/AdminTaskDetailPage.tsx @@ -88,11 +88,13 @@ export default function AdminTaskDetailPage() { const detail = query.data?.data const canManageTaskLifecycle = hasAdminRole('operator') const canCloseTasks = hasAdminRole('support') + const claimTokenStatus = String(detail?.claimToken?.status || '').trim() + const isExternalClaimLink = claimTokenStatus.toLowerCase() === 'external' const claimUrl = useMemo(() => { const tokenStatus = String(detail?.claimToken?.status || '').trim() const taskStatus = String(detail?.task.status || '').trim() - if (tokenStatus !== 'active' || ['closed', 'expired'].includes(taskStatus)) { + if (!isUsableClaimLinkStatus(tokenStatus) || ['closed', 'expired'].includes(taskStatus)) { return '' } @@ -100,8 +102,8 @@ export default function AdminTaskDetailPage() { }, [detail?.claimToken?.claimUrl, detail?.claimToken?.status, detail?.task.status, lastClaimUrl]) const claimLinkInvalid = Boolean( detail?.claimToken?.claimUrl && - String(detail.claimToken.status || '').trim() && - String(detail.claimToken.status || '').trim() !== 'active', + claimTokenStatus && + !isUsableClaimLinkStatus(claimTokenStatus), ) useEffect(() => { @@ -383,9 +385,13 @@ export default function AdminTaskDetailPage() { )} - - 到期:{formatAdminDateTime(resolvedDetail.claimToken.expiredAt)} - + {isExternalClaimLink ? ( + 外部交付链接 + ) : ( + + 到期:{formatAdminDateTime(resolvedDetail.claimToken.expiredAt)} + + )} @@ -655,6 +661,11 @@ function TaskActionPanel({ ) } +function isUsableClaimLinkStatus(value: unknown) { + const normalized = String(value || '').trim().toLowerCase() + return normalized === 'active' || normalized === 'external' +} + function FulfillmentOverviewPanel({ detail, claimUrl,