diff --git a/pc4mobx/hrmSalary/apis/calculate.js b/pc4mobx/hrmSalary/apis/calculate.js
index 2ffee227..b14015a7 100644
--- a/pc4mobx/hrmSalary/apis/calculate.js
+++ b/pc4mobx/hrmSalary/apis/calculate.js
@@ -568,3 +568,20 @@ export const cacheImportField = (params) => {
export const salaryacctAcctresultCheckAuth = params => {
return WeaTools.callApi("/api/bs/hrmsalary/salaryacct/acctresult/checkAuth", "GET", params);
};
+
+//薪资核算-导出核算结果前生成可选的薪资项目
+export const getExportField = params => {
+ return WeaTools.callApi("/api/bs/hrmsalary/salaryacct/acctresult/exportField", "GET", params);
+};
+
+//薪资核算-导出薪资核算添加表头字段缓存
+export const customCacheExportField = (params) => {
+ return fetch("/api/bs/hrmsalary/salaryacct/acctresult/cacheExportField", {
+ method: "POST",
+ mode: "cors",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json());
+};
diff --git a/pc4mobx/hrmSalary/apis/externalPersonManage.js b/pc4mobx/hrmSalary/apis/externalPersonManage.js
new file mode 100644
index 00000000..91854ebb
--- /dev/null
+++ b/pc4mobx/hrmSalary/apis/externalPersonManage.js
@@ -0,0 +1,27 @@
+import { postFetch } from "../util/request";
+import { WeaTools } from "ecCom";
+
+//非系统人员-保存
+export const save = (params) => {
+ return postFetch("/api/bs/hrmsalary/extEmp/save", params);
+};
+
+//非系统人员-修改
+export const update = (params) => {
+ return postFetch("/api/bs/hrmsalary/extEmp/update", params);
+};
+
+//非系统人员-列表
+export const listPage = (params) => {
+ return postFetch("/api/bs/hrmsalary/extEmp/listPage", params);
+};
+
+//非系统人员-删除
+export const deleteExtEmp = (params) => {
+ return postFetch("/api/bs/hrmsalary/extEmp/delete", params);
+};
+
+//非系统人员-详情
+export const detail = params => {
+ return WeaTools.callApi("/api/bs/hrmsalary/extEmp/detail", "get", params);
+};
diff --git a/pc4mobx/hrmSalary/apis/ledger.js b/pc4mobx/hrmSalary/apis/ledger.js
index b04e881e..834a6c47 100644
--- a/pc4mobx/hrmSalary/apis/ledger.js
+++ b/pc4mobx/hrmSalary/apis/ledger.js
@@ -71,6 +71,17 @@ export const saveLedgerBasic = params => {
}).then(res => res.json());
};
+//薪资帐套外部人员范围(包含)列表
+export const getLedgerPersonRangeExtList = params => {
+ return fetch("/api/bs/hrmsalary/salarysob/range/ext/list", {
+ method: "POST",
+ mode: "cors",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json());
+};
//薪资帐套人员范围(包含)列表
export const getLedgerPersonRangeInclude = params => {
return fetch("/api/bs/hrmsalary/salarysob/range/listInclude", {
@@ -104,6 +115,28 @@ export const getLedgerPersonRangeForm = params => {
);
};
+//保存薪资帐套外部人员范围
+export const saveLedgerPersonExtRange = params => {
+ return fetch("/api/bs/hrmsalary/salarysob/ext/save", {
+ method: "POST",
+ mode: "cors",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json());
+};
+//删除薪资帐套外部人员范围
+export const deleteLedgerPersonExtRange = params => {
+ return fetch("/api/bs/hrmsalary/salarysob/range/ext/delete", {
+ method: "POST",
+ mode: "cors",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json());
+};
//保存薪资帐套人员范围
export const saveLedgerPersonRange = params => {
return fetch("/api/bs/hrmsalary/salarysob/range/save", {
diff --git a/pc4mobx/hrmSalary/apis/payroll.js b/pc4mobx/hrmSalary/apis/payroll.js
index 1f9b1d64..14c949d5 100644
--- a/pc4mobx/hrmSalary/apis/payroll.js
+++ b/pc4mobx/hrmSalary/apis/payroll.js
@@ -375,6 +375,14 @@ export const sendMobileCode = (params) => {
export const payrollCheckType = params => {
return WeaTools.callApi("/api/bs/hrmsalary/salaryBill/payrollCheckType", "GET", params);
};
+//工资单-反馈验证
+export const feedBackSalaryBill = params => {
+ return WeaTools.callApi("/api/bs/hrmsalary/salaryBill/feedBackSalaryBill", "GET", params);
+};
+//工资单-确认
+export const confirmSalaryBill = params => {
+ return WeaTools.callApi("/api/bs/hrmsalary/salaryBill/confirmSalaryBill", "GET", params);
+};
// 工资单基础设置-获取设置列表
export const getSalaryBillBaseSetForm = (id) => {
diff --git a/pc4mobx/hrmSalary/apis/ruleconfig.js b/pc4mobx/hrmSalary/apis/ruleconfig.js
index 2e3c0c4f..b5f4f87f 100644
--- a/pc4mobx/hrmSalary/apis/ruleconfig.js
+++ b/pc4mobx/hrmSalary/apis/ruleconfig.js
@@ -6,6 +6,10 @@ export const commonEnumList = (params) => {
return WeaTools.callApi("/api/bs/hrmsalary/common/enum/list", "GET", params);
};
+export const sysinfo = params => {
+ return WeaTools.callApi("/api/bs/hrmsalary/sys/info", "GET", params);
+};
+
export const sysOrderRule = params => {
return WeaTools.callApi("/api/bs/hrmsalary/sys/orderRule", "GET", params);
};
@@ -47,6 +51,10 @@ export const operateTaxDeclarationFunction = (params) => {
export const saveArchiveDelete = (params) => {
return postFetch("/api/bs/hrmsalary/sys/saveArchiveDelete", params);
};
+//保存系统规则开关
+export const saveSysOperate = (params) => {
+ return postFetch("/api/bs/hrmsalary/sys/operate", params);
+};
//保存个税申报撤回规则
export const saveWithDrawTaxDeclaration = (params) => {
return postFetch("/api/bs/hrmsalary/sys/saveWithDrawTaxDeclaration", params);
@@ -63,3 +71,7 @@ export const reportStatisticsReportSave = (params) => {
export const reportGetForm = params => {
return WeaTools.callApi("/api/bs/hrmsalary/report/statistics/report/getForm", "GET", params);
};
+//工资单反馈
+export const saveSalarySendFeedback = (params) => {
+ return postFetch("/api/bs/hrmsalary/sys/saveSalarySendFeedback", params);
+};
diff --git a/pc4mobx/hrmSalary/apis/taxAgent.js b/pc4mobx/hrmSalary/apis/taxAgent.js
index f22de23d..8225e46e 100644
--- a/pc4mobx/hrmSalary/apis/taxAgent.js
+++ b/pc4mobx/hrmSalary/apis/taxAgent.js
@@ -70,6 +70,18 @@ export const deleteTaxAgent = (params) => {
export const taxAgentRangeSave = (params) => {
return postFetch("/api/bs/hrmsalary/taxAgent/range/save", params);
};
+//非系统人员范围查询
+export const taxAgentRangelistExt = (params) => {
+ return postFetch("/api/bs/hrmsalary/taxAgent/range/listExt", params);
+};
+//非系统人员范围删除
+export const taxAgentRangeExtDelete = (params) => {
+ return postFetch("/api/bs/hrmsalary/taxAgent/range/ext/delete", params);
+};
+//非系统人员范围保存
+export const taxAgentRangeExtSave = (params) => {
+ return postFetch("/api/bs/hrmsalary/taxAgent/range/ext/save", params);
+};
//人员范围删除
export const taxAgentRangeDelete = (params) => {
return postFetch("/api/bs/hrmsalary/taxAgent/range/delete", params);
diff --git a/pc4mobx/hrmSalary/components/externalPersonModal/index.js b/pc4mobx/hrmSalary/components/externalPersonModal/index.js
new file mode 100644
index 00000000..64f21fbf
--- /dev/null
+++ b/pc4mobx/hrmSalary/components/externalPersonModal/index.js
@@ -0,0 +1,86 @@
+/*
+ * Author: 黎永顺
+ * name: 外部人员添加弹框
+ * Description:
+ * Date: 2023/3/14
+ */
+import React, { Component } from "react";
+import { WeaBrowser, WeaDialog, WeaFormItem, WeaSearchGroup } from "ecCom";
+import { Button, Modal } from "antd";
+
+class Index extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ targetIds: "",
+ targetNames: ""
+ };
+ }
+
+ handleExternalPersonSave = () => {
+ const { targetIds } = this.state;
+ const { onExternalPersonSave } = this.props;
+ if (!_.isEmpty(targetIds)) {
+ onExternalPersonSave({ targetIds: targetIds.split(",") });
+ } else {
+ Modal.warning({
+ title: "信息确认",
+ content: "必要信息不完整,红色*为必填项!"
+ });
+ }
+ };
+
+ render() {
+ const { targetIds, targetNames } = this.state;
+ const { onCancel, visible, loading } = this.props;
+ const buttons = [
+ ,
+
+ ];
+ return (
+
+
+
+ this.setState({ targetIds, targetNames })}
+ />
+
+
+
+ );
+ }
+}
+
+export default Index;
diff --git a/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js b/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js
new file mode 100644
index 00000000..9e24dbf5
--- /dev/null
+++ b/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js
@@ -0,0 +1,86 @@
+/*
+ * Author: 黎永顺
+ * name: 导入-步骤一
+ * Description:
+ * Date: 2023/8/11
+ */
+import React, { Component } from "react";
+import { WeaLocaleProvider } from "ecCom";
+import { Icon, Upload, message } from "antd";
+
+const Dragger = Upload.Dragger;
+const { getLabel } = WeaLocaleProvider;
+
+class ImpStep1 extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ fileList: []
+ };
+ }
+
+ handleChange = (data) => {
+ const { fileList, file } = data;
+ if (file.response && typeof (file.response) != "undefined") message.success(getLabel(111, "上传成功"));
+ this.setState({ fileList });
+ };
+
+ render() {
+ const { fileList } = this.state;
+ const dragger = {
+ accept: ".xlsx",
+ name: "file",
+ multiple: false,
+ action: "/api/doc/upload/uploadFile",
+ fileList,
+ onChange: this.handleChange
+ };
+ return (
+
+ {/* 导入选项 */}
+ {
+ this.props.importParams &&
+
+
{getLabel(543201, "导入选项")}
+ {this.props.importParams}
+
+ }
+
{getLabel(543202, "导入Excel")}
+
+
+
+
+
{getLabel(543203, "点击或将文件拖拽到此区域上传")}
+
{getLabel(543204, "支持单个或批量上传,严禁上传公司内部资料及其他违禁文件")}
+
+
+
+
+
+
{getLabel(27577, "操作步骤")}
+
+ {`1. ${getLabel(30907, "第一步")},${getLabel(543205, "请选择导出的Excel文件或")}`}
+ {getLabel(543207, "点击这里下载模板")}
+
+
{`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;`}
+
+
+
+ );
+ }
+}
+
+export default ImpStep1;
diff --git a/pc4mobx/hrmSalary/components/importDialog/components/impStep3.js b/pc4mobx/hrmSalary/components/importDialog/components/impStep3.js
new file mode 100644
index 00000000..481813b4
--- /dev/null
+++ b/pc4mobx/hrmSalary/components/importDialog/components/impStep3.js
@@ -0,0 +1,51 @@
+/*
+ * Author: 黎永顺
+ * name: 导入-步骤3
+ * Description:
+ * Date: 2023/8/11
+ */
+import React, { Component } from "react";
+import { WeaLocaleProvider, WeaTable } from "ecCom";
+import successImg from "../../importModal/success.svg";
+
+const getLabel = WeaLocaleProvider.getLabel;
+
+class ImpStep3 extends Component {
+ render() {
+ const { importResult } = this.props;
+ return (
+
+ {
+ !_.isEmpty(importResult) ?
+
+

+
+ {getLabel(389249, "已导入")}
+ {importResult.successCount}
+ {`${getLabel(30690, "条数据")},${getLabel(25009, "失败")}`}
+ {importResult.errorCount} {getLabel(30690, "条数据")}
+
+
:
+
+
{getLabel(111, "导入失败")}
+
+ }
+ {
+ !_.isEmpty(importResult.errorData) &&
+
+ }
+
+ );
+ }
+}
+
+export default ImpStep3;
diff --git a/pc4mobx/hrmSalary/components/importDialog/index.js b/pc4mobx/hrmSalary/components/importDialog/index.js
new file mode 100644
index 00000000..49956e37
--- /dev/null
+++ b/pc4mobx/hrmSalary/components/importDialog/index.js
@@ -0,0 +1,135 @@
+/*
+ * Author: 黎永顺
+ * name: 导入弹框-步骤条
+ * Description:
+ * Date: 2023/8/11
+ */
+import React, { Component } from "react";
+import { Button, message, Modal } from "antd";
+import { WeaDialog, WeaLocaleProvider, WeaSteps } from "ecCom";
+import ImpStep1 from "./components/impStep1";
+import ImpStep3 from "./components/impStep3";
+import "./index.less";
+
+const { getLabel } = WeaLocaleProvider;
+const Step = WeaSteps.Step;
+
+class Index extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ current: 0
+ };
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (JSON.stringify(nextProps.importResult) !== JSON.stringify(this.props.importResult)) {
+ this.setState({
+ current: this.state.current + 1
+ });
+ }
+ if (nextProps.visible !== this.props.visible && !nextProps.visible) this.setState({ current: 0 });
+ }
+
+ renderChildren = () => {
+ const { current } = this.state;
+ const { importParams, link, excludeKey, importResult } = this.props;
+ let CurrentDom = null;
+ switch (current) {
+ case 0:
+ CurrentDom = this.step1Ref = dom}/>;
+ break;
+ case 1:
+ CurrentDom = null;
+ if (excludeKey) {
+ CurrentDom = ;
+ }
+ break;
+ case 2:
+ CurrentDom = null;
+ break;
+ default:
+ CurrentDom = null;
+ break;
+ }
+ return CurrentDom;
+ };
+
+ /*
+ * Author: 黎永顺
+ * Description: 下一步
+ * Params:
+ * Date: 2023/8/11
+ */
+ handleNext = () => {
+ const { params } = this.props;
+ const { fileList } = this.step1Ref.state;
+ if (!_.isEmpty(params)) {
+ if (!Object.values(params).every(o => !!o)) {
+ Modal.warning({
+ title: getLabel(131329, "信息确认"),
+ content: getLabel(518702, "必要信息不完整,红色*为必填项!")
+ });
+ return;
+ }
+ }
+ if (_.isEmpty(fileList)) {
+ message.error(getLabel(111, "请先上传EXCEL文件"));
+ return;
+ }
+ const [file] = fileList;
+ const { response } = file;
+ this.props.nextCallback(response.data.fileid);
+ };
+
+ render() {
+ const { current } = this.state;
+ const stepData = [
+ { key: 0, label: getLabel(543202, "上传EXCEL") },
+ { key: 1, label: getLabel(543200, "数据预览") },
+ { key: 2, label: getLabel(502835, "导入数据") }
+ ];
+ const btns = [
+ ,
+ ,
+
+ ];
+ return (
+
+
+
+
+ {/*this.props.key: 不需要展示的步骤*/}
+ {
+ _.map(_.filter(stepData, item => item.key !== this.props.excludeKey), it => (
+ ))
+ }
+
+
+
+ {
+ this.renderChildren()
+ }
+
+
+
+ );
+ }
+}
+
+export default Index;
diff --git a/pc4mobx/hrmSalary/components/importDialog/index.less b/pc4mobx/hrmSalary/components/importDialog/index.less
new file mode 100644
index 00000000..8e4dbb53
--- /dev/null
+++ b/pc4mobx/hrmSalary/components/importDialog/index.less
@@ -0,0 +1,145 @@
+.importBox {
+ .importCont {
+ padding: 16px 8px;
+
+ .weapp-batch-impsteps-picker-content-imp-steps {
+ width: 80%;
+ margin: 0 auto;
+ }
+
+ .weapp-batch-impsteps-picker {
+ margin: 16px auto;
+
+ .weapp-batch-impsteps-picker-content-imp-step1 {
+ width: 98%;
+ background-color: #fff;
+ margin: 8px auto;
+ border-radius: 3px;
+ padding: 1px 12px;
+
+ .weapp-batch-impsteps-picker-content-imp-step1 div {
+ color: #111;
+ line-height: 22px;
+ }
+
+ .weapp-salary-tb-border-bottom .weapp-salary-tb-filter.weapp-salary-import-param {
+ box-sizing: border-box;
+ padding: 16px;
+ height: auto;
+ flex-wrap: wrap;
+ width: 100%;
+ }
+
+ .weapp-salary-import-param {
+ border: 1px solid #ebedf0;
+ padding: 8px;
+ margin: 4px 0 14px;
+ }
+
+ .weapp-salary-tb-filter {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ height: 46px;
+ }
+
+ .weapp-salary-tb-border-bottom .weapp-salary-tb-filter.weapp-salary-import-param .tbf-item {
+ display: flex;
+ justify-content: flex-start !important;
+ }
+
+ .weapp-salary-tb-filter .tbf-item {
+ padding: 0 20px 0 0;
+ display: flex;
+ align-items: center;
+ font-size: 12px;
+ color: #111;
+ height: 40px;
+ }
+
+ .weapp-salary-tb-filter .tbf-item > .tbfi-label {
+ flex-basis: 100px;
+ flex-shrink: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ padding-right: 10px;
+ color: #666;
+ }
+
+ .draggerUploadWrapper {
+ margin: 16px 0 0;
+
+ .ant-upload-drag-container {
+ padding: 24px 0 16px;
+
+ .iconUpload {
+ i {
+ color: #5d9cec;
+ font-size: 43px;
+ }
+ }
+
+ .uplaod-title {
+ font-size: 14px;
+ color: #333;
+ height: 24px;
+ line-height: 24px;
+ margin-top: 8px;
+ }
+
+ .uplaod-subTitle {
+ height: 22px;
+ font-size: 12px;
+ color: #666;
+ text-align: center;
+ line-height: 22px;
+ }
+ }
+ }
+
+ .bottom-border, .description {
+ margin-top: 12px;
+
+ p {
+ font-size: 12px;
+ color: #666;
+ line-height: 15px;
+ margin: 12px 0;
+ }
+ }
+
+ .bottom-border {
+ border-bottom: 1px solid #e5e5e5;
+
+ .weapp-salary-link {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ color: #5d9cec;
+ }
+ }
+
+ }
+ }
+
+ .weapp-batch-impsteps-picker-content-imp-step3 {
+ .weapp-batch-impsteps-picker-spinText {
+ position: relative;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ padding-top: 80px;
+ padding-bottom: 80px;
+ text-align: center;
+
+ p {
+ margin: 14px 0;
+ }
+ }
+ }
+
+ }
+}
diff --git a/pc4mobx/hrmSalary/index.js b/pc4mobx/hrmSalary/index.js
index dc875fdd..008aba13 100644
--- a/pc4mobx/hrmSalary/index.js
+++ b/pc4mobx/hrmSalary/index.js
@@ -20,6 +20,8 @@ import Payroll from "./pages/payroll";
import PayrollGrant from "./pages/payroll/payrollGrant";
import PayrollDetail from "./pages/payroll/payrollDetail";
import Declare from "./pages/declare";
+import Employeedeclare from "./pages/employeedeclare";
+import EmployeedeclareDetail from "./pages/employeedeclareDetail";
import TaxRate from "./pages/taxRate";
import TaxAgents from "./pages/taxAgent";
import TaxAgent from "./pages/salary/taxAgent";
@@ -39,6 +41,7 @@ import ReportView from "./pages/reportView";
import MySalaryView from "./pages/mySalary/mySalaryView";
import WatermarkPreview from "./pages/payroll/watermarkPreview";
import IntelligentCalculateSalarySettings from "./pages/intelligentCalculateSalarySettings";
+import ExternalPersonManage from "./pages/externalPersonManage";
import stores from "./stores";
import "./style/index";
@@ -88,6 +91,9 @@ const DataAcquisition = (props) => props.children;
// fieldManagement 字段管理
// analysisOfSalaryStatistics 薪酬统计分析
// reportView 薪酬报表查看
+// externalPersonManage 非系统人员管理
+// employeedeclare 人员信息报送
+// employeedeclareDetail 人员信息报送详情
// intelligentCalculateSalarySettings 智能算薪
const Routes = (
@@ -151,6 +157,8 @@ const Routes = (
component={TemplatePreview}
/>
+
+
+
);
diff --git a/pc4mobx/hrmSalary/pages/calculateDetail/customExportDialog.js b/pc4mobx/hrmSalary/pages/calculateDetail/customExportDialog.js
new file mode 100644
index 00000000..62b0b617
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/calculateDetail/customExportDialog.js
@@ -0,0 +1,127 @@
+/*
+ * Author: 黎永顺
+ * name: 薪资核算-自定义导出字段弹框
+ * Description:
+ * Date: 2023/7/17
+ */
+import React, { Component } from "react";
+import { Button, Col, message, Row } from "antd";
+import { WeaCheckbox, WeaDialog, WeaLocaleProvider, WeaSearchGroup } from "ecCom";
+import { customCacheExportField } from "../../apis/calculate";
+import { convertToUrlString, getQueryString } from "../../util/url";
+import "./acctResult/importModal/index.less";
+
+
+const { getLabel } = WeaLocaleProvider;
+
+class CustomExportDialog extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ itemsCheckeds: [],
+ showOnlyChecked: false
+ };
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (nextProps.visible !== this.props.visible && nextProps.visible) {
+ this.setState({
+ itemsCheckeds: !_.isEmpty(nextProps.checkItems) ? nextProps.checkItems : []
+ });
+ }
+ }
+
+ customExportClick = () => {
+ const { searchItemsValue } = this.props;
+ const { itemsCheckeds } = this.state;
+ customCacheExportField({ salaryItems: _.map(itemsCheckeds, it => it.toString()) }).then(({ status, errorMsg }) => {
+ if (status) {
+ const { consolidatedTaxation = "0", ...extra } = searchItemsValue;
+ const payload = { ...extra, consolidatedTaxation: consolidatedTaxation === "0" ? "" : consolidatedTaxation };
+ window.open(
+ `/api/bs/hrmsalary/salaryacct/acctresult/exportWithCustomFields?salaryAcctRecordId=${getQueryString("id")}&ids=&${convertToUrlString(payload)}&salaryItemIds=${itemsCheckeds.join(",")}`
+ );
+ } else {
+ message.error(errorMsg);
+ }
+ });
+ };
+ handleShowOnlyChecked = (showOnlyChecked) => this.setState({ showOnlyChecked: !!Number(showOnlyChecked) });
+ handleSelectGroupAll = (groupId, checked) => {
+ const { itemsCheckeds } = this.state;
+ const { itemsByGroup } = this.props;
+ _.map(itemsByGroup, item => {
+ if (item.salarySobItemGroupId === groupId) {
+ if (!!Number(checked)) {
+ this.setState({
+ itemsCheckeds: [...itemsCheckeds, ..._.map(item.salaryItems, child => child.salaryItemId)]
+ });
+ } else {
+ this.setState({
+ itemsCheckeds: _.differenceWith(itemsCheckeds, _.map(item.salaryItems, child => child.salaryItemId), _.isEqual)
+ });
+ }
+ }
+ });
+ };
+
+ render() {
+ const { showOnlyChecked, itemsCheckeds } = this.state;
+ const { itemsByGroup } = this.props;
+ let dataSource = _.map(itemsByGroup, item => {
+ return {
+ ...item,
+ salaryItems: _.map(item.salaryItems, child => {
+ return { ...child, checked: itemsCheckeds.includes(child.salaryItemId) };
+ })
+ };
+ });
+ if (showOnlyChecked) {
+ dataSource = _.map(dataSource, item => {
+ return { ...item, salaryItems: _.filter(item.salaryItems, it => !!it.checked) };
+ });
+ }
+ return (
+ {getLabel(17416, "导出")},
+
+ ]}
+ bottomLeft={}
+ >
+ {
+ _.map(dataSource, item => {
+ const { salarySobItemGroupName, salaryItems, salarySobItemGroupId } = item;
+ const value = _.every(salaryItems, it => !!it.checked) ? "1" : "0";
+ return this.handleSelectGroupAll(salarySobItemGroupId, val)}/>}>
+
+ {
+ !_.isEmpty(salaryItems) ?
+ _.map(salaryItems, it => {
+ const { salaryItemId, salaryItemName, checked } = it;
+ return
+ this.setState({ itemsCheckeds: _.xorWith(itemsCheckeds, [salaryItemId], _.isEqual) })}/>
+ ;
+ }) : {getLabel(83553, "暂无数据")}
+ }
+
+ ;
+ })
+ }
+
+ );
+ }
+}
+
+export default CustomExportDialog;
diff --git a/pc4mobx/hrmSalary/pages/calculateDetail/index.js b/pc4mobx/hrmSalary/pages/calculateDetail/index.js
index 72ce7a6b..d43cfb66 100644
--- a/pc4mobx/hrmSalary/pages/calculateDetail/index.js
+++ b/pc4mobx/hrmSalary/pages/calculateDetail/index.js
@@ -3,14 +3,25 @@ import UserSure from "./userSure";
import { inject, observer } from "mobx-react";
import SalaryDetail from "./salaryDetail";
import { Button, Dropdown, Menu, message, Modal } from "antd";
-import { WeaBrowser, WeaCheckbox, WeaDropdown, WeaFormItem, WeaInput, WeaSearchGroup, WeaSelect, WeaTab } from "ecCom";
+import {
+ WeaBrowser,
+ WeaCheckbox,
+ WeaDropdown,
+ WeaFormItem,
+ WeaInput,
+ WeaLocaleProvider,
+ WeaSearchGroup,
+ WeaSelect,
+ WeaTab
+} from "ecCom";
import { convertToUrlString, getQueryString } from "../../util/url";
import AcctResultImportModal from "./acctResult/importModal/acctResultImportModal";
import ProgressModal from "../../components/progressModal";
-import { salaryacctAcctresultCheckAuth } from "../../apis/calculate";
+import { getExportField, salaryacctAcctresultCheckAuth } from "../../apis/calculate";
+import CustomExportDialog from "./customExportDialog";
import Authority from "../mySalary/authority";
-
+const getLabel = WeaLocaleProvider.getLabel;
const { ButtonSelect } = WeaDropdown;
@inject("calculateStore", "salaryFileStore", "taxAgentStore")
@@ -36,7 +47,10 @@ export default class CalculateDetail extends React.Component {
progress: 0,
accountIds: [],
accountExceptInfo: "",
- calculateAuth: false
+ calculateAuth: false,
+ customExportParams: {
+ visible: false, checkItems: [], itemsByGroup: []
+ }
};
this.id = "";
this.timer = null;
@@ -239,9 +253,26 @@ export default class CalculateDetail extends React.Component {
window.open(
`/api/bs/hrmsalary/salaryacct/acctresult/export?salaryAcctRecordId=${this.id}&ids=&${convertToUrlString(payload)}`
);
+ } else if (e.key === "4") {
+ // 自定义导出
+ this.getExportField();
}
};
+ getExportField = () => {
+ getExportField({ salaryAcctRecordId: getQueryString("id") }).then(({ status, data }) => {
+ if (status) {
+ const { checkItems, itemsByGroup } = data;
+ this.setState({
+ customExportParams: {
+ visible: true,
+ checkItems, itemsByGroup
+ }
+ });
+ }
+ });
+ };
+
// 导入表单添加表头回调
handleAcctModalAdd(fieldData) {
this.setState({
@@ -284,13 +315,21 @@ export default class CalculateDetail extends React.Component {
};
render() {
- const { selectedKey, acctResultImportVisiable, showSearchAd, calculateAuth } = this.state;
+ const {
+ selectedKey,
+ acctResultImportVisiable,
+ showSearchAd,
+ calculateAuth,
+ customExportParams,
+ searchItemsValue
+ } = this.state;
const { taxAgentStore: { payrollPermission } } = this.props;
const menu = (
);
@@ -417,6 +456,17 @@ export default class CalculateDetail extends React.Component {
}}
progress={this.state.progress}
/>}
+ {
+ this.setState({
+ customExportParams: {
+ visible: false, checkItems: [], itemsByGroup: []
+ }
+ });
+ }}
+ />
);
diff --git a/pc4mobx/hrmSalary/pages/calculateDetail/placeOnFileDetail.js b/pc4mobx/hrmSalary/pages/calculateDetail/placeOnFileDetail.js
index 8ab69098..e3c795e8 100644
--- a/pc4mobx/hrmSalary/pages/calculateDetail/placeOnFileDetail.js
+++ b/pc4mobx/hrmSalary/pages/calculateDetail/placeOnFileDetail.js
@@ -2,13 +2,16 @@ import React from "react";
import { toJS } from "mobx";
import CustomTab from "../../components/customTab";
import { Dropdown, Menu, message } from "antd";
-import { WeaHelpfulTip, WeaInputSearch, WeaSlideModal } from "ecCom";
+import { WeaHelpfulTip, WeaInputSearch, WeaLocaleProvider, WeaSlideModal } from "ecCom";
import SlideModalTitle from "../../components/slideModalTitle";
import FileMergeDetail from "./fileMergeDetail";
import { getQueryString } from "../../util/url";
import { inject, observer } from "mobx-react";
+import { getExportField } from "../../apis/calculate";
import "./index.less";
+import CustomExportDialog from "./customExportDialog";
+const getLabel = WeaLocaleProvider.getLabel;
@inject("calculateStore")
@observer
export default class PlaceOnFileDetail extends React.Component {
@@ -18,7 +21,10 @@ export default class PlaceOnFileDetail extends React.Component {
slideVisiable: false,
selectedRowKeys: [],
searchValue: "",
- columnIndex: ""
+ columnIndex: "",
+ customExportParams: {
+ visible: false, checkItems: [], itemsByGroup: []
+ }
};
this.id = "";
}
@@ -95,15 +101,33 @@ export default class PlaceOnFileDetail extends React.Component {
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*");
};
- handleMenuClick() {
- const { calculateStore: { exportAll } } = this.props;
- const { selectedRowKeys } = this.state;
- if (selectedRowKeys.length === 0) {
- message.warning("未选择条目");
- return;
+ handleMenuClick = ({ key }) => {
+ if (key === "3") {
+ const { calculateStore: { exportAll } } = this.props;
+ const { selectedRowKeys } = this.state;
+ if (selectedRowKeys.length === 0) {
+ message.warning("未选择条目");
+ return;
+ }
+ exportAll(this.id, selectedRowKeys.join(","));
+ } else if (key === "4") {
+ this.getExportField();
}
- exportAll(this.id, selectedRowKeys.join(","));
- }
+ };
+
+ getExportField = () => {
+ getExportField({ salaryAcctRecordId: getQueryString("id") }).then(({ status, data }) => {
+ if (status) {
+ const { checkItems, itemsByGroup } = data;
+ this.setState({
+ customExportParams: {
+ visible: true,
+ checkItems, itemsByGroup
+ }
+ });
+ }
+ });
+ };
handleExportAll = () => {
const { calculateStore: { exportAll } } = this.props;
@@ -113,11 +137,12 @@ export default class PlaceOnFileDetail extends React.Component {
render() {
const { calculateStore } = this.props;
const { baseSalarySobCycle, columnDescList } = calculateStore;
- const { slideVisiable, columnIndex } = this.state;
+ const { slideVisiable, columnIndex, customExportParams } = this.state;
const menu = (
);
@@ -171,6 +196,17 @@ export default class PlaceOnFileDetail extends React.Component {
id="atdTable"
/>
+ {
+ this.setState({
+ customExportParams: {
+ visible: false, checkItems: [], itemsByGroup: []
+ }
+ });
+ }}
+ />
{
slideVisiable &&
}
+ buttons={[
+
+ ]}
+ >
+
+
+
+ ({getLabel(83110, "查看详情")})
+ }
+ ]}
+ dataSource={[]}
+ 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 }
+ });
+ },
+ onChange: current => {
+ this.setState({
+ pageInfo: { ...pageInfo, current }
+ });
+ }
+ }}
+ />
+
+
+
+
+
+ );
+ }
+}
+
+export default Index;
diff --git a/pc4mobx/hrmSalary/pages/employeedeclareDetail/components/baseInfo.js b/pc4mobx/hrmSalary/pages/employeedeclareDetail/components/baseInfo.js
new file mode 100644
index 00000000..549a0dba
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/employeedeclareDetail/components/baseInfo.js
@@ -0,0 +1,60 @@
+/*
+ * Author: 黎永顺
+ * name: 人员信息报送-基础信息
+ * Description:
+ * Date: 2023/8/14
+ */
+import React, { Component } from "react";
+import { WeaLocaleProvider } from "ecCom";
+import { getQueryString } from "../../../util/url";
+import EmployeeDeclareDetailCalcDialog from "./employeeDeclareDetailCalcDialog";
+
+const { getLabel } = WeaLocaleProvider;
+
+class BaseInfo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ declareCalcDialog: {
+ visible: false
+ }
+ };
+ }
+
+ handleOpenFailDialog = () => {
+ this.setState({
+ declareCalcDialog: {
+ visible: true
+ }
+ });
+ };
+
+ render() {
+ const { declareCalcDialog } = this.state;
+ return (
+
+
{getLabel(537996, "个税扣缴义务人")}:{getQueryString("taxName")}
+
+ {/*报送失败数据查看*/}
+
{
+ this.setState({
+ declareCalcDialog: {
+ visible: false
+ }
+ });
+ }}
+ />
+
+ );
+ }
+}
+
+export default BaseInfo;
diff --git a/pc4mobx/hrmSalary/pages/employeedeclareDetail/components/employeeDeclareDetailCalcDialog.js b/pc4mobx/hrmSalary/pages/employeedeclareDetail/components/employeeDeclareDetailCalcDialog.js
new file mode 100644
index 00000000..83e88345
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/employeedeclareDetail/components/employeeDeclareDetailCalcDialog.js
@@ -0,0 +1,50 @@
+/*
+ * Author: 黎永顺
+ * name: 报送信息-失败查看弹框
+ * Description:
+ * Date: 2023/8/14
+ */
+import React, { Component } from "react";
+import { WeaDialog, WeaLocaleProvider, WeaTable } from "ecCom";
+import { Button, Col, Row } from "antd";
+
+const { getLabel } = WeaLocaleProvider;
+
+class EmployeeDeclareDetailCalcDialog extends Component {
+
+ render() {
+ return (
+
+
+ {getLabel(111, "报送失败数据详情")}
+
+
+
+
+ )}
+ style={{
+ width: 1150,
+ height: 606.6,
+ minHeight: 200,
+ minWidth: 380,
+ maxHeight: "90%",
+ maxWidth: "90%",
+ overflow: "hidden",
+ transform: "translate(0px, 0px)"
+ }}
+ >
+
+
+
+
+ );
+ }
+}
+
+export default EmployeeDeclareDetailCalcDialog;
diff --git a/pc4mobx/hrmSalary/pages/employeedeclareDetail/components/employeeDeclareDetailSchemaEditDialog.js b/pc4mobx/hrmSalary/pages/employeedeclareDetail/components/employeeDeclareDetailSchemaEditDialog.js
new file mode 100644
index 00000000..dc483a65
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/employeedeclareDetail/components/employeeDeclareDetailSchemaEditDialog.js
@@ -0,0 +1,63 @@
+/*
+ * Author: 黎永顺
+ * name: 报送信息-编辑、新增弹框
+ * Description:
+ * Date: 2023/8/14
+ */
+import React, { Component } from "react";
+import { WeaLocaleProvider, WeaSlideModal } from "ecCom";
+import { Button, Col, Row } from "antd";
+import { inject, observer } from "mobx-react";
+import { declareConditions } from "../constants";
+import { getSearchs } from "../../../util";
+
+const { getLabel } = WeaLocaleProvider;
+
+@inject("employeeDeclareStore")
+@observer
+class EmployeeDeclareDetailSchemaEditDialog extends Component {
+ componentDidMount() {
+ const { employeeDeclareStore: { declareForm } } = this.props;
+ declareForm.initFormFields(declareConditions);
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ }
+
+ handleSubmit = () => {
+ const { employeeDeclareStore: { declareForm: form } } = this.props;
+ form.validateForm().then(f => {
+ if (f.isValid) {
+ const payload = form.getFormParams();
+ console.log(payload);
+ } else {
+ f.showErrors();
+ }
+ });
+ };
+
+ render() {
+ const { employeeDeclareStore: { declareForm: form } } = this.props;
+ return (
+
+
+
+ {getLabel(111, "本月新增数据")}
+
+
+
+
+ )}
+ content={({getSearchs(form, declareConditions, 1)}
)}
+ />
+ );
+ }
+}
+
+export default EmployeeDeclareDetailSchemaEditDialog;
diff --git a/pc4mobx/hrmSalary/pages/employeedeclareDetail/constants.js b/pc4mobx/hrmSalary/pages/employeedeclareDetail/constants.js
new file mode 100644
index 00000000..9134619a
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/employeedeclareDetail/constants.js
@@ -0,0 +1,252 @@
+export const submitStatus = [
+ {
+ key: "ALL",
+ showname: "全部(报送状态)",
+ lanId: 332
+ },
+ {
+ key: "NOT_DECLARE",
+ showname: "待报送",
+ lanId: 111
+ },
+ {
+ key: "DECLARING",
+ showname: "报送中",
+ lanId: 111
+ },
+ {
+ key: "DECLARE_FAIL",
+ showname: "报送失败",
+ lanId: 111
+ },
+ {
+ key: "DECLARE_SUCCESS",
+ showname: "报送成功",
+ lanId: 111
+ }
+];
+
+
+export const advanceConditions = [
+ {
+ items: [
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["keyword"],
+ fieldcol: 18,
+ label: "姓名或工号",
+ lanId: 111,
+ labelcol: 6,
+ value: ""
+ },
+ {
+ browserConditionParam: {
+ completeParams: {},
+ conditionDataParams: {},
+ dataParams: {},
+ destDataParams: {},
+ hasAddBtn: false,
+ hasAdvanceSerach: true,
+ idSeparator: ",",
+ isAutoComplete: 1,
+ isDetail: 0,
+ isMultCheckbox: false,
+ isSingle: false,
+ linkUrl: "",
+ pageSize: 10,
+ quickSearchName: "",
+ replaceDatas: [],
+ title: "",
+ type: "57"
+ },
+ colSpan: 1,
+ conditionType: "BROWSER",
+ domkey: ["departmentIds"],
+ fieldcol: 18,
+ label: "部门",
+ lanId: 27511,
+ labelcol: 6
+ },
+ {
+ browserConditionParam: {
+ completeParams: {},
+ conditionDataParams: {},
+ dataParams: {},
+ destDataParams: {},
+ hasAddBtn: false,
+ hasAdvanceSerach: true,
+ idSeparator: ",",
+ isAutoComplete: 1,
+ isDetail: 0,
+ isMultCheckbox: false,
+ isSingle: false,
+ linkUrl: "",
+ pageSize: 10,
+ quickSearchName: "",
+ replaceDatas: [],
+ title: "",
+ type: "278"
+ },
+ colSpan: 1,
+ conditionType: "BROWSER",
+ domkey: ["positionIds"],
+ fieldcol: 18,
+ label: "岗位",
+ lanId: 6086,
+ labelcol: 6
+ },
+ {
+ colSpan: 1,
+ conditionType: "SELECT",
+ domkey: ["employmentStatus"],
+ fieldcol: 18,
+ label: "人员状态",
+ lanId: 382300,
+ labelcol: 6,
+ value: "",
+ options: []
+ },
+ {
+ colSpan: 1,
+ conditionType: "SELECT",
+ domkey: ["employmentType"],
+ fieldcol: 18,
+ label: "任职受雇从业类型",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ options: []
+ },
+ {
+ colSpan: 1,
+ conditionType: "RANGEPICKER",
+ domkey: ["fromEmploymentDate", "endEmploymentDate"],
+ fieldcol: 18,
+ label: "任职受雇日期",
+ lanId: 111,
+ labelcol: 6,
+ value: ""
+ },
+ {
+ colSpan: 1,
+ conditionType: "RANGEPICKER",
+ domkey: ["fromDismissDate", "endDismissDate"],
+ fieldcol: 18,
+ label: "离职日期",
+ lanId: 111,
+ labelcol: 6,
+ value: ""
+ },
+ {
+ colSpan: 1,
+ conditionType: "SELECT",
+ domkey: ["disability"],
+ fieldcol: 18,
+ label: "是否残疾",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ options: []
+ },
+ {
+ colSpan: 1,
+ conditionType: "SELECT",
+ domkey: ["lonelyOld"],
+ fieldcol: 18,
+ label: "是否孤老",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ options: []
+ },
+ {
+ colSpan: 1,
+ conditionType: "SELECT",
+ domkey: ["martyrDependents"],
+ fieldcol: 18,
+ label: "是否是烈属",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ options: []
+ },
+ {
+ colSpan: 1,
+ conditionType: "SELECT",
+ domkey: ["deductExpenses"],
+ fieldcol: 18,
+ label: "是否扣除减除费用",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ options: []
+ }
+ ],
+ defaultshow: true
+ }
+];
+
+export const declareConditions = [
+ {
+ items: [
+ {
+ colSpan: 2,
+ fieldcol: 12,
+ labelcol: 6,
+ rules: "selectLinkageRequired",
+ conditionType: "SELECT_LINKAGE",
+ selectLinkageDatas: {
+ "1": {
+ browserConditionParam: {
+ completeParams: {},
+ conditionDataParams: {},
+ dataParams: {},
+ destDataParams: {},
+ hasAddBtn: false,
+ hasAdvanceSerach: true,
+ idSeparator: ",",
+ isAutoComplete: 1,
+ isDetail: 0,
+ isMultCheckbox: false,
+ isSingle: true,
+ linkUrl: "",
+ pageSize: 10,
+ quickSearchName: "",
+ replaceDatas: [],
+ title: "",
+ type: "1"
+ },
+ conditionType: "BROWSER",
+ domkey: ["INPUT"]
+ },
+ "2": {
+ conditionType: "CHECKBOX",
+ domkey: ["CHECKBOX"]
+ }
+ },
+ options: [
+ { key: "1", showname: "今天" },
+ { key: "2", showname: "本周" }
+ ],
+ domkey: ["secleve"],
+ label: "系统名称",
+ lanId: 111,
+ viewAttr: 3
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["keyword"],
+ fieldcol: 12,
+ label: "证件姓名",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ rules: "required",
+ viewAttr: 3
+ }
+ ],
+ defaultshow: true
+ }
+];
diff --git a/pc4mobx/hrmSalary/pages/employeedeclareDetail/index.js b/pc4mobx/hrmSalary/pages/employeedeclareDetail/index.js
new file mode 100644
index 00000000..022bbf27
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/employeedeclareDetail/index.js
@@ -0,0 +1,165 @@
+/*
+ * Author: 黎永顺
+ * name: 人员信息报送-查看详情
+ * Description:
+ * Date: 2023/8/11
+ */
+import React, { Component } from "react";
+import { WeaDatePicker, WeaLocaleProvider, WeaSelect, WeaTab, WeaTop } from "ecCom";
+import { Button, Dropdown, Menu, Spin } from "antd";
+import BaseInfo from "./components/baseInfo";
+import EmployeeDeclareDetailSchemaEditDialog from "./components/employeeDeclareDetailSchemaEditDialog";
+import { advanceConditions, submitStatus } from "./constants";
+import { getSearchs } from "../../util";
+import { inject, observer } from "mobx-react";
+import { toJS } from "mobx";
+import "./index.less";
+
+const { getLabel } = WeaLocaleProvider;
+
+@inject("taxAgentStore", "employeeDeclareStore")
+@observer
+class Index extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ selectedKey: "0",
+ showSearchAd: false,
+ declareStatus: "ALL",
+ taxCycle: new Date(),
+ declareEditDialog: {
+ visible: false
+ }
+ };
+ }
+
+ componentDidMount() {
+ const { employeeDeclareStore: { advanceForm } } = this.props;
+ document.title = getLabel(544289, "人员信息报送");
+ advanceForm.initFormFields(advanceConditions);
+ window.addEventListener("message", this.handleReceive, false);
+ this.setCss();
+ }
+
+ componentWillUnmount() {
+ window.removeEventListener("message", this.handleReceive, false);
+ }
+
+ setCss = () => {
+ $($("head")[0]).append("");
+ };
+
+ handleReceive = ({ data }) => {
+ const { type, payload: { id, params } = {} } = data;
+ if (type === "init") {
+ this.postMessageToChild({});
+ } else if (type === "turn") {
+ if (id === "PAGEINFO") {
+ const { pageNum: current, size: pageSize } = params;
+ this.setState({ pageInfo: { ...pageInfo, current, pageSize } });
+ }
+ }
+ };
+ postMessageToChild = (payload) => {
+ const childFrameObj = document.getElementById("atdTable");
+ childFrameObj && childFrameObj.contentWindow.postMessage(JSON.stringify({}), "*");
+ };
+ handleAdd = () => {
+ this.setState({
+ declareEditDialog: {
+ visible: true
+ }
+ });
+ };
+
+ render() {
+ const { selectedKey, showSearchAd, declareStatus, taxCycle, declareEditDialog } = this.state;
+ const { taxAgentStore: { showOperateBtn }, employeeDeclareStore: { advanceForm: form } } = this.props;
+ const menu = (
+
+ );
+ const buttons = [
+ ,
+ ,
+ ,
+ console.log(val)}/>,
+
+
+
+ ];
+ const topTab = [
+ { title: getLabel(332, "全部"), viewcondition: "0" },
+ { title: getLabel(111, "本月新增"), viewcondition: "1" },
+ { title: getLabel(111, "本月信息变动"), viewcondition: "2" }
+ ];
+ return (
+ } className="declareWrapper"
+ buttons={showOperateBtn ? buttons : []}
+ >
+
+ {/*基础信息*/}
+
+ {/*列表数据*/}
+
+
this.setState({ showSearchAd: bool })}
+ advanceHeight={300} searchsAd={getSearchs(form, toJS(advanceConditions), 2)}
+ buttons={[
+
+ {getLabel(32935, "导入")}
+
+ }
+ type="primary">{getLabel(1421, "新增")},
+ ({ ...it, showname: getLabel(it.lanId, it.showname) }))}
+ onChange={declareStatus => this.setState({ declareStatus })}
+ />
+ ]} searchsBaseValue={form.getFormParams().keyword}
+ onSearchChange={(v) => form.updateFields({ keyword: v })}
+ onChange={key => this.setState({ selectedKey: key })}
+ onAdReset={() => form.resetForm()}
+ />
+
+
+
+
+ {/*新增编辑报送信息*/}
+ {
+ this.setState({
+ declareEditDialog: {
+ visible: false
+ }
+ });
+ }}
+ />
+
+
+
+
+ );
+ }
+}
+
+export default Index;
diff --git a/pc4mobx/hrmSalary/pages/employeedeclareDetail/index.less b/pc4mobx/hrmSalary/pages/employeedeclareDetail/index.less
new file mode 100644
index 00000000..946f67aa
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/employeedeclareDetail/index.less
@@ -0,0 +1,179 @@
+.declareWrapper {
+ .wea-new-top {
+ .moreBtn {
+ border: 1px solid transparent;
+
+ i {
+ font-weight: 700;
+ transform: rotate(90deg);
+ }
+ }
+
+ .moreBtn:hover {
+ border: 1px solid #57c5f7;
+ background: #ffffff;
+ color: #57c5f7;
+ }
+ }
+
+ .base-info {
+ background: #ebf4ff;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ min-height: 50px;
+ margin-bottom: 8px;
+ border-radius: 4px;
+ padding: 0 16px;
+
+ .right .header-declare-info {
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ font-size: 12px;
+ margin-right: 16px;
+
+ .fail {
+ color: #5d9cec;
+ cursor: pointer;
+ margin-right: 10px;
+ }
+ }
+ }
+
+ .listview-com-layout {
+ padding: 0 16px;
+
+ .wea-tab .wea-tab-right, .wea-input-focus {
+ background: transparent;
+ }
+ }
+}
+
+.pickerDateCustom {
+ .icon-coms-Browse-box-delete, .icon-coms-Browse-box-Add-to {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid #e5e5e5;
+ background: transparent;
+ cursor: pointer;
+ outline: none;
+ padding: 0 6px;
+ height: 30px;
+ top: auto;
+ }
+
+ .icon-coms-Browse-box-delete:hover, .icon-coms-Browse-box-Add-to:hover {
+ color: #5d9cec;
+ }
+
+}
+
+//.ant-calendar-picker-container {
+// right: 0 !important;
+// left: auto !important;
+//}
+
+.wea-slide-modal-title {
+ border-bottom: 1px solid #e5e5e5 !important;
+}
+
+.wea-slide-modal-content {
+ height: 100%;
+}
+
+.declareSchemeDialogTitle {
+ border-bottom: 1px solid #e5e5e5;
+
+ .declareSchemeDialogTitle-left {
+ text-align: left;
+ padding-left: 16px;
+
+ .icon-circle-base {
+ background: rgb(241, 74, 45);
+ }
+
+ .title {
+ color: #111;
+ font-weight: 700;
+ }
+ }
+
+ .declareSchemeDialogTitle-right {
+ text-align: right;
+ padding-right: 56px;
+ }
+}
+
+.declareSchemeDialog {
+ height: 100%;
+ padding: 16px;
+ overflow-y: auto;
+ background: #f6f6f6;
+
+ .wea-search-group .wea-content {
+ padding: 0;
+ }
+
+ .wea-search-group {
+ border: 1px solid #e5e5e5;
+ border-bottom: none;
+ background: #fff;
+
+ .wea-form-item {
+ padding: 5px 16px;
+ border-bottom: 1px solid #e5e5e5;
+ }
+ }
+
+ .wea-search-group, .wea-form-cell {
+ padding: 0;
+ }
+}
+
+.declareCalcDialog {
+ .declareCalcDialogTitle {
+ display: flex;
+ align-items: center;
+
+ .declareCalcDialogTitle-left {
+ text-align: left;
+
+ .title {
+ color: #111;
+ font-weight: 700;
+ }
+ }
+
+ .declareCalcDialogTitle-right {
+ text-align: right;
+ }
+ }
+
+ .declareCalcDialogContent {
+ height: 100%;
+ padding: 16px;
+ background: #f6f6f6;
+ }
+}
+
+.flex {
+ display: flex;
+}
+
+.flex-rollback {
+ flex-direction: column;
+}
+
+.flex-1 {
+ flex: 1;
+
+ .ant-spin-nested-loading, .ant-spin-container {
+ height: 99%;
+ }
+}
+
+.a-center {
+ align-items: center;
+}
diff --git a/pc4mobx/hrmSalary/pages/externalPersonManage/components/externalPersonManageEditSlide.js b/pc4mobx/hrmSalary/pages/externalPersonManage/components/externalPersonManageEditSlide.js
new file mode 100644
index 00000000..c564b29e
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/externalPersonManage/components/externalPersonManageEditSlide.js
@@ -0,0 +1,133 @@
+/*
+ * Author: 黎永顺
+ * name: 非系统人员管理表单项
+ * Description:
+ * Date: 2023/3/13
+ */
+import React, { Component } from "react";
+import { WeaSlideModal } from "ecCom";
+import { message } from "antd";
+import { getConditionDomkeys, getSearchs } from "../../../util";
+import SlideModalTitle from "../../../components/slideModalTitle";
+import { detail, save, update } from "../../../apis/externalPersonManage";
+
+class ExternalPersonManageEditSlide extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ date: "",
+ loading: false
+ };
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (nextProps.visible !== this.props.visible && nextProps.visible && nextProps.id) this.detail(nextProps);
+ }
+
+ detail = (props) => {
+ const { form, id, condition } = props;
+ detail({ id }).then(({ status, data }) => {
+ if (status) {
+ form.updateFields({
+ "departmentId": {
+ value: data["departmentId"],
+ valueSpan: data["departmentOrgName"],
+ valueObj: [{ id: data["departmentId"], name: data["departmentOrgName"] }]
+ }
+ });
+ form.updateFields({
+ "subcompanyId": {
+ value: data["subcompanyId"],
+ valueSpan: data["subcompanyOrgName"],
+ valueObj: [{ id: data["subcompanyId"], name: data["subcompanyOrgName"] }]
+ }
+ });
+ // form.updateFields({
+ // "jobtitleId": {
+ // value: jobtitleId,
+ // valueSpan: data["jobtitleOrgName"],
+ // valueObj: [{ id: jobtitleId, name: data["jobtitleOrgName"] }]
+ // }
+ // });
+ _.map(_.without(getConditionDomkeys(condition), "departmentId", "subcompanyId"), item => {
+ form.updateFields({ [item]: { value: data[item] } }, false);
+ });
+ }
+ });
+ };
+
+ handleSubmit = () => {
+ const { form, id, onCancel, title } = this.props;
+ form.validateForm().then(f => {
+ if (f.isValid) {
+ const tmpV = _.reduce(_.keys(form.getFormDatas()), (pre, cur) => {
+ if (cur === "departmentId") {
+ return _.assign(pre, {
+ [cur]: form.getFormDatas()[cur].value,
+ departmentName: form.getFormDatas()["departmentId"].valueSpan
+ });
+ } else if (cur === "subcompanyId") {
+ return _.assign(pre, {
+ [cur]: form.getFormDatas()[cur].value,
+ subcompanyName: form.getFormDatas()["subcompanyId"].valueSpan
+ });
+ }
+ return _.assign(pre, { [cur]: form.getFormDatas()[cur].value });
+ }, {});
+ const payload = _.omitBy(form.getFormParams(), _.isNil);
+ this.setState({ loading: true });
+ const APIFOX = !id ? save : update;
+ APIFOX(id ? { ...payload, id } : payload).then(({ status, errormsg }) => {
+ this.setState({ loading: false });
+ if (status) {
+ message.success(`${title}成功`);
+ onCancel(true);
+ } else {
+ message.error(errormsg || `${title}失败`);
+ }
+ }).catch(() => this.setState({ loading: false }));
+ } else {
+ f.showErrors();
+ this.setState({ date: new Date() });
+ }
+ });
+ };
+ handleFormChange = (res) => {
+ const { form, id } = this.props;
+ if (_.keys(res)[0] === "departmentId" || _.keys(res)[0] === "subcompanyId") {
+ const key = _.replace(_.keys(res)[0], "Id", "Name");
+ form.updateFields({ [key]: res[_.keys(res)[0]].valueSpan || "" });
+ }
+ };
+
+ render() {
+ const { loading } = this.state;
+ const { visible, title, onCancel, showOperateBtn, form, condition } = this.props;
+ return (
+
+ }
+ content={getSearchs(form, condition, 1, false, this.handleFormChange)}
+ onClose={onCancel}
+ />
+ );
+ }
+}
+
+export default ExternalPersonManageEditSlide;
diff --git a/pc4mobx/hrmSalary/pages/externalPersonManage/conditions.js b/pc4mobx/hrmSalary/pages/externalPersonManage/conditions.js
new file mode 100644
index 00000000..c208e585
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/externalPersonManage/conditions.js
@@ -0,0 +1,208 @@
+export const searchCondition = [
+ {
+ items: [
+ {
+ colSpan: 2,
+ conditionType: "INPUT",
+ domkey: ["username"],
+ fieldcol: 16,
+ label: "姓名",
+ labelcol: 8,
+ value: "",
+ viewAttr: 2
+ }
+ ],
+ defaultshow: true
+ }
+];
+export const condition = [
+ {
+ items: [
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["username"],
+ rules: "required|string",
+ fieldcol: 18,
+ label: "姓名",
+ labelcol: 6,
+ value: "",
+ 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: "57",
+ viewAttr: 2
+ },
+ colSpan: 1,
+ conditionType: "BROWSER",
+ domkey: ["departmentId"],
+ fieldcol: 18,
+ label: "部门",
+ labelcol: 6,
+ viewAttr: 2
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["departmentName"],
+ fieldcol: 18,
+ label: "部门名称",
+ labelcol: 6,
+ value: "",
+ hasBorder: true,
+ viewAttr: 1
+ },
+ {
+ 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: "164",
+ viewAttr: 2
+ },
+ colSpan: 1,
+ conditionType: "BROWSER",
+ domkey: ["subcompanyId"],
+ fieldcol: 18,
+ label: "分部",
+ labelcol: 6,
+ viewAttr: 2
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["subcompanyName"],
+ fieldcol: 18,
+ label: "分部名称",
+ labelcol: 6,
+ value: "",
+ hasBorder: true,
+ viewAttr: 1
+ },
+ // {
+ // 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: "24",
+ // viewAttr: 2,
+ // },
+ // colSpan: 1,
+ // conditionType: "BROWSER",
+ // domkey: ["jobtitleId"],
+ // fieldcol: 18,
+ // label: "岗位",
+ // labelcol: 6,
+ // viewAttr: 2,
+ // },
+ {
+ colSpan: 1,
+ conditionType: "DATEPICKER",
+ domkey: ["companystartdate"],
+ fieldcol: 18,
+ label: "入职日期",
+ labelcol: 6,
+ value: "",
+ viewAttr: 2
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["mobile"],
+ fieldcol: 18,
+ label: "手机",
+ labelcol: 6,
+ value: "",
+ viewAttr: 2
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["workcode"],
+ fieldcol: 18,
+ label: "工号",
+ labelcol: 6,
+ value: "",
+ viewAttr: 2
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["idNo"],
+ fieldcol: 18,
+ label: "身份证号码",
+ labelcol: 6,
+ value: "",
+ viewAttr: 2
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["bankCardNum"],
+ fieldcol: 18,
+ label: "本人开户的银行卡卡号",
+ labelcol: 6,
+ value: "",
+ viewAttr: 2
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["bankName"],
+ fieldcol: 18,
+ label: "本人开户的银行卡开户支行全称",
+ labelcol: 6,
+ value: "",
+ viewAttr: 2
+ }
+ ],
+ defaultshow: true,
+ title: "基本信息"
+ }
+];
diff --git a/pc4mobx/hrmSalary/pages/externalPersonManage/index.js b/pc4mobx/hrmSalary/pages/externalPersonManage/index.js
new file mode 100644
index 00000000..2f01ecd2
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/externalPersonManage/index.js
@@ -0,0 +1,180 @@
+/*
+ * Author: 黎永顺
+ * name: 非系统人员管理
+ * Description:
+ * Date: 2023/3/13
+ */
+import React, { Component } from "react";
+import { inject, observer } from "mobx-react";
+import { WeaTab, WeaTable, WeaTop } from "ecCom";
+import ExternalPersonManageEditSlide from "./components/externalPersonManageEditSlide";
+import { Button, message, Modal } from "antd";
+import { getSearchs } from "../../util";
+import { condition, searchCondition } from "./conditions";
+import { deleteExtEmp, listPage } from "../../apis/externalPersonManage";
+import "./index.less";
+
+@inject("externalPersonManageStore", "taxAgentStore")
+@observer
+class Index extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ loading: false,
+ selectedRowKeys: [],
+ pageInfo: { current: 1, pageSize: 10, total: 0 },
+ showSearchAd: false,
+ externalPersonManagePayload: {
+ visible: false, title: "新建", id: ""
+ }
+ };
+ }
+
+ componentDidMount() {
+ const { externalPersonManageStore: { form, addForm } } = this.props;
+ form.initFormFields(searchCondition);
+ addForm.initFormFields(condition);
+ this.listPage();
+ }
+
+ listPage = () => {
+ const { pageInfo } = this.state;
+ const { externalPersonManageStore: { form } } = this.props;
+ const payload = { ...pageInfo, ...form.getFormParams() };
+ listPage(payload).then(({ status, data }) => {
+ if (status) {
+ const { list: dataSource, columns, pageNum: current, pageSize, total } = data;
+ this.setState({
+ dataSource, columns,
+ pageInfo: { ...pageInfo, current, pageSize, total }
+ });
+ }
+ });
+ };
+ deleteExtEmp = (ids) => {
+ deleteExtEmp(ids).then(({ status, errormsg }) => {
+ if (status) {
+ message.success("删除成功");
+ this.listPage();
+ } else {
+ message.error(errormsg || "删除失败");
+ }
+ });
+ };
+ handleDelete = (id) => {
+ Modal.confirm({
+ title: "信息确认",
+ content: "确定删除吗",
+ onOk: () => this.deleteExtEmp([id])
+ });
+ };
+ handleCancel = (isRefresh) => {
+ const { externalPersonManagePayload } = this.state;
+ const { externalPersonManageStore: { addForm } } = this.props;
+ addForm.resetForm();
+ this.setState({
+ externalPersonManagePayload: {
+ ...externalPersonManagePayload,
+ visible: false, title: "新建", id: ""
+ }
+ }, () => isRefresh && this.listPage());
+ };
+ handleAdd = (id = "") => {
+ const { externalPersonManagePayload } = this.state;
+ this.setState({
+ externalPersonManagePayload: {
+ ...externalPersonManagePayload,
+ visible: true, id, title: id ? "编辑" : "新建"
+ }
+ });
+ };
+ getColumns = () => {
+ const { columns } = this.state;
+ return _.map(_.filter(columns, item => !!item.display), child => ({
+ ...child,
+ render: (text) => {
+ return {text};
+ }
+ }));
+ };
+
+ render() {
+ const { showSearchAd, externalPersonManagePayload, loading, pageInfo, selectedRowKeys, dataSource } = this.state;
+ const {
+ externalPersonManageStore: { form, addForm },
+ taxAgentStore: { showOperateBtn, showSalaryItemBtn }
+ } = this.props;
+ const pagination = {
+ current: pageInfo.current,
+ pageSize: pageInfo.pageSize,
+ total: pageInfo.total,
+ showTotal: total => `共 ${total} 条`,
+ showQuickJumper: true,
+ showSizeChanger: true,
+ pageSizeOptions: ["10", "20", "50", "100"],
+ onShowSizeChange: (current, pageSize) => {
+ this.setState({ pageInfo: { ...pageInfo, current, pageSize } }, () => this.listPage());
+ },
+ onChange: current => {
+ this.setState({ pageInfo: { ...pageInfo, current } }, () => this.listPage());
+ }
+ };
+ const rowSelection = {
+ selectedRowKeys,
+ onChange: selectedRowKeys => this.setState({ selectedRowKeys })
+ };
+ return (
+
+
}
+ iconBgcolor="#F14A2D" showDropIcon={false}
+ >
+
+
this.handleAdd()}>新建
+ ] : []}
+ searchType={["base", "advanced"]} showSearchAd={showSearchAd}
+ setShowSearchAd={(showSearchAd) => this.setState({ showSearchAd })}
+ searchsAd={getSearchs(form, searchCondition, 2)}
+ searchsBasePlaceHolder="请输入姓名" onSearch={this.listPage}
+ onSearchChange={username => form.updateFields({ username })}
+ searchsBaseValue={form.getFormParams().username}
+ onAdSearch={() => this.setState({ showSearchAd: false }, () => this.listPage())}
+ onAdReset={() => form.resetForm()} onAdCancel={() => this.setState({ showSearchAd: false })}
+ />
+ (
+
+ this.handleAdd(id)}
+ style={{ paddingRight: 8 }}>编辑
+ {/* this.handleDelete(id)}>删除*/}
+
+ )
+ }
+ ] : []}
+ dataSource={dataSource}
+ pagination={pagination}
+ rowSelection={rowSelection}
+ xWidth={800}
+ />
+
+
+
+
+ );
+ }
+}
+
+export default Index;
diff --git a/pc4mobx/hrmSalary/pages/externalPersonManage/index.less b/pc4mobx/hrmSalary/pages/externalPersonManage/index.less
new file mode 100644
index 00000000..8b13dd6f
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/externalPersonManage/index.less
@@ -0,0 +1,14 @@
+.externalPerWrapper {
+ width: 100%;
+ height: 100%;
+
+ .externalPerCont {
+ height: 100%;
+ }
+}
+
+.slideOuterWrapper {
+ .hideFormItem {
+ display: none !important;
+ }
+}
diff --git a/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js b/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js
index 94295816..77e8d62f 100644
--- a/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js
+++ b/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js
@@ -6,13 +6,25 @@
*/
import React, { Component } from "react";
import { inject, observer } from "mobx-react";
-import { WeaCheckbox, WeaFormItem, WeaHelpfulTip, WeaInput, WeaSelect, WeaSlideModal, WeaTextarea, WeaInputNumber } from "ecCom";
+import {
+ WeaCheckbox,
+ WeaFormItem,
+ WeaHelpfulTip,
+ WeaInput,
+ WeaInputNumber,
+ WeaLocaleProvider,
+ WeaSelect,
+ WeaSlideModal,
+ WeaTextarea
+} from "ecCom";
import { message, Modal } from "antd";
import SlideModalTitle from "../../../components/slideModalTitle";
import { getSalaryFieldForm, saveSalaryField } from "../../../apis/fieldManage";
import { commonEnumList } from "../../../apis/payrollFiles";
import { dataTypeOptions, patternOptions, roundingModeOptions } from "../../salaryItem/options";
+const getLabel = WeaLocaleProvider.getLabel;
+
@inject("taxAgentStore")
@observer
class FieldSlide extends Component {
@@ -54,6 +66,7 @@ class FieldSlide extends Component {
const {
name,
useDefault,
+ hideDefault,
useInEmployeeSalary,
dataType,
description,
@@ -68,6 +81,7 @@ class FieldSlide extends Component {
name,
useInEmployeeSalary: useInEmployeeSalary ? useInEmployeeSalary.toString() : "0",
useDefault: useDefault ? useDefault.toString() : "0",
+ hideDefault: hideDefault ? hideDefault.toString() : "0",
dataType,
description,
sortedIndex,
@@ -120,6 +134,7 @@ class FieldSlide extends Component {
const {
name,
useDefault,
+ hideDefault,
useInEmployeeSalary,
dataType,
description,
@@ -133,6 +148,7 @@ class FieldSlide extends Component {
name,
useInEmployeeSalary: Number(useInEmployeeSalary),
useDefault: Number(useDefault),
+ hideDefault: Number(hideDefault),
dataType,
description,
sortedIndex,
@@ -168,6 +184,7 @@ class FieldSlide extends Component {
name: "",
useInEmployeeSalary: "1",
useDefault: "0",
+ hideDefault: "0",
sharedType: "0",
taxAgentIds: "",
dataType: "number",
@@ -191,6 +208,7 @@ class FieldSlide extends Component {
name,
useInEmployeeSalary,
useDefault,
+ hideDefault,
shareTypeList,
sharedType,
taxAgentIds,
@@ -250,6 +268,17 @@ class FieldSlide extends Component {
placement="topLeft"
/>
+
+ this.handleChangeFields("hideDefault", value)}
+ />
+
+
{
const { dataIndex } = item;
- if (dataIndex === "useDefault") {
+ if (dataIndex === "useDefault" || dataIndex === "hideDefault") {
item.render = (text) => ();
} else if (dataIndex === "operate") {
item.width = 120;
diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAssociatedPersonnel.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAssociatedPersonnel.js
index d3660ebe..8b7af5a4 100644
--- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAssociatedPersonnel.js
+++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAssociatedPersonnel.js
@@ -11,19 +11,25 @@ import { WeaButtonIcon, WeaInputSearch, WeaTab } from "ecCom";
import PersonalScopeTable from "../../../components/PersonalScopeTable";
import PersonalScopeModal from "../../../components/PersonalScopeModal";
import {
+ deleteLedgerPersonExtRange,
deleteLedgerPersonRange,
getLedgerPersonRangeExclude,
+ getLedgerPersonRangeExtList,
getLedgerPersonRangeInclude,
salarysobRangeImportData,
salarysobRangePreview,
+ saveLedgerPersonExtRange,
saveLedgerPersonRange
} from "../../../apis/ledger";
import ImportModal from "../../../components/importModal";
import { importEmployColumns } from "../../taxAgent/columns";
+import ExternalPersonModal from "../../../components/externalPersonModal";
+import { sysinfo } from "../../../apis/ruleconfig";
const APIFox = {
listInclude: getLedgerPersonRangeInclude,
- listExclude: getLedgerPersonRangeExclude
+ listExclude: getLedgerPersonRangeExclude,
+ externalList: getLedgerPersonRangeExtList
};
const APISaveFox = {
save: saveLedgerPersonRange
@@ -39,6 +45,8 @@ class LedgerAssociatedPersonnel extends Component {
selectedKey: "listInclude",
rowKeys: [],
previewDataSource: [],
+ externalPersonModalVisible: false,
+ loading: false,
importParams: {
visible: false,
step: 0,
@@ -48,10 +56,45 @@ class LedgerAssociatedPersonnel extends Component {
visible: false,
title: "关联人员",
includeType: ""
- }
+ },
+ extEmpsWitch: "1" //非系统人员开关, 1: 开启, 0:关闭
};
}
+ componentDidMount() {
+ this.getSysinfo();
+ }
+
+ /*
+ * Author: 黎永顺
+ * Description: 非系统人员开关查询
+ * Params:
+ * Date: 2023/7/14
+ */
+ getSysinfo = () => {
+ sysinfo().then(({ status, data }) => {
+ if (status) this.setState({ extEmpsWitch: data.extEmpsWitch });
+ });
+ };
+ /*
+ * Author: 黎永顺
+ * Description:外部人员保存
+ * Params:
+ * Date: 2023/3/14
+ */
+ handleSaveExternalPerson = (val) => {
+ const { editId: salarySobId, saveSalarySobId } = this.props;
+ saveLedgerPersonExtRange({ ...val, salarySobId: salarySobId || saveSalarySobId }).then(({ status, errormsg }) => {
+ this.setState({ loading: false });
+ if (status) {
+ message.success("保存成功");
+ this.setState({ externalPersonModalVisible: false });
+ this.personalScopeTableRef.getPersonalScopeList();
+ } else {
+ message.error(errormsg || "保存失败");
+ }
+ }).catch(() => this.setState({ loading: true }));
+ };
/*
* Author: 黎永顺
* Description: 删除人员范围
@@ -59,23 +102,55 @@ class LedgerAssociatedPersonnel extends Component {
* Date: 2022/11/30
*/
taxAgentRangeDelete = () => {
+ const { selectedKey } = this.state;
Modal.confirm({
title: "信息确认",
content: "确认要删除吗?",
onOk: () => {
- deleteLedgerPersonRange(this.state.rowKeys).then(({ status, errormsg }) => {
- if (status) {
- message.success("删除成功");
- this.setState({ rowKeys: [] }, () => {
- this.personalScopeTableRef.clearRowkeys();
- });
- } else {
- message.error(errormsg || "删除失败");
- }
- });
+ return new Promise((resolve, reject) => {
+ return selectedKey === "externalList" ? this.deleteLedgerPersonExtRange(resolve, reject) : this.deleteLedgerPersonRange(resolve, reject);
+ }).catch(() => console.log("出错!"));
}
});
};
+ deleteLedgerPersonExtRange = (resolve, reject) => {
+ message.destroy();
+ message.loading("正在删除中...", 0);
+ deleteLedgerPersonExtRange(this.state.rowKeys).then(({ status, errormsg }) => {
+ message.destroy();
+ resolve();
+ if (status) {
+ message.success("删除成功");
+ this.setState({ rowKeys: [] }, () => {
+ this.personalScopeTableRef.clearRowkeys();
+ });
+ } else {
+ message.error(errormsg || "删除失败");
+ }
+ }).catch(() => {
+ message.destroy();
+ reject();
+ });
+ };
+ deleteLedgerPersonRange = (resolve, reject) => {
+ message.destroy();
+ message.loading("正在删除中...", 0);
+ deleteLedgerPersonRange(this.state.rowKeys).then(({ status, errormsg }) => {
+ message.destroy();
+ resolve();
+ if (status) {
+ message.success("删除成功");
+ this.setState({ rowKeys: [] }, () => {
+ this.personalScopeTableRef.clearRowkeys();
+ });
+ } else {
+ message.error(errormsg || "删除失败");
+ }
+ }).catch(() => {
+ message.destroy();
+ reject();
+ });
+ };
/*
* Author: 黎永顺
* Description:新增人员范围
@@ -84,13 +159,17 @@ class LedgerAssociatedPersonnel extends Component {
*/
handleAddPersonal = () => {
const { personalAddModal, selectedKey } = this.state;
- this.setState({
- personalAddModal: {
- ...personalAddModal,
- visible: true,
- includeType: selectedKey === "listInclude" ? 1 : 0
- }
- });
+ if (selectedKey === "externalList") {
+ this.setState({ externalPersonModalVisible: true });
+ } else {
+ this.setState({
+ personalAddModal: {
+ ...personalAddModal,
+ visible: true,
+ includeType: selectedKey === "listInclude" ? 1 : 0
+ }
+ });
+ }
};
/*
* Author: 黎永顺
@@ -138,7 +217,9 @@ class LedgerAssociatedPersonnel extends Component {
rowKeys,
personalAddModal,
importParams,
- previewDataSource
+ previewDataSource,
+ externalPersonModalVisible,
+ loading, extEmpsWitch
} = this.state;
const { taxAgentStore: { showOperateBtn }, editId, saveSalarySobId } = this.props;
const topTab = [
@@ -149,6 +230,10 @@ class LedgerAssociatedPersonnel extends Component {
{
title: "从范围中排除",
viewcondition: "listExclude"
+ },
+ {
+ title: "非系统人员范围",
+ viewcondition: "externalList"
}
];
const btns = showOperateBtn ? [
@@ -189,10 +274,10 @@ class LedgerAssociatedPersonnel extends Component {
return (
this.setState({ selectedKey })}
/>
)}
+ {/*非系统人员添加*/}
+ this.setState({ externalPersonModalVisible: false })}
+ onExternalPersonSave={this.handleSaveExternalPerson}
+ />
{/*新增人员范围*/}
;
+ return ;
default:
return ;
}
@@ -96,6 +97,7 @@ export default class LedgerSalaryItemAddModal extends React.Component {
if (item.id === key) {
item.salaryItemId = item.id;
item.key = item.id;
+ item.itemHide = item.hideDefault;
item.sortedIndex = (!_.isEmpty(_.maxBy(arrItems, it => it.sortedIndex)) ? _.maxBy(arrItems, it => it.sortedIndex).sortedIndex : 0) + keyIdx + 1;
selectItems.push(item);
}
diff --git a/pc4mobx/hrmSalary/pages/mobilePayroll/index.js b/pc4mobx/hrmSalary/pages/mobilePayroll/index.js
index 5a41f8ac..7ad8bb01 100644
--- a/pc4mobx/hrmSalary/pages/mobilePayroll/index.js
+++ b/pc4mobx/hrmSalary/pages/mobilePayroll/index.js
@@ -2,15 +2,16 @@ import React from "react";
import { inject, observer } from "mobx-react";
import { getQueryString } from "../../util/url";
import { WeaDialog, WeaError, WeaInput, WeaLocaleProvider } from "ecCom";
-import { Button, message } from "antd";
+import { Button, message, Modal } from "antd";
import Authority from "../mySalary/authority";
import ComputerTemplate from "../payroll/templatePreview/computerTemplate";
import PhoneTemplate from "../payroll/templatePreview/phoneTemplate";
import "../payroll/templatePreview/index.less";
import * as API from "../../apis/mySalaryBenefits";
-import { payrollCheckType } from "../../apis/payroll";
+import { confirmSalaryBill, feedBackSalaryBill, payrollCheckType } from "../../apis/payroll";
import CaptchaModal from "../../components/captchaModal";
import PassSetDialog from "./passSetDialog";
+import { ConfirmBtns } from "../mySalary/mySalaryView";
import "./index.less";
const getLabel = WeaLocaleProvider.getLabel;
@@ -113,6 +114,35 @@ export default class MobilePayroll extends React.Component {
}
return params;
};
+ confirmSalaryBill = () => {
+ confirmSalaryBill({ salaryInfoId: getQueryString("id") }).then(({ status, errormsg }) => {
+ if (status) {
+ message.success(getLabel(30700, "操作成功"));
+ this.getMySalaryBill(getQueryString("id"));
+ } else {
+ message.error(errormsg || getLabel(30651, "操作失败"));
+ }
+ });
+ };
+ handleGoFeedback = () => {
+ Modal.confirm({
+ title: getLabel(131329, "信息确认"),
+ content: getLabel(111, "请确认薪资信息是有误,进行反馈并发起反馈流程。"),
+ onOk: () => {
+ feedBackSalaryBill({ salaryInfoId: getQueryString("id") }).then(({ status, errorMsg }) => {
+ if (status) {
+ const { mySalaryBillData } = this.state;
+ const { salaryTemplate } = mySalaryBillData;
+ const { feedbackUrl } = salaryTemplate;
+ this.getMySalaryBill(getQueryString("id"));
+ window.open(`${window.ecologyContentPath || ""}${feedbackUrl}`);
+ } else {
+ message.error(errorMsg);
+ }
+ });
+ }
+ });
+ };
render() {
const { mySalaryStore: { clearLoading, pwdForm } } = this.props;
@@ -139,9 +169,10 @@ export default class MobilePayroll extends React.Component {
{
notSetting &&
-
+
}
@@ -156,7 +187,15 @@ export default class MobilePayroll extends React.Component {
isPreview
salaryTemplateShowSet={JSON.stringify(mySalaryBillData.salaryTemplate)}
salaryItemSet={!_.isEmpty(salaryGroups) ? JSON.stringify([employeeInformation, ...salaryGroups]) : []}
- />
+ >
+ {
+ (_.isNil(mySalaryBillData.confirmStatus) || mySalaryBillData.confirmStatus === "0") &&
+
+ }
+
@@ -169,7 +208,15 @@ export default class MobilePayroll extends React.Component {
isPreview
salaryTemplateShowSet={JSON.stringify(mySalaryBillData.salaryTemplate)}
salaryItemSet={!_.isEmpty(salaryGroups) ? JSON.stringify([employeeInformation, ...salaryGroups]) : JSON.stringify([])}
- />
+ >
+ {
+ (_.isNil(mySalaryBillData.confirmStatus) || mySalaryBillData.confirmStatus === "0") &&
+
+ }
+
diff --git a/pc4mobx/hrmSalary/pages/mySalary/mySalaryView.js b/pc4mobx/hrmSalary/pages/mySalary/mySalaryView.js
index bda458fb..67374438 100644
--- a/pc4mobx/hrmSalary/pages/mySalary/mySalaryView.js
+++ b/pc4mobx/hrmSalary/pages/mySalary/mySalaryView.js
@@ -6,12 +6,16 @@
*/
import React, { Component } from "react";
import { inject, observer } from "mobx-react";
+import { Button, message, Modal } from "antd";
+import { WeaLocaleProvider } from "ecCom";
import Authority from "./authority";
import ComputerTemplate from "../payroll/templatePreview/computerTemplate";
-import { payrollCheckType } from "../../apis/payroll";
+import { confirmSalaryBill, feedBackSalaryBill, payrollCheckType } from "../../apis/payroll";
import CaptchaModal from "../../components/captchaModal";
import "../payroll/templatePreview/index.less";
+const { getLabel } = WeaLocaleProvider;
+
@inject("mySalaryStore")
@observer
class MySalaryView extends Component {
@@ -37,6 +41,43 @@ class MySalaryView extends Component {
}
}
+ confirmSalaryBill = () => {
+ const { mySalaryStore: { getMySalaryBill }, params: { salaryInfoId } } = this.props;
+ confirmSalaryBill({ salaryInfoId }).then(({ status, errormsg }) => {
+ if (status) {
+ message.success(getLabel(30700, "操作成功"));
+ getMySalaryBill(Number(salaryInfoId)).then(data => {
+ this.setState({ mySalaryStore: data });
+ });
+ } else {
+ message.error(errormsg || getLabel(30651, "操作失败"));
+ }
+ });
+ };
+ handleGoFeedback = () => {
+ Modal.confirm({
+ title: getLabel(131329, "信息确认"),
+ content: getLabel(111, "请确认薪资信息是有误,进行反馈并发起反馈流程。"),
+ onOk: () => {
+ const { params: { salaryInfoId }, mySalaryStore: { getMySalaryBill } } = this.props;
+ feedBackSalaryBill({ salaryInfoId }).then(({ status, errorMsg }) => {
+ if (status) {
+ const { mySalaryStore } = this.state;
+ const { salaryTemplate } = mySalaryStore;
+ const { feedbackUrl } = salaryTemplate;
+ getMySalaryBill(Number(salaryInfoId)).then(data => {
+ this.setState({ mySalaryStore: data }, () => {
+ window.open(`${window.ecologyContentPath || ""}${feedbackUrl}`);
+ });
+ });
+ } else {
+ message.error(errorMsg);
+ }
+ });
+ }
+ });
+ };
+
render() {
const { captchaVisible, mySalaryStore } = this.state;
const { params: { salaryInfoId } } = this.props;
@@ -56,7 +97,15 @@ class MySalaryView extends Component {
isPreview isMsgPreview
salaryTemplateShowSet={salaryTemplateShowSet ? JSON.stringify(salaryTemplateShowSet) : []}
salaryItemSet={!_.isEmpty(salaryGroups) ? JSON.stringify([employeeInformation, ...salaryGroups]) : []}
- />
+ >
+ {
+ (_.isNil(mySalaryStore.confirmStatus) || mySalaryStore.confirmStatus === "0") &&
+
+ }
+
@@ -71,3 +120,10 @@ class MySalaryView extends Component {
}
export default MySalaryView;
+
+export const ConfirmBtns = (props) => {
+ return
+
+
+
;
+};
diff --git a/pc4mobx/hrmSalary/pages/payroll/SalarySendList.js b/pc4mobx/hrmSalary/pages/payroll/SalarySendList.js
index 947db8db..b81e1f6e 100644
--- a/pc4mobx/hrmSalary/pages/payroll/SalarySendList.js
+++ b/pc4mobx/hrmSalary/pages/payroll/SalarySendList.js
@@ -21,10 +21,7 @@ export default class SalarySendList extends React.Component {
// 发放回调
handleGrant(record) {
- window.open(
- "/spa/hrmSalary/static/index.html#/main/hrmSalary/payrollGrant?id=" +
- record.id
- );
+ window.open(`/spa/hrmSalary/static/index.html#/main/hrmSalary/payrollGrant?id=${record.id}&ackFeedbackStatus=${record.ackFeedbackStatus}`);
}
// 查看详情
diff --git a/pc4mobx/hrmSalary/pages/payroll/index.js b/pc4mobx/hrmSalary/pages/payroll/index.js
index c974b699..10c526ea 100644
--- a/pc4mobx/hrmSalary/pages/payroll/index.js
+++ b/pc4mobx/hrmSalary/pages/payroll/index.js
@@ -506,7 +506,7 @@ export default class Payroll extends React.Component {
className="slideOuterWrapper"
visible={this.state.editSlideVisible}
top={0}
- width={50}
+ width={65}
height={100}
direction="right"
measure="%"
diff --git a/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.js b/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.js
index 0be427d5..9582c550 100644
--- a/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.js
+++ b/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.js
@@ -25,6 +25,7 @@ export default class PayrollGrant extends React.Component {
selectedKey: "0",
progressVisible: false,
progress: 0,
+ showFeedbackColumn: false,
payrollPartModalParams: {
visible: false,
title: "工资单发放",
@@ -39,7 +40,10 @@ export default class PayrollGrant extends React.Component {
componentWillMount() {
const { selectedKey } = this.state;
let id = getQueryString("id");
- this.setState({ currentId: id });
+ this.setState({
+ currentId: id,
+ showFeedbackColumn: getQueryString("ackFeedbackStatus") === "1"
+ });
const {
payrollStore: { getPayrollInfo, getInfoList, getPaySa }
} = this.props;
@@ -299,11 +303,12 @@ export default class PayrollGrant extends React.Component {
};
getColumns = () => {
+ const { selectedKey, showFeedbackColumn } = this.state;
const { payrollStore } = this.props;
const { salaryGrantTableStore: columns, salarySendDetailBaseInfo } = payrollStore;
const notShowGrantOrWithdraw = salarySendDetailBaseInfo.haveBackCalc === 1 && salarySendDetailBaseInfo.salaryAcctType === "0";
return _.map([
- ...toJS(columns),
+ ..._.filter(toJS(columns), it => ((selectedKey === "0" && it.dataIndex !== "billReadStatus" && it.dataIndex !== "billConfirmStatus") || (selectedKey === "1" && !showFeedbackColumn && it.dataIndex !== "billReadStatus" && it.dataIndex !== "billConfirmStatus") || (selectedKey === "1" && showFeedbackColumn))),
{
title: "操作",
key: "",
@@ -602,6 +607,7 @@ export default class PayrollGrant extends React.Component {
{
this.state.progressVisible &&
{
this.setState({ progressVisible: false, progress: 0 });
diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js
index 5cd3f6f1..94719f8d 100644
--- a/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js
+++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js
@@ -1,5 +1,15 @@
import React from "react";
-import { WeaCheckbox, WeaFormItem, WeaInput, WeaLocaleProvider, WeaSearchGroup, WeaSelect, WeaTimePicker } from "ecCom";
+import {
+ WeaCheckbox,
+ WeaFormItem,
+ WeaHelpfulTip,
+ WeaInput,
+ WeaInputNumber,
+ WeaLocaleProvider,
+ WeaSearchGroup,
+ WeaSelect,
+ WeaTimePicker
+} from "ecCom";
import { inject, observer } from "mobx-react";
import { getReplenishRuleSetOptions } from "../../../apis/payroll";
import { commonEnumList } from "../../../apis/payrollFiles";
@@ -91,17 +101,8 @@ export default class BaseInformForm extends React.Component {
render() {
const { request, options, replenishRuleOptions, salaryMonthOptions } = this.state;
const {
- salarySob,
- name,
- description,
- replenishName,
- replenishRule,
- reissueRule,
- msgStatus,
- emailStatus,
- autoSendStatus,
- autoSendDayOfMonth,
- autoSendTimeOfDay,
+ salarySob, name, description, replenishName, replenishRule, reissueRule, msgStatus, emailStatus,
+ ackFeedbackStatus, autoAckDays, feedbackUrl, autoSendStatus, autoSendDayOfMonth, autoSendTimeOfDay,
autoSendCycleType
} = request;
@@ -201,9 +202,12 @@ export default class BaseInformForm extends React.Component {
autoSendStatus: value === "1",
autoSendDayOfMonth: value === "1" ? "1" : null,
autoSendTimeOfDay: value === "1" ? "09:00" : null,
- autoSendCycleType: value === "1" ? 1 : null,
+ autoSendCycleType: value === "1" ? 1 : null
});
}}/>
+
{
autoSendStatus &&
@@ -220,6 +224,39 @@ export default class BaseInformForm extends React.Component {
}
+
+
+ this.handleChange({
+ ackFeedbackStatus: value === "1",
+ autoAckDays: 7,
+ feedbackUrl: "/"
+ })}/>
+
+ {
+ ackFeedbackStatus &&
+
+
+ this.handleChange({ autoAckDays })}
+ />
+
+
+
+ this.handleChange({ feedbackUrl })}
+ />
+
+
+ }
+
);
}
diff --git a/pc4mobx/hrmSalary/pages/payroll/templateBaseSettings.js b/pc4mobx/hrmSalary/pages/payroll/templateBaseSettings.js
index 742fa874..2d876674 100644
--- a/pc4mobx/hrmSalary/pages/payroll/templateBaseSettings.js
+++ b/pc4mobx/hrmSalary/pages/payroll/templateBaseSettings.js
@@ -5,8 +5,17 @@
* Date: 2023/6/12
*/
import React, { Component } from "react";
-import { WeaCheckbox, WeaFormItem, WeaLocaleProvider, WeaSearchGroup, WeaSelect } from "ecCom";
-import { message } from "antd";
+import {
+ WeaCheckbox,
+ WeaFormItem,
+ WeaHelpfulTip,
+ WeaInput,
+ WeaInputNumber,
+ WeaLocaleProvider,
+ WeaSearchGroup,
+ WeaSelect
+} from "ecCom";
+import { message, Modal } from "antd";
import { getSalaryBillBaseSetForm, salaryBillBaseSetSave } from "../../apis/payroll";
import WaterMarkSetModal from "./components/waterMarkSetModal";
import "./index.less";
@@ -22,6 +31,11 @@ class TemplateBaseSettings extends Component {
wmSetting: null,
watermarkSet: {
visible: false, watermarkSetting: null
+ },
+ ackFeedbackSetting: {
+ ackStatus: "0",
+ autoAckDays: 7,
+ feedBackUrl: ""
}
};
}
@@ -34,9 +48,10 @@ class TemplateBaseSettings extends Component {
const { watermarkSet } = this.state;
getSalaryBillBaseSetForm().then(({ status, data }) => {
if (status) {
- const { watermarkStatus, watermark = "DEFAULT", watermarkSetting } = data;
+ const { watermarkStatus, watermark = "DEFAULT", watermarkSetting, ackFeedbackSetting } = data;
this.setState({
- watermark, watermarkStatus: watermarkStatus ? "1" : "0",
+ watermark, watermarkStatus: watermarkStatus ? "1" : "0", ackFeedbackSetting,
+ wmSetting: { wmSetting: watermarkSetting },
watermarkSet: {
...watermarkSet,
watermarkSetting
@@ -46,8 +61,16 @@ class TemplateBaseSettings extends Component {
});
};
salaryBillBaseSetSave = () => {
- const { watermark, watermarkStatus, wmSetting } = this.state;
- let payload = { watermarkStatus: watermarkStatus === "1" };
+ const { watermark, watermarkStatus, wmSetting, ackFeedbackSetting } = this.state;
+ const { feedBackUrl } = ackFeedbackSetting;
+ if (!feedBackUrl) {
+ Modal.warning({
+ title: getLabel(111, "信息确认"),
+ content: getLabel(111, "必要信息不完整,红色*为必填项!")
+ });
+ return;
+ }
+ let payload = { watermarkStatus: watermarkStatus === "1", ackFeedbackSetting: { ...ackFeedbackSetting } };
if (watermarkStatus === "1") payload = { ...payload, watermark };
if (!_.isNil(wmSetting)) payload = { ...payload, watermark, ...wmSetting };
this.props.onChangeLoading(true);
@@ -63,40 +86,81 @@ class TemplateBaseSettings extends Component {
};
render() {
- const { watermarkStatus, watermark, watermarkSet } = this.state;
+ const { watermarkStatus, watermark, watermarkSet, ackFeedbackSetting } = this.state;
+ const { ackStatus, autoAckDays, feedBackUrl } = ackFeedbackSetting;
return (
-
-
- this.setState({ watermarkStatus, watermark: "DEFAULT" })}/>
-
- {
- watermarkStatus === "1" &&
-
- this.setState({ watermark })}
- />
- {
- watermark === "CUSTOM" &&
- this.setState({
- watermarkSet: {
- ...watermarkSet,
- visible: true
- }
- })}>{getLabel(111, "水印设置")}
- }
- this.setState({ watermarkSet: { ...watermarkSet, visible: false } })}
- onChange={wmSetting => this.setState({ wmSetting })}
- />
+
+
+
+ this.setState({ watermarkStatus, watermark: "DEFAULT" })}/>
- }
-
+ {
+ watermarkStatus === "1" &&
+
+ this.setState({ watermark })}
+ />
+ {
+ watermark === "CUSTOM" &&
+ this.setState({
+ watermarkSet: {
+ ...watermarkSet,
+ visible: true
+ }
+ })}>{getLabel(111, "水印设置")}
+ }
+ this.setState({ watermarkSet: { ...watermarkSet, visible: false } })}
+ onChange={wmSetting => this.setState({ wmSetting })}
+ />
+
+ }
+
+
+
+ this.setState({
+ ackFeedbackSetting: {
+ ...ackFeedbackSetting, ackStatus, autoAckDays: 7
+ }
+ })}/>
+
+ {
+ ackStatus === "1" &&
+
+
+ this.setState({
+ ackFeedbackSetting: {
+ ...ackFeedbackSetting, autoAckDays
+ }
+ })}/>
+
+
+
+ this.setState({
+ ackFeedbackSetting: {
+ ...ackFeedbackSetting, feedBackUrl
+ }
+ })}/>
+
+
+ }
+
+
);
}
}
diff --git a/pc4mobx/hrmSalary/pages/payroll/templatePreview/computerTemplate/index.js b/pc4mobx/hrmSalary/pages/payroll/templatePreview/computerTemplate/index.js
index 6f2e68c2..0c4c8c07 100644
--- a/pc4mobx/hrmSalary/pages/payroll/templatePreview/computerTemplate/index.js
+++ b/pc4mobx/hrmSalary/pages/payroll/templatePreview/computerTemplate/index.js
@@ -109,6 +109,7 @@ export default class ComputerTemplate extends React.Component {
salaryTemplateShowSet.textContentPosition == 2 && salaryTemplateShowSet.textContent
}
+ {this.props.children}
);
}
diff --git a/pc4mobx/hrmSalary/pages/payroll/templatePreview/index.less b/pc4mobx/hrmSalary/pages/payroll/templatePreview/index.less
index 52517511..0d2d5dda 100644
--- a/pc4mobx/hrmSalary/pages/payroll/templatePreview/index.less
+++ b/pc4mobx/hrmSalary/pages/payroll/templatePreview/index.less
@@ -85,7 +85,8 @@
margin: 10px;
background-color: #FFF;
padding: 10px;
- .descript-title{
+
+ .descript-title {
display: flex;
align-items: center;
margin-bottom: 10px;
@@ -100,15 +101,18 @@
border: 1px solid #fafafa;
border-bottom: none;
}
- .descriptions-view{
+
+ .descriptions-view {
width: 100%;
- table{
+
+ table {
table-layout: fixed;
border-collapse: collapse;
width: 100%;
- border: 1px solid rgba(0,0,0,.06);
- .descriptions-row{
- .descriptions-item-label{
+ border: 1px solid rgba(0, 0, 0, .06);
+
+ .descriptions-row {
+ .descriptions-item-label {
background-color: #fafafa;
padding: 16px 24px;
color: #000000d9;
@@ -116,11 +120,12 @@
font-size: 12px;
line-height: 1.5715;
text-align: start;
- border: 1px solid rgba(0,0,0,.06);
+ border: 1px solid rgba(0, 0, 0, .06);
min-width: 100px;
max-width: 100px;
}
- .descriptions-item-content{
+
+ .descriptions-item-content {
padding: 16px 24px;
display: table-cell;
flex: 1;
@@ -130,10 +135,20 @@
word-break: break-word;
overflow-wrap: break-word;
border-collapse: collapse;
- border: 1px solid rgba(0,0,0,.06);
+ border: 1px solid rgba(0, 0, 0, .06);
}
}
}
}
}
+
+ .space {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+
+ .ant-btn {
+ margin-right: 10px;
+ }
+ }
}
diff --git a/pc4mobx/hrmSalary/pages/payroll/templatePreview/phoneTemplate/index.js b/pc4mobx/hrmSalary/pages/payroll/templatePreview/phoneTemplate/index.js
index 0f85d51d..2a572966 100644
--- a/pc4mobx/hrmSalary/pages/payroll/templatePreview/phoneTemplate/index.js
+++ b/pc4mobx/hrmSalary/pages/payroll/templatePreview/phoneTemplate/index.js
@@ -100,6 +100,7 @@ export default class PhoneTemplate extends React.Component {
salaryTemplateShowSet.textContentPosition == 2 && salaryTemplateShowSet.textContent
}
+ {this.props.children}
);
}
diff --git a/pc4mobx/hrmSalary/pages/payrollFiles/components/importMenu.js b/pc4mobx/hrmSalary/pages/payrollFiles/components/importMenu.js
index 74dd4b0e..42f95e62 100644
--- a/pc4mobx/hrmSalary/pages/payrollFiles/components/importMenu.js
+++ b/pc4mobx/hrmSalary/pages/payrollFiles/components/importMenu.js
@@ -26,7 +26,7 @@ class ImportMenu extends Component {
params.listType = "FIXED";
} else {
params.listType = this.state.importParams.importType;
- params.importType = '';
+ params.importType = "";
}
API.salaryArchivePreview(params).then(({ status, data }) => {
if (status) {
@@ -92,14 +92,15 @@ class ImportMenu extends Component {
};
// 导入档案
handleImportFile = (params) => {
+ const { isExtEmp = false } = this.props;
if (this.state.importParams.importType === "init" || this.state.importParams.importType === "salaryItemAdjust") {
params.importType = this.state.importParams.importType;
params.listType = "FIXED";
} else {
- params.importType = '';
+ params.importType = "";
params.listType = this.state.importParams.importType;
}
- API.importSalaryArchive(params).then(({ status, data }) => {
+ API.importSalaryArchive({ ...params, isExtEmp }).then(({ status, data }) => {
if (status) {
data.errorData = data.errorNotice;
this.setState({
@@ -113,7 +114,7 @@ class ImportMenu extends Component {
};
render() {
- const { importType, refreshList } = this.props;
+ const { importType, refreshList, isExtEmp } = this.props;
const { importParams, previewColumns, previewDataSource } = this.state;
let params = "";
if (importParams.importType === "init" || importParams.importType === "salaryItemAdjust") {
@@ -121,6 +122,7 @@ class ImportMenu extends Component {
} else {
params = "" + "&listType=" + importParams.importType;
}
+ if (isExtEmp) params = params + "&extSalaryArchiveList=true";
return (