import './payment.css'; import { Button, ConfigProvider, DatePicker, // Divider, Flex, Form, GetProp, Image, Input, InputNumber, message, Radio, Spin, Upload, UploadProps, Tag, Modal, // Select, Table } from "antd"; import { ReloadOutlined } from '@ant-design/icons' import { useEffect, useRef, useState } from "react"; import locale from 'antd/locale/zh_CN'; import dayjs from 'dayjs'; import 'dayjs/locale/zh-cn'; import { DevUserId, get, post, uploadImageUrl } from "../../util/AjaxUtils.ts"; import { UploadOutlined } from "@ant-design/icons"; import useMessage from "antd/es/message/useMessage"; import { errorImage } from "../../util/CommonUtil.ts"; import type { TableColumnsType, // TableProps } from 'antd'; import wx from '../../static/wx.png'; import zfb from '../../static/zfb.png'; import dg from '../../static/dg.png'; import nodate from '../../static/nodate.png'; // import { render } from 'react-dom'; interface DataType { key: React.Key; packageName: string; packageMoney: number; packageDescription: string; packageInfoId: string; } dayjs.locale('zh-cn'); type FileType = Parameters>[0]; type FormFieldType = { thirdParty: string; rechargeMoney: number; orgName: string; orgBank: string; orgNumber: string; rechargeFinalTime: string; rechargeVoucher: string; } type PayType = { accountRechargeId: string; thirdPartyPayUrl: string; } type PaySystemBank = { bankAccountName: string; bankName: string; bankNumber: string; bankRemark: string; bankUnionpayNumber: string; } enum ThirdPartyEnum { WX = '微信', ZFB = '支付宝', DGZZ = '对公转账' } interface IPaymentProps { handleConfirm(): void; handleCancel(): void; show: boolean; } export default function Payment(props: IPaymentProps) { // 服务包相关 const [packPage, setPackPage] = useState(1); //服务包数据分页页码 // 开启关闭弹窗时重置页码 useEffect(() => { setPackPage(1); }, [props.show]) const [packTotal, setPackTotal] = useState(0); //服务包数据分页总条数 const [value, setValue] = useState('MATERIAL');//单选 服务包类型 const onChange = (e: any) => { setValue(e.target.value); getPackageList(e.target.value, packPage); // setSelectedRowKeys([]); }; const [packList, setPackList] = useState([]); const [packageInfoId, setPackageInfoId] = useState('');//单选 服务包id // 获取套餐列表 const getPackageList = (value: string, page: number) => { get({ messageApi, url: `/api/proj/servicepkg/packageinfo/listpage/${value}/self`, config: { params: { page: page, rows: 7, } }, onSuccess({ data }) { setPackList(data.rows); setPackTotal(data.total); } }) } useEffect(() => { getPackageList(value, packPage); }, []) const packColumns: TableColumnsType = [ { title: '序号', dataIndex: 'index', key: 'packageInfoId', align: 'center', // 宽度 width: 80, render: (_text: number, _record: any, index: number) => { return
{(packPage - 1) * 7 + index + 1}
} }, { title: '套餐名称', width: 150, align: 'center', dataIndex: 'packageName', key: 'packageInfoId', ellipsis: { showTitle: false, }, render: (text: string) => { return
{text}
} }, { title: '套餐说明', width: 200, align: 'center', dataIndex: 'packageDescription', key: 'packageInfoId', ellipsis: { showTitle: false, }, render: (text: string) => { return
{text}
} }, { title: '套餐价格', width: 100, align: 'center', dataIndex: 'packageMoney', key: 'packageInfoId', render: (text: number) => { return
{text / 100}元
} }, { title: '可用次数', width: 100, align: 'center', dataIndex: 'packageCount', key: 'packageInfoId', // render: (text: number) => { // return
{text / 100}元
// } }, { title: '操作', align: 'center', width: 100, dataIndex: 'operate', key: 'packageInfoId', render: (_value, record) => { return (
{ if (!packageInfoId) { setPackageInfoId(record.packageInfoId); form.setFieldValue('rechargeMoney', (record.packageMoney) / 100); getPay(record.packageInfoId); } }} >选购
{ setPackageInfoId(''); form.setFieldValue('rechargeMoney', 280); getPay(''); }} >取消
) } } ]; const [thirdParty, setThirdParty] = useState(); // const [selectedRowKeys, setSelectedRowKeys] = useState([]); // useEffect(() => { // if (packageInfoId) { // setSelectedRowKeys([packageInfoId]); // } else { // setSelectedRowKeys([]); // } // }, [packageInfoId]); // const rowSelection: TableProps['rowSelection'] = { // selectedRowKeys, // // onChange: (selectedRowKeys: React.Key[], selectedRows: DataType[]) => { // // setSelectedRowKeys(selectedRowKeys); // // console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows); // // setPackageInfoId(selectedRows[0].packageInfoId); // // // form.getFieldValue('rechargeMoney') // // form.setFieldValue('rechargeMoney', (selectedRows[0].packageMoney) / 100); // // // getPay(selectedRows[0].packageInfoId); // // // console.log(selectedRowKeys, selectedRows); // // // if(packageInfoId == selectedRows[0].packageInfoId){ // // // setSelectedRowKeys([]); // // // }else{ // // // setSelectedRowKeys(selectedRowKeys); // // // } // // }, // }; // 是否显示完成付款按钮 const [showPay, setshowPay] = useState('unset') // 支付完成弹窗 const [paymentModal, setPaymentModal] = useState(false) const [mask, setMask] = useState(false) const [form] = Form.useForm(); const [messageApi, messageApiContext] = useMessage(); const [isRechargeMoneyEdit, setIsRechargeMoneyEdit] = useState(false); const [isLoading, setIsLoading] = useState(false); const [rechargeVoucherArray, setRechargeVoucherArray] = useState([]); const [accountRechargeId, setAccountRechargeId] = useState(''); const [thirdPartyPayUrl, setThirdPartyPayUrl] = useState(''); const [paySystemBank, setPaySystemBank] = useState({ bankAccountName: '', bankName: '', bankNumber: '', bankRemark: '', bankUnionpayNumber: '' }); const [countdownTime, setCountdownTime] = useState(''); // const [isCountdownTimeout, setIsCountdownTimeout] = useState(false); const moneyRange: number[] = [0.01, 20000]; const countdownIntervalRef = useRef(); const [refreshQrCodeCount, setRefreshQrCodeCount] = useState(0); /** * 倒计时 */ const countdown = () => { if (countdownIntervalRef.current) { clearInterval(countdownIntervalRef.current); } // if (thirdParty == ThirdPartyEnum.DGZZ) { // return; // } const Time = new Date().getTime(); // 设定计时器的时间为60秒 const countDownDate = new Date(Time + 270 * 1000).getTime(); // const countDownDate = new Date(Time + 5 * 1000).getTime(); // 更新计时器的秒数 const updateCountdown = () => { const now = new Date().getTime(); const distance = countDownDate - now; // 将毫秒数转换为分钟和秒数 const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((distance % (1000 * 60)) / 1000); // 渲染计时器 setCountdownTime(minutes + ":" + (seconds < 10 ? "0" : "") + seconds); if (distance <= 0) { setCountdownTime('已失效'); // setIsCountdownTimeout(true); clearInterval(countdownIntervalRef.current); setMask(true) } } // 每秒更新一次计时器 countdownIntervalRef.current = setInterval(() => { updateCountdown(); }, 1000); } const getPay = (packageInfoId: string) => { // console.log('获取订单'); post({ messageApi, url: '/api/pay/get-pay', body: { rechargeMoney: form.getFieldValue('rechargeMoney'), thirdParty: form.getFieldValue('thirdParty'), packageInfoId: packageInfoId }, onBefore() { setIsLoading(true); }, onSuccess({ data }) { // console.log('用户id',data.accountRechargeId); setAccountRechargeId(data.accountRechargeId); setThirdPartyPayUrl(data.thirdPartyPayUrl); countdown(); }, onFinally() { setIsLoading(false); } }) } const getPaySystemBank = () => { get({ messageApi, url: '/api/pay/get-pay-system-bank', onSuccess({ data }) { setPaySystemBank(data); } }) } useEffect(() => { if (!thirdParty) { getPaySystemBank(); form.setFieldsValue({ thirdParty: ThirdPartyEnum.DGZZ, rechargeMoney: 280 }) setThirdParty(ThirdPartyEnum.DGZZ) return; } getPay(packageInfoId); // countdown() }, [thirdParty, refreshQrCodeCount]); const renderMoney = () => { if (isRechargeMoneyEdit) { return (
{ setIsRechargeMoneyEdit(false) setshowPay('unset') }} >取消
) } return (
{form.getFieldValue('rechargeMoney')}
{ form.setFieldValue('rechargeMoney', 100); setIsRechargeMoneyEdit(false) getPay(packageInfoId) }} color="volcano">100 { form.setFieldValue('rechargeMoney', 200); setIsRechargeMoneyEdit(false) getPay(packageInfoId) }} color="volcano">200 { form.setFieldValue('rechargeMoney', 300); setIsRechargeMoneyEdit(false) getPay(packageInfoId) }} color="volcano">300 { form.setFieldValue('rechargeMoney', 400); setIsRechargeMoneyEdit(false) getPay(packageInfoId) }} color="volcano">400 { form.setFieldValue('rechargeMoney', 500); setIsRechargeMoneyEdit(false) getPay(packageInfoId) }} color="volcano">500
{/*
购买服务包
*/}
) } const renderPayBody = () => { if (thirdParty == '对公转账') { return (
付款方信息
公司名称 *
开户银行 *
银行账号 *
打款时间 * { form.setFieldValue('rechargeFinalTime', dateString); }} />
打款凭证 * { if (e.file.status === 'done') { rechargeVoucherArray.push(e.file.response.data.fileId); setRechargeVoucherArray(rechargeVoucherArray); } if (e.file.status === 'removed') { const idArray = rechargeVoucherArray.filter(item => item != e.file.response.data.fileId); setRechargeVoucherArray(idArray); } return e.fileList; }} rules={[{ required: true, message: '请上传打款凭证' }]} > { const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; if (!isJpgOrPng) { message.error('只能上传 JPG/PNG 格式文件!'); } return isJpgOrPng; }} >
收款方信息
公司名称 {paySystemBank.bankAccountName}
开户银行 {paySystemBank.bankName}
银行账号 {paySystemBank.bankNumber}
银行联行号 {paySystemBank.bankUnionpayNumber}
打款备注
{paySystemBank.bankRemark}
说明
请打款时必须按照以上备注填写
倒计时:{countdownTime}
) } return <>
正在修改,请稍后...
支付Pay
{thirdParty}扫码支付
{countdownTime}
{/* { isCountdownTimeout ? (
{ setRefreshQrCodeCount(refreshQrCodeCount + 1); }}> 点击刷新
) : <> } */}
} return (
{ setMask(false) setRefreshQrCodeCount(refreshQrCodeCount + 1); }}>
已失效,点击刷新
{/*
{ setPaymentModal(true) }} autoComplete="off" > { form.setFieldValue('thirdParty', e.target.value); setThirdParty(e.target.value); // console.log(e.target.value); setPackageInfoId(''); setIsRechargeMoneyEdit(false) setValue('') form.setFieldValue('rechargeMoney', 280); setSelectedRowKeys([]); }}> 微信 1支付宝 对公转账 {renderMoney()}
购买服务包:
全托管 ), }, { value: 'MATERIAL', label: ( 写材料 ), }, ]} />
{ return { onClick: (event: React.MouseEvent) => { event.stopPropagation(); // 模拟点击单选框 // // 判断当前行是否已经被选中 const isSelected = selectedRowKeys.includes(record.packageInfoId); if (isSelected) { // 处理取消选择的情况 setSelectedRowKeys([]); setPackageInfoId(''); form.setFieldValue('rechargeMoney', 280); getPay(''); } else { // 处理选中的情况 setSelectedRowKeys([record.packageInfoId]); setPackageInfoId(record.packageInfoId); form.setFieldValue('rechargeMoney', (record.packageMoney) / 100); getPay(record.packageInfoId); } }, style: { cursor: 'pointer' } }; }} /> {renderPayBody()}
*/}
{ setPaymentModal(true) }} autoComplete="off" >
{renderMoney()} { form.setFieldValue('thirdParty', e.target.value); setThirdParty(e.target.value); // console.log(e.target.value); setPackageInfoId(''); setIsRechargeMoneyEdit(false) // setValue('') form.setFieldValue('rechargeMoney', 280); // setSelectedRowKeys([]); }}> 微信 支付宝 对公转账
服务包:
写材料 ), }, { value: 'ALL', label: ( 全托管 ), }, ]} />
0 ? 'unset' : 'none', marginLeft: 90 }}>
7 ? 'unset' : 'none', }}>
{ if (packPage > 1) { setPackPage(packPage - 1); getPackageList(value, packPage - 1); }else{ messageApi.error('已经是第一页了'); } }} style={{ cursor: packPage > 1 ? 'pointer' : 'not-allowed', background: packPage > 1? '#abc8ff' : '#BAC8DA', }} >上一页
{ if (packPage < packTotal / 7) { setPackPage(packPage + 1); getPackageList(value, packPage + 1); }else{ messageApi.error('已经是最后一页了'); } }} >下一页
暂无服务包
{renderPayBody()}
{messageApiContext} { post({ messageApi, url: `/api/pay/pay-account-recharge/${accountRechargeId}`, body: { thirdParty: form.getFieldValue('thirdParty'), rechargeMoney: form.getFieldValue('rechargeMoney'), orgName: thirdParty == ThirdPartyEnum.DGZZ ? form.getFieldValue('orgName') : '', orgBank: thirdParty == ThirdPartyEnum.DGZZ ? form.getFieldValue('orgBank') : '', orgNumber: thirdParty == ThirdPartyEnum.DGZZ ? form.getFieldValue('orgNumber') : '', rechargeFinalTime: thirdParty == ThirdPartyEnum.DGZZ ? form.getFieldValue('rechargeFinalTime') : '', rechargeVoucher: thirdParty == ThirdPartyEnum.DGZZ ? rechargeVoucherArray.join(',') : '', packageInfoId: packageInfoId }, onBefore() { setIsLoading(true); }, onSuccess() { props.handleConfirm(); }, onFinally() { setIsLoading(false); } }); }} onCancel={() => { setPaymentModal(false); }}>
确定对公转账{form.getFieldValue('rechargeMoney')} 吗?不确定请修改金额。
) }