InvoiceVerificationModal.tsx 4.66 KB
import { INVOCING_STATUS, PAYEE_OPTIONS } from '@/pages/Order/constant';
import { postServiceInvoiceQueryInvoiceDetail } from '@/services';
import { enumValueToLabel } from '@/utils';
import { formatDate } from '@/utils/time';
import { ActionType, ModalForm, ProCard } from '@ant-design/pro-components';
import {
  Button,
  Descriptions,
  DescriptionsProps,
  Divider,
  Flex,
  Form,
} from 'antd';
import { useEffect, useRef, useState } from 'react';
import { INVOICE_STATUS } from '../../constant';
import '../index.less';
import BankChooseModal from './BankChooseModal';

export default ({ invoiceId, setVisible, onClose }) => {
  const [form] = Form.useForm<{ id: string }>();
  const [bankChooseModalVisible, setBankChooseModalVisible] = useState(false);
  const [invoiceInfo, setInvoiceInfo] = useState({});
  const [relationOrderIds, setRelationOrderIds] = useState([]);
  const [setRelationBankStatements] = useState([]);
  const actionRef = useRef<ActionType>();

  const loadInvoiceData = async () => {
    let res = await postServiceInvoiceQueryInvoiceDetail({
      data: { invoiceId: invoiceId },
    });
    if (res && res.data) {
      setInvoiceInfo(res.data);
      setRelationOrderIds(res.data.mainOrderIds);
      console.log('bs:' + res.data.bankStatementDtos);
      setRelationBankStatements(res.data.bankStatementDtos);
    }
  };

  const showRelationOrders = () => {
    return relationOrderIds?.map((item) => {
      return (
        <>
          <Button
            className="pl-1 pr-0"
            type="link"
            target="_blank"
            href={'/order/order?id=' + item}
          >
            {item}
          </Button>
          <Divider type="vertical" />
        </>
      );
    });
  };

  const items: DescriptionsProps['items'] = [
    {
      key: '1',
      label: '发票号码',
      children: invoiceInfo?.invoiceNumber,
      span: 6,
    },
    {
      key: '2',
      label: '发票类型',
      children: enumValueToLabel(invoiceInfo?.invoiceStatus, INVOCING_STATUS),
      span: 6,
    },
    {
      key: '3',
      label: '状态',
      children: enumValueToLabel(invoiceInfo?.status, INVOICE_STATUS),
      span: 4,
    },
    {
      key: '4',
      label: '购买方',
      children: invoiceInfo?.purchaser,
      span: 8,
    },
    {
      key: '5',
      label: '收款单位',
      children: enumValueToLabel(invoiceInfo?.payee, PAYEE_OPTIONS),
      span: 12,
    },
    {
      key: '6',
      label: '联系人',
      children: invoiceInfo?.contacts,
      span: 4,
    },
    {
      key: '7',
      label: '销售',
      children: invoiceInfo?.sale,
      span: 8,
    },

    {
      key: '9',
      label: '开票日期',
      children: formatDate(invoiceInfo?.invoicingTime),
      span: 12,
    },
    {
      key: '10',
      label: '收款时间',
      children: formatDate(invoiceInfo?.collectionTime),
      span: 4,
    },
    {
      key: '8',
      label: '金额',
      children: invoiceInfo?.money,
      span: 10,
    },
    {
      key: '11',
      label: '备注',
      children: invoiceInfo?.notes,
      span: 24,
    },
  ];

  useEffect(() => {
    loadInvoiceData();
  }, []);

  return (
    <>
      <ModalForm<{
        id: string;
      }>
        className="invoice-detail"
        open
        width="80%"
        title="发票详情"
        form={form}
        autoFocusFirstInput
        modalProps={{
          okText: '确定',
          cancelText: '返回',
          destroyOnClose: true,
          onCancel: () => {
            setVisible(false);
            onClose();
          },
        }}
        submitter={{
          render: (props, defaultDoms) => {
            return [defaultDoms[0]];
          },
        }}
        onFinish={async () => {
          onClose();
        }}
        onOpenChange={setVisible}
      >
        <Divider orientation="left" plain>
          发票信息
        </Divider>

        <Descriptions
          bordered
          column={24}
          size="small"
          title=""
          items={items}
        />

        <Divider orientation="left" plain>
          订单号
        </Divider>

        <ProCard bordered style={{}}>
          <Flex>
            <div>{showRelationOrders()}</div>
          </Flex>
        </ProCard>

        <Divider plain></Divider>
      </ModalForm>

      {bankChooseModalVisible ? (
        <BankChooseModal
          loadInvoiceData={loadInvoiceData}
          setVisible={setBankChooseModalVisible}
          invoiceId={invoiceId}
          onClose={() => {
            setBankChooseModalVisible(false);
            loadInvoiceData();
            actionRef.current?.reload();
          }}
        ></BankChooseModal>
      ) : (
        ''
      )}
    </>
  );
};