import { postIntegralExchangeIntegral } from '@/services/request'; 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; userInfoObj: { uid: string; nickname?: string; realName?: string; [key: string]: any; }; onClose: () => void; } const PointsExchangeModal: React.FC<PointsExchangeModalProps> = ({ setVisible, userInfoObj, onClose, }) => { const [form] = Form.useForm<{ delta: string; remark: string }>(); const formRef = useRef<ProFormInstance>(); const uid = userInfoObj?.uid; const userName = userInfoObj?.nickname || userInfoObj?.realName || ''; const [accountPoints, setAccountPoints] = useState<number>(0); useEffect(() => { if (userInfoObj && userInfoObj.delta) { setAccountPoints(Number(userInfoObj.delta) || 0); } }, [userInfoObj]); // 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(uid), // 使用用户的uid作为id参数 delta: values.delta, // 将delta设为负数 remark: values.remark, // 兑换说明 relationEntityType: 'USER', // 关联实体类型 createByName: userName, // 使用昵称或真实姓名作为createByName }, }); 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;