diff --git a/src/api/calculate.service.ts b/src/api/calculate.service.ts index 0de7712..29a29b9 100644 --- a/src/api/calculate.service.ts +++ b/src/api/calculate.service.ts @@ -35,6 +35,26 @@ class CalculateService extends BasicService { getRankInfo = async () => { return this.get(`/api/ais/tupu/getRankInfo`); }; + //获取社保福利台账-正常缴纳合计行数据 + siaccountDetailCommonListSum = async (data: any) => { + return this.post(`/api/bs/hrmsalary/siaccount/detail/common/list/sum`, data); + }; + //获取社保福利台账-正常缴纳合计行数据 + siaccountDetailSupplementaryListSum = async (data: any) => { + return this.post(`/api/bs/hrmsalary/siaccount/detail/supplementary/list/sum`, data); + }; + //获取社保福利台账-社保福利台账退差合计接口 + siaccountDetailRecessionListSum = async (data: any) => { + return this.post(`/api/bs/hrmsalary/siaccount/detail/recession/list/sum`, data); + }; + //获取社保福利台账-社保福利台账补差合计接口 + siaccountDetailBalanceListSum = async (data: any) => { + return this.post(`/api/bs/hrmsalary/siaccount/detail/balance/list/sum`, data); + }; + //工资单发放-查看详情页面列表合计行数据 + salaryBillSendSum = async (data: any) => { + return this.post(`/api/bs/hrmsalary/salaryBill/send/sum`, data); + }; //合计行 getAcctresultsum = async (params: any) => { const { departmentIds = "", positionIds = "", subcompanyIds = "", ...extraParams } = params || {}; diff --git a/src/layouts/config.js b/src/layouts/config.js index 535553c..2ba0867 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -1,25 +1,28 @@ module.exports = { - name: '统一软件开发平台', + name: "统一软件开发平台", layoutConfig: { - '/home': 'blank', - '/manage/design/.*': 'blank', - '/manage/editor': 'blank', - '/calculateDetail.*': 'blank', - '/atdTable.*': 'blank', - '/previewTable.*': 'blank', - '/standingbookTable.*': 'blank', - '/fileTable.*': 'blank', - '/rankMapTable.*': 'blank', - '/manage.*': 'manage', - '/portal.*': 'template', - '/passport/oauth-in': 'blank', - '/passport/openid-in': 'blank', - '/passport/sign-in': 'user', - '/passport/chose-portal': 'user', - '/passport/RegisterResult': 'user', - '/403': 'blank', - '/404': 'blank', - '/500': 'blank', - '/': 'template', - }, + "/home": "blank", + "/manage/design/.*": "blank", + "/manage/editor": "blank", + "/calculateDetail.*": "blank", + "/atdTable.*": "blank", + "/previewTable.*": "blank", + "/standingbookTable.*": "blank", + "/fileTable.*": "blank", + "/rankMapTable.*": "blank", + "/reportTable.*": "blank", + "/commonTable.*": "blank", + "/payrollFilesTable.*": "blank", + "/manage.*": "manage", + "/portal.*": "template", + "/passport/oauth-in": "blank", + "/passport/openid-in": "blank", + "/passport/sign-in": "user", + "/passport/chose-portal": "user", + "/passport/RegisterResult": "user", + "/403": "blank", + "/404": "blank", + "/500": "blank", + "/": "template" + } }; diff --git a/src/pages/atdTable/components/antdTable.tsx b/src/pages/atdTable/components/antdTable.tsx index 8eb8de7..9c542f6 100644 --- a/src/pages/atdTable/components/antdTable.tsx +++ b/src/pages/atdTable/components/antdTable.tsx @@ -1,7 +1,7 @@ import React, { FC, useEffect, useState } from "react"; import { exceptStr, paginationFun } from "@/utils/common"; import { defaultPage, ILoading, IPage } from "@/common/types/page"; -import { message, Spin, Table, Typography } from "antd"; +import { Button, message, Spin, Table, Typography } from "antd"; import { LockOutlined, UnlockOutlined } from "@ant-design/icons"; import API from "@/api"; import styles from "./index.less"; @@ -66,7 +66,7 @@ const AntdTable: FC = (props) => { 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"]}); + const sumRowlist: any = await API.CalculateService.getAcctresultsum({ ...extraParams["queryParams"] }); if (sumRowlist.data.status && !_.isEmpty(sumRowlist.data.data.sumRow)) { setSumRow(sumRowlist.data.data.sumRow); } @@ -86,19 +86,19 @@ const AntdTable: FC = (props) => { title: "操作", render: (text: string, record: any) => { return ( - { - window.parent.postMessage( - { - type: "PC", - data: { id: "DELETE", data: record } - }, - "*" - ); - }} + ); } }]; @@ -278,7 +278,7 @@ const AntdTable: FC = (props) => { width: "100px", fixed: "right", render: (text: string, record: any) => { - return { + return ; } }); return tmpColumns; @@ -361,7 +361,7 @@ const AntdTable: FC = (props) => { _.isEmpty(sumRow) ? : _.map([{}, ...totalColumns], (item, index) => { if (index === 0) { - return 总计; + return 总计; } return {sumRow[item.dataIndex] || "-"} diff --git a/src/pages/atdTable/components/index.less b/src/pages/atdTable/components/index.less index 65e40a2..928ff6c 100644 --- a/src/pages/atdTable/components/index.less +++ b/src/pages/atdTable/components/index.less @@ -56,9 +56,39 @@ } } + .customSpan { + display: flex; + align-items: center; + width: 100%; + justify-content: space-between; + + span.title { + flex: 1; + margin-right: 4px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + :global { + .ant-tag { + margin-right: 0; + } + } + } + :global { - .ant-btn-link { + .ant-btn-link, .ant-dropdown-trigger { font-size: 12px; + color: #333; + } + + .ant-btn-link:hover { + color: #00a9ff; + + span { + text-decoration: underline; + } } .ant-table-tbody > tr.ant-table-row:hover > td { @@ -87,6 +117,15 @@ } } + .ant-pagination-item-active { + background: var(--ant-primary-color); + border: none; + + & > a { + color: #FFF; + } + } + .ant-pagination-options { .ant-select { font-size: 12px; @@ -135,6 +174,19 @@ .moreIconWrapper { :global { + .ant-btn-link { + font-size: 12px; + color: #333; + } + + .ant-btn-link:hover { + color: #00a9ff; + + span { + text-decoration: underline; + } + } + .ant-popover-inner { min-width: 106px } @@ -156,17 +208,24 @@ } } -:global{ - .rankMapWrapper{ - .ant-table-thead>tr>th{ +:global { + .rankMapWrapper { + .ant-table-thead > tr > th { background: #ED7D31; } } + .bg_1_Cols { - background: #ED7D31!important; + background: #ED7D31 !important; + } + + th.bg_1_Cols { + height: 48px; + line-height: 48px; } + .bg_2_Cols { - background: #DEE0E3!important; + background: #DEE0E3 !important; } } diff --git a/src/pages/commonTable/index.tsx b/src/pages/commonTable/index.tsx new file mode 100644 index 0000000..4acab2b --- /dev/null +++ b/src/pages/commonTable/index.tsx @@ -0,0 +1,102 @@ +import React, { FC, useEffect, useState } from "react"; +import { Table, Tag, Typography } from "antd"; +import { exceptStr, paginationFun } from "@/utils/common"; +import styles from "@/pages/atdTable/components/index.less"; +import { defaultPage, IPage } from "@/common/types"; + +const { Text } = Typography; +const CommonTable: FC = (props) => { + const [columns, setColumns] = useState>([]); + const [sumRow, setSumRow] = useState>({}); + const [pageInfo, setPageInfo] = useState(defaultPage); + const [dataSource, setDataSource] = useState>([]); + const [showSumrow, setShowSumrow] = useState(false); + + 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, countResult, showSum, pageInfo } = data; + const { current: pageNum, pageSize: size, total } = pageInfo; + setDataSource(dataSource); + setColumns(_.map(columns, item => { + if (item.dataIndex === "salarySob") { + return { + ...item, + render: (text: string, r: { acctTimes?: number }) => { + return
+ {text} + {`第${r?.acctTimes}次`} +
; + } + }; + } + return { ...item }; + })); + setShowSumrow(showSum); + setSumRow(countResult); + setPageInfo({ pageNum, size, total }); + } + }; + const sizeChange = (pageobj: IPage) => { + }; + const onChange = (pageobj: IPage) => { + setPageInfo({ ...pageInfo, ...pageobj }); + window.parent.postMessage( + { + type: "turn", + payload: { id: "PAGEINFO", params: { ...pageInfo, ...pageobj } } + }, + "*" + ); + }; + return { + if (!showSumrow) return; + let totalColumns: any[] = []; + _.forEach(columns, it => { + if (!it.children) { + totalColumns.push(it); + } else { + totalColumns = [...totalColumns, ...it.children]; + } + }); + return ( + + + { + _.map([...totalColumns], (item, index) => { + if (index === 0) { + return 总计; + } + return + {!_.isNil(sumRow[item.dataIndex]) ? sumRow[item.dataIndex] : "-"} + ; + }) + } + + + ); + }} + />; +}; + +export default CommonTable; diff --git a/src/pages/payrollFilesTable/index.tsx b/src/pages/payrollFilesTable/index.tsx new file mode 100644 index 0000000..d47ac2c --- /dev/null +++ b/src/pages/payrollFilesTable/index.tsx @@ -0,0 +1,252 @@ +import React, { FC, useEffect, useState } from "react"; +import { Button, Dropdown, Menu, Space, Spin, Table, Typography } from "antd"; +import { DownOutlined } from "@ant-design/icons"; +import { exceptStr, paginationFun } from "@/utils/common"; +import styles from "@/pages/atdTable/components/index.less"; +import { defaultPage, IPage } from "@/common/types"; +import cs from "classnames"; + +const { Text } = Typography; +const payrollFilesTable: FC = (props) => { + const [columns, setColumns] = useState>([]); + const [sumRow, setSumRow] = useState({}); + const [pageInfo, setPageInfo] = useState(defaultPage); + const [dataSource, setDataSource] = useState>([]); + const [showSumrow, setShowSumrow] = useState(false); + const [selected, setSelected] = 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, + countResult, + showSum, + pageInfo, + showOperateBtn, + selectedKey, + selectedRowKeys + } = data; + const { current: pageNum, pageSize: size, total } = pageInfo; + setDataSource(dataSource); + setColumns(_.map(columns, item => { + if (item.dataIndex === "operate") { + return { + ...item, + render: (text: string, r: { id?: string }) => { + let dom = null; + if (!showOperateBtn) { + dom = ; + } else { + if (selectedKey === "pending") { + dom = + + + + + + + + + + } + > + 更多 + + ; + } else if (selectedKey === "fixed") { + dom = ; + } else if (selectedKey === "suspend") { + dom = + + + + + + + + + + } + > + 更多 + + ; + } else { + dom = + + + ; + } + } + return dom; + } + }; + } + return { ...item }; + })); + setShowSumrow(showSum); + setSumRow(_.isEmpty(countResult) ? { [new Date().getTime()]: new Date().getTime() } : countResult); + setPageInfo({ pageNum, size, total }); + setSelected(selectedRowKeys); + } + }; + const handleMenuClick = (event: any, id?: string) => { + window.parent.postMessage( + { + type: "turn", + payload: { id: "MOREOPT", params: { id, event } } + }, + "*" + ); + }; + const sizeChange = (pageobj: IPage) => { + }; + const onChange = (pageobj: IPage) => { + setPageInfo({ ...pageInfo, ...pageobj }); + window.parent.postMessage( + { + type: "turn", + payload: { id: "PAGEINFO", params: { ...pageInfo, ...pageobj } } + }, + "*" + ); + }; + + const rowSelection = { + columnWidth: 50, + selectedRowKeys: selected, + onChange: (selectedRowKeys: Array) => { + setSelected(selectedRowKeys); + window.parent.postMessage( + { + type: "turn", + payload: { id: "ROWSELECTION", params: { selectedRowKeys } } + }, + "*" + ); + } + }; + return
{ + if (!showSumrow) return; + let totalColumns: any[] = []; + _.forEach(columns, it => { + if (!it.children) { + totalColumns.push(it); + } else { + totalColumns = [...totalColumns, ...it.children]; + } + }); + return ( + + + { + sumRow.loading ? : + _.map([{},...totalColumns], (item, index) => { + if (index === 0) { + return 总计; + } + return + {!_.isNil(sumRow[item.dataIndex]) ? sumRow[item.dataIndex] : "-"} + ; + }) + } + + + ); + }} + />; +}; + +export default payrollFilesTable; diff --git a/src/pages/previewTable/index.tsx b/src/pages/previewTable/index.tsx index a1c7fc8..2a14459 100644 --- a/src/pages/previewTable/index.tsx +++ b/src/pages/previewTable/index.tsx @@ -1,8 +1,9 @@ import React, { FC, useEffect, useState } from "react"; -import { Table, Typography } from "antd"; +import { Spin, Table, Typography } from "antd"; import styles from "@/pages/atdTable/components/index.less"; import { exceptStr, paginationFun } from "@/utils/common"; import { defaultPage, IPage } from "@/common/types"; +import API from "@/api"; const { Text } = Typography; const PreviewTable: FC = (props) => { @@ -19,16 +20,30 @@ const PreviewTable: FC = (props) => { window.removeEventListener("message", receiveMessageFromIndex, false); }; }, []); - const receiveMessageFromIndex = (event: any) => { + const receiveMessageFromIndex = async (event: any) => { const data: any = exceptStr(event.data); if (!_.isEmpty(data)) { - const { columns, dataSource, pageInfo, salaryBillSendSum, showSum } = data; + const { columns, dataSource, pageInfo, sumpayload } = data; const { current: pageNum, pageSize: size, total } = pageInfo; setDataSource(dataSource); setColumns(columns); - setShowSumrow(showSum); - setSumRow(salaryBillSendSum); setPageInfo({ pageNum, size, total }); + 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.salaryBillSendSum(sumpayload); + if (sumRowlist.data.status) { + if (!_.isEmpty(sumRowlist.data.data.sumRow)) { + const tmpVSumRow= _.reduce(_.keys(sumRowlist.data.data.sumRow), (pre, cur) => (_.assign(pre, { [`${cur}_salaryItem`]: sumRowlist.data.data.sumRow[cur] })), {}) + setSumRow(tmpVSumRow); + } else { + setSumRow({ [new Date().getTime()]: new Date().getTime() }); + } + } + if (sumRowlist.data.status && _.isNil(sumRowlist.data.data.sumRow)) { + setSumRow({ [new Date().getTime()]: new Date().getTime() }); + } + } } }; const sizeChange = (pageobj: IPage) => { @@ -60,14 +75,16 @@ const PreviewTable: FC = (props) => { { - _.map(columns, (item, index) => { - if (index === 0) { - return 总计; - } - return - {!_.isNil(sumRow[item.dataIndex]) ? sumRow[item.dataIndex] : "-"} - ; - }) + _.isEmpty(sumRow) ? : + _.map(columns, (item, index) => { + if (index === 0) { + return 总计; + } + return + {!_.isNil(sumRow[item.dataIndex]) ? sumRow[item.dataIndex] : "-"} + ; + }) } diff --git a/src/pages/rankMapTable/index.tsx b/src/pages/rankMapTable/index.tsx index 66c0c79..468671a 100644 --- a/src/pages/rankMapTable/index.tsx +++ b/src/pages/rankMapTable/index.tsx @@ -19,6 +19,7 @@ const RankMapTable: React.FC = () => { ...item, align: "center", className: colsIndex === "1" ? "bg_1_Cols" : colsIndex === "2" ? "bg_2_Cols" : "", + width: colsIndex === "1" && "60px", render: (text: string, _: any) => { return { children: {text}, @@ -63,6 +64,7 @@ const RankMapTable: React.FC = () => { _.forEach(_.reduce(columns, (pre: any, cur: any) => ([...pre, cur["dataIndex"]]), []), item => { tmpV = changeData(list, item); }); + console.log(columns); setCols(columns); setDataSource(tmpV); } diff --git a/src/pages/reportTable/index.tsx b/src/pages/reportTable/index.tsx new file mode 100644 index 0000000..3559119 --- /dev/null +++ b/src/pages/reportTable/index.tsx @@ -0,0 +1,70 @@ +import React, { FC, useEffect, useState } from "react"; +import { Table, Typography } from "antd"; +import { exceptStr } from "@/utils/common"; +import styles from "@/pages/atdTable/components/index.less"; + +const { Text } = Typography; +const ReportTable: FC = (props) => { + const [columns, setColumns] = useState>([]); + const [sumRow, setSumRow] = useState>({}); + const [dataSource, setDataSource] = useState>([]); + const [showSumrow, setShowSumrow] = useState(false); + + 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, countResult, showSum } = data; + setDataSource(dataSource); + setColumns(columns); + setShowSumrow(showSum); + setSumRow(countResult); + } + }; + return
{ + if (!showSumrow) return; + let totalColumns: any[] = []; + _.forEach(columns, it => { + if (!it.children) { + totalColumns.push(it); + } else { + totalColumns = [...totalColumns, ...it.children]; + } + }); + return ( + + + { + _.map([{}, ...totalColumns], (item, index) => { + if (index === 0) { + return 总计; + } + return + {!_.isNil(sumRow[item.dataIndex]) ? sumRow[item.dataIndex] : "-"} + ; + }) + } + + + ); + }} + />; +}; + +export default ReportTable; diff --git a/src/pages/standingbookTable/index.tsx b/src/pages/standingbookTable/index.tsx index 0a25f50..56275fb 100644 --- a/src/pages/standingbookTable/index.tsx +++ b/src/pages/standingbookTable/index.tsx @@ -1,8 +1,9 @@ import React, { FC, useEffect, useState } from "react"; -import { Button, Table, Typography } from "antd"; +import { Button, Spin, Table, Typography } from "antd"; import { exceptStr, paginationFun } from "@/utils/common"; import { defaultPage, IPage } from "@/common/types"; import styles from "@/pages/atdTable/components/index.less"; +import API from "@/api"; const { Text } = Typography; const StandingbookTable: FC = (props) => { @@ -20,12 +21,12 @@ const StandingbookTable: FC = (props) => { window.removeEventListener("message", receiveMessageFromIndex, false); }; }, []); - const receiveMessageFromIndex = (event: any) => { + const receiveMessageFromIndex = async (event: any) => { const data: any = exceptStr(event.data); if (!_.isEmpty(data)) { const { columns, dataSource, pageInfo, showOperates, selectedRowKeys, - showSum, siaccountSum + sumpayload, selectedKey } = data; const { current: pageNum, pageSize: size, total } = pageInfo; const conventColumns = _.map(_.filter(columns, it => it.dataIndex !== "id"), item => { @@ -61,10 +62,31 @@ const StandingbookTable: FC = (props) => { } ] ); - setSelected(selectedRowKeys); - setShowSumrow(showSum); - setSumRow(siaccountSum); setPageInfo({ pageNum, size, total }); + setSelected(selectedRowKeys); + 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 = selectedKey === "1" ? await API.CalculateService.siaccountDetailCommonListSum(sumpayload) : + selectedKey === "3" ? await API.CalculateService.siaccountDetailSupplementaryListSum(sumpayload) : + selectedKey === "regression" ? await API.CalculateService.siaccountDetailRecessionListSum(sumpayload) : + selectedKey === "difference" ? await API.CalculateService.siaccountDetailBalanceListSum(sumpayload) : { + data: { + status: false, + data: { sumRow: {} } + } + }; + if (sumRowlist.data.status) { + if (!_.isEmpty(sumRowlist.data.data.sumRow)) { + setSumRow(sumRowlist.data.data.sumRow); + } else { + setSumRow({ [new Date().getTime()]: new Date().getTime() }); + } + } + if (sumRowlist.data.status && _.isNil(sumRowlist.data.data.sumRow)) { + setSumRow({ [new Date().getTime()]: new Date().getTime() }); + } + } } }; const handleEdit = (record: any) => { @@ -84,6 +106,7 @@ const StandingbookTable: FC = (props) => { }; const rowSelection = { selectedRowKeys: selected, + columnWidth: 80, onChange: (selectedRowKeys: Array) => { setSelected(selectedRowKeys); window.parent.postMessage( @@ -113,15 +136,16 @@ const StandingbookTable: FC = (props) => { { - _.map(columns, (item, index) => { - if (index === 0) { - return 总计; - } - return - {!_.isNil(sumRow[item.dataIndex]) ? sumRow[item.dataIndex] : "-"} - ; - }) + _.isEmpty(sumRow) ? : + _.map([{}, ...columns], (item, index) => { + if (index === 0) { + return 总计; + } + return + {!_.isNil(sumRow[item.dataIndex]) ? sumRow[item.dataIndex] : "-"} + ; + }) }