import React, { useEffect, useState } from 'react'; import { API, isMobile, showError, showInfo, showSuccess } from '../../helpers'; import { renderNumber, renderQuota, renderQuotaWithAmount, } from '../../helpers/render'; import { Col, Layout, Row, Typography, Card, Button, Form, Divider, Space, Modal, Toast, } from '@douyinfe/semi-ui'; import Title from '@douyinfe/semi-ui/lib/es/typography/title'; import Text from '@douyinfe/semi-ui/lib/es/typography/text'; import { Link } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; const TopUp = () => { const { t } = useTranslation(); const [redemptionCode, setRedemptionCode] = useState(''); const [topUpCode, setTopUpCode] = useState(''); const [topUpCount, setTopUpCount] = useState(0); const [minTopupCount, setMinTopUpCount] = useState(1); const [amount, setAmount] = useState(0.0); const [minTopUp, setMinTopUp] = useState(1); const [topUpLink, setTopUpLink] = useState(''); const [enableOnlineTopUp, setEnableOnlineTopUp] = useState(false); const [userQuota, setUserQuota] = useState(0); const [isSubmitting, setIsSubmitting] = useState(false); const [open, setOpen] = useState(false); const [payWay, setPayWay] = useState(''); const topUp = async () => { if (redemptionCode === '') { showInfo(t('请输入兑换码!')); return; } setIsSubmitting(true); try { const res = await API.post('/api/user/topup', { key: redemptionCode, }); const { success, message, data } = res.data; if (success) { showSuccess(t('兑换成功!')); Modal.success({ title: t('兑换成功!'), content: t('成功兑换额度:') + renderQuota(data), centered: true, }); setUserQuota((quota) => { return quota + data; }); setRedemptionCode(''); } else { showError(message); } } catch (err) { showError(t('请求失败')); } finally { setIsSubmitting(false); } }; const openTopUpLink = () => { if (!topUpLink) { showError(t('超级管理员未设置充值链接!')); return; } window.open(topUpLink, '_blank'); }; const preTopUp = async (payment) => { if (!enableOnlineTopUp) { showError(t('管理员未开启在线充值!')); return; } await getAmount(); if (topUpCount < minTopUp) { showError(t('充值数量不能小于') + minTopUp); return; } setPayWay(payment); setOpen(true); }; const onlineTopUp = async () => { if (amount === 0) { await getAmount(); } if (topUpCount < minTopUp) { showError('充值数量不能小于' + minTopUp); return; } setOpen(false); try { const res = await API.post('/api/user/pay', { amount: parseInt(topUpCount), top_up_code: topUpCode, payment_method: payWay, }); if (res !== undefined) { const { message, data } = res.data; // showInfo(message); if (message === 'success') { let params = data; let url = res.data.url; let form = document.createElement('form'); form.action = url; form.method = 'POST'; // 判断是否为safari浏览器 let isSafari = navigator.userAgent.indexOf('Safari') > -1 && navigator.userAgent.indexOf('Chrome') < 1; if (!isSafari) { form.target = '_blank'; } for (let key in params) { let input = document.createElement('input'); input.type = 'hidden'; input.name = key; input.value = params[key]; form.appendChild(input); } document.body.appendChild(form); form.submit(); document.body.removeChild(form); } else { showError(data); // setTopUpCount(parseInt(res.data.count)); // setAmount(parseInt(data)); } } else { showError(res); } } catch (err) { console.log(err); } finally { } }; const getUserQuota = async () => { let res = await API.get(`/api/user/self`); const { success, message, data } = res.data; if (success) { setUserQuota(data.quota); } else { showError(message); } }; useEffect(() => { let status = localStorage.getItem('status'); if (status) { status = JSON.parse(status); if (status.top_up_link) { setTopUpLink(status.top_up_link); } if (status.min_topup) { setMinTopUp(status.min_topup); } if (status.enable_online_topup) { setEnableOnlineTopUp(status.enable_online_topup); } } getUserQuota().then(); }, []); const renderAmount = () => { // console.log(amount); return amount + ' ' + t('元'); }; const getAmount = async (value) => { if (value === undefined) { value = topUpCount; } try { const res = await API.post('/api/user/amount', { amount: parseFloat(value), top_up_code: topUpCode, }); if (res !== undefined) { const { message, data } = res.data; // showInfo(message); if (message === 'success') { setAmount(parseFloat(data)); } else { setAmount(0); Toast.error({ content: '错误:' + data, id: 'getAmount' }); // setTopUpCount(parseInt(res.data.count)); // setAmount(parseInt(data)); } } else { showError(res); } } catch (err) { console.log(err); } finally { } }; const handleCancel = () => { setOpen(false); }; return (

{t('我的钱包')}

{t('充值数量')}:{topUpCount}

{t('实付金额')}:{renderAmount()}

{t('是否确认充值?')}

{t('余额')} {renderQuota(userQuota)}
{t('兑换余额')}
{ setRedemptionCode(value); }} /> {topUpLink ? ( ) : null}
{t('在线充值')}
{ if (value < 1) { value = 1; } setTopUpCount(value); await getAmount(value); }} />
{/*
*/} {/* */} {/* {*/} {/* window.location.href = '/topup/history'*/} {/* }*/} {/* }>充值记录*/} {/* */} {/*
*/}
); }; export default TopUp;