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) ?
()}
+ 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
+
+
+ {
+ _.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 (
+
+
+
+
+
+
+
+
+ );
+ }
+}
+
+export default Index;
diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js
new file mode 100644
index 00000000..cc4d456d
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js
@@ -0,0 +1,80 @@
+import React, { Component } from "react";
+import { inject, observer } from "mobx-react";
+import { WeaDialog, WeaLocaleProvider, WeaTools } from "ecCom";
+import { Button, message } from "antd";
+import { getSearchs } from "../../../../util";
+import { salaryItemsConditions } 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) this.initForm(nextProps);
+ if (nextProps.visible !== this.props.visible && !nextProps.visible) this.props.baseTableStore.initVSSalaryItemForm();
+ }
+
+ initForm = (props) => {
+ const { baseTableStore: { VSSalaryItemForm } } = props;
+ this.setState({
+ conditions: _.map(salaryItemsConditions, item => ({
+ ...item,
+ items: _.map(item.items, o => {
+ if (getKey(o) === "dataType") {
+ return { ...o, options: _.map(o.options, g => ({ ...g, showname: getLabel(g.lanId, g.showname) })) };
+ }
+ return { ...o, label: getLabel(o.lanId, o.label) };
+ })
+ }))
+ }, () => VSSalaryItemForm.initFormFields(this.state.conditions));
+ };
+ save = () => {
+ const { baseTableStore: { VSSalaryItemForm }, onSearch, id } = this.props;
+ VSSalaryItemForm.validateForm().then(f => {
+ if (f.isValid) {
+ const payload = VSSalaryItemForm.getFormParams();
+ this.setState({ loading: true });
+ API.saveVariableSalaryItem({ ...payload, id })
+ .then(({ status, errormsg }) => {
+ this.setState({ loading: false });
+ if (status) {
+ message.success(getLabel(30700, "操作成功"));
+ this.props.onCancel(onSearch());
+ } else {
+ message.error(errormsg);
+ }
+ }).catch(() => this.setState({ loading: false }));
+ } else {
+ f.showErrors();
+ }
+ });
+ };
+
+ render() {
+ const { conditions, loading } = this.state;
+ const { baseTableStore: { VSSalaryItemForm } } = this.props;
+ return (
+ this.props.onCancel()}>{getLabel(111, "取消")},
+
+ ]}
+ >
+ {getSearchs(VSSalaryItemForm, conditions, 1, false)}
+
+ );
+ }
+}
+
+export default Index;
diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemList/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemList/index.js
new file mode 100644
index 00000000..bceb4585
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemList/index.js
@@ -0,0 +1,113 @@
+/*
+ * 浮动薪酬
+ * 薪资项目列表
+ * @Author: 黎永顺
+ * @Date: 2024/8/8
+ * @Wechat:
+ * @Email: 971387674@qq.com
+ * @description:
+*/
+import React, { Component } from "react";
+import { WeaLocaleProvider, WeaTable } from "ecCom";
+import { message, Modal } from "antd";
+import * as API from "../../../../apis/variableSalary";
+
+const getLabel = WeaLocaleProvider.getLabel;
+
+class Index extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ pageInfo: { current: 1, pageSize: 10, total: 0 }, loading: false, dataSource: [], columns: []
+ };
+ }
+
+ componentDidMount() {
+ this.getVariableSalaryItemList();
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (nextProps.isQuery !== this.props.isQuery) this.setState({
+ pageInfo: { ...this.state.pageInfo, current: 1 }
+ }, () => this.getVariableSalaryItemList());
+ }
+
+ getVariableSalaryItemList = () => {
+ const { baseTableStore: { VSalryForm } } = this.props;
+ const { pageInfo } = this.state;
+ const { username: itemName } = VSalryForm.getFormParams();
+ this.setState({ loading: true });
+ API.getVariableSalaryItemList({ ...pageInfo, itemName }).then(({ status, data }) => {
+ this.setState({ loading: false });
+ if (status) {
+ const { list: dataSource, columns, pageNum: current, pageSize, total } = data;
+ this.setState({
+ pageInfo: { ...pageInfo, current, pageSize, total }, dataSource,
+ columns: [
+ ..._.filter(columns, o => o.dataIndex !== "id"),
+ {
+ title: getLabel(111, "操作"), dataIndex: "oprate",
+ render: (__, record) => (
+ this.handleEdit(record.id)}>{getLabel(111, "编辑")}
+ {
+ record.canDelete && this.handleDelete([record.id])}>{getLabel(111, "删除")}
+ }
+ )
+ }
+ ]
+ }
+ );
+ }
+ });
+ };
+ handleEdit = (id) => {
+ API.getVariableSalaryItemDetail({ id }).then(({ status, data }) => {
+ if (status) this.props.onEditSalaryItem(data);
+ });
+ };
+ handleDelete = (itemIds) => {
+ Modal.confirm({
+ title: getLabel(111, "信息确认"),
+ content: getLabel(111, "确认删除吗?"),
+ onOk: () => {
+ API.deleteVariableSalaryItem({ itemIds }).then(({ status, errormsg }) => {
+ if (status) {
+ message.success(getLabel(111, "删除成功"));
+ this.getVariableSalaryItemList();
+ } else {
+ message.error(errormsg);
+ }
+ });
+ }
+ });
+ };
+
+ render() {
+ const { columns, dataSource, loading, pageInfo } = this.state;
+ const pagination = {
+ ...pageInfo,
+ showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`,
+ showQuickJumper: true,
+ showSizeChanger: true,
+ pageSizeOptions: ["10", "20", "50", "100"],
+ onShowSizeChange: (current, pageSize) => {
+ this.setState({
+ pageInfo: { ...pageInfo, current, pageSize }
+ }, () => this.getVariableSalaryItemList());
+ },
+ onChange: current => {
+ this.setState({
+ pageInfo: { ...pageInfo, current }
+ }, () => this.getVariableSalaryItemList());
+ }
+ };
+ return (
+
+ );
+ }
+}
+
+export default Index;
diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/searchPannel/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/searchPannel/index.js
new file mode 100644
index 00000000..d5b274a9
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/variableSalary/components/searchPannel/index.js
@@ -0,0 +1,70 @@
+/*
+ * Author: 黎永顺
+ * name:薪酬统计报薪资明细-高级查询
+ * Description:
+ * Date: 2024/3/26
+ */
+import React, { Component } from "react";
+import { WeaLocaleProvider, WeaTools } from "ecCom";
+import { Button } from "antd";
+import { inject, observer } from "mobx-react";
+import { getSearchs } from "../../../../util";
+import { conditions } from "../../conditions";
+
+const getLabel = WeaLocaleProvider.getLabel;
+const getKey = WeaTools.getKey;
+
+@inject("baseTableStore")
+@observer
+class VariableSalarySearchPannel extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ searchConditions: []
+ };
+ }
+
+ componentDidMount() {
+ this.setState({
+ searchConditions: _.map(conditions, item => {
+ return {
+ ...item,
+ items: _.map(item.items, child => {
+ return { ...child, label: getLabel(child.lanId, child.label) };
+ })
+ };
+ })
+ }, () => {
+ const { baseTableStore: { VSalryForm } } = this.props;
+ VSalryForm.initFormFields(this.state.searchConditions);
+ });
+ }
+
+ render() {
+ const { searchConditions } = this.state;
+ const { baseTableStore: { VSalryForm } } = this.props;
+ return (
+
+
+ {getSearchs(VSalryForm, searchConditions, 2, false)}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
+
+export default VariableSalarySearchPannel;
+
diff --git a/pc4mobx/hrmSalary/pages/variableSalary/conditions.js b/pc4mobx/hrmSalary/pages/variableSalary/conditions.js
new file mode 100644
index 00000000..72ff44cf
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/variableSalary/conditions.js
@@ -0,0 +1,167 @@
+export const conditions = [
+ {
+ items: [
+ {
+ conditionType: "INPUT",
+ domkey: ["itemName"],
+ fieldcol: 14,
+ label: "项目名称",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ hide: true,
+ viewAttr: 2
+ },
+ {
+ conditionType: "INPUT",
+ domkey: ["username"],
+ fieldcol: 14,
+ label: "名称",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ viewAttr: 2
+ },
+ {
+ browserConditionParam: {
+ completeParams: {},
+ conditionDataParams: {},
+ dataParams: {},
+ destDataParams: {},
+ hasAddBtn: false,
+ hasAdvanceSerach: false,
+ idSeparator: ",",
+ isAutoComplete: 1,
+ isDetail: 0,
+ isMultCheckbox: false,
+ isSingle: false,
+ icon: "icon-coms-hrm",
+ linkUrl: "",
+ pageSize: 10,
+ quickSearchName: "",
+ replaceDatas: [],
+ title: "",
+ type: "57",
+ viewAttr: 2
+ },
+ conditionType: "BROWSER",
+ domkey: ["departmentIds"],
+ fieldcol: 14,
+ label: "部门",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ viewAttr: 2
+ },
+ {
+ conditionType: "INPUT",
+ domkey: ["workcode"],
+ fieldcol: 14,
+ label: "工号",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ viewAttr: 2
+ }
+ ],
+ title: "",
+ defaultshow: true
+ }
+];
+export const salaryItemsConditions = [
+ {
+ items: [
+ {
+ conditionType: "INPUT",
+ domkey: ["name"],
+ fieldcol: 14,
+ label: "名称",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ rules: "required|string",
+ viewAttr: 3
+ },
+ {
+ conditionType: "SELECT",
+ domkey: ["dataType"],
+ fieldcol: 14,
+ label: "字段类型",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ options: [
+ { key: "number", showname: "数值", lanId: 111, selected: true },
+ { key: "string", showname: "字符", lanId: 111, selected: false }
+ ],
+ rules: "required|string",
+ viewAttr: 3
+ }
+ ],
+ title: "",
+ defaultshow: true
+ }
+];
+export const salaryFileConditions = [
+ {
+ items: [
+ {
+ conditionType: "MONTHPICKER",
+ domkey: ["salaryMonth"],
+ fieldcol: 16,
+ label: "薪资所属月",
+ lanId: 111,
+ labelcol: 8,
+ value: "",
+ rules: "required|string",
+ viewAttr: 3
+ },
+ {
+ conditionType: "SELECT",
+ domkey: ["taxAgentIds"],
+ fieldcol: 16,
+ label: "个税扣缴义务人",
+ lanId: 111,
+ labelcol: 8,
+ value: "",
+ options: [],
+ rules: "required|string",
+ viewAttr: 3
+ },
+ {
+ browserConditionParam: {
+ completeParams: {},
+ conditionDataParams: {},
+ dataParams: {},
+ destDataParams: {},
+ hasAddBtn: false,
+ hasAdvanceSerach: false,
+ idSeparator: ",",
+ isAutoComplete: 1,
+ isDetail: 0,
+ isMultCheckbox: false,
+ isSingle: true,
+ icon: "icon-coms-hrm",
+ linkUrl: "",
+ pageSize: 10,
+ quickSearchName: "",
+ replaceDatas: [],
+ title: "",
+ type: "17",
+ viewAttr: 2
+ },
+ conditionType: "BROWSER",
+ domkey: ["employeeId"],
+ fieldcol: 16,
+ label: "人员",
+ lanId: 111,
+ labelcol: 8,
+ value: "",
+ rules: "required|string",
+ viewAttr: 3
+ }
+ ],
+ title: "", col: 2,
+ defaultshow: true
+ }
+];
diff --git a/pc4mobx/hrmSalary/pages/variableSalary/index.js b/pc4mobx/hrmSalary/pages/variableSalary/index.js
new file mode 100644
index 00000000..f8b13f3b
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/variableSalary/index.js
@@ -0,0 +1,174 @@
+/*
+ * 浮动薪酬
+ *
+ * @Author: 黎永顺
+ * @Date: 2024/8/8
+ * @Wechat:
+ * @Email: 971387674@qq.com
+ * @description:
+*/
+import React, { Component } from "react";
+import { inject, observer } from "mobx-react";
+import { toJS } from "mobx";
+import { WeaDatePicker, WeaLoadingGlobal, WeaLocaleProvider, WeaReqTop, WeaSelect } from "ecCom";
+import * as API from "../../apis/variableSalary";
+import AdvanceInputBtn from "./components/advanceInputBtn";
+import SearchPannel from "./components/searchPannel";
+import SalaryItemDialog from "./components/salaryItemDialog";
+import SalaryFileDialog from "./components/salaryFileDialog";
+import SalaryItemList from "./components/salaryItemList";
+import SalaryFileList from "./components/salaryFileList";
+import SalaryFileImportDialog from "./components/salaryFileImportDialog";
+import moment from "moment";
+import { Button } from "antd";
+import cs from "classnames";
+import "./index.less";
+
+const getLabel = WeaLocaleProvider.getLabel;
+
+@inject("taxAgentStore", "baseTableStore")
+@observer
+class Index extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ selectedKey: "salaryFile", isQuery: false, showSearchAd: false, taxAgentIds: "",
+ salaryMonth: moment(new Date()).format("YYYY-MM"), taxAgentOption: [],
+ SIDialog: { visible: false, title: "", id: "", taxAgentOption: [] }, //薪资项目薪资编辑弹框
+ SFDialog: { visible: false, title: "", detail: {}, taxAgentOption: [] }, //薪资档案编辑弹框
+ SFImpDialog: { visible: false, title: getLabel(24023, "数据导入") }//薪资档案导入
+ };
+ }
+
+ componentDidMount() {
+ API.getAdminTaxAgentList().then(({ status, data }) => {
+ if (status) {
+ const taxAgentOption = _.map(data, (o, i) => ({ key: o.id, showname: o.content }));
+ this.setState({
+ taxAgentOption, taxAgentIds: _.map(taxAgentOption, o => o.key).join(","),
+ SIDialog: { ...this.state.SIDialog, taxAgentOption },
+ SFDialog: { ...this.state.SFDialog, taxAgentOption }
+ });
+ }
+ });
+ }
+
+ handleAdvanceSearch = () => this.setState({ isQuery: !this.state.isQuery });
+ openAdvanceSearch = () => this.setState({ showSearchAd: !this.state.showSearchAd });
+ handleOperate = (type, detail = {}) => {
+ const { baseTableStore: { SFTableStore, VSalryForm } } = this.props;
+ switch (type) {
+ case "create":
+ this.setState({
+ SFDialog: {
+ ...this.state.SFDialog, visible: true, detail,
+ title: _.isEmpty(detail) ? getLabel(111, "新增薪资档案") : getLabel(111, "查看薪资档案")
+ }
+ });
+ break;
+ case "import":
+ this.setState({ SFImpDialog: { ...this.state.SFImpDialog, visible: true } });
+ break;
+ case "export":
+ const columns = _.map(_.filter(toJS(SFTableStore.columns), (item) => item.display === "true"), it => it.dataIndex);
+ const { salaryMonth, taxAgentIds } = this.state;
+ const payload = {
+ ...VSalryForm.getFormParams(),
+ taxAgentIds: !_.isEmpty(taxAgentIds) ? taxAgentIds.split(",") : [],
+ departmentIds: !_.isEmpty(VSalryForm.getFormParams().taxAgentIds) ? VSalryForm.getFormParams().taxAgentIds.split(",") : [],
+ salaryMonth, columns
+ };
+ WeaLoadingGlobal.start();
+ const promise = API.exportVariableSalary(payload);
+ break;
+ case "custom_cols":
+ SFTableStore.setColSetVisible(true);
+ SFTableStore.tableColSet(true);
+ break;
+ default:
+ break;
+ }
+ };
+
+ render() {
+ const {
+ selectedKey, SIDialog, SFDialog, SFImpDialog, showSearchAd, isQuery, salaryMonth, taxAgentOption, taxAgentIds
+ } = this.state;
+ const { taxAgentStore: { showOperateBtn }, baseTableStore: { VSSalaryItemForm } } = this.props;
+ const tabs = [
+ {
+ title: getLabel(111, "浮动数据"), key: "salaryFile", showDropIcon: true,
+ dropMenuDatas: showOperateBtn ? [
+ { key: "export", icon: , content: getLabel(111, "导出") },
+ { key: "custom_cols", icon: , content: getLabel(32535, "显示列定制") }
+ ] : [
+ { key: "custom_cols", icon: , content: getLabel(32535, "显示列定制") }
+ ],
+ buttons: showOperateBtn ? [
+ ,
+ ,
+ this.setState({ salaryMonth: val }, () => this.handleAdvanceSearch())}/>,
+ this.setState({ taxAgentIds: val }, () => this.handleAdvanceSearch())}/>,
+ this.openAdvanceSearch()}
+ onAdvanceSearch={this.handleAdvanceSearch}/>
+ ] : [
+ this.setState({ salaryMonth: val }, () => this.handleAdvanceSearch())}/>,
+ this.setState({ taxAgentIds: val }, () => this.handleAdvanceSearch())}/>,
+ this.openAdvanceSearch()}
+ onAdvanceSearch={this.handleAdvanceSearch}/>
+ ],
+ children: this.handleOperate("create", data)}/>
+ },
+ {
+ title: getLabel(111, "字段管理"), key: "salaryItem", showDropIcon: false, dropMenuDatas: [],
+ buttons: showOperateBtn ? [
+ ,
+
+ ] : [],
+ children: this.setState({
+ SIDialog: { visible: true, id: data.id, title: getLabel(111, "编辑薪资项目") }
+ }, () => VSSalaryItemForm.updateFields({
+ name: data.name, dataType: data.dataType
+ }))}/>
+ }
+ ];
+ return (
+ } selectedKey={selectedKey}
+ iconBgcolor="#F14A2D" tabDatas={tabs} className="variable_salary_wrapper"
+ buttons={_.find(tabs, o => selectedKey === o.key).buttons} buttonSpace={10}
+ onChange={selectedKey => this.setState({ selectedKey, SFDialog: { ...SFDialog, visible: false } })}
+ showDropIcon={_.find(tabs, o => selectedKey === o.key).showDropIcon} onDropMenuClick={this.handleOperate}
+ dropMenuDatas={_.find(tabs, o => selectedKey === o.key).dropMenuDatas}
+ >
+
+ this.setState({ showSearchAd: false })} onAdSearch={this.handleAdvanceSearch}/>
+
+ {_.find(tabs, o => selectedKey === o.key).children}
+ {/*薪资项目*/}
+ this.setState({
+ SIDialog: { ...SIDialog, visible: false }
+ }, () => callback && callback())}/>
+ {/*薪资档案*/}
+ this.setState({
+ SFDialog: { ...SFDialog, visible: false }
+ }, () => callback && callback())}/>
+ {/* 薪资档案导入*/}
+ {
+ this.setState({ SFImpDialog: { ...SFImpDialog, visible: false } },
+ () => callback && this.handleAdvanceSearch());
+ }}/>
+
+ );
+ }
+}
+
+export default Index;
diff --git a/pc4mobx/hrmSalary/pages/variableSalary/index.less b/pc4mobx/hrmSalary/pages/variableSalary/index.less
new file mode 100644
index 00000000..55dbb34b
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/variableSalary/index.less
@@ -0,0 +1,114 @@
+.variable_salary_wrapper {
+ .wea-new-top-req-title > div:last-child {
+ right: 16px !important;
+ }
+
+ .wea-new-top-req-content {
+
+ .wea-new-table {
+ background: #FFF;
+ }
+
+ .ant-spin-nested-loading, .ant-spin-container {
+ height: 100% !important;
+ }
+
+ }
+
+ .searchAdvanced-condition-hide {
+ display: none;
+ }
+
+ .searchAdvanced-condition-container {
+ background: #FFF;
+ margin-bottom: 10px;
+ border: 1px solid #e5e5e5;
+
+ .wea-search-buttons {
+ border-top: 1px solid #dadada;
+ padding: 15px 0;
+ }
+
+ .wea-advanced-searchsAd {
+ height: 108px;
+ overflow: hidden auto;
+
+ .formItem-delete {
+ position: absolute;
+ top: 0;
+ right: -40px;
+ }
+
+ .searchAdvanced-commonSelect {
+ border-top: 1px solid #ebebeb;
+ margin: 0 25px;
+ padding: 10px 0;
+ }
+
+ .custom-advance-largeSpacing {
+ padding-left: 26px;
+
+ .link {
+ border: none;
+ border-radius: 0;
+ padding: 12px 10px 12px 26px;
+ color: #2db7f5
+ }
+ }
+
+ }
+ }
+
+ .variable_salary_file_dialog {
+ .scroller {
+ background: #f6f6f6 !important;
+ }
+
+ .wea-slide-modal-title {
+ border-bottom: 1px solid #e5e5e5 !important;
+ }
+
+ .titleDialog {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 46px 0 16px;
+
+ .titleCol {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ }
+
+ .titleLeftBox {
+ .titleIcon {
+ color: #fff;
+ margin: 0;
+ width: 40px;
+ height: 40px;
+ line-height: 40px;
+ font-size: 22px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: #F14A2D;
+ border-radius: 50%;
+ }
+
+ .title {
+ font-size: 14px;
+ color: #333;
+ padding-left: 6px;
+ }
+ }
+
+ .titleRightBox {
+ justify-content: flex-end;
+
+ button:last-child {
+ margin-left: 10px;
+ }
+ }
+ }
+ }
+}
diff --git a/pc4mobx/hrmSalary/stores/baseTable.js b/pc4mobx/hrmSalary/stores/baseTable.js
index cc639b54..19333392 100644
--- a/pc4mobx/hrmSalary/stores/baseTable.js
+++ b/pc4mobx/hrmSalary/stores/baseTable.js
@@ -1,8 +1,9 @@
-import { observable, action, toJS } from 'mobx';
-import { message } from 'antd';
-import { WeaForm, WeaTableNew } from 'comsMobx';
+import { action, observable } from "mobx";
+import { message } from "antd";
+import { WeaForm, WeaTableNew } from "comsMobx";
-import * as API from '../apis'; // 引入API接口文件
+import * as API from "../apis"; // 引入API接口文件
+import { getVariableSalaryList } from "../apis/variableSalary"; //浮动薪酬-薪资档案列表查询
const { TableStore } = WeaTableNew;
@@ -14,12 +15,38 @@ export class BaseTableStore {
@observable showSearchAd = false; // 高级搜索面板显示
@observable loading = true; // 数据加载状态
+ // 浮动薪酬相关
+ @observable VSalryForm = new WeaForm(); // 浮动薪酬查询form
+ @observable VSSalaryItemForm = new WeaForm(); // 新增编辑浮动薪酬项目form
+ @action initVSSalaryItemForm = () => this.VSSalaryItemForm = new WeaForm();
+ @observable VSSalaryFileForm = new WeaForm(); // 新增编辑薪资档案form
+ @action initVSSalaryFileForm = () => this.VSSalaryFileForm = new WeaForm();
+ @observable SFTableStore = new TableStore(); // 浮动薪酬-薪资档案table
+
+ @action("浮动薪酬-薪资档案列表查询")
+ getVariableSalaryList = (payload) => {
+ return new Promise((resolve, reject) => {
+ getVariableSalaryList(payload).then(res => {
+ const { data, status } = res;
+ if (status) {
+ const { dataKey } = data;
+ const { datas } = dataKey;
+ this.SFTableStore.getDatas(datas);
+ }
+ resolve(res);
+ }).catch(() => {
+ reject();
+ });
+ });
+ };
+
+
// 初始化操作
@action
doInit = () => {
this.getCondition();
this.getTableDatas();
- }
+ };
// 获得高级搜索表单数据
@action
@@ -29,10 +56,10 @@ export class BaseTableStore {
this.condition = res.condition;
this.form.initFormFields(res.condition); // 渲染高级搜索form表单
} else {
- message.error(res.msg || '接口调用失败!')
+ message.error(res.msg || "接口调用失败!");
}
}));
- }
+ };
// 渲染table数据
@action
@@ -45,11 +72,11 @@ export class BaseTableStore {
this.tableStore.getDatas(res.datas); // table 请求数据
this.hasRight = res.hasRight;
} else {
- message.error(res.msg || '接口调用失败!')
+ message.error(res.msg || "接口调用失败!");
}
this.loading = false;
}));
- }
+ };
@action
setShowSearchAd = bool => this.showSearchAd = bool;
@@ -58,6 +85,6 @@ export class BaseTableStore {
@action doSearch = () => {
this.getTableDatas();
this.showSearchAd = false;
- }
+ };
-}
\ No newline at end of file
+}
diff --git a/pc4mobx/hrmSalary/stores/taxAgent.js b/pc4mobx/hrmSalary/stores/taxAgent.js
index 1e02f209..fe134ca2 100644
--- a/pc4mobx/hrmSalary/stores/taxAgent.js
+++ b/pc4mobx/hrmSalary/stores/taxAgent.js
@@ -8,6 +8,15 @@ import { decentralizationConditions, editConditions } from "../pages/taxAgent/ed
const { TableStore } = WeaTableNew;
export class TaxAgentStore {
+ @observable advanceForm = new WeaForm(); //权限-角色高级搜索form表单
+ @observable roleForm = new WeaForm(); //权限-角色form表单
+ @action initRoleForm = () => this.roleForm = new WeaForm();
+ @observable roleOperatorForm = new WeaForm(); //权限-角色操作者form表单
+ @action initRoleOperatorForm = () => this.roleOperatorForm = new WeaForm();
+ @observable PageAndOptAuth = { able: false, opts: [] }; // 业务线页面权限
+ @action initPageAndOptAuth = () => this.PageAndOptAuth = { able: true, opts: ["query", "admin"] };// 设置业务线页面权限
+
+
@observable tableStore = new TableStore(); // new table
@observable form = new WeaForm(); //表单实体
@observable formDecentralization = new WeaForm(); //关闭分权表单
@@ -142,6 +151,7 @@ export class TaxAgentStore {
return new Promise((resolve, reject) => {
API.getPermission(params).then(({ status, data }) => {
if (status) {
+ this.PageAndOptAuth = data;
const { isAdminEnable, isChief, isOpenDevolution } = data;
this.setShowOperateBtn(
!isOpenDevolution ? true : isAdminEnable ? true : false
diff --git a/pc4mobx/hrmSalary/style/index.less b/pc4mobx/hrmSalary/style/index.less
index 8e65be90..02955b0b 100644
--- a/pc4mobx/hrmSalary/style/index.less
+++ b/pc4mobx/hrmSalary/style/index.less
@@ -39,6 +39,10 @@
.form-dialog-layout {
background: #f6f6f6;
+ .wea-form-item .wea-form-item-wrapper .wea-field-readonly {
+ line-height: 28px;
+ }
+
.wea-search-group {
padding: 16px;
}
@@ -117,3 +121,10 @@
}
+//公共slide框标题样式
+.zIndex0-weaslide-title {
+ .wea-new-top-req {
+ z-index: 0 !important;
+ }
+}
+