完善充值功能,添加支付宝和微信的充值逻辑及二维码展示

This commit is contained in:
2025-04-18 16:22:50 +08:00
parent c9e65b6617
commit 687c48c1b8
7 changed files with 260 additions and 94 deletions

View File

@@ -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, useState} from 'react'
import {useContext, useRef, useState} from 'react'
import {AuthContext} from '@/components/providers/AuthProvider'
import {Alert, AlertDescription} from '@/components/ui/alert'
import {
@@ -21,6 +21,7 @@ import {ApiResponse} from '@/lib/api'
import {toast} from 'sonner'
import {Loader} from 'lucide-react'
import {useRouter} from 'next/navigation'
import * as qrcode from 'qrcode'
export type PayProps = {
method: 'alipay' | 'wechat' | 'balance'
@@ -34,6 +35,7 @@ export default function Pay(props: PayProps) {
const ctx = useContext(AuthContext)
const [open, setOpen] = useState(false)
const [payInfo, setPayInfo] = useState<CreateResourceResp | undefined>()
const canvas = useRef<HTMLCanvasElement>(null)
const onOpen = async () => {
setOpen(true)
@@ -58,6 +60,7 @@ export default function Pay(props: PayProps) {
}
setPayInfo(resp.data)
await qrcode.toCanvas(canvas.current, resp.data.pay_url)
}
const router = useRouter()
@@ -172,13 +175,15 @@ export default function Pay(props: PayProps) {
<div className="flex flex-col items-center gap-3">
<div className="bg-gray-100 w-52 h-52 flex items-center justify-center">
{payInfo ? (
<iframe
src={payInfo.pay_url}
className="w-full h-full"
title="支付二维码"
/>
props.method === 'alipay'
? <iframe
src={payInfo.pay_url}
className="w-full h-full"
title="支付二维码"
/>
: <canvas ref={canvas} className="w-full h-full"/>
) : (
<Loader size={40} className={`animate-spin`}/>
<Loader size={40} className={`animate-spin text-weak`}/>
)}
</div>
<p className="text-sm text-gray-600 text-center">