import React, { useCallback } from 'react'; import { Card, Typography, Button, Table, Tag, Space, Modal, Form, Input, Select, DatePicker, InputNumber, message, Row, Col, Statistic } from 'antd'; import { PlusOutlined, SearchOutlined, ShoppingOutlined } from '@ant-design/icons'; import useFormDraft from '../hooks/useFormDraft'; import { useLanguageStore } from '../store/languageStore'; const { Title, Paragraph } = Typography; const { RangePicker } = DatePicker; const ProcurementPage: React.FC = () => { const { t, currentLanguage } = useLanguageStore(); const [loading, setLoading] = React.useState(false); const [modalVisible, setModalVisible] = React.useState(false); const [form] = Form.useForm(); // 表单草稿保护 const { save: saveDraft, restore: restoreDraft, clear: clearDraft, hasDraft } = useFormDraft({ form, storageKey: 'procurement_create', }) const handleFormChange = useCallback(() => { saveDraft() }, [saveDraft]) const columns = [ { title: t('procurement.orderCode'), dataIndex: 'code', key: 'code', width: 140 }, { title: t('procurement.purchaseDate'), dataIndex: 'date', key: 'date', width: 120 }, { title: t('procurement.supplier'), dataIndex: 'supplier', key: 'supplier' }, { title: t('procurement.materialName'), dataIndex: 'material', key: 'material' }, { title: t('procurement.quantity'), dataIndex: 'quantity', key: 'quantity', width: 80 }, { title: t('procurement.unitPrice'), dataIndex: 'unitPrice', key: 'unitPrice', width: 100, render: (v: number) => `¥${v}` }, { title: t('procurement.totalAmount'), dataIndex: 'amount', key: 'amount', width: 120, render: (v: number) => `¥${v?.toLocaleString()}` }, { title: t('procurement.status'), dataIndex: 'status', key: 'status', width: 100, render: (v: string) => { const colors: Record = { pending: 'default', approved: 'processing', received: 'success', rejected: 'error' }; const texts: Record = { pending: t('procurement.pendingApproval'), approved: t('procurement.approved'), received: t('procurement.stocked'), rejected: t('procurement.rejected') }; return {texts[v]}; } }, { title: t('procurement.action'), key: 'action', width: 150, render: () => ( ) } ]; const data = [ { key: '1', code: 'PO20260318001', date: '2026-03-18', supplier: '老挝电力设备公司', material: '电缆 3x120', quantity: 1000, unitPrice: 45, amount: 45000, status: 'pending' }, { key: '2', code: 'PO20260317002', date: '2026-03-17', supplier: '万象建材供应商', material: '钢管 DN50', quantity: 200, unitPrice: 120, amount: 24000, status: 'approved' }, { key: '3', code: 'PO20260316003', date: '2026-03-16', supplier: '沙湾五金店', material: '螺栓 M12', quantity: 500, unitPrice: 5, amount: 2500, status: 'received' }, ]; const handleSubmit = () => { message.success(t('procurement.submitSuccess')); clearDraft() setModalVisible(false); }; return (
{t('procurement.title')} {t('procurement.description')}
} /> { if (form.isFieldsTouched()) { Modal.confirm({ title: t('common.closeConfirm'), content: t('common.closeConfirmMsg'), okText: t('common.close'), cancelText: t('common.continueEdit'), onOk: () => { saveDraft() form.resetFields() setModalVisible(false) }, }) } else { form.resetFields() setModalVisible(false) } }} onOk={handleSubmit} destroyOnClose width={600} maskClosable={false} >
); }; export default ProcurementPage;