diff --git a/src/components/composites/purchase/_client/pay.tsx b/src/components/composites/purchase/_client/pay.tsx index 078e365..b71b113 100644 --- a/src/components/composites/purchase/_client/pay.tsx +++ b/src/components/composites/purchase/_client/pay.tsx @@ -5,7 +5,7 @@ import alipay from '../_assets/alipay.svg' import wechat from '../_assets/wechat.svg' import balance from '../_assets/balance.svg' import Image from 'next/image' -import {useContext, useRef, useState} from 'react' +import {useContext, useEffect, useRef, useState} from 'react' import {StoreContext, useProfileStore} from '@/components/providers/StoreProvider' import {Alert, AlertDescription} from '@/components/ui/alert' import { @@ -38,6 +38,14 @@ export default function Pay(props: PayProps) { const [open, setOpen] = useState(false) const [payInfo, setPayInfo] = useState() const canvas = useRef(null) + useEffect(() => { + if (canvas.current && payInfo) { + qrcode.toCanvas(canvas.current, payInfo.pay_url, { + width: 200, + margin: 0, + }) + } + }, [payInfo]) const onOpen = async () => { setOpen(true) @@ -48,12 +56,12 @@ export default function Pay(props: PayProps) { let resp: ApiResponse switch (props.method) { - case 'alipay': - resp = await prepareResourceByAlipay(props.resource) - break - case 'wechat': - resp = await prepareResourceByWechat(props.resource) - break + case 'alipay': + resp = await prepareResourceByAlipay(props.resource) + break + case 'wechat': + resp = await prepareResourceByWechat(props.resource) + break } if (!resp.success) { toast.error(`创建订单失败: ${resp.message}`) @@ -62,7 +70,6 @@ export default function Pay(props: PayProps) { } setPayInfo(resp.data) - await qrcode.toCanvas(canvas.current, resp.data.pay_url) } const router = useRouter() @@ -70,19 +77,19 @@ export default function Pay(props: PayProps) { let resp: ApiResponse try { switch (props.method) { - case 'alipay': - resp = await createResourceByAlipay({ - trade_no: payInfo!.trade_no, - }) - break - case 'wechat': - resp = await createResourceByWechat({ - trade_no: payInfo!.trade_no, - }) - break - case 'balance': - resp = await createResourceByBalance(props.resource) - break + case 'alipay': + resp = await createResourceByAlipay({ + trade_no: payInfo!.trade_no, + }) + break + case 'wechat': + resp = await createResourceByWechat({ + trade_no: payInfo!.trade_no, + }) + break + case 'balance': + resp = await createResourceByBalance(props.resource) + break } if (!resp.success) { @@ -175,14 +182,10 @@ export default function Pay(props: PayProps) { ) : (
-
+
{payInfo ? ( props.method === 'alipay' - ?