diff --git a/src/user_pages/myself/index.tsx b/src/user_pages/myself/index.tsx index b178502..ee4cfff 100644 --- a/src/user_pages/myself/index.tsx +++ b/src/user_pages/myself/index.tsx @@ -174,7 +174,7 @@ const MyselfPage: React.FC = () => { Taro.navigateTo({ url: "/publish_pages/publishBall/index", }); - } + }; // 处理球局订单 const handle_game_orders = () => { @@ -243,8 +243,9 @@ const MyselfPage: React.FC = () => { 我主办的 setActiveTab("participated")} > 我参与的 @@ -266,7 +267,7 @@ const MyselfPage: React.FC = () => { btnImg="ICON_ADD" reload={goPublish} isShowNoData={game_records.length === 0} - loadMoreMatches={() => { }} + loadMoreMatches={() => {}} /> @@ -290,7 +291,7 @@ const MyselfPage: React.FC = () => { error={null} errorImg="ICON_LIST_EMPTY" isShowNoData={ended_game_records.length === 0} - loadMoreMatches={() => { }} + loadMoreMatches={() => {}} /> {/* */} diff --git a/src/user_pages/setTransactionPassword/index.tsx b/src/user_pages/setTransactionPassword/index.tsx index b1d9aec..eb886e2 100644 --- a/src/user_pages/setTransactionPassword/index.tsx +++ b/src/user_pages/setTransactionPassword/index.tsx @@ -74,6 +74,7 @@ const SetTransactionPassword: React.FC = () => { }; const handleConfirm = async () => { + if (!valid) return; const { new_password, confirm_password } = formData; if (new_password !== confirm_password) { Taro.showToast({ diff --git a/src/user_pages/withdrawal/index.config.ts b/src/user_pages/withdrawal/index.config.ts index 6c10df6..169580f 100644 --- a/src/user_pages/withdrawal/index.config.ts +++ b/src/user_pages/withdrawal/index.config.ts @@ -1,3 +1,9 @@ export default definePageConfig({ - navigationBarTitleText: '钱包', -}) + navigationBarTitleText: "钱包", + navigationBarBackgroundColor: "#ffffff", + navigationBarTextStyle: "black", + backgroundColor: "#f5f5f5", + enablePullDownRefresh: false, + disableScroll: false, + navigationStyle: "custom", +}); diff --git a/src/user_pages/withdrawal/index.scss b/src/user_pages/withdrawal/index.scss index c3d0003..f8e8f6c 100644 --- a/src/user_pages/withdrawal/index.scss +++ b/src/user_pages/withdrawal/index.scss @@ -1,140 +1,183 @@ .withdrawal-page { - height: 100vh; - font-family: PingFang SC; - font-weight: 400; - font-style: Regular; - color: #3C3C4399; - font-size: 12px; - overflow: hidden; + height: 100vh; + font-family: PingFang SC; + font-weight: 400; + font-style: Regular; + color: #3c3c4399; + font-size: 12px; + overflow: hidden; + .custom-navbar { + height: 56px; + /* 通常与原生导航栏高度一致 */ + display: flex; + align-items: center; + justify-content: center; + // background-color: #fff; + color: #000; + padding-top: 44px; + /* 适配状态栏 */ + position: sticky; + top: 0; + z-index: 100; + background-color: #f5f5f5; + } - .withdrawal-container { - margin: 20px 5px 0; - border-radius: 20px; - padding-top: 12px; - padding-right: 20px; - padding-bottom: 24px; - padding-left: 20px; - gap: 16px; - border: 0.5px solid #EBEBEB; - box-shadow: 0px 4px 36px 0px #0000000D; + .detail-navigator { + height: 30px; + width: fit-content; + border-radius: 15px; + position: absolute; + left: 12px; + box-sizing: border-box; + display: flex; + align-items: center; - .title-text { - color: #000; - } + .detail-navigator-back { + height: 32px; + display: flex; + justify-content: center; + align-items: center; + font-family: PingFang SC; + font-weight: 600; + font-style: Semibold; + font-size: 20px; + letter-spacing: 0.38px; - .input-container { - font-weight: bold; - color: #000; - display: flex; - align-items: flex-end; - overflow: hidden; - gap: 8px; - border-bottom: 0.5px solid var(--Fills-Tertiary, #7878801F); - margin: 12px 0; - padding-bottom: 12px; + & > .detail-navigator-back-icon { + width: 32px; + height: 32px; + } + } + } - .symbol { - font-size: 20px; - } + .withdrawal-container { + margin: 20px 5px 0; + border-radius: 20px; + padding-top: 12px; + padding-right: 20px; + padding-bottom: 24px; + padding-left: 20px; + gap: 16px; + border: 0.5px solid #ebebeb; + box-shadow: 0px 4px 36px 0px #0000000d; - Input { - font-size: 32px; - height: 36px; - min-height: 0; - margin: 0; - padding: 0; - border: none; - background: none; - color: inherit; - outline: none; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - flex: 1; - } - - .btn { - height: 24px; - border: 1px solid rgba(0, 0, 0, 0.06); - display: flex; - align-items: center; - justify-content: center; - color: #fff; - background: #000; - box-shadow: 0 8px 64px 0 rgba(0, 0, 0, 0.1); - backdrop-filter: blur(16px); - font-feature-settings: "liga" off, "clig" off; - font-family: "PingFang SC"; - font-size: 9.6px; - font-style: normal; - line-height: normal; - border-radius: 8px; - margin-right: 0; - } - } - - .tips-text { - color: #F3334A; - } - - .btn-container { - display: flex; - justify-content: space-between; - - .btn { - color: #007AFF; - } - } + .title-text { + color: #000; } - .tips-container { - padding: 20px 20px; + .input-container { + font-weight: bold; + color: #000; + display: flex; + align-items: flex-end; + overflow: hidden; + gap: 8px; + border-bottom: 0.5px solid var(--Fills-Tertiary, #7878801f); + margin: 12px 0; + padding-bottom: 12px; - .title-text { - font-weight: 600; - margin-bottom: 12px; - } + .symbol { + font-size: 20px; + } - .tips-text { - display: flex; - flex-direction: column; - } + Input { + font-size: 32px; + height: 36px; + min-height: 0; + margin: 0; + padding: 0; + border: none; + background: none; + color: inherit; + outline: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + flex: 1; + } + + .btn { + height: 24px; + border: 1px solid rgba(0, 0, 0, 0.06); + display: flex; + align-items: center; + justify-content: center; + color: #fff; + background: #000; + box-shadow: 0 8px 64px 0 rgba(0, 0, 0, 0.1); + backdrop-filter: blur(16px); + font-feature-settings: "liga" off, "clig" off; + font-family: "PingFang SC"; + font-size: 9.6px; + font-style: normal; + line-height: normal; + border-radius: 8px; + margin-right: 0; + } } + + .tips-text { + color: #f3334a; + } + + .btn-container { + display: flex; + justify-content: space-between; + + .btn { + color: #007aff; + } + } + } + + .tips-container { + padding: 20px 20px; + + .title-text { + font-weight: 600; + margin-bottom: 12px; + } + + .tips-text { + display: flex; + flex-direction: column; + } + } } .withdraw_popup { - min-height: unset; - .popup_content { - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - pointer-events: none; + min-height: unset; + .popup_content { + display: flex; + flex-direction: column; + align-items: center; + user-select: none; + pointer-events: none; - .popup_text { - font-family: DingTalk JinBuTi; - font-weight: 400; - font-style: Regular; - font-size: 20px; - line-height: 16px; - margin: 20px 0; - } - - .password_container { - display: flex; - gap: 4px; - align-items: center; - - .password_item { - width: 32px; - height: 32px; - border-radius: 4px; - background-color: #7878801F; - display: flex; - justify-content: center; - align-items: center; - -webkit-text-security: disc; - } - } + .popup_text { + font-family: DingTalk JinBuTi; + font-weight: 400; + font-style: Regular; + font-size: 20px; + line-height: 16px; + margin: 20px 0; } -} \ No newline at end of file + + .password_container { + display: flex; + gap: 4px; + align-items: center; + + .password_item { + width: 32px; + height: 32px; + border-radius: 4px; + background-color: #7878801f; + display: flex; + justify-content: center; + align-items: center; + -webkit-text-security: disc; + } + } + } +} diff --git a/src/user_pages/withdrawal/index.tsx b/src/user_pages/withdrawal/index.tsx index 0d45b85..e3666d2 100644 --- a/src/user_pages/withdrawal/index.tsx +++ b/src/user_pages/withdrawal/index.tsx @@ -1,321 +1,394 @@ import React, { useState, useEffect, useRef } from "react"; -import { View, Text, Input, Button } from "@tarojs/components"; +import { View, Text, Input, Button, Image } from "@tarojs/components"; import Taro, { useDidShow } from "@tarojs/taro"; import httpService from "@/services/httpService"; import "./index.scss"; import { CommonPopup } from "@/components"; -import { useKeyboardHeight } from '@/store/keyboardStore' +import { useKeyboardHeight } from "@/store/keyboardStore"; +import img from "@/config/images"; interface WalletInfo { - balance: string; - frozen_balance?: string; - total_balance?: string; - total_income?: string; - total_withdraw?: string; + balance: string; + frozen_balance?: string; + total_balance?: string; + total_income?: string; + total_withdraw?: string; } const Withdrawal: React.FC = () => { - const inputRef = useRef(null); - // 使用全局键盘状态 - const { keyboardHeight, isKeyboardVisible, addListener, initializeKeyboardListener } = useKeyboardHeight() - // 使用全局键盘状态监听 - useEffect(() => { - // 初始化全局键盘监听器 - initializeKeyboardListener() + // 获取当前页面的配置 + const currentPage = Taro.getCurrentInstance(); + const pageConfig = currentPage.page?.config; + const pageTitle = pageConfig?.navigationBarTitleText; + const inputRef = useRef(null); + // 使用全局键盘状态 + const { + keyboardHeight, + isKeyboardVisible, + addListener, + initializeKeyboardListener, + } = useKeyboardHeight(); + // 使用全局键盘状态监听 + useEffect(() => { + // 初始化全局键盘监听器 + initializeKeyboardListener(); - // 添加本地监听器 - const removeListener = addListener((height, visible) => { - console.log('AiImportPopup 收到键盘变化:', height, visible) - }) - - return () => { - removeListener() - } - }, [initializeKeyboardListener, addListener]) - const [showTips, setShowTips] = useState(false); - const [tipsText, setTipsText] = useState(""); - const [inputValue, setInputValue] = useState("0.00"); - const [walletInfo, setWalletInfo] = useState({ - balance: "0.00", + // 添加本地监听器 + const removeListener = addListener((height, visible) => { + console.log("AiImportPopup 收到键盘变化:", height, visible); }); - const [isFocus, setIsFocus] = useState(false); - const [show_withdraw_popup, set_show_withdraw_popup] = useState(false); - - const [password, setPassword] = useState(new Array(6).fill("")); - - const [mapErrorCodes, setMapErrorCodes] = useState({}); - - useDidShow(() => { - load_wallet_data(); - getWithdrawErrorCodes(); - }); - useEffect(() => { - if (show_withdraw_popup && inputRef.current) { - inputRef.current.focus(); - } - }, [show_withdraw_popup]); - useEffect(() => { - if (show_withdraw_popup) { - setIsFocus(true); - } else { - setPassword(new Array(6).fill("")); - setIsFocus(false); - } - }, [show_withdraw_popup]); - - const validateWithdrawAmount = (amount: string) => { - if (Number(amount) > Number(walletInfo.balance)) { - setShowTips(true); - setTipsText("输入金额超过钱包余额"); - } else if (Number(amount) > 200) { - setShowTips(true); - setTipsText("单笔提现金额不能超过 200元"); - } else { - setShowTips(false); - } + return () => { + removeListener(); }; + }, [initializeKeyboardListener, addListener]); + const [showTips, setShowTips] = useState(false); + const [tipsText, setTipsText] = useState(""); + const [inputValue, setInputValue] = useState("0.00"); + const [walletInfo, setWalletInfo] = useState({ + balance: "0.00", + }); + const [isFocus, setIsFocus] = useState(false); - const withdrawAll = () => { - setInputValue(walletInfo.balance); - validateWithdrawAmount(walletInfo.balance); - }; + const [show_withdraw_popup, set_show_withdraw_popup] = useState(false); - const handleInput = (e: any) => { - console.log(e); - const value = e.detail.value; - setInputValue(value); - validateWithdrawAmount(value); - }; - // 加载钱包数据 - const load_wallet_data = async () => { - try { - const response = await httpService.post("/wallet/balance"); - const { - balance, - frozen_balance, - total_balance, - total_income, - total_withdraw, - } = response.data; - setWalletInfo({ - balance, - frozen_balance, - total_balance, - total_income, - total_withdraw, - }); - } catch (error: any) { - console.error("加载钱包数据失败:", error); + const [password, setPassword] = useState(new Array(6).fill("")); - let errorMessage = "加载失败,请重试"; - if ( - error && - error.response && - error.response.data && - error.response.data.message - ) { - errorMessage = error.response.data.message; - } else if (error && error.data && error.data.message) { - errorMessage = error.data.message; - } + const [mapErrorCodes, setMapErrorCodes] = useState({}); - Taro.showToast({ - title: errorMessage, - icon: "error", - duration: 2000, - }); - } - }; - const getWithdrawErrorCodes = async () => { - try { - const response = await httpService.post("/wallet/error_codes"); - if (response.code === 0) { - const { withdraw_errors: { WEIXIN_ERRORS } } = response.data; - const mapErrorCodes = {}; - for (const key in WEIXIN_ERRORS) { - const { code } = WEIXIN_ERRORS[key]; - mapErrorCodes[code] = WEIXIN_ERRORS[key]; - } - setMapErrorCodes(mapErrorCodes); - } - } catch (error: any) { - console.error("获取提现错误码失败:", error); - } + useDidShow(() => { + load_wallet_data(); + getWithdrawErrorCodes(); + }); + useEffect(() => { + if (show_withdraw_popup && inputRef.current) { + inputRef.current.focus(); } - const handleWithdraw = async () => { - set_show_withdraw_popup(true); - }; - const submit_withdraw = async (payment_password: string) => { - try { - // 先调用后端接口获取提现参数 - const response = await httpService.post("/wallet/withdraw", { - amount: parseFloat(inputValue), - transfer_remark: "用户申请提现", - payment_password, - }, { showToast: false }); - const { data } = response; - // 根据后端返回的数据结构解析参数 - const { mch_id, app_id, package_info, open_id } = data; + }, [show_withdraw_popup]); + useEffect(() => { + if (show_withdraw_popup) { + setIsFocus(true); + } else { + setPassword(new Array(6).fill("")); + setIsFocus(false); + } + }, [show_withdraw_popup]); - console.log("/wallet/withdraw:", data); - set_show_withdraw_popup(false); + const validateWithdrawAmount = (amount: string) => { + if (Number(amount) > Number(walletInfo.balance)) { + setShowTips(true); + setTipsText("输入金额超过钱包余额"); + } else if (Number(amount) > 200) { + setShowTips(true); + setTipsText("单笔提现金额不能超过 200元"); + } else { + setShowTips(false); + } + }; - // 调用微信商户转账接口 - (Taro as any).requestMerchantTransfer({ - mchId: mch_id, - appId: app_id, - package: package_info, - openId: open_id, - success: (res) => { - console.log("微信转账成功:", res); - Taro.showToast({ - title: "提现成功", - icon: "success", - duration: 2000, - }); + const withdrawAll = () => { + setInputValue(walletInfo.balance); + validateWithdrawAmount(walletInfo.balance); + }; - // 关闭弹窗并重置状态 - set_show_withdraw_popup(false); - setInputValue("0.00"); - // 重新加载数据 - load_wallet_data(); - }, - fail: (res) => { - console.log("微信转账失败:", res); - }, + const handleInput = (e: any) => { + console.log(e); + const value = e.detail.value; + setInputValue(value); + validateWithdrawAmount(value); + }; + // 加载钱包数据 + const load_wallet_data = async () => { + try { + const response = await httpService.post("/wallet/balance"); + const { + balance, + frozen_balance, + total_balance, + total_income, + total_withdraw, + } = response.data; + setWalletInfo({ + balance, + frozen_balance, + total_balance, + total_income, + total_withdraw, + }); + } catch (error: any) { + console.error("加载钱包数据失败:", error); + + let errorMessage = "加载失败,请重试"; + if ( + error && + error.response && + error.response.data && + error.response.data.message + ) { + errorMessage = error.response.data.message; + } else if (error && error.data && error.data.message) { + errorMessage = error.data.message; + } + + Taro.showToast({ + title: errorMessage, + icon: "error", + duration: 2000, + }); + } + }; + const getWithdrawErrorCodes = async () => { + try { + const response = await httpService.post("/wallet/error_codes"); + if (response.code === 0) { + const { + withdraw_errors: { WEIXIN_ERRORS }, + } = response.data; + const mapErrorCodes = {}; + for (const key in WEIXIN_ERRORS) { + const { code } = WEIXIN_ERRORS[key]; + mapErrorCodes[code] = WEIXIN_ERRORS[key]; + } + setMapErrorCodes(mapErrorCodes); + } + } catch (error: any) { + console.error("获取提现错误码失败:", error); + } + }; + const handleWithdraw = async () => { + set_show_withdraw_popup(true); + }; + const submit_withdraw = async (payment_password: string) => { + try { + // 先调用后端接口获取提现参数 + const response = await httpService.post( + "/wallet/withdraw", + { + amount: parseFloat(inputValue), + transfer_remark: "用户申请提现", + payment_password, + }, + { showToast: false } + ); + const { data } = response; + // 根据后端返回的数据结构解析参数 + const { mch_id, app_id, package_info, open_id } = data; + + console.log("/wallet/withdraw:", data); + set_show_withdraw_popup(false); + + // 调用微信商户转账接口 + (Taro as any).requestMerchantTransfer({ + mchId: mch_id, + appId: app_id, + package: package_info, + openId: open_id, + success: (res) => { + console.log("微信转账成功:", res); + Taro.showToast({ + title: "提现成功", + icon: "success", + duration: 2000, + }); + + // 关闭弹窗并重置状态 + set_show_withdraw_popup(false); + setInputValue("0.00"); + // 重新加载数据 + load_wallet_data(); + }, + fail: (res) => { + console.log("微信转账失败:", res); + }, + }); + } catch (error: any) { + const { code, message } = error; + if (message === "支付密码错误") { + set_show_withdraw_popup(false); + Taro.showModal({ + content: "支付密码错误,请重试", + cancelText: "忘记密码", + confirmText: "重试", + cancelColor: "#000", + confirmColor: "#fff", + }).then((res) => { + if (res.confirm) { + set_show_withdraw_popup(true); + } else if (res.cancel) { + Taro.navigateTo({ + url: "/user_pages/validPhone/index", }); - } catch (error: any) { - const { code, message } = error; - if (message === "支付密码错误") { - set_show_withdraw_popup(false); - Taro.showModal({ - content: "支付密码错误,请重试", - cancelText: "忘记密码", - confirmText: "重试", - cancelColor: "#000", - confirmColor: "#fff", - }).then((res) => { - if (res.confirm) { - set_show_withdraw_popup(true); - } else if (res.cancel) { - Taro.navigateTo({ - url: "/user_pages/validPhone/index" - }); - } - }); - return; - } else if (mapErrorCodes[code]) { - const { message, description } = mapErrorCodes[code]; - Taro.showModal({ - title: description, - content: message, - showCancel: false, - confirmText: "确认", - }); - return; - } else { - Taro.showToast({ - title: message, - icon: "none", - duration: 2000, - }); - } - } + } + }); + return; + } else if (mapErrorCodes[code]) { + const { message, description } = mapErrorCodes[code]; + Taro.showModal({ + title: description, + content: message, + showCancel: false, + confirmText: "确认", + }); + return; + } else { + Taro.showToast({ + title: message, + icon: "none", + duration: 2000, + }); + } } - const handlePasswordInput = (e: any) => { - const value = e.detail.value; - const [one = "", two = "", three = "", four = "", five = "", six = ""] = value.split(""); - setPassword([one, two, three, four, five, six]); - if (value.length === 6) { - const timer = setTimeout(() => { - submit_withdraw(value); - clearTimeout(timer); - }, 100); - } + }; + const handlePasswordInput = (e: any) => { + const value = e.detail.value; + const [one = "", two = "", three = "", four = "", five = "", six = ""] = + value.split(""); + setPassword([one, two, three, four, five, six]); + if (value.length === 6) { + const timer = setTimeout(() => { + submit_withdraw(value); + clearTimeout(timer); + }, 100); } - const handlePopupClick = (e) => { - e.preventDefault() - e.stopPropagation() - e.nativeEvent.stopImmediatePropagation() - inputRef.current!.focus(); - }; - return ( - - - 提现金额 - - ¥ - - { - !showTips && (Number(inputValue) !== 0) && ( - - ) - } - - - - {`我的余额:¥${walletInfo.balance}`} - {/* (可提现余额:¥5000.00) */} - - 全部提现 - - { - showTips && ( - {tipsText} - ) - } - - - 提现须知 - - 1. 本钱包余额由平台统一管理,提现服务由 微信支付(财付通) 提供。 - 2. 提现仅支持提现至本人实名认证的微信支付账户,请确保账户信息真实有效。 - 3. 每次提现金额不得超过钱包余额,且需满足提现金额最低限制(如有)。 - 4. 正常情况下提现 实时到账,如遇网络、系统或银行通道原因,可能会有延迟。 - 5. 提现过程中平台不收取任何手续费,如微信支付有特殊规则,按其实际规定执行。 - 6. 若发现异常交易、涉嫌违规或存在风险,平台有权暂停或拒绝提现操作。 - 7. 实际到账结果以 微信支付通知 为准。 + }; + const handlePopupClick = (e) => { + e.preventDefault(); + e.stopPropagation(); + e.nativeEvent.stopImmediatePropagation(); + inputRef.current!.focus(); + }; + return ( + + {/* 导航栏 */} + + + { + Taro.navigateBack(); + }} + > + + {pageTitle} + + + + + 提现金额 + + ¥ + + {!showTips && Number(inputValue) !== 0 && ( + + )} + + + + {`我的余额:¥${walletInfo.balance}`} + {/* (可提现余额:¥5000.00) */} + + + 全部提现 + + + {showTips && {tipsText}} + + + 提现须知 + + + 1. 本钱包余额由平台统一管理,提现服务由 微信支付(财付通) 提供。 + + + 2. + 提现仅支持提现至本人实名认证的微信支付账户,请确保账户信息真实有效。 + + + 3. 每次提现金额不得超过钱包余额,且需满足提现金额最低限制(如有)。 + + + 4. 正常情况下提现 + 实时到账,如遇网络、系统或银行通道原因,可能会有延迟。 + + + 5. + 提现过程中平台不收取任何手续费,如微信支付有特殊规则,按其实际规定执行。 + + + 6. 若发现异常交易、涉嫌违规或存在风险,平台有权暂停或拒绝提现操作。 + + 7. 实际到账结果以 微信支付通知 为准。 + + + + 免费声明 + + 1. 本平台不向用户收取提现手续费,提现服务免费。 + 2. 若因银行或微信支付方收取相关费用,与本平台无关。 + + 3. 因网络、系统或第三方原因造成的延迟、失败,本平台不承担责任。 + + 4. 用户在使用提现服务前,应充分了解并同意上述规则。 + + - - - - 免费声明 - - 1. 本平台不向用户收取提现手续费,提现服务免费。 - 2. 若因银行或微信支付方收取相关费用,与本平台无关。 - 3. 因网络、系统或第三方原因造成的延迟、失败,本平台不承担责任。 - 4. 用户在使用提现服务前,应充分了解并同意上述规则。 - - - - {/* 提现输入密码弹窗 */} - set_show_withdraw_popup(false)} - title="提现" - className="withdraw_popup" - hideFooter={true} - style={{ bottom: isKeyboardVisible ? `${keyboardHeight}px` : undefined }} - > - - {`¥${inputValue}`} - - { - password.map((item, index) => ( - - {item} - - )) - } - - item !== "").join("")} maxlength={6} onInput={handlePasswordInput} onBlur={() => { set_show_withdraw_popup(false) }} /> - - - - ); + {/* 提现输入密码弹窗 */} + set_show_withdraw_popup(false)} + title="提现" + className="withdraw_popup" + hideFooter={true} + style={{ + bottom: isKeyboardVisible ? `${keyboardHeight}px` : undefined, + }} + > + + {`¥${inputValue}`} + + {password.map((item, index) => ( + + {item} + + ))} + + item !== "").join("")} + maxlength={6} + onInput={handlePasswordInput} + onBlur={() => { + set_show_withdraw_popup(false); + }} + /> + + + + ); }; export default Withdrawal;