import React, { FC, useEffect, useState } from "react"; import { Button, Table, Typography } from "antd"; import { exceptStr, paginationAction } from "@/utils/common"; import styles from "@/pages/atdTable/components/index.less"; import { PaginationData } from "rc-pagination"; const { Text, Paragraph } = Typography; const ReportTable: FC = (props) => { const [columns, setColumns] = useState>([]); const [sumRow, setSumRow] = useState>({}); const [dataSource, setDataSource] = useState>([]); const [showSumrow, setShowSumrow] = useState(false); const [SSHeaderInfo, setSSHeaderInfo] = useState(""); const [pageInfo, setPageInfo] = useState>({}); const [i18n, setI18n] = useState({}); useEffect(() => { window.parent.postMessage({ type: "init" }, "*"); window.addEventListener("message", receiveMessageFromIndex, false); return () => { window.removeEventListener("message", receiveMessageFromIndex, false); }; }, []); const receiveMessageFromIndex = (event: any) => { const data: any = exceptStr(event.data); if (!_.isEmpty(data)) { const { i18n, columns, dataSource, countResult, showSum, SSHeaderInfo = "", pageInfo } = data; setI18n(i18n); setDataSource(dataSource); setShowSumrow(showSum); setSumRow(countResult); setSSHeaderInfo(SSHeaderInfo); setPageInfo(pageInfo); setColumns(_.map(columns, (item, index: number) => { if (index === 0) { return { ...item, fixed: "left", ellipsis: true }; } return { ...item, children: _.map(item.children, child => { return { ...child, ellipsis: true, render: (text: string, record: any) => { if (child.dataIndex?.endsWith("increase")) { let lowerLimitIndex = child.dataIndex.replace("increase", "lowerLimit"); let upperLimitIndex = child.dataIndex.replace("increase", "upperLimit"); let rowData = !_.isEmpty(record[child.dataIndex]) ? record[child.dataIndex].split(",").join("") : ""; if (isNaN(parseFloat(rowData))) { return record[child.dataIndex]; } if (!isNaN(parseFloat(record[lowerLimitIndex])) && parseFloat(rowData) < parseFloat(record[lowerLimitIndex])) { return ; } if (!isNaN(parseFloat(record[upperLimitIndex])) && parseFloat(rowData) > parseFloat(record[upperLimitIndex])) { return ; } else { return `${rowData}`; } } return ; } }; }) }; })); } }; const onChange = (current: number, pageSize: number) => { setPageInfo((prevState) => { const { pageSize: size } = prevState; window.parent.postMessage( { type: "turn", payload: { id: "PAGEINFO_REPORT", params: { ...pageInfo, current: size === pageSize ? current : 1, pageSize } } }, "*" ); return { ...pageInfo, current: size === pageSize ? current : 1, pageSize }; }); }; return {SSHeaderInfo}} pagination={!_.isNil(pageInfo) ? { ...paginationAction(pageInfo, i18n, onChange), size: "default" } : false} summary={() => { if (!showSumrow) return; let totalColumns: any[] = []; _.forEach(columns, it => { if (_.isEmpty(it.children)) { totalColumns.push(it); } else { totalColumns = [...totalColumns, ...it.children]; } }); return ( { _.map(totalColumns, (item, index) => { return {!_.isNil(sumRow[item.dataIndex]) ? sumRow[item.dataIndex] : "-"} ; }) } ); }} />; }; export default ReportTable;