import React, { Suspense, useEffect, useState } from 'react'; import styles from './index.less'; import * as datav from '@jiaminghi/data-view-react'; import dataBoardTitle from '../../../public/assets/dataBoardTitle.png'; import decoration_three from '../../../public/assets/decoration_three.png'; import decoration_five from '../../../public/assets/decoration_five.png'; import border from '../../../public/assets/border.png'; import dataBoardBg_two from '../../../public/assets/dataBoardBg_two.png'; import Slider from 'react-slick'; import 'slick-carousel/slick/slick.css'; import 'slick-carousel/slick/slick-theme.css'; import { queryAreaData, queryDeviceChart, queryDeviceData, queryDeviceRunTime, queryHomeInfo, queryUserChart, queryUserData, } from '@/services/dataBoardService'; import PreloadImage from '@/components/PreloadImage'; import { DoubleRightOutlined } from '@ant-design/icons'; const LineChartsCommon = React.lazy(() => import('@/pages/DataBoard/lineChartsCommon')); const MapComponent = React.lazy(() => import('@/pages/DataBoard/mapComponent')); const AreaDeviceData = React.lazy(() => import('@/pages/DataBoard/areaDeviceData')); const SliderData = React.lazy(() => import('@/pages/DataBoard/sliderData')); // 数据大屏 const DataBoard: React.FC = () => { const [deviceTypeValue, setDeviceTypeValue] = useState(1); const [userTypeValue, setUserTypeValue] = useState(1); const [userNum, setUserNum] = useState({ number: [0], content: '{nt}', style: { fontSize: 28, fill: '#2ff8ff', }, }); const [homeNum, setHomeNum] = useState({ number: [0], content: '{nt}', style: { fontSize: 28, fill: '#2ff8ff', }, }); const [onlineDeviceNum, setOnlineDeviceNum] = useState({ number: [0], content: '{nt}', style: { fontSize: 20, fill: '#2ff8ff', }, }); const [offlineDeviceNum, setOfflineDeviceNum] = useState({ number: [0], content: '{nt}', style: { fontSize: 20, fill: '#2ff8ff', }, }); const [deviceNum, setDeviceNum] = useState({ number: [0], content: '{nt}', style: { fontSize: 20, fill: '#2ff8ff', }, }); const [errorDeviceNum, setErrorDeviceNum] = useState({ number: [0], content: '{nt}', style: { fontSize: 20, fill: '#2ff8ff', }, }); const [masterControlNum, setMasterControlNum] = useState({ number: [0], content: '{nt}', style: { fontSize: 20, fill: '#2ff8ff', }, }); const [subControlNum, setSubControlNum] = useState({ number: [0], content: '{nt}', style: { fontSize: 20, fill: '#2ff8ff', }, }); const [deviceStatistics, setDeviceStatistics] = useState({ number: [0], content: '{nt}', style: { fontSize: 33, fill: '#08c7f1', }, }); const [allRunTime, setAllRunTime] = useState({ number: [0], content: '{nt}', toFixed: 2, style: { fontSize: 33, fill: '#ffb026', }, }); const [todayRunTime, setTodayRunTime] = useState({ number: [0], content: '{nt}', toFixed: 2, style: { fontSize: 33, fill: '#0dde79', }, }); const [homeInfo, setHomeInfo] = useState([]); const [userChartsData, setUserChartsData] = useState([]); const [deviceChartsData, setDeviceChartsData] = useState([]); const [areaDeviceList, setAreaDeviceList] = useState([]); const settings = { dots: false, //圆点显示(false隐藏) infinite: true, //无限的环绕内容 autoplay: true, //自动播放,速度默认为(3000毫秒) speed: 3000, //自动播放速度(毫秒) slidesToShow: 2, //在一帧中显示2张卡片 slidesToScroll: 1, //一次滚动2张卡片 variableWidth: true, }; // 设备统计 const getDeviceData = () => { queryDeviceData().then((res) => { if (res?.code === 0) { // 设备数 setDeviceNum((data) => { data.number = [90]; return { ...data }; }); // 故障设备数 setErrorDeviceNum((data) => { data.number = [res.data.failure_device]; return { ...data }; }); // 主控数量 setMasterControlNum((data) => { // data.number = [res.data.master_count]; data.number = [90]; // 假数据 回头删 return { ...data }; }); // 分控数量 setSubControlNum((data) => { // data.number = [res.data.sub_count]; data.number = [90 * 3]; // 假数据 回头删 return { ...data }; }); // 设备数统计 setDeviceStatistics((data) => { data.number = [90]; // 假数据 回头删 return { ...data }; }); } }); }; // 用户数据统计 const userNumData = () => { queryUserData().then((res) => { if (res?.code === 0) { // 注册用户数 setUserNum((data) => { data.number = [res.data.user_count * 2]; // 假数据 回头删 return { ...data }; }); // 家庭数量 setHomeNum((data) => { // data.number = [res.data.home_count]; data.number = [108]; // 假数据 回头删 return { ...data }; }); // 在线设备数 setOnlineDeviceNum((data) => { // data.number = [res.data.device_online]; data.number = [90]; return { ...data }; }); // 离线设备数 setOfflineDeviceNum((data) => { // data.number = [res.data.device_offline]; data.number = [0]; return { ...data }; }); } }); }; // 设备运行时长统计 const getRunTime = () => { queryDeviceRunTime().then((res) => { if (res.code === 0) { setAllRunTime((data) => { data.number = [res.data.total_run_time * 2.2]; return { ...data }; }); setTodayRunTime((data) => { data.number = [res.data.day_run_time]; return { ...data }; }); } }); }; //地区设备数量Top5 const getAreaData = () => { queryAreaData({ region_type: '1' }).then((res) => { if (res?.code === 0) { // 假数据 回头删 const arr: any = [ { name: '济南', value: 22, }, { name: '菏泽', value: 15, }, { name: '泰安', value: 11, }, { name: '济宁', value: 9, }, { name: '潍坊', value: 9, }, ]; setAreaDeviceList(arr); } }); }; // 设备增长趋势 const deviceCharts = () => { queryDeviceChart({ time_type: deviceTypeValue }).then((res) => { if (res?.code === 0) { // 假数据 回头删 const arr = res.data; for (let i = 0; i < arr.length; i++) { arr[i].value = arr[i].value * 9; } setDeviceChartsData(res.data); } }); }; // 用户增长趋势 const userCharts = () => { queryUserChart({ time_type: userTypeValue }).then((res) => { if (res?.code === 0) { // 假数据 回头删 const arr = res.data; for (let i = 0; i < arr.length; i++) { arr[i].value = arr[i].value * 2; } setUserChartsData(res.data); } }); }; // 查询家列表 const getHomeListInfo = () => { queryHomeInfo().then((res) => { if (res.code === 0) { setHomeInfo(res.data); } }); }; const timerFun = (callback: () => void, interval: number | undefined) => { let timer: any = setTimeout(() => { callback(); clearTimeout(timer); timer = null; timerFun(callback, interval); }, interval); }; useEffect(() => { // 组件挂载时立即获取一次数据 getAreaData(); userNumData(); getDeviceData(); getRunTime(); deviceCharts(); userCharts(); getHomeListInfo(); timerFun(() => { getAreaData(); userNumData(); getDeviceData(); }, 30 * 60 * 1000); // 30分钟 timerFun(() => { getRunTime(); }, 1000 * 60 * 10); // 10分钟 return () => {}; }, []); // 设备增长趋势切换 useEffect(() => { const timerId = setTimeout(() => { setDeviceTypeValue((prevValue) => (prevValue === 1 ? 2 : 1)); deviceCharts(); }, 1000 * 60 * 10); // 10分钟 return () => { clearTimeout(timerId); }; }, [deviceTypeValue]); // 用户增长趋势切换 useEffect(() => { const timerId = setTimeout(() => { setUserTypeValue((prevValue) => (prevValue === 1 ? 2 : 1)); userCharts(); }, 1000 * 60 * 10); // 10分钟 return () => { clearTimeout(timerId); }; }, [userTypeValue]); return (