index.tsx 4.74 KB
import ButtonConfirm from '@/components/ButtomConfirm';
import EllipsisDiv from '@/components/Div/EllipsisDiv';
import { RESPONSE_CODE } from '@/constants/enum';
import {
  postCanrdPrivatePocketDelete,
  postCanrdPrivatePocketList,
} from '@/services';
import { formatDateTime } from '@/utils';
import { ActionType, ProTable } from '@ant-design/pro-components';
import { Button, message } from 'antd';
import { useRef, useState } from 'react';
import BalanceChangeRecordsModal from '../components/BalanceChangeRecordsModal';
import AddPrivatePocketModal from './components/AddPrivatePocketModal';
import { PRIVATE_POCKET_COLUMNS } from './constant';
import './index.less';

const PrivatePocketPage = () => {
  const actionRef = useRef<ActionType>();
  const [addModalVisible, setAddModalVisible] = useState<boolean>(false);
  const [currentOptRecord, setCurrentOptRecord] = useState(null);
  const [
    balanceChangeRecordsModalVisible,
    setBalanceChangeRecordsModalVisible,
  ] = useState<boolean>(false);

  const reloadTable = () => {
    actionRef.current?.reload();
  };

  const getTableCellText = (target: any) => {
    if (!target) {
      return '';
    }

    if (target.props) {
      return target.props.text;
    }

    return target;
  };

  const columnsInit = () => {
    let columns = PRIVATE_POCKET_COLUMNS.map((item) => {
      let newItem = { ...item };
      let dataIndex = item.dataIndex;

      newItem.render = (text: any, record: any) => {
        let textValue = record[dataIndex];

        if (dataIndex.endsWith('Time')) {
          textValue = formatDateTime(textValue);
        }

        return <EllipsisDiv text={getTableCellText(textValue)} />;
      };

      return newItem;
    });

    columns.push({
      title: '操作',
      valueType: 'option',
      key: 'option',
      width: 120,
      render: (text: any, record: any) => {
        let btns = [];

        btns.push(
          <Button
            className="p-0"
            key="view"
            type="link"
            onClick={() => {
              setCurrentOptRecord(record);
              setBalanceChangeRecordsModalVisible(true);
            }}
          >
            消费记录
          </Button>,
        );

        btns.push(
          <ButtonConfirm
            key="delete"
            className="p-0"
            title={'确认删除这条隐私钱包记录吗?'}
            text="删除"
            onConfirm={async () => {
              let res = await postCanrdPrivatePocketDelete({
                data: { uid: record.uid },
              });
              if (res && res.result === RESPONSE_CODE.SUCCESS) {
                message.success('删除成功');
                reloadTable();
              }
            }}
          />,
        );

        return btns;
      },
    });

    return columns;
  };

  return (
    <div className="private-pocket-index">
      <ProTable
        columns={columnsInit()}
        actionRef={actionRef}
        cardBordered
        pagination={{
          pageSize: 10,
        }}
        request={async (params) => {
          const res = await postCanrdPrivatePocketList({
            data: { ...params },
          });
          const list = res?.data?.data || [];
          return {
            data: list,
            success: true,
            total: res?.data?.total || 0,
          };
        }}
        columnsState={{
          persistenceKey: 'pro-table-private-pocket',
          persistenceType: 'localStorage',
          defaultValue: {
            option: { fixed: 'right', disable: true },
          },
          onChange(value) {
            console.log('value: ', value);
          },
        }}
        rowKey="uid"
        search={{
          labelWidth: 'auto',
        }}
        options={{
          setting: {
            listsHeight: 400,
          },
        }}
        form={{}}
        dateFormatter="string"
        headerTitle="隐私钱包"
        scroll={{ x: 1400 }}
        toolBarRender={() => [
          <Button
            key="add"
            type="primary"
            onClick={() => setAddModalVisible(true)}
          >
            添加
          </Button>,
        ]}
      />

      {addModalVisible && (
        <AddPrivatePocketModal
          visible={addModalVisible}
          onCancel={() => setAddModalVisible(false)}
          onSuccess={() => {
            setAddModalVisible(false);
            reloadTable();
          }}
        />
      )}

      {balanceChangeRecordsModalVisible && (
        <BalanceChangeRecordsModal
          setVisible={setBalanceChangeRecordsModalVisible}
          userInfoObj={currentOptRecord}
          onClose={() => {
            setBalanceChangeRecordsModalVisible(false);
            reloadTable();
          }}
        />
      )}
    </div>
  );
};

export default PrivatePocketPage;