From 687c48c1b8aae1370f1fe89466356596ff205ebe Mon Sep 17 00:00:00 2001 From: luorijun Date: Fri, 18 Apr 2025 16:22:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=85=85=E5=80=BC=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=94=AF=E4=BB=98=E5=AE=9D?= =?UTF-8?q?=E5=92=8C=E5=BE=AE=E4=BF=A1=E7=9A=84=E5=85=85=E5=80=BC=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=8F=8A=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/actions/auth/identify.ts | 1 + src/actions/bill.ts | 1 + src/actions/channel.ts | 1 + src/actions/fake/tradeCallback.ts | 3 - src/actions/user.ts | 33 ++ .../composites/purchase/_client/pay.tsx | 19 +- .../composites/purchase/_client/recharge.tsx | 296 +++++++++++++----- 7 files changed, 260 insertions(+), 94 deletions(-) delete mode 100644 src/actions/fake/tradeCallback.ts create mode 100644 src/actions/user.ts diff --git a/src/actions/auth/identify.ts b/src/actions/auth/identify.ts index 9400e38..52f7b2b 100644 --- a/src/actions/auth/identify.ts +++ b/src/actions/auth/identify.ts @@ -1,3 +1,4 @@ +'use server' import {callByUser, callPublic} from '@/actions/base' export async function Identify(props: { diff --git a/src/actions/bill.ts b/src/actions/bill.ts index 5bf944d..912c8df 100644 --- a/src/actions/bill.ts +++ b/src/actions/bill.ts @@ -1,3 +1,4 @@ +'use server' import {Bill} from '@/lib/models' import {callByUser} from '@/actions/base' import {PageRecord} from '@/lib/api' diff --git a/src/actions/channel.ts b/src/actions/channel.ts index bbb6187..2c357f5 100644 --- a/src/actions/channel.ts +++ b/src/actions/channel.ts @@ -1,3 +1,4 @@ +'use server' import {callByUser} from '@/actions/base' async function createChannels(params: { diff --git a/src/actions/fake/tradeCallback.ts b/src/actions/fake/tradeCallback.ts deleted file mode 100644 index a2d8d05..0000000 --- a/src/actions/fake/tradeCallback.ts +++ /dev/null @@ -1,3 +0,0 @@ -export async function tradeCallbackByAlipay() { - -} diff --git a/src/actions/user.ts b/src/actions/user.ts new file mode 100644 index 0000000..f10a630 --- /dev/null +++ b/src/actions/user.ts @@ -0,0 +1,33 @@ +'use server' + +import {callByUser} from '@/actions/base' + +export async function RechargeByAlipay(props: { + amount: number +}) { + return callByUser<{ + trade_no: string + pay_url: string + }>('/api/user/recharge/prepare/alipay', props) +} + +export async function RechargeByAlipayConfirm(props: { + trade_no: string +}) { + return callByUser('/api/user/recharge/confirm/alipay', props) +} + +export async function RechargeByWechat(props: { + amount: number +}) { + return callByUser<{ + trade_no: string + pay_url: string + }>('/api/user/recharge/prepare/wechat', props) +} + +export async function RechargeByWechatConfirm(props: { + trade_no: string +}) { + return callByUser('/api/user/recharge/confirm/wechat', props) +} diff --git a/src/components/composites/purchase/_client/pay.tsx b/src/components/composites/purchase/_client/pay.tsx index b80b78a..35e6103 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, 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() + const canvas = useRef(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) {
{payInfo ? ( -