import React, { useState, useEffect } from 'react'; import { Table, Input, Button, Select, DatePicker, message, Card, Typography, Tag, Modal, Form } from 'antd'; import { SearchOutlined, EyeOutlined, DownloadOutlined, ReloadOutlined } from '@ant-design/icons'; import { merchantDataSource, Merchant, MerchantSettlement } from '@/services/merchantDataSource'; const { Option } = Select; const { Title, Text } = Typography; const { RangePicker } = DatePicker; const { Item } = Form; const MerchantSettlementManage: React.FC = () => { const [settlements, setSettlements] = useState([]); const [merchants, setMerchants] = useState<{ id: string; companyName: string }[]>([]); const [loading, setLoading] = useState(false); const [searchText, setSearchText] = useState(''); const [merchantFilter, setMerchantFilter] = useState(''); const [statusFilter, setStatusFilter] = useState(''); const [dateRange, setDateRange] = useState<[string, string] | null>(null); const [isModalVisible, setIsModalVisible] = useState(false); const [selectedSettlement, setSelectedSettlement] = useState(null); const [form] = Form.useForm(); const fetchSettlements = async () => { setLoading(true); try { const response = await getMerchantSettlements(); setSettlements(response.data); } catch (error) { message.error('获取结算列表失败'); console.error('获取结算列表失败:', error); } finally { setLoading(false); } }; const fetchMerchants = async () => { try { // 实际项目中应该调用获取商户列表的API // 这里模拟数据 setMerchants([ { id: '1', companyName: '商户A' }, { id: '2', companyName: '商户B' }, { id: '3', companyName: '商户C' }, ]); } catch (error) { console.error('获取商户列表失败:', error); } }; useEffect(() => { fetchMerchants(); fetchSettlements(); }, []); const handleSearch = (value: string) => { setSearchText(value); }; const handleMerchantFilter = (value: string) => { setMerchantFilter(value); }; const handleStatusFilter = (value: string) => { setStatusFilter(value); }; const handleDateRangeChange = (dates: any) => { if (dates) { setDateRange([dates[0].format('YYYY-MM-DD'), dates[1].format('YYYY-MM-DD')]); } else { setDateRange(null); } }; const filteredSettlements = settlements.filter(settlement => { const matchesSearch = settlement.id.includes(searchText) || settlement.merchantName.toLowerCase().includes(searchText.toLowerCase()); const matchesMerchant = merchantFilter ? settlement.merchantId === merchantFilter : true; const matchesStatus = statusFilter ? settlement.status === statusFilter : true; return matchesSearch && matchesMerchant && matchesStatus; }); const handleView = (settlement: Settlement) => { setSelectedSettlement(settlement); setIsModalVisible(true); }; const handleProcess = (settlement: Settlement) => { // 调用API处理结算 message.info(`处理结算: ${settlement.id}`); }; const handleDownload = (settlement: Settlement) => { // 下载结算单 message.info(`下载结算单: ${settlement.id}`); }; const handleRefresh = () => { fetchSettlements(); }; const getStatusTag = (status: string) => { const statusConfig: Record = { PENDING: { color: 'blue', text: '待处理' }, PROCESSING: { color: 'orange', text: '处理中' }, COMPLETED: { color: 'green', text: '已完成' }, FAILED: { color: 'red', text: '失败' }, }; const config = statusConfig[status] || { color: 'default', text: status }; return {config.text}; }; const columns = [ { title: '结算单ID', dataIndex: 'id', key: 'id', ellipsis: true, }, { title: '商户', dataIndex: 'merchantName', key: 'merchantName', ellipsis: true, }, { title: '结算周期', key: 'period', render: (_, settlement: Settlement) => ( {settlement.periodStart} 至 {settlement.periodEnd} ), }, { title: '结算金额', dataIndex: 'totalAmount', key: 'totalAmount', render: (amount: number) => ${amount.toFixed(2)}, }, { title: '状态', dataIndex: 'status', key: 'status', render: (status: string) => getStatusTag(status), }, { title: '创建时间', dataIndex: 'createdAt', key: 'createdAt', ellipsis: true, }, { title: '操作', key: 'action', render: (_: any, settlement: Settlement) => (
{settlement.status === 'PENDING' && ( )}
), }, ]; return (
多商户结算管理
} style={{ width: 300 }} onChange={(e) => handleSearch(e.target.value)} />
setIsModalVisible(false)} footer={[ , ]} width={600} > {selectedSettlement && (
结算单ID: {selectedSettlement.id}
商户: {selectedSettlement.merchantName}
结算周期: {selectedSettlement.periodStart} 至 {selectedSettlement.periodEnd}
结算金额: ${selectedSettlement.totalAmount.toFixed(2)}
状态: {getStatusTag(selectedSettlement.status)}
创建时间: {selectedSettlement.createdAt}
更新时间: {selectedSettlement.updatedAt}
结算明细
`$${amount.toFixed(2)}` }, ]} dataSource={[ { key: '1', item: '商品销售', amount: selectedSettlement.totalAmount * 0.9 }, { key: '2', item: '平台服务费', amount: selectedSettlement.totalAmount * 0.1 }, ]} pagination={false} /> )} ); }; export default MerchantSettlementManage;