mh-sms-web/src/components/CustomPages/BI/BI011TrainSafeAnalysis.js

209 lines
8.0 KiB
JavaScript
Raw Normal View History

2024-01-22 09:18:38 +08:00
import React, { useState, useEffect, useRef, Component } from 'react'
import { connect } from 'dva'
import { initFilter, addRuleAndGroups, guid, extendInclude, extendRule, extendOrder, extend, initQueryFilter } from "../../../utils/common"
import { Table, Row, Col, Button, Select, DatePicker, message } from 'antd';
import echarts from 'echarts';
import moment from 'moment'
const { Option } = Select;
class TrainSafeAnalysis extends React.Component {
constructor(props) {
super(props);
this.state = {
pagination: {},
retData: [],
totalUsers: 0,
totalActiveUsers: 0,
selectUser: "",
selectDepartment: "",
dates: [],
recordNums: [],
todayCount: 0,
NUM1: 0,
NUM2: 0,
NUM3: 0,
NUM4: 0,
NUM5: 0,
NUM6: 0,
NUM7: 0,
searchMonth: moment().format('YYYY-MM'),
showLoading: false
};
};
componentDidMount() {
this.state.columns1 = [
{
title: '序号',
render: (text, record, index) => `${index + 1}`
},
{
title: '课程名称',
dataIndex: 'NAME',
},
{
title: '培训起止时间',
dataIndex: 'TIMERANGE',
},
{
title: '应参训人数',
dataIndex: 'SHOULD_TRAINER',
},
{
title: '实际参训人数',
dataIndex: 'ACTUAL_TRAINER',
}, {
title: '参训率',
render: (text, record) => (<span>{((record.ACTUAL_TRAINER / record.SHOULD_TRAINER) * 100).toFixed(0) + "%"}</span>),
},
{
title: '考核方式',
dataIndex: 'METHOD',
},
{
title: '通过率',
dataIndex: 'PASS_RATE',
render: (text, record) => (<span>{(record.PASS_RATE * 100).toFixed(0) + "%"}</span>),
},
{
title: '效果评估(优良率)',
dataIndex: 'EFFORT_RATE',
render: (text, record) => (<span>{(record.EFFORT_RATE*1).toFixed(0) + "%"}</span>),
},
]
this.loadData(this.state.searchMonth);
};
loadData = (startTime) => {
const json = initFilter(this.props.login.OrgId);
this.state.showLoading = true;
json.Parameter1 = startTime;
this.props.dispatch({
type: 'app/getDataByPost',
url: 'BI/BIController/getSafeTrainData',
payload: json,
onlyData: false,
onComplete: (ret) => {
if (ret) {
this.state.showLoading = false;
this.state.NUM1 = ret.Data.NUM1;
this.state.NUM2 = ret.Data.NUM2;
this.state.NUM3 = ret.Data.NUM3;
this.state.NUM4 = ret.Data.NUM4;
this.state.NUM5 = ret.Data.NUM5;
this.state.NUM6 = ret.Data.NUM6;
this.state.NUM7 = ret.Data.NUM7;
this.state.retData = ret.Data.trainRecords;
this.chart1(ret.Data.dateCountModel);
}
}
})
}
chart1 = (ret) => {
this.state.recordNums = [];
this.state.dates = [];
for (let i = 0; i < ret.length; i++) {
this.state.recordNums.push(ret[i].COUNT);
this.state.dates.push(moment(ret[i].DATE).format('YYYY-MM'));
}
let chart1s = document.getElementById('chart1');
if (chart1s) {
let myChart = echarts.init(chart1s);
myChart.on('click', (params) => {
this.loadData(params.name);
});
myChart.setOption({
grid: {
left: '5%',
right: '5%',
},
legend: {
bottom: '0px'
},
title: {
text: "月度培训完成走势图",
left: 'center'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
},
},
xAxis: {
type: 'category',
data: this.state.dates,
axisLabel: {
showMaxLabel: true
}
},
yAxis: {
type: 'value',
},
series: [
{
name: '培训记录数',
data: this.state.recordNums,
type: 'line',
},
]
});
}
}
onChange = (type, value) => {
this.setState({
[type]: value
})
}
paginationConfig = {
pageSizeOptions: ['10', '20', '50'],
pageSize: 20,
showSizeChanger: true,
size: 'small',
}
render() {
return (
<div style={{ backgroundColor: 'white', width: '1200px', top: '0', bottom: '0', left: '0', right: '0', margin: 'auto', borderStyle: 'solid', borderColor: '#ccc', borderWidth: '1px', }}>
<h1 style={{ textAlign: "center", marginTop: '30px', fontWeight: 'bold' }}>安全教育与培训统计分析</h1>
<Row gutter={10} style={{ marginTop: "14px" }}>
<Col span={1}> </Col>
<Col span={3}>
{/* <Button style={{ width: "150px", height: "60px", borderRadius: '8px', border: '1px RGB(24, 149, 255) solid', margin: "10px" , boxShadow:"6px 0 10px rgba(0, 0, 0, 0.5)" }}>年度培训计划完成率<br></br><span style={{ fontWeight: "bold", fontSize: "20px", color: '#843C0C' }}>{this.state.NUM1}</span>%</Button> */}
<Button style={{ width: "110px", height: "60px", borderRadius: '8px', border: '1px RGB(24, 149, 255) solid', margin: "10px", boxShadow: "6px 0 10px rgba(0, 0, 0, 0.5)" }}>安全培训教育<br></br><span style={{ fontWeight: "bold", fontSize: "20px", color: '#843C0C' }}>{this.state.NUM2}</span>/</Button>
<Button style={{ width: "110px", height: "60px", borderRadius: '8px', border: '1px RGB(24, 149, 255) solid', margin: "10px", boxShadow: "6px 0 10px rgba(0, 0, 0, 0.5)" }}>三级安全教育<br></br><span style={{ fontWeight: "bold", fontSize: "20px", color: '#843C0C' }}>{this.state.NUM3}</span>/</Button>
{/* <Button style={{ width: "110px", height: "60px", borderRadius: '8px', border: '1px RGB(24, 149, 255) solid', margin: "10px" , boxShadow:"6px 0 10px rgba(0, 0, 0, 0.5)"}}>学时达标率<br></br><span style={{ fontWeight: "bold", fontSize: "20px", color: '#843C0C' }}>{this.state.NUM4}</span>%</Button> */}
{/* <Button style={{ width: "110px", height: "60px", borderRadius: '8px', border: '1px RGB(24, 149, 255) solid', margin: "10px" , boxShadow:"6px 0 10px rgba(0, 0, 0, 0.5)"}}>培训优良率<br></br><span style={{ fontWeight: "bold", fontSize: "20px", color: '#843C0C' }}>{this.state.NUM5}</span>%</Button> */}
{/* <Button style={{ width: "150px", height: "60px", borderRadius: '8px', border: '1px RGB(24, 149, 255) solid', margin: "10px" , boxShadow:"6px 0 10px rgba(0, 0, 0, 0.5)"}}>培训考核通过率<br></br><span style={{ fontWeight: "bold", fontSize: "20px", color: '#843C0C' }}>{this.state.NUM6}</span>%</Button> */}
<Button style={{ width: "110px", height: "60px", borderRadius: '8px', border: '1px RGB(24, 149, 255) solid', margin: "10px", boxShadow: "6px 0 10px rgba(0, 0, 0, 0.5)" }}>题库总条数<br></br><span style={{ fontWeight: "bold", fontSize: "20px", color: '#843C0C' }}>{this.state.NUM7}</span>/</Button>
</Col>
<Col span={19}>
<div className="dashboard-div-style" style={{ borderRadius: '10px', backgroundColor: 'white', boxShadow: '0px 0px 10px rgba(0,0,0,.15)' }}>
<div id="chart1" style={{ width: '100%', height: '350px' }}></div>
</div>
</Col>
<Col span={1}></Col>
</Row>
<hr style={{ border: '1px dashed #ccc', marginBottom: "20px", marginTop: "20px" }}></hr>
<Row gutter={10} style={{ marginTop: "14px" }}>
<Col span={1}></Col>
<Col span={22} style={{ height: '100%' }}>
<div className="dashboard-div-style" style={{ boxShadow: '0px 0px 10px rgba(0,0,0,.15)' }}>
<Table
dataSource={this.state.retData}
columns={this.state.columns1}
pagination={this.paginationConfig}
bordered
loading={this.state.showLoading}
size="small"
rowKey="1"
/>
</div>
</Col>
<Col span={1}></Col>
</Row>
<br />
</div>
)
}
}
export default connect(({ login, app }) => ({ login, app }))(TrainSafeAnalysis)