diff --git a/pc4mobx/hrmSalary/apis/item.js b/pc4mobx/hrmSalary/apis/item.js
index ab4ff6c2..180b22d0 100644
--- a/pc4mobx/hrmSalary/apis/item.js
+++ b/pc4mobx/hrmSalary/apis/item.js
@@ -1,5 +1,5 @@
import { WeaTools } from "ecCom";
-import { postFetch } from "../util/request";
+import { postExportFetch, postFetch } from "../util/request";
// 薪资项目-获取列表
export const getItemList = params => {
@@ -84,3 +84,19 @@ export const getSalarySobBySalaryItem = params => {
export const syncSalaryItemToSalarySobItem = params => {
return postFetch("/api/bs/hrmsalary/salaryitem/syncSalaryItemToSalarySobItem", params);
};
+
+// 导出薪资项目
+export const exportSalaryitem = (params) => {
+ return postExportFetch("/api/bs/hrmsalary/salaryitem/export", params);
+};
+// 下载模板
+export const downloadTemplate = (params) => {
+ return postExportFetch("/api/bs/hrmsalary/salaryitem/downloadTemplate", params);
+};
+
+// 导入薪资项目
+export const importSalaryitem = (params) => {
+ return postFetch("/api/bs/hrmsalary/salaryitem/import", params);
+};
+
+
diff --git a/pc4mobx/hrmSalary/apis/ruleconfig.js b/pc4mobx/hrmSalary/apis/ruleconfig.js
index f52953bb..eebd320f 100644
--- a/pc4mobx/hrmSalary/apis/ruleconfig.js
+++ b/pc4mobx/hrmSalary/apis/ruleconfig.js
@@ -79,3 +79,11 @@ export const saveSalarySendFeedback = (params) => {
export const exportDataReport = (params) => {
return postExportFetch("/api/bs/hrmsalary/report/statistics/report/exportData", params);
};
+//迁入配置
+export const uploadConfig = (params) => {
+ return postFetch("/api/bs/hrmsalary/sys/uploadConfig", params);
+};
+//迁入配置
+export const downloadConfig = (params) => {
+ return postExportFetch("/api/bs/hrmsalary/sys/downloadConfig", params);
+};
diff --git a/pc4mobx/hrmSalary/apis/variableSalary.js b/pc4mobx/hrmSalary/apis/variableSalary.js
new file mode 100644
index 00000000..8cd818b5
--- /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/siaccount/getAdminTaxAgentList", "get", {});
+};
+// 浮动薪酬档案导出
+export const exportVariableSalary = (params) => {
+ return postExportFetch("/api/bs/hrmsalary/variableSalary/export", params);
+};
+
diff --git a/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js b/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js
index 209125fb..b2ac42b0 100644
--- a/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js
+++ b/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js
@@ -33,7 +33,8 @@ class ImpStep1 extends Component {
multiple: false,
action: "/api/doc/upload/uploadFile",
fileList,
- onChange: this.handleChange
+ onChange: this.handleChange,
+ ...this.props.customDragger
};
return (
@@ -45,7 +46,7 @@ class ImpStep1 extends Component {
{this.props.importParams}
}
- {getLabel(543202, "导入Excel")}
+ {_.isEmpty(this.props.customDragger) && {getLabel(543202, "导入Excel")}
}
@@ -56,36 +57,39 @@ class ImpStep1 extends Component {
+ {
+ (_.isNil(this.props.customDragger) || this.props.customDragger.showOperateDesc) &&
+
+
+
{getLabel(27577, "操作步骤")}
+
+ {`1. ${getLabel(30907, "第一步")},${getLabel(543205, "请选择导出的Excel文件或")}`}
+ {
+ typeof this.props.link === "string" ?
+ {getLabel(543207, "点击这里下载模板")} :
+ {getLabel(543207, "点击这里下载模板")}
+ }
+
+ {this.props.exportDataDom}
+
+
{`2. ${getLabel(543211, "第二步")},${getLabel(543212, "请一定要确定Excel文档中的格式是模板中的格式")},${getLabel(543213, "没有被修改掉")};`}
+
{`3. ${getLabel(543216, "第三步")},${getLabel(543215, "选择填写好的Excel文档")},${getLabel(543214, "点击“下一步”按钮进行数据预览")};`}
+
+ {`4. ${getLabel(543217, "第四步")},${getLabel(543218, "如果以上步骤和Excel文档正确的话")},${getLabel(543219, "导入成功会有提示")},${getLabel(543220, "数据会被正确导入")}。${getLabel(543221, "如果有问题")},${getLabel(543222, "则会提示Excel文档的错误之处")}。`}
+
+
-
-
{getLabel(27577, "操作步骤")}
-
- {`1. ${getLabel(30907, "第一步")},${getLabel(543205, "请选择导出的Excel文件或")}`}
- {
- typeof this.props.link === "string" ?
- {getLabel(543207, "点击这里下载模板")} :
- {getLabel(543207, "点击这里下载模板")}
- }
-
- {this.props.exportDataDom}
-
-
{`2. ${getLabel(543211, "第二步")},${getLabel(543212, "请一定要确定Excel文档中的格式是模板中的格式")},${getLabel(543213, "没有被修改掉")};`}
-
{`3. ${getLabel(543216, "第三步")},${getLabel(543215, "选择填写好的Excel文档")},${getLabel(543214, "点击“下一步”按钮进行数据预览")};`}
-
- {`4. ${getLabel(543217, "第四步")},${getLabel(543218, "如果以上步骤和Excel文档正确的话")},${getLabel(543219, "导入成功会有提示")},${getLabel(543220, "数据会被正确导入")}。${getLabel(543221, "如果有问题")},${getLabel(543222, "则会提示Excel文档的错误之处")}。`}
-
-
-
-
-
{getLabel(543223, "Excel文件说明")}
-
{`1. ${getLabel(543224, "后缀名为xls或者xlsx")};`}
-
{`2. ${getLabel(543225, "数据请勿放在合并的单元格中")};`}
-
{`3. ${getLabel(543226, "账单月份格式必须为")}:YYYY-MM;`}
-
-
+
+
{getLabel(543223, "Excel文件说明")}
+
{`1. ${getLabel(543224, "后缀名为xls或者xlsx")};`}
+
{`2. ${getLabel(543225, "数据请勿放在合并的单元格中")};`}
+
{`3. ${getLabel(543226, "账单月份格式必须为")}:YYYY-MM;`}
+
+
+ }
);
}
diff --git a/pc4mobx/hrmSalary/components/importDialog/components/impStep3.js b/pc4mobx/hrmSalary/components/importDialog/components/impStep3.js
index df9575ef..82ed0adb 100644
--- a/pc4mobx/hrmSalary/components/importDialog/components/impStep3.js
+++ b/pc4mobx/hrmSalary/components/importDialog/components/impStep3.js
@@ -7,6 +7,7 @@
import React, { Component } from "react";
import { WeaLocaleProvider, WeaTable } from "ecCom";
import successImg from "../../importModal/success.svg";
+import MoveInResult from "./moveInResult";
const getLabel = WeaLocaleProvider.getLabel;
@@ -16,32 +17,41 @@ class ImpStep3 extends Component {
return (
{
- !_.isEmpty(importResult) ?
-
-

-
- {getLabel(389249, "已导入")}
- {importResult.successCount}
- {`${getLabel(30690, "条数据")},${getLabel(25009, "失败")}`}
- {importResult.errorCount} {getLabel(30690, "条数据")}
-
-
:
-
-
{getLabel(111, "导入失败")}
-
- }
- {
- (!_.isEmpty(importResult.errorNotice) || !_.isEmpty(importResult.errorData)) &&
-
:
+
{
- title: getLabel(25700, "错误信息"),
- dataIndex: "message"
+ !_.isEmpty(importResult) ?
+
+

+ {
+ importResult.successCount &&
+
+ {getLabel(389249, "已导入")}
+ {importResult.successCount}
+ {`${getLabel(30690, "条数据")},${getLabel(25009, "失败")}`}
+ {importResult.errorCount} {getLabel(30690, "条数据")}
+
+ }
+
:
+
+
{getLabel(111, "导入失败")}
+
}
- ]}
- dataSource={importResult.errorData || importResult.errorNotice} pagination={false}
- scroll={{ y: `calc(100vh - 387px)` }}
- />
+ {
+ !_.isEmpty(importResult) && (!_.isEmpty(importResult.errorNotice) || !_.isEmpty(importResult.errorData)) &&
+
+ }
+
}
);
diff --git a/pc4mobx/hrmSalary/components/importDialog/components/moveInResult.js b/pc4mobx/hrmSalary/components/importDialog/components/moveInResult.js
new file mode 100644
index 00000000..2a6358a6
--- /dev/null
+++ b/pc4mobx/hrmSalary/components/importDialog/components/moveInResult.js
@@ -0,0 +1,56 @@
+/*
+ * 薪酬迁入结果展示
+ *
+ * @Author: 黎永顺
+ * @Date: 2024/8/16
+ * @Wechat:
+ * @Email: 971387674@qq.com
+ * @description:
+*/
+import React, { Component } from "react";
+import { WeaLocaleProvider, WeaTable } from "ecCom";
+
+const getLabel = WeaLocaleProvider.getLabel;
+
+class MoveInResult extends Component {
+ downloadTxtfile = (value, type) => {
+ if (!value) return;
+ const element = document.createElement("a");
+ const file = new Blob([value], { type: "text/plain" });
+ element.href = URL.createObjectURL(file);
+ element.download = `导入${type}信息.txt`;
+ document.body.appendChild(element);
+ element.click();
+ };
+
+ render() {
+ const { dataSource } = this.props;
+ return (
+ (
+ this.downloadTxtfile(record.success.join("\n"), getLabel(111, "成功"))}>
+ {record.success.length}
+ this.downloadTxtfile(record.warning.join("\n"), getLabel(111, "警告"))}>{record.warning.length}
+ this.downloadTxtfile(record.error.join("\n"), getLabel(111, "错误"))}>{record.error.length}
+ )
+ }
+ ]}
+ dataSource={dataSource} pagination={false} bordered scroll={{ y: `calc(100vh - 333px)` }}
+ />
+ );
+ }
+}
+
+export default MoveInResult;
diff --git a/pc4mobx/hrmSalary/components/importDialog/index.js b/pc4mobx/hrmSalary/components/importDialog/index.js
index 739fbf84..633df0ee 100644
--- a/pc4mobx/hrmSalary/components/importDialog/index.js
+++ b/pc4mobx/hrmSalary/components/importDialog/index.js
@@ -36,13 +36,17 @@ class Index extends Component {
}
renderChildren = () => {
- const { current } = this.state, { importParams, link, excludeKey, importResult, exportDataDom = null } = this.props;
+ const { current } = this.state, {
+ importParams, link, excludeKey, importResult,
+ exportDataDom = null, customDragger
+ } = this.props;
const scrollHeight = this.importRef ? this.importRef.state.height - 232 : 606.6;
let CurrentDom = null;
switch (current) {
case 0:
- CurrentDom = this.step1Ref = dom}/>;
+ CurrentDom =
+ this.step1Ref = dom}/>;
break;
case 1:
CurrentDom = ;
@@ -99,13 +103,16 @@ class Index extends Component {
}
const [file] = fileList;
const { response } = file;
- this.setState({
- current: this.state.current + 1,
- fileid: response.data.fileid
- }, () => {
- !excludeKey && this.props.nextCallback && this.props.nextCallback(this.state.fileid);
- excludeKey && this.props.nextUplaodCallback && this.props.nextUplaodCallback(this.state.fileid);
- });
+ if (!excludeKey) {
+ this.setState({
+ current: this.state.current + 1,
+ fileid: response.data.fileid
+ }, () => {
+ this.props.nextCallback && this.props.nextCallback(this.state.fileid);
+ });
+ } else {
+ this.props.nextUplaodCallback && this.props.nextUplaodCallback(response.data.fileid);
+ }
} else {
this.props.nextUplaodCallback && this.props.nextUplaodCallback(this.state.fileid);
}
diff --git a/pc4mobx/hrmSalary/index.js b/pc4mobx/hrmSalary/index.js
index 8c605118..27bc86f2 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 stores from "./stores";
@@ -113,6 +114,7 @@ const DataAcquisition = (props) => props.children;
// externalPersonManage 非系统人员管理
// adjustSalaryManage 档案管理
// supplementaryCalc 补算
+// variableSalary 浮动薪酬
const Routes = (
@@ -167,6 +169,7 @@ const Routes = (
+
);
diff --git a/pc4mobx/hrmSalary/pages/appConfig/index.js b/pc4mobx/hrmSalary/pages/appConfig/index.js
index a7b3d7ce..e13000eb 100644
--- a/pc4mobx/hrmSalary/pages/appConfig/index.js
+++ b/pc4mobx/hrmSalary/pages/appConfig/index.js
@@ -5,7 +5,17 @@
* Date: 2022-09-27 18:17:02
*/
import React, { Component } from "react";
-import { WeaCheckbox, WeaDatePicker, WeaFormItem, WeaInput, WeaSearchGroup, WeaTop } from "ecCom";
+import {
+ WeaCheckbox,
+ WeaDatePicker,
+ WeaFormItem,
+ WeaInput,
+ WeaLoadingGlobal,
+ WeaLocaleProvider,
+ WeaSearchGroup,
+ WeaTop
+} from "ecCom";
+import MoveInDialog from "./moveInDialog";
import * as API from "../../apis/ruleconfig";
import { Button, message } from "antd";
import "./index.less";
@@ -18,6 +28,7 @@ const Input = (props) => {
);
};
+const getLabel = WeaLocaleProvider.getLabel;
class AppConfig extends Component {
constructor(props) {
@@ -28,7 +39,8 @@ class AppConfig extends Component {
isLog: "0",
openFormulaForcedEditing: "0",
version: "",
- loading: false
+ loading: false,
+ moveInDialog: { visible: false, title: getLabel(111, "数据迁入") }
};
}
@@ -62,10 +74,29 @@ class AppConfig extends Component {
}
});
};
+ handleOperate = (type) => {
+ switch (type) {
+ case "import":
+ this.setState({ moveInDialog: { ...this.state.moveInDialog, visible: true } });
+ break;
+ case "export":
+ WeaLoadingGlobal.start();
+ const promise = API.downloadConfig();
+ break;
+ default:
+ break;
+ }
+ };
render() {
- const { openAcctResultSum, displayEmpInfoReport, loading, openFormulaForcedEditing, isLog, version } = this.state;
- const btns = [];
+ const {
+ openAcctResultSum, displayEmpInfoReport, loading, openFormulaForcedEditing, isLog, version, moveInDialog
+ } = this.state;
+ const btns = [
+ ,
+ ,
+
+ ];
const items = [
{
com: Input({
@@ -115,6 +146,8 @@ class AppConfig extends Component {
buttons={btns}
/>
+ this.setState({ moveInDialog: { ...this.state.moveInDialog, visible: false } })}/>
);
}
diff --git a/pc4mobx/hrmSalary/pages/appConfig/moveInDialog.js b/pc4mobx/hrmSalary/pages/appConfig/moveInDialog.js
new file mode 100644
index 00000000..afdf3765
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/appConfig/moveInDialog.js
@@ -0,0 +1,73 @@
+/*
+ * 数据迁入
+ *
+ * @Author: 黎永顺
+ * @Date: 2024/8/12
+ * @Wechat:
+ * @Email: 971387674@qq.com
+ * @description:
+*/
+import React, { Component } from "react";
+import { WeaLocaleProvider } from "ecCom";
+import { message } from "antd";
+import ImportDialog from "../../components/importDialog";
+import * as API from "../../apis/ruleconfig";
+
+const getLabel = WeaLocaleProvider.getLabel;
+
+class MoveInDialog extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ importDialog: {
+ nextloading: false, importResult: {}, imageId: "",
+ customDragger: { showOperateDesc: false, accept: ".xml" }
+ }
+ };
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (nextProps.visible !== this.props.visible && !nextProps.visible) {
+ this.setState({
+ importDialog: {
+ ...this.state.importDialog,
+ importResult: {}, imageId: "",
+ customDragger: { showOperateDesc: false, accept: ".xml" }
+ }
+ });
+ }
+ }
+
+ handleImport = (payload) => {
+ const { importDialog } = this.state;
+ this.setState({ importDialog: { ...importDialog, nextloading: true } });
+ API.uploadConfig({ ...payload }).then(({ data, status, errormsg }) => {
+ this.setState({ importDialog: { ...importDialog, nextloading: false } });
+ if (status) {
+ this.setState({
+ importDialog: { ...importDialog, ...payload, importResult: data }
+ });
+ } else {
+ message.error(errormsg);
+ }
+ }).catch(() => this.setState({ importDialog: { ...importDialog, nextloading: false } }));
+ };
+
+ render() {
+ const { importDialog } = this.state;
+ return (
+ this.setState({
+ importDialog: {
+ ...importDialog, importResult: {}, imageId: "", link: ""
+ }
+ })}
+ nextCallback={imageId => this.setState({ importDialog: { ...importDialog, imageId } })}
+ nextUplaodCallback={imageId => this.handleImport({ imageId })}
+ />
+ );
+ }
+}
+
+export default MoveInDialog;
diff --git a/pc4mobx/hrmSalary/pages/calculateDetail/payrollItemsTable.js b/pc4mobx/hrmSalary/pages/calculateDetail/payrollItemsTable.js
index 33a90a08..9d2ddfce 100644
--- a/pc4mobx/hrmSalary/pages/calculateDetail/payrollItemsTable.js
+++ b/pc4mobx/hrmSalary/pages/calculateDetail/payrollItemsTable.js
@@ -40,7 +40,7 @@ class PayrollItemsTable extends Component {
const { canEdit, dataType, pattern } = record;
return dataType === "number" ? onChangeIssueReissueValue(record.salaryItemId, value, "itemsByGroup", salarySobItemGroupId)}
/> : {
if (item.dataIndex == "refere") {
@@ -213,6 +215,19 @@ export default class SalaryItem extends React.Component {
filterConditions: targetid ? `[{\"connectCondition\":\"AND\",\"columIndex\":\"targetid\",\"type\":\"=\",\"value\":\"${targetid}\"}]` : "[]"
});
break;
+ case "export":
+ WeaLoadingGlobal.start();
+ const { selectedRowKeys } = this.state;
+ const promise = API.exportSalaryitem({ ids: selectedRowKeys });
+ WeaLoadingGlobal.destroy();
+ break;
+ case "import":
+ this.setState({
+ salaryItemImpDialog: {
+ ...this.state.salaryItemImpDialog, visible: true
+ }
+ });
+ break;
default:
break;
}
@@ -220,12 +235,10 @@ export default class SalaryItem extends React.Component {
render() {
const {
- salaryItemStore,
- salaryFileStore,
- taxAgentStore: { showOperateBtn, showSalaryItemBtn, taxAgentOption }
+ salaryItemStore, salaryFileStore, taxAgentStore: { showOperateBtn, showSalaryItemBtn, taxAgentOption }
} = this.props;
const { userStatusList } = salaryFileStore;
- const { selectedRowKeys, logDialogVisible, filterConditions } = this.state;
+ const { selectedRowKeys, logDialogVisible, filterConditions, salaryItemImpDialog } = this.state;
const { loading, deleteItemRequest, getTableDatas } = salaryItemStore;
const {
tableDataSource,
@@ -257,51 +270,36 @@ export default class SalaryItem extends React.Component {
);
- const renderRightOperation = () => {
- return (
- {
- (showOperateBtn || showSalaryItemBtn) &&
- handleMenuClick({ key: "1" })}
- style={{ marginRight: "10px" }}>{getLabel(111, "新增自定义薪资项")}
+ const buttons = [
+ handleMenuClick({ key: "1" })}>{getLabel(111, "新增自定义薪资项")},
+
);
-
- };
-
+ });
+ }
+ });
+ }}>{getLabel(32136, "批量删除")},
+ this.setState({ searchValue: value })}
+ onSearch={value => this.handleSearch(value)}/>
+ ];
// 新建和修改保存的回调
const handleSlideSave = (continueFlag) => {
const { salaryItemStore: { saveItem, request, getTableDatas } } = this.props;
@@ -367,23 +365,31 @@ export default class SalaryItem extends React.Component {
};
const rowSelection = {
selectedRowKeys,
- onChange: (selectedRowKeys) => this.setState({ selectedRowKeys }),
- getCheckboxProps: record => ({
- disabled: !record.canDelete // Column configuration not to be checked
- })
+ onChange: (selectedRowKeys) => this.setState({ selectedRowKeys })
+ // getCheckboxProps: record => ({
+ // disabled: !record.canDelete // Column configuration not to be checked
+ // })
};
return (
} iconBgcolor="#F14A2D"
showDropIcon onDropMenuClick={this.onDropMenuClick}
dropMenuDatas={[
+ {
+ key: "import",
+ icon:
,
+ content: getLabel(111, "导入")
+ },
+ {
+ key: "export",
+ icon:
,
+ content: getLabel(111, "导出")
+ },
{
key: "log", icon:
,
content: getLabel(545781, "操作日志")
}
- ]}
- >
-
+ ]} buttons={(showOperateBtn || showSalaryItemBtn) ? buttons : buttons.slice(-1)}>
this.setState({ logDialogVisible: false })}/>
+ {/* 导入*/}
+ {
+ this.setState({
+ salaryItemImpDialog: { ...salaryItemImpDialog, visible: false }
+ }, () => callback && this.handleSearch(this.state.searchValue));
+ }}/>
{
systemItemVisible &&
{
+ const { importDialog } = this.state;
+ const { hasData } = importDialog;
+ WeaLoadingGlobal.start();
+ const promise = API.downloadTemplate({ hasData });
+ WeaLoadingGlobal.destroy();
+ };
+ handleImport = (payload) => {
+ const { importDialog } = this.state, { isExtEmp } = this.props;
+ const { extraPreview } = importDialog;
+ this.setState({ importDialog: { ...importDialog, nextloading: true } });
+ API.importSalaryitem({ ...payload, ...extraPreview, isExtEmp }).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 } }));
+ };
+
+ render() {
+ const { importDialog } = this.state;
+ return (
+ this.setState({
+ importDialog: { ...importDialog, importResult: {}, imageId: "", link: null }
+ })}
+ exportDataDom={
+ {
+ this.setState({ importDialog: { ...importDialog, hasData: val === "1" } });
+ }}
+ />
+ }
+ nextCallback={imageId => this.setState({ importDialog: { ...importDialog, imageId } })}
+ nextUplaodCallback={imageId => this.handleImport({ imageId })}
+ />
+ );
+ }
+}
+
+export default Index;
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 = [
+ onCancel({
+ validate: false, changeData: true
+ })}>{getLabel(111, "保存并自动修改基数")},
+ onCancel({
+ validate: false, changeData: false
+ })}>{getLabel(111, "仅保存方案设置")}
+ ];
+ 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" && {getLabel(545754, "高级搜索")}
+ }
+
+ );
+ }
+}
+
+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) &&
+ {getLabel(537558, "保存")}
+ }
+
+
;
+ };
+
+ 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, "取消")},
+ {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..210df203
--- /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)}
+
+
+
+
+ {getLabel(388113, "搜索")}
+
+
+ VSalryForm.resetForm()}>{getLabel(2022, "重置")}
+
+
+ {getLabel(31129, "取消")}
+
+
+
+
+ );
+ }
+}
+
+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..115aa93e
--- /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: String(o.id), showname: o.name }));
+ 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.handleOperate("create")}>{getLabel(111, "新建")},
+ this.handleOperate("import")}>{getLabel(111, "导入")},
+ 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 ? [
+ this.setState({
+ SIDialog: { visible: true, id: "", title: getLabel(111, "新增薪资项目") }
+ })}>{getLabel(111, "新建")},
+
+ ] : [],
+ 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..b76440d6
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/variableSalary/index.less
@@ -0,0 +1,115 @@
+.variable_salary_wrapper {
+ .wea-new-top-req-title > div:last-child {
+ right: 16px !important;
+ }
+
+ .wea-new-top-req-content {
+ padding: 16px;
+
+ .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/style/index.less b/pc4mobx/hrmSalary/style/index.less
index 8e65be90..5f2c76d6 100644
--- a/pc4mobx/hrmSalary/style/index.less
+++ b/pc4mobx/hrmSalary/style/index.less
@@ -117,3 +117,10 @@
}
+//公共slide框标题样式
+.zIndex0-weaslide-title {
+ .wea-new-top-req {
+ z-index: 0 !important;
+ }
+}
+