mh_jy_safe_web/src/components/CustomPages/BI/BI011FormRunAnalysis.js
2025-08-25 10:08:30 +08:00

1188 lines
32 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React from "react";
import { connect } from "dva";
import { initFilter, extendRule, extendOrder } from "../../../utils/common";
import { ChartPieShow, ChartBarShow } from "../../../utils/commonEcharsShow";
import {
Table,
Button,
Input,
Row,
Col,
Modal,
DatePicker,
Icon,
Progress,
Divider,
} from "antd";
import echarts from "echarts";
import styles from "../HI/StepForm1.css";
import moment from "moment";
import { T } from "antd/lib/upload/utils";
import FormPage from "../../FormPage";
class BI011FormRunAnalysis extends React.Component {
constructor(props) {
super(props);
this.state = {
selectStartTime: moment(this.getStartDate(), "YYYY-MM-DD"),
selectEndTime: moment(this.getEndDate(), "YYYY-MM-DD"),
visible: false,
loading: false,
noticeTitle: "",
tmpData: {},
tableKey: "1",
startTime: moment(new Date().setDate(1))
.subtract(5, "months")
.format("YYYY-MM-DD"),
endTime: moment(new Date()).format("YYYY-MM-DD"),
timeType: 5,
totalCount: 0,
finishCount: 0,
overtimeCount: 0,
unfinishCount: 0,
dtotalCount: 0,
dfinishCount: 0,
dovertimeCount: 0,
dunfinishCount: 0,
inputText: this.props.login.user.NAME,
drate: "0%",
dnormalRate: "0%",
weekColor: "black",
monthColor: "orange",
threeMonthColor: "black",
sixMonthColor: "black",
yearColor: "black",
retData: [],
detailData: [],
displayHr: "none",
displaydetail: "none",
columns: [
{
width: "150px",
title: "月份",
dataIndex: "MONTHStr",
key: "MONTHStr",
},
{
width: "100px",
title: "任务数",
dataIndex: "TOTAL_QTY",
key: "TOTAL_QTY",
},
{
width: "150px",
title: "完成率",
dataIndex: "FINISH_RATE",
key: "FINISH_RATE",
render: (text, record) => (
<Progress percent={record.FINISH_RATE.split("%")[0]} />
),
},
{
width: "150px",
title: "及时完成率",
dataIndex: "NORMAL_FINISH_RATE",
key: "NORMAL_FINISH_RATE",
render: (text, record) => (
<Progress
percent={record.NORMAL_FINISH_RATE.split("%")[0]}
strokeColor={{
from: "rgba(82, 196, 26)",
to: "rgba(82, 196, 26)",
}}
/>
),
},
],
detailColumns: [
{
width: "80px",
title: "序号",
render: (text, record, index) => `${index + 1}`,
},
{
width: "200px",
title: "登录时间",
dataIndex: "CREATE_TIME",
key: "CREATE_TIME",
},
{
width: "150px",
title: "登录设备",
dataIndex: "FROM",
key: "FROM",
},
{
// width: "60px",
title: "设备版本",
dataIndex: "VERSION",
key: "VERSION",
render: (text, record) => (
<div>{text && text.length > 30 ? text.substring(0, 30) : text}</div>
),
},
],
};
}
getStartDate = () => {
let date = new Date();
let y = date.getFullYear();
let m = date.getMonth() + 1;
let d = date.getDate();
// 当前日期
let nowDate =
y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d);
let pastDate = moment(nowDate).add(-180, "d").format("YYYY-MM-DD");
return pastDate;
};
getEndDate = () => {
let date = new Date();
let y = date.getFullYear();
let m = date.getMonth() + 1;
let d = date.getDate();
// 当前日期
let nowDate =
y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d);
let pastDate = moment(nowDate).format("YYYY-MM-DD");
return pastDate;
};
componentDidMount() {
this.loadData();
}
showEditModal = (departmentId, departmentName) => {
const newtmpData = {
data: {
id: departmentId,
name: departmentName,
onCancel: this.handleCancel,
tableKey: this.state.tableKey,
homeReload: true,
},
formCode: "BI007_RUNANALYSIS",
};
this.setState(
{
id: departmentId,
name: departmentName,
noticeTitle: departmentName + "安全生产标准化运行情况",
tmpData: newtmpData,
currActivatedMenu: "",
},
() =>
this.setState({
visible: true,
})
);
};
showFormModal = (mouldName) => {
const newtmpData = {
data: {
name: mouldName,
onCancel: this.handleCancel,
tableKey: this.state.tableKey,
homeReload: true,
},
formCode: "BI008_RUNANALYSIS",
};
this.setState(
{
name: mouldName,
noticeTitle: mouldName + "安全生产标准化运行情况",
tmpData: newtmpData,
currActivatedMenu: "",
},
() =>
this.setState({
visible: true,
})
);
};
//加载数据赋值
loadData = () => {
this.getMould(this.props.login.user.NAME);
};
//矿山
// ksRun = (data) => {
// if (data) {
// let month = [];
// let company = [];
// let department = [];
// data.forEach(item => {
// month.push(item.MONTHStr);
// company.push(item.FINISH_RATE);
// department.push(item.NORMAL_FINISH_RATE);
// })
// let myChart = echarts.init(document.getElementById('ksRun'));
// myChart.setOption({
// title: {
// text: "任务及时完成率近6个月",
// left: 'center',
// top:'2%'
// },
// tooltip: {
// trigger: 'axis',
// formatter: function (params) {
// let temp=''
// params.forEach(t=>{
// temp=temp+t.marker + t.seriesName +":"+t.value+"%"+'<br />';
// })
// return temp;
// }
// },
// legend: {
// // data: ['部门'],
// data: ['完成率', '及时完成率'],
// bottom: '5px'
// },
// grid: {
// left: '3%',
// right: '4%',
// top: '12%',
// containLabel: true
// },
// toolbox: {
// feature: {
// // saveAsImage: {}
// }
// },
// xAxis: {
// type: 'category',
// boundaryGap: false,
// data: month,
// axisLine: {
// show: false,
// // lineStyle: {
// // color: 'rgba(192, 192, 102)'
// // }
// },
// axisTick: {
// show: false
// },
// axisLabel: {
// color: '#000',
// rotate: 40,
// formatter: function (value) { // 自定义文字超出部分 ...
// if (value.length > 10) {
// return `${value.slice(0, 10)}...`;
// }
// return value;
// }
// }
// },
// yAxis: {
// axisLabel: {
// formatter: function (val) {
// return (val)+ '%';
// }
// },
// },
// series: [
// {
// name: '完成率',
// type: 'line',
// color: '#4b9bf3',
// data: company,
// smooth: true
// },
// {
// name: '及时完成率',
// type: 'line',
// color: '#FCD149',
// data: department,
// smooth: true
// },
// ]
// })
// }
// }
//矿山
ksRun = (data) => {
if (data) {
let month = [];
let company = [];
let department = [];
let totalCount = [];
data.forEach((item) => {
month.push(item.MONTHStr);
company.push(item.FINISH_RATE);
department.push(item.NORMAL_FINISH_RATE);
totalCount.push(item.TOTAL_QTY);
});
let myChart = echarts.init(document.getElementById("ksRun"));
myChart.setOption({
tooltip: {
trigger: "axis",
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
},
transitionDuration: 0,
formatter: function (params) {
return (
params[0].marker +
params[0].seriesName +
" : " +
params[0].value +
"</br>" +
params[1].marker +
params[1].seriesName +
" : " +
params[1].value +
"%" +
"</br>" +
params[2].marker +
params[2].seriesName +
" : " +
params[2].value +
"%"
);
},
},
title: {
text: "任务完成情况分析",
left: "center",
top: "5%",
},
legend: {
data: ["完成数", "完成率", "及时完成率"],
left: "center",
align: "left",
top: "15%",
textStyle: {
color: "#000",
},
itemWidth: 10,
itemHeight: 10,
// itemGap: 35,
},
grid: {
left: "3%",
right: "4%",
top: "27%",
bottom: "5%",
containLabel: true,
},
xAxis: {
type: "category",
data: month,
axisLabel: {
showMaxLabel: true,
},
},
yAxis: [
{
type: "value",
position: "left",
splitLine: {
show: true,
lineStyle: {
color: ["#f2f2f2"],
// opacity:0.2
// zlevel: -1,
},
},
axisLine: {
lineStyle: {
color: "#0c3b71",
},
},
axisLabel: {
color: "rgb(170,170,170)",
formatter: "{value} ",
},
},
{
type: "value",
position: "right",
splitLine: {
show: false,
lineStyle: {
color: ["#f2f2f2"],
},
},
axisLine: {
lineStyle: {
color: "#f2f2f2",
},
},
axisLabel: {
color: "rgb(170,170,170)",
formatter: "{value} %",
},
},
],
series: [
{
name: "完成数",
type: "bar",
color: "#72b85b",
data: totalCount,
barWidth: "20%",
barGap: "10%",
stack: null,
},
{
name: "完成率",
type: "line",
color: "#4b9bf3",
data: company,
yAxisIndex: 1,
smooth: true,
// zlevel:100,
},
{
name: "及时完成率",
type: "line",
color: "#FCD149",
data: department,
yAxisIndex: 1,
smooth: true,
// zlevel:100,
},
],
});
}
};
//走势图
chartLogin = (data) => {
let month = [];
let company = [];
data.forEach((item) => {
month.push(item.CREATE_TIME.slice(0, 10));
company.push(item.QTY);
});
let color = [
"#0090FF",
"#36CE9E",
"#FFC005",
"#FF515A",
"#8B5CFF",
"#00CA69",
];
const hexToRgba = (hex, opacity) => {
let rgbaColor = "";
let reg = /^#[\da-f]{6}$/i;
if (reg.test(hex)) {
rgbaColor = `rgba(${parseInt("0x" + hex.slice(1, 3))},${parseInt(
"0x" + hex.slice(3, 5)
)},${parseInt("0x" + hex.slice(5, 7))},${opacity})`;
}
return rgbaColor;
};
let myChart = echarts.init(document.getElementById("chartLogin"));
myChart.setOption({
color: color,
title: {
text: "近1个月登录次数走势图",
left: "center",
top: "5%",
},
dataZoom: [
{
show: true,
realtime: true,
start: 0,
end: 50,
height: 20,
showDetail: false,
bottom: 0,
fillerColor: hexToRgba(color[0], 0.3),
handleColor: hexToRgba(color[0], 1),
},
{
type: "inside",
realtime: true,
start: 0,
end: 50,
},
],
tooltip: {
trigger: "axis",
// formatter: function (params) {
// let temp=''
// params.forEach(t=>{
// temp=temp+t.seriesName +":"+t.value+"%"+'<br />';
// })
// return temp;
// }
},
legend: {
data: ["登录次数"],
top: "15%",
},
grid: {
left: "3%",
right: "4%",
top: "25%",
bottom: "8%",
containLabel: true,
},
toolbox: {
feature: {
// saveAsImage: {}
},
},
xAxis: {
type: "category",
boundaryGap: false,
data: month,
axisLabel: {
textStyle: {
color: "#333",
},
},
axisLine: {
lineStyle: {
color: "#D9D9D9",
},
},
},
yAxis: {
axisLabel: {
textStyle: {
color: "#666",
},
formatter: function (val) {
return val;
},
},
nameTextStyle: {
color: "#666",
fontSize: 12,
lineHeight: 40,
},
splitLine: {
lineStyle: {
type: "dashed",
color: "#E9E9E9",
},
},
axisLine: {
show: false,
},
axisTick: {
show: false,
},
},
series: [
{
name: "登录次数",
type: "line",
data: company,
smooth: true,
lineStyle: {
normal: {
color: color[0],
shadowBlur: 3,
shadowColor: hexToRgba(color[0], 0.5),
shadowOffsetY: 8,
},
},
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: hexToRgba(color[0], 0.3),
},
{
offset: 1,
color: hexToRgba(color[0], 0.1),
},
],
false
),
shadowColor: hexToRgba(color[0], 0.1),
shadowBlur: 10,
},
},
},
],
});
};
//(饼图)
chartGroupLogin = (data) => {
let riskLevel = [];
let showData = [];
let color = [
"#72b85b",
"#4b9bf3",
"#FFC000",
"#FFFF00",
"#00B0F0",
"#00B0C0",
];
data.forEach((item) => {
riskLevel.push(item.FROM);
showData.push({ value: item.QTY, name: item.FROM });
});
let riskLevels = document.getElementById("mainJobPie2");
if (riskLevels) {
let myChart = echarts.init(riskLevels);
myChart.setOption({
tooltip: {
trigger: "item",
//formatter: '{a} <br/>{b} : {c} ({d}%)'
// formatter: '{b} : {c} ({d}%)'
formatter: "{b} : {c}",
},
title: {
text: "APP、H5、PC近1个月登录情况",
left: "center",
top: "5%",
textStyle: {
fontSize: 14,
},
},
legend: {
bottom: 10,
left: "center",
orient: "horizontal",
// type:'scroll',
data: riskLevel,
},
series: [
{
name: "APP、H5、PC近1个月登录情况",
type: "pie",
radius: ["45%", "60%"],
center: ["50%", "45%"],
label: {
formatter: "{b}:{c}",
},
data: showData,
color: color,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
//shadowColor: 'rgba(0, 0, 0, 0.5)'
},
},
},
],
});
}
};
getMould = (inputText) => {
this.setState({ loading: true });
var orgId = this.props.login ? this.props.login.OrgId : "";
let startTime = this.state.selectStartTime.format("YYYY-MM-DD");
let endTime = this.state.selectEndTime.format("YYYY-MM-DD");
let json = initFilter(orgId, inputText, "", "", "", startTime, endTime);
this.props.dispatch({
type: "app/getDataByPost",
payload: json,
url: "BI/BIStatiscialAnalysisController/GetPersonAnalyze",
onComplete: (ret) => {
if (ret) {
this.setState({
retData: ret.groupData,
totalCount: ret.TotalCount,
finishCount: ret.doneCount,
overtimeCount: ret.timeOverCount,
unfinishCount: ret.unfinishCount,
dovertimeCount: ret.timeOverWaitCount,
loading: false,
});
this.ksRun(ret.groupDataLine);
} else {
this.setState({
retData: [],
totalCount: 0,
finishCount: 0,
overtimeCount: 0,
unfinishCount: 0,
dovertimeCount: 0,
loading: false,
});
}
},
});
this.getLogin(inputText);
};
getLogin = (inputText) => {
this.setState({ loading: true });
var orgId = this.props.login ? this.props.login.OrgId : "";
let json = initFilter(orgId, inputText);
this.props.dispatch({
type: "app/getDataByPost",
payload: json,
url: "BI/BIStatiscialAnalysisController/GetLoginInfos",
onComplete: (ret) => {
if (ret) {
this.setState({
detailData: ret.retDetailData,
loading: false,
});
this.chartLogin(ret.retChartData);
this.chartGroupLogin(ret.groupData);
}
},
});
};
closeModal = () => {
// 退出弹窗
this.clearData();
};
clearData = () => {
let newtmpData = { ...this.state.tmpData };
newtmpData["data"].id = "";
newtmpData["data"].homeReload = false;
newtmpData.formCode = "";
this.setState({
visible: false,
tmpData: newtmpData,
});
};
handleCancel = () => {
// 退出弹窗
this.clearData();
};
handleSearch = (evt) => {
const { value } = evt.target;
this.setState({ inputText: value ? value : this.props.login.user.NAME });
};
startChange = (value) => {
this.setState({
selectStartTime: value,
startTime: value.format("YYYY-MM-DD"),
});
};
endChange = (value) => {
this.setState({
selectEndTime: value,
endTime: value.format("YYYY-MM-DD"),
});
};
render() {
const {
startTime,
endTime,
finishCount,
overtimeCount,
totalCount,
unfinishCount,
inputText,
weekColor,
monthColor,
threeMonthColor,
sixMonthColor,
yearColor,
dovertimeCount,
} = this.state;
let allFinishRate =
totalCount === 0 || totalCount == undefined
? 0
: (((finishCount + overtimeCount) / totalCount) * 100).toFixed(1);
let finishRate =
totalCount === 0 || totalCount == undefined
? 0
: ((finishCount / totalCount) * 100).toFixed(1);
return (
<div>
{/* className='route-home' ,boxShadow:'inset 0 0 10px #ccc' */}
<div
style={{
backgroundColor: "white",
width: "1200px",
top: "0",
bottom: "0",
left: "0",
right: "0",
margin: "auto",
borderStyle: "solid",
borderColor: "#ccc",
borderWidth: "1px",
}}
>
<Modal
visible={this.state.visible}
title={this.state.noticeTitle}
maskClosable={false}
onCancel={this.handleCancel}
footer={null}
className="antd-modal-fullscreen"
closeModal={this.closeModal}
// forceRender={true}
>
<FormPage {...this.state.tmpData} />
</Modal>
<h1
style={{
textAlign: "center",
verticalAlign: "Bottom",
marginTop: "20px",
marginBottom: "20px",
fontWeight: "bold",
}}
>
任务完成情况统计分析(个人)
</h1>
<Row
style={{
fontSize: "15px",
marginTop: "10px",
// marginLeft: "30px",
margin: "0px 100px",
height: "35px",
display: "flex",
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center",
}}
>
<span
style={{
display: "flex",
flexDirection: "row",
alignItems: "center",
}}
>
<b>姓名</b>
<Input
onChange={this.handleSearch}
style={{ width: "150px" }}
defaultValue={this.props.login.user.NAME}
></Input>
</span>
<span
style={{
display: "flex",
flexDirection: "row",
alignItems: "center",
}}
>
<b>开始时间</b>
<DatePicker
style={{ width: "150px" }}
value={this.state.selectStartTime}
format="YYYY-MM-DD"
onChange={this.startChange}
/>
</span>
<span
style={{
display: "flex",
flexDirection: "row",
alignItems: "center",
}}
>
<b>结束时间</b>
<DatePicker
style={{ width: "150px" }}
value={this.state.selectEndTime}
format="YYYY-MM-DD"
onChange={this.endChange}
/>
</span>
<span style={{ width: "100px" }}>
<Button
onClick={() => this.getMould(inputText)}
style={{ width: "80px" }}
type="primary"
>
查询
</Button>
</span>
{/* <span style={{marginLeft:"30px",width:'100px'}}><b>统计区间:</b>{startTime} - {endTime}</span> */}
{/* <span style={{float:"right",marginRight:'30px'}}><Input onChange={this.handleSearch} style={{width:'150px',marginRight:'10px'}} defaultValue={this.props.login.user.NAME}></Input><Button onClick={() => this.getMould(inputText)} style={{width:'80px'}} type='primary'>查询</Button></span> */}
</Row>
{/* <hr style={{ width: "98%" }}></hr> */}
<br></br>
<div
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
marginTop: "10px",
// marginBottom: "20px",
}}
>
<div className={styles.menuPie}>
<li>
总任务数
<br />
<div className={styles.dataStyle}>
{totalCount ? totalCount : 0}
</div>
</li>
<Divider
type="vertical"
style={{ width: "1px", height: "70px", margin: "9px 0px" }}
/>
<li>
待办数
<br />
<div className={styles.dataStyle1}>
{unfinishCount ? unfinishCount : 0}
</div>
</li>
<Divider
type="vertical"
style={{ width: "1px", height: "70px", margin: "9px 0px" }}
/>
<li>
超时待办数
<br />
<div className={styles.dataStyle3}>
{dovertimeCount ? dovertimeCount : 0}
</div>
</li>
<Divider
type="vertical"
style={{ width: "1px", height: "70px", margin: "9px 0px" }}
/>
<li>
已办事项
<br />
<div className={styles.dataStyle2}>
{finishCount + overtimeCount
? finishCount + overtimeCount
: 0}
</div>
{/* <a href="#" style={{ color: "red" }}> */}
{/* </a> */}
</li>
<Divider
type="vertical"
style={{ width: "1px", height: "70px", margin: "9px 0px" }}
/>
<li>
完成率
<br />
<div className={styles.dataStyle3}>
{allFinishRate ? allFinishRate : 0}%
</div>
{/* <a href="#" style={{ color: "red" }}> */}
{/* </a> */}
</li>
<Divider
type="vertical"
style={{ width: "1px", height: "70px", margin: "9px 0px" }}
/>
<li>
及时完成率
<br />
<div className={styles.dataStyle3}>
{finishRate ? finishRate : 0}%
</div>
</li>
</div>
</div>
{/* <hr style={{border:'1px dashed #ccc',marginBottom:"20px",marginTop:"20px"}}></hr> */}
<Row
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
marginTop: "20px",
}}
>
<Col
span={24}
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
width: "1100px",
flexDirection: "column",
}}
>
{/* <h2 style={{textAlign:'center',fontWeight:'bold'}}>任务及时完成率近12个月</h2> */}
<div
id="ksRun"
style={{
width: "100%",
height: "350px",
marginLeft: "20px",
marginRight: "30px",
backgroundColor: "white",
borderStyle: "solid",
borderColor: "#ccc",
borderWidth: "1px",
}}
></div>
<br></br>
<span style={{ textAlign: "center", width: "100%" }}>
* 统计时间{moment(new Date()).format("YYYY-MM-DD HH:mm:ss")}
<br></br>
<br></br>
</span>
</Col>
</Row>
<Row
style={{
marginTop: "10px",
display: "flex",
alignItems: "center",
justifyContent: "center",
}}
>
<Col
span={24}
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
width: "1100px",
}}
>
{/* <h2 style={{textAlign:'left',fontWeight:'bold',marginLeft:"30px"}}><Icon type="appstore"/> 部门统计分析</h2> */}
<Table
style={{
width: "100%",
textAlign: "center",
marginBottom: "30px",
}}
// scroll={{ y: 400 }}
dataSource={this.state.retData}
columns={this.state.columns}
pagination={false}
loading={false}
size="small"
bordered
/>
</Col>
</Row>
<hr style={{ width: "98%" }}></hr>
<Row
style={{
marginTop: "20px",
display: "flex",
alignItems: "center",
justifyContent: "center",
}}
>
<Col
span={24}
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
width: "1100px",
}}
>
<Col
span={6}
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
flexDirection: "column",
}}
>
{/* <h2
style={{
textAlign: "left",
fontWeight: "bold",
marginLeft: "30px",
}}
>
<Icon type="appstore" /> APP、H5、PC近1个月登录次数
</h2> */}
<div
id="mainJobPie2"
style={{
width: "100%",
height: "350px",
backgroundColor: "white",
borderStyle: "solid",
borderColor: "#ccc",
borderWidth: "1px",
}}
></div>
</Col>
<Col span={1}></Col>
<Col
span={17}
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
// width: "1100px",
}}
>
<div
id="chartLogin"
style={{
width: "100%",
height: "350px",
backgroundColor: "white",
borderStyle: "solid",
borderColor: "#ccc",
borderWidth: "1px",
}}
></div>
</Col>
</Col>
{/* <h2
style={{
textAlign: "left",
fontWeight: "bold",
marginLeft: "30px",
}}
>
<Icon type="appstore" /> 近1个月登录次数走势图
</h2> */}
</Row>
<Row
style={{
marginTop: "20px",
display: "flex",
alignItems: "center",
justifyContent: "center",
}}
>
<Col
span={24}
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
flexDirection: "column",
width: "1100px",
}}
>
<h2
style={{
textAlign: "left",
fontWeight: "bold",
}}
>
<Icon type="appstore" /> 近30次登录记录
</h2>
<Table
style={{
width: "100%",
textAlign: "center",
marginBottom: "30px",
}}
// scroll={{ y: 400 }}
dataSource={this.state.detailData}
columns={this.state.detailColumns}
pagination={false}
loading={false}
size="small"
bordered
/>
</Col>
</Row>
</div>
</div>
);
}
}
export default connect(({ login, app, loading }) => ({ login, app, loading }))(
BI011FormRunAnalysis
);