|
@@ -1,220 +1,126 @@
|
|
|
|
|
+import request from '@/utils/request'
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
- * 大屏页面模拟数据 - 匹配 index-v2.html
|
|
|
|
|
|
|
+ * 1. 实验室基本情况统计 & 安全分级统计
|
|
|
|
|
+ * GET /laboratory/labScreen/labBasicStatistics
|
|
|
*/
|
|
*/
|
|
|
|
|
+export function getLabBasicStatistics() {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/labScreen/labBasicStatistics',
|
|
|
|
|
+ method: 'get'
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
-// 实验室基本情况统计
|
|
|
|
|
-export function getLabStats() {
|
|
|
|
|
- return new Promise(resolve => {
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- resolve({
|
|
|
|
|
- code: 200,
|
|
|
|
|
- data: {
|
|
|
|
|
- total: 128,
|
|
|
|
|
- levels: [
|
|
|
|
|
- { name: 'I级', label: 'I 级(危险)', value: 12, color: '#cc0000' },
|
|
|
|
|
- { name: 'II级', label: 'II 级(较危险)', value: 28, color: '#ff8000' },
|
|
|
|
|
- { name: 'III级', label: 'III 级(一般)', value: 45, color: '#ffcc00' },
|
|
|
|
|
- { name: 'IV级', label: 'IV 级(较安全)', value: 43, color: '#0066cc' }
|
|
|
|
|
- ],
|
|
|
|
|
- status: { active: 20, warning: 3, idle: 105 }
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }, 300)
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * 2. 实验室进入人数统计及走势(24小时)
|
|
|
|
|
+ * GET /laboratory/labScreen/passOutTrend
|
|
|
|
|
+ */
|
|
|
|
|
+export function getPassOutTrend() {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/labScreen/passOutTrend',
|
|
|
|
|
+ method: 'get'
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 实验室安全分级统计
|
|
|
|
|
-export function getSafetyLevelStats() {
|
|
|
|
|
- return new Promise(resolve => {
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- resolve({
|
|
|
|
|
- code: 200,
|
|
|
|
|
- data: {
|
|
|
|
|
- levels: ['I级', 'II级', 'III级', 'IV级'],
|
|
|
|
|
- colors: ['#cc0000', '#ff8000', '#ffcc00', '#0066cc'],
|
|
|
|
|
- units: ['化学所', '生物所', '材料所', '物理所', '工程所', '核能所', '信息所', '环境所', '计量所', '医学所'],
|
|
|
|
|
- totals: [28, 22, 18, 24, 16, 12, 20, 15, 10, 14],
|
|
|
|
|
- series: [
|
|
|
|
|
- [2, 3, 5, 4, 2, 1, 3, 2, 1, 2],
|
|
|
|
|
- [5, 6, 4, 7, 4, 3, 5, 4, 3, 4],
|
|
|
|
|
- [9, 8, 6, 8, 5, 5, 7, 5, 4, 5],
|
|
|
|
|
- [12, 5, 3, 5, 5, 3, 5, 4, 2, 3]
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }, 300)
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * 3. 实验环境安全实时监测(分页)
|
|
|
|
|
+ * GET /laboratory/labScreen/envMonitor
|
|
|
|
|
+ */
|
|
|
|
|
+export function getEnvMonitor(params = { page: 1, pageSize: 10 }) {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/labScreen/envMonitor',
|
|
|
|
|
+ method: 'get',
|
|
|
|
|
+ params
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 实验室进入人数统计及走势
|
|
|
|
|
-export function getPersonnelStats() {
|
|
|
|
|
- return new Promise(resolve => {
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- resolve({
|
|
|
|
|
- code: 200,
|
|
|
|
|
- data: {
|
|
|
|
|
- totalEntry: 1284,
|
|
|
|
|
- currentPresent: 47,
|
|
|
|
|
- trend: {
|
|
|
|
|
- times: ['00:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00', '24:00'],
|
|
|
|
|
- entry: [0, 0, 2, 86, 128, 145, 160, 90, 30],
|
|
|
|
|
- present: [0, 0, 2, 62, 98, 108, 120, 72, 20]
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }, 300)
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * 4. 实验室实时风险预警
|
|
|
|
|
+ * GET /laboratory/labScreen/riskWarning
|
|
|
|
|
+ */
|
|
|
|
|
+export function getRiskWarning() {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/labScreen/riskWarning',
|
|
|
|
|
+ method: 'get'
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 5. 智能环境感知应用设备统计
|
|
|
|
|
+ * GET /laboratory/labScreen/iotDeviceStatistics
|
|
|
|
|
+ */
|
|
|
|
|
+export function getIotDeviceStatistics() {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/labScreen/iotDeviceStatistics',
|
|
|
|
|
+ method: 'get'
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 智能环境感知应用设备统计
|
|
|
|
|
-export function getDeviceStats() {
|
|
|
|
|
- return new Promise(resolve => {
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- resolve({
|
|
|
|
|
- code: 200,
|
|
|
|
|
- data: {
|
|
|
|
|
- online: 312,
|
|
|
|
|
- offline: 18,
|
|
|
|
|
- onlineRate: 94.5,
|
|
|
|
|
- devices: [
|
|
|
|
|
- { name: '电子信息铭牌', value: 86, icon: '🏷️' },
|
|
|
|
|
- { name: '化学品智能终端', value: 44, icon: '⚗️' },
|
|
|
|
|
- { name: '传感器套件', value: 128, icon: '🌡️' },
|
|
|
|
|
- { name: '智能摄像设备', value: 72, icon: '📷' }
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }, 300)
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * 6. 实验室设备分类及使用统计
|
|
|
|
|
+ * GET /laboratory/labScreen/deviceCategoryStat
|
|
|
|
|
+ */
|
|
|
|
|
+export function getDeviceCategoryStat() {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/labScreen/deviceCategoryStat',
|
|
|
|
|
+ method: 'get'
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 实验室设备分类及使用统计
|
|
|
|
|
-export function getEquipmentStats() {
|
|
|
|
|
- return new Promise(resolve => {
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- resolve({
|
|
|
|
|
- code: 200,
|
|
|
|
|
- data: {
|
|
|
|
|
- totalEquipment: 2458,
|
|
|
|
|
- totalHours: 18620,
|
|
|
|
|
- usageRate: 62.4,
|
|
|
|
|
- categories: [
|
|
|
|
|
- { value: 680, name: '检测设备', color: '#1e90ff' },
|
|
|
|
|
- { value: 520, name: '分析仪器', color: '#4361ee' },
|
|
|
|
|
- { value: 380, name: '制备设备', color: '#00e676' },
|
|
|
|
|
- { value: 280, name: '安全设备', color: '#ffd740' },
|
|
|
|
|
- { value: 240, name: '辅助设备', color: '#00e5c8' },
|
|
|
|
|
- { value: 358, name: '其他', color: '#f97316' }
|
|
|
|
|
- ],
|
|
|
|
|
- usageStatus: [
|
|
|
|
|
- { value: 486, name: '使用', color: '#1e90ff' },
|
|
|
|
|
- { value: 1840, name: '空闲', color: '#00e676' },
|
|
|
|
|
- { value: 34, name: '维修', color: '#f59e0b' }
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }, 300)
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * 7. 风险预警 - 触发预案信息查询
|
|
|
|
|
+ * GET /laboratory/large/selectTriggerInfo
|
|
|
|
|
+ */
|
|
|
|
|
+export function selectTriggerInfo() {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/large/selectTriggerInfo',
|
|
|
|
|
+ method: 'get'
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 实验环境安全智能感知
|
|
|
|
|
-export function getSensorList() {
|
|
|
|
|
- return new Promise(resolve => {
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- resolve({
|
|
|
|
|
- code: 200,
|
|
|
|
|
- data: [
|
|
|
|
|
- { name: '化学分析实验室', room: 'A301', unit: '化学研究所', t: 22.5, h: 58, tvoc: 0.82, co2: 650, o2: 20.9, alert: true },
|
|
|
|
|
- { name: '生物安全实验室', room: 'B201', unit: '生物研究所', t: 20.1, h: 62, tvoc: 0.18, co2: 580, o2: 20.8, alert: false },
|
|
|
|
|
- { name: '材料测试实验室', room: 'C401', unit: '材料研究所', t: 24.0, h: 45, tvoc: 0.09, co2: 520, o2: 20.9, alert: false },
|
|
|
|
|
- { name: '精密仪器实验室', room: 'A205', unit: '物理研究所', t: 21.5, h: 50, tvoc: 0.14, co2: 490, o2: 20.9, alert: false },
|
|
|
|
|
- { name: '有机合成实验室', room: 'B302', unit: '化学研究所', t: 23.8, h: 55, tvoc: 2.10, co2: 725, o2: 20.5, alert: true },
|
|
|
|
|
- { name: '光学检测实验室', room: 'C203', unit: '物理研究所', t: 22.0, h: 52, tvoc: 0.11, co2: 510, o2: 20.9, alert: false },
|
|
|
|
|
- { name: '高压实验室', room: 'D101', unit: '工程研究所', t: 25.5, h: 48, tvoc: 0.30, co2: 600, o2: 20.7, alert: false },
|
|
|
|
|
- { name: '低温实验室', room: 'D205', unit: '物理研究所', t: 18.0, h: 40, tvoc: 0.07, co2: 480, o2: 20.9, alert: false },
|
|
|
|
|
- { name: '核磁共振室', room: 'A302', unit: '化学研究所', t: 20.5, h: 54, tvoc: 0.05, co2: 505, o2: 20.9, alert: false },
|
|
|
|
|
- { name: '质谱分析室', room: 'A303', unit: '化学研究所', t: 21.0, h: 53, tvoc: 0.19, co2: 530, o2: 20.8, alert: false }
|
|
|
|
|
- ]
|
|
|
|
|
- })
|
|
|
|
|
- }, 300)
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * 8. 实时监控 - 楼栋楼层树
|
|
|
|
|
+ * POST /laboratory/labScreen/monitorTree
|
|
|
|
|
+ */
|
|
|
|
|
+export function getMonitorTree(data = {}) {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/labScreen/monitorTree',
|
|
|
|
|
+ method: 'post',
|
|
|
|
|
+ data
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 实验室实时风险预警
|
|
|
|
|
-export function getWarningList() {
|
|
|
|
|
- return new Promise(resolve => {
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- resolve({
|
|
|
|
|
- code: 200,
|
|
|
|
|
- data: {
|
|
|
|
|
- total: 42,
|
|
|
|
|
- list: [
|
|
|
|
|
- { lab: '化学分析实验室', room: 'A301', unit: '化学研究所', metric: 'TVOC浓度超标', val: '2.85 mg/m³', time: '2026-03-05 14:32:18' },
|
|
|
|
|
- { lab: '有机合成实验室', room: 'B302', unit: '化学研究所', metric: 'CO₂浓度偏高', val: '725 ppm', time: '2026-03-05 13:58:44' },
|
|
|
|
|
- { lab: '高压实验室', room: 'D101', unit: '工程研究所', metric: '温度异常', val: '38.5 °C', time: '2026-03-05 12:15:07' },
|
|
|
|
|
- { lab: '生物安全实验室', room: 'B201', unit: '生物研究所', metric: '湿度超标', val: '88% RH', time: '2026-03-05 11:40:22' },
|
|
|
|
|
- { lab: '材料测试实验室', room: 'C401', unit: '材料研究所', metric: 'TVOC超标', val: '1.2 mg/m³', time: '2026-03-05 10:08:55' },
|
|
|
|
|
- { lab: '光学检测实验室', room: 'C203', unit: '物理研究所', metric: 'O₂浓度偏低', val: '19.2 %', time: '2026-03-05 09:22:33' },
|
|
|
|
|
- { lab: '精密仪器实验室', room: 'A205', unit: '物理研究所', metric: '温度超标', val: '28.5 °C', time: '2026-03-05 08:45:11' },
|
|
|
|
|
- { lab: '低温实验室', room: 'D205', unit: '物理研究所', metric: '气压异常', val: '85 kPa', time: '2026-03-04 23:12:40' }
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }, 300)
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * 9. 实时监控 - 摄像头流地址
|
|
|
|
|
+ * POST /laboratory/labScreen/cameraStream
|
|
|
|
|
+ */
|
|
|
|
|
+export function getCameraStream(data) {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/labScreen/cameraStream',
|
|
|
|
|
+ method: 'post',
|
|
|
|
|
+ data
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 监控摄像头列表
|
|
|
|
|
-export function getCameraList() {
|
|
|
|
|
- return new Promise(resolve => {
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- resolve({
|
|
|
|
|
- code: 200,
|
|
|
|
|
- data: [
|
|
|
|
|
- 'A301 有机合成室', 'A302 核磁共振室', 'A303 质谱室',
|
|
|
|
|
- 'A301 走廊', 'A302 走廊', 'A303 走廊',
|
|
|
|
|
- 'A层公共区域', 'A层安全通道', 'A层出入口'
|
|
|
|
|
- ]
|
|
|
|
|
- })
|
|
|
|
|
- }, 300)
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * getCameraList - 兼容 SecurityMonitor 组件,获取摄像头列表名称
|
|
|
|
|
+ * 复用 cameraStream,返回设备名列表
|
|
|
|
|
+ */
|
|
|
|
|
+export function getCameraList(data = {}) {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/labScreen/cameraStream',
|
|
|
|
|
+ method: 'post',
|
|
|
|
|
+ data
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 监控树形数据
|
|
|
|
|
-export function getMonitorTree() {
|
|
|
|
|
- return new Promise(resolve => {
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- resolve({
|
|
|
|
|
- code: 200,
|
|
|
|
|
- data: {
|
|
|
|
|
- label: '安科院主园区',
|
|
|
|
|
- children: [
|
|
|
|
|
- {
|
|
|
|
|
- label: '综合实验楼A',
|
|
|
|
|
- children: [
|
|
|
|
|
- { label: '1层', children: [{ label: 'A101 化学实验室' }, { label: 'A102 分析室' }] },
|
|
|
|
|
- { label: '2层', children: [{ label: 'A201 生物实验室' }] },
|
|
|
|
|
- { label: '3层', children: [{ label: 'A301 有机合成室' }, { label: 'A302 核磁共振室' }, { label: 'A303 质谱室' }] },
|
|
|
|
|
- { label: '4层', children: [{ label: 'A401 X射线室' }] }
|
|
|
|
|
- ]
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- label: '物理实验楼B',
|
|
|
|
|
- children: [
|
|
|
|
|
- { label: '1层', children: [{ label: 'B101 光学实验室' }] },
|
|
|
|
|
- { label: '2层', children: [{ label: 'B201 低温实验室' }] }
|
|
|
|
|
- ]
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- label: '工程技术楼C',
|
|
|
|
|
- children: [
|
|
|
|
|
- { label: '1层', children: [{ label: 'C101 机械加工室' }] },
|
|
|
|
|
- { label: '2层', children: [{ label: 'C201 材料测试室' }] }
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }, 300)
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * 10. 大屏天气及服务器时间
|
|
|
|
|
+ * GET /laboratory/labScreen/weather
|
|
|
|
|
+ */
|
|
|
|
|
+export function getWeather() {
|
|
|
|
|
+ return request({
|
|
|
|
|
+ url: '/laboratory/labScreen/weather',
|
|
|
|
|
+ method: 'get'
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|