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'; import { financeDataSource, Transaction } from '@/services/financeDataSource'; const { Option } = Select; const { RangePicker } = DatePicker; const { Search } = Input; 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); try { const data = await financeDataSource.fetchTransactions(filters); setTransactions(data); } catch (error) { message.error('Failed to load transactions'); } finally { setLoading(false); } }; 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;