供应商退出、准入、 工作台
This commit is contained in:
227
src/components/CompanyInfo/component/InvoiceFormModal.tsx
Normal file
227
src/components/CompanyInfo/component/InvoiceFormModal.tsx
Normal file
@ -0,0 +1,227 @@
|
||||
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 moment from 'moment';
|
||||
interface props {
|
||||
visible: boolean;
|
||||
onOk: () => void;
|
||||
onCancel: () => void;
|
||||
initialValues?: any;
|
||||
readOnly?: boolean;
|
||||
}
|
||||
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<props> = ({
|
||||
visible,
|
||||
onOk,
|
||||
onCancel,
|
||||
initialValues,
|
||||
readOnly = false,
|
||||
}) => {
|
||||
// 新增与修改
|
||||
const [form] = Form.useForm();
|
||||
//查看
|
||||
const [viewData, setViewData] = useState<viewDataData>({});
|
||||
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 才重置
|
||||
}
|
||||
}
|
||||
}, [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": "9c12e8ea-a681-4184-81ba-5fa276299a00",
|
||||
};
|
||||
|
||||
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,
|
||||
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 (
|
||||
<Modal
|
||||
title={readOnly ? '查看' : initialValues ? '修改' : '新增'}
|
||||
visible={visible}
|
||||
onCancel={onCancel}
|
||||
onOk={readOnly ? onCancel : handleFinish}
|
||||
footer={readOnly ? null : undefined}
|
||||
destroyOnClose
|
||||
width={600}
|
||||
>
|
||||
{readOnly ? (
|
||||
<Descriptions
|
||||
column={1}
|
||||
bordered
|
||||
size="middle"
|
||||
labelStyle={{ width: 160 }}
|
||||
>
|
||||
<Descriptions.Item label="纳税人类型">{viewData.taxpayerType}</Descriptions.Item>
|
||||
<Descriptions.Item label="纳税人识别号">{viewData.taxpayerCode}</Descriptions.Item>
|
||||
<Descriptions.Item label="开票电话">{viewData.phone}</Descriptions.Item>
|
||||
<Descriptions.Item label="开户行账号">{viewData.account}</Descriptions.Item>
|
||||
<Descriptions.Item label="开票抬头">{viewData.head}</Descriptions.Item>
|
||||
<Descriptions.Item label="开票地址">{viewData.address}</Descriptions.Item>
|
||||
<Descriptions.Item label="开票开户行">{viewData.bank}</Descriptions.Item>
|
||||
<Descriptions.Item label="一般纳税人资格证明">
|
||||
{viewData.attachment?.[0]?.url ? (
|
||||
<a href={viewData.attachment[0].url} target="_blank" rel="noopener noreferrer">
|
||||
{viewData.attachment[0].name || '查看附件'}
|
||||
</a>
|
||||
) : (
|
||||
'无'
|
||||
)}
|
||||
</Descriptions.Item>
|
||||
</Descriptions>
|
||||
) : (<Form
|
||||
form={form}
|
||||
labelCol={{ flex: '140px' }}
|
||||
wrapperCol={{ flex: 1 }}
|
||||
>
|
||||
<Form.Item name="id" noStyle>
|
||||
<Input type="hidden" />
|
||||
</Form.Item>
|
||||
<Row gutter={24}>
|
||||
<Col span={24}>
|
||||
<Form.Item name="taxpayerType" label="纳税人类型" rules={[{ required: true }]}>
|
||||
<Select options={[{ label: '一般纳税人', value: '一般纳税人' }, { label: '小规模纳税人', value: '小规模纳税人' }]} />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={24}>
|
||||
<Form.Item name="taxpayerCode" label="纳税人识别号" rules={[{ required: true }]}>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={24}>
|
||||
<Form.Item name="phone" label="开票电话" rules={[{ required: true }]}>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={24}>
|
||||
<Form.Item name="account" label="开户行账号" rules={[{ required: true }]}>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={24}>
|
||||
<Form.Item name="head" label="开票抬头" rules={[{ required: true }]}>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={24}>
|
||||
<Form.Item name="address" label="开票地址" rules={[{ required: true }]}>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={24}>
|
||||
<Form.Item name="bank" label="开票开户行" rules={[{ required: true }]}>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={24}>
|
||||
<Form.Item
|
||||
name="attachment"
|
||||
label="一般纳税人资格证明"
|
||||
valuePropName="fileList"
|
||||
getValueFromEvent={(e) => Array.isArray(e) ? e : e?.fileList}
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Upload {...uploadProps} maxCount={1}>
|
||||
<Button icon={<UploadOutlined />}>上传</Button>
|
||||
</Upload>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
</Form>)}
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default InvoiceFormModal;
|
Reference in New Issue
Block a user