diff --git a/pc4mobx/hrmSalary/apis/mySalaryBenefits.js b/pc4mobx/hrmSalary/apis/mySalaryBenefits.js index b79a6718..f197ba27 100644 --- a/pc4mobx/hrmSalary/apis/mySalaryBenefits.js +++ b/pc4mobx/hrmSalary/apis/mySalaryBenefits.js @@ -52,5 +52,5 @@ export const saveSecondaryPwd = params => { return WeaTools.callApi("/api/hrm/secondarypwd/saveSecondaryPwd", "POST", params); }; export const salaryBillGetToken = params => { - return WeaTools.callApi("/api/bs/hrmsalary/salaryBill/getToken", "GET", params); + return postFetch("/api/bs/hrmsalary/salaryBill/getToken", params); }; diff --git a/pc4mobx/hrmSalary/apis/statistics.js b/pc4mobx/hrmSalary/apis/statistics.js index 17323093..929f41b9 100644 --- a/pc4mobx/hrmSalary/apis/statistics.js +++ b/pc4mobx/hrmSalary/apis/statistics.js @@ -138,3 +138,15 @@ export const exportSalaryList = (params) => { export const savePageListSetting = (params) => { return postFetch("/api/bs/hrmsalary/common/pageList/save/setting", params); }; +//薪酬统计报表-保存页面模板 +export const savePageListTemplate = (params) => { + return postFetch("/api/bs/hrmsalary/common/pageList/template/save", params); +}; +//薪酬统计报表-获取页面模板 +export const getPageListTemplatelist = (params) => { + return postFetch("/api/bs/hrmsalary/common/pageList/template/list", params); +}; +//薪酬统计报表-切换个体页面模板 +export const changePageListTemplate = (params) => { + return postFetch("/api/bs/hrmsalary/common/pageList/template/change", params); +}; diff --git a/pc4mobx/hrmSalary/components/CustomBrowser/components/customBrowserMutiRight.js b/pc4mobx/hrmSalary/components/CustomBrowser/components/customBrowserMutiRight.js index ed56dd09..a77e6e4d 100644 --- a/pc4mobx/hrmSalary/components/CustomBrowser/components/customBrowserMutiRight.js +++ b/pc4mobx/hrmSalary/components/CustomBrowser/components/customBrowserMutiRight.js @@ -66,6 +66,26 @@ class CustomBrowserMutiRight extends Component { clearTimeout(timeout); this.props.onDoubleClick && this.props.onDoubleClick(key); }; + onDragStart = (obj) => { + clearTimeout(timeout); + this.props.checkedCb && this.props.checkedCb([]); + }; + onDrop = (obj) => { + const dragNodes = obj.dragNodesKeys; + const targetNode = obj.node.props.eventKey; + const result = []; + this.nodeIds.filter((item) => { + return dragNodes.indexOf(item) === -1; + }).forEach((id) => { + if (id === targetNode) { + dragNodes.forEach((drag) => { + result.push(this.nodeObj[drag]); + }); + } + result.push(this.nodeObj[id]); + }); + this.props.onDrag && this.props.onDrag(result); + }; render() { const { height, checkedKeys } = this.props; @@ -76,9 +96,8 @@ class CustomBrowserMutiRight extends Component {
+ onSelect={this.checkHandler} onDoubleClick={this.onDoubleClick} selectedKeys={checkedKeys} + onDragStart={this.onDragStart} onDrop={this.onDrop}> {this.generateTreeNodes()} diff --git a/pc4mobx/hrmSalary/components/CustomBrowser/components/customTransferDialog.js b/pc4mobx/hrmSalary/components/CustomBrowser/components/customTransferDialog.js index 919ec05c..94aaad3f 100644 --- a/pc4mobx/hrmSalary/components/CustomBrowser/components/customTransferDialog.js +++ b/pc4mobx/hrmSalary/components/CustomBrowser/components/customTransferDialog.js @@ -34,7 +34,7 @@ class CustomTransferDialog extends Component { componentWillReceiveProps(nextProps, nextContext) { if (nextProps.visible !== this.props.visible && nextProps.visible) { - this.getData(true); + this.getData(true, nextProps); if (nextProps.datas) { this.setState({ leftListSelectedData: _.values(nextProps.datas), rightDatas: _.values(nextProps.datas) @@ -49,9 +49,9 @@ class CustomTransferDialog extends Component { } } - getData = (init = false) => { + getData = (init = false, props) => { const { query } = this.state; - const { completeURL, convertDatasource, dataParams = {} } = this.props; + const { completeURL, convertDatasource, dataParams = {} } = props || this.props; let payload = { ...dataParams, ...query }; this.setState({ loading: true }); postFetch(completeURL, payload).then(({ status, data }) => { @@ -188,6 +188,7 @@ class CustomTransferDialog extends Component { data={rightDatas} checkedKeys={rightCheckedKeys} checkedCb={rightCheckedKeys => this.setState({ rightCheckedKeys })} onDoubleClick={this.onRightDoubleClick} + onDrag={(data) => {this.setState({rightDatas: data})}} />
diff --git a/pc4mobx/hrmSalary/index.js b/pc4mobx/hrmSalary/index.js index 27bc86f2..272bdbdd 100644 --- a/pc4mobx/hrmSalary/index.js +++ b/pc4mobx/hrmSalary/index.js @@ -54,68 +54,16 @@ import TopologyMap from "./pages/topologyMap"; import SupplementaryCalc from "./pages/supplementaryCalc"; import VariableSalary from "./pages/variableSalary"; import Layout from "./layout"; - import stores from "./stores"; import "./style/index"; - // 读取系统多语言配置 let getLocaleLabel = WeaLocaleProvider.getLocaleLabel.bind(this, "hrmSalary"); - // 不需要读取系统多语言 getLocaleLabel = function (nextState, replace, callback) { callback(); }; - -const Home = (props) => props.children; - const SocialSecurityBenefits = (props) => props.children; const DataAcquisition = (props) => props.children; - -// historicalPayroll 历史工资单查看 -// salaryAdjustmentRecords 调薪记录查看 - -// mySalaryMobile 我的薪资福利-移动端 -// mySalaryMobile 我的薪资福利-移动端 -// mySalary 我的薪资福利 -// mySalaryView 我的薪资福利-查看工资单 -// socialSecurityBenefits 社保福利 -// programme 社保福利方案 -// archives 社保福利档案 -// standingBook 社保福利台账 -// sbofflineComparison 社保福利台账线下对比 -// salaryItem 薪资项目管理 -// salaryFile 薪资档案 -// dataAcquisition 数据采集 -// CumDeduct 累计专项附加扣除 -// otherDeduct 其他免税扣除 -// cumSituation 往期累计情况 -// attendance 考勤引用 -// specialAddDeduction 专项附件扣除 -// ledger 薪资账套 -// calculate 薪资核算 -// calculateDetail 核算详情 -// DoCalcDetail 核算详情页面-新 -// CalcView 核算查看页面-新 -// OfflineCompare 薪资核算线下对比-新 -// placeOnFileDetail 核算归档详情 -// compareDetail 线下线上对比 -// payroll 工资单发放 -// declare 个税申报表 -// generateDeclarationDetail 个税单详情 -// taxRate 个税税率表 -// taxAgent 个税扣缴义务人 -// mobilepayroll 移动端工资单 -// sysconfig 系統配置 -// sysconfig-1 规则配置 -// appconfig 应用配置 -// fieldManagement 字段管理 -// analysisOfSalaryStatistics 薪酬统计分析 -// reportView 薪酬报表查看 -// externalPersonManage 非系统人员管理 -// adjustSalaryManage 档案管理 -// supplementaryCalc 补算 -// variableSalary 浮动薪酬 - const Routes = ( diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/conditions.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/conditions.js index 6a19614c..924662b3 100644 --- a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/conditions.js +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/conditions.js @@ -1,4 +1,3 @@ -import React from "react"; import { WeaLocaleProvider } from "ecCom"; const { getLabel } = WeaLocaleProvider; @@ -219,3 +218,47 @@ export const salaryDetailSearchConditions = [ col: 2 } ]; +export const tempCondition = [ + { + items: [ + { + conditionType: "INPUT", + domkey: ["name"], + fieldcol: 14, + label: "模板名称", + lanId: 111, + labelcol: 6, + value: "", + rules: "required|string", + viewAttr: 3 + }, + { + conditionType: "SELECT", + domkey: ["sharedType"], + fieldcol: 14, + label: "可见性", + lanId: 111, + labelcol: 6, + options: [], + rules: "required|string", + viewAttr: 3 + }, + { + conditionType: "SELECT", + domkey: ["limitIds"], + fieldcol: 14, + label: "可见性范围", + lanId: 111, + labelcol: 6, + options: [], + detailtype: 3, + multiple: true, + rules: "", + viewAttr: 1, + hide: true + } + ], + title: "", + defaultshow: true + } +]; diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/employeeDetails.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/employeeDetails.js index 48816b74..6429bba6 100644 --- a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/employeeDetails.js +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/employeeDetails.js @@ -108,7 +108,7 @@ class EmployeeDetails extends Component { pagination={pagination} loading={loading} columns={columns} - scroll={{ y: `calc(100vh - 174px)` }} + scroll={{ y: `calc(100vh - 182px)` }} /> ); } diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/reportList.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/reportList.js index dccae63f..586a1216 100644 --- a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/reportList.js +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/reportList.js @@ -5,7 +5,7 @@ * Date: 2023/4/17 */ import React, { Component } from "react"; -import { WeaLocaleProvider } from "ecCom"; +import { WeaAlertPage, WeaLocaleProvider } from "ecCom"; import { Button, Col, Dropdown, Menu, message, Modal, Row } from "antd"; import { reportStatisticsReportDelete, @@ -14,7 +14,6 @@ import { } from "../../../apis/statistics"; import "../index.less"; -const SubMenu = Menu.SubMenu; const { getLabel } = WeaLocaleProvider; class ReportList extends Component { @@ -87,7 +86,9 @@ class ReportList extends Component { return ( { - _.isEmpty(dataSource) ?
{getLabel(111, "暂无数据")}
: + _.isEmpty(dataSource) ? +
暂无数据
+
: _.map(dataSource, it => { const { reportName, dimension, id, dimensionId, isShare } = it; return this.handleGoReportView(id)}> diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js index 59995acd..cbc72a7c 100644 --- a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js @@ -5,15 +5,20 @@ * Date: 2024/3/26 */ import React, { Component } from "react"; +import { toJS } from "mobx"; import { inject, observer } from "mobx-react"; import { WeaTableNew } from "comsMobx"; -import { WeaLoadingGlobal, WeaLocaleProvider } from "ecCom"; +import { WeaLoadingGlobal, WeaLocaleProvider, WeaSelect } from "ecCom"; import { message, Spin } from "antd"; -import { toJS } from "mobx"; import { getIframeParentHeight } from "../../../util"; import { sysConfCodeRule } from "../../../apis/ruleconfig"; import CustomTransferDialog from "../../../components/CustomBrowser/components/customTransferDialog"; +import SalaryDetailsTempDialog from "./salaryDetailsTempDialog"; +import { MonthRangePicker } from "../../reportView/components/statisticalMicroSettingsSlide"; +import AdvanceInputBtn from "../components/advanceInputBtn"; +import SearchPannel from "../components/searchPannel"; import * as API from "../../../apis/statistics"; +import cs from "classnames"; import "../index.less"; const WeaTableComx = WeaTableNew.WeaTable; @@ -25,24 +30,32 @@ class SalaryDetails extends Component { constructor(props) { super(props); this.state = { - loading: false, dataSource: [], columns: [], selectedRowKeys: [], - pageInfo: { current: 1, pageSize: 10, total: 0 }, payload: {}, - showTotalCell: false, updateSum: true, + loading: false, dataSource: [], columns: [], selectedRowKeys: [], tempPageList: [], sumRow: {}, + pageInfo: { current: 1, pageSize: 10, total: 0 }, payload: {}, templateId: "", + showTotalCell: false, updateSum: true, tempDialog: { visible: false, setting: [], id: "", template: {} }, transferDialog: { visible: false, searchParamsKey: "name", dataParams: { page: "salary_details_report" }, saveLoading: false, - completeURL: "/api/bs/hrmsalary/common/pageList/get/setting", convertDatasource: datas => { + completeURL: "", convertDatasource: datas => { return { - listDatas: _.map(datas.setting, o => ({ id: o.id, name: o.name })), + listDatas: _.map(datas.setting, o => ({ id: o.id || o.column, name: o.name || o.text })), checked: this.converCheckedCol(datas) }; - } + }, + type: "default" } }; } - componentDidMount() { - this.getSalaryList(this.props); + async componentDidMount() { + const [{ data: confCode }] = await Promise.all([sysConfCodeRule({ code: "OPEN_ACCT_RESULT_SUM" })]); + this.setState({ + showTotalCell: confCode === "1" + }, () => { + this.getSalaryList(this.props); + this.getPageListTemplatelist(); + }); window.addEventListener("message", this.handleReceive, false); + window.addEventListener("resize", () => this.forceUpdate(), false); } componentWillReceiveProps(nextProps, nextContext) { @@ -53,9 +66,21 @@ class SalaryDetails extends Component { componentWillUnmount() { window.removeEventListener("message", this.handleReceive, false); + window.removeEventListener("message", () => this.forceUpdate(), false); this.setState(({ selectedRowKeys: [] })); } + getPageListTemplatelist = () => { + API.getPageListTemplatelist({ page: "salary_details_report" }).then(({ status, data }) => { + if (status) { + this.setState({ + tempPageList: _.map(data, o => ({ ...o, key: String(o.id), showname: o.name })), + templateId: !_.isEmpty(_.find(data, o => !!o.checked)) ? String(_.find(data, o => !!o.checked).id) : "", + transferDialog: { ...this.state.transferDialog, visible: false, type: "default" } + }); + } + }); + }; handleReceive = ({ data }) => { const { type, payload: { id, params } = {} } = data; const { pageInfo } = this.state; @@ -86,7 +111,7 @@ class SalaryDetails extends Component { const { attendanceStore: { salaryDetailSearchForm, tableStore }, dateRange } = props || this.props; const [startDateStr, endDateStr] = dateRange; const { taxAgentIds, subcompanyIds, departmentIds, ...extra } = salaryDetailSearchForm.getFormParams(); - const { pageInfo, transferDialog } = this.state; + const { pageInfo, transferDialog, updateSum } = this.state; const payload = { taxAgentIds: taxAgentIds ? taxAgentIds.split(",") : [], departmentIds: departmentIds ? departmentIds.split(",") : [], @@ -94,45 +119,50 @@ class SalaryDetails extends Component { ...extra, ...pageInfo, startDateStr, endDateStr }; this.setState({ loading: true }); - API.getSalaryList(payload).then(async ({ status, data }) => { - // API.getSalaryListSum(payload), - const [{ data: confCode }] = await Promise.all([sysConfCodeRule({ code: "OPEN_ACCT_RESULT_SUM" })]); + API.getSalaryList(payload).then(({ status, data }) => { + if (updateSum) this.getSalaryListSum(payload); this.setState({ loading: false }); if (status) { - const { dataKey, pageInfo: pageparams } = data; + const { columns, dataKey, pageInfo: pageparams } = data; const { list: dataSource, pageNum: current, total, pageSize } = pageparams; this.setState({ - dataSource, pageInfo: { ...pageInfo, current, total, pageSize }, payload, - showTotalCell: confCode === "1", transferDialog: { ...transferDialog, cancel: false } + columns, dataSource, pageInfo: { ...pageInfo, current, total, pageSize }, payload }, () => tableStore.getDatas(dataKey.datas)); } }).catch(() => this.setState({ loading: false })); }; + getSalaryListSum = (payload) => { + API.getSalaryListSum(payload).then(({ status, data }) => { + if (status) this.setState({ sumRow: data.sumRow }); + }); + }; handleExportSalaryList = (key) => { - const { attendanceStore: { tableStore } } = this.props; - let { selectedRowKeys, payload } = this.state; + const { attendanceStore: { tableStore }, salaryDetailShowType } = this.props; + let { selectedRowKeys, payload, columns: tempCols } = this.state; + const customCols = _.filter(toJS(tableStore.columns), (item) => item.display === "true" && item.dataIndex !== "acctTimes"); + const columns = salaryDetailShowType === "1" ? _.filter(tempCols, o => o.column !== "acctTimes") : customCols; if (key === "SELECTED" && selectedRowKeys.length === 0) { message.warning(getLabel(543345, "请选择需要导出的数据!")); return; } WeaLoadingGlobal.start(); const promise = API.exportSalaryList({ - ...payload, ids: key === "SELECTED" ? selectedRowKeys : [], - columns: _.map(_.filter(toJS(tableStore.columns), (item) => item.display === "true" && item.dataIndex !== "acctTimes"), o => o.dataIndex) + ...payload, ids: key === "SELECTED" ? selectedRowKeys : [], columns: _.map(columns, o => o.column || o.dataIndex) }); }; getColumns = () => { - const { attendanceStore: { tableStore } } = this.props; - const { dataSource, pageInfo, selectedRowKeys, showTotalCell, payload, updateSum, transferDialog } = this.state; - const columns = _.filter(toJS(tableStore.columns), (item) => item.display === "true" && item.dataIndex !== "acctTimes"); - const sumRowlistUrl = showTotalCell ? "/api/bs/hrmsalary/report/statistics/employee/salaryListSum" : ""; - if (!_.isEmpty(columns) && !transferDialog.visible && !transferDialog.cancel) { + const { attendanceStore: { tableStore }, salaryDetailShowType } = this.props; + const { + columns: tempCols, dataSource, pageInfo, selectedRowKeys, showTotalCell, sumRow, transferDialog + } = this.state; + const customCols = _.filter(toJS(tableStore.columns), (item) => item.display === "true" && item.dataIndex !== "acctTimes"); + const columns = salaryDetailShowType === "1" ? _.filter(tempCols, o => o.column !== "acctTimes") : customCols; + if (!_.isEmpty(columns)) { this.postMessageToChild({ - dataSource, pageInfo, selectedRowKeys, showTotalCell, calcDetail: true, tableScrollHeight: 154, - sumRowlistUrl, payload: { ...payload, updateSum }, + dataSource, pageInfo, selectedRowKeys, showTotalCell, calcDetail: true, tableScrollHeight: 154, sumRow, columns: _.map(columns, (it, idx) => ({ - ...it, - width: (it.dataIndex === "taxAgent" || it.dataIndex === "salarySob") ? 176 : it.oldWidth, + dataIndex: it.column || it.dataIndex, title: it.text || it.title, calcDetail: true, + width: (it.dataIndex === "taxAgent" || it.dataIndex === "salarySob") ? 176 : (it.width || it.oldWidth), fixed: (idx === 1 || idx === 0 || idx === 2) ? "left" : "", ellipsis: true })) @@ -140,15 +170,27 @@ class SalaryDetails extends Component { } return []; }; - handleSetDefCols = () => this.setState({ transferDialog: { ...this.state.transferDialog, visible: true } }); + handleSetDefCols = () => this.setState({ + transferDialog: { + ...this.state.transferDialog, completeURL: "/api/bs/hrmsalary/common/pageList/get/setting", visible: true, + dataParams: { page: "salary_details_report" } + } + }); converCheckedCol = (data) => { - return _.reduce(data.checked, (pre, cur) => { - const item = _.find(data.setting, k => k.id === cur); - if (!_.isEmpty(item)) return [...pre, item]; + return _.reduce(data.checked || [], (pre, cur) => { + const item = _.find(data.setting, k => (k.id === cur) || (k.column === cur.column)); + if (!_.isEmpty(item)) return [...pre, { ...item, id: item.id || item.column, name: item.name || item.text }]; return pre; }, []); }; savePageListSetting = (values) => { + const { transferDialog, tempDialog } = this.state, { type } = transferDialog; + if (type === "temp") { + this.setState({ + tempDialog: { ...tempDialog, visible: true, setting: _.map(values, o => o.id) } + }); + return; + } const payload = { page: "salary_details_report", setting: _.map(values, o => o.id) @@ -158,39 +200,99 @@ class SalaryDetails extends Component { this.setState({ transferDialog: { ...this.state.transferDialog, saveLoading: false } }); if (status) { message.success(getLabel(111, "操作成功!")); - this.setState({ transferDialog: { ...this.state.transferDialog, visible: false } }, () => this.getSalaryList()); + this.setState({ + transferDialog: { ...this.state.transferDialog, visible: false, type: "default" } + }, () => this.getSalaryList()); } else { message.error(errormsg); } }); }; + handelAddTemp = (templateId) => { + const { transferDialog, tempDialog, tempPageList } = this.state; + this.setState({ + transferDialog: { + ...transferDialog, visible: true, type: "temp", + dataParams: { ...transferDialog.dataParams, id: templateId }, + completeURL: "/api/bs/hrmsalary/common/pageList/template/get" + }, + tempDialog: { ...tempDialog, id: templateId, template: _.find(tempPageList, o => o.key === templateId) } + }); + }; + changePageListTemplate = (templateId) => { + this.setState({ templateId }, () => { + API.changePageListTemplate({ page: "salary_details_report", templateId }).then(({ status, errormsg }) => { + if (status) { + message.success(getLabel(111, "操作成功!")); + this.getSalaryList(); + } else { + message.error(errormsg); + } + }); + }); + }; render() { - const { loading, dataSource, transferDialog } = this.state; - const { attendanceStore: { tableStore } } = this.props; - return ( -
- -