index.tsx 5.77 KB
import EllipsisDiv from '@/components/Div/EllipsisDiv';
import { postCanrdApiUserList } from '@/services';
import { getUserInfo } from '@/utils/user';
import { ActionType, ProTable } from '@ant-design/pro-components';
import { Button } from 'antd';
import { useRef, useState } from 'react';
import BalanceChangeRecordsModal from '../components/BalanceChangeRecordsModal';
import PointsExchangeModal from '../components/PointsExchangeModal';
import PointsExchangeRecordsModal from '../components/PointsExchangeRecordsModal';
import { ACCOUNT_COLUMNS } from '../constant';
import './index.less';

const PrepaidAccountPage = () => {
  const user = getUserInfo();
  const accountActionRef = useRef<ActionType>();
  const [currentOptUserObj, setCurrentOptUserObj] = useState(null);
  const [
    balanceChangeRecordsModalVisible,
    setBalanceChangeRecordsModalVisible,
  ] = useState<boolean>(false);
  const [pointsExchangeModalVisible, setPointsExchangeModalVisible] =
    useState<boolean>(false);
  const [
    pointsExchangeRecordsModalVisible,
    setPointsExchangeRecordsModalVisible,
  ] = useState<boolean>(false);

  const reloadAccountTable = () => {
    accountActionRef.current?.reload();
  };

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

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

    return target;
  };

  const accountColumnsInit = () => {
    let columns = ACCOUNT_COLUMNS.map((item) => {
      let newItem = { ...item };
      let dataIndex = item.dataIndex;

      newItem.render = (text, record) => {
        let textValue = record[dataIndex];
        return <EllipsisDiv text={getTableCellText(textValue)} />;
      };

      return newItem;
    });

    columns.push({
      title: '操作',
      valueType: 'option',
      key: 'option',
      fixed: 'right',
      width: 240,
      render: (text, record) => {
        let btns = [];
        btns.push(
          <Button
            className="p-0 ml-2"
            key="points"
            type="link"
            onClick={() => {
              setCurrentOptUserObj(record);
              setPointsExchangeModalVisible(true);
            }}
          >
            积分兑换
          </Button>,
        );
        btns.push(
          <Button
            className="p-0"
            key="view"
            type="link"
            onClick={() => {
              setCurrentOptUserObj(record);
              setBalanceChangeRecordsModalVisible(true);
            }}
          >
            消费记录
          </Button>,
        );
        btns.push(
          <Button
            className="p-0 ml-2"
            key="pointsRecords"
            type="link"
            onClick={() => {
              setCurrentOptUserObj(record);
              setPointsExchangeRecordsModalVisible(true);
            }}
          >
            积分兑换记录
          </Button>,
        );
        return btns;
      },
    });

    return columns;
  };

  return (
    <div className="prepaid-account">
      <ProTable
        columns={accountColumnsInit()}
        actionRef={accountActionRef}
        cardBordered
        pagination={{
          pageSize: 10,
        }}
        request={async (params) => {
          const res = await postCanrdApiUserList({
            data: { ...params },
          });
          const data = res?.data?.data || [];
          const targetPhones = [
            '18550286106',
            '15286038815',
            '15202597163',
            '13267086260',
            '15900392469',
            '13529047645',
          ];

          const processedData = data.map((item) => {
            const isAdmin = user.roles.includes('ADMIN');
            const isSalesManager = user.roles.includes('SALES_MANAGER');
            if (
              targetPhones.includes(item.phone) &&
              !(isAdmin || isSalesManager)
            ) {
              return {
                ...item,
                nowMoney: '****',
              };
            }
            return item;
          });
          return {
            data: processedData,
            total: res?.data?.total || 0,
          };
        }}
        columnsState={{
          persistenceKey: 'pro-table-singe-account',
          persistenceType: 'localStorage',
          defaultValue: {
            option: { fixed: 'right', disable: true },
          },
          onChange(value) {
            console.log('value: ', value);
          },
        }}
        rowKey="id"
        search={{
          labelWidth: 'auto',
        }}
        options={{
          setting: {
            listsHeight: 400,
          },
        }}
        form={{}}
        dateFormatter="string"
        headerTitle="账号列表"
        scroll={{ x: 1400 }}
        toolBarRender={() => []}
      />

      {balanceChangeRecordsModalVisible && (
        <BalanceChangeRecordsModal
          visible={balanceChangeRecordsModalVisible}
          onCancel={() => {
            setBalanceChangeRecordsModalVisible(false);
          }}
          record={currentOptUserObj}
        />
      )}

      {pointsExchangeModalVisible && (
        <PointsExchangeModal
          visible={pointsExchangeModalVisible}
          onCancel={() => {
            setPointsExchangeModalVisible(false);
          }}
          onOk={() => {
            setPointsExchangeModalVisible(false);
            reloadAccountTable();
          }}
          record={currentOptUserObj}
          relationEntityType="USER"
        />
      )}

      {pointsExchangeRecordsModalVisible && (
        <PointsExchangeRecordsModal
          visible={pointsExchangeRecordsModalVisible}
          onCancel={() => {
            setPointsExchangeRecordsModalVisible(false);
          }}
          record={currentOptUserObj}
          relationEntityType="USER"
        />
      )}
    </div>
  );
};

export default PrepaidAccountPage;