diff --git a/pc4mobx/hrmSalary/apis/item.js b/pc4mobx/hrmSalary/apis/item.js index 3c3bb052..2d23377a 100644 --- a/pc4mobx/hrmSalary/apis/item.js +++ b/pc4mobx/hrmSalary/apis/item.js @@ -1,4 +1,4 @@ -import { WeaTools } from 'ecCom'; +import { WeaTools } from "ecCom"; /** * 薪资项目api @@ -7,171 +7,171 @@ import { WeaTools } from 'ecCom'; // 薪资项目-获取列表 export const getItemList = params => { - return fetch('/api/bs/hrmsalary/salaryitem/list', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) + return fetch("/api/bs/hrmsalary/salaryitem/list", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); }; //薪资项目的高级搜索 export const getSaCondition = params => { - return WeaTools.callApi('/api/bs/hrmsalary/salaryitem/getSearchCondition', 'GET', params); + return WeaTools.callApi("/api/bs/hrmsalary/salaryitem/getSearchCondition", "GET", params); }; //数据源列表字典项 export const formulaDatasourceList = params => { - return WeaTools.callApi('/api/bs/hrmsalary/formula/datasource/list', 'GET', params); + return WeaTools.callApi("/api/bs/hrmsalary/formula/datasource/list", "GET", params); }; //薪资项目-系统薪资项目列表 export const getSysItemList = params => { - return fetch('/api/bs/hrmsalary/salaryitem/sysList', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) + return fetch("/api/bs/hrmsalary/salaryitem/sysList", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); }; //系统薪资项目的高级搜索 export const getSysSaCondition = params => { - return WeaTools.callApi('/api/bs/hrmsalary/salaryitem/getSysSearchCondition', 'GET', params); -} + return WeaTools.callApi("/api/bs/hrmsalary/salaryitem/getSysSearchCondition", "GET", params); +}; //薪资项目-批量删除薪资项目 export const deleteItem = params => { - return fetch('/api/bs/hrmsalary/salaryitem/delete', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) -} + return fetch("/api/bs/hrmsalary/salaryitem/delete", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; //薪资项目-批量删除列表 export const deleteItemList = params => { - return fetch('/api/bs/hrmsalary/salaryitem/listCanDelete', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) -} + return fetch("/api/bs/hrmsalary/salaryitem/listCanDelete", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; //薪资项目-新增薪资项目 export const saveItem = params => { - delete params.formulaContent - return fetch('/api/bs/hrmsalary/salaryitem/save', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) -} + delete params.formulaContent; + return fetch("/api/bs/hrmsalary/salaryitem/save", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; //薪资项目-更新薪资项目 export const updateItem = params => { - return WeaTools.callApi('/api/bs/hrmsalary/salaryitem/update', 'POST', params); -} + return WeaTools.callApi("/api/bs/hrmsalary/salaryitem/update", "POST", params); +}; //薪资项目-薪资项目详情 export const getItemForm = params => { - return WeaTools.callApi('/api/bs/hrmsalary/salaryitem/getSalaryForm', 'GET', params); -} + return WeaTools.callApi("/api/bs/hrmsalary/salaryitem/getSalaryForm", "GET", params); +}; //薪资项目-添加系统薪资项目 export const saveSysItem = params => { - return fetch('/api/bs/hrmsalary/salaryitem/saveSys', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) -} + return fetch("/api/bs/hrmsalary/salaryitem/saveSys", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; //获取薪资项目可选的类型(与属性有联动) export const getItemTypeOption = params => { - return WeaTools.callApi('/api/bs/hrmsalary/salaryitem/listSalaryItemTypeOption', 'GET', params); -} + return WeaTools.callApi("/api/bs/hrmsalary/salaryitem/listSalaryItemTypeOption", "GET", params); +}; //获取公式描述 export const getFormulaDes = params => { - return WeaTools.callApi('/api/bs/hrmsalary/formula/des', 'GET', params); -} + return WeaTools.callApi("/api/bs/hrmsalary/formula/des", "GET", params); +}; // *** 公式 start *** // 获取公式变量类型 export const formualSearchGroup = params => { - return fetch('/api/bs/hrmsalary/formula/search/group', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) -} + return fetch("/api/bs/hrmsalary/formula/search/group", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; //获取公式变量字段 export const formualSearchField = params => { - return fetch('/api/bs/hrmsalary/formula/search/field', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) -} + return fetch("/api/bs/hrmsalary/formula/search/field", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; // /api/bs/hrmsalary/formula/save // 保存公式 export const saveFormual = params => { - return fetch('/api/bs/hrmsalary/formula/save', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) -} + return fetch("/api/bs/hrmsalary/formula/save", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; // 公式测试 export const testFormual = params => { - return fetch('/api/bs/hrmsalary/formula/mock', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) -} + return fetch("/api/bs/hrmsalary/formula/mock", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; // 根据id获取formual export const detailFormual = params => { - return fetch('/api/bs/hrmsalary/formula/detail', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) -} + return fetch("/api/bs/hrmsalary/formula/detail", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; // *** 公式 end *** @@ -179,14 +179,28 @@ export const detailFormual = params => { // 列出可以删除的薪资项目 export const listCanDelete = params => { - return fetch('/api/bs/hrmsalary/salaryitem/listCanDelete', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }).then(res => res.json()) -} - + return fetch("/api/bs/hrmsalary/salaryitem/listCanDelete", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; +//获取哪些账套中使用了该薪资项目 +export const getSalarySobBySalaryItem = params => { + return WeaTools.callApi("/api/bs/hrmsalary/salaryitem/getSalarySobBySalaryItem", "GET", params); +}; +// 同步到薪资账套 +export const syncSalaryItemToSalarySobItem = params => { + return fetch("/api/bs/hrmsalary/salaryitem/syncSalaryItemToSalarySobItem ", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; diff --git a/pc4mobx/hrmSalary/apis/welfareArchive.js b/pc4mobx/hrmSalary/apis/welfareArchive.js index a38f22ce..e86e909e 100644 --- a/pc4mobx/hrmSalary/apis/welfareArchive.js +++ b/pc4mobx/hrmSalary/apis/welfareArchive.js @@ -13,6 +13,10 @@ export const getCondition = params => { export const queryList = (params) => { return postFetch("/api/bs/hrmsalary/archives/getTable", params); }; +//社保福利档案_非系统人员列表 +export const getExtTable = (params) => { + return postFetch("/api/bs/hrmsalary/archives/getExtTable", params); +}; //社保福利档案列表 export const queryInsuranceTabTotal = (params) => { return WeaTools.callApi("/api/bs/hrmsalary/archives/queryInsuranceTabTotal", params); diff --git a/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js b/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js index 9e24dbf5..7e0bf3db 100644 --- a/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js +++ b/pc4mobx/hrmSalary/components/importDialog/components/impStep1.js @@ -21,8 +21,8 @@ class ImpStep1 extends Component { handleChange = (data) => { const { fileList, file } = data; - if (file.response && typeof (file.response) != "undefined") message.success(getLabel(111, "上传成功")); - this.setState({ fileList }); + if (file.response && typeof (file.response) != "undefined" && file.status !== "removed") message.success(getLabel(111, "上传成功")); + this.setState({ fileList: fileList.slice(-1) }); }; render() { @@ -62,7 +62,8 @@ class ImpStep1 extends Component {

{`1. ${getLabel(30907, "第一步")},${getLabel(543205, "请选择导出的Excel文件或")}`}   {getLabel(543207, "点击这里下载模板")} + target="_blank">{getLabel(543207, "点击这里下载模板")}   + {this.props.exportDataDom}

{`2. ${getLabel(543211, "第二步")},${getLabel(543212, "请一定要确定Excel文档中的格式是模板中的格式")},${getLabel(543213, "没有被修改掉")};`}

{`3. ${getLabel(543216, "第三步")},${getLabel(543215, "选择填写好的Excel文档")},${getLabel(543214, "点击“下一步”按钮进行数据预览")};`}

diff --git a/pc4mobx/hrmSalary/components/importDialog/components/impStep2.js b/pc4mobx/hrmSalary/components/importDialog/components/impStep2.js new file mode 100644 index 00000000..8a7373d4 --- /dev/null +++ b/pc4mobx/hrmSalary/components/importDialog/components/impStep2.js @@ -0,0 +1,49 @@ +/* + * Author: 黎永顺 + * name: 导入-步骤二 + * Description: + * Date: 2023/9/5 + */ +import React, { Component } from "react"; +import { WeaTable } from "ecCom"; +import { postFetch } from "../../../util/request"; + +class ImpStep2 extends Component { + constructor(props) { + super(props); + this.state = { + loading: false, columns: [], dataSource: [] + }; + } + + componentDidMount() { + this.init(); + } + + init = () => { + const { previewUrl, imageId } = this.props; + const payload = { imageId }; + this.setState({ loading: true }); + postFetch(previewUrl, payload).then(({ status, data }) => { + this.setState({ loading: false }); + if (status) { + const { headers, list } = data; + this.setState({ + columns: _.map(headers, (item, index) => ({ title: item, dataIndex: index + "", width: 120 })), + dataSource: _.map(list, item => { + return _.reduce(item, (pre, cur, key) => (_.assign(pre, { [key]: cur })), {}); + }) + }); + } + }).catch(() => this.setState({ loading: false })); + }; + + render() { + const { dataSource, columns, loading } = this.state; + return ( + + ); + } +} + +export default ImpStep2; diff --git a/pc4mobx/hrmSalary/components/importDialog/index.js b/pc4mobx/hrmSalary/components/importDialog/index.js index 49956e37..b7eafd97 100644 --- a/pc4mobx/hrmSalary/components/importDialog/index.js +++ b/pc4mobx/hrmSalary/components/importDialog/index.js @@ -8,6 +8,7 @@ import React, { Component } from "react"; import { Button, message, Modal } from "antd"; import { WeaDialog, WeaLocaleProvider, WeaSteps } from "ecCom"; import ImpStep1 from "./components/impStep1"; +import ImpStep2 from "./components/impStep2"; import ImpStep3 from "./components/impStep3"; import "./index.less"; @@ -23,7 +24,7 @@ class Index extends Component { } componentWillReceiveProps(nextProps, nextContext) { - if (JSON.stringify(nextProps.importResult) !== JSON.stringify(this.props.importResult)) { + if (JSON.stringify(nextProps.importResult) !== JSON.stringify(this.props.importResult) && !_.isEmpty(nextProps.importResult)) { this.setState({ current: this.state.current + 1 }); @@ -33,20 +34,21 @@ class Index extends Component { renderChildren = () => { const { current } = this.state; - const { importParams, link, excludeKey, importResult } = this.props; + const { importParams, link, excludeKey, importResult, exportDataDom = null } = this.props; let CurrentDom = null; switch (current) { case 0: - CurrentDom = this.step1Ref = dom}/>; + CurrentDom = this.step1Ref = dom}/>; break; case 1: - CurrentDom = null; + CurrentDom = ; if (excludeKey) { CurrentDom = ; } break; case 2: - CurrentDom = null; + CurrentDom = ; break; default: CurrentDom = null; @@ -54,7 +56,19 @@ class Index extends Component { } return CurrentDom; }; - + /* + * Author: 黎永顺 + * Description: 上一步 + * Params: + * Date: 2023/9/5 + */ + handlePreviousStep = () => { + Modal.confirm({ + title: getLabel(131329, "信息确认"), + content: getLabel(111, "是否放弃已上传的文件?"), + onOk: () => this.setState({ current: this.state.current - 1 }, () => this.props.onResetImportResult()) + }); + }; /* * Author: 黎永顺 * Description: 下一步 @@ -62,24 +76,28 @@ class Index extends Component { * 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, "必要信息不完整,红色*为必填项!") - }); + const { params, importResult } = this.props; + if (_.isEmpty(importResult)) { + 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.warning(getLabel(111, "请先上传EXCEL文件")); return; } + const [file] = fileList; + const { response } = file; + this.props.nextCallback(response.data.fileid); + } else { + this.setState({ current: this.state.current + 1 }); } - if (_.isEmpty(fileList)) { - message.error(getLabel(111, "请先上传EXCEL文件")); - return; - } - const [file] = fileList; - const { response } = file; - this.props.nextCallback(response.data.fileid); }; render() { @@ -90,7 +108,7 @@ class Index extends Component { { key: 2, label: getLabel(502835, "导入数据") } ]; const btns = [ - , + , , diff --git a/pc4mobx/hrmSalary/components/importDialog/index.less b/pc4mobx/hrmSalary/components/importDialog/index.less index 8e4dbb53..95cee40b 100644 --- a/pc4mobx/hrmSalary/components/importDialog/index.less +++ b/pc4mobx/hrmSalary/components/importDialog/index.less @@ -131,8 +131,6 @@ justify-content: center; align-items: center; flex-direction: column; - padding-top: 80px; - padding-bottom: 80px; text-align: center; p { diff --git a/pc4mobx/hrmSalary/pages/mobilePayroll/index.js b/pc4mobx/hrmSalary/pages/mobilePayroll/index.js index 8116c06a..dc72e97c 100644 --- a/pc4mobx/hrmSalary/pages/mobilePayroll/index.js +++ b/pc4mobx/hrmSalary/pages/mobilePayroll/index.js @@ -93,7 +93,7 @@ export default class MobilePayroll extends React.Component { const params = this.getUrlkey(); const payload = { salaryInfoId, - ..._.omit(params, ["id", "_key", "type"]) + ..._.pick(params, ["recipient"]) }; getMySalaryBill(payload).then(result => { this.setState({ diff --git a/pc4mobx/hrmSalary/pages/payroll/payrollDetail/index.js b/pc4mobx/hrmSalary/pages/payroll/payrollDetail/index.js index 03ff17c6..6e6479c0 100644 --- a/pc4mobx/hrmSalary/pages/payroll/payrollDetail/index.js +++ b/pc4mobx/hrmSalary/pages/payroll/payrollDetail/index.js @@ -133,7 +133,7 @@ export default class PayrollDetail extends React.Component { ]; return ( -
+
导出全部]} diff --git a/pc4mobx/hrmSalary/pages/payroll/payrollDetail/index.less b/pc4mobx/hrmSalary/pages/payroll/payrollDetail/index.less index 9bb70233..01a180a0 100644 --- a/pc4mobx/hrmSalary/pages/payroll/payrollDetail/index.less +++ b/pc4mobx/hrmSalary/pages/payroll/payrollDetail/index.less @@ -1,12 +1,17 @@ -.payrollGrant { +.payrollDetail { display: flex; flex-direction: column; height: 100%; + background: #f6f6f6; + + .wea-tab .wea-tab-right, .wea-input-focus { + background: #f6f6f6; + } .titleBar { height: 47px; line-height: 47px; - padding: 0 10px; + padding: 0 16px; .titleBarLeft { float: left; @@ -19,6 +24,7 @@ .tableWrapper { flex: 1; + padding: 0 16px; .ant-spin-nested-loading, .ant-spin-container { height: 100%; diff --git a/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.js b/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.js index 9582c550..d52797f0 100644 --- a/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.js +++ b/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.js @@ -595,6 +595,7 @@ export default class PayrollGrant extends React.Component { this.pageInfo = { current, pageSize }; this.handleShowSizeChange(this.pageInfo); }} + scroll={{ y: `calc(100vh - 236px)` }} /> : renderLoading() }
diff --git a/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.less b/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.less index 9699454a..cd2ce262 100644 --- a/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.less +++ b/pc4mobx/hrmSalary/pages/payroll/payrollGrant/index.less @@ -1,8 +1,15 @@ .payrollGrant_new { + background: #f6f6f6; + height: 100%; + + .wea-tab .wea-tab-right, .wea-input-focus { + background: #f6f6f6; + } + .titleBar { height: 47px; line-height: 47px; - padding: 0 10px; + padding: 0 16px; .titleBarLeft { float: left; @@ -14,8 +21,11 @@ } .tableWrapper { - height: calc(100vh - 180.22px); - overflow: auto; + padding: 0 16px; + + .wea-new-table { + background: #FFF; + } } } diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemSettings.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemSettings.js index 0113ecd5..53802244 100644 --- a/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemSettings.js +++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemSettings.js @@ -86,9 +86,11 @@ class SalaryItemSettings extends Component { } }); this.setState({ - dataList: resultSalaryItemSet + dataList: resultSalaryItemSet, + itemShowNamesetting: _.filter(this.state.itemShowNamesetting, it => it.salaryItemId !== item.id) }, () => { this.props.onChangeSalaryItem(resultSalaryItemSet); + this.props.onChangeSalaryItemShowNamesetting(this.state.itemShowNamesetting); }); }; handleCloseModal = () => { diff --git a/pc4mobx/hrmSalary/pages/payrollFiles/index.js b/pc4mobx/hrmSalary/pages/payrollFiles/index.js index 74326a8f..db623a70 100644 --- a/pc4mobx/hrmSalary/pages/payrollFiles/index.js +++ b/pc4mobx/hrmSalary/pages/payrollFiles/index.js @@ -30,8 +30,8 @@ import AllWithoutPay from "./components/allWithoutPay"; import BatchSuspendsPay from "./components/batchSuspendsPay"; import SlideModalTitle from "../../components/slideModalTitle"; import SalaryFileViewSlide from "../salaryFile/saralyFileViewSlide"; -import ChangeSalaryModal from "../salaryFile/changeSalaryModal"; import { sysinfo } from "../../apis/ruleconfig"; +import SalaryArchiveEditAdjLogRecord from "../salaryFile/salaryArchiveEditAdjLogRecord"; import "./index.less"; const getLabel = WeaLocaleProvider.getLabel; @@ -77,7 +77,9 @@ class Index extends Component { subcompanyIds: "" }, salaryAdjustmentInfo: {}, - changeSalaryVisible: false, + adjLogRecordDialog: { + visible: false, title: "", id: "", salaryArchiveId: "" + }, noPayDate: "", slideParams: { visible: false, @@ -624,7 +626,12 @@ class Index extends Component { } if (showOperateBtn && (selectedKey === "fixed" || selectedKey === "ext")) { arrList.push(); } selectedKey !== "stop" && arrList.push(); @@ -719,7 +726,7 @@ class Index extends Component { pageInfo, showSearchAd, slideParams, - changeSalaryVisible, + adjLogRecordDialog, paysetParams, extEmpsWitch } = this.state; @@ -884,15 +891,14 @@ class Index extends Component { }} /> )} - {changeSalaryVisible && ( - { - this.setState({ changeSalaryVisible: false }); - }} - /> - )} + this.setState({ + adjLogRecordDialog: { + adjLogRecordDialog, visible: false, title: "", id: "", salaryArchiveId: "" + } + })} + />
); } diff --git a/pc4mobx/hrmSalary/pages/ruleConfig/index.js b/pc4mobx/hrmSalary/pages/ruleConfig/index.js index 3ac96bf9..2fccbadf 100644 --- a/pc4mobx/hrmSalary/pages/ruleConfig/index.js +++ b/pc4mobx/hrmSalary/pages/ruleConfig/index.js @@ -23,7 +23,7 @@ export default class Index extends Component { orderRule: "", ascOrDesc: "", rule: "", - enctry: "", + enctry: "1", operateTaxDeclaration: "1", matchRule: "", confValue: "0", @@ -56,7 +56,7 @@ export default class Index extends Component { ascOrDesc = "", orderRule = "", showEncryptOperationButton, matchEmployeeMode: rule = "", taxDeclarationFunction: operateTaxDeclaration = "1", salaryArchiveDelete: confValue, salaryAcctEmployeeRule: matchRule, WITHDRAW_TAX_DECLARATION: withDrawTaxDeclaration = "0", - OPEN_APPLICATION_ENCRYPT: enctry = "0", extEmpsWitch = "0" + OPEN_APPLICATION_ENCRYPT: enctry = "1", extEmpsWitch = "0" } } = sysInfo; // const { data: { ascOrDesc, orderRule } } = orderRules; diff --git a/pc4mobx/hrmSalary/pages/salaryFile/columns.js b/pc4mobx/hrmSalary/pages/salaryFile/columns.js index 7cfdb4d9..a34d95bf 100644 --- a/pc4mobx/hrmSalary/pages/salaryFile/columns.js +++ b/pc4mobx/hrmSalary/pages/salaryFile/columns.js @@ -1,175 +1,203 @@ export const columns = [ - { - title: "姓名", - dataIndex: 'title', - key: 'title', - }, - { - title: "个税扣缴义务人", - dataIndex: 'title', - key: 'title', - }, - { - title: "部门", - dataIndex: 'title', - key: 'title', - }, - { - title: "手机号", - dataIndex: 'title', - key: 'title', - }, - { - title: "员工状态", - dataIndex: 'title', - key: 'title', - }, - { - title: "基本工资", - dataIndex: 'title', - key: 'title', - }, - { - title: "操作", - dataIndex: 'cz', - key: 'cz', - } -] + { + title: "姓名", + dataIndex: "title", + key: "title" + }, + { + title: "个税扣缴义务人", + dataIndex: "title", + key: "title" + }, + { + title: "部门", + dataIndex: "title", + key: "title" + }, + { + title: "手机号", + dataIndex: "title", + key: "title" + }, + { + title: "员工状态", + dataIndex: "title", + key: "title" + }, + { + title: "基本工资", + dataIndex: "title", + key: "title" + }, + { + title: "操作", + dataIndex: "cz", + key: "cz" + } +]; -export const changeSalaryModalColumns = [ - { - title: '薪资项目', - dataIndex: 'title', - key: 'title' - }, - { - title: '调整前', - dataIndex: 'title', - key: 'title' - }, - { - title: '调整后', - dataIndex: 'title', - key: 'title' - } -] +export const adjCondition = [ + { + items: [ + { + colSpan: 1, + conditionType: "DATEPICKER", + domkey: ["effectiveTime"], + fieldcol: 18, + label: "生效日期", + lanId: 19548, + labelcol: 6, + rules: "required", + value: "", + viewAttr: 3 + }, + { + colSpan: 1, + checkbox: false, + checkboxValue: false, + conditionType: "SELECT", + domkey: ["adjustReason"], + fieldcol: 18, + label: "调整原因", + lanId: 1897, + labelcol: 6, + options: [], + rules: "required", + viewAttr: 3 + }, + { + colSpan: 1, + conditionType: "INPUT", + domkey: ["description"], + fieldcol: 18, + label: "说明", + lanId: 25734, + labelcol: 6, + value: "", + viewAttr: 2 + } + ], + title: "调薪信息", + defaultshow: true + } +]; export const slideSalaryItemColumns = [ - { - title: "姓名", - dataIndex: 'title', - key: 'title' - }, - { - title: "员工状态", - dataIndex: 'title', - key: 'title' - }, - { - title: "部门", - dataIndex: 'title', - key: 'title' - }, - { - title: "薪资项目", - dataIndex: 'title', - key: 'title' - }, - { - title: "调整前", - dataIndex: 'title', - key: 'title' - }, - { - title: "调整后", - dataIndex: 'title', - key: 'title' - }, - { - title: "调整原因", - dataIndex: 'title', - key: 'title' - }, - { - title: "生效日期", - dataIndex: 'title', - key: 'title' - }, - { - title: "操作人", - dataIndex: 'title', - key: 'title' - }, - { - title: "操作日期", - dataIndex: 'title', - key: 'title' - }, - { - title: "说明", - dataIndex: 'title', - key: 'title' - } -] + { + title: "姓名", + dataIndex: "title", + key: "title" + }, + { + title: "员工状态", + dataIndex: "title", + key: "title" + }, + { + title: "部门", + dataIndex: "title", + key: "title" + }, + { + title: "薪资项目", + dataIndex: "title", + key: "title" + }, + { + title: "调整前", + dataIndex: "title", + key: "title" + }, + { + title: "调整后", + dataIndex: "title", + key: "title" + }, + { + title: "调整原因", + dataIndex: "title", + key: "title" + }, + { + title: "生效日期", + dataIndex: "title", + key: "title" + }, + { + title: "操作人", + dataIndex: "title", + key: "title" + }, + { + title: "操作日期", + dataIndex: "title", + key: "title" + }, + { + title: "说明", + dataIndex: "title", + key: "title" + } +]; export const slieAgentColumns = [ - { - title: "姓名", - dataIndex: 'title', - key: 'title' - }, - { - title: "员工状态", - dataIndex: 'title', - key: 'title' - }, - { - title: "部门", - dataIndex: 'title', - key: 'title' - }, - { - title: "调整前", - dataIndex: 'title', - key: 'title' - }, - { - title: "调整后", - dataIndex: 'title', - key: 'title' - }, - { - title: "调整原因", - dataIndex: 'title', - key: 'title' - }, - { - title: "生效日期", - dataIndex: 'title', - key: 'title' - }, - { - title: "操作人", - dataIndex: 'title', - key: 'title' - }, - { - title: "操作日期", - dataIndex: 'title', - key: 'title' - }, - { - title: "说明", - dataIndex: 'title', - key: 'title' - } -] + { + title: "姓名", + dataIndex: "title", + key: "title" + }, + { + title: "员工状态", + dataIndex: "title", + key: "title" + }, + { + title: "部门", + dataIndex: "title", + key: "title" + }, + { + title: "调整前", + dataIndex: "title", + key: "title" + }, + { + title: "调整后", + dataIndex: "title", + key: "title" + }, + { + title: "调整原因", + dataIndex: "title", + key: "title" + }, + { + title: "生效日期", + dataIndex: "title", + key: "title" + }, + { + title: "操作人", + dataIndex: "title", + key: "title" + }, + { + title: "操作日期", + dataIndex: "title", + key: "title" + }, + { + title: "说明", + dataIndex: "title", + key: "title" + } +]; export const dataSource = [ - { - title: "测试" - } + { + title: "测试" + } ]; diff --git a/pc4mobx/hrmSalary/pages/salaryFile/index.less b/pc4mobx/hrmSalary/pages/salaryFile/index.less index 506beb63..ebc4a8a4 100644 --- a/pc4mobx/hrmSalary/pages/salaryFile/index.less +++ b/pc4mobx/hrmSalary/pages/salaryFile/index.less @@ -73,7 +73,6 @@ } } - .salaryFileSlide { padding: 10px 20px; @@ -125,7 +124,6 @@ } } - .salaryFileTabWrapper { .searchPanel { position: absolute; @@ -169,3 +167,55 @@ } } } + +.adjustItem-layout { + .ant-table-fixed td { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} + +.adjLogRecordDialogContent { + background: #f6f6f6; + padding: 16px; + height: 100%; + overflow-y: auto; + + .empty { + text-align: center; + background: transparent; + margin-bottom: 20px; + padding: 30px 50px; + } + + .wea-search-group:first-child { + margin-bottom: 16px; + } + + .wea-search-group { + background: #FFF; + padding: 0; + border: 1px solid #e5e5e5; + border-bottom: none; + } + + .wea-content, .wea-form-cell { + padding: 0; + } + + .wea-form-item { + padding: 5px 16px; + border-bottom: 1px solid #e5e5e5; + } + + .wea-select, .ant-select { + width: 100%; + } + + .ant-select-selection { + width: 100%; + height: 30px; + border-radius: 0; + } +} diff --git a/pc4mobx/hrmSalary/pages/salaryFile/salaryArchiveEditAdjLogRecord.js b/pc4mobx/hrmSalary/pages/salaryFile/salaryArchiveEditAdjLogRecord.js new file mode 100644 index 00000000..a1656d53 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/salaryFile/salaryArchiveEditAdjLogRecord.js @@ -0,0 +1,221 @@ +/* + * Author: 黎永顺 + * name: 薪资档案-调薪 + * Description: + * Date: 2023/9/4 + */ +import React, { Component } from "react"; +import { WeaDialog, WeaLocaleProvider, WeaSearchGroup, WeaTableEdit, WeaTools } from "ecCom"; +import { Button, message, Spin } from "antd"; +import { + editSingleSalaryItem, + getSalaryItemAdjustBeforeValue, + getSalaryItemForm, + getSingleSalaryItemInfo, + saveSalaryItem +} from "../../apis/archive"; +import { inject, observer } from "mobx-react"; +import { adjCondition } from "./columns"; +import { getDomkes, getSearchs } from "../../util"; +import moment from "moment"; + +const { getLabel } = WeaLocaleProvider; +const getKey = WeaTools.getKey; +const APIFox = { + save: saveSalaryItem, + edit: editSingleSalaryItem, + saveForm: getSalaryItemForm, + editForm: getSingleSalaryItemInfo +}; + +@inject("salaryFileStore") +@observer +class SalaryArchiveEditAdjLogRecordDialog extends Component { + constructor(props) { + super(props); + this.state = { + conditions: [], loading: false, saveLoading: false, + salaryArchiveItemDetail: {}, canOperator: false + }; + } + + componentWillReceiveProps(nextProps, nextContext) { + const { id, visible, salaryFileStore: { adjForm, initAdjForm } } = nextProps; + if (nextProps.visible !== this.props.visible && visible) { + this.getSingleSalaryItemInfo(nextProps); + } else { + adjForm.resetForm(); + initAdjForm(); + } + } + + getSingleSalaryItemInfo = (props) => { + const { salaryFileStore: { adjForm }, id, salaryArchiveId: salaryArchiveItemId } = props; + this.setState({ loading: true }); + APIFox[id ? "editForm" : "saveForm"](id ? { id } : { salaryArchiveItemId }) + .then(({ status, data }) => { + this.setState({ loading: false }); + if (status) { + const { salaryArchiveItemForm, salaryArchiveItemDetail, canOperator } = data; + const { adjustReasonList } = salaryArchiveItemForm; + this.setState({ + canOperator, salaryArchiveItemDetail, + conditions: _.map(adjCondition, item => { + return { + ...item, + title: getLabel(111, "调薪信息"), + items: _.map(item.items, o => { + if (getKey(o) === "adjustReason") { + return { + ...o, + options: _.map(adjustReasonList, it => ({ key: it.id, showname: it.content })) + }; + } + return { ...o }; + }) + }; + }) + }, () => { + adjForm.initFormFields(this.state.conditions); + _.map(getDomkes(this.state.conditions), domkey => { + adjForm.updateFields({ + [domkey]: salaryArchiveItemForm[domkey] || "" + }); + }); + }); + } + }).catch(() => this.setState({ loading: false })); + }; + getSalaryItemAdjustBeforeValue = (salaryItemId) => { + const payload = { + salaryArchiveId: this.props.salaryArchiveId, + salaryItemId + }; + getSalaryItemAdjustBeforeValue(payload).then(({ status, data }) => { + if (status) { + const { salaryArchiveItemDetail } = this.state; + const { list } = salaryArchiveItemDetail; + this.setState({ + salaryArchiveItemDetail: { + ...salaryArchiveItemDetail, + list: _.map(list, o => { + if (o.salaryItem === salaryItemId) { + return { ...o, salaryBefore: data }; + } + return { ...o }; + }) + } + }); + } + }); + }; + save = () => { + const { salaryFileStore: { adjForm, fetchSingleSalaryItemList, getArchiveForm } } = this.props; + const { pass } = this.tableEdit.refs.edit.doRequiredCheck(); + adjForm.validateForm().then(f => { + if (f.isValid) { + if (!pass) return; + const { salaryArchiveId, id: salaryArchiveItemId } = this.props; + const { salaryArchiveItemDetail, canOperator } = this.state; + const { list } = salaryArchiveItemDetail; + let payload = { + ...adjForm.getFormParams(), salaryArchiveId, + effectiveTime: moment(new Date(adjForm.getFormParams().effectiveTime)).format("YYYY-MM-DD"), + salaryArchiveItems: _.map(list, o => ({ salaryItemId: o.salaryItem, adjustValue: o.adjustAfter })) + }; + if (salaryArchiveItemId) { + payload = { ...payload, canOperator, salaryArchiveItemId }; + } + this.setState({ saveLoading: true }); + APIFox[salaryArchiveItemId ? "edit" : "save"](payload).then(({ status, errormsg }) => { + this.setState({ saveLoading: false }); + if (status) { + message.success(getLabel(22619, "保存成功!")); + this.props.onCancel(); + fetchSingleSalaryItemList({ salaryArchiveId }); + getArchiveForm(salaryArchiveId); + } else { + message.error(errormsg); + } + }).catch(() => this.setState({ saveLoading: false })); + } else { + f.showErrors(); + } + }); + }; + + render() { + const { salaryFileStore: { adjForm }, id } = this.props; + const { loading, saveLoading, salaryArchiveItemDetail, conditions } = this.state; + const { salaryItemList, list } = salaryArchiveItemDetail; + const adjColumns = [ + { + title: "薪资项目", + dataIndex: "salaryItem", + key: "salaryItem", + com: [{ + options: _.map(salaryItemList, o => ({ key: o.id, showname: o.content })), + type: "SELECT", viewAttr: id ? 1 : 3, key: "salaryItem", + onChange: (v) => this.getSalaryItemAdjustBeforeValue(v) + }], + colSpan: 1, + width: "40%" + }, + { + title: getLabel(111, "调整前"), + dataIndex: "salaryBefore", + key: "salaryBefore", + com: [{ label: "", type: "INPUT", viewAttr: 1, key: "salaryBefore" }], + colSpan: 1, + width: "30%" + }, + { + title: getLabel(111, "调整后"), + dataIndex: "adjustAfter", + key: "adjustAfter", + com: [{ label: "", type: "INPUTNUMBER", otherParams: { precision: 3 }, viewAttr: 3, key: "adjustAfter" }], + colSpan: 1, + width: "30%" + } + ]; + return ( + {getLabel(537558, "保存")}]} + > +
+ { + !loading ? + {getSearchs(adjForm, conditions, 1)} + + this.tableEdit = dom} deleteConfirm + columns={adjColumns} datas={list} showCopy={false} + showAdd={!id} showDelete={!id} + onChange={o => this.setState({ + salaryArchiveItemDetail: { + ...salaryArchiveItemDetail, list: o + } + })} + /> + + :
+ } +
+
+ ); + } +} + +export default SalaryArchiveEditAdjLogRecordDialog; diff --git a/pc4mobx/hrmSalary/pages/salaryFile/salaryItemChangeList.js b/pc4mobx/hrmSalary/pages/salaryFile/salaryItemChangeList.js index 49d82cd8..21b8042a 100644 --- a/pc4mobx/hrmSalary/pages/salaryFile/salaryItemChangeList.js +++ b/pc4mobx/hrmSalary/pages/salaryFile/salaryItemChangeList.js @@ -1,10 +1,11 @@ import React from "react"; -import { Menu, message, Modal, Popover } from "antd"; +import { message, Modal } from "antd"; +import { WeaLocaleProvider, WeaTable } from "ecCom"; import { inject, observer } from "mobx-react"; -import ChangeSalaryModal from "./changeSalaryModal"; import { deleteSalaryItem } from "../../apis/archive"; -import UnifiedTable from "../../components/UnifiedTable"; +import SalaryArchiveEditAdjLogRecord from "./salaryArchiveEditAdjLogRecord"; +const { getLabel } = WeaLocaleProvider; @inject("salaryFileStore") @observer export default class SalaryItemChangeList extends React.Component { @@ -12,6 +13,9 @@ export default class SalaryItemChangeList extends React.Component { super(props); this.state = { changeSalaryVisible: false, + adjLogRecordDialog: { + visible: false, title: "", id: "", salaryArchiveId: "" + }, recordId: "" }; this.searchParams = {}; @@ -25,11 +29,11 @@ export default class SalaryItemChangeList extends React.Component { handleEdit = (record) => { this.setState({ - recordId: record.id - }, () => { - this.setState({ - changeSalaryVisible: true - }); + adjLogRecordDialog: { + ...this.state.adjLogRecordDialog, + visible: true, title: getLabel(542686, "调薪"), id: record.id, + salaryArchiveId: this.props.id + } }); }; deleteSalaryItem = (salaryArchiveItemId) => { @@ -58,22 +62,35 @@ export default class SalaryItemChangeList extends React.Component { const { salaryFileStore: { singleSalaryItemList }, selectedKey } = this.props; let columns = []; if (singleSalaryItemList.columns) { - columns = [...singleSalaryItemList.columns]; + columns = _.map([...singleSalaryItemList.columns], o => { + const { dataIndex } = o; + if (dataIndex === "adjustItem") { + return { ...o, width: 100, fixed: "left", render: text => ({text}) }; + } + let width = ""; + switch (o) { + case "adjustBefore": + case "adjustAfter": + case "operateTime": + width = "20%"; + break; + case "effectiveTime": + width = "15%"; + break; + default: + width = "10%"; + break; + } + return { ...o, width, render: text => ({text}) }; + }); if (selectedKey === "fixed") { columns = [...columns, { - dataIndex: "operate", - title: "操作", + dataIndex: "operate", fixed: "right", width: 120, title: "操作", render: (text, record) => { return
this.handleEdit(record)}>编辑 - this.deleteSalaryItem(record.id)}> - 删除 - } title=""> - - + this.deleteSalaryItem(record.id)}>{getLabel(535052, "删除")}
; } }]; @@ -90,45 +107,29 @@ export default class SalaryItemChangeList extends React.Component { } render() { - const { salaryFileStore } = this.props; + const { salaryFileStore } = this.props, { adjLogRecordDialog } = this.state; const { singleSalaryItemList } = salaryFileStore; + const pageInfo = { current: singleSalaryItemList.pageNum, pageSize: 10, total: singleSalaryItemList.total }; + const pagination = { + ...pageInfo, + showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`, + showQuickJumper: true, + onChange: current => this.handlePageChange(current) + }; return (
- { - if (item.dataIndex !== "operate") { - return { - ...item, - render: (text) => { - return {text}; - } - }; - } - return { ...item }; - }) - } - dataSource={singleSalaryItemList.list ? singleSalaryItemList.list : []} - pagination={{ - onChange: (value) => { - this.handlePageChange(value); - }, - total: singleSalaryItemList.total, - showTotal: (total) => `共 ${total} 条`, - current: singleSalaryItemList.pageNum - }} - xWidth={this.getColumns().length * 100} + + this.setState({ + adjLogRecordDialog: { + adjLogRecordDialog, visible: false, title: "", id: "", salaryArchiveId: "" + } + })} /> - { - this.state.changeSalaryVisible && { - this.setState({ changeSalaryVisible: false }); - }} - /> - }
); } diff --git a/pc4mobx/hrmSalary/pages/salaryItem/columns.js b/pc4mobx/hrmSalary/pages/salaryItem/columns.js index 04580369..47abe5b1 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/columns.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/columns.js @@ -155,6 +155,27 @@ export const valTakeOptions = [ { key: "2", showname: "公式" }, { key: "3", showname: "SQL" } ]; +export const salarySetConditions = [ + { + items: [{ + colSpan: 1, + checkbox: false, + checkboxValue: false, + conditionType: "SELECT", + domkey: ["salarySobIds"], + fieldcol: 18, + label: "薪资账套", + lanId: 538010, + labelcol: 6, + options: [], + rules: "required|string", + multiple: true, + viewAttr: 3 + }], + title: "", + defaultshow: true + } +]; diff --git a/pc4mobx/hrmSalary/pages/salaryItem/index.js b/pc4mobx/hrmSalary/pages/salaryItem/index.js index 556b0d7e..c2c63718 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/index.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/index.js @@ -9,6 +9,7 @@ import { columns } from "./columns"; import SlideModalTitle from "../../components/slideModalTitle"; import CustomSalaryItemSlide from "./customSalaryItemSlide"; import CustomPaginationTable from "../../components/customPaginationTable"; +import SyncToSalaryAccountSetDialog from "./syncToSalaryAccountSetDialog"; import "../socialSecurityBenefits/programme/index.less"; const { getLabel } = WeaLocaleProvider; @@ -25,7 +26,8 @@ export default class SalaryItem extends React.Component { searchValue: "", formalModalVisible: false, searchParams: { current: 1, pageSize: 10, total: 0 }, - selectedRowKeys: [] + selectedRowKeys: [], + syncSalarySetDialog: { visible: false, title: "", id: "" } }; columns.map(item => { if (item.dataIndex == "refere") { @@ -69,7 +71,10 @@ export default class SalaryItem extends React.Component { onEditItem = (record, isedit) => { this.record = record; const { salaryItemStore: { getItemForm, setEditSlideVisible } } = this.props; - this.setState({ editable: isedit, isAdd: false }); + this.setState({ + editable: isedit, isAdd: false, + syncSalarySetDialog: { ...this.state.syncSalarySetDialog, id: record.id } + }); getItemForm(record.id).then(() => { setEditSlideVisible(true); }).catch(({ errormsg }) => { @@ -308,6 +313,15 @@ export default class SalaryItem extends React.Component { ]; } else if (this.state.editable) { arrList = [ + , @@ -365,6 +379,15 @@ export default class SalaryItem extends React.Component { + this.setState({ + syncSalarySetDialog: { + ...this.state.syncSalarySetDialog, + visible: false, id: "", title: "" + } + })} + /> { systemItemVisible && diff --git a/pc4mobx/hrmSalary/pages/salaryItem/index.less b/pc4mobx/hrmSalary/pages/salaryItem/index.less index 97c79576..b0063821 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/index.less +++ b/pc4mobx/hrmSalary/pages/salaryItem/index.less @@ -102,3 +102,43 @@ } } } + +.salarySetDialog { + .salarySetDialogContent { + .wea-select, .ant-select, .ant-select-selection { + width: 100%; + } + + .wea-select .wea-select-input .arrow { + position: absolute; + right: 4px; + top: 8px; + color: #666; + } + + .wea-select .wdb { + word-break: break-all !important; + word-wrap: break-word !important; + } + + .wea-select .wea-select-input { + height: 30px; + white-space: nowrap; + min-width: 100px; + max-width: 345px; + width: 100%; + display: inline-block; + padding: 4px 17px 4px 4px; + position: relative; + min-height: 30px; + border: 1px solid #d9d9d9; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + overflow: hidden; + } + } +} diff --git a/pc4mobx/hrmSalary/pages/salaryItem/salaryItemForm.js b/pc4mobx/hrmSalary/pages/salaryItem/salaryItemForm.js index 16a8a099..bf80c8f8 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/salaryItemForm.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/salaryItemForm.js @@ -36,7 +36,6 @@ class SalaryItemForm extends Component { const { key } = item; switch (key) { case "useDefault": - case "sortedIndex": case "dataType": case "description": return { @@ -44,6 +43,8 @@ class SalaryItemForm extends Component { viewAttr: (!isLedger && ((editable && record.canEdit) || isAdd)) ? 2 : 1, display: !isLedger }; + case "sortedIndex": + return { ...item }; case "useInEmployeeSalary": return { ...item, diff --git a/pc4mobx/hrmSalary/pages/salaryItem/syncToSalaryAccountSetDialog.js b/pc4mobx/hrmSalary/pages/salaryItem/syncToSalaryAccountSetDialog.js new file mode 100644 index 00000000..e8ca847b --- /dev/null +++ b/pc4mobx/hrmSalary/pages/salaryItem/syncToSalaryAccountSetDialog.js @@ -0,0 +1,95 @@ +/* + * Author: 黎永顺 + * name: 同步到薪资账套 + * Description: + * Date: 2023/8/31 + */ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaDialog, WeaLocaleProvider } from "ecCom"; +import { Button, message } from "antd"; +import { getSearchs } from "../../util"; +import { getSalarySobBySalaryItem, syncSalaryItemToSalarySobItem } from "../../apis/item"; +import { salarySetConditions } from "./columns"; + +const getLabel = WeaLocaleProvider.getLabel; + +@inject("salaryItemStore") +@observer +class SyncToSalaryAccountSetDialog extends Component { + constructor(props) { + super(props); + this.state = { + loading: false, + conditions: [] + }; + } + + componentWillReceiveProps(nextProps, nextContext) { + const { salaryItemStore: { salarySetform } } = nextProps; + if (nextProps.visible !== this.props.visible && nextProps.visible) this.getSalarySobBySalaryItem(nextProps); + if (nextProps.visible !== this.props.visible && !nextProps.visible) salarySetform.resetForm(); + } + + getSalarySobBySalaryItem = (props) => { + const { id, salaryItemStore: { salarySetform } } = props; + getSalarySobBySalaryItem({ id }).then(({ status, data }) => { + if (status) { + this.setState({ + conditions: _.map(salarySetConditions, item => { + return { + ...item, + items: _.map(item.items, o => ({ + ...o, + options: _.map(data, it => ({ key: it.id, showname: it.content })) + })) + }; + }) + }, () => { + salarySetform.initFormFields(this.state.conditions); + }); + } + }); + }; + + save = () => { + const { salaryItemStore: { salarySetform }, id: salaryItemId } = this.props; + salarySetform.validateForm().then(f => { + if (f.isValid) { + const { salarySobIds } = salarySetform.getFormParams(); + this.setState({ loading: true }); + syncSalaryItemToSalarySobItem({ salaryItemId, salarySobIds: salarySobIds.split(",") }) + .then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + message.success(getLabel(38462, "同步成功!")); + this.props.onCancel(); + } else { + message.error(errormsg || getLabel(81556, "同步失败!")); + } + }).catch(() => this.setState({ loading: false })); + } else { + f.showErrors(); + } + }); + }; + + render() { + const { salaryItemStore: { salarySetform } } = this.props; + const { conditions } = this.state; + return ( + {getLabel(537558, "确定")}]} + > +
+ {getSearchs(salarySetform, conditions, 1)} +
+
+ ); + } +} + +export default SyncToSalaryAccountSetDialog; diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/archives/config/index.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/archives/config/index.js index de89e096..84bcb6ff 100644 --- a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/archives/config/index.js +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/archives/config/index.js @@ -26,5 +26,12 @@ export const tabCondition = [ showcount: true, title: "停缴员工", viewcondition: "stop" - } + }, + { + color: "#000000", + groupid: "ext", + showcount: true, + title: "非系统人员", + viewcondition: "ext" + }, ]; diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/archives/index.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/archives/index.js index cab89a87..4caa10dc 100644 --- a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/archives/index.js +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/archives/index.js @@ -2,7 +2,7 @@ import React from "react"; import { inject, observer } from "mobx-react"; import { toJS } from "mobx"; import { Button, Dropdown, Menu, message, Modal, Popover } from "antd"; -import { WeaHelpfulTip, WeaLocaleProvider, WeaNewScroll, WeaSlideModal, WeaTab, WeaTop } from "ecCom"; +import { WeaCheckbox, WeaHelpfulTip, WeaLocaleProvider, WeaNewScroll, WeaSlideModal, WeaTab, WeaTop } from "ecCom"; import { getSearchs, renderLoading } from "../../../util"; import BaseForm from "./baseForm"; import SlideModalTitle from "../../../components/slideModalTitle"; @@ -14,11 +14,16 @@ import * as API from "../../../apis/welfareArchive"; import ImportModal from "../../../components/importModal"; import TipLabel from "../../../components/TipLabel"; import UnifiedTable from "../../../components/UnifiedTable"; -import { convertToUrlString } from "../../../util/url"; +import { convertToUrlString, getURLParameters } from "../../../util/url"; import { salaryArchiveDelete } from "../../../apis/payrollFiles"; +import ImportDialog from "../../../components/importDialog"; import "./index.less"; const getLabel = WeaLocaleProvider.getLabel; +const APILIST = { + runStatuses: API["queryList"], + extWelArchiveList: API["getExtTable"] +}; @inject("archivesStore", "taxAgentStore") @observer export default class Archives extends React.Component { @@ -46,14 +51,20 @@ export default class Archives extends React.Component { stayAdd: 0, paying: 0, stayDel: 0, - stopPay: 0 + stopPay: 0, + ext: 0 }, pageInfo: { current: 1, pageSize: 10, total: 0 }, - salaryArchiveDelete: "" //待定薪、停薪员工 是否允许删除薪资档案 0: 否, 1: 是 + salaryArchiveDelete: "", //待定薪、停薪员工 是否允许删除薪资档案 0: 否, 1: 是 + importDialog: { + visible: false, title: "", nextloading: false, + link: "", importResult: {}, imageId: "", + previewUrl: "/api/bs/hrmsalary/scheme/preview" + } }; this.record = {}; } @@ -78,7 +89,7 @@ export default class Archives extends React.Component { const formParams = form.getFormParams() || {}; const payload = { ...pageInfo }; this.setState({ loading: { ...loading, query: true } }); - API.queryList({ ...formParams, ...payload, ...params }).then(({ data, status }) => { + APILIST[_.keys(params)[0]]({ ...formParams, ...payload, ...params }).then(({ data, status }) => { this.setState({ loading: { ...loading, query: false } }); if (status) { const { pageInfo: paganition, columns, datas: dataSource } = data; @@ -309,8 +320,19 @@ export default class Archives extends React.Component { // 导入 handleImport = (params) => { const { archivesStore: { importBatch } } = this.props; - const { runStatus } = this.state; - importBatch({ ...params, runStatus }); + const { runStatus, importDialog } = this.state; + this.setState(({ + importDialog: { + ...importDialog, nextloading: true, ...params + } + })); + importBatch({ ...params, runStatus }).then(({ status, data }) => { + this.setState(({ + importDialog: { + ...importDialog, nextloading: false, importResult: data, ...params + } + })); + }); }; // 导入完成 @@ -375,9 +397,12 @@ export default class Archives extends React.Component { case "suspend": this.queryList({ runStatuses: ["3"] }); break; - default: + case "stop": this.queryList({ runStatuses: ["4", "5"] }); break; + default: + this.queryList({ extWelArchiveList: true }); + break; } }; handleMenuBtnClick = () => { @@ -564,13 +589,15 @@ export default class Archives extends React.Component { {/*
4、数据进入【待减员】规则的第四种情况下,若还需要在当前个税扣缴义务人下进行缴纳的话,当前该员工的【待减员】数据进行【删除待办】操作即可;若不在该个税扣缴义务人下继续缴纳,维护好最后缴纳月后进行【减员】操作,员工进入【停缴员工】;
*/} ; break; - default: + case "stop": dom =
1、不需要缴纳社保福利的员工,保存在【停缴员工】;
{/*
2、【停缴员工】点击取消停缴,数据会回退到上次的位置(从【待减员】减员到停缴员工的,点击停缴返回到【在缴员工】,不返回到【待减员】);
*/} {/*
3、若员工的社保福利从一个个税扣缴义务人下转到另一个个税扣缴义务人下去缴纳,则在转后的个税扣缴义务人的【待增员】中进行增员操作成功后,员工进入待【在缴员工】,而在原个税扣缴义务人下的【停缴员工】中,该员工数据将会被删除;是否开启分权员工的档案数据都只保存一份;
*/}
; break; + default: + break; } return dom; }; @@ -584,7 +611,8 @@ export default class Archives extends React.Component { dataSource: dataSourceActive, pageInfo, tabCount, - loading + loading, + importDialog } = this.state; const { form, condition, showSearchAd, setShowSearchAd, @@ -719,7 +747,7 @@ export default class Archives extends React.Component { } type="ghost"> 导出全部 - ] : [ + ] : selectedKey === "stop" ? [ } @@ -733,6 +761,15 @@ export default class Archives extends React.Component { } type="ghost"> 导出全部 + ] : [ ]; const pagination = { @@ -775,6 +812,7 @@ export default class Archives extends React.Component { keyParam="viewcondition" //主键 selectedKey={selectedKey} onChange={this.handleChangeTab} + autoCalculateWidth searchType={["base", "advanced"]} // base:基础搜索框 advanced:显示高级搜索按钮 showSearchAd={showSearchAd} // 是否展开高级搜索面板 setShowSearchAd={bool => setShowSearchAd(bool)} //高级搜索面板受控 @@ -807,7 +845,7 @@ export default class Archives extends React.Component { xWidth={this.getColumns().length * 120} /> { - !_.isEmpty(this.getColumns()) && + !_.isEmpty(this.getColumns()) && selectedKey !== "ext" && {this.getTipChildren()} } @@ -878,6 +916,36 @@ export default class Archives extends React.Component { this.setState({ selectedTab: "0" }); })}/> } + this.setState({ + importDialog: { + ...importDialog, + visible: false, title: "", nextloading: false, + link: "", importResult: {}, imageId: "" + } + }, () => isFresh && this.query())} + onResetImportResult={() => this.setState(({ + importDialog: { ...importDialog, importResult: {}, imageId: "" } + }))} + exportDataDom={ + { + const formParams = form.getFormParams() || {}; + const payload = { exportData: val === "1", ...formParams }; + this.setState(({ + importDialog: { + ...importDialog, + link: `/api/bs/hrmsalary/scheme/template/export?extWelArchiveList=true&${convertToUrlString(payload)}` + } + })); + }} + /> + } + nextCallback={imageId => this.handleImport({ imageId })} + /> { this.state.importVisible && { diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/index.less b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/index.less index 7bb28208..0481abfb 100644 --- a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/index.less +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/index.less @@ -4,10 +4,6 @@ height: 100%; background: #f6f6f6; - .wea-new-top-req-wapper .wea-new-top-req-main { - background: #f6f6f6 !important; - } - .wea-new-top-req-wapper .wea-new-top-req { z-index: 0 !important; } diff --git a/pc4mobx/hrmSalary/stores/archives.js b/pc4mobx/hrmSalary/stores/archives.js index 480e5380..d1c55820 100644 --- a/pc4mobx/hrmSalary/stores/archives.js +++ b/pc4mobx/hrmSalary/stores/archives.js @@ -336,7 +336,7 @@ export class ArchivesStore { API.importBatch(params).then(res => { if (res.status) { this.importResult = res.data; - resolve(); + resolve(res); } else { message.error(res.errormsg || "导入失败", 1); reject(); diff --git a/pc4mobx/hrmSalary/stores/calculate.js b/pc4mobx/hrmSalary/stores/calculate.js index f842d9f0..5b270ddf 100644 --- a/pc4mobx/hrmSalary/stores/calculate.js +++ b/pc4mobx/hrmSalary/stores/calculate.js @@ -3,6 +3,7 @@ import { message } from "antd"; import { WeaForm, WeaTableNew } from "comsMobx"; import * as API from "../apis/calculate"; +import { toDecimal_n } from "../util"; const { TableStore } = WeaTableNew; @@ -492,7 +493,7 @@ export class calculateStore { ..._.map(cur.salaryItems, it => { return { salaryItemId: it.salaryItemId, - resultValue: it.resultValue + resultValue: (it.dataType === "number" && !!it.resultValue) ? toDecimal_n(it.resultValue, it.pattern || 2) : it.resultValue }; }) ]; @@ -501,7 +502,7 @@ export class calculateStore { const issuedAndReissueItems = this.acctresultDetailForm.issuedAndReissueItems.map(item => { let record = {}; record.salaryItemId = item.salaryItemId; - record.resultValue = item.resultValue; + record.resultValue = (item.dataType === "number" && !!item.resultValue) ? toDecimal_n(item.resultValue, item.pattern || 2) : item.resultValue; return record; }); diff --git a/pc4mobx/hrmSalary/stores/salaryFile.js b/pc4mobx/hrmSalary/stores/salaryFile.js index a0e213c7..de262e8f 100644 --- a/pc4mobx/hrmSalary/stores/salaryFile.js +++ b/pc4mobx/hrmSalary/stores/salaryFile.js @@ -9,6 +9,9 @@ import { notNull } from "../util/validate"; const { TableStore } = WeaTableNew; export class salaryFileStore { + @observable adjForm = new WeaForm(); // 调薪form + + @observable tableStore = new TableStore(); // new table @observable form = new WeaForm(); // nrew 一个form @observable condition = []; // 存储后台得到的form数据 @@ -41,6 +44,8 @@ export class salaryFileStore { setSalaryIncreaseUrl = data => (this.salaryIncreaseUrl = data); @action("设置薪资档案项") setAdjustSalaryItems = data => (this.adjustSalaryItems = data); + @action("调薪初始化form") + initAdjForm = () => (this.adjForm = new WeaForm()); // ** 设置导入参数 start ** @action setPreviewDataSource = (previewDataSource) => { diff --git a/pc4mobx/hrmSalary/stores/salaryItem.js b/pc4mobx/hrmSalary/stores/salaryItem.js index 3e97782f..7e7925bc 100644 --- a/pc4mobx/hrmSalary/stores/salaryItem.js +++ b/pc4mobx/hrmSalary/stores/salaryItem.js @@ -8,6 +8,8 @@ import { notNull } from "../util/validate"; const { TableStore } = WeaTableNew; export class SalaryItemStore { + @observable salarySetform = new WeaForm(); //同步薪资账套form + @observable tableStore = new TableStore(); // new table @observable sysListTableStore = new TableStore(); @observable form = new WeaForm(); // nrew 一个form diff --git a/pc4mobx/hrmSalary/util/index.js b/pc4mobx/hrmSalary/util/index.js index a37a2449..918106c3 100644 --- a/pc4mobx/hrmSalary/util/index.js +++ b/pc4mobx/hrmSalary/util/index.js @@ -107,6 +107,30 @@ export const format_with_regex = (number) => { }); }; +export const getDomkes = (conditions) => { + return _.map(conditions[0].items, it => it.domkey[0]); +}; + +export const padding0 = (num, length) => { + for (let len = ("" + num).length; len < length; len++) { + num = "0" + num; + } + return "0." + num; +}; +export const toDecimal_n = (x, num) => { + if (isNaN(parseFloat(x))) return false; + let f = Math.round(x * 100) / 100; + let s = f.toString(); + let rs = s.indexOf("."); + if (rs < 0) { + rs = s.length; + s += "."; + } + while (s.length <= rs + num) { + s += "0"; + } + return s; +}; /** * 打印指定dom内容 * @param printParams diff --git a/pc4mobx/hrmSalary/util/url.js b/pc4mobx/hrmSalary/util/url.js index a69b4f81..d2802383 100644 --- a/pc4mobx/hrmSalary/util/url.js +++ b/pc4mobx/hrmSalary/util/url.js @@ -1,11 +1,10 @@ -// export const getQueryString = (name) => { -// let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); -// let r = window.location.hash.split("?")[1].match(reg); -// if (r != null) { -// return decodeURIComponent(r[2]); -// }; -// return null; -// } +export const getURLParameters = (url) => + (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce( + (a, v) => ( + (a[v.slice(0, v.indexOf("="))] = v.slice(v.indexOf("=") + 1)), a + ), + {} + ); export const getQueryString = (variable) => { let split = window.location.hash.split("?");