diff --git a/src/directive/permission/hasPermi.js b/src/directive/permission/hasPermi.js new file mode 100644 index 0000000..ad6c13f --- /dev/null +++ b/src/directive/permission/hasPermi.js @@ -0,0 +1,33 @@ + /** + * v-hasPermi 操作权限处理 + * Copyright (c) 2019 ruoyi + */ +import { useUserStore } from '@/store/modules/user' + +export default { + mounted(el, binding, vnode) { + const { value } = binding + const all_permission = "*:*:*" + + try { + const userStore = useUserStore() + const permissions = userStore.permissions + + if (value && value instanceof Array && value.length > 0) { + const permissionFlag = value + + const hasPermissions = permissions.some(permission => { + return all_permission === permission || permissionFlag.includes(permission) + }) + + if (!hasPermissions) { + el.parentNode && el.parentNode.removeChild(el) + } + } else { + throw new Error(`请设置操作权限标签值`) + } + } catch (error) { + console.warn('Permission directive failed:', error) + } + } +} diff --git a/src/directive/permission/hasRole.js b/src/directive/permission/hasRole.js new file mode 100644 index 0000000..0ac378f --- /dev/null +++ b/src/directive/permission/hasRole.js @@ -0,0 +1,33 @@ +/** + * v-hasRole 角色权限处理 + * Copyright (c) 2019 ruoyi + */ +import { useUserStore } from '@/store/modules/user' + +export default { + mounted(el, binding, vnode) { + const { value } = binding + const super_admin = "admin" + + try { + const userStore = useUserStore() + const roles = userStore.roles + + if (value && value instanceof Array && value.length > 0) { + const permissionRoles = value + + const hasRole = roles.some(role => { + return super_admin === role || permissionRoles.includes(role) + }) + + if (!hasRole) { + el.parentNode && el.parentNode.removeChild(el) + } + } else { + throw new Error(`请设置角色权限标签值`) + } + } catch (error) { + console.warn('Role directive failed:', error) + } + } +} diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue new file mode 100644 index 0000000..71c0dd8 --- /dev/null +++ b/src/layout/components/AppMain.vue @@ -0,0 +1,90 @@ + + + + + + + diff --git a/src/layout/components/Copyright/index.vue b/src/layout/components/Copyright/index.vue new file mode 100644 index 0000000..6ebaca2 --- /dev/null +++ b/src/layout/components/Copyright/index.vue @@ -0,0 +1,31 @@ + + + + + \ No newline at end of file diff --git a/src/layout/components/IframeToggle/index.vue b/src/layout/components/IframeToggle/index.vue new file mode 100644 index 0000000..a4a98a5 --- /dev/null +++ b/src/layout/components/IframeToggle/index.vue @@ -0,0 +1,25 @@ + + + diff --git a/src/layout/components/InnerLink/index.vue b/src/layout/components/InnerLink/index.vue new file mode 100644 index 0000000..2634830 --- /dev/null +++ b/src/layout/components/InnerLink/index.vue @@ -0,0 +1,35 @@ + + + diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue new file mode 100644 index 0000000..e3fef25 --- /dev/null +++ b/src/layout/components/Navbar.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue new file mode 100644 index 0000000..4c4d6e0 --- /dev/null +++ b/src/layout/components/Settings/index.vue @@ -0,0 +1,221 @@ + + + + + \ No newline at end of file diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..15692ba --- /dev/null +++ b/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,40 @@ + + + diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000..1cbf686 --- /dev/null +++ b/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,103 @@ + + + + + + \ No newline at end of file diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..f395d95 --- /dev/null +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,100 @@ + + + diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..f807b9a --- /dev/null +++ b/src/layout/components/Sidebar/index.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue new file mode 100644 index 0000000..a14a36c --- /dev/null +++ b/src/layout/components/TagsView/ScrollPane.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue new file mode 100644 index 0000000..6ce20cd --- /dev/null +++ b/src/layout/components/TagsView/index.vue @@ -0,0 +1,371 @@ + + + + + + + \ No newline at end of file diff --git a/src/layout/components/index.js b/src/layout/components/index.js new file mode 100644 index 0000000..d1308ce --- /dev/null +++ b/src/layout/components/index.js @@ -0,0 +1,4 @@ +export { default as AppMain } from './AppMain' +export { default as Navbar } from './Navbar' +export { default as Settings } from './Settings' +export { default as TagsView } from './TagsView/index.vue' diff --git a/src/layout/index.vue b/src/layout/index.vue new file mode 100644 index 0000000..6c4a4d6 --- /dev/null +++ b/src/layout/index.vue @@ -0,0 +1,117 @@ + + + + + \ No newline at end of file diff --git a/src/mock/data.js b/src/mock/data.js new file mode 100644 index 0000000..0a86910 --- /dev/null +++ b/src/mock/data.js @@ -0,0 +1,3978 @@ +const data = [ + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "184A09FA-86DB-409B-8384-8C55BCE536C1", + "TypeId": 66, + "AreaId": 1, + "StateId": 0, + "CabinId": 65, + "AreaName": "分区1", + "CabinName": "监控中心", + "DeviceName": "消控室防火门主机", + "DeviceCode": "37", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "消防主机", + "Data": [ + { + "TypeAttrId": 5145, + "DeviceId": "184A09FA-86DB-409B-8384-8C55BCE536C1", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "事件类型", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 200, + "y": 200, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "5A78F258-A6B0-4843-B918-F2F1879B05E1", + "TypeId": 50, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "污水舱应急照明", + "DeviceCode": "WSC01YJS-ZM001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "应急照明", + "Data": [ + { + "TypeAttrId": 3115, + "DeviceId": "5A78F258-A6B0-4843-B918-F2F1879B05E1", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "应急照明状态", + "AttrField": "", + "AttrValue": "63", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3116, + "DeviceId": "5A78F258-A6B0-4843-B918-F2F1879B05E1", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "应急照明开灯", + "AttrField": "", + "AttrValue": "49", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "63", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3117, + "DeviceId": "5A78F258-A6B0-4843-B918-F2F1879B05E1", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "应急照明关灯", + "AttrField": "", + "AttrValue": "50", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "63", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 1789.066817973035, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "A3A6F721-1353-4741-86B6-DAD22DE6F699", + "TypeId": 49, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "污水舱照明", + "DeviceCode": "WSC01PDS-ZM001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "普通照明", + "Data": [ + { + "TypeAttrId": 3109, + "DeviceId": "A3A6F721-1353-4741-86B6-DAD22DE6F699", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "普通照明状态", + "AttrField": "", + "AttrValue": "59", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 1757.5608512784493, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "A855DF10-4A4B-4738-8C98-1836A0F8AD2B", + "TypeId": 66, + "AreaId": 1, + "StateId": 0, + "CabinId": 57, + "AreaName": "分区1", + "CabinName": "1/2区设备间", + "DeviceName": "1-4舱防火门主机", + "DeviceCode": "33", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "消防主机", + "Data": [ + { + "TypeAttrId": 5174, + "DeviceId": "A855DF10-4A4B-4738-8C98-1836A0F8AD2B", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "事件类型", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 11, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 270, + "y": 200, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "BA5F5811-22C1-406E-B343-CE433B7C2CC5", + "TypeId": 24, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "污水舱送风百叶", + "DeviceCode": "WSC01JFS-BY001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "百叶", + "Data": [ + { + "TypeAttrId": 3002, + "DeviceId": "BA5F5811-22C1-406E-B343-CE433B7C2CC5", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "上层开到位", + "AttrField": "", + "AttrValue": "36", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3003, + "DeviceId": "BA5F5811-22C1-406E-B343-CE433B7C2CC5", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "下层开到位", + "AttrField": "", + "AttrValue": "37", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3004, + "DeviceId": "BA5F5811-22C1-406E-B343-CE433B7C2CC5", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "开启/关闭百叶", + "AttrField": "", + "AttrValue": "29", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "36", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 592.3115560238848, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "FDC48134-416F-4C19-AAEE-9E42083277D5", + "TypeId": 66, + "AreaId": 1, + "StateId": 0, + "CabinId": 57, + "AreaName": "分区1", + "CabinName": "1/2区设备间", + "DeviceName": "2区燃气主机", + "DeviceCode": "07", + "IP": "10.9.4.201", + "Station": 1, + "TypeName": "消防主机", + "Data": [ + { + "TypeAttrId": 5187, + "DeviceId": "FDC48134-416F-4C19-AAEE-9E42083277D5", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "事件类型", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 340, + "y": 200, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "FB93A61B-9F8F-44D1-A14A-EF8FE7E3314F", + "TypeId": 66, + "AreaId": 1, + "StateId": 0, + "CabinId": 65, + "AreaName": "分区1", + "CabinName": "监控中心", + "DeviceName": "消控室电气火灾主机", + "DeviceCode": "32", + "IP": "10.9.6.200", + "Station": 1, + "TypeName": "消防主机", + "Data": [ + { + "TypeAttrId": 5186, + "DeviceId": "FB93A61B-9F8F-44D1-A14A-EF8FE7E3314F", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "事件类型", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 410, + "y": 200, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "E00CD394-3D2B-470F-8F26-6C4CA16D426C", + "TypeId": 66, + "AreaId": 1, + "StateId": 0, + "CabinId": 57, + "AreaName": "分区1", + "CabinName": "1/2区设备间", + "DeviceName": "2区气体主机", + "DeviceCode": "21", + "IP": "10.9.4.201", + "Station": 1, + "TypeName": "消防主机", + "Data": [ + { + "TypeAttrId": 5181, + "DeviceId": "E00CD394-3D2B-470F-8F26-6C4CA16D426C", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "事件类型", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 480, + "y": 200, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "F661BA74-90BF-4E21-97A8-568437CA018C", + "TypeId": 43, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "污水舱送风机", + "DeviceCode": "WSC01JFS-JFJ001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "送风机", + "Data": [ + { + "TypeAttrId": 2968, + "DeviceId": "F661BA74-90BF-4E21-97A8-568437CA018C", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "送风机自动", + "AttrField": "", + "AttrValue": "26", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 2969, + "DeviceId": "F661BA74-90BF-4E21-97A8-568437CA018C", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "送风机运行", + "AttrField": "", + "AttrValue": "27", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 2970, + "DeviceId": "F661BA74-90BF-4E21-97A8-568437CA018C", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "送风机故障", + "AttrField": "", + "AttrValue": "28", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "1", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 2971, + "DeviceId": "F661BA74-90BF-4E21-97A8-568437CA018C", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "送风机开启", + "AttrField": "", + "AttrValue": "23", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "27", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 2972, + "DeviceId": "F661BA74-90BF-4E21-97A8-568437CA018C", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "送风机关闭", + "AttrField": "", + "AttrValue": "37", + "AttrUnit": "", + "AttrIndex": 4, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "27", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 625.4213882359301, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "7A0030CE-1CF6-4478-AF43-0B5095BA29BF", + "TypeId": 66, + "AreaId": 1, + "StateId": 0, + "CabinId": 57, + "AreaName": "分区1", + "CabinName": "1/2区设备间", + "DeviceName": "1-4舱报警主机", + "DeviceCode": "02", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "消防主机", + "Data": [ + { + "TypeAttrId": 5164, + "DeviceId": "7A0030CE-1CF6-4478-AF43-0B5095BA29BF", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "事件类型", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 550, + "y": 200, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "796913AD-06BF-48AC-B535-3119F6FF09A2", + "TypeId": 44, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "污水舱排风机", + "DeviceCode": "WSC01PFS-PFJ001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "排风机", + "Data": [ + { + "TypeAttrId": 2977, + "DeviceId": "796913AD-06BF-48AC-B535-3119F6FF09A2", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "低速运行", + "AttrField": "", + "AttrValue": "29", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 2978, + "DeviceId": "796913AD-06BF-48AC-B535-3119F6FF09A2", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "高速运行", + "AttrField": "", + "AttrValue": "30", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 2979, + "DeviceId": "796913AD-06BF-48AC-B535-3119F6FF09A2", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "排风机低速启停", + "AttrField": "", + "AttrValue": "24", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "29", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 2980, + "DeviceId": "796913AD-06BF-48AC-B535-3119F6FF09A2", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "排风机高速启停", + "AttrField": "", + "AttrValue": "25", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "30", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 2602.9976014414756, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "1863D0BD-E505-4B39-BC52-F74E2E4A6355", + "TypeId": 66, + "AreaId": 1, + "StateId": 0, + "CabinId": 57, + "AreaName": "分区1", + "CabinName": "1/2区设备间", + "DeviceName": "1区燃气主机", + "DeviceCode": "06", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "消防主机", + "Data": [ + { + "TypeAttrId": 5146, + "DeviceId": "1863D0BD-E505-4B39-BC52-F74E2E4A6355", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "事件类型", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 2, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 620, + "y": 200, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "8CC0501F-F53B-4893-AF01-C3806735D0EE", + "TypeId": 24, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "污水舱排风百叶", + "DeviceCode": "WSC01PFS-BY001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "百叶", + "Data": [ + { + "TypeAttrId": 3005, + "DeviceId": "8CC0501F-F53B-4893-AF01-C3806735D0EE", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "上层开到位", + "AttrField": "", + "AttrValue": "38", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3006, + "DeviceId": "8CC0501F-F53B-4893-AF01-C3806735D0EE", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "下层开到位", + "AttrField": "", + "AttrValue": "39", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3007, + "DeviceId": "8CC0501F-F53B-4893-AF01-C3806735D0EE", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "开启/关闭百叶", + "AttrField": "", + "AttrValue": "30", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "38", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 2567.3310888022384, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "6FF4A7A9-A367-4AC0-9532-0073582FE615", + "TypeId": 66, + "AreaId": 1, + "StateId": 0, + "CabinId": 57, + "AreaName": "分区1", + "CabinName": "1/2区设备间", + "DeviceName": "1-4舱光纤测温主机", + "DeviceCode": "44", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "消防主机", + "Data": [ + { + "TypeAttrId": 5162, + "DeviceId": "6FF4A7A9-A367-4AC0-9532-0073582FE615", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "事件类型", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 690, + "y": 200, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "A2C40864-1CDC-4375-91C4-D0C70A3D0B0D", + "TypeId": 47, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "污水舱水泵", + "DeviceCode": "WSC01JSK-SB001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "水泵", + "Data": [ + { + "TypeAttrId": 3057, + "DeviceId": "A2C40864-1CDC-4375-91C4-D0C70A3D0B0D", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵自动状态", + "AttrField": "", + "AttrValue": "66", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3058, + "DeviceId": "A2C40864-1CDC-4375-91C4-D0C70A3D0B0D", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵运行状态", + "AttrField": "", + "AttrValue": "67", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3059, + "DeviceId": "A2C40864-1CDC-4375-91C4-D0C70A3D0B0D", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵故障状态", + "AttrField": "", + "AttrValue": "68", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "1", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3060, + "DeviceId": "A2C40864-1CDC-4375-91C4-D0C70A3D0B0D", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "水泵启动", + "AttrField": "", + "AttrValue": "55", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "67", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3061, + "DeviceId": "A2C40864-1CDC-4375-91C4-D0C70A3D0B0D", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "水泵停止", + "AttrField": "", + "AttrValue": "56", + "AttrUnit": "", + "AttrIndex": 4, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "67", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 239.4699582700256, + "y": 531.8153762222503, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "27208948-E245-4563-95E1-9E612E7371DF", + "TypeId": 66, + "AreaId": 1, + "StateId": 0, + "CabinId": 57, + "AreaName": "分区1", + "CabinName": "1/2区设备间", + "DeviceName": "1区气体主机", + "DeviceCode": "20", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "消防主机", + "Data": [ + { + "TypeAttrId": 5150, + "DeviceId": "27208948-E245-4563-95E1-9E612E7371DF", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "事件类型", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 760, + "y": 200, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "3CB5E61B-2148-452C-B26A-BD2F3398E05E", + "TypeId": 66, + "AreaId": 1, + "StateId": 0, + "CabinId": 65, + "AreaName": "分区1", + "CabinName": "监控中心", + "DeviceName": "消控室主机", + "DeviceCode": "01", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "消防主机", + "Data": [ + { + "TypeAttrId": 5155, + "DeviceId": "3CB5E61B-2148-452C-B26A-BD2F3398E05E", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "事件类型", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 10, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 830, + "y": 200, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "1521FEE9-E715-4D26-8B7C-FFB3D5940D4D", + "TypeId": 26, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "温度传感器", + "DeviceCode": "WSC01HC-WD001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "温度传感器", + "Data": [ + { + "TypeAttrId": 3023, + "DeviceId": "1521FEE9-E715-4D26-8B7C-FFB3D5940D4D", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "温度信号", + "AttrField": "", + "AttrValue": "5", + "AttrUnit": "°C", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 19.13, + "Remark1": "0", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 1489.8145956607505, + "y": 534.9171597633136, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "400DECCC-4C80-485D-A57E-D47A89A9AB95", + "TypeId": 30, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "湿度传感器", + "DeviceCode": "WSC01HC-SD001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "湿度传感器", + "Data": [ + { + "TypeAttrId": 3026, + "DeviceId": "400DECCC-4C80-485D-A57E-D47A89A9AB95", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "湿度信号", + "AttrField": "", + "AttrValue": "6", + "AttrUnit": "%", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 88.16, + "Remark1": "0", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 1517.6337124998884, + "y": 534.6325596894618, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "88B75B88-3688-4D97-A434-6BFC038D0FDC", + "TypeId": 31, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "氧气传感器", + "DeviceCode": "WSC01HC-YQ001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "氧气传感器", + "Data": [ + { + "TypeAttrId": 3029, + "DeviceId": "88B75B88-3688-4D97-A434-6BFC038D0FDC", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "氧气信号", + "AttrField": "", + "AttrValue": "7", + "AttrUnit": "%", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 0.1, + "Remark1": "0", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 1549.0160222636518, + "y": 532.8168112182864, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "CB99F3A7-1F26-4709-A157-5E20254A2308", + "TypeId": 32, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "液位传感器", + "DeviceCode": "WSC01JSK-YW001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "液位传感器", + "Data": [ + { + "TypeAttrId": 3032, + "DeviceId": "CB99F3A7-1F26-4709-A157-5E20254A2308", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "液位信号", + "AttrField": "", + "AttrValue": "8", + "AttrUnit": "mm", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 26, + "Remark1": "0", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 206.87285171688458, + "y": 533.7543201934791, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "37366055-6A87-474A-B3D7-FA477475F5EB", + "TypeId": 35, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "甲烷1", + "DeviceCode": "WSC01HC-JW001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "甲烷传感器", + "Data": [ + { + "TypeAttrId": 3037, + "DeviceId": "37366055-6A87-474A-B3D7-FA477475F5EB", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "甲烷信号", + "AttrField": "", + "AttrValue": "17", + "AttrUnit": "ppm", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 2, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 1556.4551140728531, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "A363E8D7-B5F2-45A2-B26D-A2D903995DE9", + "TypeId": 35, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "甲烷2", + "DeviceCode": "WSC01HC-JW002", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "甲烷传感器", + "Data": [ + { + "TypeAttrId": 3036, + "DeviceId": "A363E8D7-B5F2-45A2-B26D-A2D903995DE9", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "甲烷信号", + "AttrField": "", + "AttrValue": "18", + "AttrUnit": "ppm", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 3, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 1587.4647067356443, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "D8A44DBE-3664-4F28-8586-99C4E79343E0", + "TypeId": 34, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "硫化氢2", + "DeviceCode": "WSC01HC-LHQ002", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "硫化氢传感器", + "Data": [ + { + "TypeAttrId": 2995, + "DeviceId": "D8A44DBE-3664-4F28-8586-99C4E79343E0", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "硫化氢信号", + "AttrField": "", + "AttrValue": "20", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 1427.5808511596422, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "101C7AE2-8001-43AF-AFD9-45B7BD6E0D1C", + "TypeId": 34, + "AreaId": 1, + "StateId": 0, + "CabinId": 2, + "AreaName": "分区1", + "CabinName": "污水舱", + "DeviceName": "硫化氢1", + "DeviceCode": "WSC01HC-LHQ001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "硫化氢传感器", + "Data": [ + { + "TypeAttrId": 3035, + "DeviceId": "101C7AE2-8001-43AF-AFD9-45B7BD6E0D1C", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "硫化氢信号", + "AttrField": "", + "AttrValue": "19", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 1400.043524725542, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B4", + "TypeId": 47, + "AreaId": 1, + "StateId": 0, + "CabinId": 1, + "AreaName": "分区1", + "CabinName": "燃气舱", + "DeviceName": "燃气舱排水泵", + "DeviceCode": "RQC01JSK-SB001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "水泵", + "Data": [ + { + "TypeAttrId": 3052, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B4", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵自动状态", + "AttrField": "", + "AttrValue": "11", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3053, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B4", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵运行状态", + "AttrField": "", + "AttrValue": "12", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3054, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B4", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵故障状态", + "AttrField": "", + "AttrValue": "13", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "1", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3055, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B4", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "水泵启动", + "AttrField": "", + "AttrValue": "6", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "12", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3056, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B4", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "水泵停止", + "AttrField": "", + "AttrValue": "7", + "AttrUnit": "", + "AttrIndex": 4, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "12", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 238.73894615574324, + "y": 322.2832656421293, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 1, + "DeviceId": "01F05C21-2184-4EA2-8F39-36B03430E506", + "TypeId": 37, + "AreaId": 1, + "StateId": 0, + "CabinId": 1, + "AreaName": "分区1", + "CabinName": "燃气舱", + "DeviceName": "燃气舱排风红外微波", + "DeviceCode": "RQC01PFS-HW001", + "IP": "10.9.4.200", + "Station": 1, + "TypeName": "红外", + "Data": [ + { + "TypeAttrId": 3046, + "DeviceId": "01F05C21-2184-4EA2-8F39-36B03430E506", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "红外微波报警", + "AttrField": "", + "AttrValue": "24", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "LowerLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 1078.6120342007027, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "CB99F3A7-1F26-4709-A157-5E20254A230803", + "TypeId": 32, + "AreaId": 3, + "StateId": 0, + "CabinId": 10, + "AreaName": "分区3", + "CabinName": "污水舱", + "DeviceName": "液位传感器", + "DeviceCode": "WSC03JSK-YW001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "液位传感器", + "Data": [ + { + "TypeAttrId": 3345, + "DeviceId": "CB99F3A7-1F26-4709-A157-5E20254A230803", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "液位信号", + "AttrField": "", + "AttrValue": "8", + "AttrUnit": "mm", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 26, + "Remark1": "0", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5566.195390099664, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "37366055-6A87-474A-B3D7-FA477475F5EB03", + "TypeId": 35, + "AreaId": 3, + "StateId": 0, + "CabinId": 10, + "AreaName": "分区3", + "CabinName": "污水舱", + "DeviceName": "甲烷1", + "DeviceCode": "WSC03HC-JW001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "甲烷传感器", + "Data": [ + { + "TypeAttrId": 3350, + "DeviceId": "37366055-6A87-474A-B3D7-FA477475F5EB03", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "甲烷信号", + "AttrField": "", + "AttrValue": "17", + "AttrUnit": "ppm", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 3, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 6616.350875709102, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "A363E8D7-B5F2-45A2-B26D-A2D903995DE903", + "TypeId": 35, + "AreaId": 3, + "StateId": 0, + "CabinId": 10, + "AreaName": "分区3", + "CabinName": "污水舱", + "DeviceName": "甲烷2", + "DeviceCode": "WSC03HC-JW002", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "甲烷传感器", + "Data": [ + { + "TypeAttrId": 3349, + "DeviceId": "A363E8D7-B5F2-45A2-B26D-A2D903995DE903", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "甲烷信号", + "AttrField": "", + "AttrValue": "18", + "AttrUnit": "ppm", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 3, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 6645.366550250043, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "101C7AE2-8001-43AF-AFD9-45B7BD6E0D1C03", + "TypeId": 34, + "AreaId": 3, + "StateId": 0, + "CabinId": 10, + "AreaName": "分区3", + "CabinName": "污水舱", + "DeviceName": "硫化氢1", + "DeviceCode": "WSC03HC-LHQ001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "硫化氢传感器", + "Data": [ + { + "TypeAttrId": 3348, + "DeviceId": "101C7AE2-8001-43AF-AFD9-45B7BD6E0D1C03", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "硫化氢信号", + "AttrField": "", + "AttrValue": "19", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 6555.842829335108, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "D8A44DBE-3664-4F28-8586-99C4E79343E003", + "TypeId": 34, + "AreaId": 3, + "StateId": 0, + "CabinId": 10, + "AreaName": "分区3", + "CabinName": "污水舱", + "DeviceName": "硫化氢2", + "DeviceCode": "WSC03HC-LHQ002", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "硫化氢传感器", + "Data": [ + { + "TypeAttrId": 3311, + "DeviceId": "D8A44DBE-3664-4F28-8586-99C4E79343E003", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "硫化氢信号", + "AttrField": "", + "AttrValue": "20", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 198, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 6586.765076892534, + "y": 505, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B403", + "TypeId": 47, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱排水泵", + "DeviceCode": "RQC03JSK-SB001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "水泵", + "Data": [ + { + "TypeAttrId": 3365, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B403", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵自动状态", + "AttrField": "", + "AttrValue": "11", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3366, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B403", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵运行状态", + "AttrField": "", + "AttrValue": "12", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3367, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B403", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵故障状态", + "AttrField": "", + "AttrValue": "13", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "1", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3368, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B403", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "水泵启动", + "AttrField": "", + "AttrValue": "6", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "12", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3369, + "DeviceId": "00F7559B-5BA9-44B5-B66F-99C9865103B403", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "水泵停止", + "AttrField": "", + "AttrValue": "7", + "AttrUnit": "", + "AttrIndex": 4, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "12", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5034.073922378904, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 1, + "DeviceId": "01F05C21-2184-4EA2-8F39-36B03430E50603", + "TypeId": 37, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱排风红外微波", + "DeviceCode": "RQC03PFS-HW001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "红外", + "Data": [ + { + "TypeAttrId": 3359, + "DeviceId": "01F05C21-2184-4EA2-8F39-36B03430E50603", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "红外微波报警", + "AttrField": "", + "AttrValue": "24", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5254.314331534266, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "09805AA5-6B63-4E61-B7F8-1BBFA23DB65D03", + "TypeId": 54, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱投料口声光报警", + "DeviceCode": "RQC03TLS-SG001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "声光报警", + "Data": [ + { + "TypeAttrId": 3355, + "DeviceId": "09805AA5-6B63-4E61-B7F8-1BBFA23DB65D03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "声光报警", + "AttrField": "", + "AttrValue": "22", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 7177.60721504355, + "y": 355, + "target": "device" + }, + { + "IsOpen": 1, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "FC53782B-9760-405E-B692-1E7B7ADB2F7303", + "TypeId": 24, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱送风百叶", + "DeviceCode": "RQC03JFS-BY001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "百叶", + "Data": [ + { + "TypeAttrId": 3312, + "DeviceId": "FC53782B-9760-405E-B692-1E7B7ADB2F7303", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "上层开到位", + "AttrField": "", + "AttrValue": "7", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3313, + "DeviceId": "FC53782B-9760-405E-B692-1E7B7ADB2F7303", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "开启/关闭百叶", + "AttrField": "", + "AttrValue": "4", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "7", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 7310.074745826782, + "y": 355, + "target": "device" + }, + { + "IsOpen": 1, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "0A36DE30-D48C-4869-948E-0CBB00DB73AA03", + "TypeId": 24, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱排风百叶", + "DeviceCode": "RQC03PFS-BY001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "百叶", + "Data": [ + { + "TypeAttrId": 3314, + "DeviceId": "0A36DE30-D48C-4869-948E-0CBB00DB73AA03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "上层开到位", + "AttrField": "", + "AttrValue": "9", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3315, + "DeviceId": "0A36DE30-D48C-4869-948E-0CBB00DB73AA03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "开启/关闭百叶", + "AttrField": "", + "AttrValue": "5", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "9", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5162.424666697209, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "0AB61A04-FFD6-4845-861A-FF4B9AE797E503", + "TypeId": 50, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱应急照明", + "DeviceCode": "RQC03YJS-ZM001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "应急照明", + "Data": [ + { + "TypeAttrId": 3425, + "DeviceId": "0AB61A04-FFD6-4845-861A-FF4B9AE797E503", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "应急照明状态", + "AttrField": "", + "AttrValue": "62", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3426, + "DeviceId": "0AB61A04-FFD6-4845-861A-FF4B9AE797E503", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "应急照明开灯", + "AttrField": "", + "AttrValue": "47", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "62", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3427, + "DeviceId": "0AB61A04-FFD6-4845-861A-FF4B9AE797E503", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "应急照明关灯", + "AttrField": "", + "AttrValue": "48", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "62", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5973.72621477574, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "8F0CA2A2-17E9-4CC7-9055-F723ABB13A7B03", + "TypeId": 49, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱照明", + "DeviceCode": "RQC03PDS-ZM001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "普通照明", + "Data": [ + { + "TypeAttrId": 3421, + "DeviceId": "8F0CA2A2-17E9-4CC7-9055-F723ABB13A7B03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "普通照明状态", + "AttrField": "", + "AttrValue": "58", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5941.188466328192, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "C65C1478-6C3C-4960-9547-5108DDFC9FF503", + "TypeId": 48, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱送风井盖", + "DeviceCode": "RQC03JFS-JG001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "井盖", + "Data": [ + { + "TypeAttrId": 3385, + "DeviceId": "C65C1478-6C3C-4960-9547-5108DDFC9FF503", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "井盖开到位", + "AttrField": "", + "AttrValue": "14", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3386, + "DeviceId": "C65C1478-6C3C-4960-9547-5108DDFC9FF503", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "井盖关到位", + "AttrField": "", + "AttrValue": "15", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3387, + "DeviceId": "C65C1478-6C3C-4960-9547-5108DDFC9FF503", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "井盖故障", + "AttrField": "", + "AttrValue": "16", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "1", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3388, + "DeviceId": "C65C1478-6C3C-4960-9547-5108DDFC9FF503", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "井盖开启", + "AttrField": "", + "AttrValue": "8", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "14", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3389, + "DeviceId": "C65C1478-6C3C-4960-9547-5108DDFC9FF503", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "井盖关闭", + "AttrField": "", + "AttrValue": "9", + "AttrUnit": "", + "AttrIndex": 4, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "15", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3390, + "DeviceId": "C65C1478-6C3C-4960-9547-5108DDFC9FF503", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "井盖授权", + "AttrField": "", + "AttrValue": "11", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 7279.4073226282735, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "27CC2F93-725D-4857-A166-8A6B5BA89F9503", + "TypeId": 48, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱投料口井盖", + "DeviceCode": "RQC03TLS-JG001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "井盖", + "Data": [ + { + "TypeAttrId": 3397, + "DeviceId": "27CC2F93-725D-4857-A166-8A6B5BA89F9503", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "井盖开到位", + "AttrField": "", + "AttrValue": "20", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3398, + "DeviceId": "27CC2F93-725D-4857-A166-8A6B5BA89F9503", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "井盖关到位", + "AttrField": "", + "AttrValue": "21", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3399, + "DeviceId": "27CC2F93-725D-4857-A166-8A6B5BA89F9503", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "井盖故障", + "AttrField": "", + "AttrValue": "22", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "1", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3400, + "DeviceId": "27CC2F93-725D-4857-A166-8A6B5BA89F9503", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "井盖开启", + "AttrField": "", + "AttrValue": "16", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "20", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3401, + "DeviceId": "27CC2F93-725D-4857-A166-8A6B5BA89F9503", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "井盖关闭", + "AttrField": "", + "AttrValue": "17", + "AttrUnit": "", + "AttrIndex": 4, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "21", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3402, + "DeviceId": "27CC2F93-725D-4857-A166-8A6B5BA89F9503", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "井盖授权", + "AttrField": "", + "AttrValue": "19", + "AttrUnit": "", + "AttrIndex": 5, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 7149.160431963169, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 1, + "DeviceId": "29863A2F-FFF5-41F6-A22C-2E4792AC550103", + "TypeId": 37, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱进风红外微波", + "DeviceCode": "RQC03JFS-HW001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "红外", + "Data": [ + { + "TypeAttrId": 3358, + "DeviceId": "29863A2F-FFF5-41F6-A22C-2E4792AC550103", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "红外微波报警", + "AttrField": "", + "AttrValue": "23", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 7400.241983883337, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "672AC5A7-34B8-43AC-8319-1FD3B3FE205303", + "TypeId": 54, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱进风声光报警", + "DeviceCode": "RQC03JFS-SG001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "声光报警", + "Data": [ + { + "TypeAttrId": 3351, + "DeviceId": "672AC5A7-34B8-43AC-8319-1FD3B3FE205303", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "声光报警", + "AttrField": "", + "AttrValue": "20", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 7369.582472501381, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 1, + "DeviceId": "D5CB75AC-9F2C-4EF1-BFB5-28C8D957485303", + "TypeId": 37, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱投料口红外微波", + "DeviceCode": "RQC03TLS-HW001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "红外", + "Data": [ + { + "TypeAttrId": 3360, + "DeviceId": "D5CB75AC-9F2C-4EF1-BFB5-28C8D957485303", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "红外微波报警", + "AttrField": "", + "AttrValue": "25", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 7206.358346974792, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "4467ABA0-2A4D-4D7F-8C1B-F5B306B5574703", + "TypeId": 54, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱排风声光报警", + "DeviceCode": "RQC03PFS-SG001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "声光报警", + "Data": [ + { + "TypeAttrId": 3352, + "DeviceId": "4467ABA0-2A4D-4D7F-8C1B-F5B306B5574703", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "声光报警", + "AttrField": "", + "AttrValue": "21", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5223.647654794967, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "4FCB9636-CFCD-4EB1-BB18-FB23094D157F03", + "TypeId": 44, + "AreaId": 3, + "StateId": 0, + "CabinId": 9, + "AreaName": "分区3", + "CabinName": "燃气舱", + "DeviceName": "燃气舱排风机", + "DeviceCode": "RQC03PFS-PFJ001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "排风机", + "Data": [ + { + "TypeAttrId": 3292, + "DeviceId": "4FCB9636-CFCD-4EB1-BB18-FB23094D157F03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "低速运行", + "AttrField": "", + "AttrValue": "4", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3293, + "DeviceId": "4FCB9636-CFCD-4EB1-BB18-FB23094D157F03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "高速运行", + "AttrField": "", + "AttrValue": "5", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3294, + "DeviceId": "4FCB9636-CFCD-4EB1-BB18-FB23094D157F03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "排风机低速启停", + "AttrField": "", + "AttrValue": "2", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "4", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3295, + "DeviceId": "4FCB9636-CFCD-4EB1-BB18-FB23094D157F03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "排风机高速启停", + "AttrField": "", + "AttrValue": "3", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "5", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5192.688251752688, + "y": 355, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "B558F338-2045-485F-B704-01E42E306BD203", + "TypeId": 31, + "AreaId": 3, + "StateId": 0, + "CabinId": 11, + "AreaName": "分区3", + "CabinName": "综合舱", + "DeviceName": "氧气传感器", + "DeviceCode": "ZHC03HC-YQ001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "氧气传感器", + "Data": [ + { + "TypeAttrId": 3343, + "DeviceId": "B558F338-2045-485F-B704-01E42E306BD203", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "氧气信号", + "AttrField": "", + "AttrValue": "11", + "AttrUnit": "%", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 20.9, + "Remark1": "0", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 6705.9928368221945, + "y": 400, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "98F96353-7FAE-40C3-BB30-7138FF2E1B2C03", + "TypeId": 32, + "AreaId": 3, + "StateId": 0, + "CabinId": 11, + "AreaName": "分区3", + "CabinName": "综合舱", + "DeviceName": "液位传感器", + "DeviceCode": "ZHC03JSK-YW001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "液位传感器", + "Data": [ + { + "TypeAttrId": 3346, + "DeviceId": "98F96353-7FAE-40C3-BB30-7138FF2E1B2C03", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "液位信号", + "AttrField": "", + "AttrValue": "12", + "AttrUnit": "mm", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 0, + "Remark1": "0", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5564.260127823724, + "y": 400, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "CE43F421-E3E6-4BA3-A0F4-E1B63F27690C03", + "TypeId": 24, + "AreaId": 3, + "StateId": 0, + "CabinId": 12, + "AreaName": "分区3", + "CabinName": "电力舱", + "DeviceName": "电力舱排风百叶", + "DeviceCode": "DLC03PFS-BY001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "百叶", + "Data": [ + { + "TypeAttrId": 3331, + "DeviceId": "CE43F421-E3E6-4BA3-A0F4-E1B63F27690C03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "上层开到位", + "AttrField": "", + "AttrValue": "46", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3332, + "DeviceId": "CE43F421-E3E6-4BA3-A0F4-E1B63F27690C03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "下层开到位", + "AttrField": "", + "AttrValue": "47", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3333, + "DeviceId": "CE43F421-E3E6-4BA3-A0F4-E1B63F27690C03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "开启/关闭百叶", + "AttrField": "", + "AttrValue": "34", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "46", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 7704.601990399252, + "y": 460, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "B48E2FF5-8506-48A8-B161-D3D400AAC00E03", + "TypeId": 49, + "AreaId": 3, + "StateId": 0, + "CabinId": 12, + "AreaName": "分区3", + "CabinName": "电力舱", + "DeviceName": "电力舱照明", + "DeviceCode": "DLC03PDS-ZM001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "普通照明", + "Data": [ + { + "TypeAttrId": 3424, + "DeviceId": "B48E2FF5-8506-48A8-B161-D3D400AAC00E03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "普通照明状态", + "AttrField": "", + "AttrValue": "61", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 6919.801704076228, + "y": 460, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "C2821D59-34A0-464B-87FF-5BF7DFBDC98B03", + "TypeId": 50, + "AreaId": 3, + "StateId": 0, + "CabinId": 12, + "AreaName": "分区3", + "CabinName": "电力舱", + "DeviceName": "电力舱应急照明", + "DeviceCode": "DLC03YJS-ZM001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "应急照明", + "Data": [ + { + "TypeAttrId": 3434, + "DeviceId": "C2821D59-34A0-464B-87FF-5BF7DFBDC98B03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "应急照明状态", + "AttrField": "", + "AttrValue": "65", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3435, + "DeviceId": "C2821D59-34A0-464B-87FF-5BF7DFBDC98B03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "应急照明开灯", + "AttrField": "", + "AttrValue": "53", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "65", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3436, + "DeviceId": "C2821D59-34A0-464B-87FF-5BF7DFBDC98B03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "应急照明关灯", + "AttrField": "", + "AttrValue": "54", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "65", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 6951.362425036977, + "y": 460, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "24ABDEB3-6F2C-4390-BC03-ACC09476380B03", + "TypeId": 60, + "AreaId": 3, + "StateId": 0, + "CabinId": 12, + "AreaName": "分区3", + "CabinName": "电力舱", + "DeviceName": "电力舱排风机", + "DeviceCode": "DLC03PFS-PFJ001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "电力舱排风机", + "Data": [ + { + "TypeAttrId": 3304, + "DeviceId": "24ABDEB3-6F2C-4390-BC03-ACC09476380B03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "排风机自动", + "AttrField": "", + "AttrValue": "33", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3305, + "DeviceId": "24ABDEB3-6F2C-4390-BC03-ACC09476380B03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "排风机运行", + "AttrField": "", + "AttrValue": "34", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3306, + "DeviceId": "24ABDEB3-6F2C-4390-BC03-ACC09476380B03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "排风机故障", + "AttrField": "", + "AttrValue": "35", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "1", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3307, + "DeviceId": "24ABDEB3-6F2C-4390-BC03-ACC09476380B03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "排风机开启", + "AttrField": "", + "AttrValue": "28", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "34", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3308, + "DeviceId": "24ABDEB3-6F2C-4390-BC03-ACC09476380B03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "排风机关闭", + "AttrField": "", + "AttrValue": "41", + "AttrUnit": "", + "AttrIndex": 4, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "34", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 7735.21616240217, + "y": 460, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "C3750784-6F24-4C2F-A33F-473EBC417B4B03", + "TypeId": 47, + "AreaId": 3, + "StateId": 0, + "CabinId": 12, + "AreaName": "分区3", + "CabinName": "电力舱", + "DeviceName": "电力舱水泵", + "DeviceCode": "DLC03JSK-SB001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "水泵", + "Data": [ + { + "TypeAttrId": 3380, + "DeviceId": "C3750784-6F24-4C2F-A33F-473EBC417B4B03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵自动状态", + "AttrField": "", + "AttrValue": "72", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 1, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3381, + "DeviceId": "C3750784-6F24-4C2F-A33F-473EBC417B4B03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵运行状态", + "AttrField": "", + "AttrValue": "73", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3382, + "DeviceId": "C3750784-6F24-4C2F-A33F-473EBC417B4B03", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "水泵故障状态", + "AttrField": "", + "AttrValue": "74", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "1", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3383, + "DeviceId": "C3750784-6F24-4C2F-A33F-473EBC417B4B03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "水泵启动", + "AttrField": "", + "AttrValue": "59", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "73", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3384, + "DeviceId": "C3750784-6F24-4C2F-A33F-473EBC417B4B03", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "水泵停止", + "AttrField": "", + "AttrValue": "60", + "AttrUnit": "", + "AttrIndex": 4, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "73", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5534.992234281125, + "y": 460, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "BE1C543E-2086-4DEC-A8D4-BFFFB9C7E63403", + "TypeId": 24, + "AreaId": 3, + "StateId": 0, + "CabinId": 12, + "AreaName": "分区3", + "CabinName": "电力舱", + "DeviceName": "电力舱送风百叶", + "DeviceCode": "DLC03JFS-BY001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "百叶", + "Data": [ + { + "TypeAttrId": 3328, + "DeviceId": "BE1C543E-2086-4DEC-A8D4-BFFFB9C7E63403", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "上层开到位", + "AttrField": "", + "AttrValue": "44", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3329, + "DeviceId": "BE1C543E-2086-4DEC-A8D4-BFFFB9C7E63403", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "下层开到位", + "AttrField": "", + "AttrValue": "45", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3330, + "DeviceId": "BE1C543E-2086-4DEC-A8D4-BFFFB9C7E63403", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "开启/关闭百叶", + "AttrField": "", + "AttrValue": "33", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "44", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 5694.144975277621, + "y": 460, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "1C95BBDE-25F7-4C5D-B67A-CBC853BE8A5803", + "TypeId": 26, + "AreaId": 3, + "StateId": 0, + "CabinId": 12, + "AreaName": "分区3", + "CabinName": "电力舱", + "DeviceName": "温度传感器", + "DeviceCode": "DLC03HC-WD001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "温度传感器", + "Data": [ + { + "TypeAttrId": 3338, + "DeviceId": "1C95BBDE-25F7-4C5D-B67A-CBC853BE8A5803", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "温度信号", + "AttrField": "", + "AttrValue": "13", + "AttrUnit": "°C", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 20.43, + "Remark1": "0", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 6650.891482055828, + "y": 460, + "target": "device" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "3B687983-8213-41BB-A660-BF756A0B478603", + "TypeId": 30, + "AreaId": 3, + "StateId": 0, + "CabinId": 12, + "AreaName": "分区3", + "CabinName": "电力舱", + "DeviceName": "湿度传感器", + "DeviceCode": "DLC03HC-SD001", + "IP": "10.9.4.202", + "Station": 1, + "TypeName": "湿度传感器", + "Data": [ + { + "TypeAttrId": 3341, + "DeviceId": "3B687983-8213-41BB-A660-BF756A0B478603", + "StateId": 13, + "AttrType": "类型属性", + "AttrName": "湿度信号", + "AttrField": "", + "AttrValue": "14", + "AttrUnit": "%", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "AO", + "ReadPoint": "", + "Value": 81.73, + "Remark1": "0", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 6679.864946798952, + "y": 460, + "target": "device" + }, + { + "x": 11829.871967965342, + "y": 355, + "AreaId": 5, + "CabinId": 17, + "CamAddress": "10.9.5.85", + "CamChannel": "", + "CamId": 604, + "CamName": "分区5燃气舱中段向北", + "CamPassword": "admin123", + "CamType": "", + "Points": "1", + "target": "camera", + "CabinName": "燃气舱" + }, + { + "x": 13391.315822094997, + "y": 355, + "AreaId": 5, + "CabinId": 17, + "CamAddress": "10.9.5.86", + "CamChannel": "", + "CamId": 605, + "CamName": "分区5燃气舱北头", + "CamPassword": "admin123", + "CamType": "", + "Points": "1", + "target": "camera", + "CabinName": "燃气舱" + }, + { + "x": 11199.28845868679, + "y": 400, + "AreaId": 5, + "CabinId": 19, + "CamAddress": "10.9.5.110", + "CamChannel": "", + "CamId": 620, + "CamName": "普通舱5分区进风夹层", + "CamPassword": "admin123", + "CamType": "", + "Points": "1", + "target": "camera", + "CabinName": "综合舱" + }, + { + "x": 13918.676556965076, + "y": 400, + "AreaId": 5, + "CabinId": 19, + "CamAddress": "10.9.5.111", + "CamChannel": "", + "CamId": 621, + "CamName": "普通舱5分区排风夹层", + "CamPassword": "admin123", + "CamType": "", + "Points": "1", + "target": "camera", + "CabinName": "综合舱" + }, + { + "x": 14113.255323840176, + "y": 400, + "AreaId": 5, + "CabinId": 19, + "CamAddress": "10.9.5.113", + "CamChannel": "", + "CamId": 622, + "CamName": "普通舱05/06分区设备间01", + "CamPassword": "admin123", + "CamType": "", + "Points": "1", + "target": "camera", + "CabinName": "综合舱" + }, + { + "x": 14304.055017122728, + "y": 400, + "AreaId": 5, + "CabinId": 19, + "CamAddress": "10.9.5.114", + "CamChannel": "", + "CamId": 623, + "CamName": "普通舱05/06分区设备间02", + "CamPassword": "admin123", + "CamType": "", + "Points": "1", + "target": "camera", + "CabinName": "综合舱" + }, + { + "x": 10736.851642673852, + "y": 355, + "AreaId": 5, + "CabinId": 17, + "CamAddress": "10.9.5.115", + "CamChannel": "", + "CamId": 624, + "CamName": "燃气舱5分区排风夹层", + "CamPassword": "admin123", + "CamType": "", + "Points": "1", + "target": "camera", + "CabinName": "燃气舱" + }, + { + "x": 13193.90479689514, + "y": 355, + "AreaId": 5, + "CabinId": 17, + "CamAddress": "10.9.5.116", + "CamChannel": "", + "CamId": 625, + "CamName": "燃气舱5分区进风夹层", + "CamPassword": "admin123", + "CamType": "", + "Points": "1", + "target": "camera", + "CabinName": "燃气舱" + }, + { + "IsOpen": 0, + "IsFault": 0, + "IsAlarm": 0, + "DeviceId": "796913AD-06BF-48AC-B535-3119F6FF09A206", + "TypeId": 44, + "AreaId": 6, + "StateId": 0, + "CabinId": 22, + "AreaName": "分区6", + "CabinName": "污水舱", + "DeviceName": "污水舱排风机", + "DeviceCode": "WSC06PFS-PFJ001", + "IP": "10.9.5.201", + "Station": 1, + "TypeName": "排风机", + "Data": [ + { + "TypeAttrId": 3761, + "DeviceId": "796913AD-06BF-48AC-B535-3119F6FF09A206", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "低速运行", + "AttrField": "", + "AttrValue": "29", + "AttrUnit": "", + "AttrIndex": 0, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3762, + "DeviceId": "796913AD-06BF-48AC-B535-3119F6FF09A206", + "StateId": 11, + "AttrType": "类型属性", + "AttrName": "高速运行", + "AttrField": "", + "AttrValue": "30", + "AttrUnit": "", + "AttrIndex": 1, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "1", + "StateType": "DI", + "ReadPoint": "", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3763, + "DeviceId": "796913AD-06BF-48AC-B535-3119F6FF09A206", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "排风机低速启停", + "AttrField": "", + "AttrValue": "24", + "AttrUnit": "", + "AttrIndex": 2, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "29", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + }, + { + "TypeAttrId": 3764, + "DeviceId": "796913AD-06BF-48AC-B535-3119F6FF09A206", + "StateId": 12, + "AttrType": "类型属性", + "AttrName": "排风机高速启停", + "AttrField": "", + "AttrValue": "25", + "AttrUnit": "", + "AttrIndex": 3, + "UpperLimitValue": "", + "OverStandard": null, + "FaultPoint": "0", + "OperationIndex": "0", + "StateType": "DO", + "ReadPoint": "30", + "Value": 0, + "Remark1": "", + "Remark2": null, + "Transformation": "0", + "AlarmName": null + } + ], + "x": 14569.918792289154, + "y": 505, + "target": "device" + }] + +export default data; + diff --git a/src/plugins/auth.js b/src/plugins/auth.js new file mode 100644 index 0000000..9a9cf96 --- /dev/null +++ b/src/plugins/auth.js @@ -0,0 +1,72 @@ +import { useUserStore } from '@/store/modules/user' + +function authPermission(permission) { + const all_permission = "*:*:*" + try { + const userStore = useUserStore() + const permissions = userStore.permissions || [] + if (permission && permission.length > 0) { + return permissions.some(v => { + return all_permission === v || v === permission + }) + } else { + return false + } + } catch (error) { + console.warn('Permission check failed:', error) + return false + } +} + +function authRole(role) { + const super_admin = "admin" + try { + const userStore = useUserStore() + const roles = userStore.roles || [] + if (role && role.length > 0) { + return roles.some(v => { + return super_admin === v || v === role + }) + } else { + return false + } + } catch (error) { + console.warn('Role check failed:', error) + return false + } +} + +export default { + // 验证用户是否具备某权限 + hasPermi(permission) { + return authPermission(permission) + }, + // 验证用户是否含有指定权限,只需包含其中一个 + hasPermiOr(permissions) { + return permissions.some(item => { + return authPermission(item) + }) + }, + // 验证用户是否含有指定权限,必须全部拥有 + hasPermiAnd(permissions) { + return permissions.every(item => { + return authPermission(item) + }) + }, + // 验证用户是否具备某角色 + hasRole(role) { + return authRole(role) + }, + // 验证用户是否含有指定角色,只需包含其中一个 + hasRoleOr(roles) { + return roles.some(item => { + return authRole(item) + }) + }, + // 验证用户是否含有指定角色,必须全部拥有 + hasRoleAnd(roles) { + return roles.every(item => { + return authRole(item) + }) + } +} diff --git a/src/plugins/cache.js b/src/plugins/cache.js new file mode 100644 index 0000000..4d29dfe --- /dev/null +++ b/src/plugins/cache.js @@ -0,0 +1,79 @@ +const sessionCache = { + set (key, value) { + if (!sessionStorage) { + return + } + if (key != null && value != null) { + sessionStorage.setItem(key, value) + } + }, + get (key) { + if (!sessionStorage) { + return null + } + if (key == null) { + return null + } + return sessionStorage.getItem(key) + }, + setJSON (key, jsonValue) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON (key) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + return null + }, + remove (key) { + sessionStorage.removeItem(key) + } +} +const localCache = { + set (key, value) { + if (!localStorage) { + return + } + if (key != null && value != null) { + localStorage.setItem(key, value) + } + }, + get (key) { + if (!localStorage) { + return null + } + if (key == null) { + return null + } + return localStorage.getItem(key) + }, + setJSON (key, jsonValue) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON (key) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + return null + }, + remove (key) { + localStorage.removeItem(key) + } +} + +export default { + /** + * 会话级缓存 + */ + session: sessionCache, + /** + * 本地缓存 + */ + local: localCache +} diff --git a/src/plugins/download.js b/src/plugins/download.js new file mode 100644 index 0000000..82e26ed --- /dev/null +++ b/src/plugins/download.js @@ -0,0 +1,79 @@ +import axios from 'axios' +import { ElLoading, ElMessage } from 'element-plus' +import { saveAs } from 'file-saver' +import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import { blobValidate } from '@/utils/ruoyi' + +const baseURL = import.meta.env.VITE_APP_BASE_API +let downloadLoadingInstance + +export default { + name(name, isDelete = true) { + var url = baseURL + "/common/download?fileName=" + encodeURIComponent(name) + "&delete=" + isDelete + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then((res) => { + const isBlob = blobValidate(res.data) + if (isBlob) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURIComponent(res.headers['download-filename'])) + } else { + this.printErrMsg(res.data) + } + }) + }, + resource(resource) { + var url = baseURL + "/common/download/resource?resource=" + encodeURIComponent(resource) + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then((res) => { + const isBlob = blobValidate(res.data) + if (isBlob) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURIComponent(res.headers['download-filename'])) + } else { + this.printErrMsg(res.data) + } + }) + }, + zip(url, name) { + var url = baseURL + url + downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", }) + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then((res) => { + const isBlob = blobValidate(res.data) + if (isBlob) { + const blob = new Blob([res.data], { type: 'application/zip' }) + this.saveAs(blob, name) + } else { + this.printErrMsg(res.data) + } + downloadLoadingInstance.close() + }).catch((r) => { + console.error(r) + ElMessage.error('下载文件出现错误,请联系管理员!') + downloadLoadingInstance.close() + }) + }, + saveAs(text, name, opts) { + saveAs(text, name, opts) + }, + async printErrMsg(data) { + const resText = await data.text() + const rspObj = JSON.parse(resText) + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + ElMessage.error(errMsg) + } +} + diff --git a/src/plugins/index.js b/src/plugins/index.js new file mode 100644 index 0000000..fb75c63 --- /dev/null +++ b/src/plugins/index.js @@ -0,0 +1,18 @@ +import tab from './tab' +import auth from './auth' +import cache from './cache' +import modal from './modal' +import download from './download' + +export default function installPlugins(app){ + // 页签操作 + app.config.globalProperties.$tab = tab + // 认证对象 + app.config.globalProperties.$auth = auth + // 缓存对象 + app.config.globalProperties.$cache = cache + // 模态框对象 + app.config.globalProperties.$modal = modal + // 下载文件 + app.config.globalProperties.$download = download +} diff --git a/src/plugins/modal.js b/src/plugins/modal.js new file mode 100644 index 0000000..8695360 --- /dev/null +++ b/src/plugins/modal.js @@ -0,0 +1,82 @@ +import { ElMessage, ElMessageBox, ElNotification, ElLoading } from 'element-plus' + +let loadingInstance + +export default { + // 消息提示 + msg(content) { + ElMessage.info(content) + }, + // 错误消息 + msgError(content) { + ElMessage.error(content) + }, + // 成功消息 + msgSuccess(content) { + ElMessage.success(content) + }, + // 警告消息 + msgWarning(content) { + ElMessage.warning(content) + }, + // 弹出提示 + alert(content) { + ElMessageBox.alert(content, "系统提示") + }, + // 错误提示 + alertError(content) { + ElMessageBox.alert(content, "系统提示", { type: 'error' }) + }, + // 成功提示 + alertSuccess(content) { + ElMessageBox.alert(content, "系统提示", { type: 'success' }) + }, + // 警告提示 + alertWarning(content) { + ElMessageBox.alert(content, "系统提示", { type: 'warning' }) + }, + // 通知提示 + notify(content) { + ElNotification.info(content) + }, + // 错误通知 + notifyError(content) { + ElNotification.error(content) + }, + // 成功通知 + notifySuccess(content) { + ElNotification.success(content) + }, + // 警告通知 + notifyWarning(content) { + ElNotification.warning(content) + }, + // 确认窗体 + confirm(content) { + return ElMessageBox.confirm(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, + // 提交内容 + prompt(content) { + return ElMessageBox.prompt(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, + // 打开遮罩层 + loading(content) { + loadingInstance = ElLoading.service({ + lock: true, + text: content, + background: "rgba(0, 0, 0, 0.7)", + }) + }, + // 关闭遮罩层 + closeLoading() { + loadingInstance.close() + } +} diff --git a/src/plugins/tab.js b/src/plugins/tab.js new file mode 100644 index 0000000..ed20948 --- /dev/null +++ b/src/plugins/tab.js @@ -0,0 +1,71 @@ +import { useTagsViewStore } from '@/store/modules/tagsView' +import router from '@/router' + +export default { + // 刷新当前tab页签 + refreshPage(obj) { + const { path, query, matched } = router.currentRoute.value + if (obj === undefined) { + matched.forEach((m) => { + if (m.components && m.components.default && m.components.default.name) { + if (!['Layout', 'ParentView'].includes(m.components.default.name)) { + obj = { name: m.components.default.name, path: path, query: query } + } + } + }) + } + return useTagsViewStore().delCachedView(obj).then(() => { + const { path, query } = obj + router.replace({ + path: '/redirect' + path, + query: query + }) + }) + }, + // 关闭当前tab页签,打开新页签 + closeOpenPage(obj) { + useTagsViewStore().delView(router.currentRoute.value) + if (obj !== undefined) { + return router.push(obj) + } + }, + // 关闭指定tab页签 + closePage(obj) { + if (obj === undefined) { + return useTagsViewStore().delView(router.currentRoute.value).then(({ visitedViews }) => { + const latestView = visitedViews.slice(-1)[0] + if (latestView) { + return router.push(latestView.fullPath) + } + return router.push('/') + }) + } + return useTagsViewStore().delView(obj) + }, + // 关闭所有tab页签 + closeAllPage() { + return useTagsViewStore().delAllViews() + }, + // 关闭左侧tab页签 + closeLeftPage(obj) { + return useTagsViewStore().delLeftTags(obj || router.currentRoute.value) + }, + // 关闭右侧tab页签 + closeRightPage(obj) { + return useTagsViewStore().delRightTags(obj || router.currentRoute.value) + }, + // 关闭其他tab页签 + closeOtherPage(obj) { + return useTagsViewStore().delOthersViews(obj || router.currentRoute.value) + }, + // 打开tab页签 + openPage(title, url, params) { + const obj = { path: url, meta: { title: title } } + useTagsViewStore().addView(obj) + return router.push({ path: url, query: params }) + }, + // 修改tab页签 + updatePage(obj) { + return useTagsViewStore().updateVisitedView(obj) + } +} diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..dbbdc00 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,550 @@ +import { createWebHistory, createRouter } from 'vue-router' +/* Layout */ +import Layout from '@/layout' + +/** + * Note: 路由配置项 + * + * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 + * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 + * // 若你想不管路由下面的 children 声明的个数都显示你的根路由 + * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 + * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 + * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 + * roles: ['admin', 'common'] // 访问路由的角色权限 + * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 + * meta : { + noCache: true // 如果设置为true,则不会被 缓存(默认 false) + title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 + icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg + breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 + activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 + } + */ + +// 封装一个生成通配符路由的函数 +const createCatchAllRoute = (component, name = 'NotFound') => { + return { + path: '/:pathMatch(.*)*', + name, + component + } +} + +// 公共路由 +export const constantRoutes = [ + { + path: '/redirect', + component: Layout, + hidden: true, + children: [ + { + path: '/redirect/:path(.*)', + component: createCatchAllRoute(() => import('@/views/redirect')) + + } + ] + }, + { + path: '/login', + component: () => import('@/views/login'), + hidden: true + }, + { + path: '/register', + component: () => import('@/views/register'), + hidden: true + }, + { + path: '/404', + component: () => import('@/views/error/404'), + hidden: true + }, + { + path: '/401', + component: () => import('@/views/error/401'), + hidden: true + }, + { + path: '', + component: Layout, + redirect: 'index', + children: [ + { + path: 'index', + component: () => import('@/views/index'), + name: 'Index', + meta: { title: '工作台', icon: 'index', affix: true } + // meta: { title: '首页', icon: '@/assets/treeIcons/index.png', affix: true } + }, + ] + }, + { + path: '', + component: Layout, + redirect: 'noRedirect', + children: [ + { + path: 'plan', + component: () => import('@/views/plan'), + name: 'Plan', + meta: { title: '平面图', icon: 'plan', affix: true } + }, + + ] + }, + { + name: "Device", + alwaysShow: true, + component: Layout, + hidden: false, + name: "Device", + path: "/Device", + redirect: "noRedirect", + meta: { + icon: "device", + link: null, + noCache: false, + title: "设备管理", + }, + children: [ + { + component: () => import('@/views/Device/deviceControl'), + hidden: false, + name: "deviceControl", + path: "deviceControl", + meta: { + icon: "server", + link: null, + noCache: false, + title: "设备列表", + }, + }, + + ] + + }, + + { + name: "areaManage", + alwaysShow: true, + component: Layout, + hidden: false, + name: "areaManage", + path: "/areaManage", + redirect: "noRedirect", + meta: { + icon: "qygl", + link: null, + noCache: false, + title: "区域管理", + }, + children: [ + { + component: () => import('@/views/areaManage/area'), + hidden: false, + name: "area", + path: "area", + meta: { + icon: "areai", + link: null, + noCache: false, + title: "分区管理", + }, + }, + { + component: () => import('@/views/areaManage/cabin'), + hidden: false, + name: "cabin", + path: "cabin", + meta: { + icon: "cabini", + link: null, + noCache: false, + title: "舱室管理", + }, + }, + ] + }, + + { + name: "operationManage", + alwaysShow: true, + component: Layout, + hidden: false, + name: "operationManage", + path: "/operationManage", + redirect: "noRedirect", + meta: { + icon: "ywgl", + link: null, + noCache: false, + title: "运维管理", + }, + children: [ + { + component: () => import('@/views/operationManage/maintenance'), + hidden: false, + name: "maintenance", + path: "maintenance", + meta: { + icon: "wbgl", + link: null, + noCache: false, + title: "维保管理", + }, + }, + { + component: () => import('@/views/operationManage/patrol'), + hidden: false, + name: "patrol", + path: "patrol", + meta: { + icon: "xjgl", + link: null, + noCache: false, + title: "巡检管理", + }, + }, + { + component: () => import('@/views/operationManage/alarm'), + hidden: false, + name: "alarm", + path: "alarm", + meta: { + icon: "bjgl", + link: null, + noCache: false, + title: "报警管理", + }, + }, + { + component: () => import('@/views/operationManage/report'), + hidden: false, + name: "report", + path: "report", + meta: { + icon: "bbgl", + link: null, + noCache: false, + title: "报表管理", + }, + }, + ] + }, + + { + name: "Equipment", + alwaysShow: true, + component: Layout, + hidden: false, + name: "Equipment", + path: "/equipment", + redirect: "noRedirect", + meta: { + icon: "xtjk", + link: null, + noCache: false, + title: "智能化控制系统", + }, + children: [ + { + component: () => import('@/views/equipment/environmentMonitoring'), + + hidden: false, + name: "environmentMonitoring", + path: "environmentMonitoring", + meta: { + icon: "hjkz", + link: null, + noCache: false, + title: "环境监测", + }, + }, + { + component: () => import('@/views/equipment/ventilation'), + + hidden: false, + name: "ventilation", + path: "ventilation", + meta: { + icon: "tongf", + link: null, + noCache: false, + title: "通风", + }, + }, + { + component: () => import('@/views/equipment/electric'), + hidden: false, + name: "electric", + path: "electric", + meta: { + icon: "dianli", + link: null, + noCache: false, + title: "电力", + }, + }, + { + component: () => import('@/views/equipment/lighting'), + hidden: false, + name: "lighting", + path: "lighting", + meta: { + icon: "hjkz-zmkz", + link: null, + noCache: false, + title: "照明", + }, + }, + { + component: () => import('@/views/equipment/wastewater'), + hidden: false, + name: "wastewater", + path: "wastewater", + meta: { + icon: "nhgl-sbjc", + link: null, + noCache: false, + title: "给排水", + }, + }, + ], + }, + + { + name: "EngineerSupport", + alwaysShow: true, + component: Layout, + hidden: false, + name: "EngineerSupport", + path: "/EngineerSupport", + redirect: "noRedirect", + meta: { + icon: "gongc", + link: null, + noCache: false, + title: "工程保障系统", + }, + children: [ + { + component: () => import('@/views/EngineerSupport/etherphone'), + hidden: false, + name: "etherphone", + path: "etherphone", + meta: { + icon: "guangb", + link: null, + noCache: false, + title: "广播电话", + }, + }, + { + component: () => import('@/views/EngineerSupport/visualizedDispatch'), + hidden: false, + name: "visualizedDispatch", + path: "visualizedDispatch", + meta: { + icon: "kshtd", + link: null, + noCache: false, + title: "可视化调度", + }, + }, + + ] + + }, + { + name: "Security", + alwaysShow: true, + component: Layout, + hidden: false, + name: "Security", + path: "/Security", + redirect: "noRedirect", + meta: { + icon: "afxt", + link: null, + noCache: false, + title: "安防系统", + }, + children: [ + { + component: () => import('@/views/Security/videoSurveillance'), + hidden: false, + name: "videoSurveillance", + path: "videoSurveillance", + meta: { + icon: "afmj", + link: null, + noCache: false, + title: "视频监控", + }, + }, + { + component: () => import('@/views/Security/doorControl'), + hidden: false, + name: "doorControl", + path: "doorControl", + meta: { + icon: "spjk", + link: null, + noCache: false, + title: "门禁", + }, + }, + ] + + }, + { + name: "System", + alwaysShow: true, + component: Layout, + hidden: false, + name: "System", + path: "/system", + redirect: "noRedirect", + meta: { + icon: "xtgl", + link: null, + noCache: false, + title: "系统管理", + }, + children: [ + { + component: () => import('@/views/system/user/index'), + hidden: false, + name: "user", + path: "user", + meta: { + icon: "user", + link: null, + noCache: false, + title: "用户管理", + }, + }, + { + component: () => import('@/views/system/role/index'), + hidden: false, + name: "role", + path: "role", + meta: { + icon: "peoples", + link: null, + noCache: false, + title: "角色管理", + }, + }, + { + component: () => import('@/views/system/log/index'), + hidden: false, + name: "log", + path: "log", + meta: { + icon: "log", + link: null, + noCache: false, + title: "日志管理", + }, + }, + ] + + } + + +] + +// 动态路由,基于用户权限动态去加载 +export const dynamicRoutes = [ + { + path: '/system/user-auth', + component: Layout, + hidden: true, + permissions: ['system:user:edit'], + children: [ + { + path: 'role/:userId(\\d+)', + component: () => import('@/views/system/user/authRole'), + name: 'AuthRole', + meta: { title: '分配角色', activeMenu: '/system/user' } + } + ] + }, + { + path: '/system/role-auth', + component: Layout, + hidden: true, + permissions: ['system:role:edit'], + children: [ + { + path: 'user/:roleId(\\d+)', + component: () => import('@/views/system/role/authUser'), + name: 'AuthUser', + meta: { title: '分配用户', activeMenu: '/system/role' } + } + ] + }, + { + path: '/system/dict-data', + component: Layout, + hidden: true, + permissions: ['system:dict:list'], + children: [ + { + path: 'index/:dictId(\\d+)', + component: () => import('@/views/system/dict/data'), + name: 'Data', + meta: { title: '字典数据', activeMenu: '/system/dict' } + } + ] + }, + { + path: '/monitor/job-log', + component: Layout, + hidden: true, + permissions: ['monitor:job:list'], + children: [ + { + path: 'index/:jobId(\\d+)', + component: () => import('@/views/monitor/job/log'), + name: 'JobLog', + meta: { title: '调度日志', activeMenu: '/monitor/job' } + } + ] + }, + { + path: '/tool/gen-edit', + component: Layout, + hidden: true, + permissions: ['tool:gen:edit'], + children: [ + { + path: 'index/:tableId(\\d+)', + component: () => import('@/views/tool/gen/editTable'), + name: 'GenEdit', + meta: { title: '修改生成配置', activeMenu: '/tool/gen' } + } + ] + } +] + + + + + +const router = createRouter({ + history: createWebHistory(), + routes: constantRoutes, + scrollBehavior(to, from, savedPosition) { + if (savedPosition) { + return savedPosition + } + return { top: 0 } + }, +}) + +export default router diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..f45e27e --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,10 @@ +/* + * @Author: 季万俊 + * @Date: 2025-09-02 13:27:08 + * @Description: + */ +import { createPinia } from 'pinia' + +const store = createPinia() + +export default store \ No newline at end of file diff --git a/src/store/modules/app.js b/src/store/modules/app.js new file mode 100644 index 0000000..7cf2cdc --- /dev/null +++ b/src/store/modules/app.js @@ -0,0 +1,48 @@ +import { defineStore } from 'pinia' +import Cookies from 'js-cookie' + +export const useAppStore = defineStore('app', { + state: () => ({ + sidebar: { + opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, + withoutAnimation: false, + hide: false + }, + device: 'desktop', + size: Cookies.get('size') || 'medium' + }), + + actions: { + toggleSideBar() { + if (this.sidebar.hide) { + return false + } + this.sidebar.opened = !this.sidebar.opened + this.sidebar.withoutAnimation = false + if (this.sidebar.opened) { + Cookies.set('sidebarStatus', 1) + } else { + Cookies.set('sidebarStatus', 0) + } + }, + + closeSideBar(withoutAnimation) { + Cookies.set('sidebarStatus', 0) + this.sidebar.opened = false + this.sidebar.withoutAnimation = withoutAnimation + }, + + toggleDevice(device) { + this.device = device + }, + + setSize(size) { + this.size = size + Cookies.set('size', size) + }, + + toggleSideBarHide(status) { + this.sidebar.hide = status + } + } +}) diff --git a/src/store/modules/dict.js b/src/store/modules/dict.js new file mode 100644 index 0000000..637a2fb --- /dev/null +++ b/src/store/modules/dict.js @@ -0,0 +1,38 @@ +import { defineStore } from 'pinia' + +export const useDictStore = defineStore('dict', { + state: () => ({ + dict: [] + }), + + actions: { + // 设置字典 + setDict(data) { + if (data.key !== null && data.key !== "") { + this.dict.push({ + key: data.key, + value: data.value + }) + } + }, + + // 删除字典 + removeDict(key) { + try { + for (let i = 0; i < this.dict.length; i++) { + if (this.dict[i].key == key) { + this.dict.splice(i, 1) + return true + } + } + } catch (e) { + // 处理错误 + } + }, + + // 清空字典 + cleanDict() { + this.dict = [] + } + } +}) diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js new file mode 100644 index 0000000..0c2e41e --- /dev/null +++ b/src/store/modules/permission.js @@ -0,0 +1,141 @@ +import { defineStore } from 'pinia' +import auth from "@/plugins/auth" +import router, { constantRoutes, dynamicRoutes } from "@/router" +import { getRouters } from "@/api/menu" +import Layout from "@/layout/index" +import ParentView from "@/components/ParentView" +import InnerLink from "@/layout/components/InnerLink" + +export const usePermissionStore = defineStore('permission', { + state: () => ({ + routes: [], + addRoutes: [], + defaultRoutes: [], + topbarRouters: [], + sidebarRouters: [], + }), + + actions: { + // 生成路由 + GenerateRoutes() { + return new Promise((resolve) => { + // 向后端请求路由数据 + const newMenu = [] + let data = [] + const sdata = JSON.parse(JSON.stringify(data)) + const rdata = JSON.parse(JSON.stringify(data)) + const sidebarRoutes = filterAsyncRouter(sdata) + const rewriteRoutes = filterAsyncRouter(rdata, false, true) + const asyncRoutes = filterDynamicRoutes(dynamicRoutes) + rewriteRoutes.push({ path: "/:pathMatch(.*)*", redirect: "/404", hidden: true }) + this.addRoutes = rewriteRoutes + this.routes = constantRoutes.concat(rewriteRoutes) + this.sidebarRouters = constantRoutes.concat(sidebarRoutes) + this.defaultRoutes = sidebarRoutes + this.topbarRouters = sidebarRoutes + + resolve(rewriteRoutes) + + return + getRouters().then((res) => { + res.data = [...newMenu] + const sdata = JSON.parse(JSON.stringify(res.data)) + const rdata = JSON.parse(JSON.stringify(res.data)) + const sidebarRoutes = filterAsyncRouter(sdata) + const rewriteRoutes = filterAsyncRouter(rdata, false, true) + const asyncRoutes = filterDynamicRoutes(dynamicRoutes) + rewriteRoutes.push({ path: "/:pathMatch(.*)*", redirect: "/404", hidden: true }) + this.addRoutes = rewriteRoutes + this.routes = constantRoutes.concat(rewriteRoutes) + this.sidebarRouters = constantRoutes.concat(sidebarRoutes) + this.defaultRoutes = sidebarRoutes + this.topbarRouters = sidebarRoutes + resolve(rewriteRoutes) + }) + }) + }, + }, +}) + +// 遍历后台传来的路由字符串,转换为组件对象 +function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { + return asyncRouterMap.filter((route) => { + if (type && route.children) { + route.children = filterChildren(route.children) + } + if (route.component) { + // Layout ParentView 组件特殊处理 + if (route.component === "Layout") { + route.component = Layout + } else if (route.component === "ParentView") { + route.component = ParentView + } else if (route.component === "InnerLink") { + route.component = InnerLink + } else { + route.component = loadView(route.component) + } + } + if (route.children != null && route.children && route.children.length) { + route.children = filterAsyncRouter(route.children, route, type) + } else { + delete route["children"] + delete route["redirect"] + } + return true + }) +} + +function filterChildren(childrenMap, lastRouter = false) { + var children = [] + childrenMap.forEach((el, index) => { + if (el.children && el.children.length) { + if (el.component === "ParentView" && !lastRouter) { + el.children.forEach((c) => { + c.path = el.path + "/" + c.path + if (c.children && c.children.length) { + children = children.concat(filterChildren(c.children, c)) + return + } + children.push(c) + }) + return + } + } + if (lastRouter) { + el.path = lastRouter.path + "/" + el.path + if (el.children && el.children.length) { + children = children.concat(filterChildren(el.children, el)) + return + } + } + children = children.concat(el) + }) + return children +} + +// 动态路由遍历,验证是否具备权限 +export function filterDynamicRoutes(routes) { + const res = [] + routes.forEach((route) => { + if (route.permissions) { + if (auth.hasPermiOr(route.permissions)) { + res.push(route) + } + } else if (route.roles) { + if (auth.hasRoleOr(route.roles)) { + res.push(route) + } + } + }) + return res +} + +export const loadView = (view) => { + if (process.env.NODE_ENV === "development") { + return (resolve) => require([`@/views/${view}`], resolve) + } else { + // 使用 import 实现生产环境的路由懒加载 + return () => import(`@/views/${view}.vue`); + } +} +