diff --git a/src/api/calculate.service.ts b/src/api/calculate.service.ts index 74fb62a..b895869 100644 --- a/src/api/calculate.service.ts +++ b/src/api/calculate.service.ts @@ -23,10 +23,7 @@ class CalculateService extends BasicService { delete queryParams[key]; } } - return this.post( - url, - queryParams - ); + return this.post(url, queryParams); }; //获取系统配置项 getSysconfcode = async ({ code }: any) => { @@ -73,7 +70,7 @@ class CalculateService extends BasicService { return this.post(`/api/bs/hrmsalary/salaryacct/acctresult/sum`, queryParams); }; //合计行 - getAcctResultsum = async (url: string, params: any) => (this.post(url, params)); + getAcctResultsum = async (url: string, params: any) => this.post(url, params); //社保合计行 getSyMixSum = async (params: any) => { return this.post(`/api/bs/hrmsalary/siaccount/detail/list/syMixSum`, params); @@ -90,8 +87,12 @@ class CalculateService extends BasicService { getAcctresultSum = async (params: any) => { return this.post(`/api/bs/hrmsalary/salaryacct/acctresult/sjjtReportSum`, params); }; + //工资单查询 + getMySalaryBill = async (salaryInfoId: string) => { + return this.get(`/api/bs/hrmsalary/salaryBill/mySalaryBill?salaryInfoId=${salaryInfoId}`); + }; } const calculateService = new CalculateService(); -export default calculateService; +export default calculateService; \ No newline at end of file diff --git a/src/layouts/config.js b/src/layouts/config.js index 45c9e3c..5c711f2 100644 --- a/src/layouts/config.js +++ b/src/layouts/config.js @@ -26,6 +26,7 @@ module.exports = { "/unitTable.*": "blank", "/aliTable.*": "blank", "/custom-project.*": "blank", + "/MPayroll.*": "blank", "/hiprintDesign.*": "hiPrint", "/manage.*": "manage", "/portal.*": "template", @@ -39,4 +40,4 @@ module.exports = { "/500": "blank", "/": "template" } -}; +}; \ No newline at end of file diff --git a/src/pages/MPayroll/index.less b/src/pages/MPayroll/index.less new file mode 100644 index 0000000..72de7f2 --- /dev/null +++ b/src/pages/MPayroll/index.less @@ -0,0 +1,136 @@ +.pbmc_body { + height: calc(100% - 50px); + background: #f6f6f6; + overflow: auto; + font-size: 12px; + + .weapp-salary-payroll-mobile-preview { + width: 100%; + height: 100%; + overflow-y: auto; + + .bill-container { + background: #f6f6f6; + + .space { + width: 100%; + display: flex; + align-items: center; + justify-content: flex-end; + margin-bottom: 16px; + + .ant-btn { + margin-right: 16px; + } + } + + .bill-info-header { + padding-top: 16px; + + .title { + padding: 0 16px; + font-size: 19px; + font-weight: 700; + margin-bottom: 12px; + text-align: center; + } + + .time { + padding: 0 16px; + font-size: 12px; + color: #999; + } + + .img { + margin-top: 20px; + width: 100%; + + img { + width: 100%; + } + } + } + + .top { + padding-bottom: 0; + } + + .footer { + padding-top: 8px; + } + + .corporate-culture-text { + text-align: left; + color: #111; + padding: 8px 16px; + white-space: pre-wrap; + word-break: break-all; + } + + .salary-detail-table-container { + padding-top: 8px; + + .salary-group { + border-top: 1px solid #f2f2f2; + margin-bottom: 16px; + + .group-title { + background: #fff; + display: flex; + align-items: center; + min-height: 45px; + padding: 0 16px; + border-bottom: 1px solid #f2f2f2; + font-weight: bolder; + font-size: 14px; + } + + .group-list { + .list-item { + display: flex; + min-height: 45px; + border-bottom: 1px solid #f2f2f2; + width: 100%; + background: #fff; + + .item-name { + padding: 8px 16px; + width: 50%; + display: flex; + align-items: center; + background: #fbfbfb; + border-right: 1px solid #f2f2f2; + flex-shrink: 0; + } + + .item-count { + display: flex; + align-items: center; + padding: 16px; + white-space: pre-wrap; + word-break: break-all; + } + } + } + } + } + } + } +} + +.pbmc_footer { + position: relative; + height: 50px; + + .pbmcf_indicator { + position: absolute; + bottom: 16px; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + width: 110px; + height: 4px; + background-color: #ebebeb; + border-radius: 2px; + } +} \ No newline at end of file diff --git a/src/pages/MPayroll/index.tsx b/src/pages/MPayroll/index.tsx new file mode 100644 index 0000000..01e9291 --- /dev/null +++ b/src/pages/MPayroll/index.tsx @@ -0,0 +1,119 @@ +import React, { useCallback, useEffect, useMemo, useState } from "react"; +import styles from "./index.less"; +import { Util } from "@/utils"; +import cs from "classnames"; +import API from "@/api"; + +interface OwnProps {} + +type Props = OwnProps; + +const MPayroll: React.FC = (props) => { + const [mySalaryBillData, setMySalaryBillData] = useState({}); + useEffect(() => { + getMySalaryBill(); + return () => {}; + }, []); + const getMySalaryBill = useCallback(() => { + API.CalculateService.getMySalaryBill(Util.getUrlData("salaryInfoId")).then(({ data: res }) => { + const { data, status } = res || {}; + if (status) setMySalaryBillData(data); + }); + }, []); + const dealTemplate = (itemTypeList: any, type: string) => { + let cloneItemTypeList = _.cloneDeep(itemTypeList); + let showData: any = [], + onlyOneGrup = false; + cloneItemTypeList.forEach((group: any) => { + const { items, groupName, groupId } = group; + if (items.length !== 0) { + items.forEach((item: any) => { + item.salaryItemValue = !_.isNil(item.salaryItemValue) ? item.salaryItemValue : ""; + }); + if (items.length % 2 && type === "pc") items.push({}); + showData.push({ groupId, groupName, items }); + } + }); + if (cloneItemTypeList.length === 1) { + onlyOneGrup = true; + cloneItemTypeList[0].name = ""; + } + return { onlyOneGrup, showData }; + }; + const salaryTemplate = useMemo(() => { + return !_.isEmpty(mySalaryBillData) ? mySalaryBillData?.salaryTemplate : {}; + }, [mySalaryBillData]); + const itemTypeList = useMemo(() => { + return !_.isEmpty(mySalaryBillData) ? [mySalaryBillData?.employeeInformation, ...mySalaryBillData?.salaryGroups] : []; + }, [mySalaryBillData]); + const payrollData: any = useMemo(() => { + return !_.isEmpty(itemTypeList) + ? dealTemplate( + _.filter(itemTypeList, (o) => !!o), + "mobile" + ) + : {}; + }, [mySalaryBillData, itemTypeList]); + console.log(payrollData); + return ( + <> +
+
+
+
+
{salaryTemplate?.theme || ""}
+
+ {!payrollData?.onlyOneGrup && salaryTemplate?.textContentPosition == 1 && salaryTemplate.textContent && ( +
+ )} +
+ {!_.isEmpty(payrollData?.showData) && + payrollData?.showData.map((groupItem: any, index: number) => { + if (!groupItem) return null; + const { groupId, groupName, items = [] } = groupItem; + return ( +
+ {groupName ?
{groupName}
: null} +
+ {payrollData?.onlyOneGrup && salaryTemplate?.textContentPosition == "1" && salaryTemplate.textContent && ( +
+
发放说明
+
{salaryTemplate.textContent}
+
+ )} + {items.map((templatItem: any, index: number) => { + const { salaryItemValue, name, salaryItemShowName } = templatItem || {}; + return ( +
+
+ {salaryItemShowName || name || ""} +
+
{salaryItemValue}
+
+ ); + })} + {payrollData?.onlyOneGrup && salaryTemplate?.textContentPosition == "2" && salaryTemplate.textContent && ( +
+
发放说明
+
{salaryTemplate.textContent}
+
+ )} +
+
+ ); + })} +
+ {!payrollData?.onlyOneGrup && salaryTemplate?.textContentPosition == 2 && salaryTemplate.textContent && ( +
+ )} +
+
+
+
+
+
+ + ); +}; + +export default MPayroll; \ No newline at end of file diff --git a/src/utils/common.js b/src/utils/common.js index 5096b1a..4b85ecc 100644 --- a/src/utils/common.js +++ b/src/utils/common.js @@ -71,6 +71,7 @@ export const exceptStr = (str) => { }; export const paginationFun = (tableListPageObj, sizeChange, onChange, i18n = {}) => { + const pageSizeOptions= tableListPageObj?.pageSizeOptions || ["10", "20", "50", "100"]; return { current: tableListPageObj.pageNum || tableListPageObj.current, pageSize: tableListPageObj.size || tableListPageObj.pageSize, @@ -78,7 +79,7 @@ export const paginationFun = (tableListPageObj, sizeChange, onChange, i18n = {}) showTotal: total => `${i18n["共"] ? i18n["共"] : "共"} ${total} ${i18n["条"] ? i18n["条"] : "条"}`, showQuickJumper: true, showSizeChanger: true, - pageSizeOptions: ["10", "20", "50", "100"], + pageSizeOptions, onShowSizeChange: (page, size) => { const { total } = tableListPageObj; sizeChange({ @@ -122,4 +123,4 @@ export const toDecimal_n = (num, decimalPlaces) => { const multiplier = Math.pow(10, decimalPlaces); const roundedNum = Math.round(num * multiplier) / multiplier; return roundedNum.toFixed(decimalPlaces); -}; +}; \ No newline at end of file