index.tsx 4.17 KB
import React, { useState } from "react";
import { Table, Popconfirm, Row, Button, message, Space, Divider } from "antd";
import { useStore } from "../index";
import * as api from "./api";
import { PlusOutlined } from "@ant-design/icons";
import AddRewardsModal from "../components/AddRewardsModal";
import { RewardsType } from "@/pages/stock/AllowanceConfirm/entity";

const { Column } = Table;

interface Props {
  rewardsType: number;
  // data: FvmAllowance.RewardsItemList[];
}
function RewardsList(props: Props) {
  // const { rewardsType, data } = props;
  const { rewardsType } = props;
  const {
    setParams,
    params,
    rewardOrder,
    disCountOrder,
    RewardOrderPagination,
    DiscountOrderPagination,
    setRewardOrderParams,
    setDiscountOrderParams,
    rebateId,
    readOnly,
  } = useStore();
  const paginationTypeList = {
    1: DiscountOrderPagination,
    2: RewardOrderPagination,
  };

  const tableData = { 1: disCountOrder, 2: rewardOrder };
  const [saveLoading, setSaveLoading] = useState(false);
  const [visible, setVisible] = useState(false);
  // 当前编辑项
  const [currentItem, setCurrentItem] = useState({});

  function handleDelete(record: api.ListVO) {
    setSaveLoading(true);
    api
      .getDeleteListApi(record.id)
      .then((res) => {
        message.success("操作成功");
        setSaveLoading(false);
        fetchList();
      })
      .catch((e) => {
        setSaveLoading(false);
        message.error(e.message);
      });
  }

  // 配置
  const onEdit = (record: api.ListVO) => {
    setVisible(true);
    setCurrentItem({ ...record });
  };

  // 获取奖励、扣款清单
  const fetchList = () => {
    setDiscountOrderParams({ rebateId, rewardType: 1 }, true);
    setRewardOrderParams({ rebateId, rewardType: 2 }, true);
  };
  return (
    <div style={{ marginTop: 100 }}>
      <Row justify="space-between" style={{ marginBottom: 20 }}>
        <h3>{rewardsType == 1 ? "1、扣款清单" : "2、奖励清单"}</h3>
        <Button
          type="primary"
          icon={<PlusOutlined />}
          onClick={() => setVisible(true)}
          disabled={readOnly}
        >
          新增{rewardsType == 1 ? "扣款" : "奖励"}
        </Button>
      </Row>
      <Table
        dataSource={tableData[rewardsType]}
        pagination={paginationTypeList[rewardsType]}
        rowKey="id"
        loading={false}
      >
        <Column title="名称" width="30%" dataIndex="fundsName" align="center" />
        <Column
          title="类型"
          width="30%"
          dataIndex="rewardsType"
          align="center"
          render={(text: number) => (text ? RewardsType[text] : "--")}
        />
        <Column
          title="实际折让金额(元)"
          dataIndex="actualRebateAmount"
          align="center"
        />
        <Column
          title="折让分摊"
          align="center"
          width={150}
          render={(text, record: api.ListVO) => (
            <>
              <Space>
                <Button
                  type="link"
                  loading={saveLoading}
                  onClick={() => onEdit(record)}
                >
                  {/* 配置 */}
                  {readOnly?'查看':'配置'}
                </Button>
                <Divider type="vertical" />

                <Popconfirm
                  title={`确定删除【${record.fundsName}】配置?`}
                  onConfirm={() => handleDelete(record)}
                  okText="确定"
                  cancelText="取消"
                >
                  <Button
                    type="link"
                    style={{ color: "red" }}
                    loading={saveLoading}
                  >
                    删除
                  </Button>
                </Popconfirm>
              </Space>
            </>
          )}
        />
      </Table>
      <AddRewardsModal
        visible={visible}
        onCancel={() => {
          setVisible(false);
          setCurrentItem({});
        }}
        currentItem={currentItem}
        rewardsType={rewardsType}
        dimension={5}
        fetchList={() => {
          fetchList();
        }}
      />
    </div>
  );
}

export default React.memo(RewardsList);