import ButtonConfirm from '@/components/ButtomConfirm';
import { RESPONSE_CODE } from '@/constants/enum';
import {
  postServiceOrderOrderCancel,
  postServiceOrderQueryServiceOrder,
} from '@/services';
import { orderExport } from '@/services/order';
import { enumValueToLabel, formatDateTime } from '@/utils';
import {
  ClockCircleTwoTone,
  ContainerTwoTone,
  CopyTwoTone,
  DownOutlined,
  EditTwoTone,
  EllipsisOutlined,
} from '@ant-design/icons';
import {
  PageContainer,
  ProColumns,
  ProTable,
} from '@ant-design/pro-components';
import { history } from '@umijs/max';
import {
  Avatar,
  Button,
  Checkbox,
  Divider,
  Dropdown,
  Flex,
  MenuProps,
  Space,
  Tag,
  message,
} from 'antd';
import { cloneDeep } from 'lodash';
import { Key, useRef, useState } from 'react';
import OrderPrintModal from '../OrderPrint/OrderPrintModal';
import AttachmentModal from './components/AttachmentModal';
import CheckModal from './components/CheckModal';
import ConfirmReceiptModal from './components/ConfirmReceiptModal';
import DeliverInfoDrawer from './components/DeliverInfoDrawer';
import DeliverModal from './components/DeliverModal';
import FinancialDrawer from './components/FinancialDrawer';
import HistoryModal from './components/HistoryModal';
import ImportModal from './components/ImportModal';
import OrderDrawer from './components/OrderDrawer';
import OrderNotesEditModal from './components/OrderNotesEditModal';
import SubOrderComfirmReceiptImagesModal from './components/SubOrderComfirmReceiptImagesModal';
import {
  MAIN_ORDER_COLUMNS,
  ORDER_STATUS_OPTIONS,
  PAYMENT_CHANNEL_OPTIONS,
  PAYMENT_METHOD_OPTIONS,
  PRODUCT_BELONG_DEPARTMENT_OPTIONS,
  TAGS_COLOR,
  getInvoicingType,
  getNeedInvoicing,
} from './constant';
import './index.less';
import { OrderListItemType, OrderType } from './type.d';

