import { View, Text, Input } from '@tarojs/components'; import { useState } from 'react'; import Taro from '@tarojs/taro'; import { Button, Input as NutInput, Dialog, Toast, TextArea, ToastOptions, Radio, } from '@nutui/nutui-react-taro'; import { AlipayIcon, BackCardIcon } from '@/components/Icon'; import { transferApi } from '@/services/apis'; import { useUserStore } from '@/stores/user'; import { BankcardExtInfoSchema } from '@/schemas/account'; import './index.less'; export default function Transfer() { // 状态管理 const [showConfirm, setShowConfirm] = useState(false); const [isLoading, setIsLoading] = useState(false); const [transferData, setTransferData] = useState<{ amount: string; identity: string; name: string; identityType: string; remark: string; bankcardExtInfo: BankcardExtInfoSchema; }>({ amount: '', identity: '', name: '', identityType: 'alipay', remark: '', bankcardExtInfo: { account_type: '1', }, }); // 常用金额选项 const quickAmounts = ['10000', '20000', '30000']; // 常用备注选项 const quickRemarks = ['消费', '工资', '奖金', '其他']; // 处理金额输入 const handleAmountChange = (value: string) => { // 只允许输入数字和小数点 let filtered = value.replace(/[^0-9.]/g, ''); // 限制只有一个小数点 const parts = filtered.split('.'); if (parts.length > 2) { filtered = parts[0] + '.' + parts.slice(1).join(''); } // 限制小数点后两位 if (parts.length === 2 && parts[1].length > 2) { filtered = parts[0] + '.' + parts[1].substring(0, 2); } // 限制最大金额 const numValue = parseFloat(filtered); if (!Number.isNaN(numValue) && numValue > 10000000) { showToast({ content: '单笔转账金额不能超过1000万元', }); filtered = ''; } console.log(filtered); handleQuickAmount(filtered); }; // 选择常用金额 const handleQuickAmount = (value: string) => { setTransferData({ ...transferData, amount: value }); }; // 处理收款方姓名输入 const handleNameChange = (value: string) => { setTransferData({ ...transferData, name: value }); }; // 处理收款方账号输入 const handleIdentityChange = (value: string) => { setTransferData({ ...transferData, identity: value }); }; // 选择账户类型 const handleidentityType = (type: string) => { setTransferData({ ...transferData, identityType: type, identity: '', bankcardExtInfo: { account_type: '1', }, }); }; // 选择常用备注 const handleQuickRemark = (value: string) => { setTransferData({ ...transferData, remark: value }); }; // 处理银行卡账户类型选择 const handleAccountTypeChange = (value: string) => { setTransferData({ ...transferData, bankcardExtInfo: { ...transferData.bankcardExtInfo, account_type: value, }, }); }; // 处理银行卡机构名称输入 const handleInstNameChange = (value: string) => { setTransferData({ ...transferData, bankcardExtInfo: { ...transferData.bankcardExtInfo, inst_name: value, }, }); }; const showToast = (options: ToastOptions) => { Toast.show('transfer-toast', options); }; // 打开确认弹窗 const handleOpenConfirm = () => { // 验证输入 if (!transferData.amount || parseFloat(transferData.amount) <= 0) { showToast({ content: '请输入转账金额', }); return; } if (!transferData.name) { showToast({ content: `请输入收款方真实姓名`, }); return; } if (!transferData.identity) { showToast({ content: `请输入收款方${transferData.identityType === 'alipay' ? '支付宝' : '银行卡'}账号`, }); return; } if ( transferData.identityType === 'bank' && transferData.bankcardExtInfo.account_type === '1' && !transferData.bankcardExtInfo.inst_name ) { showToast({ content: '请输入银行卡机构名称', }); return; } setShowConfirm(true); }; // 确认转账 const handleConfirmTransfer = async () => { setIsLoading(true); setShowConfirm(false); try { const response = await transferApi({ enterpriseId: useUserStore.getState().enterpriseId, amount: transferData.amount, payeeInfo: { identityType: transferData.identityType, name: transferData.name, identity: transferData.identity, bankcardExtInfo: transferData.identityType === 'alipay' ? undefined : transferData.bankcardExtInfo, }, }); // 显示成功提示 showToast({ icon: 'success', content: '转账成功', }); // 清空输入 setTransferData({ amount: '', identity: '', name: '', identityType: 'alipay', remark: '', bankcardExtInfo: { account_type: '1', }, }); // 跳转到转账记录页面 Taro.navigateTo({ url: '/pages/transfer/record/index' }); } catch (error: unknown) { showToast({ icon: 'error', content: error instanceof Error ? error.message : '转账失败', }); } finally { setIsLoading(false); } }; return ( {/* 金额输入区域 */} 转账金额(元) handleAmountChange(e.detail.value)} placeholder="0.00" type="digit" maxlength={16} disabled={isLoading} focus /> {quickAmounts.map((item) => ( handleQuickAmount(item)} > {item}元 ))} {/* 收款方信息区域 */} 收款方信息 收款方姓名 handleNameChange(value)} placeholder="请输入真实姓名" disabled={isLoading} maxLength={20} clearable /> 账户类型 handleidentityType('alipay')} > 支付宝 handleidentityType('bank')} > 银行卡 {transferData.identityType === 'alipay' ? '支付宝账号' : '银行卡账号'} handleIdentityChange(value)} placeholder={ transferData.identityType === 'alipay' ? '请输入支付宝账号' : '请输入银行卡号' } disabled={isLoading} maxLength={30} clearable /> {transferData.identityType === 'bank' && ( <> 银行卡类型 handleAccountTypeChange(value as string)} direction="horizontal" style={ { // '--nutui-radio-button-border-radius': '8px', } as any } > 公司账户 个人账户 {transferData.bankcardExtInfo.account_type === '1' && ( 银行卡机构名称 handleInstNameChange(value)} placeholder="请输入机构名称" disabled={isLoading} maxLength={20} clearable /> )} )} {/* 备注区域 */} 转账备注(可选)