1435 lines
50 KiB
JavaScript
1435 lines
50 KiB
JavaScript
import React from "react";
|
||
import { connect } from "dva";
|
||
import { initFilter, extendRule, extendOrder } from "../../../utils/common";
|
||
import { ChartPieShow, ChartBarShow } from "../../../utils/commonEcharsShow";
|
||
import {
|
||
Table,
|
||
Button,
|
||
Menu,
|
||
Row,
|
||
Col,
|
||
Modal,
|
||
Icon,
|
||
Divider,
|
||
Alert,
|
||
Dropdown,
|
||
Spin,
|
||
Empty,
|
||
} from "antd";
|
||
import echarts from "echarts";
|
||
import styles from "../HI/StepForm.css";
|
||
import moment from "moment";
|
||
import { T } from "antd/lib/upload/utils";
|
||
import FormPage from "../../FormPage";
|
||
import SubMenu from "antd/lib/menu/SubMenu";
|
||
import MenuItem from "antd/lib/menu/MenuItem";
|
||
|
||
class BI021DepartmentAnalysis extends React.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
this.state = {
|
||
totalAnalysis: false,
|
||
totalAnalysisData: [],
|
||
departmentAnalysisData: [],
|
||
menucode: "",
|
||
empty: false,
|
||
emptyAsc: false,
|
||
emptyDesc: false,
|
||
columns: [
|
||
{
|
||
width: "100px",
|
||
title: "任务名称",
|
||
dataIndex: "NOTICE_TITLE",
|
||
key: "NOTICE_TITLE",
|
||
},
|
||
{
|
||
width: "50px",
|
||
title: "代办人",
|
||
dataIndex: "USER_NAME",
|
||
key: "USER_NAME",
|
||
},
|
||
{
|
||
width: "50px",
|
||
title: "开始时间",
|
||
dataIndex: "TASK_STARTDT",
|
||
key: "TASK_STARTDT",
|
||
},
|
||
{
|
||
width: "50px",
|
||
title: "结束时间",
|
||
dataIndex: "TASK_ENDDT",
|
||
key: "TASK_ENDDT",
|
||
},
|
||
],
|
||
menuorg: {},
|
||
timePick: "2023",
|
||
timeArea: ["2022", "2023", "2024"],
|
||
dropVisible: false,
|
||
chooseId: "",
|
||
loading: false,
|
||
loadAll: false,
|
||
userCount: 0,
|
||
slectIndex: "",
|
||
};
|
||
}
|
||
|
||
componentDidMount() {
|
||
// this.loadData();
|
||
this.loadTree();
|
||
this.loadChart();
|
||
this.loadAsc();
|
||
this.loadDesc();
|
||
this.setState({
|
||
timePick: new Date().getFullYear(),
|
||
timeArea: [
|
||
new Date().getFullYear() - 2,
|
||
new Date().getFullYear() - 1,
|
||
new Date().getFullYear(),
|
||
],
|
||
});
|
||
}
|
||
showModalVisi = () => {
|
||
this.setState({
|
||
totalAnalysis: true,
|
||
});
|
||
};
|
||
loadTree = () => {
|
||
let json = initFilter(this.props.login.OrgId);
|
||
this.props.dispatch({
|
||
type: "app/getDataByPost",
|
||
url: "BI/BIStatiscialAnalysisController/GetDepartmentEntities",
|
||
payload: json,
|
||
onlyData: false,
|
||
onComplete: (data) => {
|
||
if (data && data.IsSuccessful) {
|
||
this.setState(
|
||
{
|
||
menuorg: data.Data,
|
||
},
|
||
() => {
|
||
this.state.menuorg.isUp = true;
|
||
this.state.menuorg.deptInfos.map((item, index) => {
|
||
item.isUp = false;
|
||
if (item.deptInfos && item.deptInfos.length > 0) {
|
||
item.deptInfos.map((item1, index1) => {
|
||
item1.isUp = false;
|
||
if (item1.deptInfos && item1.deptInfos.length > 0) {
|
||
item1.deptInfos.map((item2, index2) => {
|
||
item2.isUp = false;
|
||
if (item2.deptInfos && item2.deptInfos.length > 0) {
|
||
item2.deptInfos.map((item3, index3) => {
|
||
item3.isUp = false;
|
||
if (item3.deptInfos && item3.deptInfos.length > 0) {
|
||
item3.deptInfos.map((item4, index4) => {
|
||
item4.isUp = false;
|
||
if (
|
||
item4.deptInfos &&
|
||
item4.deptInfos.length > 0
|
||
) {
|
||
item4.deptInfos.map((item5, index5) => {
|
||
item5.isUp = false;
|
||
});
|
||
}
|
||
});
|
||
}
|
||
});
|
||
}
|
||
});
|
||
}
|
||
});
|
||
}
|
||
});
|
||
this.setState(
|
||
{
|
||
menucode: this.state.menuorg.departmentName,
|
||
chooseId: this.state.menuorg.departmentId,
|
||
},
|
||
() => {
|
||
this.loadData();
|
||
this.clickTab(this.state.menuorg.departmentId);
|
||
}
|
||
);
|
||
}
|
||
);
|
||
}
|
||
},
|
||
});
|
||
};
|
||
loadData = () => {
|
||
this.setState({
|
||
loading: true,
|
||
});
|
||
let json = initFilter(this.props.login.OrgId);
|
||
json.Keyword = this.state.chooseId;
|
||
json.Parameter1 = this.state.timePick;
|
||
this.props.dispatch({
|
||
type: "app/getDataByPost",
|
||
url: "BI/BIStatiscialAnalysisController/GetDepartmentAnalysis",
|
||
payload: json,
|
||
onlyData: false,
|
||
onComplete: (data) => {
|
||
this.setState({
|
||
loading: false,
|
||
});
|
||
if (data && data.IsSuccessful) {
|
||
this.setState(
|
||
{
|
||
totalAnalysisData: data.Data.UnfinishData,
|
||
departmentAnalysisData: data.Data,
|
||
loadAll: data.Data.UserCount > 20 ? false : true,
|
||
userCount: data.Data.UserCount,
|
||
},
|
||
() => {
|
||
this.loadChart();
|
||
if (data.Data.UserCount >= 20) {
|
||
this.loadAsc();
|
||
this.loadDesc();
|
||
} else {
|
||
this.loadAsc();
|
||
}
|
||
}
|
||
);
|
||
}
|
||
},
|
||
});
|
||
};
|
||
loadChart = () => {
|
||
let xData = [];
|
||
let sData1 = [];
|
||
let sData2 = [];
|
||
if (
|
||
this.state.departmentAnalysisData.LineChart &&
|
||
this.state.departmentAnalysisData.LineChart.length > 0
|
||
) {
|
||
this.state.departmentAnalysisData.LineChart.map((item, index) => {
|
||
xData.push(item.month);
|
||
sData1.push(Number(item.teamDoneRate).toFixed(2));
|
||
sData2.push(Number(item.teamOverDoneRate).toFixed(2));
|
||
});
|
||
this.setState(
|
||
{
|
||
empty: false,
|
||
},
|
||
() => {
|
||
this.initChart(xData, sData1, sData2);
|
||
}
|
||
);
|
||
} else {
|
||
this.setState({
|
||
empty: true,
|
||
});
|
||
}
|
||
};
|
||
initChart = (xData, sData1, sData2) => {
|
||
let trendYears = document.getElementById("trendYear");
|
||
if (trendYears) {
|
||
document
|
||
.getElementById("trendYear")
|
||
.removeAttribute("_echarts_instance_");
|
||
let myChart = echarts.init(trendYears);
|
||
myChart.setOption(
|
||
{
|
||
title: {
|
||
text: "完成率走势图",
|
||
left: "center",
|
||
},
|
||
tooltip: {
|
||
trigger: "axis",
|
||
formatter: (params) => {
|
||
return (
|
||
params[0].name +
|
||
"<br>" +
|
||
params[0].marker +
|
||
" " +
|
||
params[0].seriesName +
|
||
": " +
|
||
params[0].data +
|
||
" %" +
|
||
"<br>" +
|
||
params[1].marker +
|
||
" " +
|
||
params[1].seriesName +
|
||
": " +
|
||
params[1].data +
|
||
" %" +
|
||
"<br>"
|
||
);
|
||
},
|
||
},
|
||
grid: {
|
||
containLabel: true,
|
||
left: "2%",
|
||
right: "3%",
|
||
bottom: 0,
|
||
top: "10%",
|
||
},
|
||
xAxis: {
|
||
type: "category",
|
||
boundaryGap: false, //坐标轴两边留白
|
||
data: xData,
|
||
axisLabel: {
|
||
//坐标轴刻度标签的相关设置。
|
||
interval: 0, //设置为 1,表示『隔一个标签显示一个标签』
|
||
// margin:15,
|
||
textStyle: {
|
||
color: "#1B253A",
|
||
fontStyle: "normal",
|
||
fontFamily: "微软雅黑",
|
||
fontSize: 12,
|
||
},
|
||
|
||
//rotate:50,
|
||
},
|
||
axisTick: {
|
||
//坐标轴刻度相关设置。
|
||
show: false,
|
||
},
|
||
axisLine: {
|
||
//坐标轴轴线相关设置
|
||
lineStyle: {
|
||
color: "#E5E9ED",
|
||
// opacity:0.2
|
||
},
|
||
},
|
||
splitLine: {
|
||
//坐标轴在 grid 区域中的分隔线。
|
||
show: true,
|
||
lineStyle: {
|
||
color: "#E5E9ED",
|
||
// opacity:0.1
|
||
},
|
||
},
|
||
},
|
||
yAxis: [
|
||
{
|
||
type: "value",
|
||
splitNumber: 5,
|
||
axisLabel: {
|
||
textStyle: {
|
||
color: "#a8aab0",
|
||
fontStyle: "normal",
|
||
fontFamily: "微软雅黑",
|
||
fontSize: 12,
|
||
},
|
||
formatter: "{value}%",
|
||
},
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
splitLine: {
|
||
show: true,
|
||
lineStyle: {
|
||
color: "#E5E9ED",
|
||
// opacity:0.1
|
||
},
|
||
},
|
||
},
|
||
],
|
||
series: [
|
||
{
|
||
name: "完成率",
|
||
type: "line",
|
||
smooth: true,
|
||
itemStyle: {
|
||
normal: {
|
||
color: "#3A84FF",
|
||
lineStyle: {
|
||
color: "#3A84FF",
|
||
width: 1,
|
||
},
|
||
areaStyle: {
|
||
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
|
||
{
|
||
offset: 0,
|
||
color: "rgba(58,132,255,0)",
|
||
},
|
||
{
|
||
offset: 1,
|
||
color: "rgba(58,132,255,0.35)",
|
||
},
|
||
]),
|
||
},
|
||
},
|
||
},
|
||
data: sData1,
|
||
},
|
||
{
|
||
name: "及时完成率",
|
||
type: "line",
|
||
smooth: true,
|
||
itemStyle: {
|
||
normal: {
|
||
color: "#FA5071",
|
||
lineStyle: {
|
||
color: "#FA5071",
|
||
width: 1,
|
||
},
|
||
areaStyle: {
|
||
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
|
||
{
|
||
offset: 0,
|
||
color: "rgba(236,28,36,0)",
|
||
},
|
||
{
|
||
offset: 1,
|
||
color: "rgba(236,28,36,0.35)",
|
||
},
|
||
]),
|
||
},
|
||
},
|
||
},
|
||
data: sData2,
|
||
},
|
||
],
|
||
},
|
||
true
|
||
);
|
||
}
|
||
};
|
||
loadAsc = () => {
|
||
let xData = [];
|
||
let sData1 = [];
|
||
if (
|
||
this.state.departmentAnalysisData.BarAsc &&
|
||
this.state.departmentAnalysisData.BarAsc.length > 0
|
||
) {
|
||
this.state.departmentAnalysisData.BarAsc.map((item, index) => {
|
||
xData.push(item.name);
|
||
sData1.push(Number(item.teamOverDoneRate).toFixed(2));
|
||
});
|
||
this.setState(
|
||
{
|
||
emptyAsc: false,
|
||
},
|
||
() => {
|
||
this.loadCompleteAfter(xData, sData1);
|
||
}
|
||
);
|
||
} else {
|
||
this.setState({
|
||
emptyAsc: true,
|
||
});
|
||
}
|
||
};
|
||
loadCompleteAfter = (xData, sData1) => {
|
||
let completeAfters = document.getElementById("completeAfter");
|
||
if (completeAfters) {
|
||
document
|
||
.getElementById("completeAfter")
|
||
.removeAttribute("_echarts_instance_");
|
||
let myChart = echarts.init(completeAfters);
|
||
myChart.setOption(
|
||
{
|
||
tooltip: {
|
||
trigger: "axis",
|
||
axisPointer: {
|
||
// 坐标轴指示器,坐标轴触发有效
|
||
type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
|
||
shadowStyle: {
|
||
color: "rgba(255,255,255,0.15)",
|
||
// width: '0.5'
|
||
},
|
||
},
|
||
formatter: function (param) {
|
||
return (
|
||
param[0].name +
|
||
"<br>" +
|
||
param[0].marker +
|
||
" " +
|
||
param[0].seriesName +
|
||
":" +
|
||
param[0].value +
|
||
"%"
|
||
);
|
||
},
|
||
},
|
||
|
||
grid: {
|
||
top: "2%",
|
||
bottom: -15,
|
||
right: "5%",
|
||
left: "5%",
|
||
containLabel: true,
|
||
},
|
||
xAxis: {
|
||
show: false,
|
||
},
|
||
yAxis: [
|
||
{
|
||
triggerEvent: true,
|
||
show: true,
|
||
inverse: true,
|
||
data: xData,
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
splitLine: {
|
||
show: false,
|
||
},
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
axisLabel: {
|
||
interval: 0,
|
||
color: "#666",
|
||
align: "right",
|
||
margin: 5,
|
||
fontSize: 13,
|
||
},
|
||
},
|
||
{
|
||
triggerEvent: true,
|
||
show: true,
|
||
inverse: true,
|
||
data: sData1,
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
splitLine: {
|
||
show: false,
|
||
},
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
axisLabel: {
|
||
interval: 0,
|
||
color: "#666",
|
||
align: "left",
|
||
margin: 20,
|
||
fontSize: 12,
|
||
formatter: function (value) {
|
||
return value + "%";
|
||
},
|
||
},
|
||
},
|
||
],
|
||
series: [
|
||
{
|
||
name: "及时完成率",
|
||
type: "bar",
|
||
yAxisIndex: 0,
|
||
zlevel: 1,
|
||
data: sData1,
|
||
barWidth: 10,
|
||
showBackground: true,
|
||
backgroundStyle: {
|
||
color: "#EAF6FE",
|
||
barBorderRadius: 30,
|
||
},
|
||
itemStyle: {
|
||
color: "#1990FF",
|
||
barBorderRadius: 30,
|
||
},
|
||
formatter: "{value}%",
|
||
},
|
||
],
|
||
},
|
||
true
|
||
);
|
||
}
|
||
};
|
||
loadDesc = () => {
|
||
let xData = [];
|
||
let sData1 = [];
|
||
if (
|
||
this.state.departmentAnalysisData.BarDesc &&
|
||
this.state.departmentAnalysisData.BarDesc.length > 0
|
||
) {
|
||
this.state.departmentAnalysisData.BarDesc.map((item, index) => {
|
||
xData.push(item.name);
|
||
sData1.push(Number(item.teamOverDoneRate).toFixed(2));
|
||
});
|
||
this.setState(
|
||
{
|
||
emptyDesc: false,
|
||
},
|
||
() => {
|
||
this.loadCompleteBefore(xData, sData1);
|
||
}
|
||
);
|
||
} else {
|
||
this.setState({
|
||
emptyDesc: true,
|
||
});
|
||
}
|
||
};
|
||
loadCompleteBefore = (xData, sData1) => {
|
||
let completeBefores = document.getElementById("completeBefore");
|
||
if (completeBefores) {
|
||
document
|
||
.getElementById("completeBefore")
|
||
.removeAttribute("_echarts_instance_");
|
||
let myChart = echarts.init(completeBefores);
|
||
myChart.setOption(
|
||
{
|
||
tooltip: {
|
||
trigger: "axis",
|
||
axisPointer: {
|
||
// 坐标轴指示器,坐标轴触发有效
|
||
type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
|
||
shadowStyle: {
|
||
color: "rgba(255,255,255,0.15)",
|
||
// width: '0.5'
|
||
},
|
||
},
|
||
formatter: function (param) {
|
||
return (
|
||
param[0].name +
|
||
"<br>" +
|
||
param[0].marker +
|
||
" " +
|
||
param[0].seriesName +
|
||
":" +
|
||
param[0].value +
|
||
"%"
|
||
);
|
||
},
|
||
},
|
||
grid: {
|
||
top: "2%",
|
||
bottom: -15,
|
||
right: "5%",
|
||
left: "5%",
|
||
containLabel: true,
|
||
},
|
||
xAxis: {
|
||
show: false,
|
||
},
|
||
yAxis: [
|
||
{
|
||
triggerEvent: true,
|
||
show: true,
|
||
inverse: true,
|
||
data: xData,
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
splitLine: {
|
||
show: false,
|
||
},
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
axisLabel: {
|
||
interval: 0,
|
||
// color: "#666",
|
||
align: "right",
|
||
margin: 5,
|
||
fontSize: 13,
|
||
},
|
||
},
|
||
{
|
||
triggerEvent: true,
|
||
show: true,
|
||
inverse: true,
|
||
data: sData1,
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
splitLine: {
|
||
show: false,
|
||
},
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
axisLabel: {
|
||
interval: 0,
|
||
color: "#666",
|
||
align: "left",
|
||
margin: 20,
|
||
fontSize: 12,
|
||
formatter: function (value) {
|
||
return value + "%";
|
||
},
|
||
},
|
||
},
|
||
],
|
||
series: [
|
||
{
|
||
name: "及时完成率",
|
||
type: "bar",
|
||
yAxisIndex: 0,
|
||
zlevel: 1,
|
||
data: sData1,
|
||
barWidth: 10,
|
||
showBackground: true,
|
||
backgroundStyle: {
|
||
color: "#EAF6FE",
|
||
barBorderRadius: 30,
|
||
},
|
||
itemStyle: {
|
||
color: "#1990FF",
|
||
barBorderRadius: 30,
|
||
},
|
||
formatter: "{value}%",
|
||
},
|
||
],
|
||
},
|
||
true
|
||
);
|
||
}
|
||
};
|
||
chooseName = (e, i) => {
|
||
this.setState(
|
||
{
|
||
menucode: e,
|
||
chooseId: i,
|
||
},
|
||
() => {
|
||
this.loadData();
|
||
}
|
||
);
|
||
};
|
||
oneTap = () => {
|
||
this.state.menuorg.isUp = !this.state.menuorg.isUp;
|
||
this.setState({
|
||
menuorg: this.state.menuorg,
|
||
});
|
||
};
|
||
twoTap = (itemid) => {
|
||
this.state.menuorg.deptInfos &&
|
||
this.state.menuorg.deptInfos.map((item) => {
|
||
if (item.departmentId == itemid) {
|
||
item.isUp = !item.isUp;
|
||
}
|
||
});
|
||
this.setState({
|
||
menuorg: this.state.menuorg,
|
||
});
|
||
};
|
||
threeTap = (itemid) => {
|
||
this.state.menuorg.deptInfos &&
|
||
this.state.menuorg.deptInfos.map((item) => {
|
||
item.deptInfos &&
|
||
item.deptInfos.map((item1) => {
|
||
if (item1.departmentId == itemid) {
|
||
item1.isUp = !item1.isUp;
|
||
}
|
||
});
|
||
});
|
||
this.setState({
|
||
menuorg: this.state.menuorg,
|
||
});
|
||
};
|
||
handleClickTime = (e) => {
|
||
this.setState(
|
||
{
|
||
timePick: e.item.props.children,
|
||
dropVisible: !this.state.dropVisible,
|
||
},
|
||
() => {
|
||
this.loadData();
|
||
}
|
||
);
|
||
};
|
||
changeVisible = () => {
|
||
this.setState({
|
||
dropVisible: !this.state.dropVisible,
|
||
});
|
||
};
|
||
clearTotalAnalysisData = () => {
|
||
this.setState({
|
||
totalAnalysis: false,
|
||
});
|
||
};
|
||
clickTab = (index) => {
|
||
this.state.slectIndex = index;
|
||
};
|
||
render() {
|
||
return (
|
||
<div>
|
||
{/* className='route-home' ,boxShadow:'inset 0 0 10px #ccc' */}
|
||
<Spin spinning={this.state.loading} delay={500} className={styles.wrapperSpin}>
|
||
<div
|
||
style={{
|
||
backgroundColor: "white",
|
||
width: "1200px",
|
||
height: "950px",
|
||
top: "0",
|
||
bottom: "0",
|
||
left: "0",
|
||
right: "0",
|
||
margin: "auto",
|
||
borderStyle: "solid",
|
||
borderColor: "#ccc",
|
||
borderWidth: "1px",
|
||
}}
|
||
>
|
||
<Modal
|
||
visible={this.state.totalAnalysis}
|
||
title="未完成清单"
|
||
maskClosable={false}
|
||
onCancel={this.clearTotalAnalysisData}
|
||
footer={null}
|
||
// className="antd-modal-fullscreen"
|
||
closeModal={this.clearTotalAnalysisData}
|
||
width="900px"
|
||
>
|
||
<Table
|
||
dataSource={this.state.totalAnalysisData}
|
||
columns={this.state.columns}
|
||
pagination={true}
|
||
bordered
|
||
loading={this.state.showLoading}
|
||
size="small"
|
||
/>
|
||
</Modal>
|
||
|
||
<h1
|
||
style={{
|
||
textAlign: "center",
|
||
marginTop: "30px",
|
||
fontWeight: "bold",
|
||
// marginBottom:'20px'
|
||
paddingBottom: "20px",
|
||
}}
|
||
>
|
||
组织任务完成情况统计
|
||
</h1>
|
||
<Row style={{ marginTop: "10px", padding: "0px 40px" }}>
|
||
{/* <Col span={1}></Col> */}
|
||
<Col span={6}>
|
||
<div
|
||
style={{
|
||
// width: "256px",
|
||
fontSize: "14px",
|
||
color: "rgba(0,0,0,0.65)",
|
||
backgroundColor: "#fff",
|
||
transition: "background 0.3s,width 0.2s",
|
||
zoom: "1",
|
||
cursor: "pointer",
|
||
}}
|
||
>
|
||
<div
|
||
style={{
|
||
marginBottom: "20px",
|
||
overflowY: "auto",
|
||
height: "830px",
|
||
borderRadius: "5px",
|
||
// border: "1px solid #e8e8e8",
|
||
boxShadow: "0 0px 4px rgba(0,0,0,0.15)",
|
||
}}
|
||
className={styles.scrolltyle}
|
||
>
|
||
<div
|
||
style={{
|
||
// paddingLeft: "24px",
|
||
lineHeight: "30px",
|
||
height: "35px",
|
||
display: "flex",
|
||
alignItems: "center",
|
||
justifyContent: "space-between",
|
||
margin: "20px 0px 4px 0px",
|
||
}}
|
||
className={
|
||
this.state.slectIndex == this.state.menuorg.departmentId
|
||
? styles.slideMenuActive
|
||
: styles.slideMenu
|
||
}
|
||
>
|
||
<div
|
||
className={styles.slideMenuName}
|
||
style={{ paddingLeft: "24px" }}
|
||
onClick={() => {
|
||
this.chooseName(
|
||
this.state.menuorg.departmentName,
|
||
this.state.menuorg.departmentId
|
||
);
|
||
this.clickTab(this.state.menuorg.departmentId);
|
||
}}
|
||
>
|
||
{this.state.menuorg.departmentName}
|
||
</div>
|
||
<div
|
||
onClick={() =>
|
||
this.oneTap()
|
||
}
|
||
style={{ padding: "10px 16px" }}
|
||
>
|
||
{this.state.menuorg.isUp == false ? (
|
||
<Icon type="down" style={{ fontSize: "10px" }}></Icon>
|
||
) : (
|
||
<Icon type="up" style={{ fontSize: "10px" }}></Icon>
|
||
)}
|
||
</div>
|
||
</div>
|
||
{this.state.menuorg.isUp ? (
|
||
<div>
|
||
{this.state.menuorg.deptInfos &&
|
||
this.state.menuorg.deptInfos.map((menu1, index1) => {
|
||
return (
|
||
<div>
|
||
<div
|
||
style={{
|
||
lineHeight: "20px",
|
||
height: "30px",
|
||
display: "flex",
|
||
alignItems: "center",
|
||
justifyContent: "space-between",
|
||
margin: "4px 0px",
|
||
}}
|
||
className={
|
||
this.state.slectIndex == menu1.departmentId
|
||
? styles.slideMenuActive
|
||
: styles.slideMenu
|
||
}
|
||
>
|
||
<div
|
||
className={styles.slideMenuName}
|
||
style={{ paddingLeft: "48px" }}
|
||
onClick={() => {
|
||
this.chooseName(
|
||
menu1.departmentName,
|
||
menu1.departmentId
|
||
);
|
||
this.clickTab(menu1.departmentId);
|
||
}}
|
||
>
|
||
{menu1.departmentName}
|
||
</div>
|
||
<div
|
||
onClick={() =>
|
||
this.twoTap(menu1.departmentId)
|
||
}
|
||
style={{ padding: "10px 16px" }}
|
||
>
|
||
{menu1.deptInfos &&
|
||
menu1.deptInfos.length > 0 ? (
|
||
<div>
|
||
{menu1.isUp == false ? (
|
||
<Icon
|
||
type="down"
|
||
style={{ fontSize: "10px" }}
|
||
></Icon>
|
||
) : (
|
||
<Icon
|
||
type="up"
|
||
style={{ fontSize: "10px" }}
|
||
></Icon>
|
||
)}
|
||
</div>
|
||
) : (
|
||
<div></div>
|
||
)}
|
||
</div>
|
||
</div>
|
||
{menu1.isUp ? (
|
||
<div>
|
||
{menu1.deptInfos &&
|
||
menu1.deptInfos.map((menu2, index2) => {
|
||
return (
|
||
<div>
|
||
<div
|
||
style={{
|
||
lineHeight: "20px",
|
||
height: "30px",
|
||
display: "flex",
|
||
alignItems: "center",
|
||
justifyContent: "space-between",
|
||
margin: "4px 0px",
|
||
}}
|
||
className={
|
||
this.state.slectIndex ==
|
||
menu2.departmentId
|
||
? styles.slideMenuActive
|
||
: styles.slideMenu
|
||
}
|
||
>
|
||
<div
|
||
className={styles.slideMenuName}
|
||
style={{ paddingLeft: "72px" }}
|
||
onClick={() => {
|
||
this.chooseName(
|
||
menu2.departmentName,
|
||
menu2.departmentId
|
||
);
|
||
this.clickTab(
|
||
menu2.departmentId
|
||
);
|
||
}}
|
||
>
|
||
{menu2.departmentName}
|
||
</div>
|
||
{menu2.deptInfos &&
|
||
menu2.deptInfos.length > 0 ? (
|
||
<div
|
||
onClick={() =>
|
||
this.threeTap(
|
||
menu2.departmentId
|
||
)
|
||
}
|
||
style={{
|
||
padding: "10px 16px",
|
||
}}
|
||
>
|
||
{menu2.deptInfos &&
|
||
menu2.deptInfos.length > 0 ? (
|
||
<div>
|
||
{menu2.isUp == false ? (
|
||
<Icon
|
||
type="down"
|
||
style={{
|
||
fontSize: "10px",
|
||
}}
|
||
></Icon>
|
||
) : (
|
||
<Icon
|
||
type="up"
|
||
style={{
|
||
fontSize: "10px",
|
||
}}
|
||
></Icon>
|
||
)}
|
||
</div>
|
||
) : (
|
||
<div></div>
|
||
)}
|
||
</div>
|
||
) : (
|
||
<div></div>
|
||
)}
|
||
</div>
|
||
{menu2.isUp ? (
|
||
<div>
|
||
{menu2.deptInfos &&
|
||
menu2.deptInfos.map(
|
||
(menu3, index3) => {
|
||
return (
|
||
<div>
|
||
<div
|
||
style={{
|
||
lineHeight:
|
||
"20px",
|
||
height: "30px",
|
||
display: "flex",
|
||
alignItems:
|
||
"center",
|
||
justifyContent:
|
||
"space-between",
|
||
margin: "4px 0px",
|
||
}}
|
||
className={
|
||
this.state
|
||
.slectIndex ==
|
||
menu3.departmentId
|
||
? styles.slideMenuActive
|
||
: styles.slideMenu
|
||
}
|
||
>
|
||
<div
|
||
className={
|
||
styles.slideMenuName
|
||
}
|
||
style={{
|
||
paddingLeft:
|
||
"96px",
|
||
}}
|
||
onClick={() => {
|
||
this.chooseName(
|
||
menu3.departmentName,
|
||
menu3.departmentId
|
||
);
|
||
this.clickTab(
|
||
menu3.departmentId
|
||
);
|
||
}}
|
||
>
|
||
{
|
||
menu3.departmentName
|
||
}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
);
|
||
}
|
||
)}
|
||
</div>
|
||
) : (
|
||
<div></div>
|
||
)}
|
||
</div>
|
||
);
|
||
})}
|
||
</div>
|
||
) : (
|
||
<div></div>
|
||
)}
|
||
</div>
|
||
);
|
||
})}
|
||
</div>
|
||
) : (
|
||
<div></div>
|
||
)}
|
||
</div>
|
||
</div>
|
||
</Col>
|
||
<Col span={1}></Col>
|
||
|
||
<Col span={17}>
|
||
<Row>
|
||
<div
|
||
style={{
|
||
backgroundColor: "#e6f7ff",
|
||
padding: "8px 15px",
|
||
fontSize: "14px",
|
||
display: "flex",
|
||
flexDirection: "row",
|
||
alignItems: "center",
|
||
marginBottom: "20px",
|
||
}}
|
||
>
|
||
<div style={{ width: "50%" }}>
|
||
当前选中组织:{this.state.menucode}
|
||
</div>
|
||
|
||
<Dropdown
|
||
visible={this.state.dropVisible}
|
||
onVisibleChange={this.changeVisible}
|
||
overlay={
|
||
<Menu onClick={this.handleClickTime}>
|
||
{this.state.timeArea.map((item) => (
|
||
<Menu.Item key={item.key}>{item}</Menu.Item>
|
||
))}
|
||
</Menu>
|
||
}
|
||
>
|
||
<div
|
||
style={{
|
||
display: "flex",
|
||
flexDirection: "row",
|
||
alignItems: "center",
|
||
// backgroundColor: "rgb(246, 255, 237)",
|
||
marginLeft: "40px",
|
||
}}
|
||
>
|
||
<div> 当前选中年度:</div>
|
||
<div style={{ padding: "0px 10px" }}>
|
||
{this.state.timePick}
|
||
</div>
|
||
<div>
|
||
<Icon type="down" style={{ fontSize: "12px" }} />
|
||
</div>
|
||
</div>
|
||
</Dropdown>
|
||
</div>
|
||
</Row>
|
||
<div
|
||
style={{
|
||
overflowY: "auto",
|
||
height: "780px",
|
||
overflowX: "hidden",
|
||
}}
|
||
className={styles.scrolltyle}
|
||
>
|
||
<Row>
|
||
<div className={styles.newPieOrg}>
|
||
<li>
|
||
<div className={styles.newPieIcon}>
|
||
<Icon
|
||
type="schedule"
|
||
style={{ fontSize: "28px", color: "#309ae8" }}
|
||
></Icon>
|
||
</div>
|
||
<div className={styles.newPieRig}>
|
||
<div
|
||
style={{
|
||
color: "#000000",
|
||
fontSize: "24px",
|
||
fontWeight: "bold",
|
||
}}
|
||
>
|
||
{this.state.departmentAnalysisData.TotalCount
|
||
? this.state.departmentAnalysisData.TotalCount
|
||
: 0}
|
||
</div>
|
||
<div>任务总数</div>
|
||
</div>
|
||
</li>
|
||
{/* <Divider type="vertical" className={styles.divider} /> */}
|
||
<li
|
||
onClick={this.showModalVisi}
|
||
style={{ cursor: "pointer" }}
|
||
>
|
||
<div className={styles.newPieIcon}>
|
||
<Icon
|
||
type="issues-close"
|
||
style={{ fontSize: "28px", color: "#309ae8" }}
|
||
></Icon>
|
||
</div>
|
||
<div className={styles.newPieRig}>
|
||
<div
|
||
style={{
|
||
color: "#cc0404",
|
||
fontSize: "24px",
|
||
fontWeight: "bold",
|
||
}}
|
||
>
|
||
{this.state.departmentAnalysisData.UnfinishCount
|
||
? this.state.departmentAnalysisData.UnfinishCount
|
||
: 0}
|
||
</div>
|
||
<div>未完成</div>
|
||
</div>
|
||
</li>
|
||
{/* <Divider type="vertical" className={styles.divider} /> */}
|
||
<li>
|
||
<div className={styles.newPieIcon}>
|
||
<Icon
|
||
type="check-circle"
|
||
style={{ fontSize: "28px", color: "#309ae8" }}
|
||
></Icon>
|
||
</div>
|
||
<div className={styles.newPieRig}>
|
||
<div
|
||
style={{
|
||
color: "#2177d5",
|
||
fontSize: "24px",
|
||
fontWeight: "bold",
|
||
}}
|
||
>
|
||
{this.state.departmentAnalysisData.FinishRate
|
||
? Number(
|
||
this.state.departmentAnalysisData.FinishRate
|
||
).toFixed(2) + "%"
|
||
: 0}
|
||
</div>
|
||
<div>完成率</div>
|
||
</div>
|
||
|
||
{/* <a href="#" style={{ color: "red" }}> */}
|
||
{/* </a> */}
|
||
</li>
|
||
{/* <Divider type="vertical" className={styles.divider} /> */}
|
||
<li>
|
||
<div className={styles.newPieIcon}>
|
||
<Icon
|
||
type="clock-circle"
|
||
style={{ fontSize: "28px", color: "#309ae8" }}
|
||
></Icon>
|
||
</div>
|
||
<div className={styles.newPieRig}>
|
||
<div
|
||
style={{
|
||
color: "#f6841a",
|
||
fontSize: "24px",
|
||
fontWeight: "bold",
|
||
}}
|
||
>
|
||
{this.state.departmentAnalysisData.NormalFinishRate
|
||
? Number(
|
||
this.state.departmentAnalysisData
|
||
.NormalFinishRate
|
||
).toFixed(2) + "%"
|
||
: 0}
|
||
</div>
|
||
<div>及时完成率</div>
|
||
</div>
|
||
</li>
|
||
</div>
|
||
</Row>
|
||
<Row>
|
||
{this.state.empty == false ? (
|
||
<div
|
||
style={{
|
||
width: "100%",
|
||
height: "350px",
|
||
minHeight: "180px",
|
||
marginTop: "40px",
|
||
}}
|
||
>
|
||
<div
|
||
id="trendYear"
|
||
style={{
|
||
width: "100%",
|
||
height: "100%",
|
||
}}
|
||
></div>
|
||
</div>
|
||
) : (
|
||
<div style={{ margin: "40px 0px" }}>
|
||
<div
|
||
style={{
|
||
display: "flex",
|
||
alignItems: "center",
|
||
fontSize: "18px",
|
||
fontWeight: "bold",
|
||
justifyContent: "center",
|
||
marginBottom: "20px",
|
||
color: "#333333",
|
||
}}
|
||
>
|
||
组织完成率走势图(近12个月)
|
||
</div>
|
||
|
||
<Empty
|
||
style={{
|
||
height: "100%",
|
||
alignItems: "center",
|
||
}}
|
||
/>
|
||
</div>
|
||
)}
|
||
</Row>
|
||
<Row
|
||
style={{
|
||
borderTop: "1px solid #E8E8E8",
|
||
paddingTop: "40px",
|
||
marginTop: "40px",
|
||
}}
|
||
>
|
||
<Col span={this.state.loadAll == false ? 12 : 24}>
|
||
<div
|
||
style={{
|
||
display: "flex",
|
||
flexDirection: "column",
|
||
marginBottom: "20px",
|
||
borderRight:
|
||
this.state.loadAll == false
|
||
? "1px solid #E8E8E8"
|
||
: "none",
|
||
}}
|
||
>
|
||
<div
|
||
style={{
|
||
display: "flex",
|
||
alignItems: "center",
|
||
fontSize: "18px",
|
||
fontWeight: "bold",
|
||
justifyContent: "center",
|
||
marginBottom: "10px",
|
||
color: "#333333",
|
||
}}
|
||
>
|
||
{this.state.loadAll == false
|
||
? "及时完成率排名前八"
|
||
: "及时完成率排名"}
|
||
</div>
|
||
{this.state.emptyAsc == false ? (
|
||
<div
|
||
style={{
|
||
width: "100%",
|
||
height:
|
||
this.state.loadAll == false
|
||
? "350px"
|
||
: this.state.userCount > 15
|
||
? "600px"
|
||
: this.state.userCount > 10
|
||
? "500px"
|
||
: this.state.userCount > 6
|
||
? "400px"
|
||
: this.state.userCount > 3
|
||
? "300px"
|
||
: this.state.userCount > 2
|
||
? "200px"
|
||
: this.state.userCount > 1
|
||
? "100px"
|
||
: "80px",
|
||
// minHeight: "180px",
|
||
display: "flex",
|
||
flexDirection: "row",
|
||
marginBottom: "40px",
|
||
}}
|
||
>
|
||
<div
|
||
id="completeAfter"
|
||
style={{
|
||
width: "100%",
|
||
height: "100%",
|
||
}}
|
||
></div>
|
||
</div>
|
||
) : (
|
||
<Empty
|
||
style={{
|
||
height: "100%",
|
||
width: "100%",
|
||
alignItems: "center",
|
||
margin: "40px 0px",
|
||
display: "flex",
|
||
justifyContent: "center",
|
||
flexDirection: "column",
|
||
}}
|
||
/>
|
||
)}
|
||
</div>
|
||
</Col>
|
||
|
||
{this.state.loadAll == false ? (
|
||
<Col span={12}>
|
||
<div
|
||
style={{
|
||
display: "flex",
|
||
flexDirection: "column",
|
||
marginBottom: "20px",
|
||
borderLeft: "1px solid #E8E8E8",
|
||
}}
|
||
>
|
||
<div
|
||
style={{
|
||
display: "flex",
|
||
alignItems: "center",
|
||
fontSize: "18px",
|
||
fontWeight: "bold",
|
||
justifyContent: "center",
|
||
marginBottom: "10px",
|
||
color: "#333333",
|
||
}}
|
||
>
|
||
及时完成率排名后八
|
||
</div>
|
||
{this.state.emptyDesc == false ? (
|
||
<div
|
||
style={{
|
||
width: "100%",
|
||
height: "350px",
|
||
minHeight: "180px",
|
||
display: "flex",
|
||
flexDirection: "row",
|
||
marginBottom: "40px",
|
||
}}
|
||
>
|
||
<div
|
||
id="completeBefore"
|
||
style={{
|
||
width: "100%",
|
||
height: "100%",
|
||
}}
|
||
></div>
|
||
</div>
|
||
) : (
|
||
<Empty
|
||
style={{
|
||
height: "100%",
|
||
width: "100%",
|
||
alignItems: "center",
|
||
margin: "40px 0px",
|
||
display: "flex",
|
||
justifyContent: "center",
|
||
flexDirection: "column",
|
||
}}
|
||
/>
|
||
)}
|
||
</div>
|
||
</Col>
|
||
) : (
|
||
<div></div>
|
||
)}
|
||
</Row>
|
||
</div>
|
||
</Col>
|
||
{/* <Col span={1}></Col> */}
|
||
</Row>
|
||
</div>
|
||
</Spin>
|
||
</div>
|
||
);
|
||
}
|
||
}
|
||
export default connect(({ login, app }) => ({ login, app }))(
|
||
BI021DepartmentAnalysis
|
||
);
|