From 946c386ff27df3cdc9e758cff1a683cf5bc5b33f Mon Sep 17 00:00:00 2001 From: hyh123a Date: Thu, 21 Apr 2022 15:01:56 +0800 Subject: [PATCH 01/22] add the svg aapi --- myems-api/app.py | 7 +- myems-api/config.py | 20 +++--- myems-api/core/svg.py | 149 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 165 insertions(+), 11 deletions(-) create mode 100644 myems-api/core/svg.py diff --git a/myems-api/app.py b/myems-api/app.py index 0669b905..e766ff86 100644 --- a/myems-api/app.py +++ b/myems-api/app.py @@ -5,7 +5,7 @@ from core import energyflowdiagram, privilege, textmessage, distributioncircuit, costcenter, point, knowledgefile, meter, tariff, user, storetype, timezone, \ costfile, offlinemeterfile, version, contact, emailserver, combinedequipment, datasource, equipment, tenant, \ shopfloor, webmessage, distributionsystem, store, emailmessage, tenanttype, wechatmessage, space, gateway, \ - offlinemeter, rule, energycategory, sensor, energyitem, notification, menu + offlinemeter, rule, energycategory, sensor, energyitem, notification, menu, svg from reports import advancedreport from reports import distributionsystem as distributionsystemreport from reports import energyflowdiagram as energyflowdiagramreport @@ -414,6 +414,11 @@ api.add_route('/tariffs', api.add_route('/tariffs/{id_}', tariff.TariffItem()) +api.add_route('/svgs', + svg.Collection()) +api.add_route('/svgs/{id_}', + svg.Item()) + api.add_route('/tenants', tenant.TenantCollection()) api.add_route('/tenants/{id_}', diff --git a/myems-api/config.py b/myems-api/config.py index 3e697d6a..61ff1196 100644 --- a/myems-api/config.py +++ b/myems-api/config.py @@ -6,7 +6,7 @@ myems_system_db = { 'port': config('MYEMS_SYSTEM_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_SYSTEM_DB_DATABASE', default='myems_system_db'), 'user': config('MYEMS_SYSTEM_DB_USER', default='root'), - 'password': config('MYEMS_SYSTEM_DB_PASSWORD', default='!MyEMS1'), + 'password': config('MYEMS_SYSTEM_DB_PASSWORD', default=''), } myems_energy_db = { @@ -14,7 +14,7 @@ myems_energy_db = { 'port': config('MYEMS_ENERGY_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_ENERGY_DB_DATABASE', default='myems_energy_db'), 'user': config('MYEMS_ENERGY_DB_USER', default='root'), - 'password': config('MYEMS_ENERGY_DB_PASSWORD', default='!MyEMS1'), + 'password': config('MYEMS_ENERGY_DB_PASSWORD', default=''), } myems_energy_baseline_db = { @@ -22,7 +22,7 @@ myems_energy_baseline_db = { 'port': config('MYEMS_ENERGY_BASELINE_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_ENERGY_BASELINE_DB_DATABASE', default='myems_energy_baseline_db'), 'user': config('MYEMS_ENERGY_BASELINE_DB_USER', default='root'), - 'password': config('MYEMS_ENERGY_BASELINE_DB_PASSWORD', default='!MyEMS1'), + 'password': config('MYEMS_ENERGY_BASELINE_DB_PASSWORD', default=''), } myems_billing_db = { @@ -30,7 +30,7 @@ myems_billing_db = { 'port': config('MYEMS_BILLING_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_BILLING_DB_DATABASE', default='myems_billing_db'), 'user': config('MYEMS_BILLING_DB_USER', default='root'), - 'password': config('MYEMS_BILLING_DB_PASSWORD', default='!MyEMS1'), + 'password': config('MYEMS_BILLING_DB_PASSWORD', default=''), } myems_billing_baseline_db = { @@ -38,7 +38,7 @@ myems_billing_baseline_db = { 'port': config('MYEMS_BILLING_BASELINE_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_BILLING_BASELINE_DB_DATABASE', default='myems_billing_baseline_db'), 'user': config('MYEMS_BILLING_BASELINE_DB_USER', default='root'), - 'password': config('MYEMS_BILLING_BASELINE_DB_PASSWORD', default='!MyEMS1'), + 'password': config('MYEMS_BILLING_BASELINE_DB_PASSWORD', default=''), } myems_historical_db = { @@ -46,7 +46,7 @@ myems_historical_db = { 'port': config('MYEMS_HISTORICAL_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_HISTORICAL_DB_DATABASE', default='myems_historical_db'), 'user': config('MYEMS_HISTORICAL_DB_USER', default='root'), - 'password': config('MYEMS_HISTORICAL_DB_PASSWORD', default='!MyEMS1'), + 'password': config('MYEMS_HISTORICAL_DB_PASSWORD', default=''), } myems_user_db = { @@ -54,7 +54,7 @@ myems_user_db = { 'port': config('MYEMS_USER_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_USER_DB_DATABASE', default='myems_user_db'), 'user': config('MYEMS_USER_DB_USER', default='root'), - 'password': config('MYEMS_USER_DB_PASSWORD', default='!MyEMS1'), + 'password': config('MYEMS_USER_DB_PASSWORD', default=''), } myems_fdd_db = { @@ -62,7 +62,7 @@ myems_fdd_db = { 'port': config('MYEMS_FDD_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_FDD_DB_DATABASE', default='myems_fdd_db'), 'user': config('MYEMS_FDD_DB_USER', default='root'), - 'password': config('MYEMS_FDD_DB_PASSWORD', default='!MyEMS1'), + 'password': config('MYEMS_FDD_DB_PASSWORD', default=''), } myems_reporting_db = { @@ -70,7 +70,7 @@ myems_reporting_db = { 'port': config('MYEMS_REPORTING_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_REPORTING_DB_DATABASE', default='myems_reporting_db'), 'user': config('MYEMS_REPORTING_DB_USER', default='root'), - 'password': config('MYEMS_REPORTING_DB_PASSWORD', default='!MyEMS1'), + 'password': config('MYEMS_REPORTING_DB_PASSWORD', default=''), } myems_carbon_db = { @@ -78,7 +78,7 @@ myems_carbon_db = { 'port': config('MYEMS_CARBON_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_CARBON_DB_DATABASE', default='myems_carbon_db'), 'user': config('MYEMS_CARBON_DB_USER', default='root'), - 'password': config('MYEMS_CARBON_DB_PASSWORD', default='!MyEMS1'), + 'password': config('MYEMS_CARBON_DB_PASSWORD', default=''), } # indicated in how many minutes to calculate meter energy consumption diff --git a/myems-api/core/svg.py b/myems-api/core/svg.py new file mode 100644 index 00000000..b8541cb9 --- /dev/null +++ b/myems-api/core/svg.py @@ -0,0 +1,149 @@ +import falcon +import simplejson as json +import mysql.connector +import config +from core.useractivity import user_logger, access_control + + +class Collection: + @staticmethod + def __init__(): + """"Initializes svgCollection""" + pass + + @staticmethod + def on_options(req, resp): + resp.status = falcon.HTTP_200 + + @staticmethod + def on_get(req, resp): + cnx = mysql.connector.connect(**config.myems_system_db) + cursor = cnx.cursor(dictionary=True) + + query = (" SELECT id, name, content " + " FROM tbl_svgs " + " ORDER BY id ") + cursor.execute(query) + rows_svgs = cursor.fetchall() + + result = list() + if rows_svgs is not None and len(rows_svgs) > 0: + for row in rows_svgs: + temp = {"id": row['id'], + "name": row['name'], + "content": row['content']} + + result.append(temp) + + cursor.close() + cnx.disconnect() + resp.text = json.dumps(result) + + +class Item: + @staticmethod + def __init__(): + """"Initializes svgItem""" + pass + + @staticmethod + def on_options(req, resp, id_): + resp.status = falcon.HTTP_200 + + @staticmethod + def on_get(req, resp, id_): + if not id_.isdigit() or int(id_) <= 0: + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', + description='API.INVALID_svg_ID') + + cnx = mysql.connector.connect(**config.myems_system_db) + cursor = cnx.cursor(dictionary=True) + + query = (" SELECT id, name, content " + " FROM tbl_svgs " + " WHERE id=%s ") + cursor.execute(query, (id_,)) + rows_svg = cursor.fetchone() + + result = None + if rows_svg is not None and len(rows_svg) > 0: + result = {"id": rows_svg['id'], + "name": rows_svg['name'], + "content": rows_svg['content']} + else: + cursor.close() + cnx.disconnect() + resp.text = json.dumps(result) + + query = (" SELECT id, svg_id, point_id, point_icon, point_x, point_y, meter_type, meter_id, meter_name, func" + " FROM tbl_svg_points " + " WHERE svg_id=%s ") + cursor.execute(query, (id_,)) + rows_point = cursor.fetchall() + + add_svg = "" + if rows_point is not None and len(rows_point) > 0: + for row in rows_point: + print("row", row) + add_svg = add_svg + \ + ' \n'. \ + format(point_id=row['point_id'], + point_icon=row['point_icon'], + point_x=row['point_x'], + point_y=row['point_y'], + func=row['func'], + meter_type=row['meter_type'], + meter_id=row['meter_id'], + meter_name=row['meter_name'], + ) + + result['content'] = result['content'].replace("Template", add_svg) + else: + result['content'] = result['content'].replace("TEMPLATE", "") + + cursor.close() + cnx.disconnect() + resp.text = json.dumps(result) + + @staticmethod + @user_logger + def on_put(req, resp, id_): + """Handles PUT requests""" + access_control(req) + try: + raw_json = req.stream.read().decode('utf-8') + except Exception as ex: + raise falcon.HTTPError(falcon.HTTP_400, title='API.EXCEPTION', description=ex) + + if not id_.isdigit() or int(id_) <= 0: + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', + description='API.INVALID_svg_ID') + + new_values = json.loads(raw_json) + + if 'name' not in new_values['data'].keys() or \ + not isinstance(new_values['data']['name'], str): + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', + description='API.INVALID_NAME') + if 'content' not in new_values['data'].keys() or \ + not isinstance(new_values['data']['content'], str): + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', + description='API.INVALID_CONTENT') + + name = new_values['data']['name'] + content = new_values['data']['content'] + + cnx = mysql.connector.connect(**config.myems_system_db) + cursor = cnx.cursor() + update_row = (" UPDATE tbl_svgs " + " SET name = %s, content = %s " + " WHERE id = %s ") + cursor.execute(update_row, (name, + content, + id_)) + cnx.commit() + + cursor.close() + cnx.disconnect() + + resp.status = falcon.HTTP_200 From dfe4ef2bafe338f9ac98baa37a52647fe6b9e4bd Mon Sep 17 00:00:00 2001 From: hyh123a Date: Thu, 21 Apr 2022 15:16:40 +0800 Subject: [PATCH 02/22] add the svg router --- .../MyEMS/AuxiliarySystem/SvgSystem.js | 166 ++++++++++++++++++ myems-web/src/config.js | 4 +- myems-web/src/layouts/MyEMSRoutes.js | 2 + myems-web/src/routes.js | 3 +- 4 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js new file mode 100644 index 00000000..f9c11e97 --- /dev/null +++ b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js @@ -0,0 +1,166 @@ +import React, { createRef, Fragment, useState, useEffect } from 'react'; +import { + Breadcrumb, + BreadcrumbItem, + Card, + CardBody, + Col, + CustomInput, + Form, + FormGroup, + Label, + Row, + Spinner, +} from 'reactstrap'; +import RealtimeChart from './RealtimeChart'; +import { getCookieValue, createCookie } from '../../../helpers/utils'; +import withRedirect from '../../../hoc/withRedirect'; +import { withTranslation } from 'react-i18next'; +import uuid from 'uuid/v1'; +import { toast } from 'react-toastify'; +import { APIBaseURL } from '../../../config'; + + +const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { + + 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 (is_logged_in === null || !is_logged_in) { + setRedirectUrl(`/authentication/basic/login`); + setRedirect(true); + } else { + //update expires time of cookies + createCookie('is_logged_in', true, 1000 * 60 * 60 * 8); + createCookie('user_name', user_name, 1000 * 60 * 60 * 8); + createCookie('user_display_name', user_display_name, 1000 * 60 * 60 * 8); + createCookie('user_uuid', user_uuid, 1000 * 60 * 60 * 8); + createCookie('token', token, 1000 * 60 * 60 * 8); + } + }); + let table = createRef(); + // State + // Query Parameters + const [distributionSystemList, setSvgSystemList] = useState([]); + const [selectedSvgSystemName, setSelectedSvgSystemName] = useState(undefined); + const [selectedSvgSystemID, setSelectedSvgSystemID] = useState(undefined); + + //Results + const [images, setImages] = useState([]); + const [spinnerHidden, setSpinnerHidden] = useState(false); + + useEffect(() => { + let isResponseOK = false; + fetch(APIBaseURL + '/distributionsystems', { + 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":')); + + console.log(json); + setSvgSystemList(json); + setSelectedSvgSystemID([json[0]].map(o => o.value)); + setSelectedSvgSystemName([json[0]].map(o => o.label)); + + let images = {}; + json.forEach((currentValue, index) => { + images[currentValue['value']] = {__html: currentValue['svg']} + }); + setImages(images); + setSpinnerHidden(true); + } else { + toast.error(json.description); + } + }).catch(err => { + console.log(err); + }); + + }, []); + + const labelClasses = 'ls text-uppercase text-600 font-weight-semi-bold mb-0'; + + let onSvgSystemChange = (event) => { + setSelectedSvgSystemID(event.target.value); + distributionSystemList.forEach((currentItem, index) => { + if (currentItem['value'] === event.target.value) { + setSelectedSvgSystemName(currentItem['label']); + } + }); + + } + + + return ( + +
+ + {t('Auxiliary System')}{t('Distribution System')} + +
+ + +
+ + + + + + {distributionSystemList.map((distributionSystem, index) => ( + + ))} + + + + + +

+
+ +
+
+
+
+ + + + + + + +
+ + + + + ); +}; + +export default withTranslation()(withRedirect(SvgSystem)); diff --git a/myems-web/src/config.js b/myems-web/src/config.js index 942799f5..5f7ab368 100644 --- a/myems-web/src/config.js +++ b/myems-web/src/config.js @@ -1,8 +1,8 @@ export const version = '1.9.0'; export const navbarBreakPoint = 'xl'; // Vertical navbar breakpoint export const topNavbarBreakpoint = 'lg'; -//export const APIBaseURL = 'http://127.0.0.1:8000'; -export const APIBaseURL = window.location.protocol+"//"+window.location.hostname+":"+window.location.port+"/api"; +export const APIBaseURL = 'http://127.0.0.1:8000'; +// export const APIBaseURL = window.location.protocol+"//"+window.location.hostname+":"+window.location.port+"/api"; export const settings = { isFluid: true, isRTL: false, diff --git a/myems-web/src/layouts/MyEMSRoutes.js b/myems-web/src/layouts/MyEMSRoutes.js index 23f38bfb..6ab4fa13 100644 --- a/myems-web/src/layouts/MyEMSRoutes.js +++ b/myems-web/src/layouts/MyEMSRoutes.js @@ -196,6 +196,7 @@ import AdvancedReporting from '../components/MyEMS/AdvancedReporting/AdvancedRep import KnowledgeBase from '../components/MyEMS/KnowledgeBase/KnowledgeBase'; // Notification import Notification from '../components/MyEMS/Notification/Notification'; +import SvgSystem from '../components/MyEMS/AuxiliarySystem/SvgSystem'; // const InboxRoutes = ({ match: { url } }) => ( // @@ -422,6 +423,7 @@ const MyEMSRoutes = () => ( {/*Auxiliary System*/} + {/*FDD*/} diff --git a/myems-web/src/routes.js b/myems-web/src/routes.js index 61795c27..ee8e238b 100644 --- a/myems-web/src/routes.js +++ b/myems-web/src/routes.js @@ -443,7 +443,8 @@ export const auxiliarySystemRoutes = { icon: 'chart-pie', children: [ { to: '/auxiliarysystem/energyflowdiagram', name: 'Energy Flow Diagram' }, - { to: '/auxiliarysystem/distributionsystem', name: 'Distribution System' } + { to: '/auxiliarysystem/distributionsystem', name: 'Distribution System' }, + { to: '/auxiliarysystem/svgsystem', name: 'Svg System' } ] }; From ca9f6cee961a8b8924fd38344850e72943d6377a Mon Sep 17 00:00:00 2001 From: hyh123a Date: Thu, 21 Apr 2022 16:19:46 +0800 Subject: [PATCH 03/22] add the svg page --- myems-web/src/assets/img/meter.png | Bin 0 -> 3448 bytes .../MyEMS/AuxiliarySystem/SvgSystem.js | 191 +++++++++++------- 2 files changed, 118 insertions(+), 73 deletions(-) create mode 100644 myems-web/src/assets/img/meter.png diff --git a/myems-web/src/assets/img/meter.png b/myems-web/src/assets/img/meter.png new file mode 100644 index 0000000000000000000000000000000000000000..c0d6f7b6fb94a5008367e937d3d8982d758987b8 GIT binary patch literal 3448 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 literal 0 HcmV?d00001 diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js index f9c11e97..655bb2c2 100644 --- a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js +++ b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js @@ -10,7 +10,7 @@ import { FormGroup, Label, Row, - Spinner, + Spinner } from 'reactstrap'; import RealtimeChart from './RealtimeChart'; import { getCookieValue, createCookie } from '../../../helpers/utils'; @@ -19,10 +19,9 @@ import { withTranslation } from 'react-i18next'; import uuid from 'uuid/v1'; import { toast } from 'react-toastify'; import { APIBaseURL } from '../../../config'; - +import ButtonIcon from '../../common/ButtonIcon'; const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { - useEffect(() => { let is_logged_in = getCookieValue('is_logged_in'); let user_name = getCookieValue('user_name'); @@ -42,94 +41,143 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { } }); let table = createRef(); - // State + // Svg List + const [svgSystemList, setSvgSystemList] = useState([]); + + // Svg Content + const [svgSystemContent, setSvgSystemContent] = useState(undefined); + const [svgSystemContentDict, setSvgSystemContentDict] = useState(undefined); + // Query Parameters - const [distributionSystemList, setSvgSystemList] = useState([]); - const [selectedSvgSystemName, setSelectedSvgSystemName] = useState(undefined); const [selectedSvgSystemID, setSelectedSvgSystemID] = useState(undefined); - + //Results const [images, setImages] = useState([]); const [spinnerHidden, setSpinnerHidden] = useState(false); useEffect(() => { let isResponseOK = false; - fetch(APIBaseURL + '/distributionsystems', { + fetch(APIBaseURL + '/svgs', { method: 'GET', headers: { - "Content-type": "application/json", - "User-UUID": getCookieValue('user_uuid'), - "Token": getCookieValue('token') + '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":')); - + body: null + }) + .then(response => { + console.log(response); + if (response.ok) { + isResponseOK = true; + } + return response.json(); + }) + .then(json => { console.log(json); - setSvgSystemList(json); - setSelectedSvgSystemID([json[0]].map(o => o.value)); - setSelectedSvgSystemName([json[0]].map(o => o.label)); - - let images = {}; - json.forEach((currentValue, index) => { - images[currentValue['value']] = {__html: currentValue['svg']} - }); - setImages(images); - setSpinnerHidden(true); - } else { - toast.error(json.description); - } - }).catch(err => { - console.log(err); - }); - + if (isResponseOK) { + console.log('svgs', json); + setSvgSystemList(json); + setSelectedSvgSystemID(json[0].id); + getSvgContent(json[0].id); + } else { + toast.error(json.description); + } + }) + .catch(err => { + console.log(err); + }); }, []); const labelClasses = 'ls text-uppercase text-600 font-weight-semi-bold mb-0'; - let onSvgSystemChange = (event) => { + let onSvgSystemChange = event => { setSelectedSvgSystemID(event.target.value); - distributionSystemList.forEach((currentItem, index) => { - if (currentItem['value'] === event.target.value) { - setSelectedSvgSystemName(currentItem['label']); - } - }); - - } + console.log('onSvgSystemChange ID', event.target.value); + // Get Svg Content + getSvgContent(event.target.value); + }; + + const getSvgContent = svgId => { + let isResponseOK = false; + fetch(APIBaseURL + '/svgs/' + svgId, { + 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) { + console.log('getSvgContent', json.content); + setSvgSystemContent(json.content); + setSvgSystemContentDict({__html: json.content}); + } else { + toast.error(json.description); + } + }) + .catch(err => { + console.log(err); + }); + }; + const viewSvg = () => { + getSvgContent(selectedSvgSystemID); + }; + + useEffect(() => { + console.log('svgSystemList', svgSystemList); + }, [svgSystemList]); + + useEffect(() => { + console.log('svgSystemContent', svgSystemContent); + }, [svgSystemContent]); + + useEffect(() => { + console.log('selectedSvgSystemID', selectedSvgSystemID); + }, [selectedSvgSystemID]); + + useEffect(() => { + console.log('svgSystemContentDict', svgSystemContentDict); + }, [svgSystemContentDict]); return (
- {t('Auxiliary System')}{t('Distribution System')} + {t('Auxiliary System')} + {t('Svg System')}
-
+ - + +
+ + {t('View')} + +
- - - + +
- - -
- - ); From 5746cc5a60f608feb2a34da9fba697caa9279521 Mon Sep 17 00:00:00 2001 From: hyh123a Date: Thu, 21 Apr 2022 19:20:21 +0800 Subject: [PATCH 04/22] modify the svg --- myems-api/core/svg.py | 29 +- myems-web/package-lock.json | 589 ++++++++++++++++-- myems-web/package.json | 9 +- .../components/MyEMS/AuxiliarySystem/1.svg | 20 + .../MyEMS/AuxiliarySystem/SvgSystem.js | 22 + .../MyEMS/AuxiliarySystem/meter.png | Bin 0 -> 3448 bytes 6 files changed, 611 insertions(+), 58 deletions(-) create mode 100644 myems-web/src/components/MyEMS/AuxiliarySystem/1.svg create mode 100644 myems-web/src/components/MyEMS/AuxiliarySystem/meter.png diff --git a/myems-api/core/svg.py b/myems-api/core/svg.py index b8541cb9..f0080470 100644 --- a/myems-api/core/svg.py +++ b/myems-api/core/svg.py @@ -86,21 +86,46 @@ class Item: for row in rows_point: print("row", row) add_svg = add_svg + \ - ' \n'. \ + ' \n'. \ format(point_id=row['point_id'], point_icon=row['point_icon'], point_x=row['point_x'], point_y=row['point_y'], - func=row['func'], + func= row['func'], meter_type=row['meter_type'], meter_id=row['meter_id'], meter_name=row['meter_name'], + r_tag="}", + l_tag="{", ) result['content'] = result['content'].replace("Template", add_svg) else: result['content'] = result['content'].replace("TEMPLATE", "") + result['content'] = """ + + + + + + + + + + + + + + + FFF2 {text} + + + +""" + cursor.close() cnx.disconnect() resp.text = json.dumps(result) diff --git a/myems-web/package-lock.json b/myems-web/package-lock.json index facd0f68..0d178480 100644 --- a/myems-web/package-lock.json +++ b/myems-web/package-lock.json @@ -22,8 +22,10 @@ "@fullcalendar/react": "^5.3.1", "@fullcalendar/timegrid": "^5.3.1", "@loadable/component": "^5.13.2", + "assert": "^2.0.0", "attr-accept": "^2.2.2", "bootstrap": "^4.5.3", + "buffer": "^6.0.3", "chart.js": "^2.9.3", "classnames": "^2.2.6", "echarts": "^5.2.2", @@ -59,6 +61,7 @@ "react-es6-progressbar.js": "^1.1.0", "react-flatpickr": "^3.10.6", "react-hook-form": "^4.10.2", + "react-html-parser": "^2.0.2", "react-i18next": "^11.7.0", "react-image-lightbox": "^5.1.1", "react-image-video-lightbox": "^3.0.0", @@ -4694,7 +4697,6 @@ "version": "5.7.4", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -5356,6 +5358,17 @@ "safer-buffer": "~2.1.0" } }, + "node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -5506,6 +5519,17 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -5977,6 +6001,25 @@ "node": ">=0.10.0" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -6367,6 +6410,29 @@ "node": ">=4" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", @@ -8713,6 +8779,11 @@ "es6-symbol": "^3.1.1" } }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" + }, "node_modules/es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -10482,6 +10553,11 @@ "node": ">=0.10.0" } }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -12597,6 +12673,25 @@ "node": ">=4" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -12997,6 +13092,20 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -13018,6 +13127,21 @@ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", @@ -13198,6 +13322,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -19641,6 +19783,89 @@ "react": "^16.8.0" } }, + "node_modules/react-html-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/react-html-parser/-/react-html-parser-2.0.2.tgz", + "integrity": "sha512-XeerLwCVjTs3njZcgCOeDUqLgNIt/t+6Jgi5/qPsO/krUWl76kWKXMeVs2LhY2gwM6X378DkhLjur0zUQdpz0g==", + "dependencies": { + "htmlparser2": "^3.9.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16.0.0-0" + } + }, + "node_modules/react-html-parser/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/react-html-parser/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "node_modules/react-html-parser/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "node_modules/react-html-parser/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/react-html-parser/node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/react-html-parser/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/react-html-parser/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/react-html-parser/node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/react-html-parser/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/react-i18next": { "version": "11.16.6", "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.16.6.tgz", @@ -21335,7 +21560,7 @@ "version": "1.50.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.50.0.tgz", "integrity": "sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ==", - "dev": true, + "devOptional": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -21406,7 +21631,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "dev": true + "devOptional": true }, "node_modules/sax": { "version": "1.2.4", @@ -23990,6 +24215,19 @@ "react": "^16.8.0 || ^17.0.0" } }, + "node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -24716,6 +24954,25 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, + "node_modules/which-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -28557,8 +28814,7 @@ "acorn": { "version": "5.7.4", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" }, "acorn-globals": { "version": "6.0.0", @@ -28579,12 +28835,14 @@ "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} }, "acorn-node": { "version": "1.8.2", @@ -28731,7 +28989,8 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "ansi-colors": { "version": "1.1.0", @@ -29046,6 +29305,17 @@ "safer-buffer": "~2.1.0" } }, + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "requires": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -29154,6 +29424,11 @@ } } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -29368,7 +29643,8 @@ "babel-plugin-named-asset-import": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==" + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "requires": {} }, "babel-plugin-polyfill-corejs2": { "version": "0.3.1", @@ -29533,6 +29809,11 @@ } } }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -29674,7 +29955,8 @@ "bootstrap": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.1.tgz", - "integrity": "sha512-0dj+VgI9Ecom+rvvpNZ4MUZJz8dcX7WCX+eTID9+/8HgOkv3dsRzi8BGeZJCQU6flWQVYxwTQnEZFrmJSEO7og==" + "integrity": "sha512-0dj+VgI9Ecom+rvvpNZ4MUZJz8dcX7WCX+eTID9+/8HgOkv3dsRzi8BGeZJCQU6flWQVYxwTQnEZFrmJSEO7og==", + "requires": {} }, "brace-expansion": { "version": "1.1.11", @@ -29847,6 +30129,15 @@ } } }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "buffer-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", @@ -30623,7 +30914,8 @@ "css-declaration-sorter": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", - "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==" + "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", + "requires": {} }, "css-has-pseudo": { "version": "3.0.4", @@ -30716,7 +31008,8 @@ "css-prefers-color-scheme": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==" + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "requires": {} }, "css-select": { "version": "4.3.0", @@ -30808,7 +31101,8 @@ "cssnano-utils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "requires": {} }, "csso": { "version": "4.2.0", @@ -31459,7 +31753,8 @@ "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -31499,7 +31794,8 @@ "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -31629,6 +31925,11 @@ "es6-symbol": "^3.1.1" } }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" + }, "es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -31874,7 +32175,8 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true + "dev": true, + "requires": {} }, "eslint-config-react-app": { "version": "7.0.1", @@ -32099,7 +32401,8 @@ "eslint-plugin-react-hooks": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz", - "integrity": "sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ==" + "integrity": "sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ==", + "requires": {} }, "eslint-plugin-testing-library": { "version": "5.3.1", @@ -32950,6 +33253,11 @@ "for-in": "^1.0.1" } }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -33675,7 +33983,8 @@ "google-maps-react": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/google-maps-react/-/google-maps-react-2.0.6.tgz", - "integrity": "sha512-M8Eo9WndfQEfxcmm6yRq03qdJgw1x6rQmJ9DN+a+xPQ3K7yNDGkVDbinrf4/8vcox7nELbeopbm4bpefKewWfQ==" + "integrity": "sha512-M8Eo9WndfQEfxcmm6yRq03qdJgw1x6rQmJ9DN+a+xPQ3K7yNDGkVDbinrf4/8vcox7nELbeopbm4bpefKewWfQ==", + "requires": {} }, "graceful-fs": { "version": "4.2.10", @@ -34575,7 +34884,8 @@ "icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} }, "idb": { "version": "6.1.5", @@ -34590,6 +34900,11 @@ "harmony-reflect": "^1.4.6" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -34876,6 +35191,14 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -34894,6 +35217,15 @@ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, "is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", @@ -35011,6 +35343,18 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -35752,7 +36096,8 @@ "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "requires": {} }, "jest-regex-util": { "version": "27.5.1", @@ -36517,7 +36862,8 @@ "leaflet.markercluster": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", - "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==" + "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==", + "requires": {} }, "leaflet.tilelayer.colorfilter": { "version": "1.2.5", @@ -38419,7 +38765,8 @@ "postcss-browser-comments": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==" + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "requires": {} }, "postcss-calc": { "version": "8.2.4", @@ -38484,7 +38831,8 @@ "postcss-custom-media": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", - "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==" + "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", + "requires": {} }, "postcss-custom-properties": { "version": "12.1.7", @@ -38513,22 +38861,26 @@ "postcss-discard-comments": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", - "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==" + "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", + "requires": {} }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "requires": {} }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "requires": {} }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "requires": {} }, "postcss-double-position-gradients": { "version": "3.1.1", @@ -38550,7 +38902,8 @@ "postcss-flexbugs-fixes": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==" + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "requires": {} }, "postcss-focus-visible": { "version": "6.0.4", @@ -38571,12 +38924,14 @@ "postcss-font-variant": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==" + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "requires": {} }, "postcss-gap-properties": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", - "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==" + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", + "requires": {} }, "postcss-image-set-function": { "version": "4.0.6", @@ -38589,7 +38944,8 @@ "postcss-initial": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==" + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "requires": {} }, "postcss-js": { "version": "4.0.0", @@ -38640,12 +38996,14 @@ "postcss-logical": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==" + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "requires": {} }, "postcss-media-minmax": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==" + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "requires": {} }, "postcss-merge-longhand": { "version": "5.1.4", @@ -38706,7 +39064,8 @@ "postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -38763,7 +39122,8 @@ "postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "requires": {} }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -38848,12 +39208,14 @@ "postcss-overflow-shorthand": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", - "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==" + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", + "requires": {} }, "postcss-page-break": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==" + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "requires": {} }, "postcss-place": { "version": "7.0.4", @@ -38961,7 +39323,8 @@ "postcss-replace-overflow-wrap": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==" + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "requires": {} }, "postcss-selector-not": { "version": "5.0.0", @@ -39117,7 +39480,8 @@ "prism-react-renderer": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-0.1.7.tgz", - "integrity": "sha512-EhnM0sYfLK103ASK0ViSv0rta//ZGB0dBA9TiFyOvA+zOj5peLmGEG01sLEDwl9sMe+gSqncInafBe1VFTCMvA==" + "integrity": "sha512-EhnM0sYfLK103ASK0ViSv0rta//ZGB0dBA9TiFyOvA+zOj5peLmGEG01sLEDwl9sMe+gSqncInafBe1VFTCMvA==", + "requires": {} }, "prism-themes": { "version": "1.9.0", @@ -39444,7 +39808,8 @@ "react-bootstrap-table2-paginator": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/react-bootstrap-table2-paginator/-/react-bootstrap-table2-paginator-2.1.2.tgz", - "integrity": "sha512-LC5znEphhgKJvaSY1q8d+Gj0Nc/1X+VS3tKJjkmWmfv9P61YC/BnwJ+aoqEmQzsLiVGowrzss+i/u+Tip5H+Iw==" + "integrity": "sha512-LC5znEphhgKJvaSY1q8d+Gj0Nc/1X+VS3tKJjkmWmfv9P61YC/BnwJ+aoqEmQzsLiVGowrzss+i/u+Tip5H+Iw==", + "requires": {} }, "react-chartjs-2": { "version": "2.11.2", @@ -39631,7 +39996,89 @@ "react-hook-form": { "version": "4.10.2", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-4.10.2.tgz", - "integrity": "sha512-Ule/KqHBwUvuubqGC4WDvOARS6VjlULSS+WHspgQ5FhFKR4ytHDc4AMpjVfnv+Wbz2TEbMp9/ZHmuZsUksPCiA==" + "integrity": "sha512-Ule/KqHBwUvuubqGC4WDvOARS6VjlULSS+WHspgQ5FhFKR4ytHDc4AMpjVfnv+Wbz2TEbMp9/ZHmuZsUksPCiA==", + "requires": {} + }, + "react-html-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/react-html-parser/-/react-html-parser-2.0.2.tgz", + "integrity": "sha512-XeerLwCVjTs3njZcgCOeDUqLgNIt/t+6Jgi5/qPsO/krUWl76kWKXMeVs2LhY2gwM6X378DkhLjur0zUQdpz0g==", + "requires": { + "htmlparser2": "^3.9.0" + }, + "dependencies": { + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } }, "react-i18next": { "version": "11.16.6", @@ -39655,7 +40102,8 @@ "react-image-video-lightbox": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/react-image-video-lightbox/-/react-image-video-lightbox-3.0.0.tgz", - "integrity": "sha512-kEF6r1oZ6wPQIlVzsmmOgIAvaPdpQg8CVUNoggnGBR3GnaHdiRoGbyoty1smtoovjfzIFDHP3P6mLU4R//7COQ==" + "integrity": "sha512-kEF6r1oZ6wPQIlVzsmmOgIAvaPdpQg8CVUNoggnGBR3GnaHdiRoGbyoty1smtoovjfzIFDHP3P6mLU4R//7COQ==", + "requires": {} }, "react-input-autosize": { "version": "3.0.0", @@ -39711,12 +40159,14 @@ "prism-react-renderer": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz", - "integrity": "sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ==" + "integrity": "sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ==", + "requires": {} }, "react-simple-code-editor": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.11.0.tgz", - "integrity": "sha512-xGfX7wAzspl113ocfKQAR8lWPhavGWHL3xSzNLeseDRHysT+jzRBi/ExdUqevSMos+7ZtdfeuBOXtgk9HTwsrw==" + "integrity": "sha512-xGfX7wAzspl113ocfKQAR8lWPhavGWHL3xSzNLeseDRHysT+jzRBi/ExdUqevSMos+7ZtdfeuBOXtgk9HTwsrw==", + "requires": {} } } }, @@ -39743,7 +40193,8 @@ "react-onclickoutside": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.12.1.tgz", - "integrity": "sha512-a5Q7CkWznBRUWPmocCvE8b6lEYw1s6+opp/60dCunhO+G6E4tDTO2Sd2jKE+leEnnrLAE2Wj5DlDHNqj5wPv1Q==" + "integrity": "sha512-a5Q7CkWznBRUWPmocCvE8b6lEYw1s6+opp/60dCunhO+G6E4tDTO2Sd2jKE+leEnnrLAE2Wj5DlDHNqj5wPv1Q==", + "requires": {} }, "react-popper": { "version": "1.3.11", @@ -39999,7 +40450,8 @@ "react-simple-code-editor": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.9.15.tgz", - "integrity": "sha512-M8iKgjBTBZK92tZYgOEfMuR7c3zZ0q0v3QYllSxIPx3SU+w003VofH50txXQSBTu92pSOm2tidON1HbQ1l8BDA==" + "integrity": "sha512-M8iKgjBTBZK92tZYgOEfMuR7c3zZ0q0v3QYllSxIPx3SU+w003VofH50txXQSBTu92pSOm2tidON1HbQ1l8BDA==", + "requires": {} }, "react-slick": { "version": "0.25.2", @@ -40909,7 +41361,7 @@ "version": "1.50.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.50.0.tgz", "integrity": "sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ==", - "dev": true, + "devOptional": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -40920,7 +41372,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "dev": true + "devOptional": true } } }, @@ -41260,7 +41712,8 @@ "slick-carousel": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", - "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==" + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", + "requires": {} }, "smart-buffer": { "version": "4.2.0", @@ -42068,7 +42521,8 @@ "style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==" + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "requires": {} }, "stylehacks": { "version": "5.1.0", @@ -42979,7 +43433,21 @@ "use-memo-one": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.2.tgz", - "integrity": "sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ==" + "integrity": "sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ==", + "requires": {} + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } }, "util-deprecate": { "version": "1.0.2", @@ -43436,7 +43904,8 @@ "ws": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==" + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "requires": {} } } }, @@ -43544,6 +44013,19 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, + "which-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + } + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -43891,7 +44373,8 @@ "ws": { "version": "7.5.7", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==" + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "requires": {} }, "xml-name-validator": { "version": "3.0.0", diff --git a/myems-web/package.json b/myems-web/package.json index b7cc8269..1e668cab 100644 --- a/myems-web/package.json +++ b/myems-web/package.json @@ -17,8 +17,10 @@ "@fullcalendar/react": "^5.3.1", "@fullcalendar/timegrid": "^5.3.1", "@loadable/component": "^5.13.2", + "assert": "^2.0.0", "attr-accept": "^2.2.2", "bootstrap": "^4.5.3", + "buffer": "^6.0.3", "chart.js": "^2.9.3", "classnames": "^2.2.6", "echarts": "^5.2.2", @@ -54,6 +56,7 @@ "react-es6-progressbar.js": "^1.1.0", "react-flatpickr": "^3.10.6", "react-hook-form": "^4.10.2", + "react-html-parser": "^2.0.2", "react-i18next": "^11.7.0", "react-image-lightbox": "^5.1.1", "react-image-video-lightbox": "^3.0.0", @@ -73,9 +76,9 @@ "react-toastify": "^5.5.0", "react-typed": "^1.2.0", "reactstrap": "^8.6.0", + "rsuite": "^5.6.1", "slick-carousel": "^1.8.1", - "uuid": "^3.4.0", - "rsuite": "^5.6.1" + "uuid": "^3.4.0" }, "scripts": { "start": "react-scripts --openssl-legacy-provider start", @@ -92,7 +95,6 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.28.0", - "postcss": "^8.0.0", "gulp": "^4.0.2", "gulp-autoprefixer": "^6.1.0", "gulp-clean-css": "^4.3.0", @@ -101,6 +103,7 @@ "gulp-rtlcss": "^1.4.1", "gulp-sass": "^5.0.0", "gulp-sourcemaps": "^2.6.5", + "postcss": "^8.0.0", "prettier": "1.17.1", "sass": "^1.43.4" } diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/1.svg b/myems-web/src/components/MyEMS/AuxiliarySystem/1.svg new file mode 100644 index 00000000..456f9488 --- /dev/null +++ b/myems-web/src/components/MyEMS/AuxiliarySystem/1.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + FFF2 + + + \ No newline at end of file diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js index 655bb2c2..4fdf6f96 100644 --- a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js +++ b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js @@ -9,6 +9,10 @@ import { Form, FormGroup, Label, + Modal, + ModalBody, + ModalFooter, + ModalHeader, Row, Spinner } from 'reactstrap'; @@ -20,6 +24,7 @@ import uuid from 'uuid/v1'; import { toast } from 'react-toastify'; import { APIBaseURL } from '../../../config'; import ButtonIcon from '../../common/ButtonIcon'; +import ReactHtmlParser from 'react-html-parser'; const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { useEffect(() => { @@ -151,6 +156,13 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { console.log('svgSystemContentDict', svgSystemContentDict); }, [svgSystemContentDict]); + const showData = (e) =>{ + console.log("showData", e); + } + + function test() { + console.log("Hello World") + } return (
@@ -204,6 +216,16 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => {
+ + {t('Data Show')} + + + + + + + + ); }; diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/meter.png b/myems-web/src/components/MyEMS/AuxiliarySystem/meter.png new file mode 100644 index 0000000000000000000000000000000000000000..c0d6f7b6fb94a5008367e937d3d8982d758987b8 GIT binary patch literal 3448 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 literal 0 HcmV?d00001 From 36c95f69005564fda4a33d8c073d3b755b7072af Mon Sep 17 00:00:00 2001 From: hyh123a Date: Fri, 22 Apr 2022 08:58:09 +0800 Subject: [PATCH 05/22] modify the svg page --- .../components/MyEMS/AuxiliarySystem/SvgSystem.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js index 4fdf6f96..30c9f172 100644 --- a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js +++ b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js @@ -195,19 +195,7 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { - - -
-
- - -
- - {t('View')} - - From 53d4b3dc5876dd90a1fd87c542d3b287e45c805c Mon Sep 17 00:00:00 2001 From: hyh123a Date: Fri, 22 Apr 2022 20:09:07 +0800 Subject: [PATCH 06/22] complete the svg api --- myems-api/core/svg.py | 95 ++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 50 deletions(-) diff --git a/myems-api/core/svg.py b/myems-api/core/svg.py index f0080470..26f188d1 100644 --- a/myems-api/core/svg.py +++ b/myems-api/core/svg.py @@ -1,3 +1,5 @@ +import re + import falcon import simplejson as json import mysql.connector @@ -20,7 +22,7 @@ class Collection: cnx = mysql.connector.connect(**config.myems_system_db) cursor = cnx.cursor(dictionary=True) - query = (" SELECT id, name, content " + query = (" SELECT id, name " " FROM tbl_svgs " " ORDER BY id ") cursor.execute(query) @@ -30,8 +32,7 @@ class Collection: if rows_svgs is not None and len(rows_svgs) > 0: for row in rows_svgs: temp = {"id": row['id'], - "name": row['name'], - "content": row['content']} + "name": row['name']} result.append(temp) @@ -75,57 +76,51 @@ class Item: cnx.disconnect() resp.text = json.dumps(result) - query = (" SELECT id, svg_id, point_id, point_icon, point_x, point_y, meter_type, meter_id, meter_name, func" - " FROM tbl_svg_points " - " WHERE svg_id=%s ") - cursor.execute(query, (id_,)) - rows_point = cursor.fetchall() + tmp_content = result['content'] + # Get all ids + ids = re.findall(r'8*', tmp_content) # # ['PT100', 'PT101'] + # Get All Data + """ + 数据点 Point 代码 PT + 计量表 Meter 代号 MT + 虚拟表 VirtualMeter 代号 VM + 离线表 OfflineMeter 代码 OM + 空间 Space 代号 SP + 传感器 Sensor 代号 SS + 设备 Equipment 代号 EQ + 组合设备 CombinedEquipment 代码 CE + 车间 Shopfloor代码 SF + """ + _dict = { + 'PT': {}, + 'MT': {}, + 'VM': {}, + 'OM': {}, + 'SP': {}, + 'SS': {}, + 'EQ': {}, + 'CE': {}, + 'SF': {}, + } - add_svg = "" - if rows_point is not None and len(rows_point) > 0: - for row in rows_point: - print("row", row) - add_svg = add_svg + \ - ' \n'. \ - format(point_id=row['point_id'], - point_icon=row['point_icon'], - point_x=row['point_x'], - point_y=row['point_y'], - func= row['func'], - meter_type=row['meter_type'], - meter_id=row['meter_id'], - meter_name=row['meter_name'], - r_tag="}", - l_tag="{", - ) + # Group the tag + for item in ids: + _type = item[0:2] + _number = item[2:] + if _number not in _dict[_type].keys(): + _dict[_type][_number] = 111 - result['content'] = result['content'].replace("Template", add_svg) - else: - result['content'] = result['content'].replace("TEMPLATE", "") + # Todo: Get data from database - result['content'] = """ - - - - - - - - - - - - - - - FFF2 {text} - - - -""" + # Replace + for item in ids: + r_type = item[0:2] + r_id = item[2:] + tmp_content = re.sub(r'.*?)>8*', + r' >' + str(_dict[r_type][r_id]) + '', + tmp_content) + result['content'] = tmp_content cursor.close() cnx.disconnect() resp.text = json.dumps(result) From 4639ebc6cf0e1c96f6f823a4ac7e98bcd761dbf6 Mon Sep 17 00:00:00 2001 From: hyh123a Date: Fri, 22 Apr 2022 20:38:41 +0800 Subject: [PATCH 07/22] modify the i18 --- myems-web/package.json | 1 - .../components/MyEMS/AuxiliarySystem/1.svg | 20 ------- .../MyEMS/AuxiliarySystem/SvgSystem.js | 50 ++++-------------- .../MyEMS/AuxiliarySystem/meter.png | Bin 3448 -> 0 bytes myems-web/src/i18n.js | 3 ++ 5 files changed, 14 insertions(+), 60 deletions(-) delete mode 100644 myems-web/src/components/MyEMS/AuxiliarySystem/1.svg delete mode 100644 myems-web/src/components/MyEMS/AuxiliarySystem/meter.png diff --git a/myems-web/package.json b/myems-web/package.json index 1e668cab..ff9db428 100644 --- a/myems-web/package.json +++ b/myems-web/package.json @@ -56,7 +56,6 @@ "react-es6-progressbar.js": "^1.1.0", "react-flatpickr": "^3.10.6", "react-hook-form": "^4.10.2", - "react-html-parser": "^2.0.2", "react-i18next": "^11.7.0", "react-image-lightbox": "^5.1.1", "react-image-video-lightbox": "^3.0.0", diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/1.svg b/myems-web/src/components/MyEMS/AuxiliarySystem/1.svg deleted file mode 100644 index 456f9488..00000000 --- a/myems-web/src/components/MyEMS/AuxiliarySystem/1.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - FFF2 - - - \ No newline at end of file diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js index 30c9f172..30b4a71c 100644 --- a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js +++ b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js @@ -20,11 +20,8 @@ import RealtimeChart from './RealtimeChart'; import { getCookieValue, createCookie } from '../../../helpers/utils'; import withRedirect from '../../../hoc/withRedirect'; import { withTranslation } from 'react-i18next'; -import uuid from 'uuid/v1'; import { toast } from 'react-toastify'; import { APIBaseURL } from '../../../config'; -import ButtonIcon from '../../common/ButtonIcon'; -import ReactHtmlParser from 'react-html-parser'; const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { useEffect(() => { @@ -45,21 +42,18 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { createCookie('token', token, 1000 * 60 * 60 * 8); } }); - let table = createRef(); + // Svg List const [svgSystemList, setSvgSystemList] = useState([]); - // Svg Content - const [svgSystemContent, setSvgSystemContent] = useState(undefined); - const [svgSystemContentDict, setSvgSystemContentDict] = useState(undefined); - // Query Parameters const [selectedSvgSystemID, setSelectedSvgSystemID] = useState(undefined); - //Results - const [images, setImages] = useState([]); - const [spinnerHidden, setSpinnerHidden] = useState(false); + // Results + const [svgSystemContent, setSvgSystemContent] = useState(undefined); + const [svgSystemContentDict, setSvgSystemContentDict] = useState(undefined); + // Init: Get svgs and set the first svg useEffect(() => { let isResponseOK = false; fetch(APIBaseURL + '/svgs', { @@ -81,7 +75,6 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { .then(json => { console.log(json); if (isResponseOK) { - console.log('svgs', json); setSvgSystemList(json); setSelectedSvgSystemID(json[0].id); getSvgContent(json[0].id); @@ -96,12 +89,11 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { const labelClasses = 'ls text-uppercase text-600 font-weight-semi-bold mb-0'; - let onSvgSystemChange = event => { + const onSvgSystemChange = event => { setSelectedSvgSystemID(event.target.value); - console.log('onSvgSystemChange ID', event.target.value); + console.log('You Change the Svg ID', event.target.value); // Get Svg Content getSvgContent(event.target.value); - }; const getSvgContent = svgId => { @@ -125,9 +117,8 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { .then(json => { console.log(json); if (isResponseOK) { - console.log('getSvgContent', json.content); setSvgSystemContent(json.content); - setSvgSystemContentDict({__html: json.content}); + setSvgSystemContentDict({ __html: json.content }); } else { toast.error(json.description); } @@ -156,13 +147,6 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { console.log('svgSystemContentDict', svgSystemContentDict); }, [svgSystemContentDict]); - const showData = (e) =>{ - console.log("showData", e); - } - - function test() { - console.log("Hello World") - } return (
@@ -199,21 +183,9 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { - - -
- - - - {t('Data Show')} - - - - - - - - + +
+ ); }; diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/meter.png b/myems-web/src/components/MyEMS/AuxiliarySystem/meter.png deleted file mode 100644 index c0d6f7b6fb94a5008367e937d3d8982d758987b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3448 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 diff --git a/myems-web/src/i18n.js b/myems-web/src/i18n.js index bdcca5aa..bc44a1aa 100644 --- a/myems-web/src/i18n.js +++ b/myems-web/src/i18n.js @@ -46,6 +46,7 @@ const resources = { 'Tenant Bill': 'Tenant Bill', 'Energy Flow Diagram': 'Energy Flow Diagram', 'Distribution System':'Distribution System', + 'Svg System': 'Flat Data Show System', 'Fault Statistics': 'Fault Statistics', 'Space Faults Data': 'Space Faults', 'Equipment Faults Data': 'Equipment Faults', @@ -845,6 +846,7 @@ const resources = { 'Tenant Bill': 'Mieter Rechnung', 'Energy Flow Diagram': 'Energieflussdiagramm', 'Distribution System': 'Vertriebssystem', + 'Svg System': 'Flache Datenanzeige', 'Fault Statistics': 'Fehlerstatistik', 'Space Faults Data': 'Platz Fehler', 'Equipment Faults Data': 'Ausrüstung Fehler', @@ -1655,6 +1657,7 @@ const resources = { 'Tenant Bill': '租户账单', 'Energy Flow Diagram': '能流图', 'Distribution System': '配电系统', + 'Svg System': '平面数据展示系统', 'Fault Statistics': '故障统计分析', 'Space Faults Data': '空间故障分析', 'Equipment Faults Data': '设备故障分析', From 6da870c5d634956f5aa4665511c847556683bd73 Mon Sep 17 00:00:00 2001 From: hyh123a Date: Fri, 22 Apr 2022 20:40:03 +0800 Subject: [PATCH 08/22] modify the page --- myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js index 30b4a71c..a94ccd66 100644 --- a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js +++ b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js @@ -89,6 +89,7 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { const labelClasses = 'ls text-uppercase text-600 font-weight-semi-bold mb-0'; + // Select: Choose Svg const onSvgSystemChange = event => { setSelectedSvgSystemID(event.target.value); console.log('You Change the Svg ID', event.target.value); @@ -96,6 +97,7 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { getSvgContent(event.target.value); }; + // Fcuntion: Get Svg Content const getSvgContent = svgId => { let isResponseOK = false; fetch(APIBaseURL + '/svgs/' + svgId, { @@ -127,9 +129,6 @@ const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { console.log(err); }); }; - const viewSvg = () => { - getSvgContent(selectedSvgSystemID); - }; useEffect(() => { console.log('svgSystemList', svgSystemList); From da753eaedb67f1b5bff07bec6ebf82a47c9d4f26 Mon Sep 17 00:00:00 2001 From: hyh123a Date: Fri, 22 Apr 2022 20:42:53 +0800 Subject: [PATCH 09/22] add the svg table in myems_system_db --- database/upgrade/upgrade_svg.sql | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 database/upgrade/upgrade_svg.sql diff --git a/database/upgrade/upgrade_svg.sql b/database/upgrade/upgrade_svg.sql new file mode 100644 index 00000000..a954a87c --- /dev/null +++ b/database/upgrade/upgrade_svg.sql @@ -0,0 +1,22 @@ +/* + Source Schema : myems_system_db + Date: 22/04/2022 20:12:20 +*/ + +-- --------------------------------------------------------------------------------------------------------------------- +-- Table `myems_system_db`.`tbl_svgs` +-- --------------------------------------------------------------------------------------------------------------------- +DROP TABLE IF EXISTS `myems_system_db`.`tbl_svgs` ; +CREATE TABLE `myems_system_db`.`tbl_svgs` ( + `id` BIGINT NOT NULL AUTO_INCREMENT, + `name` VARCHAR(128) NOT NULL, + `content` LONGTEXT NOT NULL, + PRIMARY KEY (`id`) +); + +-- --------------------------------------------------------------------------------------------------------------------- +-- Records of `myems_system_db`.`tbl_svgs` +-- --------------------------------------------------------------------------------------------------------------------- +INSERT INTO `myems_system_db`.`tbl_svgs` VALUES (1, 'SVG01', '\r\n\r\n\r\n888888\r\n\r\n888888\r\n\r\n'); +INSERT INTO `myems_system_db`.`tbl_svgs` VALUES (2, 'SVG02', '\r\n\r\n\r\n888888\r\n\r\n888888\r\n\r\n'); + From 82aeb6733faa0506a8fc0d737abd4d8b422b247e Mon Sep 17 00:00:00 2001 From: hyh123a Date: Fri, 22 Apr 2022 20:43:36 +0800 Subject: [PATCH 10/22] add the svg table in myems_system_db --- database/upgrade/upgrade_svg.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/upgrade/upgrade_svg.sql b/database/upgrade/upgrade_svg.sql index a954a87c..30fa1dbf 100644 --- a/database/upgrade/upgrade_svg.sql +++ b/database/upgrade/upgrade_svg.sql @@ -17,6 +17,6 @@ CREATE TABLE `myems_system_db`.`tbl_svgs` ( -- --------------------------------------------------------------------------------------------------------------------- -- Records of `myems_system_db`.`tbl_svgs` -- --------------------------------------------------------------------------------------------------------------------- -INSERT INTO `myems_system_db`.`tbl_svgs` VALUES (1, 'SVG01', '\r\n\r\n\r\n888888\r\n\r\n888888\r\n\r\n'); -INSERT INTO `myems_system_db`.`tbl_svgs` VALUES (2, 'SVG02', '\r\n\r\n\r\n888888\r\n\r\n888888\r\n\r\n'); +INSERT INTO `myems_system_db`.`tbl_svgs` VALUES (1, 'SVG01', '\r\n\r\n\r\n\r\n\r\n \r\n 1WT603\r\n \r\n \r\n 603变温度控制器\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n 1WT604\r\n \r\n \r\n 604变温度控制器\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n888888\r\n888888\r\n888888\r\n888888\r\n888888\r\n888888\r\n\r\n'); +INSERT INTO `myems_system_db`.`tbl_svgs` VALUES (2, 'SVG02', '\r\n\r\n\r\n888888\r\n\r\n888888\r\n\r\n'); From d76cb1cae9a7f38986ba231913d5d3c3c8d266d2 Mon Sep 17 00:00:00 2001 From: hyh123a Date: Fri, 22 Apr 2022 20:45:41 +0800 Subject: [PATCH 11/22] modify the config to default --- myems-web/src/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/myems-web/src/config.js b/myems-web/src/config.js index 5f7ab368..d50357d9 100644 --- a/myems-web/src/config.js +++ b/myems-web/src/config.js @@ -1,8 +1,8 @@ export const version = '1.9.0'; export const navbarBreakPoint = 'xl'; // Vertical navbar breakpoint export const topNavbarBreakpoint = 'lg'; -export const APIBaseURL = 'http://127.0.0.1:8000'; -// export const APIBaseURL = window.location.protocol+"//"+window.location.hostname+":"+window.location.port+"/api"; +// export const APIBaseURL = 'http://127.0.0.1:8000'; +export const APIBaseURL = window.location.protocol+"//"+window.location.hostname+":"+window.location.port+"/api"; export const settings = { isFluid: true, isRTL: false, From 01c368900fc4bbf85ff3e8335ef67fb4beec5a3b Mon Sep 17 00:00:00 2001 From: hyh123a Date: Fri, 22 Apr 2022 20:48:16 +0800 Subject: [PATCH 12/22] add the judgement --- myems-api/config.py | 20 ++++++++++---------- myems-api/core/svg.py | 3 +++ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/myems-api/config.py b/myems-api/config.py index 61ff1196..3e697d6a 100644 --- a/myems-api/config.py +++ b/myems-api/config.py @@ -6,7 +6,7 @@ myems_system_db = { 'port': config('MYEMS_SYSTEM_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_SYSTEM_DB_DATABASE', default='myems_system_db'), 'user': config('MYEMS_SYSTEM_DB_USER', default='root'), - 'password': config('MYEMS_SYSTEM_DB_PASSWORD', default=''), + 'password': config('MYEMS_SYSTEM_DB_PASSWORD', default='!MyEMS1'), } myems_energy_db = { @@ -14,7 +14,7 @@ myems_energy_db = { 'port': config('MYEMS_ENERGY_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_ENERGY_DB_DATABASE', default='myems_energy_db'), 'user': config('MYEMS_ENERGY_DB_USER', default='root'), - 'password': config('MYEMS_ENERGY_DB_PASSWORD', default=''), + 'password': config('MYEMS_ENERGY_DB_PASSWORD', default='!MyEMS1'), } myems_energy_baseline_db = { @@ -22,7 +22,7 @@ myems_energy_baseline_db = { 'port': config('MYEMS_ENERGY_BASELINE_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_ENERGY_BASELINE_DB_DATABASE', default='myems_energy_baseline_db'), 'user': config('MYEMS_ENERGY_BASELINE_DB_USER', default='root'), - 'password': config('MYEMS_ENERGY_BASELINE_DB_PASSWORD', default=''), + 'password': config('MYEMS_ENERGY_BASELINE_DB_PASSWORD', default='!MyEMS1'), } myems_billing_db = { @@ -30,7 +30,7 @@ myems_billing_db = { 'port': config('MYEMS_BILLING_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_BILLING_DB_DATABASE', default='myems_billing_db'), 'user': config('MYEMS_BILLING_DB_USER', default='root'), - 'password': config('MYEMS_BILLING_DB_PASSWORD', default=''), + 'password': config('MYEMS_BILLING_DB_PASSWORD', default='!MyEMS1'), } myems_billing_baseline_db = { @@ -38,7 +38,7 @@ myems_billing_baseline_db = { 'port': config('MYEMS_BILLING_BASELINE_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_BILLING_BASELINE_DB_DATABASE', default='myems_billing_baseline_db'), 'user': config('MYEMS_BILLING_BASELINE_DB_USER', default='root'), - 'password': config('MYEMS_BILLING_BASELINE_DB_PASSWORD', default=''), + 'password': config('MYEMS_BILLING_BASELINE_DB_PASSWORD', default='!MyEMS1'), } myems_historical_db = { @@ -46,7 +46,7 @@ myems_historical_db = { 'port': config('MYEMS_HISTORICAL_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_HISTORICAL_DB_DATABASE', default='myems_historical_db'), 'user': config('MYEMS_HISTORICAL_DB_USER', default='root'), - 'password': config('MYEMS_HISTORICAL_DB_PASSWORD', default=''), + 'password': config('MYEMS_HISTORICAL_DB_PASSWORD', default='!MyEMS1'), } myems_user_db = { @@ -54,7 +54,7 @@ myems_user_db = { 'port': config('MYEMS_USER_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_USER_DB_DATABASE', default='myems_user_db'), 'user': config('MYEMS_USER_DB_USER', default='root'), - 'password': config('MYEMS_USER_DB_PASSWORD', default=''), + 'password': config('MYEMS_USER_DB_PASSWORD', default='!MyEMS1'), } myems_fdd_db = { @@ -62,7 +62,7 @@ myems_fdd_db = { 'port': config('MYEMS_FDD_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_FDD_DB_DATABASE', default='myems_fdd_db'), 'user': config('MYEMS_FDD_DB_USER', default='root'), - 'password': config('MYEMS_FDD_DB_PASSWORD', default=''), + 'password': config('MYEMS_FDD_DB_PASSWORD', default='!MyEMS1'), } myems_reporting_db = { @@ -70,7 +70,7 @@ myems_reporting_db = { 'port': config('MYEMS_REPORTING_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_REPORTING_DB_DATABASE', default='myems_reporting_db'), 'user': config('MYEMS_REPORTING_DB_USER', default='root'), - 'password': config('MYEMS_REPORTING_DB_PASSWORD', default=''), + 'password': config('MYEMS_REPORTING_DB_PASSWORD', default='!MyEMS1'), } myems_carbon_db = { @@ -78,7 +78,7 @@ myems_carbon_db = { 'port': config('MYEMS_CARBON_DB_PORT', default=3306, cast=int), 'database': config('MYEMS_CARBON_DB_DATABASE', default='myems_carbon_db'), 'user': config('MYEMS_CARBON_DB_USER', default='root'), - 'password': config('MYEMS_CARBON_DB_PASSWORD', default=''), + 'password': config('MYEMS_CARBON_DB_PASSWORD', default='!MyEMS1'), } # indicated in how many minutes to calculate meter energy consumption diff --git a/myems-api/core/svg.py b/myems-api/core/svg.py index 26f188d1..3f67ccaa 100644 --- a/myems-api/core/svg.py +++ b/myems-api/core/svg.py @@ -107,6 +107,9 @@ class Item: for item in ids: _type = item[0:2] _number = item[2:] + if _type not in _dict.keys(): + print("Error Type", item) + continue if _number not in _dict[_type].keys(): _dict[_type][_number] = 111 From a9e3de792948c10fa9b47a3b8fa1c0b3bb8e4c32 Mon Sep 17 00:00:00 2001 From: hyh123a Date: Fri, 22 Apr 2022 20:52:09 +0800 Subject: [PATCH 13/22] add the svg menu sql --- database/upgrade/upgrade_svg.sql | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/database/upgrade/upgrade_svg.sql b/database/upgrade/upgrade_svg.sql index 30fa1dbf..fb39e9d2 100644 --- a/database/upgrade/upgrade_svg.sql +++ b/database/upgrade/upgrade_svg.sql @@ -20,3 +20,8 @@ CREATE TABLE `myems_system_db`.`tbl_svgs` ( INSERT INTO `myems_system_db`.`tbl_svgs` VALUES (1, 'SVG01', '\r\n\r\n\r\n\r\n\r\n \r\n 1WT603\r\n \r\n \r\n 603变温度控制器\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n 1WT604\r\n \r\n \r\n 604变温度控制器\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n888888\r\n888888\r\n888888\r\n888888\r\n888888\r\n888888\r\n\r\n'); INSERT INTO `myems_system_db`.`tbl_svgs` VALUES (2, 'SVG02', '\r\n\r\n\r\n888888\r\n\r\n888888\r\n\r\n'); + +-- --------------------------------------------------------------------------------------------------------------------- +-- Records of `myems_system_db`.`tbl_menus` +-- --------------------------------------------------------------------------------------------------------------------- +INSERT INTO `myems_system_db`.`tbl_menus`(`id`, `name`, `route`, `parent_menu_id`, `is_hidden`) VALUES (803, 'Svg System', '/auxiliarysystem/svgsystem', 800, 0); From 4e4fffecdcfd7b4d6d2248b7711f4d1826987fbf Mon Sep 17 00:00:00 2001 From: hyh123a Date: Sat, 23 Apr 2022 09:39:28 +0800 Subject: [PATCH 14/22] modify the svg api to pro --- myems-api/app.py | 13 ++++++------- myems-api/pro/__init__.py | 0 myems-api/{core => pro}/svg.py | 0 3 files changed, 6 insertions(+), 7 deletions(-) create mode 100644 myems-api/pro/__init__.py rename myems-api/{core => pro}/svg.py (100%) diff --git a/myems-api/app.py b/myems-api/app.py index e766ff86..8b3343b3 100644 --- a/myems-api/app.py +++ b/myems-api/app.py @@ -5,7 +5,7 @@ from core import energyflowdiagram, privilege, textmessage, distributioncircuit, costcenter, point, knowledgefile, meter, tariff, user, storetype, timezone, \ costfile, offlinemeterfile, version, contact, emailserver, combinedequipment, datasource, equipment, tenant, \ shopfloor, webmessage, distributionsystem, store, emailmessage, tenanttype, wechatmessage, space, gateway, \ - offlinemeter, rule, energycategory, sensor, energyitem, notification, menu, svg + offlinemeter, rule, energycategory, sensor, energyitem, notification, menu from reports import advancedreport from reports import distributionsystem as distributionsystemreport from reports import energyflowdiagram as energyflowdiagramreport @@ -85,6 +85,7 @@ from reports import virtualmetercost ######################################################################################################################## # BEGIN imports for Enterprise Version ######################################################################################################################## +from pro import svg ######################################################################################################################## # END imports for Enterprise Version @@ -414,11 +415,6 @@ api.add_route('/tariffs', api.add_route('/tariffs/{id_}', tariff.TariffItem()) -api.add_route('/svgs', - svg.Collection()) -api.add_route('/svgs/{id_}', - svg.Item()) - api.add_route('/tenants', tenant.TenantCollection()) api.add_route('/tenants/{id_}', @@ -654,7 +650,10 @@ api.add_route('/reports/virtualmetercost', ######################################################################################################################## # BEGIN Routes for Enterprise Edition ######################################################################################################################## - +api.add_route('/svgs', + svg.Collection()) +api.add_route('/svgs/{id_}', + svg.Item()) ######################################################################################################################## # END Routes for Enterprise Edition ######################################################################################################################## diff --git a/myems-api/pro/__init__.py b/myems-api/pro/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/myems-api/core/svg.py b/myems-api/pro/svg.py similarity index 100% rename from myems-api/core/svg.py rename to myems-api/pro/svg.py From 6d9939b585626214e21e2ab76dce6bc719461f8a Mon Sep 17 00:00:00 2001 From: hyh123a Date: Sat, 23 Apr 2022 10:36:01 +0800 Subject: [PATCH 15/22] modify the svg --- database/upgrade/upgrade_svg.sql | 27 --- myems-api/app.py | 22 +- myems-api/pro/svg.py | 172 ---------------- .../MyEMS/AuxiliarySystem/SvgSystem.js | 192 ------------------ myems-web/src/layouts/MyEMSRoutes.js | 5 +- myems-web/src/routes.js | 2 +- 6 files changed, 21 insertions(+), 399 deletions(-) delete mode 100644 database/upgrade/upgrade_svg.sql delete mode 100644 myems-api/pro/svg.py delete mode 100644 myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js diff --git a/database/upgrade/upgrade_svg.sql b/database/upgrade/upgrade_svg.sql deleted file mode 100644 index fb39e9d2..00000000 --- a/database/upgrade/upgrade_svg.sql +++ /dev/null @@ -1,27 +0,0 @@ -/* - Source Schema : myems_system_db - Date: 22/04/2022 20:12:20 -*/ - --- --------------------------------------------------------------------------------------------------------------------- --- Table `myems_system_db`.`tbl_svgs` --- --------------------------------------------------------------------------------------------------------------------- -DROP TABLE IF EXISTS `myems_system_db`.`tbl_svgs` ; -CREATE TABLE `myems_system_db`.`tbl_svgs` ( - `id` BIGINT NOT NULL AUTO_INCREMENT, - `name` VARCHAR(128) NOT NULL, - `content` LONGTEXT NOT NULL, - PRIMARY KEY (`id`) -); - --- --------------------------------------------------------------------------------------------------------------------- --- Records of `myems_system_db`.`tbl_svgs` --- --------------------------------------------------------------------------------------------------------------------- -INSERT INTO `myems_system_db`.`tbl_svgs` VALUES (1, 'SVG01', '\r\n\r\n\r\n\r\n\r\n \r\n 1WT603\r\n \r\n \r\n 603变温度控制器\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n 1WT604\r\n \r\n \r\n 604变温度控制器\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n888888\r\n888888\r\n888888\r\n888888\r\n888888\r\n888888\r\n\r\n'); -INSERT INTO `myems_system_db`.`tbl_svgs` VALUES (2, 'SVG02', '\r\n\r\n\r\n888888\r\n\r\n888888\r\n\r\n'); - - --- --------------------------------------------------------------------------------------------------------------------- --- Records of `myems_system_db`.`tbl_menus` --- --------------------------------------------------------------------------------------------------------------------- -INSERT INTO `myems_system_db`.`tbl_menus`(`id`, `name`, `route`, `parent_menu_id`, `is_hidden`) VALUES (803, 'Svg System', '/auxiliarysystem/svgsystem', 800, 0); diff --git a/myems-api/app.py b/myems-api/app.py index 8b3343b3..7e21259b 100644 --- a/myems-api/app.py +++ b/myems-api/app.py @@ -85,7 +85,7 @@ from reports import virtualmetercost ######################################################################################################################## # BEGIN imports for Enterprise Version ######################################################################################################################## -from pro import svg +# from pro import svg ######################################################################################################################## # END imports for Enterprise Version @@ -650,10 +650,22 @@ api.add_route('/reports/virtualmetercost', ######################################################################################################################## # BEGIN Routes for Enterprise Edition ######################################################################################################################## -api.add_route('/svgs', - svg.Collection()) -api.add_route('/svgs/{id_}', - svg.Item()) + +######################################################################################################################## +# Routes for Svg System +######################################################################################################################## + +""" +# Name: Svg System +# Web UI Router: auxiliarysystem/svgsystem +# API File: myems-api/pro/svg.py +""" +# api.add_route('/svgs', +# svg.Collection()) +# api.add_route('/svgs/{id_}', +# svg.Item()) + + ######################################################################################################################## # END Routes for Enterprise Edition ######################################################################################################################## diff --git a/myems-api/pro/svg.py b/myems-api/pro/svg.py deleted file mode 100644 index 3f67ccaa..00000000 --- a/myems-api/pro/svg.py +++ /dev/null @@ -1,172 +0,0 @@ -import re - -import falcon -import simplejson as json -import mysql.connector -import config -from core.useractivity import user_logger, access_control - - -class Collection: - @staticmethod - def __init__(): - """"Initializes svgCollection""" - pass - - @staticmethod - def on_options(req, resp): - resp.status = falcon.HTTP_200 - - @staticmethod - def on_get(req, resp): - cnx = mysql.connector.connect(**config.myems_system_db) - cursor = cnx.cursor(dictionary=True) - - query = (" SELECT id, name " - " FROM tbl_svgs " - " ORDER BY id ") - cursor.execute(query) - rows_svgs = cursor.fetchall() - - result = list() - if rows_svgs is not None and len(rows_svgs) > 0: - for row in rows_svgs: - temp = {"id": row['id'], - "name": row['name']} - - result.append(temp) - - cursor.close() - cnx.disconnect() - resp.text = json.dumps(result) - - -class Item: - @staticmethod - def __init__(): - """"Initializes svgItem""" - pass - - @staticmethod - def on_options(req, resp, id_): - resp.status = falcon.HTTP_200 - - @staticmethod - def on_get(req, resp, id_): - if not id_.isdigit() or int(id_) <= 0: - raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', - description='API.INVALID_svg_ID') - - cnx = mysql.connector.connect(**config.myems_system_db) - cursor = cnx.cursor(dictionary=True) - - query = (" SELECT id, name, content " - " FROM tbl_svgs " - " WHERE id=%s ") - cursor.execute(query, (id_,)) - rows_svg = cursor.fetchone() - - result = None - if rows_svg is not None and len(rows_svg) > 0: - result = {"id": rows_svg['id'], - "name": rows_svg['name'], - "content": rows_svg['content']} - else: - cursor.close() - cnx.disconnect() - resp.text = json.dumps(result) - - tmp_content = result['content'] - # Get all ids - ids = re.findall(r'8*', tmp_content) # # ['PT100', 'PT101'] - # Get All Data - """ - 数据点 Point 代码 PT - 计量表 Meter 代号 MT - 虚拟表 VirtualMeter 代号 VM - 离线表 OfflineMeter 代码 OM - 空间 Space 代号 SP - 传感器 Sensor 代号 SS - 设备 Equipment 代号 EQ - 组合设备 CombinedEquipment 代码 CE - 车间 Shopfloor代码 SF - """ - _dict = { - 'PT': {}, - 'MT': {}, - 'VM': {}, - 'OM': {}, - 'SP': {}, - 'SS': {}, - 'EQ': {}, - 'CE': {}, - 'SF': {}, - } - - # Group the tag - for item in ids: - _type = item[0:2] - _number = item[2:] - if _type not in _dict.keys(): - print("Error Type", item) - continue - if _number not in _dict[_type].keys(): - _dict[_type][_number] = 111 - - # Todo: Get data from database - - # Replace - for item in ids: - r_type = item[0:2] - r_id = item[2:] - tmp_content = re.sub(r'.*?)>8*', - r' >' + str(_dict[r_type][r_id]) + '', - tmp_content) - - result['content'] = tmp_content - cursor.close() - cnx.disconnect() - resp.text = json.dumps(result) - - @staticmethod - @user_logger - def on_put(req, resp, id_): - """Handles PUT requests""" - access_control(req) - try: - raw_json = req.stream.read().decode('utf-8') - except Exception as ex: - raise falcon.HTTPError(falcon.HTTP_400, title='API.EXCEPTION', description=ex) - - if not id_.isdigit() or int(id_) <= 0: - raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', - description='API.INVALID_svg_ID') - - new_values = json.loads(raw_json) - - if 'name' not in new_values['data'].keys() or \ - not isinstance(new_values['data']['name'], str): - raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', - description='API.INVALID_NAME') - if 'content' not in new_values['data'].keys() or \ - not isinstance(new_values['data']['content'], str): - raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', - description='API.INVALID_CONTENT') - - name = new_values['data']['name'] - content = new_values['data']['content'] - - cnx = mysql.connector.connect(**config.myems_system_db) - cursor = cnx.cursor() - update_row = (" UPDATE tbl_svgs " - " SET name = %s, content = %s " - " WHERE id = %s ") - cursor.execute(update_row, (name, - content, - id_)) - cnx.commit() - - cursor.close() - cnx.disconnect() - - resp.status = falcon.HTTP_200 diff --git a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js b/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js deleted file mode 100644 index a94ccd66..00000000 --- a/myems-web/src/components/MyEMS/AuxiliarySystem/SvgSystem.js +++ /dev/null @@ -1,192 +0,0 @@ -import React, { createRef, Fragment, useState, useEffect } from 'react'; -import { - Breadcrumb, - BreadcrumbItem, - Card, - CardBody, - Col, - CustomInput, - Form, - FormGroup, - Label, - Modal, - ModalBody, - ModalFooter, - ModalHeader, - Row, - Spinner -} from 'reactstrap'; -import RealtimeChart from './RealtimeChart'; -import { getCookieValue, createCookie } from '../../../helpers/utils'; -import withRedirect from '../../../hoc/withRedirect'; -import { withTranslation } from 'react-i18next'; -import { toast } from 'react-toastify'; -import { APIBaseURL } from '../../../config'; - -const SvgSystem = ({ setRedirect, setRedirectUrl, t }) => { - 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 (is_logged_in === null || !is_logged_in) { - setRedirectUrl(`/authentication/basic/login`); - setRedirect(true); - } else { - //update expires time of cookies - createCookie('is_logged_in', true, 1000 * 60 * 60 * 8); - createCookie('user_name', user_name, 1000 * 60 * 60 * 8); - createCookie('user_display_name', user_display_name, 1000 * 60 * 60 * 8); - createCookie('user_uuid', user_uuid, 1000 * 60 * 60 * 8); - createCookie('token', token, 1000 * 60 * 60 * 8); - } - }); - - // Svg List - const [svgSystemList, setSvgSystemList] = useState([]); - - // Query Parameters - const [selectedSvgSystemID, setSelectedSvgSystemID] = useState(undefined); - - // Results - const [svgSystemContent, setSvgSystemContent] = useState(undefined); - const [svgSystemContentDict, setSvgSystemContentDict] = useState(undefined); - - // Init: Get svgs and set the first svg - useEffect(() => { - let isResponseOK = false; - fetch(APIBaseURL + '/svgs', { - 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) { - setSvgSystemList(json); - setSelectedSvgSystemID(json[0].id); - getSvgContent(json[0].id); - } else { - toast.error(json.description); - } - }) - .catch(err => { - console.log(err); - }); - }, []); - - const labelClasses = 'ls text-uppercase text-600 font-weight-semi-bold mb-0'; - - // Select: Choose Svg - const onSvgSystemChange = event => { - setSelectedSvgSystemID(event.target.value); - console.log('You Change the Svg ID', event.target.value); - // Get Svg Content - getSvgContent(event.target.value); - }; - - // Fcuntion: Get Svg Content - const getSvgContent = svgId => { - let isResponseOK = false; - fetch(APIBaseURL + '/svgs/' + svgId, { - 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) { - setSvgSystemContent(json.content); - setSvgSystemContentDict({ __html: json.content }); - } else { - toast.error(json.description); - } - }) - .catch(err => { - console.log(err); - }); - }; - - useEffect(() => { - console.log('svgSystemList', svgSystemList); - }, [svgSystemList]); - - useEffect(() => { - console.log('svgSystemContent', svgSystemContent); - }, [svgSystemContent]); - - useEffect(() => { - console.log('selectedSvgSystemID', selectedSvgSystemID); - }, [selectedSvgSystemID]); - - useEffect(() => { - console.log('svgSystemContentDict', svgSystemContentDict); - }, [svgSystemContentDict]); - - return ( - -
- - {t('Auxiliary System')} - {t('Svg System')} - -
- - -
- - - - - - {svgSystemList.map((svgSystem, index) => ( - - ))} - - - - -
-
-
- -
- - - ); -}; - -export default withTranslation()(withRedirect(SvgSystem)); diff --git a/myems-web/src/layouts/MyEMSRoutes.js b/myems-web/src/layouts/MyEMSRoutes.js index 6ab4fa13..5c3193c0 100644 --- a/myems-web/src/layouts/MyEMSRoutes.js +++ b/myems-web/src/layouts/MyEMSRoutes.js @@ -177,6 +177,7 @@ import CombinedEquipmentStatistics from '../components/MyEMS/CombinedEquipment/C // Auxiliary System import EnergyFlowDiagram from '../components/MyEMS/AuxiliarySystem/EnergyFlowDiagram'; import DistributionSystem from '../components/MyEMS/AuxiliarySystem/DistributionSystem'; +// import SvgSystem from '../components/MyEMS/AuxiliarySystem/SvgSystem'; // FDD import FDDCombinedEquipmentFault from '../components/MyEMS/FDD/CombinedEquipmentFault'; import FDDEquipmentFault from '../components/MyEMS/FDD/EquipmentFault'; @@ -196,7 +197,7 @@ import AdvancedReporting from '../components/MyEMS/AdvancedReporting/AdvancedRep import KnowledgeBase from '../components/MyEMS/KnowledgeBase/KnowledgeBase'; // Notification import Notification from '../components/MyEMS/Notification/Notification'; -import SvgSystem from '../components/MyEMS/AuxiliarySystem/SvgSystem'; + // const InboxRoutes = ({ match: { url } }) => ( // @@ -423,7 +424,7 @@ const MyEMSRoutes = () => ( {/*Auxiliary System*/} - + {/* */} {/*FDD*/} diff --git a/myems-web/src/routes.js b/myems-web/src/routes.js index ee8e238b..a77111c4 100644 --- a/myems-web/src/routes.js +++ b/myems-web/src/routes.js @@ -444,7 +444,7 @@ export const auxiliarySystemRoutes = { children: [ { to: '/auxiliarysystem/energyflowdiagram', name: 'Energy Flow Diagram' }, { to: '/auxiliarysystem/distributionsystem', name: 'Distribution System' }, - { to: '/auxiliarysystem/svgsystem', name: 'Svg System' } + // { to: '/auxiliarysystem/svgsystem', name: 'Svg System' } ] }; From 5491322bd4c9d1326d2ac954b3c8b14c5dadbe2e Mon Sep 17 00:00:00 2001 From: hyh123a Date: Sun, 24 Apr 2022 16:34:30 +0800 Subject: [PATCH 16/22] modify pro to ee --- myems-api/.gitignore | 3 +++ myems-api/app.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/myems-api/.gitignore b/myems-api/.gitignore index 4b3fcb2b..eab58dfa 100644 --- a/myems-api/.gitignore +++ b/myems-api/.gitignore @@ -60,3 +60,6 @@ ENV/ env.bak/ venv.bak/ pythonenv* + +# ee files +ee/ diff --git a/myems-api/app.py b/myems-api/app.py index 7e21259b..ad5127b8 100644 --- a/myems-api/app.py +++ b/myems-api/app.py @@ -85,7 +85,7 @@ from reports import virtualmetercost ######################################################################################################################## # BEGIN imports for Enterprise Version ######################################################################################################################## -# from pro import svg +# from ee import svg ######################################################################################################################## # END imports for Enterprise Version From fa91142668c646fb6dcfdfbc9be6238412653d48 Mon Sep 17 00:00:00 2001 From: hyh123a Date: Sun, 24 Apr 2022 19:19:30 +0800 Subject: [PATCH 17/22] add the useInterval hook --- myems-web/src/hooks/useInterval.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 myems-web/src/hooks/useInterval.js diff --git a/myems-web/src/hooks/useInterval.js b/myems-web/src/hooks/useInterval.js new file mode 100644 index 00000000..ac540646 --- /dev/null +++ b/myems-web/src/hooks/useInterval.js @@ -0,0 +1,22 @@ +import React, { useState, useEffect, useRef } from 'react'; + +const useInterval = (callback, delay) => { + const savedCallback = useRef(); + + // Remember the latest callback. + useEffect(() => { + savedCallback.current = callback; + }); + + // Set up the interval. + useEffect(() => { + function tick() { + savedCallback.current(); + } + if (delay !== null) { + let id = setInterval(tick, delay); + return () => clearInterval(id); + } + }, [delay]); +}; +export default useInterval; From 1942506c7ef2e6f2dd26e2ba127d49cc3c11d993 Mon Sep 17 00:00:00 2001 From: hyh123a Date: Sun, 24 Apr 2022 19:22:12 +0800 Subject: [PATCH 18/22] modify the i18n field --- myems-web/src/i18n.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/myems-web/src/i18n.js b/myems-web/src/i18n.js index bc44a1aa..03722dd5 100644 --- a/myems-web/src/i18n.js +++ b/myems-web/src/i18n.js @@ -46,7 +46,7 @@ const resources = { 'Tenant Bill': 'Tenant Bill', 'Energy Flow Diagram': 'Energy Flow Diagram', 'Distribution System':'Distribution System', - 'Svg System': 'Flat Data Show System', + 'Svg System': 'SCADA Visualization System', 'Fault Statistics': 'Fault Statistics', 'Space Faults Data': 'Space Faults', 'Equipment Faults Data': 'Equipment Faults', @@ -846,7 +846,7 @@ const resources = { 'Tenant Bill': 'Mieter Rechnung', 'Energy Flow Diagram': 'Energieflussdiagramm', 'Distribution System': 'Vertriebssystem', - 'Svg System': 'Flache Datenanzeige', + 'Svg System': 'SCADA-Visualisierungssystem', 'Fault Statistics': 'Fehlerstatistik', 'Space Faults Data': 'Platz Fehler', 'Equipment Faults Data': 'Ausrüstung Fehler', @@ -1657,7 +1657,7 @@ const resources = { 'Tenant Bill': '租户账单', 'Energy Flow Diagram': '能流图', 'Distribution System': '配电系统', - 'Svg System': '平面数据展示系统', + 'Svg System': '组态可视化系统', 'Fault Statistics': '故障统计分析', 'Space Faults Data': '空间故障分析', 'Equipment Faults Data': '设备故障分析', From 500c69d212836045bc3ba7996b0518c3607f6268 Mon Sep 17 00:00:00 2001 From: hyh123a Date: Sun, 24 Apr 2022 19:22:49 +0800 Subject: [PATCH 19/22] delete useless img --- myems-web/src/assets/img/meter.png | Bin 3448 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 myems-web/src/assets/img/meter.png diff --git a/myems-web/src/assets/img/meter.png b/myems-web/src/assets/img/meter.png deleted file mode 100644 index c0d6f7b6fb94a5008367e937d3d8982d758987b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3448 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 From 461a081ae796b8f9ebbfdec21fd4a3fd8e2010c6 Mon Sep 17 00:00:00 2001 From: hyh123a Date: Tue, 26 Apr 2022 16:43:34 +0800 Subject: [PATCH 20/22] add the admin translation --- myems-api/app.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/myems-api/app.py b/myems-api/app.py index ad5127b8..45d64d3d 100644 --- a/myems-api/app.py +++ b/myems-api/app.py @@ -85,7 +85,6 @@ from reports import virtualmetercost ######################################################################################################################## # BEGIN imports for Enterprise Version ######################################################################################################################## -# from ee import svg ######################################################################################################################## # END imports for Enterprise Version @@ -651,20 +650,6 @@ api.add_route('/reports/virtualmetercost', # BEGIN Routes for Enterprise Edition ######################################################################################################################## -######################################################################################################################## -# Routes for Svg System -######################################################################################################################## - -""" -# Name: Svg System -# Web UI Router: auxiliarysystem/svgsystem -# API File: myems-api/pro/svg.py -""" -# api.add_route('/svgs', -# svg.Collection()) -# api.add_route('/svgs/{id_}', -# svg.Item()) - ######################################################################################################################## # END Routes for Enterprise Edition From c0d7440cc8c34402cb32529f062a3030f79969cc Mon Sep 17 00:00:00 2001 From: hyh123a Date: Tue, 26 Apr 2022 16:45:45 +0800 Subject: [PATCH 21/22] modify the web code --- myems-web/src/layouts/MyEMSRoutes.js | 2 -- myems-web/src/routes.js | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/myems-web/src/layouts/MyEMSRoutes.js b/myems-web/src/layouts/MyEMSRoutes.js index 5c3193c0..a8ca2d85 100644 --- a/myems-web/src/layouts/MyEMSRoutes.js +++ b/myems-web/src/layouts/MyEMSRoutes.js @@ -177,7 +177,6 @@ import CombinedEquipmentStatistics from '../components/MyEMS/CombinedEquipment/C // Auxiliary System import EnergyFlowDiagram from '../components/MyEMS/AuxiliarySystem/EnergyFlowDiagram'; import DistributionSystem from '../components/MyEMS/AuxiliarySystem/DistributionSystem'; -// import SvgSystem from '../components/MyEMS/AuxiliarySystem/SvgSystem'; // FDD import FDDCombinedEquipmentFault from '../components/MyEMS/FDD/CombinedEquipmentFault'; import FDDEquipmentFault from '../components/MyEMS/FDD/EquipmentFault'; @@ -424,7 +423,6 @@ const MyEMSRoutes = () => ( {/*Auxiliary System*/} - {/* */} {/*FDD*/} diff --git a/myems-web/src/routes.js b/myems-web/src/routes.js index a77111c4..61795c27 100644 --- a/myems-web/src/routes.js +++ b/myems-web/src/routes.js @@ -443,8 +443,7 @@ export const auxiliarySystemRoutes = { icon: 'chart-pie', children: [ { to: '/auxiliarysystem/energyflowdiagram', name: 'Energy Flow Diagram' }, - { to: '/auxiliarysystem/distributionsystem', name: 'Distribution System' }, - // { to: '/auxiliarysystem/svgsystem', name: 'Svg System' } + { to: '/auxiliarysystem/distributionsystem', name: 'Distribution System' } ] }; From fadda60ab636fef0d2a072a07f6ba5968e6247ee Mon Sep 17 00:00:00 2001 From: hyh123a Date: Tue, 26 Apr 2022 16:46:14 +0800 Subject: [PATCH 22/22] add the translation field --- myems-admin/app/translations.js | 77 +++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/myems-admin/app/translations.js b/myems-admin/app/translations.js index ea9af7dd..5fd87261 100644 --- a/myems-admin/app/translations.js +++ b/myems-admin/app/translations.js @@ -94,6 +94,7 @@ function config($translateProvider) { CATEGORY: 'Energy Categories', ENERGY_FLOW_DIAGRAM: 'Energy Flow Diagram', DISTRIBUTION_SYSTEM: 'Distribution System', + SVG_SYSTEM: 'SCADA Visualization System', MENU: 'Menu Settings', TARIFF: 'Tariff Settings', EMAIL_SERVER: 'Email Server Settings', @@ -379,6 +380,17 @@ function config($translateProvider) { PREVIEW: 'Preview', N_S_PREVIEW: ' Preview', }, + SVG_SYSTEM: { + SVG_SYSTEM: 'SVG System', + ADD_SVG_SYSTEM: 'Add SVG System', + EDIT_SVG_SYSTEM: 'Eidt SVG System', + SELECT_SVG_SYSTEM: 'Select SVG System', + SVG: 'SVG', + INPUT_SVG: 'Please Input SVG', + DESCRIPTION: 'Description', + PREVIEW: 'Preview', + N_S_PREVIEW: ' Preview', + }, EQUIPMENT: { ADD_EQUIPMENT: 'Add Equipment', EDIT_EQUIPMENT: 'Edit Equipment', @@ -628,6 +640,8 @@ function config($translateProvider) { DISTRIBUTION_CIRCUIT_POINT_RELATION_NOT_FOUND: 'Distribution Circuit Point Relation Not Found', DISTRIBUTION_SYSTEM_NAME_IS_ALREADY_IN_USE: 'Distribution System Name Is Already In Use', DISTRIBUTION_SYSTEM_NOT_FOUND: 'Distribution System Not Found', + SVG_SYSTEM_NAME_IS_ALREADY_IN_USE: 'SCADA Visualization System Name Is Already In Use', + SVG_SYSTEM_NOT_FOUND: 'SCADA Visualization System Not Found', EMAIL_IS_ALREADY_IN_USE: 'Email Is Already In Use', EMAIL_MESSAGE_NOT_FOUND: 'Email Message Not Found', EMAIL_SERVER_HOST_IS_ALREADY_IN_USE: 'Email Server Host Is Already In Use', @@ -705,6 +719,8 @@ function config($translateProvider) { INVALID_DISTRIBUTION_ROOM: 'Invalid Distribution Room', INVALID_DISTRIBUTION_SYSTEM_ID: 'Invalid Distribution System ID', INVALID_DISTRIBUTION_SYSTEM_NAME: 'Invalid Distribution System Name', + INVALID_SVG_SYSTEM_ID: 'Invalid SCADA Visualization System ID', + INVALID_SVG_SYSTEM_NAME: 'Invalid SCADA Visualization System Name', INVALID_EMAIL: 'Invalid Email', INVALID_EMAIL_MESSAGE_ID: 'Invalid Email Message ID', INVALID_EMAIL_SERVER_HOST: 'Invalid Email Server Host', @@ -1086,6 +1102,7 @@ function config($translateProvider) { CATEGORY: '能源分类管理', ENERGY_FLOW_DIAGRAM: '能流图管理', DISTRIBUTION_SYSTEM: '配电系统管理', + SVG_System: '组态可视化系统管理', MENU: '菜单管理', TARIFF: '能源费率管理', EMAIL_SERVER: '邮件服务器设置', @@ -1351,6 +1368,15 @@ function config($translateProvider) { PREVIEW: '预览', N_S_PREVIEW: ' 预览', }, + SVG_SYSTEM: { + SVG_SYSTEM: '组态可视化系统', + ADD_SVG_SYSTEM: '添加组态可视化系统', + EDIT_SVG_SYSTEM: '编辑组态可视化系统', + SELECT_SVG_SYSTEM: '请选择组态可视化系统', + SVG: 'SVG', + INPUT_SVG: '请输入SVG', + PREVIEW: '预览', + }, ENERGY_FLOW_DIAGRAM: { ADD_ENERGY_FLOW_DIAGRAM: '添加能流图', EDIT_ENERGY_FLOW_DIAGRAM: '编辑能流图', @@ -1627,6 +1653,8 @@ function config($translateProvider) { DISTRIBUTION_CIRCUIT_POINT_RELATION_NOT_FOUND: 'Distribution Circuit Point Relation Not Found', DISTRIBUTION_SYSTEM_NAME_IS_ALREADY_IN_USE: 'Distribution System Name Is Already In Use', DISTRIBUTION_SYSTEM_NOT_FOUND: 'Distribution System Not Found', + SVG_SYSTEM_NAME_IS_ALREADY_IN_USE: 'SCADA Visualization System Name Is Already In Use', + SVG_SYSTEM_NOT_FOUND: 'SCADA Visualization System Not Found', EMAIL_IS_ALREADY_IN_USE: 'Email Is Already In Use', EMAIL_MESSAGE_NOT_FOUND: 'Email Message Not Found', EMAIL_SERVER_HOST_IS_ALREADY_IN_USE: 'Email Server Host Is Already In Use', @@ -1702,8 +1730,10 @@ function config($translateProvider) { INVALID_DISTRIBUTION_CIRCUIT_ID: 'Invalid Distribution Circuit ID', INVALID_DISTRIBUTION_CIRCUIT_NAME: 'Invalid Distribution Circuit Name', INVALID_DISTRIBUTION_ROOM: 'Invalid Distribution Room', - INVALID_DISTRIBUTION_SYSTEM_ID: 'Invalid Distribution System ID', - INVALID_DISTRIBUTION_SYSTEM_NAME: 'Invalid Distribution System Name', + INVALID_DISTRIBUTION_SYSTEM_ID: 'Invalid SCADA Visualization System ID', + INVALID_DISTRIBUTION_SYSTEM_NAME: 'Invalid SCADA Visualization System Name', + INVALID_SVG_SYSTEM_ID: 'Invalid Distribution System ID', + INVALID_SVG_SYSTEM_NAME: 'Invalid Distribution System Name', INVALID_EMAIL: 'Invalid Email', INVALID_EMAIL_MESSAGE_ID: 'Invalid Email Message ID', INVALID_EMAIL_SERVER_HOST: 'Invalid Email Server Host', @@ -2085,6 +2115,7 @@ function config($translateProvider) { CATEGORY: 'Energieklassifizierungsmanagement', ENERGY_FLOW_DIAGRAM: 'Energieflussdiagramm-Management', DISTRIBUTION_SYSTEM: 'Verwaltung des Verteilungssystems', + SVG_SYSTEM: 'SCADA-Visualisierungssystem', MENU: 'Verwaltung des Menüs', TARIFF: 'Energieratenmanagement', EMAIL_SERVER: 'Mailserver-Einstellungen', @@ -2319,35 +2350,21 @@ function config($translateProvider) { INPUT_DESCRIPTION: 'Bitte geben Sie eine Beschreibung ein', }, DISTRIBUTION_SYSTEM: { - DISTRIBUTION_SYSTEM: 'Vertriebssystem', - ADD_DISTRIBUTION_SYSTEM: 'Stromverteilungssystem hinzufügen', - EDIT_DISTRIBUTION_SYSTEM: 'Stromverteilungssystem bearbeiten', - SELECT_DISTRIBUTION_SYSTEM: 'Bitte wählen Sie das Stromverteilungssystem', + DISTRIBUTION_SYSTEM: 'SCADA-Visualisierungssystem', + ADD_DISTRIBUTION_SYSTEM: 'SCADA-Visualisierungssystem hinzufügen', + EDIT_DISTRIBUTION_SYSTEM: 'SCADA-Visualisierungssystem bearbeiten', + SELECT_DISTRIBUTION_SYSTEM: 'Bitte wählen Sie das SCADA-Visualisierungssystem', + SVG: 'SVG', + PREVIEW: 'Vorschau', + }, + SVG_SYSTEM: { + SVG_SYSTEM: 'Vertriebssystem', + ADD_SVG_SYSTEM: 'Stromverteilungssystem hinzufügen', + EDIT_SVG_SYSTEM: 'Stromverteilungssystem bearbeiten', + SELECT_SVG_SYSTEM: 'Bitte wählen Sie das Stromverteilungssystem', SVG: 'SVG', INPUT_SVG: 'Bitte geben Sie SVG ein', - DESCRIPTION: 'Beschreibung', - DISTRIBUTION_CIRCUIT: 'Verteilerkreis', - N_S_DISTRIBUTION_CIRCUIT: 'Eigener Verteilerkreis', - ADD_DISTRIBUTION_CIRCUIT: 'Verteilerkreis hinzufügen', - EDIT_DISTRIBUTION_CIRCUIT: 'Stromverteilungskreis bearbeiten', - SELECT_DISTRIBUTION_CIRCUIT: 'Bitte wählen Sie den Verteilerkreis', - DISTRIBUTION_CIRCUIT_ID: 'ID', - DISTRIBUTION_CIRCUIT_NAME: 'Name', - INPUT_DISTRIBUTION_CIRCUIT_NAME: 'Bitte geben Sie einen Namen ein', - DISTRIBUTION_CIRCUIT_DISTRIBUTION_ROOM: 'Stromverteilungsraum', - INPUT_DISTRIBUTION_CIRCUIT_DISTRIBUTION_ROOM: 'Bitte betreten Sie den Stromverteilungsraum', - DISTRIBUTION_CIRCUIT_SWITCHGEAR: 'Verteilerschrank', - INPUT_DISTRIBUTION_CIRCUIT_SWITCHGEAR: 'Bitte betreten Sie den Stromverteilungsschrank', - DISTRIBUTION_CIRCUIT_PEAK_LOAD: 'Maximale Kapazität (KW)', - INPUT_DISTRIBUTION_CIRCUIT_PEAK_LOAD: 'Bitte geben Sie die maximale Kapazität (KW) ein', - DISTRIBUTION_CIRCUIT_PEAK_CURRENT: 'Maximaler Strom (A)', - INPUT_DISTRIBUTION_CIRCUIT_PEAK_CURRENT: 'Bitte geben Sie den Maximalstrom ein (A)', - DISTRIBUTION_CIRCUIT_CUSTOMERS: 'Nutzer', - INPUT_DISTRIBUTION_CIRCUIT_CUSTOMERS: 'Bitte geben Sie den Benutzer ein', - DISTRIBUTION_CIRCUIT_METERS: 'Ausgehender Zähler', - INPUT_DISTRIBUTION_CIRCUIT_METERS: 'Bitte geben Sie den Auslasszähler ein', PREVIEW: 'Vorschau', - N_S_PREVIEW: 'Vorschau', }, ENERGY_FLOW_DIAGRAM: { ADD_ENERGY_FLOW_DIAGRAM: 'Energieflussdiagramm hinzufügen', @@ -2624,6 +2641,8 @@ function config($translateProvider) { DISTRIBUTION_CIRCUIT_POINT_RELATION_NOT_FOUND: 'Distribution Circuit Point Relation Not Found', DISTRIBUTION_SYSTEM_NAME_IS_ALREADY_IN_USE: 'Distribution System Name Is Already In Use', DISTRIBUTION_SYSTEM_NOT_FOUND: 'Distribution System Not Found', + SVG_SYSTEM_NAME_IS_ALREADY_IN_USE: 'SCADA Visualization System Name Is Already In Use', + SVG_SYSTEM_NOT_FOUND: 'SCADA Visualization System Not Found', EMAIL_IS_ALREADY_IN_USE: 'Email Is Already In Use', EMAIL_MESSAGE_NOT_FOUND: 'Email Message Not Found', EMAIL_SERVER_HOST_IS_ALREADY_IN_USE: 'Email Server Host Is Already In Use', @@ -2701,6 +2720,8 @@ function config($translateProvider) { INVALID_DISTRIBUTION_ROOM: 'Invalid Distribution Room', INVALID_DISTRIBUTION_SYSTEM_ID: 'Invalid Distribution System ID', INVALID_DISTRIBUTION_SYSTEM_NAME: 'Invalid Distribution System Name', + INVALID_SVG_SYSTEM_ID: 'Invalid Svg System ID', + INVALID_SVG_SYSTEM_NAME: 'Invalid Svg System Name', INVALID_EMAIL: 'Invalid Email', INVALID_EMAIL_MESSAGE_ID: 'Invalid Email Message ID', INVALID_EMAIL_SERVER_HOST: 'Invalid Email Server Host',