| |
| // export default Recharge; |
| import React, { useState } from 'react'; |
| import axios from 'axios'; |
| import { useUser } from '../../context/UserContext'; |
| |
| const UserRecharge = () => { |
| const [amount, setAmount] = useState(''); |
| const [loading, setLoading] = useState(false); |
| const [message, setMessage] = useState(''); |
| const [showPayDialog, setShowPayDialog] = useState(false); |
| const [payProcessing, setPayProcessing] = useState(false); |
| |
| const { user } = useUser(); |
| const userId = user?.userId; |
| |
| // 点击提交充值,打开模拟支付弹窗 |
| const handleSubmit = () => { |
| if (!userId) { |
| setMessage('未登录,无法充值'); |
| return; |
| } |
| if (!amount || isNaN(amount) || Number(amount) <= 0) { |
| setMessage('请输入有效的充值金额'); |
| return; |
| } |
| setMessage(''); |
| setShowPayDialog(true); |
| }; |
| |
| // 模拟支付弹窗点击“确认支付” |
| const handlePayConfirm = async () => { |
| setPayProcessing(true); |
| setMessage(''); |
| |
| // 模拟支付等待 2 秒 |
| setTimeout(async () => { |
| try { |
| // 支付成功后调用后端充值接口 |
| const response = await axios.post('/echo/user/recharge', null, { |
| params: { |
| userId, |
| amount: Number(amount), |
| }, |
| }); |
| |
| setMessage(response.data.message || '充值成功!'); |
| setAmount(''); |
| } catch (error) { |
| setMessage(error.response?.data?.message || '充值失败,请重试'); |
| } finally { |
| setPayProcessing(false); |
| setShowPayDialog(false); |
| } |
| }, 2000); |
| }; |
| |
| // 取消支付弹窗 |
| const handlePayCancel = () => { |
| setShowPayDialog(false); |
| setMessage('支付已取消'); |
| }; |
| |
| return ( |
| <div className="recharge-page" style={{ maxWidth: 400, margin: 'auto', padding: 20 }}> |
| <h2>充值服务</h2> |
| <div style={{ marginBottom: 12 }}> |
| <label> |
| 充值金额: |
| <input |
| type="number" |
| min="1" |
| value={amount} |
| onChange={(e) => setAmount(e.target.value)} |
| disabled={loading || payProcessing} |
| style={{ marginLeft: 8, width: 120 }} |
| /> |
| </label> |
| </div> |
| <button onClick={handleSubmit} disabled={loading || payProcessing}> |
| {loading || payProcessing ? '处理中...' : '提交充值'} |
| </button> |
| |
| {message && <p style={{ marginTop: 12 }}>{message}</p>} |
| |
| {/* 模拟支付弹窗 */} |
| {showPayDialog && ( |
| <div |
| style={{ |
| position: 'fixed', |
| top: 0, left: 0, right: 0, bottom: 0, |
| backgroundColor: 'rgba(0,0,0,0.5)', |
| display: 'flex', |
| justifyContent: 'center', |
| alignItems: 'center', |
| zIndex: 1000, |
| }} |
| > |
| <div |
| style={{ |
| backgroundColor: '#fff', |
| padding: 20, |
| borderRadius: 8, |
| width: 300, |
| textAlign: 'center', |
| boxShadow: '0 0 10px rgba(0,0,0,0.25)', |
| }} |
| > |
| <h3>模拟支付</h3> |
| <p>支付金额:{amount} 元</p> |
| |
| {payProcessing ? ( |
| <p>支付处理中,请稍候...</p> |
| ) : ( |
| <> |
| <button onClick={handlePayConfirm} style={{ marginRight: 10 }}> |
| 确认支付 |
| </button> |
| <button onClick={handlePayCancel}>取消</button> |
| </> |
| )} |
| </div> |
| </div> |
| )} |
| </div> |
| ); |
| }; |
| |
| export default UserRecharge; |