OrderPrintModal.tsx 2.92 KB
import { RESPONSE_CODE } from '@/constants/enum';
import '@/pages/OrderPrint/index.less';
import { postServiceOrderPrintOrder } from '@/services';
import { ExclamationCircleFilled } from '@ant-design/icons';
import { Modal, Select, Space, message } from 'antd';
import printJS from 'print-js';
import { useState } from 'react';
import { printerCSS } from './PrinterCSS';
import DalangPrinter from './components/DalangPrinter';
import HoujiePrinter from './components/HoujiePrinter';
import ZhuguangPrinter from './components/ZhuguangPrinter';

export default ({ mainOrder, subOrders, isRePrint, onClose }) => {
  const [printerType, setPrinterType] = useState('Houjie');
  const { confirm } = Modal;
  const handleChange = (value: string) => {
    setPrinterType(value);
  };
  const showPropsConfirm = () => {
    if (isRePrint) {
      return;
    }
    confirm({
      title: '确认打印出货单',
      icon: <ExclamationCircleFilled />,
      content: '您是否已打印出货单?',
      okText: '是的我已打印',
      okType: 'primary',
      okButtonProps: {},
      cancelText: '取消',
      async onOk() {
        let body = {
          subIds: subOrders.map((item) => {
            return item.id;
          }),
        };
        const res = await postServiceOrderPrintOrder({ data: body });
        if (res.result === RESPONSE_CODE.SUCCESS) {
          message.success(res.message);
          onClose();
        }
      },
      onCancel() {
        message.info('取消打印出货单');
      },
    });
  };

  return (
    <Modal
      title="打印出货单"
      centered
      open
      onOk={() => {
        //printJS打印出货单
        printJS({
          printable: 'printArea', // 元素id,不支持多个
          scanStyles: false,
          type: 'html',
          targetStyle: ['* '],
          targetStyles: ['*'],
          style: printerCSS(),
          onPrintDialogClose: () => {
            showPropsConfirm();
          },
        });

        // onClose();
      }}
      onCancel={() => onClose()}
      width={1000}
    >
      <Space direction="vertical" className="py-2">
        <span>打印类型</span>
        <Select
          defaultValue="Houjie"
          style={{ width: 'auto' }}
          onChange={handleChange}
          options={[
            { value: 'Houjie', label: '科路得出货单-厚街' },
            { value: 'Dalang', label: '科路得出货单-大朗' },
            { value: 'Zhuguang', label: '烛光出货单' },
          ]}
        />
      </Space>

      {printerType === 'Houjie' ? (
        <HoujiePrinter mainOrder={mainOrder} subOrders={subOrders} />
      ) : (
        ''
      )}

      {printerType === 'Zhuguang' ? (
        <ZhuguangPrinter mainOrder={mainOrder} subOrders={subOrders} />
      ) : (
        ''
      )}

      {printerType === 'Dalang' ? (
        <DalangPrinter mainOrder={mainOrder} subOrders={subOrders} />
      ) : (
        ''
      )}
    </Modal>
  );
};