const OrderPage = () => {
  const [orderDrawerVisible, setOrderDrawerVisible] = useState<boolean>(false);
  const [checkVisible, setCheckVisible] = useState<boolean>(false);
  const [orderPrintVisible, setOrderPrintVisible] = useState<boolean>(false);
  const [
    subOrderConfirmReceiptImagesVisible,
    setSubOrderConfirmReceiptImagesVisible,
  ] = useState<boolean>(false);
  const [notesEditVisible, setNotesEditVisible] = useState<boolean>(false);
  const [attachmentModalVisible, setAttachmentModalVisible] =
    useState<boolean>(false);
  const [financialVisible, setFinancialVisible] = useState<boolean>(false);
  const [historyModalVisible, setHistoryModalVisible] =
    useState<boolean>(false);
  const [isRePrintOrder, setIsRePrintOrder] = useState<boolean>(false);
  const [isSendProduct, setIsSendProduct] = useState<boolean>(false);
  const [isMainOrder, setIsMainOrder] = useState<boolean>(false);
  const [importModalVisible, setImportModalVisible] = useState<boolean>(false);
  const [confirmReceiptVisible, setConfirmReceiptVisible] =
    useState<boolean>(false);
  const [deliverVisible, setDeliverVisible] = useState<boolean>(false);
  const [deliverInfoDrawerVisible, setDeliverInfoDrawerVisible] =
    useState<boolean>(false);
  const [orderOptType, setOrderOptType] = useState<string>('');
  const [isFinalcialEdit, setIsFinalcialEdit] = useState<boolean>(false);
  const [expandedRowKeys, setExpandedRowKeys] = useState<Key[]>([]);
  const [orderRow, setOrderRow] = useState<Partial<OrderType>>({});
  const [mainOrderAllItemKeys, setMainOrderAllItemKeys] = useState([]);
  const [rolePath, setRolePath] = useState([]); //当前角色权限(新增跟打印按钮)
  const userInfo = JSON.parse(localStorage.getItem('userInfo'));
  // const [tableHeight, setTableHeight] = useState(200);
  const [selectedRows, setSelectedRows] = useState({});
  const [selectedRowObj, setSelectedRowObj] = useState({});
  const [selectedItems, setSelectedItems] = useState([]);
  const [selectedRowKeys, setSelectedRowKeys] = useState([]);
  const [pageSize, setPageSize] = useState(10);
  const [currentPage, setCurrentPage] = useState(1);
  const mainTableRef = useRef();
  const [messageApi, contextHolder] = message.useMessage();

  // const openCheckNotes = (checkNotes: string) => {
  //   Modal.info({
  //     title: '驳回备注',
  //     content: (
  //       <div>
  //         <p>{checkNotes}</p>
  //       </div>
  //     ),
  //     onOk() { },
  //   });
  // };

  const exportLoading = () => {
    messageApi.open({
      type: 'loading',
      content: '正在导出文件...',
      duration: 0,
    });
  };

  const exportLoadingDestory = () => {
    messageApi.destroy();
  };

  const refreshTable = () => {
    mainTableRef.current?.reload();
    //刷新表格数据的时候,取消选中行
    setSelectedRowObj([]);
    setSelectedRows([]);
    setSelectedRowKeys([]);
  };

  // const resize = () => {
  //   // 计算元素底部到视口顶部的距离
  //   let bottomDistance = document
  //     .getElementById('mainTable')
  //     ?.getElementsByClassName('ant-table-thead')[0]
  //     .getBoundingClientRect().bottom;
  //   // 获取屏幕高度
  //   let screenHeight =
  //     window.innerHeight || document.documentElement.clientHeight;

  //   // 计算元素底部到屏幕底部的距离
  //   let bottomToScreenBottomDistance = screenHeight - bottomDistance;

  //   // //底部分页元素的高度
  //   // var pH = screenHeight - document.getElementById("main-table").getElementsByClassName('ant-table-body')[0].getBoundingClientRect().bottom;

  //   setTableHeight(bottomToScreenBottomDistance - 88);
  // };

  // useEffect(() => {
  //   resize();
  //   // 添加事件监听器,当窗口大小改变时调用resize方法
  //   window.addEventListener('resize', resize);
  // });

  const onCheckboxChange = (itemKey: never) => {
    const newSelectedItems = selectedItems.includes(itemKey)
      ? selectedItems.filter((key) => key !== itemKey)
      : [...selectedItems, itemKey];

    setSelectedItems(newSelectedItems);
  };
  const handleTableExpand = (mainOrderIds: any) => {
    setExpandedRowKeys(mainOrderIds);
  };

  //表头渲染
  const OrderTableHeader = () => {
    return (
      <Flex className="w-full">
        <Flex className="w-[29%] ml-[4%]">
          <span className="font-medium">商品信息</span>
        </Flex>
        <Flex className="w-[16%]">
          <span className="font-medium">交易金额</span>
        </Flex>
        <Flex className="w-[10%]">
          <span className="font-medium">支付</span>
        </Flex>
        <Flex className="w-[14%]">
          <span className="font-medium">其他</span>
        </Flex>
        <Flex className="w-[10%]">
          <span className="font-medium">交易状态</span>
        </Flex>
        <Flex className="w-[17%]">
          <span className="font-medium">操作</span>
        </Flex>
      </Flex>
    );
  };
  //子订单内容渲染
  const SubOderRander = ({ record, optRecord }) => {
    return (
      <Flex className="w-full border-b-indigo-500">
        <Flex vertical className="w-[31%]" gap="small">
          {/* 商品名称 */}
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <span className="text-black font-medium ">
              {optRecord.productName}
            </span>
          </div>
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <span className="text-[#8C8C8C]">参数:{optRecord.parameters}</span>
          </div>
          <Flex title={optRecord.notes}>
            <div className="max-w-[90%] whitespace-no-wrap overflow-hidden overflow-ellipsis">
              <span className="text-[#8C8C8C]">
                备注:
                {optRecord.notes === undefined ? '暂无备注' : optRecord.notes}
              </span>
            </div>
            {/* 编辑备注按钮 */}
            <EditTwoTone
              onClick={() => {
                setNotesEditVisible(true);
                setOrderRow(optRecord);
                setIsMainOrder(false);
              }}
            />
          </Flex>
        </Flex>
        <Flex className="w-[16%]" vertical gap="small">
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <span className="text-[#8C8C8C]">单价:</span>
            <span className="text-slate-700">¥{optRecord.productPrice}</span>
          </div>
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <span className="text-[#8C8C8C]">数量:</span>
            <span className="text-slate-700">x{optRecord.quantity}</span>
          </div>
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <span className="text-[#8C8C8C]">合计:</span>
            <span className="text-slate-700">
              ¥{optRecord.subOrderPayment}
            </span>
          </div>
        </Flex>
        <Flex className="w-[10%]" vertical gap="small">
          {/* 支付方式 */}
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <span className="text-slate-700">
              {enumValueToLabel(
                optRecord.paymentMethod,
                PAYMENT_METHOD_OPTIONS,
              )}
            </span>
          </div>
          {/* 支付渠道 */}
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <span className="text-slate-700">
              {enumValueToLabel(
                optRecord.paymentChannel,
                PAYMENT_CHANNEL_OPTIONS,
              )}
            </span>
          </div>
        </Flex>
        <Flex className="w-[15%]" vertical gap="small">
          {/* 所属部门 */}
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <span className="text-slate-700">
              {enumValueToLabel(
                optRecord.productBelongBusiness,
                PRODUCT_BELONG_DEPARTMENT_OPTIONS,
              )}
            </span>
          </div>

          {/* 开票类型 */}
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <span className="text-slate-700">
              {getInvoicingType(optRecord)}
            </span>
          </div>
        </Flex>

        <Flex className="w-[10%]" vertical gap="small">
          {/* 开票状态 */}
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <Tag
              color={
                optRecord.invoicingTime === undefined
                  ? TAGS_COLOR.get(optRecord.invoicingStatus)
                  : 'success'
              }
            >
              {getNeedInvoicing(optRecord)}
            </Tag>
          </div>
          {/* 订单状态 */}
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <Tag color={TAGS_COLOR.get(optRecord.orderStatus)}>
              {enumValueToLabel(optRecord.orderStatus, ORDER_STATUS_OPTIONS)}
            </Tag>
          </div>

          {/* 物流信息 */}
          <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
            <Button type="link" size="small" className="px-0">
              物流信息
            </Button>
          </div>
        </Flex>
        <Flex className="w-[18%]" wrap="wrap" gap="small">
          {optRecord.subPath.includes('sendProduct') ? (
            <Button
              className="p-0"
              type="link"
              onClick={() => {
                optRecord.mainOrderId = record.id;
                setSelectedRows([cloneDeep(optRecord)]); //克隆一份数据,避免后续修改污染
                setDeliverVisible(true);
                setIsSendProduct(true);
              }}
            >
              发货
            </Button>
          ) : (
            ''
          )}

          {optRecord.subPath.includes('queryAnnex') ? (
            <Button
              className="p-0"
              type="link"
              onClick={() => {
                optRecord.mainOrderId = record.id;
                setAttachmentModalVisible(true);
                setOrderRow(optRecord);
              }}
            >
              附件
            </Button>
          ) : (
            ''
          )}

          {optRecord.subPath.includes('orderCancel') ? (
            <ButtonConfirm
              className="p-0"
              title="确认作废?"
              text="作废"
              onConfirm={async () => {
                let body = { ids: [optRecord.id], checkIsMainOrderId: false };
                const data = await postServiceOrderOrderCancel({
                  data: body,
                });
                if (data.result === RESPONSE_CODE.SUCCESS) {
                  message.success(data.message);
                  refreshTable();
                }
              }}
            />
          ) : (
            ''
          )}

          {optRecord.subPath.includes('modifySendInformation') ? (
            <Button
              className="p-0"
              type="link"
              onClick={() => {
                optRecord.mainOrderId = record.id;
                setSelectedRows([cloneDeep(optRecord)]); //克隆一份数据,避免后续修改污染
                setDeliverVisible(true);
                setIsSendProduct(false);
              }}
            >
              修改发货信息
            </Button>
          ) : (
            ''
          )}

          {optRecord.subPath.includes('printOrder') ? (
            <Button
              className="p-0"
              type="link"
              onClick={async () => {
                setOrderPrintVisible(true);
                setSelectedRows([optRecord]);
                setOrderRow(record);
              }}
            >
              打印
            </Button>
          ) : (
            ''
          )}
          {optRecord.subPath.includes('editOrder') ? (
            <Button
              className="p-0"
              type="link"
              onClick={() => {
                setFinancialVisible(true);
                setOrderRow(record);
                setSelectedRows([optRecord]);
                setIsFinalcialEdit(true);
              }}
            >
              编辑
            </Button>
          ) : (
            ''
          )}
          {optRecord.subPath.includes('invoicing') ? (
            <Button
              className="p-0"
              type="link"
              onClick={() => {
                setFinancialVisible(true);
                setIsFinalcialEdit(false);
                setOrderRow(record);
                setSelectedRows([optRecord]);
              }}
            >
              开票
            </Button>
          ) : (
            ''
          )}
          {optRecord.subPath.includes('checkOrder') ? (
            <Button
              className="p-0"
              type="link"
              onClick={() => {
                setOrderRow(optRecord);
                setCheckVisible(true);
                setSelectedRows([optRecord]);
              }}
            >
              审核
            </Button>
          ) : (
            ''
          )}

          {optRecord.subPath.includes('rePrintOrder') ? (
            <Button
              className="p-0"
              type="link"
              onClick={() => {
                setOrderPrintVisible(true);
                setSelectedRows([optRecord]);
                setOrderRow(record);
                setIsRePrintOrder(true);
              }}
            >
              重新打印
            </Button>
          ) : (
            ''
          )}

          {optRecord.subPath.includes('confirmReceipt') ? (
            <Button
              className="p-0"
              type="link"
              onClick={() => {
                setConfirmReceiptVisible(true);
                setOrderRow(optRecord);
              }}
            >
              确认收货
            </Button>
          ) : (
            ''
          )}
          {optRecord.subPath.includes('viewImages') ? (
            <Button
              className="p-0"
              type="link"
              onClick={() => {
                setSubOrderConfirmReceiptImagesVisible(true);
                setOrderRow(optRecord);
              }}
            >
              查看收货凭证
            </Button>
          ) : (
            ''
          )}
        </Flex>
      </Flex>
    );
  };
  const expandedRowRender = (record) => {
    let subOrders = record.subOrderInformationLists;

    return (
      <ProTable
        id="sub-table"
        className=" w-full"
        showHeader={false}
        columns={[
          {
            title: 'ID',
            dataIndex: 'id',
            key: 'id',
            render: (text: any, optRecord: any) => {
              return <SubOderRander record={record} optRecord={optRecord} />;
            },
          },
        ]}
        rowSelection={{
          onChange: (selectedRowKeys: any, selectedRows: any) => {
            setSelectedRowKeys(selectedRowKeys);
            setSelectedRowObj({
              ...setSelectedRowObj,
              [record.id]: selectedRows,
            });
            selectedRowObj[record.id] = selectedRows;
            setSelectedRows(selectedRows);
          },
          selectedRowKeys: selectedRowKeys,
          // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom
          // 注释该行则默认不显示下拉选项
          // selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],
          // defaultSelectedRowKeys: [],
        }}
        rowKey="id"
        headerTitle={false}
        search={false}
        options={false}
        dataSource={subOrders}
        pagination={false}
        tableAlertRender={false}
      />
    );
  };

  // 主订单内容渲染
  const MainOrderColumnRender = ({ record }: { record: OrderListItemType }) => {
    return (
      <Flex vertical={true}>
        {/* 编号、时间、销售信息 */}
        <Flex
          className="px-4 py-4 bg-white bg-white rounded-t-lg"
          justify="space-between"
        >
          <Flex wrap="wrap" gap="middle" vertical>
            <Flex>
              <Flex>
                <Checkbox
                  onChange={() => onCheckboxChange(record.id)}
                  checked={selectedItems.includes(record.id)}
                >
                  <Space split={<Divider type="vertical" />}>
                    <div>
                      <span className="text-[#8C8C8C]">订单号:</span>
                      <span className="text-slate-700">{record.id}</span>
                    </div>
                    <span>{formatDateTime(record.createTime)}</span>
                  </Space>
                </Checkbox>
                <Space split={<Divider type="vertical" />}>
                  <div>
                    <span className="text-[#8C8C8C]">代表:</span>
                    <span className="text-slate-700">{record.salesCode}</span>
                  </div>
                  <span>
                    <span className="text-[#8C8C8C]">单位:</span>
                    <span className="text-slate-700">{record.institution}</span>
                  </span>
                  <span>
                    <span className="text-[#8C8C8C]">联系人:</span>
                    <span className="text-slate-700">
                      {record.institutionContactName + ' '}
                      <ContainerTwoTone
                        className="hover:curcor-pointer"
                        onClick={() => {
                          setDeliverInfoDrawerVisible(true);
                          setOrderRow(record);
                        }}
                      />
                    </span>
                  </span>
                </Space>
              </Flex>
            </Flex>
            <Flex className="pl-6" align="center">
              <div title={record.notes}>
                <div className="max-w-md whitespace-no-wrap overflow-hidden overflow-ellipsis">
                  <span className="text-[#8C8C8C]">备注:</span>
                  <span className="ml-2">
                    {record.notes === undefined ? '暂无备注' : record.notes}
                  </span>
                </div>
              </div>
              <EditTwoTone
                className="hover:curcor-pointer"
                onClick={() => {
                  setNotesEditVisible(true);
                  setOrderRow(record);
                  setIsMainOrder(true);
                }}
              />
            </Flex>
          </Flex>
          <Flex wrap="wrap" gap="middle" vertical>
            <Flex justify="flex-end">
              <Flex wrap="wrap" gap="middle" align="center">
                <div>
                  <span className="text-[#8C8C8C]">总金额:¥</span>
                  <span className="text-lg font-medium">
                    {record.totalPayment}
                  </span>
                </div>
                {rolePath?.includes('addOrder') ? (
                  <CopyTwoTone
                    className="hover:cursor-pointer"
                    onClick={() => {
                      setOrderOptType('copy');
                      setOrderDrawerVisible(true);
                      let copy = cloneDeep(record);
                      copy.id = undefined;
                      copy.subOrderInformationLists?.forEach((item) => {
                        item.id = undefined;
                      });
                      setOrderRow(copy);
                    }}
                  />
                ) : (
                  ''
                )}

                <ClockCircleTwoTone
                  className="hover:cursor-pointer"
                  onClick={() => {
                    setHistoryModalVisible(true);
                    if (selectedRowObj[record.id]?.length) {
                      setSelectedRows(selectedRowObj[record.id]);
                    } else {
                      setSelectedRows(record.subOrderInformationLists);
                    }
                  }}
                />
              </Flex>
            </Flex>
            <Flex justify="flex-end">
              <Space.Compact direction="vertical" align="end">
                <Space>
                  {record.mainPath.includes('sendProduct') ? (
                    <Button
                      className="p-0"
                      type="link"
                      onClick={() => {
                        if (!selectedRowObj[record.id]?.length) {
                          return message.error('请选择选择子订单');
                        }
                        setSelectedRows(selectedRowObj[record.id]);
                        setDeliverVisible(true);
                        setIsSendProduct(true);
                      }}
                    >
                      发货
                    </Button>
                  ) : (
                    ''
                  )}
                  {record.mainPath.includes('printOrder') ? (
                    <Button
                      className="p-0"
                      type="link"
                      onClick={() => {
                        if (!selectedRowObj[record.id]?.length) {
                          return message.error('请选择选择子订单');
                        }
                        setSelectedRows(selectedRowObj[record.id]);
                        setOrderRow(record);
                        setOrderPrintVisible(true);
                      }}
                    >
                      打印
                    </Button>
                  ) : (
                    ''
                  )}
                  {record.mainPath.includes('rePrintOrder') ? (
                    <Button
                      className="p-0"
                      type="link"
                      onClick={() => {
                        if (!selectedRowObj[record.id]?.length) {
                          return message.error('请选择选择子订单');
                        }
                        setSelectedRows(selectedRowObj[record.id]);
                        setOrderRow(record);
                        setOrderPrintVisible(true);
                        setIsRePrintOrder(true);
                      }}
                    >
                      重新打印
                    </Button>
                  ) : (
                    ''
                  )}
                  {record.mainPath.includes('modifySendInformation') ? (
                    <Button
                      className="p-0"
                      type="link"
                      onClick={() => {
                        if (!selectedRowObj[record.id]?.length) {
                          return message.error(
                            '请选择已经发货或者已经确认收货的子订单',
                          );
                        }
                        for (let row of selectedRowObj[record.id]) {
                          if (
                            row.orderStatus !== 'CONFIRM_RECEIPT' &&
                            row.orderStatus !== 'SHIPPED'
                          ) {
                            return message.error(
                              '请选择已经发货或者已经确认收货的子订单',
                            );
                          }
                        }
                        setSelectedRows(selectedRowObj[record.id]);
                        setDeliverVisible(true);
                        setIsSendProduct(false);
                      }}
                    >
                      修改发货信息
                    </Button>
                  ) : (
                    ''
                  )}
                  {record.mainPath.includes('invoicing') ? (
                    <Button
                      type="link"
                      className="p-0"
                      onClick={() => {
                        let selectedSubOrders = selectedRowObj[record.id];
                        setSelectedRows(selectedSubOrders);
                        if (selectedSubOrders === undefined) {
                          setSelectedRows(record.subOrderInformationLists);
                        }
                        setOrderRow(record);
                        setFinancialVisible(true);
                      }}
                    >
                      开票
                    </Button>
                  ) : (
                    ''
                  )}
                  {record.mainPath.includes('updateOrder') ? (
                    <Button
                      className="p-0"
                      type="link"
                      onClick={() => {
                        //勾选的子订单:如果有勾选,后面只校验有勾选的
                        let selectedSubOrders = selectedRowObj[record.id];
                        if (
                          selectedSubOrders === undefined ||
                          selectedSubOrders.length === 0
                        ) {
                          selectedSubOrders = record.subOrderInformationLists;
                        }
                        for (
                          let index = 0;
                          index < selectedSubOrders.length;
                          index++
                        ) {
                          let orderStatus =
                            selectedSubOrders[index].orderStatus;
                          //是审核通过及之后的订单
                          if (
                            orderStatus !== 'UNAUDITED' &&
                            orderStatus !== 'AUDIT_FAILED'
                          ) {
                            message.error(
                              '请选择未审核或者审核失败的订单进行编辑',
                            );
                            return;
                          }
                        }
                        setOrderDrawerVisible(true);
                        setOrderRow(record);
                        setSelectedRows(selectedSubOrders);
                        setOrderOptType('edit');
                      }}
                    >
                      编辑
                    </Button>
                  ) : (
                    ''
                  )}

                  {record.mainPath.includes('checkOrder') ? (
                    <Button
                      className="p-0"
                      type="link"
                      onClick={() => {
                        let selectedSubOrders = selectedRowObj[record.id];
                        setSelectedRows(selectedSubOrders);
                        if (selectedSubOrders === undefined) {
                          setSelectedRows(record.subOrderInformationLists);
                          console.log(
                            'subOrderInformationLists:' +
                              record.subOrderInformationLists,
                          );
                        }
                        for (let i = 0; i < selectedRows.length; i++) {
                          if (
                            selectedRows[i].orderStatus !== 'UNAUDITED' &&
                            selectedRows[i].orderStatus !== 'AUDIT_FAILED'
                          ) {
                            message.error(
                              '请选择未审核或者审核失败的子订单进行审核',
                            );
                            return;
                          }
                        }
                        setOrderRow(record);
                        setCheckVisible(true);
                      }}
                    >
                      审核
                    </Button>
                  ) : (
                    ''
                  )}

                  {record.mainPath.includes('orderCancel') ? (
                    <ButtonConfirm
                      className="p-0"
                      title="确认作废?"
                      text="作废"
                      onConfirm={async () => {
                        let body = {
                          ids: [record.id],
                          checkIsMainOrderId: true,
                        };
                        const data = await postServiceOrderOrderCancel({
                          data: body,
                        });
                        if (data.result === RESPONSE_CODE.SUCCESS) {
                          message.success(data.message);
                          refreshTable();
                        }
                      }}
                    />
                  ) : (
                    ''
                  )}
                </Space>
              </Space.Compact>
            </Flex>
          </Flex>
        </Flex>

        <Flex className="p-0 py-[24px] pl-[23px] pr-[5px] bg-white rounded-b-lg">
          {expandedRowRender(record)}
        </Flex>
      </Flex>
    );
  };

  // 主订单列表
  const mainOrdersColumns: ProColumns<OrderType>[] = MAIN_ORDER_COLUMNS.map(
    (item) => {
      if (item.dataIndex === 'name') {
        return {
          ...item,
          title: <OrderTableHeader />,
          render: (text, record) => {
            return <MainOrderColumnRender record={record} />;
          },
        };
      }
      return item;
    },
  );

  function toolBarRender() {
    let toolBtns = [];

    //导出按钮配置
    const items: MenuProps['items'] = [
      {
        label: '导出已选中订单',
        key: '1',
        onClick: async () => {
          if (selectedItems.length === 0) {
            message.error('请选择订单');
            return;
          }
          let body = { flag: 30, ids: selectedItems };
          exportLoading();
          orderExport('/api/service/order/export', body, exportLoadingDestory);
        },
      },
      {
        label: '导出当前页订单',
        key: '2',
        onClick: async () => {
          if (mainOrderAllItemKeys.length === 0) {
            message.error('当前没有订单');
            return;
          }
          let body = { flag: 20, ids: mainOrderAllItemKeys };
          exportLoading();
          orderExport('/api/service/order/export', body, exportLoadingDestory);
        },
      },
      {
        label: '导出所有订单',
        key: '3',
        onClick: async () => {
          let body = { flag: 10, ids: [] };
          exportLoading();
          orderExport('/api/service/order/export', body, exportLoadingDestory);
        },
      },
      {
        label: '导出当天订单',
        key: '4',
        onClick: async () => {
          let body = { flag: 40, ids: [] };
          exportLoading();
          orderExport('/api/service/order/export', body, exportLoadingDestory);
        },
      },
    ];

    const menuProps = {
      items,
      onClick: () => {},
    };

    if (rolePath?.includes('addOrder')) {
      toolBtns.push(
        <Button
          type="primary"
          key="out"
          onClick={() => {
            setOrderDrawerVisible(true);
            setOrderOptType('add');
          }}
        >
          新增
        </Button>,
      );
    }
    if (rolePath?.includes('importExcel')) {
      toolBtns.push(
        <Button
          type="primary"
          key="out"
          onClick={() => {
            setImportModalVisible(true);
          }}
        >
          导入
        </Button>,
      );
    }

    toolBtns.push(
      <Dropdown menu={menuProps}>
        <Button>
          <Space>
            导出
            <DownOutlined />
          </Space>
        </Button>
      </Dropdown>,
    );

    // toolBtns.push(
    //   <Button
    //     key="show"
    //     onClick={() => {
    //       handleAllExpand();
    //     }}
    //   >
    //     {mainOrderAllItemKeys?.length !== expandedRowKeys.length
    //       ? '一键展开'
    //       : '一键收起'}
    //   </Button>,
    // );

    return toolBtns;
  }

  return (
    <PageContainer
      className="order-page-container"
      header={{
        title: '订单管理',
        extra: [
          <Avatar key="0" style={{ verticalAlign: 'middle' }} size="large">
            {userInfo?.username}
          </Avatar>,
          <Tag key="nickName">{userInfo?.nickName}</Tag>,
          <Dropdown
            key="dropdown"
            trigger={['click']}
            menu={{
              items: [
                {
                  label: '退出登录',
                  key: '1',
                  onClick: () => {
                    localStorage.removeItem('token');
                    history.push('/login');
                  },
                },
                // {
                //   label: '修改密码',
                //   key: '2',
                // },
              ],
            }}
          >
            <Button key="4" style={{ padding: '0 8px' }}>
              <EllipsisOutlined />
            </Button>
          </Dropdown>,
        ],
      }}
    >
      <div id="resizeDiv"></div>
      <ProTable
        id="main-table"
        // tableStyle={{backgroundColor:'red'}}

        actionRef={mainTableRef}
        expandIconColumnIndex={-1}
        columns={mainOrdersColumns}
        rowKey="id"
        pagination={{
          showQuickJumper: true,
          pageSize: pageSize,
          current: currentPage,
          showSizeChanger: true,
          onChange: (page, size) => {
            setPageSize(size);
            setCurrentPage(page);
          },
        }}
        // showHeader={false}
        expandedRowKeys={expandedRowKeys}
        // expandable={{ expandedRowRender }}
        dateFormatter="string"
        options={false}
        headerTitle=""
        search={{
          labelWidth: 'auto',
          // onCollapse: resize,
        }}
        request={async (
          // 第一个参数 params 查询表单和 params 参数的结合
          // 第一个参数中一定会有 pageSize 和  current ,这两个参数是 antd 的规范
          params,
          sorter,
          filter,
        ) => {
          const { data } = await postServiceOrderQueryServiceOrder({
            // ...params,
            // FIXME: remove @ts-ignore
            // @ts-ignore
            sorter,
            filter,
            data: params,
          });

          let mainOrderIds = data?.data?.map((d) => d.id);
          if (mainOrderAllItemKeys === undefined) {
            setMainOrderAllItemKeys([]);
          } else {
            setMainOrderAllItemKeys(mainOrderIds);
          }
          setRolePath(data.specialPath);
          handleTableExpand(mainOrderIds);
          return {
            data: data?.data || [],
            total: data?.total || 0,
          };
        }}
        toolBarRender={() => {
          return toolBarRender();
        }}
      />

      {orderDrawerVisible && (
        <OrderDrawer
          data={orderRow}
          subOrders={selectedRows}
          onClose={(isSuccess: boolean) => {
            setOrderDrawerVisible(false);
            setOrderRow({});
            if (isSuccess) {
              refreshTable();
            }
          }}
          orderOptType={orderOptType}
        />
      )}

      {checkVisible && (
        <CheckModal
          setCheckVisible={setCheckVisible}
          data={orderRow}
          subOrders={selectedRows}
          onClose={() => {
            setCheckVisible(false);
            setOrderRow({});
            setSelectedRows({});
            refreshTable();
          }}
        />
      )}

      {notesEditVisible && (
        <OrderNotesEditModal
          setNotesEditVisible={setNotesEditVisible}
          data={orderRow}
          isMianOrder={isMainOrder}
          onClose={() => {
            setNotesEditVisible(false);
            setOrderRow({});
            refreshTable();
          }}
        />
      )}

      {deliverVisible && (
        <DeliverModal
          data={selectedRows}
          isSendProduct={isSendProduct}
          onClose={() => {
            setDeliverVisible(false);
            setOrderRow({});
            setIsSendProduct(false);
            refreshTable();
          }}
        />
      )}

      {financialVisible && (
        <FinancialDrawer
          isEdit={isFinalcialEdit}
          mainOrder={orderRow}
          subOrders={selectedRows}
          onClose={() => {
            setFinancialVisible(false);
            setOrderRow({});
            refreshTable();
          }}
        />
      )}

      {orderPrintVisible && (
        <OrderPrintModal
          mainOrder={orderRow}
          subOrders={selectedRows}
          isRePrint={isRePrintOrder}
          onClose={() => {
            setOrderPrintVisible(false);
            setOrderRow({});
            setIsRePrintOrder(false);
            refreshTable();
          }}
        />
      )}

      {confirmReceiptVisible && (
        <ConfirmReceiptModal
          data={orderRow}
          onClose={() => {
            setConfirmReceiptVisible(false);
            setOrderRow({});
            refreshTable();
          }}
        />
      )}

      {subOrderConfirmReceiptImagesVisible && (
        <SubOrderComfirmReceiptImagesModal
          setVisible={setSubOrderConfirmReceiptImagesVisible}
          onClose={() => {
            setSubOrderConfirmReceiptImagesVisible(false);
          }}
          orderRow={orderRow}
        />
      )}

      {importModalVisible && (
        <ImportModal
          onClose={() => {
            setImportModalVisible(false);
            refreshTable();
          }}
        />
      )}

      {attachmentModalVisible && (
        <AttachmentModal
          data={orderRow}
          onClose={() => {
            setAttachmentModalVisible(false);
            setOrderRow({});
          }}
        />
      )}

      {historyModalVisible && (
        <HistoryModal
          subOrders={selectedRows}
          onClose={() => {
            setHistoryModalVisible(false);
            setSelectedRows({});
          }}
        />
      )}

      {deliverInfoDrawerVisible && (
        <DeliverInfoDrawer
          data={orderRow}
          onClose={() => {
            setDeliverInfoDrawerVisible(false);
            setOrderRow({});
          }}
        />
      )}

      {contextHolder}
    </PageContainer>
  );
};

export default OrderPage;