system-copyright-react/src/components/invoice/info/InvoiceInfoList.tsx
2025-04-02 15:30:55 +08:00

291 lines
11 KiB
TypeScript

import { Empty,Button, Flex, Modal, Popconfirm, Space, Table, TableProps } from "antd";
import { DeleteOutlined, EditOutlined, PlusOutlined } from "@ant-design/icons";
import useMessage from "antd/es/message/useMessage";
import { useEffect, useRef, useState, useContext } from "react";
// import { del, get } from "../../../util/AjaxUtils.ts";
// import { IListPage } from "../../../interfaces/listpage/IListPage.ts";
import InvoiceInfoSave from "./InvoiceInfoSave.tsx";
import InvoiceInfoEdit from "./InvoiceInfoEdit.tsx";
import { getInvoiceList, deleteInvoiceInfo } from '../../../request/api.ts'
import { GlobalContext } from "../../../context/GlobalContext.ts";
type DataType = {
invoiceName: string;
invoiceNumber: string;
invoiceOrgaddress: string;
invoiceOrgtel: string;
invoiceBank: string;
invoiceBanknumber: string;
invoiceId: string;
}
interface ListProps {
handleOk: (selectedInvoice: DataType) => void;
handleCancel: () => void;
}
export default function InvoiceInfoList(props: ListProps) {
const [messageApi, messageContext] = useMessage();
const [isInvoiceInfoSaveOpen, setIsInvoiceInfoSaveOpen] = useState(false);
const [isInvoiceInfoEditOpen, setIsInvoiceInfoEditOpen] = useState(false);
const [page, setPage] = useState(1);
const [total, setTotal] = useState(0);
const [dataArray, setDataArray] = useState<DataType[]>([]);
const editInvoiceInfoId = useRef('');
const selectedInvoice = useRef<DataType | null>(null);
const columns: TableProps<DataType>['columns'] = [
{
title: '公司名称',
dataIndex: 'invoiceName',
align: 'center',
width: 180,
fixed: 'left'
},
{
title: '纳税人识别号',
dataIndex: 'invoiceNumber',
align: 'center',
width: 180
},
{
title: '公司地址',
dataIndex: 'invoiceOrgaddress',
align: 'center',
width: 180
},
{
title: '联系电话',
dataIndex: 'invoiceOrgtel',
align: 'center',
width: 180
},
// {
// title: '开户行',
// dataIndex: 'invoiceBank',
// align: 'center',
// width: 180
// },
// {
// title: '开户行账号',
// dataIndex: 'invoiceBanknumber',
// align: 'center',
// width: 180
// },
{
title: '操作',
dataIndex: 'option',
align: 'center',
width: 100,
// fixed: 'right',
render: (_value, record) => {
return (
<Space size={5}>
<Button type="primary" size="small" onClick={() => {
editInvoiceInfoId.current = record.invoiceId;
setIsInvoiceInfoEditOpen(true);
}}><EditOutlined /></Button>
<Popconfirm
placement="right"
title={false}
description="确定删除吗?"
okText="确定"
cancelText="取消"
onConfirm={() => {
deleteInvoice(record.invoiceId);
// del<any>({
// messageApi,
// url: `/api/invoice-info/remove/${record.invoiceId}`,
// onSuccess() {
// messageApi.success('删除成功');
// getData();
// }
// })
}}
>
<Button type="primary" size="small" danger><DeleteOutlined /></Button>
</Popconfirm>
</Space>
)
}
},
]
const globalContext = useContext(GlobalContext);
const getData = async () => {
try {
const res: any = await getInvoiceList(globalContext.user.userId, { page: page, rows: 20 })
// console.log(res);
setTotal(res.total)
setDataArray(res.rows)
} catch (error: any) {
if (error.response) {
const data = error.response.data;
messageApi.open({
type: 'error',
content: data.msg ? data.msg : `${data.path}(${data.status})`,
});
} else {
console.error(error)
}
}
// get<IListPage<DataType>>({
// messageApi,
// url: '/api/invoice-info/listpage/self',
// config: {
// params: {
// page: page,
// rows: 20
// }
// },
// onSuccess({data}) {
// setPage(data.page);
// setTotal(data.total);
// setDataArray(data.rows);
// }
// })
}
const deleteInvoice = async (id: string) => {
try {
await deleteInvoiceInfo(id)
// console.log(res);
messageApi.success('删除成功');
getData();
} catch (error: any) {
if (error.response) {
const data = error.response.data;
messageApi.open({
type: 'error',
content: data.msg ? data.msg : `${data.path}(${data.status})`,
});
} else {
console.error(error)
}
}
}
useEffect(() => {
getData();
}, [page]);
return (
<>
<div className="invoice-list-container">
<div className="mod-list">
<div className="table-btn-group" style={{ marginBottom: '15px' }}>
<Button value="small" onClick={() => {
setIsInvoiceInfoSaveOpen(true);
}}><PlusOutlined /> </Button>
</div>
{dataArray.length > 0
? <>
<Table
rowSelection={
{
type: 'radio',
onChange: (_selectedRowKeys, selectedRows) => {
selectedInvoice.current = selectedRows[0];
},
}
}
columns={columns} dataSource={dataArray} pagination={
{
pageSize: 20,
total: total,
onChange: (currentPage) => {
setPage(currentPage);
}
}
} scroll={{ y: 500 }} bordered key="dataTable" rowKey="invoiceId"
/>
</> :
<>
<div style={{
width: '100%', height: '200px', display: 'flex', justifyContent: 'center', alignItems: 'center', fontSize: '20px'
}}>
<Empty description='暂无开票信息,请添加' />
</div>
</>
}
{/* <Table
rowSelection={
{
type: 'radio',
onChange: (_selectedRowKeys, selectedRows) => {
selectedInvoice.current = selectedRows[0];
},
}
}
columns={columns} dataSource={dataArray} pagination={
{
pageSize: 20,
total: total,
onChange: (currentPage) => {
setPage(currentPage);
}
}
} scroll={{ y: 500 }} bordered key="dataTable" rowKey="invoiceId"
/> */}
</div>
<Flex justify="center">
<Space size={5}>
<Button type="primary"
style={{ backgroundColor: 'var(--color-primary)' }}
onClick={() => {
if (!selectedInvoice.current) {
messageApi.error('请选择开票信息');
return;
}
props.handleOk(selectedInvoice.current);
}}
></Button>
<Button type="default" onClick={() => {
props.handleCancel();
}}></Button>
</Space>
</Flex>
</div>
<Modal open={isInvoiceInfoSaveOpen}
title="新增"
footer={false}
onCancel={() => {
setIsInvoiceInfoSaveOpen(false)
}}
destroyOnClose
>
<InvoiceInfoSave
handleOk={() => {
getData();
setIsInvoiceInfoSaveOpen(false);
}}
handleCancel={() => {
setIsInvoiceInfoSaveOpen(false);
}}
/>
</Modal>
<Modal open={isInvoiceInfoEditOpen}
title="编辑"
footer={false}
onCancel={() => {
setIsInvoiceInfoEditOpen(false)
}}
>
<InvoiceInfoEdit
invoiceId={editInvoiceInfoId.current}
handleOk={() => {
getData();
setIsInvoiceInfoEditOpen(false);
}}
handleCancel={() => {
setIsInvoiceInfoEditOpen(false);
}}
/>
</Modal>
{messageContext}
</>
);
}