mh-sms-web/src/routes/Home.js
2024-03-26 11:37:05 +08:00

2299 lines
68 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, { useState, useEffect, useRef, Component } from "react";
import { connect } from "dva";
import storage from "../utils/storage";
import IconFont from "../utils/iconFont";
import {
initFilter,
addRuleAndGroups,
guid,
extendInclude,
extendRule,
extend,
extendOrder,
} from "../utils/common";
import "./home.less";
// 组件库
import {
Row,
Col,
Icon,
Progress,
Tabs,
message,
Dropdown,
Menu,
Empty,
Modal,
Divider,
Form,
Input,
Table,
Button,
DatePicker,
Select,
} from "antd";
import styles from "./dashboard.css";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
import echarts from "echarts";
import config from "../config";
import ModifyPassword from "../components/MainPage/ModifyPassword";
import FoUserInfoShow from "../components/MainPage/FoUserInfoShow";
import FormPage from "../components/FormPage";
const { TabPane } = Tabs;
const Option = Select.Option;
const RangePicker = DatePicker.RangePicker;
const formItemLayout = {
labelCol: { span: 6 },
wrapperCol: { span: 14 },
};
const AllTech = (props) => {
return (
<Col
span={6}
className="home-tech-col"
onClick={() => {
props.techClick();
}}
>
<div className="home-tech-back">
<IconFont type={props.icon} className="home-tech-icon"></IconFont>
</div>
<span className="home-tech-name">{props.title}</span>
</Col>
);
};
const WorkBench = (props) => {
return (
<div>
{props.data.map((item, index) => {
const result =
(Date.parse(item.TASK_ENDDT) - Date.parse(Date())) / 3600 / 1000;
const prepare = result > 0 ? "正常" : "超期";
const warning =
item.NOTICE_STATUS == 0
? "未读"
: item.NOTICE_STATUS == 3
? "已读"
: "已办";
const type = props.index == 1 || props.index == 2 ? prepare : warning;
return (
<div
style={{
display: "flex",
flexDirection: "row",
padding: "10px",
alignItems: "center",
justifyContent: "space-between",
borderBottom:
index !== props.data.length - 1 ? "1px solid #e7e6e4" : "",
}}
className="home-work-back"
onClick={() => {
props.benchCLick(item);
}}
>
<div
className={
type == "超期"
? "home-work-type-red"
: type == "未办" || type == "未读"
? "home-work-type-yellow"
: type == "已办"
? "home-work-type-green"
: "home-work-type-black"
}
style={{
marginLeft: "20px",
marginRight: "20px",
}}
>
{type}
</div>
<div
className="home-work-title"
style={{ flex: 1, alignItems: "flex-start" }}
>
{item.NOTICE_TITLE}
</div>
<div
className="home-work-date"
style={{
width: "200px",
marginRight: "100px",
}}
>
开始时间{item.TASK_STARTDT}
</div>
<div
className="home-work-date"
style={{
width: "200px",
marginRight: "50px",
}}
>
结束时间{item.TASK_ENDDT}
</div>
{/* <div className="home-work-person" style={{ width: "140px" }}>
发起人:{item.person}
</div> */}
</div>
);
})}
</div>
);
};
const UserInfo = (props) => {
return (
<div
className="home-userInfo"
onClick={() => {
props.showAll();
}}
>
<div className="home-userInfo-pad">
<Icon
type="schedule"
className="home-userInfo-Icon"
style={{ color: props.color }}
></Icon>
<div className="home-userInfo-title">{props.title}</div>
</div>
<div className="home-userInfo-content" style={{ color: props.color }}>
{props.data}
</div>
</div>
);
};
class Home extends React.Component {
constructor(props) {
super(props);
this.state = {
visible: false,
userInfo: "",
timeNow: "上午好",
workData: [],
workTotal: "",
tableKey: "1",
formVisible: false,
noticeTitle: "",
searchVisible: false,
visibleTitle: "",
searchTodayVisible: false,
taskSelects: [],
tmpData: {},
querySearch: {},
currentpageIndex: "1",
visibleStartTime: [],
visibleEndTime: [],
mineType:
localStorage.getItem("currentMineType") === "20"
? "10"
: localStorage.getItem("currentMineType"),
detailForm: {
isShow: false,
formCode: "",
title: "",
},
completeName: [
{
name: "张森友",
value: 100,
},
{
name: "李友军",
value: 99,
},
{
name: "洪虎林",
value: 97,
},
{
name: "李彦斌",
value: 95,
},
{
name: "王志文",
value: 93,
},
{
name: "黄海林",
value: 90,
},
{
name: "赵无极",
value: 67,
},
{
name: "林佑君",
value: 43,
},
],
};
}
componentDidMount() {
if (window.navigator.userAgent.indexOf("Windows") < 1) {
window.location.replace(config.guideH5Host);
//alert('手机');
}
this.getBaseData(1, "1", 5);
this.timeJudg();
this.riskLevel();
// this.homeRound();
this.completeRate();
this.timelyRate();
this.safeCheck();
this.dangerChange();
this.getUser();
}
getSixMonth = (number, yearString = "", monthString = "") => {
let nowdate = new Date();
nowdate.setMonth(nowdate.getMonth() + number);
let y = nowdate.getFullYear();
let m = nowdate.getMonth() + 1;
// let d = nowdate.getDate();
let retrundate = y + yearString + m + monthString;
return retrundate;
};
showAll = (key) => {
const { tableData } = this.state;
if (key == "2") {
this.state.searchColumns = [
{
width: "450px",
title: "任务名称",
dataIndex: "NOTICE_TITLE",
key: "NOTICE_TITLE",
render: (text, record) => (
<span>
<a
onClick={() =>
this.showEditModal(
record.SOURCE_DATA_ID,
record.SOURCE_FORMCODE,
record.ID,
record.NOTICE_TITLE,
record.CODE
)
}
>
{record.NOTICE_TITLE}
</a>
</span>
),
},
{
title: "开始时间",
dataIndex: "TASK_STARTDT",
key: "TASK_STARTDT",
},
{
title: "结束时间",
dataIndex: "TASK_ENDDT",
key: "TASK_ENDDT",
},
{
title: "办结时间",
dataIndex: "TASK_DT",
key: "TASK_DT",
},
];
this.setState({
searchVisible: true,
searchTodayVisible: false,
querySearch: {},
});
} else if (key === "3") {
this.state.searchColumns = [
{
width: "450px",
title: "提醒内容",
dataIndex: "NOTICE_TITLE",
key: "NOTICE_TITLE",
render: (text, record) => (
<span>
<a
onClick={() =>
this.showTodayModal(
record.SOURCE_DATA_ID,
record.SOURCE_FORMCODE,
record.ID,
record.NOTICE_TITLE,
record.CODE,
record.TASK_STARTDT,
record.NOTICE_STATUS
)
}
>
{record.NOTICE_TITLE}
</a>
</span>
),
},
{
title: "提醒时间",
dataIndex: "TASK_STARTDT",
key: "TASK_STARTDT",
},
{
title: "状态",
dataIndex: "NOTICE_STATUS",
key: "NOTICE_STATUS",
render: (text, record) => this.ShowStatus(record),
},
];
this.setState({
searchVisible: false,
searchTodayVisible: true,
querySearch: {},
});
} else {
this.state.searchColumns = [
{
width: "450px",
title: "任务名称",
dataIndex: "NOTICE_TITLE",
key: "NOTICE_TITLE",
render: (text, record) => (
<span>
<a
onClick={() =>
this.showEditModal(
record.SOURCE_DATA_ID,
record.SOURCE_FORMCODE,
record.ID,
record.NOTICE_TITLE,
record.CODE
)
}
>
{record.NOTICE_TITLE}
</a>
</span>
),
},
{
title: "开始时间",
dataIndex: "TASK_STARTDT",
key: "TASK_STARTDT",
},
{
title: "结束时间",
dataIndex: "TASK_ENDDT",
key: "TASK_ENDDT",
},
{
title: "预警状态",
dataIndex: "NOTICE_TYPE",
key: "NOTICE_TYPE",
render: (text, record) => this.ShowState(record),
},
];
this.setState({
searchVisible: true,
searchTodayVisible: false,
querySearch: {},
});
}
this.setState(
{
tableData,
currentpageIndex: key,
},
() => {
this.getBaseData(1, key);
}
);
};
tabsCallback = (key) => {
if (key == 1) {
this.getBaseData(1, "1", 5);
this.setState({
tableKey: "1",
});
} else if (key == 2) {
this.getBaseData(1, "4", 5);
this.setState({
tableKey: "4",
});
} else if (key == 3) {
this.getBaseData(1, "2", 5);
this.setState({
tableKey: "2",
});
} else {
this.getBaseData(1, "3", 5);
this.setState({
tableKey: "3",
});
}
};
workClick = (e) => {
this.showEditModal(
e.SOURCE_DATA_ID,
e.SOURCE_FORMCODE,
e.ID,
e.NOTICE_TITLE,
e.CODE
);
};
ShowState(obj) {
var thisResult =
(Date.parse(obj.TASK_ENDDT) - Date.parse(Date())) / 3600 / 1000;
if (thisResult > 0) {
return "正常";
} else {
return <span style={{ color: "red" }}>超期</span>;
}
}
ShowStatus(obj) {
if (obj.NOTICE_STATUS === 0) {
return <span style={{ color: "red" }}>未读</span>;
} else if (obj.NOTICE_STATUS === 3) {
return "已读";
} else {
return "已办";
}
}
showEditModal = (dataId, formCode, TaskID, title, taskCode) => {
this.props.dispatch({
type: "app/getDataByPost",
url: "BI/BIController/getVersion",
onComplete: (ret) => {
if (ret > config.version) {
window.localStorage.clear();
message.success("清除成功,即将重新加载页面", 2, () => {
setTimeout(() => window.location.reload(true), 500);
});
}
},
});
const newtmpData = {
data: {
id: dataId,
TaskID: TaskID,
onCancel: this.handleCancel,
taskCode: taskCode,
tableKey: this.state.tableKey,
homeReload: true,
},
formCode: formCode,
};
this.setState(
{
noticeTitle: title,
taskCode: taskCode,
tmpData: newtmpData,
currActivatedMenu: "",
},
() => {
this.setState({
formVisible: true,
});
}
);
};
clearData = () => {
let newtmpData = { ...this.state.tmpData };
newtmpData["data"].id = "";
newtmpData["data"].homeReload = false;
newtmpData.formCode = "";
this.setState({
formVisible: false,
tmpData: [], //newtmpData
});
};
handleCancel = () => {
// 退出弹窗
this.getBaseData(1, this.state.tableKey, 5);
this.clearData();
};
closeModal = () => {
this.setState({
formVisible: false,
});
};
getBaseData = (pagination, key, limit) => {
const current = pagination ? pagination.current : 1;
const json = initFilter(this.props.login.OrgId, "", "CODE", 1, current);
const querySearch = this.state.querySearch;
for (var item in querySearch) {
if (item == "searchName") {
extendRule(json, "NOTICE_TITLE", 9, querySearch[item]);
}
if (item == "searchCode") {
extendRule(json, "CODE", 9, querySearch[item]);
}
if (item == "startTime1") {
extendRule(json, "TASK_STARTDT", 6, querySearch[item]);
}
if (item == "startTime2") {
extendRule(json, "TASK_STARTDT", 4, querySearch[item]);
}
if (item == "endTime1") {
extendRule(json, "TASK_ENDDT", 6, querySearch[item]);
}
if (item == "endTime2") {
extendRule(json, "TASK_ENDDT", 4, querySearch[item]);
}
if (item == "searchStatus") {
extendRule(json, "NOTICE_STATUS", 1, querySearch[item]);
}
}
//extendRule(json, "NOTICE_STATUS", 1, 0);
json.Limit = limit;
//json.Limit = 10;
json.Parameter1 = key; //1待办事项2已办事项3今日新增4待办超时
this.props.dispatch({
type: "app/getDataByPost",
url: "FM/FMNotificationTask/HomeOrderPaged",
payload: json,
onlyData: false,
onComplete: (ret) => {
if (ret && ret.IsSuccessful && ret.Data.newData) {
this.setState({
workData: ret.Data.newData,
workTotal: ret.Data,
});
}
},
});
};
timeJudg = () => {
let time = new Date();
let hour = time.getHours();
if (hour >= 6 && hour <= 11) {
this.setState({
timeNow: "上午好",
});
} else if (hour > 11 && hour <= 13) {
this.setState({
timeNow: "中午好",
});
} else if (hour > 13 && hour <= 18) {
this.setState({
timeNow: "下午好",
});
} else {
this.setState({
timeNow: "晚上好",
});
}
};
getUser = () => {
var userId = storage("lacal").getItem("userid")?.val; //登录后有存储登录信息
var orgId = storage("lacal").getItem("webOrgId")?.val; //登录后有存储登录信息
let json = initFilter(orgId);
extendRule(json, "ID", 1, userId);
extendInclude(json, "Nav_Department");
this.props.dispatch({
type: "app/getDataByPost",
payload: json,
url: "FM/User/Get",
onComplete: (ret) => {
if (ret) {
this.setState({
userInfo: ret,
});
}
},
});
};
safeCheck = () => {
let series = [];
let seriesName = ["巡回检查", "例行检查", "专业检查", "综合检查"];
let data3 = [
[17, 20, 16, 20, 16, 16, 20, 16, 16, 20, 16, 4],
[43, 41, 43, 32, 47, 33, 57, 38, 46, 42, 49, 39],
[23, 21, 43, 12, 15, 13, 15, 16, 17, 14, 19, 24],
[17, 20, 23, 42, 12, 17, 13, 15, 12, 17, 19, 34],
];
let xData = [];
for (let i = 0; i < 12; i++) {
xData.unshift(this.getSixMonth(-i, "年", "月"));
}
for (let i = 0; i < data3.length; i++) {
series.push({
name: seriesName[i],
type: "bar",
stack: "总量",
data: data3[i],
barWidth: "20%",
// itemStyle:{
// borderWidth:2,
// borderColor:'#fff',
// barBorderRadius:5,
// }
});
}
let safeChecks = document.getElementById("safeCheck");
if (safeChecks) {
let myChart = echarts.init(safeChecks);
myChart.setOption({
color: ["#4285F4", "#72b85b", "#c92a2a", "#ffa94d"],
tooltip: {
trigger: "axis",
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
},
transitionDuration: 0,
},
grid: {
left: "5%",
right: "5%",
bottom: "15%",
top: "10%",
containLabel: true,
z: 22,
},
xAxis: {
type: "category",
data: xData,
axisLine: {
lineStyle: {
color: "#0c3b71",
},
},
axisLabel: {
show: true,
color: "rgb(170,170,170)",
interval: 0,
textStyle: {
lineHeight: 14,
},
formatter: function (param) {
return param.split("年")[1];
},
},
},
legend: {
data: ["巡回检查", "例行检查", "专业检查", "综合检查"],
left: "center",
align: "left",
bottom: "2%",
textStyle: {
color: "#000",
},
itemWidth: 10,
itemHeight: 10,
// itemGap: 15,
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: ["#f2f2f2"],
},
},
axisLine: {
lineStyle: {
color: "#0c3b71",
},
},
axisLabel: {
color: "rgb(170,170,170)",
formatter: "{value} ",
},
},
series: series,
});
}
};
dangerChange = () => {
let sourceName = [
"按时整改隐患",
"超期整改隐患",
"未整改隐患",
"隐患整改率",
];
let ydata = [
["2", "5", "6", "8", "10", "9"],
["1", "7", "1", "2", "5", "4"],
["0", "1", "0", "3", "0", "1"],
["100.00", "92.31", "100.00", "76.92", "100.00", "92.86"],
];
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let xData = [];
for (let i = 0; i < 6; i++) {
xData.unshift(this.getSixMonth(-i, "-", ""));
}
let dangerChanges = document.getElementById("dangerChange");
if (dangerChanges) {
let myChart = echarts.init(dangerChanges);
myChart.setOption({
color: ["#72b85b", "#f6841a", "#cc0404", "#4285F4"],
tooltip: {
trigger: "axis",
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
},
transitionDuration: 0,
formatter: function (params) {
return (
params[0].name +
"</br>" +
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 +
"</br>" +
params[3].marker +
params[3].seriesName +
" : " +
params[3].value +
"%"
);
},
},
grid: {
left: "5%",
right: "5%",
bottom: "15%",
top: "10%",
containLabel: true,
z: 22,
},
xAxis: {
type: "category",
data: xData,
axisLine: {
lineStyle: {
color: "#0c3b71",
},
},
axisLabel: {
show: true,
color: "rgb(170,170,170)",
interval: 0,
textStyle: {
lineHeight: 14,
},
},
},
legend: {
data: sourceName,
left: "center",
align: "left",
bottom: "2%",
textStyle: {
color: "#000",
},
itemWidth: 10,
itemHeight: 10,
// itemGap: 35,
},
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: sourceName[0],
type: "bar",
data: ydata[0],
barWidth: "10%",
barGap: "10%",
stack: null,
},
{
name: sourceName[1],
type: "bar",
data: ydata[1],
barWidth: "10%",
barGap: "10%",
stack: null,
},
{
name: sourceName[2],
type: "bar",
data: ydata[2],
barWidth: "10%",
barGap: "10%",
stack: null,
// zlevel: 99,
},
{
name: sourceName[3],
type: "line",
smooth: false,
data: ydata[3],
yAxisIndex: 1,
itemStyle: {
normal: {
lineStyle: {
type: "dotted",
},
},
},
// zlevel:100,
},
],
});
}
};
timelyRate = () => {
let timelyRates = document.getElementById("timelyRate");
if (timelyRates) {
let myChart = echarts.init(timelyRates);
myChart.setOption(
{
title: [
{
text: "83%",
x: "center",
top: "40%",
textStyle: {
fontWeight: "normal",
color: "#ffa94d",
fontSize: "26",
},
},
{
text: "及时完成率",
x: "center",
top: "55%",
textStyle: {
fontWeight: "normal",
fontSize: "14",
},
},
],
color: "#ffd6b5",
legend: {
show: false,
itemGap: 12,
data: ["01", "02"],
},
series: [
{
name: "Line 1",
type: "pie",
clockWise: true,
radius: ["60%", "76%"],
itemStyle: {
normal: {
label: {
show: false,
},
labelLine: {
show: false,
},
},
},
hoverAnimation: false,
data: [
{
value: 83,
name: "01",
itemStyle: {
normal: {
color: {
// 完成的圆环的颜色
colorStops: [
{
offset: 0,
color: "#ffa94d", // 0% 处的颜色
},
{
offset: 1,
color: "#f76707", // 100% 处的颜色
},
],
},
label: {
show: false,
},
labelLine: {
show: false,
},
},
},
},
{
name: "02",
value: 17,
},
],
},
],
},
true
);
}
};
completeRate = () => {
let completeRates = document.getElementById("completeRate");
if (completeRates) {
let myChart = echarts.init(completeRates);
myChart.setOption({
title: [
{
text: "99%",
x: "center",
top: "40%",
textStyle: {
fontWeight: "normal",
color: "#0580f2",
fontSize: "26",
},
},
{
text: "个人完成率",
x: "center",
top: "55%",
textStyle: {
fontWeight: "normal",
fontSize: "14",
},
},
],
color: ["rgba(176, 212, 251, 1)"],
legend: {
show: false,
itemGap: 12,
data: ["01", "02"],
},
series: [
{
name: "Line 1",
type: "pie",
clockWise: true,
radius: ["60%", "76%"],
itemStyle: {
normal: {
label: {
show: false,
},
labelLine: {
show: false,
},
},
},
hoverAnimation: false,
data: [
{
value: 99,
name: "01",
itemStyle: {
normal: {
color: {
// 完成的圆环的颜色
colorStops: [
{
offset: 0,
color: "#00cefc", // 0% 处的颜色
},
{
offset: 1,
color: "#367bec", // 100% 处的颜色
},
],
},
label: {
show: false,
},
labelLine: {
show: false,
},
},
},
},
{
name: "02",
value: 1,
},
],
},
],
});
}
};
riskLevel = () => {
let riskLevel = [];
let showData = [
{ value: 2, name: "一级" },
{ value: 5, name: "二级" },
{ value: 15, name: "三级" },
{ value: 30, name: "四级" },
];
let riskLevels = document.getElementById("riskLevel");
if (riskLevels) {
let myChart = echarts.init(riskLevels);
myChart.setOption({
color: ["#c92a2a", "#ffa94d", "#ffe066", "#4285F4", "#fa8a89"],
title: [
{
text: "52",
x: "26%",
y: "40%",
textStyle: {
fontSize: 26,
fontWeight: "normal",
color: ["#333"],
},
},
{
text: "风险总数",
x: "24%",
y: "55%",
textStyle: {
color: "#666",
fontSize: 12,
},
},
],
tooltip: {
trigger: "item",
formatter: "{b}:({d}%)",
},
legend: {
icon: "pin",
orient: "vartical",
// x: "right",
top: "18%",
right: "15%",
bottom: "20%",
data: showData,
// itemWidth: 20,
// itemHeight: 14,
itemGap: 25,
formatter: function (name) {
//通过name获取到数组对象中的单个对象
let singleData = showData.filter(function (item) {
return item.name == name;
});
let countAll = 0;
showData.map((item) => {
countAll = countAll + item.value;
});
return (
name +
" | " +
// singleData[0].value +
// " | " +
Number((singleData[0].value / countAll) * 100).toFixed(2) +
"%"
);
},
},
grid: {
left: 30,
containLabel: true,
bottom: 10,
top: 10,
right: 30,
},
series: [
{
name: "访问来源",
type: "pie",
clockwise: false,
// minAngle: 20,
avoidLabelOverlap: false,
radius: ["50%", "65%"],
center: ["30%", "50%"],
itemStyle: {
//图形样式
normal: {
borderColor: "#ffffff",
borderWidth: 4,
padding: "0 20px",
borderRadius: 50,
},
},
label: {
show: false,
},
// color: color,
data: showData,
},
],
});
}
};
navToMenu = (ID) => {
this.props.history.push({ pathname: `/main/${ID}` });
};
/**
* 注销登录
*/
handleLogout = () => {
const { OrgId, userId } = this.props.login;
const logJson = initFilter(OrgId, userId, "", 0, 1, 0);
this.props.dispatch({
type: "app/addLoginOut",
payload: logJson,
});
localStorage.removeItem("accessToken");
this.props.history.push({ pathname: "/login" });
};
handleUserMenuClick = (evt) => {
switch (evt.key) {
case "user-menu-logout":
this.handleLogout();
break;
case "user-menu-cacheclean":
window.localStorage.clear();
message.success("清除成功,即将重新加载页面", 2, () => {
setTimeout(() => window.location.reload(true), 500);
});
break;
default:
break;
}
this.setState({
visible: false,
});
};
ExpandCancel = () => {};
showDetailModal = (formCode) => {
console.log(this.state.mineType,'this.state.mineType')
var titleTemp =
this.state.mineType == 20
? "尾矿库"
: this.state.mineType == 10
? "选矿厂"
: "露天矿";
if (formCode == "BI054_HOMEDETAIL") {
titleTemp += "安全检查次数统计近12月";
} else if (formCode == "BI055_HOMEDETAIL") {
titleTemp += "月度隐患整改情况近12月";
} else if (formCode == "BI001_HOMEDETAIL") {
titleTemp += "班组活动任务完成详情近12月";
} else if (formCode == "BI002_HOMEDETAIL") {
titleTemp += "工作票完成详情近12月";
} else if (formCode == "BI013_RISKANALYSISMODEL") {
titleTemp += "风险管理统计分析";
}
const newtmpData = {
data: {
id: guid(),
mineType: this.state.mineType,
onCancel: this.ExpandCancel,
homeReload: true,
},
formCode: formCode,
};
this.setState({ tmpData: newtmpData }, () => {
var detailForm = {
isShow: true,
formCode: formCode,
title: titleTemp,
};
this.setState({
detailForm: detailForm,
});
});
};
doubleClear = () => {
if (this.state.searchVisible === true) {
this.setState({ searchVisible: false });
} else if (this.state.searchTodayVisible === true) {
this.setState({ searchTodayVisible: false });
}
this.getBaseData(1, this.state.tableKey, 5);
};
vauleChange = (e) => {
const { querySearch } = this.state;
if (e.target.value) {
switch (e.target.name) {
case "searchName":
querySearch[e.target.name] = e.target.value;
this.setState({ querySearch });
break;
case "searchCode":
querySearch[e.target.name] = e.target.value;
this.setState({ querySearch });
break;
case "searchType":
querySearch[e.target.name] = e.target.value;
this.setState({ querySearch });
break;
case "searchContent":
querySearch[e.target.name] = e.target.value;
this.setState({ querySearch });
break;
}
} else {
this.setState({ querySearch: {} });
}
};
handleSearch = (item) => {
this.getBaseData(1, item, null);
};
selectChange = (value) => {
const { querySearch } = this.state;
querySearch.searchStatus = value;
this.setState(
{
querySearch,
},
() => {}
);
};
// 开始时间
startChange = (dates, dateStr) => {
const { querySearch } = this.state;
if (dates.length != 2) {
this.setState({
visibleStartTime: [],
querySearch: {},
});
return;
}
this.state.visibleStartTime = dates;
querySearch.startTime1 = this.state.visibleStartTime[0].format(
"YYYY-MM-DD HH:mm:ss"
);
querySearch.startTime2 = this.state.visibleStartTime[1].format(
"YYYY-MM-DD HH:mm:ss"
);
this.setState(
{
querySearch,
},
() => {}
);
};
// 结束时间
endChange = (dates, dateStr) => {
const { querySearch } = this.state;
if (dates.length != 2) {
this.setState({
visibleEndTime: [],
querySearch: {},
});
return;
}
this.state.visibleEndTime = dates;
querySearch.endTime1 = this.state.visibleEndTime[0].format(
"YYYY-MM-DD HH:mm:ss"
);
querySearch.endTime2 = this.state.visibleEndTime[1].format(
"YYYY-MM-DD HH:mm:ss"
);
this.setState({ querySearch });
};
detailFormClose = () => {
var detailForm = {
isShow: false,
formCode: "",
title: "",
};
this.setState({
detailForm: detailForm,
});
};
render() {
const rowSelection = {
onChange: (selectedRowKeys, selectedRows) => {
this.state.taskSelects = selectedRows;
},
};
return (
<div
className="route-home"
style={{
padding: "0 10px",
minHeight: "735px",
height: "100%",
width: "100%",
}}
ref={this.resizeRef}
>
<Modal
visible={this.state.formVisible}
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>
<Modal
visible={this.state.detailForm.isShow}
title={this.state.detailForm.title}
maskClosable={false}
closeModal={this.detailFormClose}
onCancel={this.detailFormClose}
footer={null}
width="1300px"
>
<FormPage {...this.state.tmpData} />
</Modal>
<Modal
visible={this.state.searchVisible}
zIndex={999}
title={this.state.visibleTitle}
maskClosable={false}
onCancel={this.doubleClear}
footer={false}
className="antd-modal-homescreen"
>
<div>
<Form>
<Row style={{ marginTop: "50px" }}>
<Col span={5}>
<Form.Item label={"名称"} {...formItemLayout}>
<Input
value={this.state.querySearch.searchName}
placeholder={"请输入任务名称"}
name="searchName"
onChange={this.vauleChange}
/>
</Form.Item>
</Col>
<Col span={6}>
<Form.Item label={"开始时间"} {...formItemLayout}>
<RangePicker
value={this.state.visibleStartTime}
onChange={this.startChange}
/>
</Form.Item>
</Col>
<Col span={6}>
<Form.Item label={"结束时间"} {...formItemLayout}>
<RangePicker
value={this.state.visibleEndTime}
onChange={this.endChange}
/>
</Form.Item>
</Col>
<Col span={2}>
<Button
type={"primary"}
icon={"search"}
onClick={() =>
this.handleSearch(this.state.currentpageIndex)
}
>
搜索
</Button>
</Col>
</Row>
</Form>
<Table
// rowSelection={rowSelection}
dataSource={this.state.workData}
columns={this.state.searchColumns}
onChange={(num) =>
this.getBaseInfoData(num, this.state.currentpageIndex, null)
}
loading={this.state.showLoading}
size="small"
style={{ padding: "0px 20px" }}
/>
</div>
</Modal>
<Modal
visible={this.state.searchTodayVisible}
title={this.state.visibleTitle}
maskClosable={false}
zIndex={999}
onCancel={this.doubleClear}
footer={false}
className="antd-modal-homescreen"
>
<div>
<Form>
<Row style={{ marginTop: "50px" }}>
<Col span={5}>
<Form.Item label={"提醒内容"} {...formItemLayout}>
<Input
value={this.state.querySearch.searchName}
placeholder={"请输入提醒内容"}
name="searchName"
onChange={this.vauleChange}
/>
</Form.Item>
</Col>
<Col span={6}>
<Form.Item label={"开始时间"} {...formItemLayout}>
<RangePicker
value={this.state.visibleStartTime}
// defaultValue={[moment(moment(this.state.querySearch.startTime1), "YYYY-MM-DD"), moment(moment(this.state.querySearch.startTime2), "YYYY-MM-DD")]}
onChange={this.startChange}
/>
</Form.Item>
</Col>
<Col span={6}>
<Form.Item label={"结束时间"} {...formItemLayout}>
<RangePicker
value={this.state.visibleEndTime}
// defaultValue={[moment(moment(this.state.querySearch.startTime1), "YYYY-MM-DD"), moment(moment(this.state.querySearch.startTime2), "YYYY-MM-DD")]}
onChange={this.endChange}
/>
</Form.Item>
</Col>
<Col span={3}>
<Form.Item label={"状态"} {...formItemLayout}>
<Select
value={this.state.querySearch.searchStatus}
// defaultValue={[moment(moment(this.state.querySearch.startTime1), "YYYY-MM-DD"), moment(moment(this.state.querySearch.startTime2), "YYYY-MM-DD")]}
onChange={this.selectChange}
>
<Option value="0">未读</Option>
<Option value="3">已读</Option>
<Option value="1">已办</Option>
</Select>
</Form.Item>
</Col>
<Col span={2}>
<Button
type={"primary"}
icon={"search"}
onClick={() =>
this.handleSearch(this.state.currentpageIndex)
}
>
搜索
</Button>
</Col>
</Row>
</Form>
<Table
dataSource={this.state.workData}
columns={this.state.searchColumns}
onChange={(num) =>
this.getBaseInfoData(num, this.state.currentpageIndex, null)
}
loading={this.state.showLoading}
size="small"
style={{ padding: "0px 20px" }}
/>
</div>
</Modal>
<Col span={24} style={{ width: "100%", height: "100%" }}>
<Row
gutter={12}
style={{
width: "100%",
height: "25%",
display: "flex",
padding: "0px 20px",
margin: "0px",
minHeight: "242px",
minWidth: "1704px",
// justifyContent: "space-between",
// backgroundColor: "#fff",
}}
>
<Col
span={10}
style={{
backgroundColor: "#fff",
height: "100%",
display: "flex",
flexDirection: "column",
padding: "0px 20px",
borderRadius: "5px 0px 0px 5px",
minWidth: "578px",
}}
>
<div
style={{
height: "50%",
width: "100%",
display: "flex",
flexDirection: "row",
alignItems: "center",
borderBottom: "2px solid #f6f6f6",
}}
>
<div
style={{
width: "80px",
height: "80px",
borderRadius: "40px",
backgroundColor: "#fafafa",
fontSize: "18px",
display: "flex",
alignItems: "center",
justifyContent: "center",
marginRight: "10px",
}}
>
{this.state.userInfo.SEX == 1 ? (
<img
src={require("../assets/home/avaB.png")}
style={{
height: "60px",
width: "60px",
alignItems: "center",
objectFit: "contain",
}}
alt="homeuser"
/>
) : (
<img
src={require("../assets/home/avaG.png")}
style={{
height: "60px",
width: "auto",
alignItems: "center",
objectFit: "contain",
}}
alt="homeuser"
/>
)}
</div>
<div
style={{
display: "flex",
flexDirection: "column",
height: "60px",
justifyContent: "space-between",
flex: 1,
}}
>
<div
style={{
display: "flex",
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center",
}}
>
<div
style={{
color: "#303133",
fontSize: "16px",
marginLeft: "5px",
fontWeight: "bold",
}}
>
{this.state.userInfo.NAME}{this.state.timeNow}
</div>
<div>
<Dropdown
visible={this.state.visible}
onVisibleChange={() => {
this.setState({ visible: !this.state.visible });
}}
overlay={
<Menu onClick={this.handleUserMenuClick}>
<Menu.Item
key="user-menu-UserInfoShow"
className="home-setting"
>
<Icon
type="pushpin"
style={{ fontSize: "14px", color: "" }}
></Icon>
<FoUserInfoShow>我的资料</FoUserInfoShow>
</Menu.Item>
<Menu.Item
key="user-menu-updatepwd"
className="home-setting"
>
<Icon
type="edit"
style={{ fontSize: "14px" }}
></Icon>
<ModifyPassword>修改密码</ModifyPassword>
</Menu.Item>
<Menu.Item
key="user-menu-cacheclean"
className="home-setting"
>
<Icon
type="tool"
style={{ fontSize: "14px" }}
></Icon>
清除缓存
</Menu.Item>
{/* <Menu.Item>版本号:{config.version}</Menu.Item> */}
<Menu.Item
key="user-menu-logout"
className="home-setting"
>
<Icon
type="poweroff"
style={{ fontSize: "14px" }}
></Icon>
退出登录
</Menu.Item>
</Menu>
}
placement="topLeft"
trigger={["click"]}
>
<Icon
type="setting"
className="home-setting-icon"
></Icon>
</Dropdown>
</div>
</div>
<div style={{ display: "flex", flexDirection: "row" }}>
<div
className="home-userInfo-tabs"
style={{
marginRight: "10px",
}}
>
工号{this.state.userInfo.CODE}
</div>
<div
className="home-userInfo-tabs"
style={{
marginRight: "10px",
}}
>
手机号{this.state.userInfo.PHONE}
</div>
{this.state.userInfo.Nav_Department ? (
<div className="home-userInfo-tabs">
部门{this.state.userInfo.Nav_Department.NAME}
</div>
) : (
""
)}
</div>
</div>
</div>
<div className="home-userInfo-card">
<UserInfo
data={this.state.workTotal.todoCount}
title="待办事项"
color="#2177d5"
showAll={() => {
this.showAll("1");
}}
/>
<UserInfo
data={this.state.workTotal.timeOverCount}
title="待办超时"
color="#f76707"
showAll={() => {
this.showAll("4");
}}
/>
<UserInfo
data={this.state.workTotal.doneCount}
title="已办事项"
color="#48a447"
showAll={() => {
this.showAll("2");
}}
/>
<UserInfo
data={this.state.workTotal.todayNewCount}
title="今日提醒"
color="#fcc419"
showAll={() => {
this.showAll("3");
}}
/>
</div>
</Col>
{/* <div style={{ width: "30px" }}></div> */}
<Col
span={7}
style={{
backgroundColor: "#fff",
height: "100%",
borderRadius: "0px 5px 5px 0px",
padding: "0px",
display: "flex",
flexDirection: "row",
flex: 1,
alignItems: " center",
justifyContent: "center",
}}
>
<Divider
type="vertical"
dashed={true}
style={{ height: "80%", backgroundColor: "#fff" }}
/>
<div className="home-rate">
{/* <div className="home-always-title">
<div className="home-always-left">
<div className="home-always-badge"></div>
<div className="home-always-name">完成率</div>
</div>
</div> */}
<div style={{ flex: 1, height: "100%", padding: "0px" }}>
<div
id="completeRate"
style={{
width: "100%",
height: "100%",
// minHeight: "180px",
}}
></div>
</div>
</div>
<Divider
type="vertical"
dashed={true}
className="home-rate-divider"
/>
{/* <div
style={{
width: "20px",
height: "100%",
backgroundColor: "#f4f7ff",
minWidth: "20px",
}}
></div> */}
<div className="home-rate">
{/* <div className="home-always-title">
<div className="home-always-left">
<div className="home-always-badge"></div>
<div className="home-always-name">及时完成率</div>
</div>
</div> */}
<div style={{ flex: 1, height: "100%", padding: "0px" }}>
<div
id="timelyRate"
style={{
width: "100%",
height: "100%",
// minHeight: "180px",
}}
></div>
</div>
</div>
</Col>
<div style={{ width: "30px", minWidth: "30px" }}></div>
<Col
span={6}
style={{
backgroundColor: "#fff",
height: "100%",
padding: "0px",
borderRadius: "5px",
display: "flex",
flexDirection: "column",
minWidth: "466px",
}}
>
<div className="home-always-title">
<div className="home-always-left">
<div className="home-always-badge"></div>
<div className="home-always-name">我的常用功能</div>
</div>
{/* <Icon type="edit" className="home-always-icon"></Icon> */}
</div>
<div style={{ flex: 1, height: "100%", padding: "10px 20px" }}>
<Row style={{ height: "50%" }}>
<AllTech
icon={"icon-a-zu291"}
title={"排班明细"}
techClick={() => {
this.navToMenu("6dc35aee-dd5e-4b31-b7ca-5f62d337d0c1");
}}
/>
<AllTech
icon={"icon-a-zu196"}
title={"作业票"}
techClick={() => {
this.navToMenu("b3767117-f0aa-4122-97c1-2fc58fbaf934");
}}
/>
<AllTech
icon={"icon-a-zu185"}
title={"外包作业票"}
techClick={() => {
this.navToMenu("7a9b51b1-3d56-4199-b450-f9f5f9cc3235");
}}
/>
<AllTech
icon={"icon-a-zu65"}
title={"作业任务识别"}
techClick={() => {
this.navToMenu("2beef9b3-e4b9-4b0b-9e82-238c4bf3be5d");
}}
/>
</Row>
<Row style={{ height: "50%" }}>
<AllTech
icon={"icon-a-zu203"}
title={"检查任务制定"}
techClick={() => {
this.navToMenu("21b685c9-d298-4a14-9700-c9ab1bb8a918");
}}
/>
<AllTech
icon={"icon-a-zu181"}
title={"手动隐患上报"}
techClick={() => {
this.navToMenu("2e7835ef-0e5a-41b5-8bb7-ad9c64a6b2f4");
}}
/>
<AllTech
icon={"icon-a-zu198"}
title={"培训通知发起"}
techClick={() => {
this.navToMenu("818ab476-b29f-4db5-9393-fd13e1d2a565");
}}
/>
<AllTech
icon={"icon-a-zu196"}
title={"普通会议通知"}
techClick={() => {
this.navToMenu("800abe55-a2cf-4e23-a2b6-1caf2dca816c");
}}
/>
</Row>
</div>
</Col>
</Row>
<Row
gutter={12}
style={{
width: "100%",
height: "40%",
display: "flex",
padding: "0px 20px",
margin: "30px 0px",
justifyContent: "space-between",
alignItems: "center",
minHeight: "388px",
minWidth: "1704px",
// backgroundColor: "#fff",
}}
>
<Col
span={17}
style={{
backgroundColor: "#fff",
height: "100%",
display: "flex",
flexDirection: "column",
padding: "0px",
borderRadius: "5px",
flex: 1,
minWidth: "1168px",
}}
>
<div className="home-always-title">
<div className="home-always-left">
<div className="home-always-badge"></div>
<div className="home-always-name">我的工作</div>
</div>
{/* <Icon type="edit" className="home-always-icon"></Icon> */}
</div>
<div style={{ flex: 1, height: "100%", padding: "5px 0px" }}>
<Tabs defaultActiveKey="1" onChange={this.tabsCallback}>
<TabPane
tab={
<span className="home-job-title">
<Icon
type="schedule"
className="home-userInfo-Icon"
style={{ color: "#2177d5" }}
></Icon>
待办事项{" "}
</span>
}
key="1"
>
<div
style={{
display: "flex",
flexDirection: "column",
justifyContent: "space-between",
}}
>
{this.state.workData.length > 0 ? (
<WorkBench
data={this.state.workData}
index={1}
benchCLick={this.workClick}
/>
) : (
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
)}
</div>
</TabPane>
<TabPane
tab={
<span className="home-job-title">
<Icon
type="hourglass"
className="home-userInfo-Icon"
style={{ color: "#f76707" }}
></Icon>
待办超时
</span>
}
key="2"
>
<div
style={{
display: "flex",
flexDirection: "column",
justifyContent: "space-between",
}}
>
{this.state.workData.length > 0 ? (
<WorkBench
data={this.state.workData}
index={2}
benchCLick={this.workClick}
/>
) : (
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
)}
</div>
</TabPane>
<TabPane
tab={
<span className="home-job-title">
<Icon
type="check-circle"
className="home-userInfo-Icon"
style={{ color: "#48a447" }}
></Icon>
已办事项
</span>
}
key="3"
>
<div
style={{
display: "flex",
flexDirection: "column",
justifyContent: "space-between",
}}
>
{this.state.workData.length > 0 ? (
<WorkBench
data={this.state.workData}
index={3}
benchCLick={this.workClick}
/>
) : (
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
)}
</div>
</TabPane>
<TabPane
tab={
<span className="home-job-title">
<Icon
type="bulb"
className="home-userInfo-Icon"
style={{ color: "#fcc419" }}
></Icon>
今日提醒
</span>
}
key="4"
>
<div
style={{
display: "flex",
flexDirection: "column",
justifyContent: "space-between",
}}
>
{this.state.workData.length > 0 ? (
<WorkBench
data={this.state.workData}
index={4}
benchCLick={this.workClick}
/>
) : (
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
)}
</div>
</TabPane>
</Tabs>
</div>
</Col>
<div style={{ width: "30px", minWidth: "30px" }}></div>
<Col
span={6}
style={{
backgroundColor: "#fff",
height: "100%",
padding: "0px",
borderRadius: "5px",
display: "flex",
flexDirection: "column",
minWidth: "466px",
}}
>
<div className="home-always-title">
<div className="home-always-left">
<div className="home-always-badge"></div>
<div className="home-always-name">完成率排名</div>
</div>
{/* <Icon type="edit" className="home-always-icon"></Icon> */}
<div onClick={() => this.showDetailModal("BI001_HOMEDETAIL")}>
<IconFont
type="icon-24gl-expand2"
// style={{
// fontSize: "18px",
// color: "#333333",
// cursor: "pointer",
// }}
className="home-always-icon"
></IconFont>
</div>
</div>
<div
style={{
flex: 1,
height: "100%",
padding: "15px 20px 15px 50px",
}}
>
{this.state.completeName.map((item, index) => {
return (
<div className="home-rank">
{index == 0 ? (
<img
src={require("./../assets/home/4-1.png")}
className="home-img"
alt="4-1"
/>
) : index == 1 ? (
<img
src={require("./../assets/home/4-2.png")}
className="home-img"
alt="4-2"
/>
) : index == 2 ? (
<img
src={require("./../assets/home/4-3.png")}
className="home-img"
alt="4-3"
/>
) : (
<div className="home-rank-index">{index + 1}</div>
)}
<div className="home-rank-name">{item.name}</div>
<Progress
percent={item.value}
status="active"
style={{ width: "50%" }}
></Progress>
</div>
);
})}
</div>
</Col>
</Row>
<Row
gutter={12}
className="home-row"
style={{
margin: "0px 0px 10px 0px",
minHeight: "275px",
minWidth: "1704px",
}}
>
<Col
span={17}
style={{
height: "100%",
display: "flex",
flexDirection: "row",
padding: "0px",
borderRadius: "5px",
flex: 1,
}}
>
<div className="home-chart">
<div className="home-always-title">
<div className="home-always-left">
<div className="home-always-badge"></div>
<div className="home-always-name">安全检查次数统计</div>
</div>
<div onClick={() => this.showDetailModal("BI054_HOMEDETAIL")}>
<IconFont
type="icon-24gl-expand2"
// style={{
// fontSize: "18px",
// color: "#333333",
// cursor: "pointer",
// }}
className="home-always-icon"
></IconFont>
</div>
</div>
<div style={{ flex: 1, height: "100%", padding: "0px" }}>
<div
id="safeCheck"
style={{
width: "100%",
height: "100%",
// minHeight: "180px",
}}
></div>
</div>
</div>
<div style={{ width: "20px", minWidth: "20px" }}></div>
<div className="home-chart">
<div className="home-always-title">
<div className="home-always-left">
<div className="home-always-badge"></div>
<div className="home-always-name">月度隐患整改情况</div>
</div>
<div onClick={() => this.showDetailModal("BI055_HOMEDETAIL")}>
<IconFont
type="icon-24gl-expand2"
// style={{
// fontSize: "18px",
// color: "#333333",
// cursor: "pointer",
// }}
className="home-always-icon"
></IconFont>
</div>
</div>
<div style={{ flex: 1, height: "100%", padding: "0px" }}>
<div
id="dangerChange"
style={{
width: "100%",
height: "100%",
// minHeight: "180px",
}}
></div>
</div>
</div>
</Col>
<div style={{ width: "30px", minWidth: "30px" }}></div>
<Col
span={6}
style={{
backgroundColor: "#fff",
height: "100%",
padding: "0px",
borderRadius: "5px",
display: "flex",
flexDirection: "column",
minWidth: "466px",
}}
>
<div className="home-always-title">
<div className="home-always-left">
<div className="home-always-badge"></div>
<div className="home-always-name">风险等级占比</div>
</div>
<div
onClick={() =>
this.showDetailModal("BI013_RISKANALYSISMODEL")
}
>
<IconFont
type="icon-24gl-expand2"
// style={{
// fontSize: "18px",
// color: "#333333",
// cursor: "pointer",
// }}
className="home-always-icon"
></IconFont>
</div>
</div>
<div style={{ flex: 1, height: "100%", padding: "0px" }}>
<div
id="riskLevel"
style={{
width: "100%",
height: "100%",
// minHeight: "180px",
}}
></div>
</div>
</Col>
</Row>
</Col>
</div>
);
}
}
export default connect(({ login, app }) => ({ login, app }))(Home);