import React, { useState, useEffect } from 'react'; import { Table, Button, Input, Select, DatePicker, message } from 'antd'; import { SearchOutlined, FilterOutlined, ExportOutlined } from '@ant-design/icons'; import { useNavigate } from 'react-router-dom'; const { Option } = Select; const { RangePicker } = DatePicker; const { Search } = Input; interface Transaction { id: string; transactionId: string; amount: number; type: 'income' | 'expense'; category: string; description: string; date: string; status: 'completed' | 'pending' | 'failed'; } const Transactions: React.FC = () => { const navigate = useNavigate(); const [transactions, setTransactions] = useState([]); const [loading, setLoading] = useState(false); const [filters, setFilters] = useState({ type: '', category: '', status: '', search: '', dateRange: null as any, }); useEffect(() => { fetchTransactions(); }, [filters]); const fetchTransactions = async () => { setLoading(true); // 模拟API调用 setTimeout(() => { const mockTransactions: Transaction[] = [ { id: '1', transactionId: 'TRX-2026-001', amount: 10000, type: 'income', category: 'Sales', description: 'Product sales', date: '2026-03-15', status: 'completed', }, { id: '2', transactionId: 'TRX-2026-002', amount: 5000, type: 'expense', category: 'Suppliers', description: 'Supplier payment', date: '2026-03-16', status: 'completed', }, { id: '3', transactionId: 'TRX-2026-003', amount: 2000, type: 'expense', category: 'Marketing', description: 'Ad spend', date: '2026-03-17', status: 'completed', }, { id: '4', transactionId: 'TRX-2026-004', amount: 15000, type: 'income', category: 'Sales', description: 'Product sales', date: '2026-03-18', status: 'pending', }, ]; setTransactions(mockTransactions); setLoading(false); }, 500); }; const handleExport = () => { message.success('交易记录已导出'); }; const columns = [ { title: '交易ID', dataIndex: 'transactionId', key: 'transactionId', }, { title: '金额', dataIndex: 'amount', key: 'amount', render: (amount: number, record: Transaction) => ( {record.type === 'income' ? '+' : '-'}$${amount.toFixed(2)} ), }, { title: '类型', dataIndex: 'type', key: 'type', render: (type: string) => { return type === 'income' ? '收入' : '支出'; }, }, { title: '分类', dataIndex: 'category', key: 'category', }, { title: '描述', dataIndex: 'description', key: 'description', }, { title: '日期', dataIndex: 'date', key: 'date', }, { title: '状态', dataIndex: 'status', key: 'status', render: (status: string) => { const statusMap = { completed: '已完成', pending: '待处理', failed: '失败', }; return statusMap[status] || status; }, }, ]; return (

交易记录

setFilters({ ...filters, search: e.target.value })} /> setFilters({ ...filters, dateRange: dates })} />
); }; export default Transactions;