import React, { FC, useEffect, useState } from "react"; import { exceptStr, paginationFun } from "@/utils/common"; import { defaultPage, ILoading, IPage } from "@/common/types/page"; import { Button, message, Spin, Table, Typography } from "antd"; import { LockOutlined, UnlockOutlined } from "@ant-design/icons"; import API from "@/api"; import styles from "./index.less"; const { Text } = Typography; interface ITableProps { } const AntdTable: FC = (props) => { const [selected, setSelected] = useState>([]); //列表选中的数据 const [tab, setTab] = useState(""); //顶部TAB变量 const [usertab, setUsertab] = useState(""); //底部TAB变量 const [pageParams, setPageParams] = useState(defaultPage); //分页变量 const [loading, setLoading] = useState({}); const [columns, setColumns] = useState([]); const [dataSource, setDataSource] = useState([]); const [sumRow, setSumRow] = useState>({});//薪资核算总计行数据 const [showSumrow, setShowSumrow] = useState(false);//薪资核算总计行是否隐藏 useEffect(() => { window.parent.postMessage( { type: "PC", data: { id: "SA" } }, "*" ); window.addEventListener("message", receiveMessageFromIndex, false); return () => { setSumRow({}); window.removeEventListener("message", receiveMessageFromIndex, false); }; }, []); const getPCDataList = (params: any = {}) => { let { type, listType, hasOperate = true, ...extraParams } = params; setLoading({ query: true }); setTab(type); setUsertab(listType); API.CalculateService.getPCDataList(extraParams).then(async ({ success, data, errorMsg }) => { setLoading({ query: false }); if (success) { const { data: dataCopy } = data; if (type === "PC") { if (listType === "SA") { const { columns = [], list = [], total, pageSize: size, pageNum } = dataCopy; setColumns(getUserListColumns(columns)); setDataSource(list); setPageParams({ ...pageParams, total, size, pageNum }); } else if (listType === "MA") { const { columns = [], list = [], total, pageSize: size, pageNum } = dataCopy; setColumns(columns); setDataSource(list); setPageParams({ ...pageParams, total, size, pageNum }); } } else { const { columns = [], pageInfo = {} } = dataCopy; const { list = [], total, pageSize: size, pageNum } = pageInfo; setColumns(getColumns(columns, hasOperate)); setDataSource(list); setPageParams({ ...pageParams, total, size, pageNum }); const confCode: any = await API.CalculateService.getSysconfcode({ code: "OPEN_ACCT_RESULT_SUM" }); setShowSumrow(confCode.data.status && confCode.data.data === "1"); if (confCode.data.status && confCode.data.data === "1") { const sumRowlist: any = await API.CalculateService.getAcctresultsum({ ...extraParams["queryParams"] }); if (sumRowlist.data.status && !_.isEmpty(sumRowlist.data.data.sumRow)) { setSumRow(sumRowlist.data.data.sumRow); } if (sumRowlist.data.status && _.isNil(sumRowlist.data.data.sumRow)) { setSumRow({ [new Date().getTime()]: new Date().getTime() }); } } } } else { message.error(errorMsg || ""); } }); }; const getUserListColumns = (acctemployeeListColumns: any) => { let tmpColumns = [...acctemployeeListColumns, { key: "cz", title: "操作", render: (text: string, record: any) => { return ( ); } }]; tmpColumns = _.map(tmpColumns, (item) => { if (item.dataIndex === "costCenter") { return { ...item, ellipsis: true, width: 110, render: (text: string, r: any) => { const { costCenter } = r; return ( { window.parent.postMessage( { type: "PC", data: { id: "COSTCENTER", data: costCenter } }, "*" ); }}>{costCenter.name || ""} ); } }; } return { ...item, ellipsis: true }; }); return tmpColumns; }; //薪资核算页面列表 const getColumns = (column: any, hasOperate: boolean = true) => { let tmpColumns = [...column]; tmpColumns = tmpColumns.filter(item => item.hide == "FALSE").map((item, index) => { let result = { ...item }; result.title = { window.parent.postMessage( { type: "PR", data: { id: "COLUMNINDEX", data: item.column } }, "*" ); }}>{item.text} { item.lockStatus && { item.lockStatus === "UNLOCK" && { window.parent.postMessage( { type: "PR", data: { id: "COLUMNINDEX", data: item.column, extraId: "LOCK" } }, "*" ); }} /> } { item.lockStatus !== "UNLOCK" && { window.parent.postMessage( { type: "PR", data: { id: "COLUMNINDEX", data: item.column, extraId: "UNLOCK" } }, "*" ); }} /> } } ; result.dataIndex = item.column; result.oldWidth = result.width; result.width = "150px"; result.ellipsis = true; result.render = (text: string, r: any) => { if (item.column === "costCenter") { const { costCenter } = r; return { window.parent.postMessage( { type: "PR", data: { id: "COSTCENTER", data: costCenter } }, "*" ); }}>{!_.isEmpty(costCenter) ? costCenter.name : ""}; } return {text} { result.lockStatus === "LOCK" ? : null } ; }; if (result.children) { result.width = (result.children.length * 150) + "px"; result.children.map((child: any) => { child.title = { window.parent.postMessage( { type: "PR", data: { id: "COLUMNINDEX", data: child.column } }, "*" ); }}>{child.text} { child.lockStatus && { child.lockStatus === "UNLOCK" && { window.parent.postMessage( { type: "PR", data: { id: "COLUMNINDEX", data: child.column, extraId: "LOCK" } }, "*" ); }} /> } { child.lockStatus !== "UNLOCK" && { window.parent.postMessage( { type: "PR", data: { id: "COLUMNINDEX", data: child.column, extraId: "UNLOCK" } }, "*" ); }} /> } } ; child.dataIndex = child.column; child.width = "150px"; child.ellipsis = true; child.render = (text: string) => { return {text} { child.lockStatus === "LOCK" ? : null } ; }; }); } if (index < 3) { result.fixed = "left"; result.render = (text: string) => { return {text}; }; } return result; }); hasOperate && tmpColumns.push({ title: "操作", key: "cz", width: "100px", fixed: "right", render: (text: string, record: any) => { return ; } }); return tmpColumns; }; const receiveMessageFromIndex = (event: any) => { setDataSource([]); const data: any = exceptStr(event.data); if (!_.isEmpty(data)) { const { selectedRowKeys, ...extraData } = data; getPCDataList({ ...extraData, ...pageParams }); if (selectedRowKeys) setSelected(selectedRowKeys); } }; const sizeChange = (pageobj: IPage) => { }; const onChange = (pageobj: IPage) => { setPageParams({ ...pageParams, ...pageobj }); window.parent.postMessage( { type: tab, data: { id: "PAGEINFO", extraId: usertab, data: { ...pageParams, ...pageobj } } }, "*" ); }; const rowSelection = { selectedRowKeys: selected, onChange: (selectedRowKeys: Array) => { setSelected(selectedRowKeys); window.parent.postMessage( { type: tab, data: { id: "BATCHDELETE", extraId: usertab, data: selectedRowKeys } }, "*" ); } }; return { if (tab !== "PR" || !showSumrow) return; let totalColumns: any[] = []; _.forEach(columns, it => { if (!it.children) { totalColumns.push(it); } else { totalColumns = [...totalColumns, ...it.children]; } }); return ( { _.isEmpty(sumRow) ? : _.map([{}, ...totalColumns], (item, index) => { if (index === 0) { return 总计; } return {sumRow[item.dataIndex] || "-"} ; }) } ); }} />; }; export default AntdTable;