diff --git a/pc4mobx/hrmSalary/apis/calculate.js b/pc4mobx/hrmSalary/apis/calculate.js index 1cfca645..38c0c08b 100644 --- a/pc4mobx/hrmSalary/apis/calculate.js +++ b/pc4mobx/hrmSalary/apis/calculate.js @@ -250,3 +250,11 @@ export const customCacheExportField = (params) => { export const salaryacctBatchUpdate = (params) => { return postFetch("/api/bs/hrmsalary/salaryacct/acctresult/batchUpdate", params); }; +//薪资核算-自定义导出模板保存新建 +export const saveExportTemplate = (params) => { + return postFetch("/api/bs/hrmsalary/salaryacct/acctresult/saveExportTemplate", params); +}; +//薪资核算-获取自定义导出模板列表 +export const getExportTemplateList = (params) => { + return postFetch("/api/bs/hrmsalary/salaryacct/acctresult/exportTemplateList", params); +}; diff --git a/pc4mobx/hrmSalary/common/columns.js b/pc4mobx/hrmSalary/common/columns.js deleted file mode 100644 index 4c9dc027..00000000 --- a/pc4mobx/hrmSalary/common/columns.js +++ /dev/null @@ -1,77 +0,0 @@ -export const logColumns = [ - { - 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: "客户端IP", - dataIndex: 'title', - key: 'title', - } -] - -export const testColumns = [ - { - 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 = []; \ No newline at end of file diff --git a/pc4mobx/hrmSalary/common/conditions.js b/pc4mobx/hrmSalary/common/conditions.js new file mode 100644 index 00000000..81e041a6 --- /dev/null +++ b/pc4mobx/hrmSalary/common/conditions.js @@ -0,0 +1,24 @@ +import React from "react"; +import { WeaLocaleProvider } from "ecCom"; + +const getLabel = WeaLocaleProvider.getLabel; +//薪资核算-自定义导出-模板设置 +export const tempConditions = [ + { + items: [ + { + colSpan: 1, + conditionType: "INPUT", + domkey: ["templateName"], + fieldcol: 16, + label: getLabel(111, "导出模板名称"), + labelcol: 8, + value: "", + rules: "required|string", + viewAttr: 3 + } + ], + defaultshow: true, + title: "" + } +]; diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/customCalcExportDialog/index.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/customCalcExportDialog/index.js index 7dedaa0d..2a4f2390 100644 --- a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/customCalcExportDialog/index.js +++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/customCalcExportDialog/index.js @@ -9,9 +9,11 @@ import React, { Component } from "react"; import { Button, Col, message, Row } from "antd"; import { inject, observer } from "mobx-react"; import { WeaCheckbox, WeaDialog, WeaLocaleProvider, WeaSearchGroup, WeaSelect } from "ecCom"; +import ExpTempManagementDialog from "../expTempManagementDialog"; import { customCacheExportField } from "../../../../../apis/calculate"; import { convertToUrlString } from "../../../../../util/url"; import "./index.less"; +import TempDialog from "../expFieldsSetDialog/tempDialog"; const { getLabel } = WeaLocaleProvider; @@ -21,8 +23,8 @@ class Index extends Component { constructor(props) { super(props); this.state = { - itemsCheckeds: [], - showOnlyChecked: false + itemsCheckeds: [], showOnlyChecked: false, tempMangeDialog: { visible: false, salaryAcctRecordId: "" }, + tempDialog: { visible: false, salaryAcctRecordId: "", id: "", salaryItemIds: [] } }; } @@ -69,8 +71,8 @@ class Index extends Component { }; render() { - const { showOnlyChecked, itemsCheckeds } = this.state; - const { itemsByGroup } = this.props; + const { showOnlyChecked, itemsCheckeds, tempMangeDialog, tempDialog } = this.state; + const { itemsByGroup, salaryAcctRecordId } = this.props; let dataSource = _.map(itemsByGroup, item => { return { ...item, @@ -104,8 +106,13 @@ class Index extends Component { }} buttons={[ , - , - , + , + , ]} bottomLeft={; }) } + this.setState({ tempMangeDialog: { visible: false } })} + /> + {/*模板保存*/} + this.setState({ + tempDialog: { ...tempDialog, visible: false } + })}/> ); } diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/expFieldsSetDialog/index.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/expFieldsSetDialog/index.js new file mode 100644 index 00000000..6ffcfa93 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/expFieldsSetDialog/index.js @@ -0,0 +1,117 @@ +/* + * Author: 黎永顺 + * name:自定义导出-导出字段设置 + * Description: + * Date: 2024/3/28 + */ +import React, { Component } from "react"; +import { WeaCheckbox, WeaDialog, WeaLocaleProvider, WeaSearchGroup } from "ecCom"; +import { Button, Col, Row } from "antd"; +import * as API from "../../../../../apis/calculate"; +import TempDialog from "./tempDialog"; + +const getLabel = WeaLocaleProvider.getLabel; + +class Index extends Component { + constructor(props) { + super(props); + this.state = { + itemsCheckeds: [], itemsByGroup: [], + tempDialog: { visible: false, salaryAcctRecordId: "", id: "", salaryItemIds: [] } + }; + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visible && nextProps.visible) this.getExportField(nextProps); + if (nextProps.visible !== this.props.visible && !nextProps.visible) this.setState({ + itemsCheckeds: [], itemsByGroup: [] + }); + } + + getExportField = (props) => { + const { salaryAcctRecordId } = props; + API.getExportField({ salaryAcctRecordId }).then(({ status, data }) => { + if (status) { + const { itemsByGroup } = data; + this.setState({ itemsByGroup }); + } + }); + }; + handleSelectGroupAll = (groupId, checked) => { + const { itemsCheckeds, itemsByGroup } = this.state; + _.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 { itemsCheckeds, itemsByGroup, tempDialog } = this.state; + const { salaryAcctRecordId, tempId: id } = this.props; + let dataSource = _.map(itemsByGroup, item => { + return { + ...item, salaryItems: _.map(item.salaryItems, child => { + return { ...child, checked: itemsCheckeds.includes(child.salaryItemId) }; + }) + }; + }); + return ( + this.setState({ + tempDialog: { + visible: true, salaryAcctRecordId, id, salaryItemIds: itemsCheckeds + } + })}>{getLabel(111, "保存")}]} + > + { + _.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, "暂无数据")} + } + + ; + }) + } + this.setState({ + tempDialog: { ...tempDialog, visible: false } + }, () => isRefresh && this.props.onCancel(true))}/> + + ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/expFieldsSetDialog/tempDialog.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/expFieldsSetDialog/tempDialog.js new file mode 100644 index 00000000..c6c9d754 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/expFieldsSetDialog/tempDialog.js @@ -0,0 +1,73 @@ +/* + * Author: 黎永顺 + * name: 导出模板保存框 + * Description: + * Date: 2024/3/29 + */ +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 { tempConditions } from "../../../../../common/conditions"; +import * as API from "../../../../../apis/calculate"; + +const getLabel = WeaLocaleProvider.getLabel; + +@inject("calculateStore") +@observer +class TempDialog extends Component { + constructor(props) { + super(props); + this.state = { + loading: false + }; + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visible && nextProps.visible) { + nextProps.calculateStore.tempForm.initFormFields(tempConditions); + } else { + nextProps.calculateStore.initTempForm(); + } + } + + save = () => { + const { calculateStore: { tempForm }, salaryAcctRecordId, id, salaryItemIds } = this.props; + tempForm.validateForm().then(f => { + if (f.isValid) { + const payload = tempForm.getFormParams(); + this.setState({ loading: true }); + API.saveExportTemplate({ ...payload, salaryAcctRecordId, id, salaryItemIds }) + .then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + message.success(getLabel(111, "操作成功!")); + this.props.onCancel(true); + } else { + message.error(errormsg); + } + }).catch(() => this.setState({ loading: false })); + } else { + f.showErrors(); + } + }); + }; + + render() { + const { loading } = this.state; + const { calculateStore: { tempForm } } = this.props; + return ( + {getLabel(111, "保存")} + ]} + > +
{getSearchs(tempForm, tempConditions, 1, false)}
+
+ ); + } +} + +export default TempDialog; diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/expTempManagementDialog/index.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/expTempManagementDialog/index.js new file mode 100644 index 00000000..8e19670e --- /dev/null +++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/expTempManagementDialog/index.js @@ -0,0 +1,96 @@ +/* + * Author: 黎永顺 + * name: 自定义导出-导出模板管理 + * Description: + * Date: 2024/3/28 + */ +import React, { Component } from "react"; +import { WeaButtonIcon, WeaDialog, WeaInputSearch, WeaLocaleProvider, WeaTab, WeaTable } from "ecCom"; +import ExpFieldsSetDialog from "../expFieldsSetDialog"; +import * as API from "../../../../../apis/calculate"; + +const getLabel = WeaLocaleProvider.getLabel; + +class Index extends Component { + constructor(props) { + super(props); + this.state = { + pageInfo: { current: 1, pageSize: 10, total: 0 }, dataSource: [], columns: [], loading: false, + fieldsSetDialog: { visible: false, salaryAcctRecordId: "" }, query: { templateName: "" }, + selectedRowKeys: [] + }; + this.dialogRef = null; + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visible && nextProps.visible) this.getExportTemplateList(nextProps); + if (nextProps.visible !== this.props.visible && !nextProps.visible) this.setState({ selectedRowKeys: [] }); + } + + getExportTemplateList = (props) => { + const { pageInfo, query } = this.state; + const { salaryAcctRecordId } = props; + const payload = { ...pageInfo, ...query, salaryAcctRecordId }; + this.setState({ loading: true }); + API.getExportTemplateList(payload).then(({ status, data }) => { + this.setState({ loading: false }); + if (status) { + const {} = data; + } + }).catch(() => this.setState({ loading: false })); + }; + + render() { + const { fieldsSetDialog, query, pageInfo, selectedRowKeys, dataSource, columns } = this.state; + const { salaryAcctRecordId } = this.props; + const dialogBodyHeight = this.dialogRef ? this.dialogRef.state.height : 600; + const pagination = { + ...pageInfo, + showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`, + showQuickJumper: true, + showSizeChanger: true, + pageSizeOptions: ["10", "20", "50", "100"], + onShowSizeChange: (current, pageSize) => { + this.setState({ + pageInfo: { ...pageInfo, current, pageSize } + }, () => this.getExportTemplateList(this.props)); + }, + onChange: current => { + this.setState({ + pageInfo: { ...pageInfo, current } + }, () => this.getExportTemplateList(this.props)); + } + }; + const rowSelection = { + selectedRowKeys, onChange: selectedRowKeys => this.setState({ selectedRowKeys }) + }; + return ( + this.dialogRef = dom} initLoadCss className="tempManageDialogLayout" + style={{ + width: 700, height: 606.6, minHeight: 200, minWidth: 380, maxHeight: "70%", + maxWidth: "90%", overflow: "hidden", transform: "translate(0px, 0px)" + }} + > + this.setState({ fieldsSetDialog: { visible: true, salaryAcctRecordId } })}/>, + , + this.setState({ query: { ...query, templateName: val } })} + onSearch={() => this.getExportTemplateList(this.props)}/> + ]}/> + + this.setState({ + fieldsSetDialog: { ...fieldsSetDialog, visible: false } + }, () => isRefresh && this.getExportTemplateList(this.props))}/> + + ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/stores/calculate.js b/pc4mobx/hrmSalary/stores/calculate.js index 86d3b498..262488ad 100644 --- a/pc4mobx/hrmSalary/stores/calculate.js +++ b/pc4mobx/hrmSalary/stores/calculate.js @@ -14,6 +14,8 @@ export class calculateStore { @observable calculateForm = new WeaForm(); //薪资核算重构-核算form @observable batchUpdateForm = new WeaForm(); //批量更新薪资项目-批量更新form @action initBatchUpdateForm = () => this.batchUpdateForm = new WeaForm(); + @observable tempForm = new WeaForm(); //导出模板设置-模板form + @action initTempForm = () => this.tempForm = new WeaForm(); @observable tableStore = new TableStore(); // new table @observable form = new WeaForm(); // nrew 一个form