ApplyForInvoicingModal.tsx 5.47 KB
import { RESPONSE_CODE } from '@/constants/enum';
import {
  postServiceOrderApplyInvoicing,
  postServiceOrderMergeApplyInvoicing,
} from '@/services';
import { enumToSelect, getAliYunOSSFileNameFromUrl } from '@/utils';
import {
  ModalForm,
  ProFormSelect,
  ProFormTextArea,
  ProFormUploadDragger,
} from '@ant-design/pro-components';
import { Form, message } from 'antd';
import { cloneDeep } from 'lodash';
import { PAYEE_OPTIONS } from '../constant';
export default ({
  setCheckVisible,
  isEdit,
  data,
  subOrders,
  isMainOrder,
  onClose,
}) => {
  let ids = [];
  let newSubOrder = {};
  let sumPrice = 0;

  for (let order of subOrders) {
    sumPrice += parseFloat(order.totalPayment);
  }

  /**
   * isMainOrder:合并申请开票  data是选中的主订单id集合
   * isEdit:编辑备注 subOrders为申请开票的子订单集合
   * !isMainOrder&&!isEdit:订单申请开票 subOrders为申请开票的子订单集合
   */
  if (isMainOrder) {
    ids = data;
  } else {
    newSubOrder = cloneDeep(subOrders[0]);
    ids = subOrders?.map((item) => {
      sumPrice += parseFloat(item.totalPayment);
      return item.id;
    });
  }

  let newListAnnex = [];

  //回显,子订单可以编辑备注跟附件
  if (isEdit) {
    newSubOrder = cloneDeep(subOrders[0]);
    newListAnnex = newSubOrder.afterAnnexList?.map((path) => {
      let i = 0;
      return {
        uid: i++,
        name: getAliYunOSSFileNameFromUrl(path),
        status: 'uploaded',
        url: path,
        response: { data: [path] },
      };
    });
    newSubOrder.filePaths = newListAnnex;
  }

  //拼接主订单id
  if (isMainOrder) {
    console.log('in');
    newSubOrder.applyInvoicingNotes = ids.join(',');
  }

  const [form] = Form.useForm<{
    applyInvoicingNotes: string;
    filePaths: any;
    subIds: any[];
    afterInvoicingUpdate: boolean;
    receivingCompany: string;
  }>();

  /**
   * 如果不是预付款的订单,并且付款公司未选中,那么默认选[任意]
   */
  let paymentMethod = subOrders[0].paymentMethod;
  let receivingCompany = subOrders[0].receivingCompany;
  if (
    paymentMethod !== 'PAYMENT_IN_ADVANCE' &&
    (receivingCompany === null || receivingCompany === undefined)
  ) {
    form.setFieldValue('receivingCompany', 'ANY');
  }

  return (
    <ModalForm<{
      applyInvoicingNotes: string;
      filePaths: any;
      subIds: any[];
      afterInvoicingUpdate: boolean;
    }>
      width={500}
      open
      title={isEdit ? '修改信息' : '申请开票'}
      initialValues={newSubOrder}
      form={form}
      autoFocusFirstInput
      modalProps={{
        okText: '确认',
        cancelText: '取消',
        destroyOnClose: true,
        onCancel: () => {
          setCheckVisible(false);
        },
      }}
      submitter={{
        render: (props, defaultDoms) => {
          return defaultDoms;
        },
      }}
      submitTimeout={2000}
      onFinish={async (values) => {
        values.subIds = ids;
        //附件处理
        values.filePaths = values.filePaths?.map((item) => {
          return { url: item.response.data[0] };
        });

        if (isMainOrder) {
          const res = await postServiceOrderMergeApplyInvoicing({
            data: {
              ...values,
              mainOrderIds: ids,
            },
          });
          if (res.result === RESPONSE_CODE.SUCCESS) {
            message.success(res.message);
            onClose();
          }
        } else {
          if (isEdit) {
            values.afterInvoicingUpdate = true;
          } else {
            values.afterInvoicingUpdate = false;
          }

          const res = await postServiceOrderApplyInvoicing({ data: values });

          if (res.result === RESPONSE_CODE.SUCCESS) {
            message.success(res.message);
            onClose();
          }
        }
      }}
      onOpenChange={setCheckVisible}
    >
      {isMainOrder ? (
        <div className="mb-[24px]">
          <span>总订单金额:</span>
          <span className="text-red-500">{sumPrice}¥</span>
        </div>
      ) : (
        ''
      )}

      <div className="mb-1">
        如果需要合并订单,请将需要合并的订单id写在备注中,id之间用英文逗号隔开。
      </div>
      <ProFormTextArea
        width="lg"
        name="applyInvoicingNotes"
        placeholder="请输入备注"
      />
      <ProFormSelect
        placeholder="选择收款单位"
        name="receivingCompany"
        width="lg"
        key="receivingCompany"
        label={
          <div>
            <span>开票收款单位</span>
            <span className="pl-2 text-xs text-gray-400">
              财务开票将依据这个字段,选择对应的公司开票(若对[收款单位]没有要求,请任意选择一个)
            </span>
          </div>
        }
        options={enumToSelect(PAYEE_OPTIONS)}
        rules={[{ required: true, message: '开票收款单位必填' }]}
      />
      <ProFormUploadDragger
        key="2"
        label={
          <div>
            <span>开票明细确认表</span>
            <span className="pl-2 text-xs text-gray-400">
              如果开票信息有变更,如开票内容跟下单内容不一致、下单抬头和付款抬头不一致,请上传开票明细确认表。
            </span>
          </div>
        }
        name="filePaths"
        action="/api/service/order/fileProcess"
        fieldProps={{
          headers: { Authorization: localStorage.getItem('token') },
        }}
      />
    </ModalForm>
  );
};