import React, { useState, useCallback, useMemo } from 'react'; import { ModalFooter, ModalBody, Button, Input, Box, Grid, Link } from '@chakra-ui/react'; import { getWxPayQRCode } from '@/web/support/wallet/bill/api'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { useRouter } from 'next/router'; import { getErrText } from '@fastgpt/global/common/error/utils'; import { useTranslation } from 'next-i18next'; import MyModal from '@fastgpt/web/components/common/MyModal'; import { BillTypeEnum } from '@fastgpt/global/support/wallet/bill/constants'; import QRCodePayModal, { type QRPayProps } from '@/components/support/wallet/QRCodePayModal'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { EXTRA_PLAN_CARD_ROUTE } from '@/web/support/wallet/sub/constants'; const PayModal = ({ onClose, defaultValue, onSuccess }: { defaultValue?: number; onClose: () => void; onSuccess?: () => any; }) => { const { t } = useTranslation(); const { toast } = useToast(); const { subPlans } = useSystemStore(); const [inputVal, setInputVal] = useState(defaultValue); const [loading, setLoading] = useState(false); const [qrPayData, setQRPayData] = useState(); const handleClickPay = useCallback(async () => { if (!inputVal || inputVal <= 0 || isNaN(+inputVal)) return; setLoading(true); try { // 获取支付二维码 const res = await getWxPayQRCode({ type: BillTypeEnum.balance, balance: inputVal }); setQRPayData({ readPrice: res.readPrice, codeUrl: res.codeUrl, billId: res.billId }); } catch (err) { toast({ title: getErrText(err), status: 'error' }); } setLoading(false); }, [inputVal, toast]); const payList = useMemo(() => { const list = Object.values(subPlans?.standard || {}); const priceList = list.map((item) => item.price); return priceList.concat(priceList.map((item) => item * 10)).filter(Boolean); }, [subPlans?.standard]); return ( 该余额仅用于自动续费标准套餐。如需购买额外套餐,可 直接下单 ,无需充值余额。 {payList.map((item) => ( ))} { setInputVal(Math.floor(+e.target.value)); }} > {!!qrPayData && } ); }; export default PayModal;