/* * Author: 黎永顺 * name: 薪资核算-列表 * Description: * Date: 2023/9/14 */ import React, { FunctionComponent, useEffect, useState } from "react"; import type { MenuProps } from "antd"; import { Button, Dropdown, Space, Table, Tooltip, Typography } from "antd"; import { DeleteOutlined, LockOutlined, QuestionCircleOutlined, SettingOutlined, UnlockOutlined } from "@ant-design/icons"; import CustomTableTitle from "@/pages/calcTable/customTableTitle"; import CalcExplainFooter from "@/pages/calcTable/calcExplainFooter"; import CaclFixedTotal from "./calcFixedTotal"; import type { ColumnType } from "antd/lib/table"; import type { PaginationData } from "rc-pagination"; import { exceptStr, paginationFun } from "@/utils/common"; import { IPage } from "@/common/types"; import styles from "@/pages/atdTable/components/index.less"; interface OwnProps {} type Props = OwnProps; type fixedProps = boolean | "top" | "bottom"; const { Text } = Typography; const index: FunctionComponent = (props) => { const [columns, setColumns] = useState[]>([]); const [dataSource, setDataSource] = useState([]); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [pageInfo, setPageInfo] = useState>({}); const [i18n, setI18n] = useState({}); const [showTotalCell, setShowTotalCell] = useState(false); const [isDetailTable, setIsDetailTable] = useState(false); const [showSee, setShowSee] = useState(false); const [sumRowlistUrl, setSumRowlistUrl] = useState(""); const [tableScrollHeight, setTableScrollHeight] = useState(0); const [payload, setPayload] = useState(""); const [fixed, setFixed] = useState(true); const [sumRow, setSumRow] = 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 { columns, dataSource, pageInfo, selectedRowKeys: rowKeys = [], i18n: i18nRes = {}, showTotalCell = false, sumRowlistUrl = "", payload = {}, calcDetail, showSee = false, fixed = true, tableScrollHeight, sumRow, optWidth } = data; setSumRowlistUrl(sumRowlistUrl); setShowTotalCell(showTotalCell); setIsDetailTable(calcDetail); setShowSee(showSee); setI18n(i18nRes); setPayload(payload); setFixed(fixed); setSumRow(sumRow); setPageInfo(pageInfo); setDataSource(dataSource); setSelectedRowKeys([...selectedRowKeys, ...rowKeys]); setTableScrollHeight(tableScrollHeight); setColumns([ ...convertColumns(_.map(columns, (o) => ({ ...o, i18n: i18nRes }))), { title: i18nRes["操作"], dataIndex: "operate", fixed: "right", width: optWidth || 120, render: (__, record) => ( {optWidth && ( <> )} {record?.lockTime && {record?.lockTime}} ) } ]); } }; const convertColumns: any = (cols: any[]) => { return _.map(cols, (item) => { if (_.isNaN(parseInt(item.dataIndex))) { return { ...item }; } else { return { ...item, title: , children: convertColumns(_.map(item.children, (o) => ({ ...o, i18n: item.i18n }))), className: styles["td_odd"], i18n: item.i18n, onCell: (record: any) => ({ className: !_.isEmpty(record[`${item.dataIndex}_feedback`]) && styles["feedbackBg"], onContextMenu: (e: any) => { (!item.calcDetail || item.rightClickType) && e.preventDefault(); } }), render: (text: string, record: any) => { let items: MenuProps["items"] = !item.calcDetail ? [ { label: item.i18n["锁定"], key: "LOCK", icon: , onClick: () => handleLockEmp({ lockStatus: "LOCK", acctEmpId: record?.id, salaryItemId: item?.dataIndex }) }, { label: item.i18n["解锁"], key: "UNLOCK", icon: , onClick: () => handleLockEmp({ lockStatus: "UNLOCK", acctEmpId: record?.id, salaryItemId: item?.dataIndex }) } ] : []; item.rightClickType && item.rightClickType.includes("DELFEEDBACK") && (items = [ ...items, { label: item.i18n["删除反馈"], key: "DELFEEDBACK", icon: , onClick: () => handleDelFeedback({ acctEmpId: record?.id, salaryItemId: item?.dataIndex }) } ]); item.rightClickType && item.rightClickType.includes("SETFEEDBACK") && (items = [ ...items, { label: item.i18n["设置反馈"], key: "SETFEEDBACK", icon: , onClick: () => handleSetFeedback({ acctEmpId: record?.id, salaryItemId: item?.dataIndex }) } ]); return ( {text} {record.lockItems && record.lockItems.includes(item.dataIndex) ? : null} {!_.isEmpty(record[`${item.dataIndex}_feedback`]) ? ( ) : null} ); } }; } }); }; const handleFormulaTd = (dataIndex: string) => { window.parent.postMessage({ type: "turn", payload: { id: "FORMULA", params: { dataIndex } } }, "*"); }; const handleEdit = (id: string, showSee: boolean) => { window.parent.postMessage({ type: "turn", payload: { id: "EDIT", params: { id, showSee } } }, "*"); }; const handleLockEmp = (params: any) => { window.parent.postMessage({ type: "turn", payload: { id: "LOCKEMP", params } }, "*"); }; // 复旦大学附属医院二开-薪资核算项添加右击删除反馈的操作 const handleDelFeedback = (params: any) => { window.parent.postMessage({ type: "turn", payload: { id: "DELFEEDBACK", params } }, "*"); }; const handleSetFeedback = (params: any) => { window.parent.postMessage({ type: "turn", payload: { id: "SETFEEDBACK", params } }, "*"); }; const sizeChange = (pageobj: IPage) => {}; const onChange = (pageobj: IPage) => { setPageInfo(() => { window.parent.postMessage({ type: "turn", payload: { id: "PAGEINFO", params: { ...pageInfo, ...pageobj } } }, "*"); return { ...pageInfo, ...pageobj }; }); }; const rowSelection = { columnWidth: 60, columnTitle: isDetailTable && !showTotalCell ? "序号" : "", renderCell: (value: boolean, record: any, index: number, originNode: React.ReactNode) => (isDetailTable && !showTotalCell ? {index + 1} : originNode), selectedRowKeys, preserveSelectedRowKeys: true, onChange: (rowKeys: React.Key[]) => { setSelectedRowKeys(rowKeys); window.parent.postMessage( { type: "turn", payload: { id: "CHECKBOX", params: { selectedRowKeys: rowKeys } } }, "*" ); } }; return ( o.dataIndex !== "operate")} footer={() => (!isDetailTable ? : null)} pagination={ !_.isNil(pageInfo) ? { ...paginationFun(pageInfo, sizeChange, onChange, i18n), size: "default" } : false } summary={() => !showTotalCell ? ( <> ) : ( {i18n["总计"]} ) } /> ); }; export default index;