diff --git a/pc4mobx/hrmSalary/apis/calculate.js b/pc4mobx/hrmSalary/apis/calculate.js index 85805d5c..a41a7c07 100644 --- a/pc4mobx/hrmSalary/apis/calculate.js +++ b/pc4mobx/hrmSalary/apis/calculate.js @@ -95,7 +95,10 @@ export const comparisonresultList = (params) => { export const refreshTaxAgent = (params) => { return postFetch("/api/bs/hrmsalary/salaryacct/acctemployee/refreshTaxAgent", params); }; - +// 核算人员--刷新薪资核算人员的 +export const refreshAcctemployee = (params) => { + return postFetch("/api/bs/hrmsalary/salaryacct/acctemployee/refresh", params); +}; // 薪资核算-编辑表单 export const acctresultDetail = (params) => { return WeaTools.callApi("/api/bs/hrmsalary/salaryacct/acctresult/detail", "GET", params); diff --git a/pc4mobx/hrmSalary/apis/statistics.js b/pc4mobx/hrmSalary/apis/statistics.js index 76056002..17323093 100644 --- a/pc4mobx/hrmSalary/apis/statistics.js +++ b/pc4mobx/hrmSalary/apis/statistics.js @@ -134,3 +134,7 @@ export const getSalaryListSum = (params) => { export const exportSalaryList = (params) => { return postExportFetch("/api/bs/hrmsalary/report/statistics/employee/exportSalaryList", params); }; +//薪酬统计报表-保存全局自定义列配置 +export const savePageListSetting = (params) => { + return postFetch("/api/bs/hrmsalary/common/pageList/save/setting", params); +}; diff --git a/pc4mobx/hrmSalary/apis/variableSalary.js b/pc4mobx/hrmSalary/apis/variableSalary.js new file mode 100644 index 00000000..1bd063d0 --- /dev/null +++ b/pc4mobx/hrmSalary/apis/variableSalary.js @@ -0,0 +1,53 @@ +import { WeaTools } from "ecCom"; +import { postExportFetch, postFetch } from "../util/request"; + +//浮动薪酬项目列表 +export const getVariableSalaryItemList = params => { + return postFetch("/api/bs/hrmsalary/variableSalaryItem/listPage", params); +}; +//删除浮动薪酬项目 +export const deleteVariableSalaryItem = params => { + return postFetch("/api/bs/hrmsalary/variableSalaryItem/delete", params); +}; +//获取浮动薪酬项目详情 +export const getVariableSalaryItemDetail = params => { + return postFetch("/api/bs/hrmsalary/variableSalaryItem/getDetail", params); +}; +//保存/更新 浮动薪酬项目 +export const saveVariableSalaryItem = params => { + return postFetch("/api/bs/hrmsalary/variableSalaryItem/save", params); +}; + +//创建浮动薪酬档案时获取项目信息 +export const getCreateForm = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/getCreateForm", params); +}; +//创建浮动薪酬档案 +export const createVariableSalary = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/createData", params); +}; +//创建浮动薪酬档案 +export const getVariableSalaryList = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/list", params); +}; +//导入浮动薪酬档案 +export const importVariableSalary = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/importData", params); +}; +//删除浮动薪酬档案 +export const deleteVariableSalary = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/deleteSelectData", params); +}; +//获取浮动薪酬档案明细 +export const getVariableSalaryDetail = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/getDetail", params); +}; +// 获取当前管理员下的所有的个税扣缴义务人 +export const getAdminTaxAgentList = () => { + return WeaTools.callApi("/api/bs/hrmsalary/taxAgent/selectList", "GET", { isShare: false }); +}; +// 浮动薪酬档案导出 +export const exportVariableSalary = (params) => { + return postExportFetch("/api/bs/hrmsalary/variableSalary/export", params); +}; + diff --git a/pc4mobx/hrmSalary/components/CustomBrowser/components/associativeTreeMult.js b/pc4mobx/hrmSalary/components/CustomBrowser/components/associativeTreeMult.js new file mode 100644 index 00000000..f7e975c3 --- /dev/null +++ b/pc4mobx/hrmSalary/components/CustomBrowser/components/associativeTreeMult.js @@ -0,0 +1,84 @@ +/* + * 自定义组件 + * 下拉树选择框 + * @Author: 黎永顺 + * @Date: 2024/9/24 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { WeaLocaleProvider } from "ecCom"; +import { TreeSelect } from "antd"; +import classNames from "classnames"; + +const getLabel = WeaLocaleProvider.getLabel; + +class AssociativeTreeMult extends Component { + constructor(props) { + super(props); + this.state = { + data: [] + }; + this.selectedData = {}; + } + + componentDidMount() { + const { treeData } = this.props; + this.setState({ data: this.filterTree(treeData) }); + } + + handleChange = (values) => { + this.selectedData = {}; + values.forEach((v) => { + let item = this.getItemById(v); + if (item) this.selectedData[v] = item; + }); + this.props.onChange && this.props.onChange(values, this.selectedData); + }; + getItemById = (id) => { + const { data } = this.state, { datas } = this.props; + if (datas[id]) return datas[id]; + if (!_.isEmpty(data)) { + for (let i = 0; i < data.length; i++) { + if (id === data[i].id) return data[i]; + } + } + }; + filterTree = (nodes) => { + const selectableNodes = []; + const recurse = (nodes) => { + nodes.forEach((node) => { + if (node.selectable) selectableNodes.push(node); + if (node.children) recurse(node.children); + }); + }; + recurse(nodes); + return selectableNodes; + }; + + render() { + const { viewAttr, selectedValues, datas, isSingle, treeData } = this.props; + const clsname = classNames({ + "required": (viewAttr === 3 || viewAttr === "3") && _.isEmpty(selectedValues) + }); + const tProps = { + treeData, + multiple: true, + allowClear: false, + treeCheckable: true, + style: { width: "100%" }, + treeDefaultExpandAll: true, + value: selectedValues, + onChange: this.handleChange, + dropdownMatchSelectWidth: true, + dropdownStyle: { minWidth: 200, maxHeight: 280, overflowY: "auto" }, + getPopupContainer: (triggerNode) => triggerNode.parentNode + }; + return ( + + ); + } +} + +export default AssociativeTreeMult; diff --git a/pc4mobx/hrmSalary/components/CustomBrowser/components/customTransferDialog.js b/pc4mobx/hrmSalary/components/CustomBrowser/components/customTransferDialog.js new file mode 100644 index 00000000..919ec05c --- /dev/null +++ b/pc4mobx/hrmSalary/components/CustomBrowser/components/customTransferDialog.js @@ -0,0 +1,206 @@ +/* + * 自定义穿梭框组件 + * 弹框选择 + * @Author: 黎永顺 + * @Date: 2024/8/30 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { WeaDialog, WeaInputSearch, WeaLocaleProvider, WeaNewScroll } from "ecCom"; +import { Button, Col, Row, Spin } from "antd"; +import CustomBrowserMutiLeft from "./customBrowserMutiLeft"; +import CustomBrowserMutiRight from "./customBrowserMutiRight"; +import CustomBrowserOperation from "./customBrowserOperation"; +import { postFetch } from "../../../util/request"; +import "../index.less"; + +const getLabel = WeaLocaleProvider.getLabel; + +class CustomTransferDialog extends Component { + constructor(props) { + super(props); + this.state = { + loading: false, listDatas: [], + query: { [props.searchParamsKey]: "" }, + leftListSelectedKeys: [], // 左侧table选择的keys + leftListSelectedData: [], // 左侧table选择的数据 + rightCheckedKeys: [], //右侧选择的keys + rightDatas: [] // 右侧展示的数据 + }; + this.selectedData = {}; + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visible && nextProps.visible) { + this.getData(true); + if (nextProps.datas) { + this.setState({ + leftListSelectedData: _.values(nextProps.datas), rightDatas: _.values(nextProps.datas) + }); + } + } else if (nextProps.visible !== this.props.visible && !nextProps.visible) { + this.setState({ + query: { [this.props.searchParamsKey]: "" }, + rightDatas: [], rightCheckedKeys: [], leftListSelectedData: [], leftListSelectedKeys: [] + }); + this.selectedData = {}; + } + } + + getData = (init = false) => { + const { query } = this.state; + const { completeURL, convertDatasource, dataParams = {} } = this.props; + let payload = { ...dataParams, ...query }; + this.setState({ loading: true }); + postFetch(completeURL, payload).then(({ status, data }) => { + this.setState({ loading: false }); + if (status && data.list) { + const { pageNum: current, pageSize, total } = data; + this.setState({ + listDatas: convertDatasource ? convertDatasource(data.list) : data.list + }); + } else { + this.setState({ + listDatas: convertDatasource ? convertDatasource(data).listDatas : [], + leftListSelectedData: (init && convertDatasource) ? convertDatasource(data).checked : this.state.leftListSelectedData, + rightDatas: (init && convertDatasource) ? convertDatasource(data).checked : this.state.rightDatas + }); + } + }); + }; + handleOk = () => { + const { rightDatas } = this.state; + this.props.onChange && this.props.onChange(rightDatas); + }; + onLeftListCheck = (keys, datas) => { + const { leftListSelectedData } = this.state; + let targets = leftListSelectedData.concat(datas); + targets = _.uniqBy(targets, "id"); + targets = targets.filter((t) => keys.indexOf(t["id"]) > -1); + this.setState({ leftListSelectedKeys: keys, leftListSelectedData: targets }); + }; + onleftDoubleClick = (data) => { + const { rightDatas } = this.state; + this.setState({ + rightDatas: rightDatas.concat(data), + rightCheckedKeys: [], + leftListSelectedData: [], + leftListSelectedKeys: [] + }); + }; + onRightDoubleClick = (key) => { + const { rightDatas } = this.state; + const newRightDatas = rightDatas.filter(item => String(item.id) !== key); + this.setState({ rightDatas: newRightDatas, rightCheckedKeys: [] }); + }; + moveTo = (direction) => { + const { rightDatas, rightCheckedKeys, listDatas, leftListSelectedData } = this.state; + if (direction === "right") { + this.setState({ + rightDatas: rightDatas.concat(leftListSelectedData), + leftListSelectedData: [], + leftListSelectedKeys: [] + }); + } else if (direction === "left") { + this.setState({ + rightDatas: rightDatas.filter(item => !rightCheckedKeys.some(checkedKey => String(item.id) === checkedKey)), + rightCheckedKeys: [] + }); + } else if (direction === "allToLeft") { + this.setState({ rightDatas: [], rightCheckedKeys: [] }); + } else if (direction === "allToRight") { + if (this.leftListAllActive()) { + this.setState({ + rightDatas: rightDatas.concat(listDatas), + rightCheckedKeys: [], + leftListSelectedData: [], + leftListSelectedKeys: [] + }); + } + } + }; + leftListAllActive = () => { + const { rightDatas, listDatas } = this.state; + let bool = true; + if (_.isEmpty(listDatas)) bool = false; + if (!_.isEmpty(listDatas) && !_.isEmpty(rightDatas)) { + bool = listDatas.filter((l) => !rightDatas.some(r => l.id === r.id)).length !== 0; + } + return bool; + }; + renderTitle = () => { + return (
+ {getLabel(111, "数据选择")} +
+
); + }; + + render() { + const { loading, listDatas, query, leftListSelectedKeys, rightDatas, rightCheckedKeys } = this.state; + const { searchParamsKey, saveLoading } = this.props; + const buttons = [ + , + ]; + let rightActive = false, leftActive = false, rightAllActive = false; + if (leftListSelectedKeys && leftListSelectedKeys.length > 0) rightActive = true; + if (rightCheckedKeys && rightCheckedKeys.length > 0) leftActive = true; + if (rightDatas && rightDatas.length > 0) rightAllActive = true; + let dom = +
+
+ + + this.getData()} + onChange={value => this.setState({ query: { ...query, [searchParamsKey]: value } })} + /> + + +
+ + + +
+
+
+ this.moveTo("right")} + moveToLeft={() => this.moveTo("left")} + moveAllToRight={() => this.moveTo("allToRight")} + moveAllToLeft={() => this.moveTo("allToLeft")} + /> +
+
+ this.setState({ rightCheckedKeys })} + onDoubleClick={this.onRightDoubleClick} + /> +
+
+
; + return ( + this.dialog = dom} title={this.renderTitle()} + className="custom_browser_dialog" draggable={false} style={{ + width: 784, height: 460, minHeight: 200, minWidth: 380, + maxHeight: "90%", maxWidth: "90%", overflow: "hidden", transform: "translate(0px, 0px)" + }} buttons={buttons}>{dom} + ); + } +} + +export default CustomTransferDialog; diff --git a/pc4mobx/hrmSalary/components/CustomBrowser/index.less b/pc4mobx/hrmSalary/components/CustomBrowser/index.less index e2d30e6e..d4d61a16 100644 --- a/pc4mobx/hrmSalary/components/CustomBrowser/index.less +++ b/pc4mobx/hrmSalary/components/CustomBrowser/index.less @@ -1,22 +1,72 @@ .custom_browser_dialog { - .tableSearch { - float: right; - margin: 16px; - position: relative; - z-index: 99; - min-width: 200px; + .wea-hr-muti-dialog-title { + display: flex; + justify-content: space-between; + align-items: center; + } + + .wea-hr-muti-input-table { + background: #f6f6f6; + padding: 8px 16px; + height: 100%; + + .wea-new-table { + background: #FFF; + } } .ant-spin-nested-loading, .ant-spin-container { height: 100%; } - .wea-input-focus { - height: 35px !important; - //width: 100% !important; + .wea-hr-muti-dialog { + height: 100%; + background: #f6f6f6; + padding: 8px 16px; - input { - height: 100% !important; + .wea-hr-muti-input-left, .wea-hr-muti-input-right { + background: #FFF; + } + + .wea-transfer-list { + background: #FFF; + border: 1px solid #e9e9e9; + } + + .wea-input-focus { + height: 35px !important; + width: 100% !important; + + input { + height: 100% !important; + } + } + + .wea-transfer-list-wrapper { + border: none !important; + + .transfer-tree { + padding: 0 !important; + + & > li { + margin: 0; + cursor: pointer; + width: 100%; + position: relative; + padding: 6px 0 6px 20px !important; + border-bottom: 1px solid #e9e9e9; + color: #333; + overflow: hidden; + + .ant-tree-switcher { + display: none !important; + } + + .tree-title { + line-height: 30px; + } + } + } } } } diff --git a/pc4mobx/hrmSalary/index.js b/pc4mobx/hrmSalary/index.js index c2137579..74fefbc7 100644 --- a/pc4mobx/hrmSalary/index.js +++ b/pc4mobx/hrmSalary/index.js @@ -52,6 +52,7 @@ import ExternalPersonManage from "./pages/externalPersonManage"; import AdjustSalaryManage from "./pages/adjustSalaryManage"; import TopologyMap from "./pages/topologyMap"; import SupplementaryCalc from "./pages/supplementaryCalc"; +import VariableSalary from "./pages/variableSalary"; import Layout from "./layout"; import CustomRoutes from "./pages/custom-pages"; @@ -114,6 +115,7 @@ const DataAcquisition = (props) => props.children; // externalPersonManage 非系统人员管理 // adjustSalaryManage 档案管理 // supplementaryCalc 补算 +// variableSalary 浮动薪酬 const Routes = ( @@ -168,6 +170,7 @@ const Routes = ( + {CustomRoutes} ); diff --git a/pc4mobx/hrmSalary/layout.js b/pc4mobx/hrmSalary/layout.js index f1ad9a67..39c9d174 100644 --- a/pc4mobx/hrmSalary/layout.js +++ b/pc4mobx/hrmSalary/layout.js @@ -30,6 +30,7 @@ class Layout extends Component { } componentDidMount() { + this.setFontSize(); if (window.e9LibsConfigCustomF && _.some(window.e9LibsConfigCustomF, o => (_.some(o, k => k === "h_hrmSalary")))) { const src = "/spa/hrmSalary/hrmSalaryCalculateDetail/css/iconfont/iconfont.css"; const link = document.createElement("link"); @@ -41,8 +42,31 @@ class Layout extends Component { top.$(".ant-message").remove(); window.location.hash.indexOf("mobilepayroll") === -1 && stores.taxAgentStore.getPermission(); } + window.addEventListener("storage", this.setFontSize); } + componentWillUnmount() { + window.removeEventListener("storage", this.setFontSize); + } + + setFontSize = () => { + const { themeFontSize } = JSON.parse(localStorage.getItem("theme-themeInfo")) || { themeFontSize: "12" }; + if (window.location.href.indexOf("/spa/hrmSalary/") !== -1) { + const href = `/cloudstore/resource/pc/com/font-size/${themeFontSize}px.css`; + jQuery("#theme-font").remove(); + window.parent.jQuery("#theme-font1").remove(); + jQuery(jQuery("head")[0]).append(``); + const link = document.createElement("link"); + link.setAttribute("rel", "stylesheet"); + link.setAttribute("type", "text/css"); + link.setAttribute("href", href); + link.setAttribute("id", "theme-font1"); + setTimeout(() => { + window.parent.document.head.appendChild(link); + }, 500); + } + }; + render() { return ( {this.props.children} diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js index 3f01a8bf..59995acd 100644 --- a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js @@ -6,13 +6,14 @@ */ import React, { Component } from "react"; import { inject, observer } from "mobx-react"; -import { toJS } from "mobx"; -import { WeaLoadingGlobal, WeaLocaleProvider } from "ecCom"; import { WeaTableNew } from "comsMobx"; +import { WeaLoadingGlobal, WeaLocaleProvider } from "ecCom"; import { message, Spin } from "antd"; -import * as API from "../../../apis/statistics"; +import { toJS } from "mobx"; import { getIframeParentHeight } from "../../../util"; import { sysConfCodeRule } from "../../../apis/ruleconfig"; +import CustomTransferDialog from "../../../components/CustomBrowser/components/customTransferDialog"; +import * as API from "../../../apis/statistics"; import "../index.less"; const WeaTableComx = WeaTableNew.WeaTable; @@ -26,7 +27,16 @@ class SalaryDetails extends Component { this.state = { loading: false, dataSource: [], columns: [], selectedRowKeys: [], pageInfo: { current: 1, pageSize: 10, total: 0 }, payload: {}, - showTotalCell: false, updateSum: true + showTotalCell: false, updateSum: true, + transferDialog: { + visible: false, searchParamsKey: "name", dataParams: { page: "salary_details_report" }, saveLoading: false, + completeURL: "/api/bs/hrmsalary/common/pageList/get/setting", convertDatasource: datas => { + return { + listDatas: _.map(datas.setting, o => ({ id: o.id, name: o.name })), + checked: this.converCheckedCol(datas) + }; + } + } }; } @@ -73,10 +83,10 @@ class SalaryDetails extends Component { childFrameObj && childFrameObj.contentWindow.postMessage(JSON.stringify({ ...payload, i18n }), "*"); }; getSalaryList = (props) => { - const { attendanceStore: { salaryDetailSearchForm, tableStore }, dateRange } = props; + const { attendanceStore: { salaryDetailSearchForm, tableStore }, dateRange } = props || this.props; const [startDateStr, endDateStr] = dateRange; const { taxAgentIds, subcompanyIds, departmentIds, ...extra } = salaryDetailSearchForm.getFormParams(); - const { pageInfo } = this.state; + const { pageInfo, transferDialog } = this.state; const payload = { taxAgentIds: taxAgentIds ? taxAgentIds.split(",") : [], departmentIds: departmentIds ? departmentIds.split(",") : [], @@ -93,7 +103,7 @@ class SalaryDetails extends Component { const { list: dataSource, pageNum: current, total, pageSize } = pageparams; this.setState({ dataSource, pageInfo: { ...pageInfo, current, total, pageSize }, payload, - showTotalCell: confCode === "1" + showTotalCell: confCode === "1", transferDialog: { ...transferDialog, cancel: false } }, () => tableStore.getDatas(dataKey.datas)); } }).catch(() => this.setState({ loading: false })); @@ -113,10 +123,10 @@ class SalaryDetails extends Component { }; getColumns = () => { const { attendanceStore: { tableStore } } = this.props; - const { dataSource, pageInfo, selectedRowKeys, showTotalCell, payload, updateSum } = this.state; + 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)) { + if (!_.isEmpty(columns) && !transferDialog.visible && !transferDialog.cancel) { this.postMessageToChild({ dataSource, pageInfo, selectedRowKeys, showTotalCell, calcDetail: true, tableScrollHeight: 154, sumRowlistUrl, payload: { ...payload, updateSum }, @@ -130,9 +140,33 @@ class SalaryDetails extends Component { } return []; }; + handleSetDefCols = () => this.setState({ transferDialog: { ...this.state.transferDialog, visible: true } }); + converCheckedCol = (data) => { + return _.reduce(data.checked, (pre, cur) => { + const item = _.find(data.setting, k => k.id === cur); + if (!_.isEmpty(item)) return [...pre, item]; + return pre; + }, []); + }; + savePageListSetting = (values) => { + const payload = { + page: "salary_details_report", + setting: _.map(values, o => o.id) + }; + this.setState({ transferDialog: { ...this.state.transferDialog, saveLoading: true } }); + API.savePageListSetting(payload).then(({ status, errormsg }) => { + this.setState({ transferDialog: { ...this.state.transferDialog, saveLoading: false } }); + if (status) { + message.success(getLabel(111, "操作成功!")); + this.setState({ transferDialog: { ...this.state.transferDialog, visible: false } }, () => this.getSalaryList()); + } else { + message.error(errormsg); + } + }); + }; render() { - const { loading, dataSource } = this.state; + const { loading, dataSource, transferDialog } = this.state; const { attendanceStore: { tableStore } } = this.props; return (
+ {/*默认显示列*/} + this.setState({ + transferDialog: { ...transferDialog, visible: false, cancel: true } + })}/>
); } diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/index.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/index.js index 121e334a..f8ac8451 100644 --- a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/index.js +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/index.js @@ -275,7 +275,7 @@ class Index extends Component { render() { const { - taxAgentStore: { statisticsReportBtn }, + taxAgentStore: { statisticsReportBtn, PageAndOptAuth }, attendanceStore: { statisticsForm, reportForm, tableStore } } = this.props; const { @@ -313,7 +313,7 @@ class Index extends Component { ]; - const dropMenuDatas = [ + let dropMenuDatas = [ { key: "log", icon: , content: getLabel(545781, "操作日志") @@ -333,6 +333,11 @@ class Index extends Component { { key: "detail", title: getLabel(111, "员工明细") }, { key: "salaryDetail", title: getLabel(111, "薪资明细") } ]; + dropMenuDatas = selectedKey === "salaryDetail" ? dropMenuDatas.slice(-1) : dropMenuDatas.slice(0, 1); + (PageAndOptAuth.isChief && selectedKey === "salaryDetail") && (dropMenuDatas = [...dropMenuDatas, { + key: "DEF_COLUMN", icon: , content: getLabel(111, "默认显示列"), + onClick: () => this.salaryRef.wrappedInstance.handleSetDefCols() + }]); return ( } selectedKey={selectedKey} @@ -340,8 +345,7 @@ class Index extends Component { buttons={(!statisticsReportBtn && selectedKey === "statistics") ? buttons.slice(-1) : buttons} buttonSpace={10} onChange={selectedKey => this.setState({ selectedKey }, () => this.state.selectedKey === "statistics" && this.initReportFormCondition())} showDropIcon={selectedKey !== "detail"} onDropMenuClick={this.onDropMenuClick} - dropMenuDatas={selectedKey === "salaryDetail" ? dropMenuDatas.slice(-1) : dropMenuDatas.slice(0, 1)} - > + dropMenuDatas={dropMenuDatas}>
this.setState({ showSearchAd: false })} onAdSearch={this.onAdSearch}/>
diff --git a/pc4mobx/hrmSalary/pages/appConfig/index.js b/pc4mobx/hrmSalary/pages/appConfig/index.js index e13000eb..aee9eb68 100644 --- a/pc4mobx/hrmSalary/pages/appConfig/index.js +++ b/pc4mobx/hrmSalary/pages/appConfig/index.js @@ -94,8 +94,8 @@ class AppConfig extends Component { } = this.state; const btns = [ , - , - + // , + // ]; const items = [ { diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryCalcPersonConfirm/index.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryCalcPersonConfirm/index.js index 68b7245f..d4aca862 100644 --- a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryCalcPersonConfirm/index.js +++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryCalcPersonConfirm/index.js @@ -14,6 +14,7 @@ import { addedemployeeList, deleteAcctemployee, reducedemployeeList, + refreshAcctemployee, saveAcctemployee } from "../../../../../apis/calculate"; import { personConfirmSearchConditions } from "./condition"; @@ -90,6 +91,8 @@ class Index extends Component { > , + , ]; break; @@ -180,6 +183,23 @@ class Index extends Component { } }); }; + handleRefresh = () => { + if (!this.handleDebounce) { + this.handleDebounce = _.debounce(() => { + const { routeParams: { salaryAcctRecordId } } = this.props; + refreshAcctemployee({ salaryAcctRecordId }).then(({ status, errormsg }) => { + if (status) { + message.success(getLabel(111, "操作成功!")); + this.queryPCList(); + } else { + message.error(errormsg); + } + }); + this.handleDebounce = null; + }, 500); + } + this.handleDebounce(); + }; render() { const { calculateStore: { PCSearchForm } } = this.props; @@ -242,13 +262,21 @@ class Index extends Component { this.setState({ selectedKey: v }, () => this.queryPCList())} + onChange={v => this.setState({ + selectedKey: v, + pageInfo: { ...pageInfo, current: 1 } + }, () => this.queryPCList())} + onSearch={v => this.setState({ + pageInfo: { ...pageInfo, current: 1 } + }, () => this.queryPCList())} + onAdSearch={v => this.setState({ + pageInfo: { ...pageInfo, current: 1 } + }, () => this.queryPCList())} buttons={this.renderTabBtns()} searchType={["base", "advanced"]} advanceHeight={220} showSearchAd={showSearchAd} setShowSearchAd={bool => this.setState({ showSearchAd: bool })} searchsAd={getSearchs(PCSearchForm, searchConditions, 2, false)} onSearchChange={(v) => PCSearchForm.updateFields({ employeeName: v })} searchsBaseValue={PCSearchForm.getFormParams().employeeName} - onSearch={this.queryPCList} onAdSearch={this.queryPCList} onAdReset={() => PCSearchForm.resetForm()} autoCalculateWidth /> this.setState({ loading: false })); }; + handleQuery = () => { + this.setState({ pageInfo: { ...this.state.pageInfo, current: 1 } }, () => this.queryCalcResultList()); + }; handleBatchEditing = () => { }; diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/index.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/index.js index 54081da1..6bfa4ca9 100644 --- a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/index.js +++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/index.js @@ -28,7 +28,7 @@ class Index extends Component { openAdvanceSearch = () => this.setState({ showSearchAd: !this.state.showSearchAd }); onAdSearch = (bool = true) => { - this.calcTableRef.wrappedInstance.queryCalcResultList(); + this.calcTableRef.wrappedInstance.handleQuery(); bool && this.openAdvanceSearch(); }; init = async () => { diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalcImport/index.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalcImport/index.js index ce58c616..901cb803 100644 --- a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalcImport/index.js +++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalcImport/index.js @@ -156,7 +156,7 @@ class Index extends Component { } }, () => { const { selectItems: salaryItems } = this.state.headerFieldsDialog; - cacheImportField({ salaryItems: salaryItems ? salaryItems.split(",") : [] }) + cacheImportField({ salaryAcctRecordId, salaryItemIds: salaryItems ? salaryItems.split(",") : [] }) .then(({ status, errormsg }) => { if (status) { const payload = { diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/index.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/index.js index 0d1c87fc..fc07e2f2 100644 --- a/pc4mobx/hrmSalary/pages/calculate/doCalc/index.js +++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/index.js @@ -125,6 +125,15 @@ class Index extends Component { case "offlineCompare": window.open(`/spa/hrmSalary/static/index.html#/main/hrmSalary/calcOc/${salaryAcctRecordId}`, "_blank"); break; + case "LOCK": + case "UNLOCK": + const { selectedRowKeys } = this.calc.calcTableRef.wrappedInstance.state; + if (_.isEmpty(selectedRowKeys)) { + message.warning(getLabel(543303, "请选择表格数据!")); + return; + } + this.calc.calcTableRef.wrappedInstance.updateEmpLockStatus({ lockStatus: key, acctEmpIds: selectedRowKeys }); + break; default: break; } @@ -145,6 +154,8 @@ class Index extends Component { {getLabel(81272, "导出全部")} {getLabel(544270, "自定义导出")} {getLabel(543249, "线下对比")} + {getLabel(111, "批量锁定")} + {getLabel(111, "批量解锁")} ); reqBtns = [ diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js index d7229b5d..ab4af5ba 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js @@ -110,7 +110,8 @@ class LedgerSlide extends Component { return { ...item, items: _.map(item.items, it => { - // delete it.formulaContent; + delete it.originFormulaContent; + delete it.originSqlContent; // if (it.id && it.id.length > 4) delete it.id; return { ...it }; }) @@ -118,7 +119,8 @@ class LedgerSlide extends Component { }), items: _.map(_.find(itemGroups, it => it.name === "未分类").items, child => { // if (child.id && child.id.length > 4) delete child.id; - // delete child.formulaContent; + delete child.originFormulaContent; + delete child.originSqlContent; return { ...child }; }) || [], salarySobId: salarySobId || saveSalarySobId diff --git a/pc4mobx/hrmSalary/pages/payrollFiles/components/salaryFileList/index.js b/pc4mobx/hrmSalary/pages/payrollFiles/components/salaryFileList/index.js index efe2605b..24f3cd63 100644 --- a/pc4mobx/hrmSalary/pages/payrollFiles/components/salaryFileList/index.js +++ b/pc4mobx/hrmSalary/pages/payrollFiles/components/salaryFileList/index.js @@ -150,7 +150,7 @@ class Index extends Component { "操作日志": getLabel(545781, "操作日志") }; const childFrameObj = document.getElementById("atdTable"); - childFrameObj.contentWindow.postMessage(JSON.stringify({ ...payload, i18n }), "*"); + childFrameObj && childFrameObj.contentWindow.postMessage(JSON.stringify({ ...payload, i18n }), "*"); }; getSalaryFileList = (props, init = false) => { const { pageInfo } = this.state; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js index 7774309e..fbb75a46 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js @@ -174,7 +174,7 @@ class Index extends Component { if (it === "ackFeedbackStatus" || it === "feedbackStatus") { payrollTempFeedbackForm.updateFields({ [it]: fieldsEchoData[it] ? "1" : "0" }); } else { - payrollTempFeedbackForm.updateFields({ [it]: !_.isEmpty(fieldsEchoData[it]) ? fieldsEchoData[it].toString() : "/" }); + payrollTempFeedbackForm.updateFields({ [it]: (!_.isNil(fieldsEchoData[it]) && fieldsEchoData[it]) ? fieldsEchoData[it].toString() : "/" }); } }); this.setState({ diff --git a/pc4mobx/hrmSalary/pages/reportView/components/condition.js b/pc4mobx/hrmSalary/pages/reportView/components/condition.js index d6668459..0cda350a 100644 --- a/pc4mobx/hrmSalary/pages/reportView/components/condition.js +++ b/pc4mobx/hrmSalary/pages/reportView/components/condition.js @@ -91,36 +91,36 @@ export const condition = [ labelcol: 6, viewAttr: 2 }, - // { - // browserConditionParam: { - // completeParams: {}, - // conditionDataParams: {}, - // dataParams: {}, - // destDataParams: {}, - // hasAddBtn: false, - // hasAdvanceSerach: true, - // idSeparator: ",", - // isAutoComplete: 1, - // isDetail: 0, - // isMultCheckbox: false, - // isSingle: false, - // linkUrl: "", - // pageSize: 10, - // quickSearchName: "", - // replaceDatas: [], - // title: getLabel(111, "岗位"), - // type: "278", - // viewAttr: 2 - // }, - // colSpan: 2, - // conditionType: "BROWSER", - // domkey: ["position"], - // fieldcol: 18, - // isQuickSearch: false, - // label: getLabel(111, "岗位"), - // labelcol: 6, - // viewAttr: 2 - // }, + { + browserConditionParam: { + completeParams: {}, + conditionDataParams: {}, + dataParams: {}, + destDataParams: {}, + hasAddBtn: false, + hasAdvanceSerach: true, + idSeparator: ",", + isAutoComplete: 1, + isDetail: 0, + isMultCheckbox: false, + isSingle: false, + linkUrl: "", + pageSize: 10, + quickSearchName: "", + replaceDatas: [], + title: getLabel(111, "岗位"), + type: "278", + viewAttr: 2 + }, + colSpan: 2, + conditionType: "BROWSER", + domkey: ["position"], + fieldcol: 18, + isQuickSearch: false, + label: getLabel(111, "岗位"), + labelcol: 6, + viewAttr: 2 + }, { browserConditionParam: { completeParams: {}, diff --git a/pc4mobx/hrmSalary/pages/reportView/components/povitpivotChartModal.js b/pc4mobx/hrmSalary/pages/reportView/components/povitpivotChartModal.js index 6a80e8fb..aa5f1bed 100644 --- a/pc4mobx/hrmSalary/pages/reportView/components/povitpivotChartModal.js +++ b/pc4mobx/hrmSalary/pages/reportView/components/povitpivotChartModal.js @@ -36,8 +36,8 @@ class PovitpivotChartModal extends Component { componentWillReceiveProps(nextProps, nextContext) { if (nextProps.visible !== this.props.visible && nextProps.visible) { - const { id, dimensionId, dimensionValue, isShare } = nextProps; - this.getDataPerspective({ id, dimensionId, dimensionValue, isShare }); + const { id, dimensionId, dimensionValue, isShare, salaryStartMonth, salaryEndMonth } = nextProps; + this.getDataPerspective({ id, dimensionId, dimensionValue, isShare, salaryStartMonth, salaryEndMonth }); } else { this.setState({ dataSource: [], @@ -64,11 +64,11 @@ class PovitpivotChartModal extends Component { }); } else if (type === "turn") { if (id === "PAGEINFO") { - const { id, dimensionId, dimensionValue, isShare } = this.props; + const { id, dimensionId, dimensionValue, isShare, salaryStartMonth, salaryEndMonth } = this.props; const { pageNum: current, size: pageSize } = params; this.setState({ pageInfo: { ...pageInfo, current, pageSize } }, () => this.getDataPerspective({ - id, dimensionId, dimensionValue, isShare + id, dimensionId, dimensionValue, isShare, salaryStartMonth, salaryEndMonth })); } } diff --git a/pc4mobx/hrmSalary/pages/reportView/components/reportContent.js b/pc4mobx/hrmSalary/pages/reportView/components/reportContent.js index 7509d3df..9716234a 100644 --- a/pc4mobx/hrmSalary/pages/reportView/components/reportContent.js +++ b/pc4mobx/hrmSalary/pages/reportView/components/reportContent.js @@ -29,8 +29,8 @@ class ReportContent extends Component { chartsType: "0", chartsInfo: {}, povitView: { - visible: false, id: "", isShare: false, - dimensionId: "", dimensionValue: "" + visible: false, id: "", isShare: false, dimensionId: "", dimensionValue: "", salaryStartMonth: "", + salaryEndMonth: "" }, rangSet: { visible: false, reportId: "", @@ -69,10 +69,15 @@ class ReportContent extends Component { if (id === "PIVOTCHART") { const { record } = params; const { dimension: dimensionValue } = record; - const { id: pivotId, dimensionId, isShare } = this.props.report; + const { + id: pivotId, dimensionId, isShare, timeType, salaryEndMonth: end, salaryStartMonth: start + } = this.props.report; + const [salaryStartMonth, salaryEndMonth] = getSalaryMonthValue(timeType); + this.setState({ povitView: { - visible: true, id: pivotId, dimensionId, dimensionValue, isShare + visible: true, id: pivotId, dimensionId, dimensionValue, isShare, + salaryStartMonth: (salaryStartMonth || start) + "-01", salaryEndMonth: (salaryEndMonth || end) + "-01" } }); } else if (id === "PAGEINFO_REPORT") { @@ -282,7 +287,7 @@ class ReportContent extends Component { onCancel={() => this.setState({ povitView: { visible: false, id: "", dimensionId: "", dimensionValue: "", - isShare: false + isShare: false, salaryStartMonth: "", salaryEndMonth: "" } })} /> diff --git a/pc4mobx/hrmSalary/pages/reportView/components/statisticalMicroSettingsSlide.js b/pc4mobx/hrmSalary/pages/reportView/components/statisticalMicroSettingsSlide.js index e82f2eaa..45ee98bb 100644 --- a/pc4mobx/hrmSalary/pages/reportView/components/statisticalMicroSettingsSlide.js +++ b/pc4mobx/hrmSalary/pages/reportView/components/statisticalMicroSettingsSlide.js @@ -149,7 +149,7 @@ class StatisticalMicroSettingsSlide extends Component { hiredate: extra["hiredate1__hiredate2"].value || [], department: _.map(department.valueObj, it => ({ id: it.id, name: it.name })), employee: _.map(employee.valueObj, it => ({ id: it.id, name: it.name })), - // position: _.map(position.valueObj, it => ({ id: it.id, name: it.name })), + position: _.map(position.valueObj, it => ({ id: it.id, name: it.name })), subCompany: _.map(subCompany.valueObj, it => ({ id: it.id, name: it.name })), taxAgent: value ? _.map(value.split(","), (it, idx) => ({ id: it, name: valueSpan.split(",")[idx] })) : [], status: statusVal ? _.map(statusVal.split(","), (it, idx) => ({ diff --git a/pc4mobx/hrmSalary/pages/ruleConfig/conditions.js b/pc4mobx/hrmSalary/pages/ruleConfig/conditions.js index c04384b0..bb22f65e 100644 --- a/pc4mobx/hrmSalary/pages/ruleConfig/conditions.js +++ b/pc4mobx/hrmSalary/pages/ruleConfig/conditions.js @@ -1,16 +1,29 @@ -import React from "react"; -import { WeaLocaleProvider } from "ecCom"; - -const getLabel = WeaLocaleProvider.getLabel; - export const conditions = [ + { + items: [ + { + conditionType: "SELECT", + domkey: ["rule"], + fieldcol: 10, + label: "人员字段", + lanId: 543352, + labelcol: 8, + options: [], + viewAttr: 2 + } + ], + title: "人员校验规则", + lanId: 543357, + defaultshow: true + }, { items: [ { conditionType: "SELECT", domkey: ["orderRule"], fieldcol: 10, - label: getLabel(15512, "排序字段"), + label: "排序字段", + lanId: 15512, labelcol: 8, options: [], viewAttr: 2 @@ -19,28 +32,15 @@ export const conditions = [ conditionType: "SELECT", domkey: ["ascOrDesc"], fieldcol: 10, - label: getLabel(543351, "正序/倒序"), + label: "正序/倒序", + lanId: 543351, labelcol: 8, options: [], viewAttr: 2 } ], - title: getLabel(543356, "排序规则"), - defaultshow: true - }, - { - items: [ - { - conditionType: "SELECT", - domkey: ["rule"], - fieldcol: 10, - label: getLabel(543352, "人员字段"), - labelcol: 8, - options: [], - viewAttr: 2 - } - ], - title: getLabel(543357, "人员校验规则"), + title: "排序规则", + lanId: 543356, defaultshow: true }, { @@ -49,113 +49,14 @@ export const conditions = [ conditionType: "SWITCH", domkey: ["OPEN_APPLICATION_ENCRYPT"], fieldcol: 10, - label: getLabel(526997, "加密设置"), + label: "加密设置", + lanId: 526997, labelcol: 8, viewAttr: 2 } ], - title: getLabel(543358, "加密规则"), - defaultshow: true - }, - { - items: [ - { - conditionType: "SWITCH", - domkey: ["taxDeclarationFunction"], - fieldcol: 10, - label: getLabel(111, "系统算税"), - labelcol: 8, - viewAttr: 1 - }, - { - conditionType: "SWITCH", - domkey: ["WITHDRAW_TAX_DECLARATION"], - fieldcol: 10, - label: getLabel(111, "撤回申报表"), - labelcol: 8, - viewAttr: 2 - } - ], - title: getLabel(111, "算税规则"), - defaultshow: true - }, - { - items: [ - { - conditionType: "SWITCH", - domkey: ["salaryArchiveDelete"], - fieldcol: 10, - label: getLabel(111, "允许删除档案"), - labelcol: 8, - viewAttr: 2 - } - ], - title: getLabel(538004, "薪资档案"), - defaultshow: true - }, - { - items: [ - { - conditionType: "SWITCH", - domkey: ["welBaseDiffByPerAndCom"], - fieldcol: 10, - label: getLabel(111, "区分个人和公司"), - labelcol: 8, - viewAttr: 2 - }, - { - conditionType: "SWITCH", - domkey: ["welBaseAutoAdjust"], - fieldcol: 10, - label: getLabel(111, "导入基数自动调整上/下限"), - labelcol: 8, - viewAttr: 2 - } - ], - title: getLabel(111, "福利档案基数"), - defaultshow: true - }, - { - items: [ - { - conditionType: "SELECT", - domkey: ["matchRule"], - fieldcol: 10, - label: getLabel(111, "匹配规则"), - options: [], - labelcol: 8, - viewAttr: 2 - } - ], - title: getLabel(111, "薪资核算人员匹配规则"), - defaultshow: true - }, - { - items: [ - { - conditionType: "INPUTNUMBER", - domkey: ["salaryAcctFixedColumns"], - fieldcol: 10, - label: getLabel(111, "固定数"), - labelcol: 8, - viewAttr: 2 - } - ], - title: getLabel(111, "薪资核算固定列头数"), - defaultshow: true - }, - { - items: [ - { - conditionType: "SWITCH", - domkey: ["extEmpsWitch"], - fieldcol: 10, - label: getLabel(111, "开启非系统人员"), - labelcol: 8, - viewAttr: 2 - } - ], - title: getLabel(111, "非系统人员"), + title: "加密规则", + lanId: 543358, defaultshow: true }, { @@ -164,7 +65,8 @@ export const conditions = [ conditionType: "SWITCH", domkey: ["salaryShowStatus"], fieldcol: 10, - label: getLabel(111, "显示工资单页签"), + label: "显示工资单页签", + lanId: 111, labelcol: 8, viewAttr: 2 }, @@ -172,7 +74,8 @@ export const conditions = [ conditionType: "SWITCH", domkey: ["adjustShowStatus"], fieldcol: 10, - label: getLabel(111, "显示调薪记录页签"), + label: "显示调薪记录页签", + lanId: 111, labelcol: 8, viewAttr: 2 }, @@ -180,14 +83,141 @@ export const conditions = [ conditionType: "SWITCH", domkey: ["taxAgentShowStatus"], fieldcol: 10, - label: getLabel(111, "显示【个税扣缴义务人】信息"), + label: "显示【个税扣缴义务人】信息", + lanId: 111, labelcol: 8, viewAttr: 2 } ], - title: getLabel(111, "我的薪资福利设置"), + title: "我的薪资福利设置", + lanId: 111, + defaultshow: true + }, + { + items: [ + { + conditionType: "SWITCH", + domkey: ["welBaseDiffByPerAndCom"], + fieldcol: 10, + label: "区分个人和公司", + lanId: 111, + labelcol: 8, + viewAttr: 2 + }, + { + conditionType: "SWITCH", + domkey: ["welBaseAutoAdjust"], + fieldcol: 10, + label: "导入基数自动调整上/下限", + lanId: 111, + labelcol: 8, + viewAttr: 2 + } + ], + title: "福利档案基数", + lanId: 111, + defaultshow: true + }, + { + items: [ + { + conditionType: "SWITCH", + domkey: ["salaryArchiveDelete"], + fieldcol: 10, + label: "允许删除档案", + lanId: 111, + labelcol: 8, + viewAttr: 2 + } + ], + title: "薪资档案", + lanId: 538004, + defaultshow: true + }, + { + items: [ + { + conditionType: "SELECT", + domkey: ["matchRule"], + fieldcol: 10, + label: "匹配规则", + lanId: 111, + options: [], + labelcol: 8, + viewAttr: 2 + }, + { + conditionType: "INPUTNUMBER", + domkey: ["salaryAcctFixedColumns"], + fieldcol: 10, + label: "固定数", + lanId: 111, + labelcol: 8, + viewAttr: 2 + } + ], + title: "薪资核算", + lanId: 111, + defaultshow: true + }, + { + items: [ + { + conditionType: "SWITCH", + domkey: ["taxDeclarationFunction"], + fieldcol: 10, + label: "系统算税", + lanId: 111, + labelcol: 8, + viewAttr: 1 + }, + { + conditionType: "SWITCH", + domkey: ["WITHDRAW_TAX_DECLARATION"], + fieldcol: 10, + label: "撤回申报表", + lanId: 111, + labelcol: 8, + viewAttr: 2 + } + ], + title: "算税规则", + lanId: 111, + defaultshow: true + }, + { + items: [ + { + conditionType: "SELECT", + domkey: ["REPORT_ORGANIZATIN_TYPE"], + fieldcol: 10, + label: "组织信息", + lanId: 111, + options: [], + labelcol: 8, + viewAttr: 2 + } + ], + title: "薪资报表", + lanId: 111, defaultshow: true } + // { + // items: [ + // { + // conditionType: "SWITCH", + // domkey: ["extEmpsWitch"], + // fieldcol: 10, + // label: "开启非系统人员", + // lanId: 111, + // labelcol: 8, + // viewAttr: 2 + // } + // ], + // title: "非系统人员", + // lanId: 111, + // defaultshow: true + // }, ]; export const payloadList = [ { enumClass: "com.engine.salary.sys.enums.SalaryAcctEmployeeRuleEnum" }, diff --git a/pc4mobx/hrmSalary/pages/ruleConfig/index.less b/pc4mobx/hrmSalary/pages/ruleConfig/index.less index a4599477..a7a7c267 100644 --- a/pc4mobx/hrmSalary/pages/ruleConfig/index.less +++ b/pc4mobx/hrmSalary/pages/ruleConfig/index.less @@ -3,7 +3,7 @@ overflow: hidden !important; .ruleWrapper { - padding: 16px; + padding: 8px 16px 0; background: #e5e5e5; height: 100%; overflow: hidden auto; diff --git a/pc4mobx/hrmSalary/pages/ruleConfig/ruleConfig.js b/pc4mobx/hrmSalary/pages/ruleConfig/ruleConfig.js index 3f24a0d6..8c56b847 100644 --- a/pc4mobx/hrmSalary/pages/ruleConfig/ruleConfig.js +++ b/pc4mobx/hrmSalary/pages/ruleConfig/ruleConfig.js @@ -10,10 +10,10 @@ import { WeaLocaleProvider, WeaTools, WeaTop } from "ecCom"; import { message, Modal } from "antd"; import * as API from "../../apis/ruleconfig"; import { conditions, payloadList } from "./conditions"; +import ProgressModal from "../../components/progressModal"; import { renderRuleForm } from "./form"; import { getConditionDomkeys } from "../../util"; import "./index.less"; -import ProgressModal from "../../components/progressModal"; const getKey = WeaTools.getKey; const getLabel = WeaLocaleProvider.getLabel; @@ -39,10 +39,18 @@ class RuleConfig extends Component { const optionsList = { matchRule, orderRule, ascOrDesc, rule }; this.setState({ sysinfo, conditions: _.map(conditions, item => ({ - ...item, + ...item, title: getLabel(item.lanId, item.title), items: _.map(item.items, o => { + o = { ...o, label: getLabel(o.lanId, o.label) }; if (getKey(o) === "matchRule" || getKey(o) === "orderRule" || getKey(o) === "ascOrDesc" || getKey(o) === "rule") { return { ...o, options: _.map(optionsList[getKey(o)], g => ({ key: g.value, showname: g.defaultLabel })) }; + } else if (getKey(o) === "REPORT_ORGANIZATIN_TYPE") { + return { + ...o, options: [ + { key: "0", showname: getLabel(111, "核算时组织信息"), selected: true }, + { key: "1", showname: getLabel(111, "实时组织信息"), selected: false } + ] + }; } else if (getKey(o) === "OPEN_APPLICATION_ENCRYPT") { return { ...o, viewAttr: sysinfo.showEncryptOperationButton === "true" ? 2 : 1 }; } else if (getKey(o) === "taxDeclarationFunction") { @@ -69,7 +77,9 @@ class RuleConfig extends Component { } else if (item === "matchRule") { form.updateFields({ [item]: { value: sysinfo["salaryAcctEmployeeRule"] || "" } }); } else if (item === "taxDeclarationFunction") { - form.updateFields({ [item]: { value: sysinfo["taxDeclarationFunction"] === "0" ? "0" : "1" } }); + form.updateFields({ [item]: { value: sysinfo[item] === "0" ? "0" : (sysinfo[item] || "1") } }); + } else if (item === "REPORT_ORGANIZATIN_TYPE") { + form.updateFields({ [item]: { value: sysinfo[item] === "0" ? "0" : (sysinfo[item] || "0") } }); } else if (item === "taxAgentShowStatus" || item === "salaryShowStatus" || item === "adjustShowStatus") { form.updateFields({ [item]: { value: sysinfo[item] || "1" } }); } else if (item === "OPEN_APPLICATION_ENCRYPT") { @@ -117,6 +127,7 @@ class RuleConfig extends Component { case "taxAgentShowStatus": case "salaryShowStatus": case "adjustShowStatus": + case "REPORT_ORGANIZATIN_TYPE": if (!this.handleDebounce) { this.handleDebounce = _.debounce(() => { const confTitle = { @@ -126,7 +137,8 @@ class RuleConfig extends Component { extEmpsWitch: getLabel(544097, "开启非系统人员"), taxAgentShowStatus: getLabel(111, "显示【个税扣缴义务人】信息"), salaryShowStatus: getLabel(111, "显示工资单页签"), - adjustShowStatus: getLabel(111, "显示调薪记录页签") + adjustShowStatus: getLabel(111, "显示调薪记录页签"), + REPORT_ORGANIZATIN_TYPE: getLabel(111, "组织信息") }; this.unifiedSettings(key, confTitle[key]); this.handleDebounce = null; diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfareArchive/components/welfareTableList/index.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfareArchive/components/welfareTableList/index.js index a9029a86..11524d22 100644 --- a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfareArchive/components/welfareTableList/index.js +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfareArchive/components/welfareTableList/index.js @@ -238,7 +238,7 @@ class Index extends Component { "操作日志": getLabel(545781, "操作日志") }; const childFrameObj = document.getElementById("atdTable"); - childFrameObj.contentWindow.postMessage(JSON.stringify({ ...payload, i18n }), "*"); + childFrameObj && childFrameObj.contentWindow.postMessage(JSON.stringify({ ...payload, i18n }), "*"); }; handleChangeProgramme = (type, schemeId, payload) => { this.getPaymentForm({ ...payload, welfareTypeEnum: welfareTypeEnum[type], schemeId }) diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/components/welfarePlanEditSlide/baseValidateDialog.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/components/welfarePlanEditSlide/baseValidateDialog.js new file mode 100644 index 00000000..631ef2ee --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/components/welfarePlanEditSlide/baseValidateDialog.js @@ -0,0 +1,76 @@ +/* + * 方案信息确认 + * 保存并自动修改基数,仅保存方案设置 + * @Author: 黎永顺 + * @Date: 2024/8/19 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { WeaDialog, WeaLocaleProvider, WeaTransfer } from "ecCom"; +import { Alert, Button } from "antd"; + +const getLabel = WeaLocaleProvider.getLabel; +const WeaTransferList = WeaTransfer.list; + +class BaseValidateDialog extends Component { + constructor(props) { + super(props); + this.state = { dataSource: [] }; + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visible && nextProps.visible) { + this.setState({ + dataSource: _.filter(_.map(nextProps.baseChangeInfo.split("\n"), (g, gi) => ({ + id: gi + 1, name: g + })), k => !!k.name) + }); + } + if (nextProps.visible !== this.props.visible && !nextProps.visible) this.setState({ + dataSource: [] + }); + } + + render() { + const { dataSource } = this.state, { onCancel } = this.props; + const scrollHeight = this.baseChangeRef ? this.baseChangeRef.state.height - 118 : 606.6; + const buttons = [ + , + + ]; + return ( + this.baseChangeRef = dom} + title={getLabel(131329, "信息确认")} buttons={buttons} + style={{ + width: 750, height: 606.6, minHeight: 200, minWidth: 380, + maxHeight: "90%", maxWidth: "90%", overflow: "hidden", transform: "translate(0px, 0px)" + }} + > +
+ + { + !_.isEmpty(dataSource) ? (
+
{it.id}
+
{it.name}
+
)} + height={scrollHeight} checkedCb={() => ({})} checkedKeys={[]} + /> :
{getLabel(111, "无数据变更记录")}
+ } +
+
+ ); + } +} + +export default BaseValidateDialog; diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/components/welfarePlanEditSlide/index.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/components/welfarePlanEditSlide/index.js index d97654e6..da42ac66 100644 --- a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/components/welfarePlanEditSlide/index.js +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/components/welfarePlanEditSlide/index.js @@ -12,6 +12,7 @@ import { Button, message, Modal } from "antd"; import * as API from "../../../../../apis/welfareScheme"; import { getTaxAgentSelectListAsAdmin } from "../../../../../apis/taxAgent"; import { getConditionDomkeys, getSearchs } from "../../../../../util"; +import BaseValidateDialog from "./baseValidateDialog"; import { planConditons } from "../../config"; import cs from "classnames"; @@ -24,7 +25,10 @@ class Index extends Component { constructor(props) { super(props); this.state = { - loading: false, conditions: [], selectedKey: "2", planDatas: [] + loading: false, conditions: [], selectedKey: "2", planDatas: [], + baseValidateDialog: { + visible: false, baseChangeInfo: [], validatePayload: { validate: true, changeData: false } + } }; } @@ -86,21 +90,37 @@ class Index extends Component { if (planForm.getFormParams().sharedType === "1" && _.isEmpty(planForm.getFormParams().taxAgentIds)) { planForm.showError("taxAgentIds", getLabel(111, "\"可见范围\"未填写")); } else { - const { planDatas } = this.state; - const payload = { + const { planDatas, baseValidateDialog } = this.state; + const { validatePayload } = baseValidateDialog; + let payload = { insuranceScheme: { ...planForm.getFormParams(), welfareType: welfareTypeEnum, id, paymentArea: planForm.getFormParams().paymentType }, insuranceSchemeDetailList: planDatas }; + id && (payload = { ...payload, ...validatePayload }); this.setState({ loading: true }); - API[id ? "updateScheme" : "createScheme"](payload).then(({ status, errormsg }) => { + API[id ? "updateScheme" : "createScheme"](payload).then(({ status, data, errormsg }) => { this.setState({ loading: false }); if (status) { - message.success(getLabel(30700, "操作成功!")); - setHasBeenModify(false); - this.props.onClose(true); + if (id && Object.prototype.toString.call(data) === "[object String]" && data.indexOf("\n") !== -1) { + this.setState({ + baseValidateDialog: { + visible: true, baseChangeInfo: data, + validatePayload: { ...baseValidateDialog.validatePayload, validate: false } + } + }); + } else { + message.success(getLabel(30700, "操作成功!")); + setHasBeenModify(false); + this.props.onClose(true); + this.setState({ + baseValidateDialog: { + ...baseValidateDialog, baseChangeInfo: [], validatePayload: { validate: true, changeData: false } + } + }); + } } else { message.error(errormsg); } @@ -194,7 +214,7 @@ class Index extends Component { render() { - const { conditions, planDatas, selectedKey } = this.state; + const { conditions, planDatas, selectedKey, baseValidateDialog } = this.state; const { programmeStore: { planForm }, showOperateBtn } = this.props; return ( + {/* */} + this.setState({ + baseValidateDialog: { + visible: false, baseChangeInfo: [], + validatePayload: { validate: true, changeData: false, ...validatePayload } + } + }, () => !_.isEmpty(validatePayload) && this.save())}/>
} /> ); diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/index.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/index.js index 20d50c88..4f7028ad 100644 --- a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/index.js +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/index.js @@ -13,7 +13,6 @@ import WelfarePlanList from "./components/welfarePlanList"; import LogDialog from "../../../components/logViewModal"; import cs from "classnames"; import "./index.less"; -import { tabList } from "../welfareArchive/config"; const getLabel = WeaLocaleProvider.getLabel; diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/index.less b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/index.less index 5a057203..5566cc8e 100644 --- a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/index.less +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/welfarePlan/index.less @@ -269,3 +269,91 @@ } } + +//方案基数变化 +.baseChangeDialog { + .wea-dialog-body { + overflow-y: hidden; + } + + .baseChangeContent { + background: #F6F6F6; + padding: 16px; + width: 100%; + height: 100%; + + .empty { + width: 100%; + display: flex; + height: 100%; + justify-content: center; + align-items: center; + background: #ffff; + } + + .wea-search-group { + padding: 0; + margin-bottom: 10px; + background: #FFF; + + .wea-form-cell { + padding: 0; + + .wea-form-item { + padding: 10px; + } + } + } + + .logTable { + background: #FFFFFF; + } + + .wea-transfer-list-wrapper { + border: none; + + .ant-tree-switcher { + display: none; + } + + .transfer-tree { + background: #FFF; + border: 1px solid #dadada; + padding: 0; + + & > li:not(:last-child) { + .detailBox .content { + border-bottom: 1px solid #dadada; + } + } + + & > li { + margin: 0 !important; + + .detailBox { + display: flex; + align-items: center; + + .order { + width: 35px; + color: #999; + text-align: center; + } + + .content { + position: relative; + flex: 1; + min-height: 40px; + line-height: 40px; + color: #000; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + } + } + } + } +} + diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js new file mode 100644 index 00000000..8c0983da --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js @@ -0,0 +1,35 @@ +/* + * Author: 黎永顺 + * name:薪酬统计报表-高级搜索 + * Description: + * Date: 2024/3/26 + */ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { Button } from "antd"; +import { WeaInputSearch, WeaLocaleProvider } from "ecCom"; +import "./index.less"; + +const getLabel = WeaLocaleProvider.getLabel; + +@inject("baseTableStore") +@observer +class Index extends Component { + render() { + const { baseTableStore: { VSalryForm }, searchType } = this.props; + return ( +
+ VSalryForm.updateFields({ username: v })} + onSearch={this.props.onAdvanceSearch} + /> + { + searchType === "advance" && + } +
+ ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less new file mode 100644 index 00000000..f301e571 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less @@ -0,0 +1,28 @@ +.variable-advance-search { + display: flex; + align-items: center; + position: relative; + top: -1.5px; + + .wea-advanced-search { + top: 1px; + left: -1px; + height: 28px; + line-height: 1; + border-radius: 0; + position: relative; + color: #474747; + padding: 4px 15px; + } + + .wea-advanced-search:hover { + border: 1px solid #dadada; + color: #474747; + } + + .text-elli { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } +} diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js new file mode 100644 index 00000000..1635c3a4 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js @@ -0,0 +1,146 @@ +/* + * 浮动薪酬 + * 新建编辑薪资档案 + * @Author: 黎永顺 + * @Date: 2024/8/8 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaLocaleProvider, WeaSlideModal, WeaTools } from "ecCom"; +import { Button, message } from "antd"; +import { getSearchs } from "../../../../util"; +import { salaryFileConditions } from "../../conditions"; +import * as API from "../../../../apis/variableSalary"; + +const getKey = WeaTools.getKey; +const getLabel = WeaLocaleProvider.getLabel; + +@inject("baseTableStore") +@observer +class Index extends Component { + constructor(props) { + super(props); + this.state = { + conditions: [], loading: false + }; + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visible && nextProps.visible) { + document.querySelector(".variable_salary_wrapper").classList.add("zIndex0-weaslide-title"); + this.initForm(nextProps); + } else if (nextProps.visible !== this.props.visible && !nextProps.visible) { + document.querySelector(".variable_salary_wrapper").classList.remove("zIndex0-weaslide-title"); + this.props.baseTableStore.initVSSalaryFileForm(); + } + } + + initForm = (props) => { + const { baseTableStore: { VSSalaryFileForm }, detail, taxAgentOption } = props; + API.getCreateForm().then(({ data }) => { + this.setState({ + conditions: [ + ..._.map(salaryFileConditions, item => ({ + ...item, items: _.map(item.items, o => { + if (getKey(o) === "taxAgentIds") { + return { + ...o, viewAttr: !_.isEmpty(detail) ? 1 : 3, label: getLabel(o.lanId, o.label), + options: taxAgentOption, value: detail[getKey(o)] || "" + }; + } + return { + ...o, viewAttr: !_.isEmpty(detail) ? 1 : 3, label: getLabel(o.lanId, o.label), + value: detail[getKey(o)] || "" + }; + }) + })), + { + items: _.map(data, o => ({ + conditionType: "INPUT", + domkey: [String(o.id)], + fieldcol: 14, + label: o.name, + labelcol: 6, + value: detail[`${String(o.id)}_variableItem`] || "", + viewAttr: !_.isEmpty(detail) ? 1 : 2 + })), + title: "", col: 2, + defaultshow: true + } + ] + }, () => { + VSSalaryFileForm.initFormFields(this.state.conditions); + if (!_.isEmpty(detail)) { + VSSalaryFileForm.updateFields({ + employeeId: { + value: detail["employeeId"], + valueSpan: detail["username"], + valueObj: [{ id: detail["employeeId"], name: detail["username"] }] + } + }); + } + }); + }); + }; + convertPayload = (payload) => { + const itemValueList = []; + return _.reduce(_.keys(payload), (pre, cur) => { + if (!_.isNaN(parseInt(cur))) { + itemValueList.push({ variableItemId: cur, itemValue: payload[cur] }); + return { ...pre, itemValueList }; + } + return { ...pre, [cur]: payload[cur] }; + }, {}); + }; + save = () => { + const { baseTableStore: { VSSalaryFileForm }, onSearch, id } = this.props; + VSSalaryFileForm.validateForm().then(f => { + if (f.isValid) { + const payload = VSSalaryFileForm.getFormParams(); + this.setState({ loading: true }); + API.createVariableSalary({ ...this.convertPayload(payload), id }) + .then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + message.success(getLabel(30700, "操作成功")); + this.props.onClose(onSearch()); + } else { + message.error(errormsg); + } + }).catch(() => this.setState({ loading: false })); + } else { + f.showErrors(); + } + }); + }; + renderTitle = () => { + const { loading } = this.state, { title, detail } = this.props; + return
+
+
+
{title}
+
+
+ { + _.isEmpty(detail) && + + } +
+
; + }; + + render() { + const { conditions } = this.state; + const { baseTableStore: { VSSalaryFileForm }, onClose } = this.props; + return ( onClose()} + top={0} width={800} height={100} measureT="%" measureX="px" measureY="%" title={this.renderTitle()} + content={
{getSearchs(VSSalaryFileForm, conditions)}
} + />); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileImportDialog/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileImportDialog/index.js new file mode 100644 index 00000000..c8917e45 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileImportDialog/index.js @@ -0,0 +1,120 @@ +/* + * 浮动薪酬 + * 薪资档案导入 + * @Author: 黎永顺 + * @Date: 2024/8/8 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { WeaCheckbox, WeaDatePicker, WeaFormItem, WeaLocaleProvider } from "ecCom"; +import ImportDialog from "../../../../components/importDialog"; +import * as API from "../../../../apis/variableSalary"; +import { convertToUrlString } from "../../../../util/url"; + +const getLabel = WeaLocaleProvider.getLabel; + +class Index extends Component { + constructor(props) { + super(props); + this.state = { + importDialog: { + nextloading: false, link: "/api/bs/hrmsalary/variableSalary/downloadTemplate", + importResult: {}, imageId: "", hasData: false, salaryMonth: "", + previewUrl: "/api/bs/hrmsalary/variableSalary/preview" + } + }; + } + + componentWillReceiveProps(nextProps, nextContext) { + const { importDialog } = this.state; + if (nextProps.visible !== this.props.visible && nextProps.visible) { + const { baseTableStore: { VSalryForm }, salaryMonth, taxAgentIds } = nextProps; + const payload = { + salaryMonth, taxAgentIds, ...VSalryForm.getFormParams(), hasData: importDialog.hasData + }; + this.setState({ + importDialog: { ...importDialog, salaryMonth, link: `${importDialog.link}?${convertToUrlString(payload)}` } + }); + } else { + this.setState({ + importDialog: { + nextloading: false, link: "/api/bs/hrmsalary/variableSalary/downloadTemplate", hasData: false, + importResult: {}, imageId: "", previewUrl: "/api/bs/hrmsalary/variableSalary/preview", salaryMonth: "" + } + }); + } + } + + handleImport = (payload) => { + const { taxAgentIds } = this.props; + const { importDialog } = this.state; + const { salaryMonth } = importDialog; + this.setState({ importDialog: { ...importDialog, nextloading: true } }); + API.importVariableSalary({ + ...payload, salaryMonth, taxAgentIds: _.isEmpty(taxAgentIds) ? [] : taxAgentIds.split(",") + }).then(({ data, status }) => { + this.setState({ importDialog: { ...importDialog, nextloading: false } }); + if (status) { + this.setState({ + importDialog: { ...importDialog, ...payload, importResult: data } + }); + } + }).catch(() => this.setState({ importDialog: { ...importDialog, nextloading: false } })); + }; + renderFormComponent = () => { + const { baseTableStore: { VSalryForm }, taxAgentIds } = this.props; + const { importDialog } = this.state; + const { salaryMonth: month, hasData } = importDialog; + return
+ + { + const payload = { salaryMonth: val, hasData, taxAgentIds, ...VSalryForm.getFormParams() }; + this.setState({ + importDialog: { + ...importDialog, salaryMonth: val, + link: `/api/bs/hrmsalary/variableSalary/downloadTemplate?${convertToUrlString(payload)}` + } + }); + }}/> + +
; + }; + + render() { + const { importDialog } = this.state; + return ( + this.setState({ + importDialog: { ...importDialog, importResult: {}, imageId: "", link: null } + })} + importParams={this.renderFormComponent()} + exportDataDom={ + { + const { baseTableStore: { VSalryForm }, taxAgentIds } = this.props; + const { salaryMonth } = importDialog; + const payload = { salaryMonth, taxAgentIds, ...VSalryForm.getFormParams(), hasData: val === "1" }; + this.setState({ + importDialog: { + ...importDialog, hasData: val === "1", + link: `/api/bs/hrmsalary/variableSalary/downloadTemplate?${convertToUrlString(payload)}` + } + }); + }} + /> + } + nextCallback={imageId => this.setState({ importDialog: { ...importDialog, imageId } })} + nextUplaodCallback={imageId => this.handleImport({ imageId })} + /> + ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js new file mode 100644 index 00000000..f3b0e52a --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js @@ -0,0 +1,162 @@ +/* + * 浮动薪酬 + * 薪资档案列表 + * @Author: 黎永顺 + * @Date: 2024/8/8 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaLocaleProvider } from "ecCom"; +import { WeaTableNew } from "comsMobx"; +import { message, Modal, Spin } from "antd"; +import * as API from "../../../../apis/variableSalary"; +import { toJS } from "mobx"; + +const WeaTableComx = WeaTableNew.WeaTable; +const getLabel = WeaLocaleProvider.getLabel; + +@inject("baseTableStore") +@observer +class Index extends Component { + constructor(props) { + super(props); + this.state = { + pageInfo: { current: 1, pageSize: 10, total: 0 }, loading: false, dataSource: [], columns: [] + }; + } + + componentDidMount() { + window.addEventListener("message", this.handleReceive, false); + window.addEventListener("resize", this.handleResize, false); + this.getVariableSalaryList(); + } + + componentWillUnmount() { + window.removeEventListener("message", this.handleReceive, false); + window.removeEventListener("resize", this.handleResize, false); + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.isQuery !== this.props.isQuery) this.setState({ + pageInfo: { ...this.state.pageInfo, current: 1 } + }, () => this.getVariableSalaryList()); + } + + handleReceive = async ({ data }) => { + const { type, payload: { id, params } = {} } = data; + if (type === "init") { + this.getColumns(); + } else if (type === "turn") { + switch (id) { + case "PAGEINFO": + this.setState({ + pageInfo: { ...this.state.pageInfo, ...params } + }, () => this.getVariableSalaryList()); + break; + case "DEL": + this.handleDelete([params.id]); + break; + case "VIEW": + this.handleView(params.id); + break; + default: + break; + } + } + }; + getVariableSalaryList = () => { + const { baseTableStore: { VSalryForm, getVariableSalaryList }, salaryMonth, taxAgentIds } = this.props; + const { pageInfo } = this.state; + const { departmentIds } = VSalryForm.getFormParams(); + this.setState({ loading: true }); + getVariableSalaryList({ + ...pageInfo, salaryMonth, taxAgentIds: _.isEmpty(taxAgentIds) ? [] : taxAgentIds.split(","), + ...VSalryForm.getFormParams(), departmentIds: !_.isEmpty(departmentIds) ? departmentIds.split(",") : [] + }).then(({ status, data }) => { + this.setState({ loading: false }); + if (status) { + const { pageInfo: result } = data; + const { list: dataSource, pageNum: current, pageSize, total } = result; + this.setState({ + pageInfo: { ...pageInfo, current, pageSize, total }, dataSource + } + ); + } + }); + }; + handleView = (id) => { + API.getVariableSalaryDetail({ id }).then(({ status, data }) => { + if (status) this.props.onViewSalaryFile(data.data); + }); + }; + handleDelete = (ids) => { + Modal.confirm({ + title: getLabel(111, "信息确认"), + content: getLabel(111, "确认删除吗?"), + onOk: () => { + API.deleteVariableSalary({ ids }).then(({ status, errormsg }) => { + if (status) { + message.success(getLabel(111, "删除成功")); + this.getVariableSalaryList(); + } else { + message.error(errormsg); + } + }); + } + }); + }; + getColumns = () => { + const { baseTableStore: { SFTableStore }, showOperateBtn } = this.props; + const columns = _.map(_.filter(toJS(SFTableStore.columns), (item) => item.display === "true"), (it, idx) => ({ + dataIndex: it.dataIndex, title: it.title, align: "left", + width: 150, ellipsis: true + })); + if (!_.isEmpty(columns)) { + this.postMessageToChild({ + columns, showOperateBtn, dataSource: this.state.dataSource, scrollHeight: 98, + pageInfo: this.state.pageInfo, unitTableType: "variableSalary" + }); + } + return columns; + }; + postMessageToChild = (payload = {}) => { + const i18n = { + "操作": getLabel(30585, "操作"), "查看详情": getLabel(111, "查看详情"), + "共": getLabel(18609, "共"), "条": getLabel(18256, "条"), + "删除": getLabel(111, "删除") + }; + const childFrameObj = document.getElementById("unitTable"); + childFrameObj && childFrameObj.contentWindow.postMessage(JSON.stringify({ ...payload, i18n }), "*"); + }; + + render() { + const { loading, dataSource } = this.state; + const { baseTableStore: { SFTableStore } } = this.props; + const dom = document.querySelector(".wea-new-top-req-content"); + let height = 280; + if (dom && dataSource.length > 0) { + height = (parseFloat(dom.style.height) > 620 && dataSource.length === 10) ? dataSource.length * 46 + 108 : dataSource.length < 10 ? dataSource.length * 46 + 108 : parseFloat(dom.style.height) - 16; + } + return ( + +
+ +