{"version":3,"sources":["slices/gatewaySlice.js","components/ErrorBoundary/index.jsx","Utils/enums.js","slices/connectionStatusSlice.js","components/Header/NavDropdown.jsx","slices/userSlice.js","components/Header/CommonNav.jsx","components/Header/index.jsx","components/Login/index.jsx","components/AuthByJWT/index.jsx","components/Notification/index.js","App.jsx","store.js","serviceWorker.js","index.js","components/Notification/notificationSlice.js","slices/themeSlice.js","Utils/endpoints.js"],"names":["gatewaySlice","createSlice","name","initialState","isLoading","accessName","undefined","bay","gatewayName","guid","ip","plantName","sn","substationName","updateInterval","extProps","modbusList","singlelineConfig","variableGroupsConfig","reducers","updateGatewayPending","state","action","updateGatewayFulfill","payload","baseInfo","updateSinglelineConfig","updateVariableGroupsConfig","actions","ErrorBoundary","props","hasError","error","errorInfo","this","children","React","Component","StatusColor","Yellow","Orange","Red","Magenta","Green","Gray","Blue","Purple40","Purple50","Purple60","PrimaryBlue10","PrimaryBlue20","PrimaryBlue30","PrimaryBlue40","PrimaryBlue50","PrimaryBlue60","PrimaryBlue70","PrimaryBlue80","PrimaryBlue90","PrimaryBlue100","Theme","Light","Dark","connectionStatusSlice","serverConnectRetry","deviceConnectionRetry","updateConnectionStatus","_serverRetry","parseInt","find","d","errorCount","isNaN","filter","NavDropdown","navButton","useState","open","setOpen","className","onClick","onOutsideClick","userSlice","profile","updateUserProfile","CommonNav","active","userProfile","useSelector","user","feature","dashboard","path","label","device","role","indexOf","server","network","system","Object","keys","map","key","to","Header","isShowChangePassword","setIsShowChangePassword","dispatch","useDispatch","env","process","location","useLocation","_feature","pathname","split","isMenuOpen","setIsMenuOpen","useEffect","handleResize","window","addEventListener","removeEventListener","productName","userName","style","border","data-cy","title","showCloseButton","closeOnEscape","closeOnLostFocus","dimBackground","display","marginRight","REACT_APP_VERSION","discreet","href","buttons","icon","message","onYes","axios","post","resetUserPassword","then","e","data","code","showNotification","NotificationType","Success","Warn","localStorage","removeItem","isShow","onClose","ChangePassword","inputOldPassword","setInputOldPassword","inputNewPassword","setInputNewPassword","inputRepeatPassword","setInputRepeatPassword","errorOldPassword","setErrorOldPassword","errorNewPassword","setErrorNewPassword","errorRepeatPassword","setErrorRepeatPassword","isOpen","dataType","value","onValueChange","validationResult","clearOnEscape","showValidationBarWhenInvalid","showValidationIconWhenInvalid","sizeClass","text","type","changePassword","pswold","pswnew","msg","index","loading","setLoading","document","body","backgroundColor","disableDefaultStyle","productSubName","footerText","customContent","onSignInStart","onSignInEnd","showDefaultFields","showLoginButton","LoginForm","defaultValidation","valid","username","setUsername","password","setPassword","errUsername","setErrUsername","errPassword","setErrPassword","remember","setRemember","loginResult","setLoginResult","console","log","getItem","cachedUsername","signInJwt","isValid","response","result","token","setItem","catch","marginBottom","onKeyUp","onChange","setIsLoading","_user","jwtDecode","Date","getTime","exp","defaults","headers","common","remainMS","setTimeout","color","notifications","list","position","bottom","right","App","theme","getTheme","mounted","useRef","version","current","LoadingModule","determinate","CommonComponent","lazy","AdvancedComponent","component","Test","fallback","exact","Notification","configureStore","reducer","notificationSlice","connectionStatus","gateway","themeSlice","Boolean","hostname","match","ReactDOM","render","store","getElementById","navigator","serviceWorker","ready","registration","unregister","push","prepare","severity","id","nanoid","timeout","Info","Alarm","toggleTheme","baseUrl","getServerSettings","updateServerSettings","getAllModbusTemplate","downloadModbus","getConnectionStatus","getLicenseStatus","uploadModbus","uploadCPMLicense","uploadADLicense","getBlobServerSettings","updateBlobServerSettings","restartApp","getDeviceModels","getDevices","updateDevices","getDeviceMonitoringVariables","getDeviceLatestValueByVariable","getDeviceHistoricalValueByVariable","variable","from","getDeviceSamplingVariables","getDeviceSamplingVariableRecords","variableName","getDeviceSample","componentId","sampleId","getDeviceEvents","deviceId","pageIndex","pageSize","downloadHostXML","downloadDeviceXML","restoreHostXML","restoreDeviceXML","getLTEDevices","getLTEStatus","restartLTEDevice","getWanSettings","getLanSettings","updateWanSettings","updateLanSettings","resetWanSettings","resetLanSettings","getGatewayInfo","getDeviceResourceUseage","getNtpSetting","updateNtpSetting","syncTime","getRemoteSetting","updateRemoteSetting","getRemoteServerStatus","toggleRemote","rebootDevice","getServerTime","getSelfDiagnosis","testPing","testPort","port","getAllLogs","getTop100Logs","deleteAllLogs","importModelFile","importPatch","generateLicenseForCurrent","generateLicenseForOthers","generateAdLicenseForCurrent","generateAdLicenseForOthers","getStartupScript","updateStartupScript","getTaskScript","updateTaskScript","testMqtt","getSinglelineConfig","resetSinglelineConfig","getVariableGroupsConfig","uploadVariableGroupsConfig"],"mappings":"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","file":"static/js/main.4a2089d0.chunk.js","sourcesContent":["import { createSlice } from \"@reduxjs/toolkit\";\r\n\r\n\r\nconst gatewaySlice = createSlice({\r\n name: \"gateway\",\r\n initialState: {\r\n isLoading: false,\r\n\r\n accessName: undefined,\r\n bay: undefined,\r\n gatewayName: undefined,\r\n guid: undefined,\r\n ip: undefined,\r\n plantName: undefined,\r\n sn: undefined,\r\n substationName: undefined,\r\n updateInterval: 15,\r\n\r\n extProps: [],\r\n modbusList: [],\r\n singlelineConfig:undefined,\r\n variableGroupsConfig:undefined,\r\n },\r\n reducers: {\r\n updateGatewayPending(state, action) {\r\n state.isLoading = true;\r\n },\r\n updateGatewayFulfill(state, action) {\r\n state.isLoading = false;\r\n state.accessName = action.payload.baseInfo.accessName;\r\n state.bay = action.payload.baseInfo.bay;\r\n state.gatewayName = action.payload.baseInfo.gatewayName;\r\n state.guid = action.payload.baseInfo.guid;\r\n state.ip = action.payload.baseInfo.ip;\r\n state.plantName = action.payload.baseInfo.plantName;\r\n state.sn = action.payload.baseInfo.sn;\r\n state.substationName = action.payload.baseInfo.substationName;\r\n state.updateInterval = action.payload.baseInfo.updateInterval;\r\n state.extProps = action.payload.extProps;\r\n state.modbusList = action.payload.modbusList;\r\n\r\n },\r\n updateSinglelineConfig(state, action) {\r\n state.singlelineConfig = action.payload;\r\n },\r\n updateVariableGroupsConfig(state, action) {\r\n state.variableGroupsConfig = action.payload;\r\n },\r\n }\r\n});\r\n\r\nexport const { updateGatewayPending, updateGatewayFulfill,updateSinglelineConfig ,updateVariableGroupsConfig} = gatewaySlice.actions;\r\n\r\nexport default gatewaySlice.reducer;\r\n","import React from \"react\";\r\nexport class ErrorBoundary extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error) {\r\n // 更新 state 使下一次渲染能够显示降级后的 UI\r\n return { hasError: true };\r\n }\r\n\r\n componentDidCatch(error, errorInfo) {\r\n // 你同样可以将错误日志上报给服务器\r\n // console.log(error, errorInfo);\r\n }\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n // 你可以自定义降级后的 UI 并渲染\r\n return
Something went wrong.
;\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}","export const EventType = {\r\n MonitoringEvent: 0,\r\n GatewayConnect: 1,\r\n GatewayDisconnect: 2,\r\n SystemEvent: 3,\r\n GatewayUpdated: 4,\r\n SwitchImage: 5,\r\n Diagnostics: 6,\r\n Recommandation: 7\r\n}\r\nexport const CriticalLevel = {\r\n Alarm: 0,\r\n Warning: 1,\r\n Normal: 2\r\n}\r\nexport const OpenOrClose = {\r\n Open: 4,\r\n Close: 5\r\n}\r\nexport const StatusColor = {\r\n Yellow: 'rgb(255, 216, 0)',\r\n Orange: 'rgb(255, 115, 0)',\r\n Red: 'rgb(240, 48, 64)',\r\n Magenta: 'rgb(203, 43, 213)',\r\n Green: 'rgb(12, 169, 25)',\r\n Gray: 'rgb(186, 186, 186)',\r\n Blue: 'rgb(51, 102, 255)',\r\n Purple40: 'rgb(230, 112, 230)',\r\n Purple50: 'rgb(204, 80, 204)',\r\n Purple60: 'rgb(161, 63, 161)',\r\n PrimaryBlue10: 'rgb(224, 240, 255)',\r\n PrimaryBlue20: 'rgb(197, 224, 250)',\r\n PrimaryBlue30: 'rgb(158, 191, 247)',\r\n PrimaryBlue40: 'rgb(119, 163, 252)',\r\n PrimaryBlue50: 'rgb(76, 133, 255)',\r\n PrimaryBlue60: 'rgb(51, 102, 255)',\r\n PrimaryBlue70: 'rgb(42, 53, 255)',\r\n PrimaryBlue80: 'rgb(44, 32, 212)',\r\n PrimaryBlue90: 'rgb(22, 12, 156)',\r\n PrimaryBlue100: 'rgb(8, 2, 97)',\r\n}\r\n\r\nexport const Theme = {\r\n Light: 'light',\r\n Dark: 'dark'\r\n}\r\n\r\nexport const Language = {\r\n zhCN: 'zh_cn',\r\n enUS: 'en_us'\r\n}\r\n\r\nexport const DiagnosisType = {\r\n Temperature: \"Temperature\",\r\n TemperatureBusbar: \"TemperatureBusbar\",\r\n TemperatureContact: \"TemperatureContact\",\r\n TemperatureUpContact: \"TemperatureUpContact\",\r\n TemperatureDownContact: \"TemperatureDownContact\",\r\n TemperatureCable: \"TemperatureCable\",\r\n Pressure: \"Pressure\",\r\n LinearTravel: 'LinearTravel',\r\n Coil: 'Coil',\r\n OpenLinearTravel: \"OpenLinearTravel\",\r\n CloseLinearTravel: \"CloseLinearTravel\",\r\n CloseCoil: \"CloseCoil\",\r\n OpenCoil: \"OpenCoil\",\r\n Motor: \"Motor\",\r\n}\r\n\r\nexport const DeviceFunction = {\r\n Temperature: 'Temperature',\r\n Travel: 'Travel',\r\n Coil: 'Coil',\r\n Motor: 'Motor',\r\n Gas: 'Gas',\r\n Interlock: 'Interlock',\r\n ImageIndentification: 'ImageIndentification'\r\n}\r\n\r\nexport const GatewayStatus = {\r\n TobeApprove: -1,\r\n New: 0,\r\n Approved: 1,\r\n Modified: 2\r\n}","import { createSlice } from \"@reduxjs/toolkit\";\r\n\r\nconst connectionStatusSlice = createSlice({\r\n name: \"connectionStatus\",\r\n initialState: {\r\n isLoading: false,\r\n serverConnectRetry: undefined,\r\n deviceConnectionRetry: []\r\n },\r\n reducers: {\r\n updateConnectionStatus(state, action) {\r\n const _serverRetry = parseInt(action.payload.find(d => d.name === 'Cloud')?.errorCount)\r\n state.serverConnectRetry = isNaN(_serverRetry) ? undefined : _serverRetry\r\n state.deviceConnectionRetry = action.payload.filter(d => d.name !== 'Cloud')\r\n }\r\n }\r\n});\r\n\r\nexport const { updateConnectionStatus } = connectionStatusSlice.actions;\r\n\r\nexport default connectionStatusSlice.reducer;\r\n","import React, { useState } from 'react'\r\nimport OutsideClickHandler from 'react-outside-click-handler';\r\n\r\nexport default function NavDropdown({ navButton, children }) {\r\n const [open, setOpen] = useState(false)\r\n return (\r\n
\r\n
setOpen(true)}>\r\n {navButton}
\r\n setOpen(false)}>\r\n
setOpen(false)}>\r\n {children}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import { createSlice, createAsyncThunk } from \"@reduxjs/toolkit\";\r\n\r\nconst userSlice = createSlice({\r\n name: \"user\",\r\n initialState: {\r\n profile: null\r\n },\r\n reducers: {\r\n updateUserProfile(state, action) {\r\n state.profile = action.payload ?? {}\r\n }\r\n }\r\n});\r\n\r\nexport const { updateUserProfile } = userSlice.actions;\r\n\r\nexport default userSlice.reducer;\r\n","import React from 'react'\r\nimport { Switch, Route, useHistory, useRouteMatch, useParams, useLocation, Link as RouteLink } from \"react-router-dom\";\r\nimport { Icon, Dialog, WithMessageDialog, MessageDialog, WithDialog, Link } from '@abb/abb-common-ux-react'\r\n\r\nimport { useSelector } from 'react-redux'\r\n\r\n\r\nexport default function CommonNav({ active }) {\r\n const userProfile = useSelector(state => state.user.profile)\r\n // console.log(location, params, match, _feature)\r\n let feature = { \r\n dashboard: { path: '/dashboard', label: '网关总览' }, \r\n device: { path: '/device', label: '设备总览' },\r\n }\r\n if (userProfile?.role?.indexOf('admin') === 0 || userProfile?.role?.indexOf('user') === 0) {\r\n feature = {\r\n ...feature,\r\n server: { path: '/server', label: '配置' },\r\n network: { path: '/network', label: '网络' },\r\n system: { path: '/system', label: '系统' },\r\n \r\n }\r\n }\r\n\r\n return (\r\n
\r\n {Object.keys(feature).map(key => (\r\n
\r\n {feature[key].label}\r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport NavDropdown from './NavDropdown'\r\nimport { useLocation, Link as RouteLink } from \"react-router-dom\";\r\nimport {\r\n AbbBar,\r\n AppHeader,\r\n AppHeaderSpacer, Dialog, WithDialog, Link, Input, Button,\r\n Icon,\r\n WithMessageDialog,\r\n MessageDialog\r\n} from '@abb/abb-common-ux-react';\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { updateUserProfile } from 'slices/userSlice'\r\nimport axios from 'axios'\r\nimport { changePassword, resetUserPassword } from 'Utils/endpoints'\r\nimport './header.scss'\r\nimport CommonNav from \"./CommonNav\";\r\nimport { NotificationType, showNotification } from \"components/Notification/notificationSlice\";\r\n\r\n\r\n\r\nexport default function Header() {\r\n const [isShowChangePassword, setIsShowChangePassword] = useState(false)\r\n const dispatch = useDispatch();\r\n const env = process.env\r\n const location = useLocation();\r\n const _feature = location.pathname?.split('/')[1]\r\n const userProfile = useSelector(state => state.user.profile)\r\n const [isMenuOpen, setIsMenuOpen] = useState(false)\r\n\r\n const signOut = () => {\r\n axios.post('/Account/SignOut').then(e => {\r\n localStorage.removeItem('token')\r\n dispatch(updateUserProfile(null))\r\n window.location.href = '/login'\r\n })\r\n }\r\n\r\n const onResetUserPassword = () => {\r\n axios.post(resetUserPassword()).then(e => {\r\n if (e.data.code === 0) {\r\n dispatch(showNotification(NotificationType.Success, \"user密码已重置\"))\r\n }\r\n else\r\n dispatch(showNotification(NotificationType.Warn, \"操作失败\"))\r\n })\r\n }\r\n useEffect(() => {\r\n setIsMenuOpen(false)\r\n }, [location])\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n setIsMenuOpen(false)\r\n }\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, [])\r\n\r\n // console.log( userProfile?.role?.indexOf('admin'))\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
setIsMenuOpen(!isMenuOpen)}>\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n {userProfile?.role && userProfile?.role?.indexOf('admin') >= 0 &&\r\n
\r\n 高级设置\r\n
}\r\n {userProfile?.userName}
}>\r\n
\r\n
    \r\n
  • \r\n \r\n
    \r\n
    \r\n
    关于
    \r\n
    \r\n
    MRC Gateway
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    Version {env.REACT_APP_VERSION}

    \r\n

    客服电话 400-820-9696

    \r\n

    意见反馈 service.cndmx@cn.abb.com

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
  • \r\n {userProfile?.role && userProfile?.role?.indexOf('admin') === -1 &&\r\n
  • setIsShowChangePassword(true)}>\r\n
    \r\n
    \r\n
    修改密码
    \r\n
    \r\n
    \r\n
  • }\r\n {userProfile?.role && userProfile?.role?.indexOf('admin') !== -1 &&\r\n
  • \r\n \r\n\r\n
    \r\n
    \r\n
    重置密码
    \r\n
    \r\n
    \r\n \r\n
    \r\n
  • \r\n }\r\n
  • \r\n \r\n
    \r\n
    \r\n
    注销
    \r\n
    \r\n
    \r\n \r\n
    \r\n
  • \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {isMenuOpen &&
setIsMenuOpen(false)} />}\r\n setIsShowChangePassword(false)} />\r\n\r\n \r\n )\r\n}\r\n\r\nconst ChangePassword = ({ isShow, onClose }) => {\r\n\r\n const dispatch = useDispatch()\r\n\r\n const [inputOldPassword, setInputOldPassword] = useState('')\r\n const [inputNewPassword, setInputNewPassword] = useState('')\r\n const [inputRepeatPassword, setInputRepeatPassword] = useState('')\r\n const [errorOldPassword, setErrorOldPassword] = useState('')\r\n const [errorNewPassword, setErrorNewPassword] = useState('')\r\n const [errorRepeatPassword, setErrorRepeatPassword] = useState('')\r\n useEffect(() => {\r\n if (isShow) {\r\n setInputOldPassword('')\r\n setInputNewPassword('')\r\n setInputRepeatPassword('')\r\n setErrorOldPassword('')\r\n setErrorNewPassword('')\r\n setErrorRepeatPassword('')\r\n }\r\n }, [isShow])\r\n\r\n const onChangePassword = () => {\r\n let hasError = false\r\n if (inputOldPassword === '') {\r\n setErrorOldPassword('请填写旧密码')\r\n hasError = true\r\n }\r\n if (inputNewPassword === '') {\r\n setErrorNewPassword('请填写新密码')\r\n hasError = true\r\n }\r\n else if (inputRepeatPassword !== inputNewPassword) {\r\n setErrorRepeatPassword('密码不一致')\r\n hasError = true\r\n }\r\n if (hasError) return;\r\n\r\n axios.post(changePassword(), {\r\n pswold: inputOldPassword,\r\n pswnew: inputNewPassword\r\n }).then(e => {\r\n if (e.data.code === 0) {\r\n onClose()\r\n dispatch(showNotification(NotificationType.Success, '修改成功'))\r\n }\r\n else {\r\n setErrorOldPassword(e.data.msg)\r\n }\r\n })\r\n }\r\n\r\n return (\r\n \r\n\r\n
\r\n
\r\n { setInputOldPassword(e); setErrorOldPassword('') }}\r\n validationResult={errorOldPassword}\r\n clearOnEscape={false}\r\n showValidationBarWhenInvalid\r\n showValidationIconWhenInvalid\r\n />\r\n
\r\n
\r\n { setInputNewPassword(e); setErrorNewPassword('') }}\r\n validationResult={errorNewPassword}\r\n clearOnEscape={false}\r\n showValidationBarWhenInvalid\r\n showValidationIconWhenInvalid />\r\n
\r\n
\r\n { setInputRepeatPassword(e); setErrorRepeatPassword('') }}\r\n validationResult={errorRepeatPassword}\r\n clearOnEscape={false}\r\n showValidationBarWhenInvalid\r\n showValidationIconWhenInvalid />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
)\r\n}","import React, { useState, useEffect } from 'react'\r\nimport { LoginScreen, Dialog, Checkbox, Input, Button } from '@abb/abb-common-ux-react'\r\nimport './login.scss'\r\nimport axios from 'axios'\r\n\r\nexport default function index() {\r\n const [loading, setLoading] = useState(false);\r\n\r\n const lawText =\r\n 'This is a private system. Do not attempt to logon unless you are an authorized user. ' +\r\n 'Any authorized or unauthorized access and use may be monitored and can result in ' +\r\n 'criminal or civil prosecution under applicable law.';\r\n useEffect(() => {\r\n window.document.body.style.backgroundColor = '#ebebeb'// '#0f0f0f' : \r\n }, [])\r\n\r\n return (\r\n
\r\n \r\n setLoading(true)} onSignInEnd={() => setLoading(false)} />}\r\n showDefaultFields={false}\r\n showLoginButton={false}\r\n />\r\n \r\n
\r\n\r\n )\r\n}\r\n\r\nconst LoginForm = ({ onSignInStart, onSignInEnd }) => {\r\n const defaultValidation = { valid: true, text: '' };\r\n const [username, setUsername] = useState('')\r\n const [password, setPassword] = useState('')\r\n const [errUsername, setErrUsername] = useState(defaultValidation)\r\n const [errPassword, setErrPassword] = useState(defaultValidation)\r\n const [remember, setRemember] = useState(false)\r\n const [loginResult, setLoginResult] = useState(null)\r\n\r\n useEffect(() => {\r\n console.log(localStorage.getItem('username'))\r\n const cachedUsername = localStorage.getItem('username')\r\n if (cachedUsername) {\r\n setUsername(cachedUsername)\r\n setRemember(true)\r\n }\r\n }, [])\r\n\r\n const signInCookie = () => {\r\n let isValid = true\r\n setLoginResult(null)\r\n if (username === '') {\r\n setErrUsername({ valid: false, text: '请填写用户名' })\r\n isValid = false;\r\n } else setErrUsername(defaultValidation)\r\n\r\n if (password === '') {\r\n setErrPassword({ valid: false, text: '请填写密码' })\r\n isValid = false;\r\n } else setErrPassword(defaultValidation)\r\n\r\n if (!isValid) return;\r\n\r\n onSignInStart()\r\n let payload = new FormData();\r\n payload.append('UserName', username);\r\n payload.append('Password', password);\r\n axios.post('/Account/SignIn', payload)\r\n .then(response => {\r\n console.log(response)\r\n if (response.data.result === \"Success\") {\r\n if (remember) {\r\n localStorage.setItem('username', username)\r\n } else localStorage.removeItem('username')\r\n window.location.href = '/'\r\n } else {\r\n // setLoading(false)\r\n setPassword('')\r\n setLoginResult({ result: false })\r\n onSignInEnd()\r\n }\r\n }).catch(e => onSignInEnd())\r\n }\r\n\r\n const signInJwt = () => {\r\n let isValid = true\r\n setLoginResult(null)\r\n if (username === '') {\r\n setErrUsername({ valid: false, text: '请填写用户名' })\r\n isValid = false;\r\n } else setErrUsername(defaultValidation)\r\n\r\n if (password === '') {\r\n setErrPassword({ valid: false, text: '请填写密码' })\r\n isValid = false;\r\n } else setErrPassword(defaultValidation)\r\n\r\n if (!isValid) return;\r\n\r\n onSignInStart()\r\n\r\n const payload = {\r\n userName: username,\r\n password: password\r\n }\r\n axios.post('/Account/Token', payload)\r\n .then(response => {\r\n console.log(response)\r\n if (response.data.result === \"Success\" && response.data.payload?.token) {\r\n if (remember) {\r\n localStorage.setItem('username', username)\r\n } else localStorage.removeItem('username')\r\n localStorage.setItem('token', response.data.payload.token)\r\n window.location.href = '/'\r\n } else {\r\n // setLoading(false)\r\n setPassword('')\r\n setLoginResult({ result: false })\r\n onSignInEnd()\r\n }\r\n }).catch(e => onSignInEnd())\r\n }\r\n\r\n return (\r\n
\r\n
\r\n { setUsername(e); setErrUsername(defaultValidation) }}\r\n showValidationBarWhenInvalid\r\n showValidationIconWhenInvalid\r\n clearOnEscape={false}\r\n validationResult={errUsername}\r\n />\r\n
\r\n
\r\n { setPassword(e); setErrPassword(defaultValidation) }}\r\n onKeyUp={e => { if (e.key === 'Enter') signInJwt() }}\r\n showValidationBarWhenInvalid\r\n showValidationIconWhenInvalid\r\n clearOnEscape={false}\r\n validationResult={errPassword} />\r\n
\r\n
setRemember(!remember)} label=\"记住用户名\" sizeClass=\"small\" />
\r\n {loginResult &&

登录失败,请输入正确的用户名和密码

}\r\n
\r\n
\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react'\r\nimport { LoadingIndicator } from '@abb/abb-common-ux-react';\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport axios from 'axios'\r\nimport { updateUserProfile } from 'slices/userSlice'\r\nimport jwtDecode from 'jwt-decode';\r\nexport default function index({ children }) {\r\n const [isLoading, setIsLoading] = useState(true)\r\n // const [isAuthenticated, setisAuthenticated] = useState(false)\r\n const dispatch = useDispatch();\r\n const userProfile = useSelector(state => state.user.profile)\r\n\r\n useEffect(() => {\r\n const token = localStorage.getItem('token');\r\n console.log(token)\r\n if (token) {\r\n const _user = jwtDecode(token);\r\n console.log(_user)\r\n if (new Date().getTime() < _user.exp * 1000) {\r\n dispatch(updateUserProfile(_user))\r\n axios.defaults.headers.common['Authorization'] = 'Bearer ' + token\r\n setIsLoading(false)\r\n return\r\n }\r\n }\r\n localStorage.removeItem('token')\r\n window.location.href = '/login'\r\n }, [])\r\n\r\n\r\n useEffect(() => {\r\n if (userProfile) {\r\n const remainMS = userProfile.exp * 1000 - new Date().getTime()\r\n // console.log(remainMS);\r\n setTimeout(() => {\r\n localStorage.removeItem('token')\r\n window.location.href = '/login'\r\n }, remainMS);\r\n }\r\n }, [userProfile])\r\n\r\n if (isLoading) return \r\n else if (!userProfile) return null\r\n else return children\r\n}\r\n","import React from \"react\";\r\nimport { NotificationContainer } from \"@abb/abb-common-ux-react\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nexport default function () {\r\n const notifications = useSelector((state) => state.notifications.list);\r\n return (\r\n \r\n );\r\n}\r\n","import React, { lazy, useRef, Suspense, useState, useEffect, useMemo } from \"react\";\r\nimport { BrowserRouter as Router, Switch, Route, useHistory } from \"react-router-dom\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { getTheme } from 'slices/themeSlice';\r\nimport Header from \"components/Header\";\r\nimport Login from \"components/Login\";\r\nimport AuthByCookie from 'components/AuthByCookie'\r\nimport AuthByJWT from 'components/AuthByJWT'\r\nimport Notification from \"components/Notification\";\r\nimport {\r\n AppContainer, AppContent, LoadingIndicator,\r\n Button, LoginScreen\r\n} from \"@abb/abb-common-ux-react\";\r\nimport \"@abb/abb-common-ux-react/styles.css\";\r\nimport \"styles/base.scss\";\r\nimport { ErrorBoundary } from \"components/ErrorBoundary\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n// import \"styles/base-dark-theme.scss\";\r\n\r\nexport default function App() {\r\n const theme = useSelector(getTheme)\r\n let mounted = useRef(false);\r\n const env = process.env\r\n useEffect(() => {\r\n if (env.version) console.log(`MRC Version: ${env.version}`)\r\n mounted.current = true;\r\n return () => mounted.current = false\r\n }, [env.version])\r\n\r\n const LoadingModule = mounted ? (\r\n
\r\n \r\n
) : null\r\n\r\n const CommonComponent = lazy(() => import(\"./modules/Common\"));\r\n const AdvancedComponent = lazy(() => import(\"./modules/Advanced\"));\r\n\r\n return (\r\n \r\n \r\n } />\r\n } />\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}","import { configureStore } from \"@reduxjs/toolkit\";\r\nimport notificationSlice from \"components/Notification/notificationSlice\";\r\n// import localeSlice from \"components/Locale/localeSlice\";\r\nimport user from \"slices/userSlice\";\r\n// import deviceSlice from \"slices/deviceSlice\";\r\n// import envSlice from \"slices/envSlice\";\r\nimport connectionStatusSlice from \"slices/connectionStatusSlice\";\r\nimport gatewaySlice from 'slices/gatewaySlice'\r\nimport themeSlice from 'slices/themeSlice'\r\n\r\n\r\nexport default configureStore({\r\n reducer: {\r\n notifications: notificationSlice,\r\n // locale: localeSlice,\r\n user: user,\r\n connectionStatus: connectionStatusSlice,\r\n // plantMap: plantMapSlice,\r\n // deviceInfo: deviceSlice,\r\n // env: envSlice,\r\n gateway: gatewaySlice,\r\n theme: themeSlice\r\n },\r\n});\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport App from \"./App\";\r\nimport store from \"./store\";\r\nimport { Provider } from \"react-redux\";\r\nimport * as serviceWorker from \"./serviceWorker\";\r\n\r\nReactDOM.render((\r\n \r\n \r\n \r\n), document.getElementById(\"root\")\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","import { createSlice } from \"@reduxjs/toolkit\";\r\nimport { nanoid } from \"nanoid\";\r\n\r\nconst notificationSlice = createSlice({\r\n name: \"counter\",\r\n initialState: {\r\n list: [],\r\n },\r\n reducers: {\r\n showNotification: {\r\n reducer(state, action) {\r\n state.list.push(action.payload);\r\n },\r\n prepare(severity, text) {\r\n return {\r\n payload: {\r\n id: nanoid(),\r\n type: \"banner\",\r\n // Change the Notification type and severity by randomly:\r\n discreet: false,\r\n severity: severity, // 'success', 'info', 'warn', 'alarm'\r\n timeout: 1500,\r\n text: text,\r\n },\r\n };\r\n },\r\n },\r\n },\r\n});\r\nexport const NotificationType = { Success: 'success', Info: 'info', Warn: 'warn', Alarm: 'alarm' };\r\nexport const { showNotification } = notificationSlice.actions;\r\n\r\nexport default notificationSlice.reducer;\r\n\r\n// const newNotification = {\r\n// id: nanoid,\r\n// type: 'banner',\r\n// // Change the Notification type and severity by randomly:\r\n// discreet: true,\r\n// severity: ['success', 'info', 'warn', 'alarm'][Math.floor(Math.random() * Math.floor(4))],\r\n// timeout: 3000,\r\n// text: `Random notification ${id}`,\r\n// };\r\n","import { createSlice } from \"@reduxjs/toolkit\";\r\nimport { Theme } from 'Utils/enums'\r\n\r\n\r\nconst themeSlice = createSlice({\r\n name: \"theme\",\r\n initialState: {\r\n name: process.env.NODE_ENV === \"development\" ? Theme.Light : Theme.Light\r\n },\r\n reducers: {\r\n toggleTheme(state, action) {\r\n // state.name === ''\r\n state.name = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const { toggleTheme } = themeSlice.actions;\r\nexport const getTheme = (state) => state.theme.name;\r\nexport default themeSlice.reducer;","//const baseUrl = process.env.NODE_ENV === 'development' ? 'http://139.219.8.65:11657/' : '/'\r\nconst baseUrl = process.env.NODE_ENV === 'development' ? '/' : '/'\r\n// 'api/Device/CFG'\r\n\r\nexport const changePassword = () => `${baseUrl}api/Admin/ChangePsw`\r\nexport const resetUserPassword = () => `${baseUrl}api/Admin/ResetUserPsw`\r\n\r\n// Server\r\nexport const getServerSettings = () => `${baseUrl}api/Device/CFGV2`\r\nexport const updateServerSettings = () => `${baseUrl}api/Device/CFGV2`\r\nexport const getAllModbusTemplate = () => `${baseUrl}api/Device/ModbusList`\r\nexport const downloadModbus = (name) => `${baseUrl}api/Device/downloadModbusFile?filename=${name}`\r\nexport const getConnectionStatus = () => `${baseUrl}api/Device/status`\r\nexport const getCPMLicenseStatus = () => `${baseUrl}api/Device/CPMLicenseStatus`\r\nexport const getLicenseStatus = () => `${baseUrl}api/Device/LicenseStatus`\r\nexport const uploadModbus = () => `${baseUrl}api/Device/uploadModbusFile`\r\nexport const uploadCPMLicense = () => `${baseUrl}api/Device/uploadCPMLicense`\r\nexport const uploadADLicense = () => `${baseUrl}api/Device/uploadADLicense`\r\nexport const getBlobServerSettings = () => `${baseUrl}api/Device/Blod`\r\nexport const updateBlobServerSettings = () => `${baseUrl}api/Device/Blod`\r\nexport const restartApp = () => `${baseUrl}api/Admin/RestartApp`\r\n\r\n// Devices\r\nexport const getDeviceModels = () => `${baseUrl}api/Equipment/EquipmentTemplate`\r\nexport const getDevices = () => `${baseUrl}api/Equipment/EquipmentCFG`\r\nexport const updateDevices = () => `${baseUrl}api/Equipment/EquipmentCFG`\r\n// Device monitoring\r\nexport const getDeviceMonitoringVariables = (id) => `${baseUrl}api/Device/${id}/variables`\r\nexport const getDeviceLatestValueByVariable = (id) => `${baseUrl}api/Device/${id}/currentVariableValues`\r\nexport const getDeviceHistoricalValueByVariable = (id, variable, from, to) => `${baseUrl}api/Device/${id}/variableValues`\r\n + `?VariableName=${variable}&StartTime=${from}&EndTime=${to}&PageIndex=0&PageSize=999999`\r\nexport const getDeviceSamplingVariables = (id) => `${baseUrl}api/Device/${id}/samplingVariables`\r\nexport const getDeviceSamplingVariableRecords = ({ id, variableName }) =>\r\n `${baseUrl}api/Device/${id}/samplingsList`\r\n + `?VariableName=${variableName}&PageIndex=0&PageSize=9999`\r\nexport const getDeviceSample = (componentId, variable, sampleId) =>\r\n `${baseUrl}api/Device/${componentId}/${variable}/sampling/${sampleId}`\r\nexport const getDeviceEvents = (deviceId, from, to, pageIndex, pageSize) =>\r\n `${baseUrl}api/Device/${deviceId}/events`\r\n + `?StartTime=${from}&EndTime=${to}&PageIndex=${pageIndex}&PageSize=${pageSize}`\r\n\r\n// Backkup / restore\r\nexport const downloadHostXML = () => `${baseUrl}api/Device/downloadCFGFile`\r\nexport const downloadDeviceXML = () => `${baseUrl}api/Device/downloadEquipmentFile`\r\nexport const restoreHostXML = () => `${baseUrl}api/Device/uploadCFGFile`\r\nexport const restoreDeviceXML = () => `${baseUrl}api/Device/uploadEquipmentFile`\r\n\r\n// Network\r\nexport const getLTEDevices = () => `${baseUrl}api/LTE/LTEDeviceList`\r\nexport const getLTEStatus = () => `${baseUrl}api/LTE/LTENetworkList`\r\nexport const restartLTEDevice = (id) => `${baseUrl}api/LTE/RestartLTE?LTEName=${id}`\r\nexport const getWanSettings = () => `${baseUrl}api/Wan/ip`\r\nexport const getLanSettings = () => `${baseUrl}api/Lan/ip`\r\nexport const updateWanSettings = () => `${baseUrl}api/Wan/SetIp`\r\nexport const updateLanSettings = () => `${baseUrl}api/Lan/SetIp`\r\nexport const resetWanSettings = () => `${baseUrl}api/Wan/Reset`\r\nexport const resetLanSettings = () => `${baseUrl}api/Lan/Reset`\r\n\r\n\r\n// System\r\nexport const getGatewayInfo = () => `${baseUrl}api/BaseInfo/Gateway`\r\nexport const getDeviceResourceUseage = () => `${baseUrl}api/BaseInfo/LocalResources`\r\nexport const getNtpSetting = () => `${baseUrl}api/Tool/NTPSettings`\r\nexport const updateNtpSetting = () => `${baseUrl}api/Tool/NTPSettings`\r\nexport const syncTime = () => `${baseUrl}api/Tool/NTP`\r\nexport const getRemoteSetting = () => `${baseUrl}api/Remote/cfg`\r\nexport const updateRemoteSetting = () => `${baseUrl}api/Remote/cfg`\r\nexport const getRemoteServerStatus = () => `${baseUrl}api/Remote/CheckServer`\r\nexport const toggleRemote = () => `${baseUrl}api/Remote/enable?isenable=true`\r\nexport const rebootDevice = () => `${baseUrl}api/Admin/Reboot`\r\n\r\nexport const getServerTime = () => `${baseUrl}api/BaseInfo/LocalTime`\r\nexport const getSelfDiagnosis = () => `${baseUrl}api/Tool/Diagnosis`\r\nexport const testPing = (ip) => `${baseUrl}api/Network/ping?urlORip=${ip}`\r\nexport const testPort = (ip, port) => `${baseUrl}api/Network/open?urlORip=${ip}&port=${port}`\r\nexport const getAllLogs = () => `${baseUrl}api/Log/appAll`\r\nexport const getTop100Logs = () => `${baseUrl}api/Log/appOne100Page?page=0`\r\nexport const deleteAllLogs = () => `${baseUrl}api/Log/CleanLog`\r\n\r\nexport const importModelFile = () => `${baseUrl}api/Admin/uploadModelCFG`\r\nexport const importPatch = () => `${baseUrl}api/Admin/uploadApp`\r\n\r\n// Advanced\r\nexport const generateLicenseForCurrent = () => `${baseUrl}api/Tool/createCpmLicense`\r\nexport const generateLicenseForOthers = () => `${baseUrl}api/Tool/createCpmLicenseForOther`\r\nexport const generateAdLicenseForCurrent = () => `${baseUrl}api/Tool/createADLicense`\r\nexport const generateAdLicenseForOthers = () => `${baseUrl}api/Tool/createADLicenseForOther`\r\n\r\nexport const getStartupScript = () => `${baseUrl}api/Admin/GetStartUp`\r\nexport const updateStartupScript = () => `${baseUrl}api/Admin/UpdateStartUp`\r\n\r\nexport const getTaskScript = () => `${baseUrl}api/Admin/GetCrontab`\r\nexport const updateTaskScript = () => `${baseUrl}api/Admin/UpdateCrontab`\r\n\r\nexport const testMqtt = () => `${baseUrl}api/Debug/mqttrun`\r\n\r\nexport const getSinglelineConfig = () => `${baseUrl}api/Admin/GetSinglelineConfig`\r\nexport const resetSinglelineConfig = () => `${baseUrl}api/Admin/ResetSinglelineConfig`\r\n\r\nexport const getVariableGroupsConfig = () => `${baseUrl}api/Admin/VariableGroupsConfig`\r\n\r\nexport const uploadVariableGroupsConfig = () => `${baseUrl}api/Admin/uploadVariableGroupsConfig`\r\n"],"sourceRoot":""}