diff --git a/pc4mobx/hrmSalary/apis/fieldManage.js b/pc4mobx/hrmSalary/apis/fieldManage.js new file mode 100644 index 00000000..5e75f876 --- /dev/null +++ b/pc4mobx/hrmSalary/apis/fieldManage.js @@ -0,0 +1,20 @@ +import { WeaTools } from "ecCom"; +import { postFetch } from "../util/request"; + +//获取编辑详情 +export const getSalaryFieldForm = (params) => { + return WeaTools.callApi("/api/bs/hrmsalary/salaryField/getSalaryForm", "GET", params); +}; +// 字段管理查询 +export const salaryFieldList = (params) => { + return postFetch('/api/bs/hrmsalary/salaryField/list', params); +} + +// 字段管理查询 +export const saveSalaryField = (params) => { + return postFetch('/api/bs/hrmsalary/salaryField/save', params); +} +// 删除字段管理 +export const deleteSalaryField = (params) => { + return postFetch('/api/bs/hrmsalary/salaryField/delete', params); +} diff --git a/pc4mobx/hrmSalary/index.js b/pc4mobx/hrmSalary/index.js index 9f796db5..9faba78d 100644 --- a/pc4mobx/hrmSalary/index.js +++ b/pc4mobx/hrmSalary/index.js @@ -31,6 +31,7 @@ import MobilePayroll from "./pages/mobilePayroll"; import SysConfig from "./pages/sysConfig"; import RuleConfig from "./pages/ruleConfig"; import Appconfig from "./pages/appConfig"; +import FieldManagement from "./pages/fieldManagement"; import stores from "./stores"; import "./style/index"; @@ -147,6 +148,7 @@ const Routes = ( + ); diff --git a/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js b/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js new file mode 100644 index 00000000..81de428b --- /dev/null +++ b/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js @@ -0,0 +1,263 @@ +/* + * Author: 黎永顺 + * name: 编辑新增字段弹框 + * Description: + * Date: 2023/1/19 + */ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaCheckbox, WeaFormItem, WeaHelpfulTip, WeaInput, 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"; + +@inject("taxAgentStore") +@observer +class FieldSlide extends Component { + constructor(props) { + super(props); + this.state = { + loading: false, + name: "", + useDefault: "", + sharedType: "", + shareTypeList: [], + taxAgentIds: "", + dataType: "number", + roundingMode: "", + pattern: "2", + description: "" + }; + } + + componentDidMount() { + const { taxAgentStore } = this.props; + this.commonEnumList(); + const { getTaxAgentSelectListAsAdmin } = taxAgentStore; + getTaxAgentSelectListAsAdmin(); + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.editId !== this.props.editId && nextProps.editId) { + this.getSalaryFieldForm(nextProps.editId); + } + } + + getSalaryFieldForm = (id) => { + getSalaryFieldForm({ id }).then(({ status, data }) => { + if (status) { + const { name, useDefault, dataType, description, sharedType, roundingMode, taxAgentIds, pattern } = data; + this.setState({ + name, + useDefault: useDefault ? useDefault.toString() : "0", + dataType, + description, + sharedType: sharedType ? sharedType.toString() : "0", + roundingMode: roundingMode ? roundingMode.toString() : "0", + taxAgentIds, + pattern: pattern ? pattern.toString() : "0" + }); + } + }); + }; + + /* + * Author: 黎永顺 + * Description: 获取可见性列表 + * Params: + * Date: 2023/1/28 + */ + commonEnumList = () => { + const payload = { + enumClass: "com.engine.salary.enums.sicategory.SharedTypeEnum" + }; + commonEnumList(payload).then(({ status, data }) => { + if (status) { + const result = _.map(data, it => ({ + key: String(it.value), + showname: it.defaultLabel + })); + this.setState({ + shareTypeList: [{ + key: "", + showname: "" + }, ...result] + }); + } + }); + }; + /* + * Author: 黎永顺 + * Description: 保存字段信息 + * Params: + * Date: 2022/12/12 + */ + saveFieldInfo = () => { + if (_.isEmpty(this.state.name)) { + Modal.warning({ + title: "信息确认", + content: "必要信息不完整,红色*为必填项!" + }); + return false; + } + const { onRefreshList, onCancel, editId } = this.props; + const { name, useDefault, dataType, description, sharedType, roundingMode, taxAgentIds, pattern } = this.state; + const payload = { + name, + useDefault: Number(useDefault), + dataType, + description, + sharedType, + roundingMode: Number(roundingMode), + taxAgentIds, + pattern: Number(pattern) + }; + this.setState({ loading: true }); + saveSalaryField({ ...payload, id: editId }).then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + onRefreshList(); + onCancel(); + this.handleReset(); + message.success("保存成功"); + } else { + message.error(errormsg || "保存失败"); + } + }).catch(() => this.setState({ loading: false })); + }; + /* + * Author: 黎永顺 + * Description: 字段项修改 + * Params: + * Date: 2022/12/14 + */ + handleChangeFields = (type, value) => { + this.setState({ [type]: value }); + }; + handleReset = () => { + this.setState({ + name: "", + useDefault: "", + sharedType: "", + taxAgentIds: "", + dataType: "number", + roundingMode: "", + pattern: "2", + description: "" + }); + }; + + render() { + const { title, visible, taxAgentStore: { showOperateBtn, taxAgentAdminOption }, onCancel } = this.props; + const { + loading, + name, + useDefault, + shareTypeList, + sharedType, + taxAgentIds, + dataType, + roundingMode, + pattern, + description + } = this.state; + return ( + + } + content={ +
+ + this.handleChangeFields("name", value)}/> + + + this.handleChangeFields("useDefault", value)} + /> + + + + this.handleChangeFields("sharedType", value)} + style={{ width: 200 }} + /> + + { + sharedType === "1" && + + this.handleChangeFields("taxAgentIds", value)} + /> + + } + + this.handleChangeFields("dataType", value)} + style={{ width: 200 }} + /> + + + this.handleChangeFields("roundingMode", value)} + /> + + + this.handleChangeFields("pattern", value)} + /> + + + this.handleChangeFields("description", value)} + /> + +
+ } + onClose={() => { + this.handleReset(); + onCancel(); + }} + /> + ); + } +} + +export default FieldSlide; + diff --git a/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldTable.js b/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldTable.js new file mode 100644 index 00000000..08e6a073 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldTable.js @@ -0,0 +1,182 @@ +/* + * Author: 黎永顺 + * name: 字段列表 + * Description: + * Date: 2023/1/19 + */ +import React, { Component } from "react"; +import { WeaTable } from "ecCom"; +import { inject, observer } from "mobx-react"; +import { message, Modal, Switch } from "antd"; +import { salaryFieldList } from "../../../apis/fieldManage"; + +@inject("taxAgentStore") +@observer +class FieldTable extends Component { + constructor(props) { + super(props); + this.state = { + loading: false, + dataSource: [], + columns: [], + pageInfo: { + current: 1, + pageSize: 10, + total: 0 + } + }; + } + + componentDidMount() { + this.salaryFieldList(); + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.doSearch !== this.props.doSearch) this.salaryFieldList({ current: 1 }); + } + + salaryFieldList = (extra = {}) => { + const { name } = this.props; + const { pageInfo } = this.state; + const payload = { name, ...pageInfo, ...extra }; + this.setState({ loading: true }); + salaryFieldList(payload).then(({ status, data }) => { + this.setState({ loading: false }); + if (status) { + const { pageNum: current, pageSize, total, columns, list: dataSource } = data; + this.setState({ + pageInfo: { ...pageInfo, current, pageSize, total }, + dataSource, + columns + }); + } + }); + }; + getColumns = () => { + const { columns } = this.state; + const { taxAgentStore, onEditLedger, onDeleteLedger } = this.props; + const { showOperateBtn } = taxAgentStore; + return _.map([...columns, { + dataIndex: "operate", + display: true, + key: "operate", + title: "操作" + }], item => { + const { dataIndex } = item; + if (dataIndex === "useDefault") { + item.render = (text) => (); + } else if (dataIndex === "operate") { + item.width = 120; + item.render = (text, record) => { + return ; + }; + } else { + item.render = (text) => { + return {text}; + }; + } + return { ...item }; + }); + }; + /* + * Author: 黎永顺 + * Description: 刪除薪资账套 + * Params: + * Date: 2022/12/8 + */ + deleteLedger = (payload) => { + deleteLedger(payload).then(({ status, errormsg }) => { + if (status) { + message.success("删除成功"); + this.salaryFieldList(); + } else { + message.error(errormsg || "删除失败"); + } + }); + }; + /* + * Author: 黎永顺 + * Description: 启用/关闭账套 + * Params: + * Date: 2022/12/8 + */ + changeLedgerStatus = (payload) => { + changeLedgerStatus(payload).then(({ status, errormsg }) => { + if (status) { + message.success("操作成功"); + this.salaryFieldList(); + } else { + message.error(errormsg || "操作成功"); + } + }); + }; + handleResetCopy = () => { + const { copyLedgerModal } = this.state; + this.setState({ + copyLedgerModal: { ...copyLedgerModal, visible: false, id: "", name: "", taxAgenyId: "" } + }); + }; + handleMenuClick = ({ key }, record) => { + const { copyLedgerModal } = this.state; + const { id, name, taxAgentId } = record; + switch (key) { + case "copy": + this.setState({ + copyLedgerModal: { ...copyLedgerModal, visible: true, id, name, taxAgentId } + }); + break; + case "delete": + Modal.confirm({ + title: "信息确认", + content: "确认要删除吗?", + onOk: () => { + this.deleteLedger([id]); + } + }); + break; + default: + break; + } + }; + + render() { + const { dataSource, pageInfo, loading } = this.state; + const pagination = { + ...pageInfo, + showTotal: total => `共 ${total} 条`, + showQuickJumper: true, + showSizeChanger: true, + pageSizeOptions: ["10", "20", "50", "100"], + onShowSizeChange: (current, pageSize) => { + this.setState({ pageInfo: { ...pageInfo, current, pageSize } }, () => { + this.salaryFieldList(); + }); + }, + onChange: current => { + this.setState({ + pageInfo: { ...pageInfo, current } + }, () => { + this.salaryFieldList(); + }); + } + }; + return ( + + ); + } +} + +export default FieldTable; diff --git a/pc4mobx/hrmSalary/pages/fieldManagement/index.js b/pc4mobx/hrmSalary/pages/fieldManagement/index.js new file mode 100644 index 00000000..be149e71 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/fieldManagement/index.js @@ -0,0 +1,102 @@ +/* + * Author: 黎永顺 + * name: 字段管理 + * Description: + * Date: 2023/1/18 + */ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { Button, message, Modal } from "antd"; +import { WeaInputSearch, WeaTop } from "ecCom"; +import FieldTable from "./components/fieldTable"; +import FieldSlide from "./components/fieldSlide"; +import { deleteSalaryField } from "../../apis/fieldManage"; +import "./index.less"; + +@inject("taxAgentStore") +@observer +class FieldManagement extends Component { + constructor(props) { + super(props); + this.state = { + searchVal: "", + doSearch: false, + slideparams: { + visible: false, + title: "新建字段", + editId: "" + } + }; + } + + handleEditField = (record) => { + const { slideparams } = this.state; + const { id } = record; + this.setState({ slideparams: { ...slideparams, visible: true, title: "编辑字段", editId: id } }); + }; + handleDeleteField = (filedIds) => { + Modal.confirm({ + title: "信息确认", + content: "确认要删除吗?", + onOk: () => { + deleteSalaryField(filedIds).then(({ status, errormsg }) => { + if (status) { + message.success("删除成功"); + this.setState({ doSearch: !this.state.doSearch }) + } else { + message.error(errormsg || "删除失败"); + } + }); + } + }); + }; + handleResetField = () => { + const { slideparams } = this.state; + this.setState({ + slideparams: { + ...slideparams, + visible: false, + title: "新建字段", + editId: "" + } + }); + }; + + render() { + const { searchVal, doSearch, slideparams } = this.state; + const { taxAgentStore } = this.props; + const { showOperateBtn } = taxAgentStore; + const btns = [ + , + this.setState({ searchVal })} + onSearch={() => this.setState({ doSearch: !doSearch })} + /> + ]; + return ( + } + iconBgcolor="#F14A2D" + showDropIcon={false} + buttons={showOperateBtn ? btns : btns.slice(-1)} + > +
+ this.handleDeleteField([record.id])}/> + this.setState({ doSearch: !doSearch })} + /> +
+
+ ); + } +} + +export default FieldManagement; diff --git a/pc4mobx/hrmSalary/pages/fieldManagement/index.less b/pc4mobx/hrmSalary/pages/fieldManagement/index.less new file mode 100644 index 00000000..be964427 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/fieldManagement/index.less @@ -0,0 +1,32 @@ +.slideOuterWrapper { + .wea-form-item-group{ + padding: 56px 80px; + } + .wea-slide-modal-title { + height: initial; + line-height: initial; + text-align: left; + } + + .rodal-close { + z-index: 99; + top: 10px !important; + } + +} + +@media (min-width: 1260px) { + .slideOuterWrapper { + .reqTopWrapper .wea-new-top-req-title > div:first-child > div { + max-width: 100% !important; + } + } +} + +@media screen and (min-width: 1060px) and (max-width: 1260px) { + .slideOuterWrapper { + .reqTopWrapper .wea-new-top-req-title > div:first-child > div { + max-width: calc(100% - 96px) !important; + } + } +} diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBaseSetting.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBaseSetting.js index 9d9f8ad5..e861b31d 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBaseSetting.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBaseSetting.js @@ -159,7 +159,7 @@ class LedgerBaseSetting extends Component { { _.map(baseForm, item => { const { key, label, type, options = [], children = [] } = item; - taxAgentIdDisabled = key === "taxAgentId" && taxAgentId; + taxAgentIdDisabled = key === "taxAgentId" && editId && taxAgentId; taxableItemsDisabled = key === "taxableItems" && editId; return { this.setState({ loading: { ...loading, query: false } }); @@ -216,7 +210,6 @@ class Index extends Component { pageSize } }); - this.queryTabTotal(); } }); }; @@ -235,6 +228,7 @@ class Index extends Component { if (status) { const { msg } = data; message.info(msg || "操作成功!"); + this.queryTabTotal(); this.query(); } else { message.error(errormsg || "操作失败!"); @@ -260,6 +254,7 @@ class Index extends Component { API.cancelStop([id]).then(({ status, errormsg }) => { if (status) { message.success("操作成功!"); + this.queryTabTotal(); this.query(); } else { message.error(errormsg || "操作失败!"); @@ -274,6 +269,7 @@ class Index extends Component { this.setState({ selectedRowKeys: [] }, () => { + this.queryTabTotal(); this.query(); }); } else { @@ -312,6 +308,7 @@ class Index extends Component { this.setState({ selectedRowKeys: [] }, () => { + this.queryTabTotal(); this.query(); }); } else { @@ -388,6 +385,7 @@ class Index extends Component { pageInfo={pageInfo} selectedRowKeys={selectedRowKeys} refreshList={() => { + this.queryTabTotal(); this.query(); this.setState({ selectedRowKeys: [] }); }} @@ -423,6 +421,7 @@ class Index extends Component { { + this.queryTabTotal(); this.query(); this.setState({ selectedRowKeys: [] }); }}