Files
SaaS2/src/pages/team/sale/components/Recharge.tsx
RUI 6362673ccb
Some checks failed
Next.js CI/CD 流水线 / deploy (push) Failing after 36s
0607.1
2025-06-07 00:20:00 +08:00

153 lines
5.5 KiB
TypeScript

import React, { useState, useEffect } from 'react';
import { Modal, Button, Form, Input, InputNumber, message, List } from 'antd';
import { useUserInfo } from '@/store/userStore';
import { ICustomer } from '@/models/types';
import axios from 'axios';
interface RechargeProps {
visible: boolean;
onCancel: () => void;
customer: ICustomer | null;
onRechargeSuccess: () => void; // 充值成功后的回调
}
const Recharge: React.FC<RechargeProps> = ({ visible, onCancel, customer, onRechargeSuccess }) => {
const [loading, setLoading] = useState(false);
const [balance, setBalance] = useState<number | null>(null);
const [transactions, setTransactions] = useState<any[]>([]); // 存储交易记录
const [form] = Form.useForm();
const { } = useUserInfo();
useEffect(() => {
const fetchBalanceAndTransactions = async () => {
if (customer?._id) {
try {
// 重置状态
setBalance(null);
setTransactions([]);
form.resetFields();
// 获取客户余额
const balanceResponse = await axios.get(`/api/backstage/balance/${customer._id}`);
if (balanceResponse.status === 200) {
setBalance(balanceResponse.data.balance ?? 0); // 默认值为 0
} else {
setBalance(0); // 无法获取余额时设为 0
}
// 获取客户交易记录
const transactionsResponse = await axios.get(`/api/backstage/transactions/${customer._id}`);
if (transactionsResponse.status === 200) {
setTransactions(transactionsResponse.data.transactions);
} else {
message.error('无法获取交易记录');
}
} catch (error) {
console.error('获取数据时出错:', error);
setBalance(0); // 错误情况下设为 0
message.error('无余额交易记录');
}
}
};
if (visible) {
fetchBalanceAndTransactions();
}
}, [customer, visible]);
const handleRecharge = async () => {
if (!customer?._id) {
message.error('请先选择客户');
return;
}
try {
setLoading(true);
const values = await form.validateFields();
const { , } = values;
const response = await axios.post('/api/backstage/transactions', {
团队: 团队?._id,
客户: customer?._id,
: '充值',
,
,
});
if (response.status === 200) {
message.success('充值成功');
onRechargeSuccess();
onCancel();
} else {
message.error('充值失败,请重试');
}
} catch (error) {
message.error('充值失败,请检查输入并重试');
} finally {
setLoading(false);
}
};
return (
<Modal
open={visible}
//title="充值"
title={<div className="text-2xl"></div>}
onCancel={onCancel}
footer={[
<Button key="back" onClick={onCancel}>
</Button>,
<Button key="submit" type="primary" loading={loading} onClick={handleRecharge}>
</Button>,
]}
>
{balance !== null && balance !== undefined ? (
<div style={{ marginBottom: '16px' }}>
<h2>: ¥ {balance.toFixed(2)}</h2>
</div>
) : (
<div style={{ marginBottom: '16px' }}>
<strong>: ¥ 0</strong>
</div>
)}
<Form form={form} layout="vertical">
<Form.Item
name="金额"
label="充值金额"
rules={[{ required: true, message: '请输入充值金额' }]}
>
<InputNumber min={0.01} step={0.01} precision={2} style={{ width: '100%' }} />
</Form.Item>
<Form.Item
name="描述"
label="描述"
>
<Input placeholder="可选,填写描述信息" />
</Form.Item>
</Form>
<div style={{ marginTop: '24px' }}>
<h3></h3>
<div style={{ maxHeight: '320px', overflowY: 'auto' }}>
<List
itemLayout="horizontal"
dataSource={transactions}
renderItem={item => (
<List.Item>
<List.Item.Meta
title={`类型: ${item.}`}
description={`金额: ¥${item..toFixed(2)} - 日期: ${new Date(item.).toLocaleDateString()} - 描述: ${item.}`}
/>
</List.Item>
)}
/>
</div>
</div>
</Modal>
);
};
export default Recharge;