import React, { Fragment, useState, useEffect } from 'react'; import { Button, ButtonGroup, Card, CardBody, Col, CustomInput, CardTitle, CardText, Form, FormGroup, Input, Label, Row, Table, Spinner, Nav, NavItem, NavLink, TabContent, TabPane } from 'reactstrap'; import Cascader from 'rc-cascader'; import FalconCardHeader from '../../common/FalconCardHeader'; import MultipleLineChart from '../common/MultipleLineChart'; import SectionLineChart from '../common/SectionLineChart'; import { getCookieValue, createCookie, checkEmpty } from '../../../helpers/utils'; import withRedirect from '../../../hoc/withRedirect'; import { withTranslation } from 'react-i18next'; import { toast } from 'react-toastify'; import { v4 as uuidv4 } from 'uuid'; import { APIBaseURL, settings } from '../../../config'; import useInterval from '../../../hooks/useInterval'; import { useLocation } from 'react-router-dom'; import Datetime from 'react-datetime'; import classNames from 'classnames'; const EnergyStoragePowerStationDetails = ({ setRedirect, setRedirectUrl, t }) => { const location = useLocation(); const uuid = location.search.split('=')[1]; const energyStoragePowerStationUUID = location.search.split('=')[1]; useEffect(() => { let is_logged_in = getCookieValue('is_logged_in'); let user_name = getCookieValue('user_name'); let user_display_name = getCookieValue('user_display_name'); let user_uuid = getCookieValue('user_uuid'); let token = getCookieValue('token'); if (checkEmpty(is_logged_in) || checkEmpty(token) || checkEmpty(user_uuid) || !is_logged_in) { setRedirectUrl(`/authentication/basic/login`); setRedirect(true); } else { //update expires time of cookies createCookie('is_logged_in', true, settings.cookieExpireTime); createCookie('user_name', user_name, settings.cookieExpireTime); createCookie('user_display_name', user_display_name, settings.cookieExpireTime); createCookie('user_uuid', user_uuid, settings.cookieExpireTime); createCookie('token', token, settings.cookieExpireTime); } }); useEffect(() => { let timer = setInterval(() => { let is_logged_in = getCookieValue('is_logged_in'); if (is_logged_in === null || !is_logged_in) { setRedirectUrl(`/authentication/basic/login`); setRedirect(true); } }, 1000); return () => clearInterval(timer); }, [setRedirect, setRedirectUrl]); const [activeTabLeft, setActiveTabLeft] = useState('1'); const toggleTabLeft = tab => { if (activeTabLeft !== tab) setActiveTabLeft(tab); }; const [activeTabRight, setActiveTabRight] = useState('1'); const toggleTabRight = tab => { if (activeTabRight !== tab) setActiveTabRight(tab); }; const [activeTabBottom, setActiveTabBottom] = useState('1'); const toggleTabBottom = tab => { if (activeTabBottom !== tab) setActiveTabBottom(tab); }; // State const [selectedSpaceName, setSelectedSpaceName] = useState(undefined); const [selectedSpaceID, setSelectedSpaceID] = useState(undefined); const [stationList, setStationList] = useState([]); const [filteredStationList, setFilteredStationList] = useState([]); const [selectedStation, setSelectedStation] = useState(undefined); const [cascaderOptions, setCascaderOptions] = useState(undefined); // buttons const [submitButtonDisabled, setSubmitButtonDisabled] = useState(true); const [spinnerHidden, setSpinnerHidden] = useState(true); const [spaceCascaderHidden, setSpaceCascaderHidden] = useState(false); //Results const [energyStoragePowerStationName, setEnergyStoragePowerStationName] = useState(); const [energyStoragePowerStationAddress, setEnergyStoragePowerStationAddress] = useState(); const [energyStoragePowerStationPostalCode, setEnergyStoragePowerStationPostalCode] = useState(); const [energyStoragePowerStationRatedCapacity, setEnergyStoragePowerStationRatedCapacity] = useState(); const [energyStoragePowerStationRatedPower, setEnergyStoragePowerStationRatedPower] = useState(); const [energyStoragePowerStationSVG, setEnergyStoragePowerStationSVG] = useState(); const [parameterLineChartLabels, setParameterLineChartLabels] = useState([]); const [parameterLineChartData, setParameterLineChartData] = useState({}); const [parameterLineChartOptions, setParameterLineChartOptions] = useState([]); useEffect(() => { console.log("uuid:"); console.log(uuid); if (uuid === null || !uuid) { let isResponseOK = false; setSpaceCascaderHidden(false); fetch(APIBaseURL + '/spaces/tree', { method: 'GET', headers: { 'Content-type': 'application/json', 'User-UUID': getCookieValue('user_uuid'), Token: getCookieValue('token') }, body: null }) .then(response => { console.log(response); if (response.ok) { isResponseOK = true; } return response.json(); }) .then(json => { console.log(json); if (isResponseOK) { // rename keys json = JSON.parse( JSON.stringify([json]) .split('"id":') .join('"value":') .split('"name":') .join('"label":') ); setCascaderOptions(json); setSelectedSpaceName([json[0]].map(o => o.label)); setSelectedSpaceID([json[0]].map(o => o.value)); // get Energy Storage Power Stations by root Space ID let isResponseOK = false; fetch(APIBaseURL + '/spaces/' + [json[0]].map(o => o.value) + '/energystoragepowerstations', { method: 'GET', headers: { 'Content-type': 'application/json', 'User-UUID': getCookieValue('user_uuid'), Token: getCookieValue('token') }, body: null }) .then(response => { if (response.ok) { isResponseOK = true; } return response.json(); }) .then(json => { if (isResponseOK) { json = JSON.parse( JSON.stringify([json]) .split('"id":') .join('"value":') .split('"name":') .join('"label":') ); console.log(json); setStationList(json[0]); setFilteredStationList(json[0]); if (json[0].length > 0) { setSelectedStation(json[0][0].value); // enable submit button setSubmitButtonDisabled(false); } else { setSelectedStation(undefined); // disable submit button setSubmitButtonDisabled(true); } } else { toast.error(t(json.description)); } }) .catch(err => { console.log(err); }); // end of get Energy Storage Power Stations by root Space ID } else { toast.error(t(json.description)); } }) .catch(err => { console.log(err); }); } else { setSpaceCascaderHidden(true); loadData(APIBaseURL + '/reports/energystoragepowerstationdetails?uuid=' + energyStoragePowerStationUUID) } }, [energyStoragePowerStationUUID]); const loadData = url => { console.log('url:' + url); let isResponseOK = false; fetch(url, { method: 'GET', headers: { 'Content-type': 'application/json', 'User-UUID': getCookieValue('user_uuid'), Token: getCookieValue('token') }, body: null }) .then(response => { if (response.ok) { isResponseOK = true; } return response.json(); }) .then(json => { if (isResponseOK) { console.log(json); if (uuid !== null && uuid) { setFilteredStationList([{ id: json['energy_storage_power_station']['id'], label: json['energy_storage_power_station']['name'] }]); setSelectedStation(json['energy_storage_power_station']['id']); } setEnergyStoragePowerStationName(json['energy_storage_power_station']['name']); setEnergyStoragePowerStationAddress(json['energy_storage_power_station']['address']); setEnergyStoragePowerStationPostalCode(json['energy_storage_power_station']['postal_code']); setEnergyStoragePowerStationRatedCapacity(json['energy_storage_power_station']['rated_capacity']); setEnergyStoragePowerStationRatedPower(json['energy_storage_power_station']['rated_power']); setEnergyStoragePowerStationSVG({ __html: json['energy_storage_power_station']['svg'] }); let timestamps = {}; json['parameters']['timestamps'].forEach((currentValue, index) => { timestamps['a' + index] = currentValue; }); setParameterLineChartLabels(timestamps); let values = {}; json['parameters']['values'].forEach((currentValue, index) => { values['a' + index] = currentValue; }); setParameterLineChartData(values); let names = []; json['parameters']['names'].forEach((currentValue, index) => { names.push({ value: 'a' + index, label: currentValue }); }); setParameterLineChartOptions(names); } }) .catch(err => { console.log(err); }); } const labelClasses = 'ls text-uppercase text-600 font-weight-semi-bold mb-0'; let onSpaceCascaderChange = (value, selectedOptions) => { setSelectedSpaceName(selectedOptions.map(o => o.label).join('/')); setSelectedSpaceID(value[value.length - 1]); let isResponseOK = false; fetch(APIBaseURL + '/spaces/' + value[value.length - 1] + '/energystoragepowerstations', { method: 'GET', headers: { 'Content-type': 'application/json', 'User-UUID': getCookieValue('user_uuid'), Token: getCookieValue('token') }, body: null }) .then(response => { if (response.ok) { isResponseOK = true; } return response.json(); }) .then(json => { if (isResponseOK) { json = JSON.parse( JSON.stringify([json]) .split('"id":') .join('"value":') .split('"name":') .join('"label":') ); console.log(json); setStationList(json[0]); setFilteredStationList(json[0]); if (json[0].length > 0) { setSelectedStation(json[0][0].value); // enable submit button setSubmitButtonDisabled(false); } else { setSelectedStation(undefined); // disable submit button setSubmitButtonDisabled(true); } } else { toast.error(t(json.description)); } }) .catch(err => { console.log(err); }); }; // Handler const handleSubmit = e => { e.preventDefault(); loadData(APIBaseURL + '/reports/energystoragepowerstationdetails?id=' + selectedStation); }; const refreshSVGData = () => { let isResponseOK = false; fetch(APIBaseURL + '/reports/pointrealtime', { method: 'GET', headers: { 'Content-type': 'application/json', 'User-UUID': getCookieValue('user_uuid'), Token: getCookieValue('token') }, body: null }) .then(response => { if (response.ok) { isResponseOK = true; } return response.json(); }) .then(json => { if (isResponseOK) { console.log(json); json.forEach(currentPoint => { let textElement = document.getElementById('PT' + currentPoint['point_id']); if (textElement) { textElement.textContent = parseFloat(currentPoint['value']).toFixed(2); } let circleElement = document.getElementById('CIRCLE' + currentPoint['point_id']); if (circleElement) { if (currentPoint['value'] > 0) { circleElement.className.baseVal = 'flow'; } else if (currentPoint['value'] < 0) { circleElement.className.baseVal = 'flow-reverse'; } else { circleElement.className.baseVal = ''; } } }); } }) .catch(err => { console.log(err); }); }; useInterval(() => { refreshSVGData(); }, 1000 * 10); return (
setSelectedStation(target.value)} > {filteredStationList.map((station, index) => ( ))}
今日充电量 0 kWh
今日放电量 0 kWh
累计充电量 0 kWh
累计放电量 0 kWh
综合效率 0%
放电达成率 0%
今日成本 0 元
今日收入 0 元
累计成本 0 元
累计收入 0 元
今日盈利 0 元
累计盈利 0 元
今日充电量 0 kWh
今日放电量 0 kWh
累计充电量 0 kWh
累计放电量 0 kWh
综合效率 0%
放电达成率 0%
通信网关 正常
1# PCS 正常
1#电池堆 正常
1#空调 正常
1#网关表 正常
1#用户表 正常
{t('Name')} {energyStoragePowerStationName}
{t('Address')} {energyStoragePowerStationAddress}
{t('Postal Code')} {energyStoragePowerStationPostalCode}
{t('Rated Capacity')} {energyStoragePowerStationRatedCapacity} kW
{t('Rated Power')} {energyStoragePowerStationRatedPower} kW
# 主题 内容 创建时间 开始时间 结束时间 状态 更新时间
1
2
3
4
# 主题 内容 创建时间 开始时间 结束时间 状态 更新时间
1
2
3
4
# 主题 内容 创建时间 开始时间 结束时间 状态 更新时间
1
2
3
4
# 主题 内容 创建时间 开始时间 结束时间 状态 更新时间
1
2
3
4
# 主题 内容 创建时间 开始时间 结束时间 状态 更新时间
1
2
3
4
# 主题 内容 创建时间 开始时间 结束时间 状态 更新时间
1
2
3
4
); }; export default withTranslation()(withRedirect(EnergyStoragePowerStationDetails));