AddBankStatementModal.tsx 3.83 KB
import { postServiceBankStatementQueryBankStatement } from '@/services';
import { ModalForm, ProCard, ProTable } from '@ant-design/pro-components';
import { Button, Divider, Flex, Form, Tag } from 'antd';
import React from 'react';

export default ({ getRows, onFinish }) => {
  const [form] = Form.useForm();
  const [selectedRows, setSelectedRows] = React.useState<any[]>([]);

  const columns = [
    {
      title: '编号',
      hideInSearch: true,
      dataIndex: 'id',
    },
    {
      title: '编号',
      hideInTable: true,
      dataIndex: 'id',
    },
    {
      title: '流水号',
      hideInSearch: true,
      dataIndex: 'serialNumber',
    },
    {
      title: '流水号',
      hideInTable: true,
      dataIndex: 'serialNumber',
    },
    {
      title: '收款时间',
      dataIndex: 'collectionDatetime',
      hideInSearch: true,
      valueType: 'date',
    },
    {
      title: '收款方',
      hideInSearch: true,
      dataIndex: 'payeeText',
    },
    {
      title: '付款方',
      hideInSearch: true,
      dataIndex: 'payer',
    },
    {
      title: '金额',
      dataIndex: 'amount',
      hideInSearch: true,
      valueType: 'money',
    },
    {
      title: '操作',
      valueType: 'option',
      width: 200,
      render: (text, record) => [
        <a
          key="selected"
          onClick={() => {
            let selectedRowsCopy;
            if (!selectedRows || !Array.isArray(selectedRows)) {
              selectedRowsCopy = []; // 初始化为一个空数组
            } else {
              selectedRowsCopy = selectedRows;
            }
            if (!selectedRows?.map((item) => item.id).includes(record.id)) {
              setSelectedRows([...selectedRowsCopy, record]);
            } else {
              setSelectedRows(
                selectedRowsCopy.filter((item) => item.id !== record.id),
              );
            }
          }}
        >
          {selectedRows?.map((item) => item.id).includes(record.id)
            ? '取消选中'
            : '选中'}
        </a>,
      ],
    },
  ];
  return (
    <ModalForm
      title="添加银行流水"
      trigger={<Button type="primary">添加</Button>}
      form={form}
      autoFocusFirstInput
      modalProps={{
        destroyOnClose: true,
        onCancel: () => console.log('run'),
      }}
      onOpenChange={(visible) => {
        if (visible) {
          setSelectedRows(getRows());
        }
      }}
      layout={'horizontal'}
      width={1500}
      submitTimeout={2000}
      onFinish={async (values) => {
        onFinish(selectedRows);
        console.log(values);
        return true;
      }}
    >
      <Divider orientation="left" plain>
        已选中(合计:¥
        {selectedRows?.reduce((acc, cur) => acc + cur.amount, 0)}元)
      </Divider>
      <ProCard className="mb-[16px]" bordered style={{}}>
        <Flex wrap="wrap" gap="small">
          {selectedRows?.map((item, i) => {
            return (
              <Tag
                key={i + ''}
                closable={true}
                style={{ userSelect: 'none' }}
                color="blue"
                onClose={(e) => {
                  e.preventDefault(); //需要加上这句代码,不然删除tag时,当前tag的下一个tag会被设置ant-tag-hidden
                }}
              >
                <span>{item.serialNumber}</span>
              </Tag>
            );
          })}
        </Flex>
      </ProCard>
      <ProTable
        columns={columns}
        request={async (params) => {
          const res = await postServiceBankStatementQueryBankStatement({
            data: {
              ...params,
              writeOffIdIsNull: true,
            },
          });
          return res.data;
        }}
        options={false}
        rowKey="id"
        headerTitle="添加银行流水"
      />
    </ModalForm>
  );
};