| // import React, { useState } from 'react'; |
| // import axios from 'axios'; |
| // import { useUser } from '../../context/UserContext'; |
| |
| // const Recharge = () => { |
| // const [amount, setAmount] = useState(''); |
| // const [loading, setLoading] = useState(false); |
| // const [message, setMessage] = useState(''); |
| |
| // // 从上下文获取当前登录用户 |
| // const { user } = useUser(); |
| // const userId = user?.userId; |
| |
| // const handleRecharge = async () => { |
| // if (!userId) { |
| // setMessage('未登录,无法充值'); |
| // return; |
| // } |
| // if (!amount || isNaN(amount) || Number(amount) <= 0) { |
| // setMessage('请输入有效的充值金额'); |
| // return; |
| // } |
| // setLoading(true); |
| // setMessage(''); |
| // try { |
| // // 充值接口调用,注意后端用的是请求参数形式传递 userId 和 amount |
| // 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 { |
| // setLoading(false); |
| // } |
| // }; |
| |
| // return ( |
| // <div className="recharge-page"> |
| // <h2>充值服务</h2> |
| // <div> |
| // <label> |
| // 充值金额: |
| // <input |
| // type="number" |
| // min="1" |
| // value={amount} |
| // onChange={(e) => setAmount(e.target.value)} |
| // disabled={loading} |
| // /> |
| // </label> |
| // </div> |
| // <button onClick={handleRecharge} disabled={loading}> |
| // {loading ? '处理中...' : '提交充值'} |
| // </button> |
| // {message && <p>{message}</p>} |
| // </div> |
| // ); |
| // }; |
| |
| // export default Recharge; |
| import React, { useState } from 'react'; |
| import axios from 'axios'; |
| import { useUser } from '../../context/UserContext'; |
| |
| const Recharge = () => { |
| 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 Recharge; |