mh_jy_safe_web/src/components/CustomPages/SE/SEConfigPage.js

392 lines
17 KiB
JavaScript
Raw Normal View History

2025-08-25 10:08:30 +08:00
import { message } from "antd/lib/index";
import { Button, Popconfirm, Row, Col, Form, Input, InputNumber, DatePicker, Select, Table } from 'antd';
import React from 'react';
import { initFilter, extendRule, extendInclude, setDataFieldValue, guid, initQueryFilter } from "../../../utils/common";
import styles from '../../CustomPages/HI/StepForm.css';
import { connect } from 'dva';
import moment from 'moment';
class SEConfigPage extends React.Component {
2026-04-10 14:38:18 +08:00
2025-08-25 10:08:30 +08:00
constructor(props) {
super(props);
this.state = {
isLoading: false,
data: {
ID: null,
SAFE_SERVEY_TRIGGER_TIME: null,
S_TEST_COUNT: 0,
S_TEST_SCORE: 0,
S_TEST_TOTAL: 0,
M_TEST_COUNT: 0,
M_TEST_SCORE: 0,
M_TEST_TOTAL: 0,
C_TEST_COUNT: 0,
C_TEST_SCORE: 0,
C_TEST_TOTAL: 0,
DEP_TRAIN_PLAN_START_TIME: null,
DEP_TRAIN_PLAN_END_TIME: null,
TRAIN_SURVEY_TRIGGER_TIME: null,
2026-04-10 14:38:18 +08:00
APPROVAL_ROLE_ID: null,
optionsSelect: null
2025-08-25 10:08:30 +08:00
},
};
2026-04-10 14:38:18 +08:00
2025-08-25 10:08:30 +08:00
};
componentDidMount() {
2026-04-10 14:38:18 +08:00
this.ini();
// this.loadData();
2025-08-25 10:08:30 +08:00
}
BtnClose = () => {
if (typeof this.props.closeFn != "undefined")
this.props.closeFn();
else if (typeof this.props.data.closeTab == 'function') {
this.props.data.closeTab(this.props.data.id)
} else if (typeof this.props.onCancel === "function") {
this.props.onCancel();
}
}
2026-04-10 14:38:18 +08:00
ini = () => {
let json = initFilter(this.props.login.OrgId);
json.Parameter22 = this.props.data.ORG_ID_HV;
var that = this
this.props.dispatch({
type: 'app/getDataByPost',
payload: json,
url: 'PF/ApprovalRole/Entities',
onComplete: (ret) => {
if (ret && ret.length > 0) {
let data = this.state.data;
data.optionsSelect = ret;
this.setState(data)
this.loadData()
}
}
});
}
2025-08-25 10:08:30 +08:00
loadData = () => {
let json = initFilter(this.props.login.OrgId);
json.Parameter22 = this.props.data.ORG_ID_HV;
2025-08-25 10:08:30 +08:00
this.props.dispatch({
type: 'app/getDataByPost',
payload: json,
url: 'SE/SEConfig/Entities',
onComplete: (ret) => {
if (ret && ret.length > 0) {
2026-04-10 14:38:18 +08:00
ret[0].optionsSelect = this.state.data.optionsSelect
2025-08-25 10:08:30 +08:00
this.setState({ data: ret[0] });
}
}
});
}
fmtEnum(name, value) {
const enums = this.props.app.enums;
if (!enums || !enums[name]) return '';
return enums[name].enums[value] || '';
}
onSave = () => {
let data = JSON.parse(JSON.stringify(this.state.data));
2025-11-19 17:26:08 +08:00
// if (data.DEP_TRAIN_PLAN_END_TIME && data.DEP_TRAIN_PLAN_START_TIME) {
// let s = new Date(data.DEP_TRAIN_PLAN_START_TIME);
// let e = new Date(data.DEP_TRAIN_PLAN_END_TIME);
// if (e.getTime() - s.getTime() < 1 * 24 * 60 * 60 * 1000) {
// message.error('截止时间至少比开始时间大一天');
// return;
// }
// }
if (!data.DEP_TRAIN_PLAN_START_TIME) {
message.error('请填写公司培训计划触发时间');
return;
2025-08-25 10:08:30 +08:00
}
if (!data.ID) {
data.ID = guid();
}
this.setState({ isLoading: true });
this.props.dispatch({
type: 'app/getDataByPost',
payload: data,
url: 'SE/SEConfig/FullUpdate',
onComplete: (ret) => {
if (ret) {
message.success('保存成功!');
this.setState({ isLoading: false });
}
}
});
}
2026-04-10 14:38:18 +08:00
onselectChange = (value) => {
debugger
let data = this.state.data;
data.APPROVAL_ROLE_ID = value;
this.setState(data)
}
onBlur = () => {
console.log('blur');
}
onFocus = () => {
console.log('focus');
}
onSearch = (val) => {
console.log('search:', val);
}
2025-08-25 10:08:30 +08:00
render() {
const { data } = this.state;
const dateFormat = 'MM-DD';
2026-04-10 14:38:18 +08:00
const { Option } = Select;
2025-08-25 10:08:30 +08:00
return <>
<div style={{ padding: '10px' }}>
<Button style={{ marginLeft: '8px' }} onClick={() => this.onSave()} icon="save" type="primary" loading={this.state.isLoading}>保存</Button>
</div>
<div ref={el => (this.componentRef = el)} style={{ padding: '20px', backgroundColor: 'FFF' }} id={'tableId' + this.props.data.id}>
<h1 style={{ textAlign: 'center', margin: '15px' }}>安全教育培训基础设置</h1>
<table style={{ width: '100%', textAlign: 'center', borderTop: '1px solid #333', borderLeft: '1px solid #333' }} className={styles.PrintForm}>
<tr>
<td colSpan={24} rowSpan={1} >题库设置</td>
</tr>
<tr>
<td colSpan={4} rowSpan={1} >是非题数目</td>
<td colSpan={4} rowSpan={1} >
<InputNumber value={data.C_TEST_COUNT} min={0} max={9999}
onChange={
value => {
let data = this.state.data;
data.C_TEST_COUNT = value;
this.setState(data)
}
}
>
</InputNumber>
</td>
<td colSpan={4} rowSpan={1} >是非题分值</td>
<td colSpan={4} rowSpan={1} >
<InputNumber value={data.C_TEST_SCORE} min={0} max={9999}
onChange={
value => {
let data = this.state.data;
data.C_TEST_SCORE = value;
this.setState(data)
}
}
>
</InputNumber>
</td>
<td colSpan={4} rowSpan={1} >是非题总分</td>
<td colSpan={4} rowSpan={1} >{data.C_TEST_COUNT * data.C_TEST_SCORE}</td>
</tr>
<tr>
<td colSpan={4} rowSpan={1} >单选题数目</td>
<td colSpan={4} rowSpan={1} >
<InputNumber value={data.S_TEST_COUNT} min={0} max={9999}
onChange={
value => {
let data = this.state.data;
data.S_TEST_COUNT = value;
this.setState(data)
}
}
>
</InputNumber>
</td>
<td colSpan={4} rowSpan={1} >单选题分值</td>
<td colSpan={4} rowSpan={1} >
<InputNumber value={data.S_TEST_SCORE} min={0} max={9999}
onChange={
value => {
let data = this.state.data;
data.S_TEST_SCORE = value;
this.setState(data)
}
}
>
</InputNumber>
</td>
<td colSpan={4} rowSpan={1} >单选题总分</td>
<td colSpan={4} rowSpan={1} >{data.S_TEST_COUNT * data.S_TEST_SCORE}</td>
</tr>
<tr>
<td colSpan={4} rowSpan={1} >多选题数目</td>
<td colSpan={4} rowSpan={1} >
<InputNumber value={data.M_TEST_COUNT} min={0} max={9999}
onChange={
value => {
let data = this.state.data;
data.M_TEST_COUNT = value;
this.setState(data)
}
}
>
</InputNumber>
</td>
<td colSpan={4} rowSpan={1} >多选题分值</td>
<td colSpan={4} rowSpan={1} >
<InputNumber value={data.M_TEST_SCORE} min={0} max={9999}
onChange={
value => {
let data = this.state.data;
data.M_TEST_SCORE = value;
this.setState(data)
}
}
>
</InputNumber>
</td>
<td colSpan={4} rowSpan={1} >多选题总分</td>
<td colSpan={4} rowSpan={1} >{data.M_TEST_COUNT * data.M_TEST_SCORE}</td>
</tr>
<tr>
<td colSpan={4} rowSpan={1} >培训补考限制次数</td>
<td colSpan={20} rowSpan={1} >
<InputNumber value={data.COUNT_RETRY} min={0} max={100}
onChange={value => {
let data = this.state.data;
data.COUNT_RETRY = value;
this.setState(data)
}}
>
</InputNumber>
</td>
</tr>
2025-08-25 10:08:30 +08:00
<tr>
<td colSpan={4} rowSpan={1} >合格线</td>
2025-11-13 17:53:20 +08:00
<td colSpan={20} rowSpan={1} >
2025-08-25 10:08:30 +08:00
<InputNumber value={data.PASS_MARK} min={0} max={100}
onChange={
value => {
let data = this.state.data;
data.PASS_MARK = value;
this.setState(data)
}
}
>
</InputNumber>
</td>
</tr>
<tr>
<td colSpan={4} rowSpan={1} >试题总分</td>
<td colSpan={20} rowSpan={1} > {data.C_TEST_COUNT * data.C_TEST_SCORE + data.S_TEST_COUNT * data.S_TEST_SCORE + data.M_TEST_COUNT * data.M_TEST_SCORE}
</td>
</tr>
<tr>
<td colSpan={24} rowSpan={1} >其它设置</td>
</tr>
<tr>
<td colSpan={4} rowSpan={1} >安全意识调查触发时间</td>
<td colSpan={20} rowSpan={1} >
<DatePicker
format={dateFormat}
value={data.SAFE_SERVEY_TRIGGER_TIME ? moment(data.SAFE_SERVEY_TRIGGER_TIME) : null}
onChange={value => {
let data = this.state.data;
data.SAFE_SERVEY_TRIGGER_TIME = moment(value);
2025-08-25 10:08:30 +08:00
this.setState(data)
}}
/>
</td>
</tr>
<tr>
<td colSpan={4} rowSpan={1} >培训需求调查触发时间</td>
<td colSpan={20} rowSpan={1} >
<DatePicker
format={dateFormat}
value={data.TRAIN_SURVEY_TRIGGER_TIME ? moment(data.TRAIN_SURVEY_TRIGGER_TIME) : null}
onChange={value => {
let data = this.state.data;
data.TRAIN_SURVEY_TRIGGER_TIME = value;
this.setState(data)
}}
/>
</td>
</tr>
<tr>
2025-11-13 17:53:20 +08:00
<td colSpan={4} rowSpan={1} >公司培训计划触发时间</td>
2026-04-10 14:38:18 +08:00
<td colSpan={8} rowSpan={1} >
2025-11-13 17:53:20 +08:00
<DatePicker
format={dateFormat}
value={data.DEP_TRAIN_PLAN_START_TIME ? moment(data.DEP_TRAIN_PLAN_START_TIME) : null}
onChange={value => {
let data = this.state.data;
data.DEP_TRAIN_PLAN_START_TIME = value;
this.setState(data)
}}
/>
</td>
2026-04-10 14:38:18 +08:00
<td colSpan={4} rowSpan={1} >接收角色</td>
<td colSpan={8} rowSpan={1} >
<Select
showSearch
style={{ width: 300 }}
placeholder="请选择接收角色"
value={data.APPROVAL_ROLE_ID}
onChange={(value) => {
data.APPROVAL_ROLE_ID = value;
this.setState(data)
}}
filterOption={(input, option) =>
option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
>
{data.optionsSelect?.map(item =>
(<Option key={item.ID} value={item.ID} label={item.NAME} >{item.NAME}</Option>)
)}
</Select>
</td>
2025-11-13 17:53:20 +08:00
</tr>
2026-04-10 14:38:18 +08:00
{/*
render: (text, record, index) => {
return <Select value={text != "-1" ? text : ""} optionFilterProp='name' onChange={(e) => this.onSelectChange(e, record, 'PLATFORM_TYPE', index)}>
{
enums && enums.CMEvaluateStatusEnum && enums.CMEvaluateStatusEnum.options ? enums.CMEvaluateStatusEnum.options.map(t => {
return <Option value={t.value}>{t.label}</Option>
}) : null
}
</Select>;
*/}
2025-11-13 17:53:20 +08:00
{/* <tr>
2025-08-25 10:08:30 +08:00
<td colSpan={4} rowSpan={1} >部门培训计划发起时间</td>
<td colSpan={20} rowSpan={1} >
<DatePicker
format={dateFormat}
value={data.DEP_TRAIN_PLAN_START_TIME ? moment(data.DEP_TRAIN_PLAN_START_TIME) : null}
onChange={value => {
let data = this.state.data;
data.DEP_TRAIN_PLAN_START_TIME = value;
this.setState(data)
}}
/>
</td>
</tr>
<tr>
<td colSpan={4} rowSpan={1} >部门培训计划截至时间</td>
<td colSpan={20} rowSpan={1} >
<DatePicker
format={dateFormat}
value={data.DEP_TRAIN_PLAN_END_TIME ? moment(data.DEP_TRAIN_PLAN_END_TIME) : null}
onChange={value => {
let data = this.state.data;
data.DEP_TRAIN_PLAN_END_TIME = value;
this.setState(data)
}}
/>
</td>
2025-11-13 17:53:20 +08:00
</tr> */}
2025-08-25 10:08:30 +08:00
</table>
</div>
</>
}
}
export default connect(({ login, app }) => ({ login, app }))(SEConfigPage)