import { postIntegralExchangeIntegral } from '@/services/request'; import { getUserInfo } from '@/utils'; import { ModalForm, ProFormInstance, ProFormTextArea, } from '@ant-design/pro-components'; import { Form, Input, message } from 'antd'; import React, { useEffect, useRef, useState } from 'react'; import '../index.less'; interface PointsExchangeModalProps { setVisible: (visible: boolean) => void; record: any; onClose: () => void; } const userInfo = getUserInfo(); const PointsExchangeModal: React.FC<PointsExchangeModalProps> = ({ setVisible, record, onClose, }) => { const [form] = Form.useForm<{ delta: string; remark: string }>(); const formRef = useRef<ProFormInstance>(); const [accountPoints, setAccountPoints] = useState<number>(0); // Get account points from record useEffect(() => { if (record && record.delta) { setAccountPoints(Number(record.delta) || 0); } }, [record]); // Validate that delta is not greater than available points const validateDelta = (rule: any, value: string) => { const deltaValue = Number(value); if (isNaN(deltaValue)) { return Promise.reject('请输入有效的积分数值'); } if (deltaValue <= 0) { return Promise.reject('兑换积分必须大于0'); } if (deltaValue > accountPoints) { return Promise.reject('兑换积分不能大于账户积分'); } return Promise.resolve(); }; return ( <div className="prepaid-index"> <ModalForm<{ delta: string; remark: string; }> width={600} open title="确认兑换" form={form} formRef={formRef} autoFocusFirstInput submitter={{ searchConfig: { submitText: '确认兑换', resetText: '取消', }, }} modalProps={{ destroyOnClose: true, onCancel: () => { setVisible(false); }, }} onFinish={async (values) => { try { // 调用积分兑换API await postIntegralExchangeIntegral({ data: { id: Number(record.id), delta: Number(values.delta), remark: values.remark, relationEntityType: 'RESEARCH_GROUP', createByName: userInfo?.username, }, }); message.success('积分兑换成功'); setVisible(false); onClose(); return true; } catch (error) { console.error(error); return false; } }} onOpenChange={setVisible} > <Form.Item label="兑换积分" name="delta" rules={[ { required: true, message: '请输入兑换积分' }, { validator: validateDelta }, ]} > <Input style={{ height: '30px' }} placeholder="请输入兑换积分数量" /> </Form.Item> <Form.Item label="兑换说明" name="remark" rules={[{ required: true, message: '请输入兑换说明' }]} > <ProFormTextArea style={{ height: '100px' }} placeholder="请输入兑换说明" /> </Form.Item> </ModalForm> </div> ); }; export default PointsExchangeModal;