salary-management-front/pc4mobx/hrmSalary/pages/sysConfig/index.js

205 lines
6.2 KiB
JavaScript

import React from "react";
import { WeaDialog, WeaTable, WeaTop } from "ecCom";
import { WeaForm } from "comsMobx";
import { Button, message } from "antd";
import SysForm from "./components/sysForm";
import { sysConditions } from "./conditions";
import * as API from "../../apis/sysconfig";
import "./index.less";
import _ from "lodash";
export default class SysConfig extends React.Component {
constructor(props) {
super(props);
this.state = {
form: new WeaForm(),
dataSource: [],
columns: [],
loading: {
query: false,
add: false,
update: false
},
pageInfo: {
current: 1,
pageSize: 10,
total: 10
},
modalProps: {
visible: false,
title: "新增配置项",
formId: ""
}
};
}
componentDidMount() {
this.state.form.initFormFields(sysConditions);
this.getSysList();
}
getSysList = () => {
const { pageInfo, loading } = this.state;
const payload = {
...pageInfo
};
this.setState({ loading: { ...loading, query: true } });
API.getSysList(payload).then(({ status, data }) => {
this.setState({ loading: { ...loading, query: false } });
if (status && !_.isEmpty(data)) {
const { columns, list: dataSource, total, pageSize, pageNum: current } = data;
this.setState({
columns: [...columns, {
title: "操作",
key: "operation",
render: (text, record) => (
<span>
<a href="javascript:void(0);" onClick={() => this.setState({
modalProps: {
...this.state.modalProps,
visible: true,
title: "编辑配置项",
formId: record.id
}
}, () => this.getSysDetail(record.id))}>编辑</a>
</span>
)
}],
dataSource,
pageInfo: { ...pageInfo, total, pageSize, current }
});
}
});
};
getSysDetail = (id) => {
const { form } = this.state;
const payload = { id };
API.getSysDetail(payload).then(({ status, data, errormsg }) => {
if (status) {
const [fieldItems] = sysConditions;
fieldItems.items = _.map(fieldItems.items, it => {
const { domkey } = it;
return {
...it,
value: data[domkey[0]]
};
});
form.initFormFields(sysConditions);
} else {
message.error(errormsg);
}
});
};
sysSave = (payload) => {
const { loading, modalProps, form } = this.state;
this.setState({ loading: { ...loading, add: true } });
API.sysSave(payload).then(({ status, errormsg }) => {
this.setState({ loading: { ...loading, add: false } });
if (status) {
message.success("新增成功");
this.setState({ modalProps: { ...modalProps, visible: false, title: "新增配置项", formId: "" } }, () => {
this.getSysList();
form.reset();
});
} else {
message.error(errormsg || "新增失败");
}
});
};
sysUpdate = (payload) => {
const { loading, modalProps, form } = this.state;
this.setState({ loading: { ...loading, update: true } });
API.sysUpdate(payload).then(({ status, errormsg }) => {
this.setState({ loading: { ...loading, update: false } });
if (status) {
message.success("更新成功");
this.setState({ modalProps: { ...modalProps, visible: false, title: "新增配置项", formId: "" } }, () => {
this.getSysList();
form.reset();
});
} else {
message.error(errormsg || "更新失败");
}
});
};
handleSubmit = () => {
const { form, modalProps } = this.state;
const { formId } = modalProps;
form.validateForm().then(f => {
if (f.isValid) {
const params = form.getFormParams();
!formId ? this.sysSave(params) : this.sysUpdate({ ...params, id: formId });
} else {
f.showErrors();
this.forceUpdate();
}
});
};
render() {
const { dataSource, columns, pageInfo, modalProps, form, loading } = this.state;
const btns = [
<Button type="primary" onClick={() => this.setState({ modalProps: { ...modalProps, visible: true } }, () => {
form.reset();
})}>新增</Button>
];
const pagination = {
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.getSysList();
});
},
onChange: current => {
this.setState({ pageInfo: { ...pageInfo, current } }, () => {
this.getSysList();
});
}
};
return (
<div className="sysWrapper">
<WeaTop
title={<span>系统配置</span>}
icon={<i className="icon-coms-Flow-setting"/>}
iconBgcolor="#F14A2D"
buttons={btns}
/>
<WeaTable
loading={loading.query}
rowKey="id"
columns={columns} dataSource={dataSource} pagination={pagination}
scroll={{ y: `calc(100vh - 162px)` }}
/>
{/* 新增编辑系统配置项*/}
<WeaDialog
{...modalProps}
initLoadCss
className="sysModalWrapper"
buttons={[
<Button type="ghost" onClick={() => this.setState({
modalProps: {
...modalProps,
visible: false,
title: "新增配置项",
formId: ""
}
})}>取消</Button>,
<Button type="primary" onClick={this.handleSubmit} loading={loading.add || loading.update}>确定</Button>
]}
onCancel={() => this.setState({ modalProps: { ...modalProps, visible: false, title: "新增配置项", formId: "" } })}
>
{
modalProps.visible &&
<SysForm form={form} condition={sysConditions}/>
}
</WeaDialog>
</div>
);
}
}