'use client'; import { Display } from '@/components/display'; import StripePayment from '@/components/payment/stripe'; import { SubscribeBilling } from '@/components/subscribe/billing'; import useGlobalStore from '@/config/use-global'; import { queryOrderDetail } from '@/services/user/order'; import { purchaseCheckout } from '@/services/user/portal'; import { useQuery } from '@tanstack/react-query'; import { AiroButton } from '@workspace/airo-ui/components/AiroButton'; import { Card, CardContent } from '@workspace/airo-ui/components/card'; import { Separator } from '@workspace/airo-ui/components/separator'; import { formatDate } from '@workspace/airo-ui/utils'; import { useCountDown } from 'ahooks'; import { addMinutes, format } from 'date-fns'; import { useTranslations } from 'next-intl'; import Image from 'next/image'; import Link from 'next/link'; import { QRCodeCanvas } from 'qrcode.react'; import { useEffect, useState } from 'react'; export default function Page() { const t = useTranslations('order'); const { getUserInfo } = useGlobalStore(); const [orderNo, setOrderNo] = useState(); const [enabled, setEnabled] = useState(false); const { data } = useQuery({ enabled: enabled, queryKey: ['queryOrderDetail', orderNo], queryFn: async () => { const { data } = await queryOrderDetail({ order_no: orderNo! }); if (data?.data?.status !== 1) { await getUserInfo(); setEnabled(false); } return data?.data; }, refetchInterval: 3000, }); const { data: payment } = useQuery({ enabled: !!orderNo && data?.status === 1, queryKey: ['purchaseCheckout', orderNo], queryFn: async () => { const { data } = await purchaseCheckout({ orderNo: orderNo!, returnUrl: window.location.href, }); if (data.data?.type === 'url' && data.data.checkout_url) { window.open(data.data.checkout_url, '_blank'); } return data?.data; }, refetchOnWindowFocus: false, }); useEffect(() => { const searchParams = new URLSearchParams(location.search); if (searchParams.get('order_no')) { setOrderNo(searchParams.get('order_no')!); setEnabled(true); } }, []); const [countDown, formattedRes] = useCountDown({ targetDate: data && format(addMinutes(data?.created_at, 15), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx"), }); const { hours, minutes, seconds } = formattedRes; const countdownDisplay = countDown > 0 ? ( <> {hours.toString().length === 1 ? `0${hours}` : hours} :{' '} {minutes.toString().length === 1 ? `0${minutes}` : minutes} :{' '} {seconds.toString().length === 1 ? `0${seconds}` : seconds} ) : ( <>{t('timeExpired')} ); return (
{data?.payment.name}
{data?.payment.name || data?.payment.platform}
{data?.status && [2, 5].includes(data?.status) && (
{t('subscribeNow')} {t('viewDocument')}

{t('paymentSuccess')}

)} {data?.status === 1 && payment?.type === 'url' && (
{ if (payment?.checkout_url) { window.location.href = payment?.checkout_url; } }} > {t('goToPayment')} {t('productList')}

{t('waitingForPayment')}

{countdownDisplay}

)} {data?.status === 1 && payment?.type === 'qr' && (
{t('productList')} {t('orderList')}

{t('scanToPay')}

{countdownDisplay}

)} {data?.status === 1 && payment?.type === 'stripe' && (

{t('waitingForPayment')}

{countdownDisplay}

{payment.stripe && }
)} {data?.status && [3, 4].includes(data?.status) && (
{t('productList')} {t('orderList')}

{t('orderClosed')}

)}
{t('orderNumber')}
{data?.order_no}
{data?.type && [1, 2].includes(data.type) && (
名称
{data?.subscribe?.name}
)} {data?.type === 3 && ( <>
{t('resetTraffic')}
  • {t('resetPrice')}
)} {data?.type === 4 && ( <>
{t('balanceRecharge')}
  • {t('rechargeAmount')}
)}
{t('createdAt')}
{formatDate(data?.created_at)}
); }