import React, { useEffect, useState } from 'react'; import { Modal, Form, Input, Select, Button, Upload, message, Row, Col, Descriptions } from 'antd'; import type { UploadProps } from 'antd'; import { UploadOutlined } from '@ant-design/icons'; import { uploadFile, invoiceView, invoiceAdd, invoiceEdit } from '../services'; import { getDictList } from '@/servers/api/dicts' interface props { visible: boolean; onOk: () => void; onCancel: () => void; initialValues?: any; readOnly?: boolean; } interface Dict { dicName: string; code: string; } interface viewDataData { id?: string | null; account?: string; address?: string; bank?: string; head?: string; phone?: string; qualificationCertificate?: string; supplierId?: string; taxpayerCode?: string; taxpayerType?: string; attachment?: { uid: string; name: string; url: string; status: string; }[]; } const InvoiceFormModal: React.FC = ({ visible, onOk, onCancel, initialValues, readOnly = false, }) => { const userId = sessionStorage.getItem('userId') || ''; // 新增与修改 const [form] = Form.useForm(); //查看 const [viewData, setViewData] = useState({}); //纳税人option const [taxpayerType, setTaxpayerType] = useState(); useEffect(() => { if (visible) { if (initialValues) { invoiceView(initialValues.id).then((res) => { const { code, data } = res; if (code === 200) { const fields = { ...data, id: data.id ? data.id : null, attachment: data.qualificationCertificate ? [{ uid: '-1', name: data.qualificationCertificate, url: data.qualificationCertificate, status: 'done', response: { url: data.qualificationCertificate } }] : [], }; console.log(fields, 'fields'); form.setFieldsValue(fields); setViewData(fields); } }); } else { form.resetFields(); // ✅ 只有无 initialValues 才重置 } getDictList('taxpayer_type').then((res) => { if (res.code == 200) { setTaxpayerType(res.data) } }) } }, [visible, initialValues]); // 提交 const handleFinish = async () => { try { const values = await form.validateFields(); const qualificationCertificate = values.attachment?.[0]?.response.url; // uploadFile 返回的 data const payload = { ...values, qualificationCertificate, supplierId: userId, }; console.log(values, 'values'); if (!values.id) { invoiceAdd(payload).then((res) => { if (res.code == 200) { message.success('新增成功'); onOk(); } }) } else { invoiceEdit(payload).then((res) => { if (res.code == 200) { message.success('修改成功'); onOk(); } }) } } catch (error) { console.error('表单校验失败:', error); } }; //上传接口 const uploadProps: UploadProps = { name: 'file', showUploadList: true, beforeUpload: (file) => { if (file.size > 1048576) { // 1MB message.error('文件大小不能超过1MB'); return Upload.LIST_IGNORE; // 阻止上传 } return true; }, customRequest: async ({ file, onSuccess, onError }) => { try { const realFile = file as File; const res = await uploadFile(realFile); const uploadedFile = { uid: res.fileSize, name: res.fileName, status: 'done', url: res.url, response: res, }; onSuccess?.(uploadedFile, new XMLHttpRequest()) message.success('上传成功'); } catch (err: any) { onError?.(err); message.error(err.message || '上传失败'); } } }; return ( {readOnly ? ( {viewData.taxpayerType} {viewData.taxpayerCode} {viewData.phone} {viewData.account} {viewData.head} {viewData.address} {viewData.bank} {viewData.attachment?.[0]?.url ? ( {viewData.attachment[0].name || '查看附件'} ) : ( '无' )} ) : (
Array.isArray(e) ? e : e?.fileList} rules={[{ required: true }]} >
)}
); }; export default InvoiceFormModal;