diff --git a/h5/js/mock.js b/h5/js/mock.js new file mode 100644 index 0000000..6779f3a --- /dev/null +++ b/h5/js/mock.js @@ -0,0 +1,329 @@ +// Mock数据文件 - 智慧工地H5原型 +// 本文件包含所有Mock数据,供其他JS文件使用 + +// ==================== 设备数据 ==================== +const MOCK_DEVICES = [ + { + id: 'tc001', + name: '1号塔吊', + type: 'tower_crane', + model: 'QTZ500', + location: 'A区施工现场', + status: 'online', + lastSeen: '2026-04-14 12:00:00' + }, + { + id: 'tc002', + name: '2号塔吊', + type: 'tower_crane', + model: 'QTZ630', + location: 'B区施工现场', + status: 'online', + lastSeen: '2026-04-14 12:00:00' + }, + { + id: 'tc003', + name: '3号塔吊', + type: 'tower_crane', + model: 'QTZ500', + location: 'C区施工现场', + status: 'offline', + lastSeen: '2026-04-14 08:30:00' + }, + { + id: 'el001', + name: '1号升降机', + type: 'elevator', + model: 'SC200/200', + location: 'A区主楼', + status: 'online', + lastSeen: '2026-04-14 12:00:00' + }, + { + id: 'el002', + name: '2号升降机', + type: 'elevator', + model: 'SC200/200', + location: 'B区主楼', + status: 'online', + lastSeen: '2026-04-14 12:00:00' + } +]; + +// ==================== 实时数据 ==================== +const MOCK_REALTIME = { + tc001: { + weight: 45.2, + windSpeed: 5.2, + range: 30.5, + height: 85.0, + angle: 120.5, + momentPercent: 85.3, + alert: 'danger', + alertMsg: '载重超限' + }, + tc002: { + weight: 32.1, + windSpeed: 4.8, + range: 25.0, + height: 92.3, + angle: 45.2, + momentPercent: 55.8, + alert: null, + alertMsg: null + }, + tc003: { + weight: 0, + windSpeed: 0, + range: 0, + height: 0, + angle: 0, + momentPercent: 0, + alert: null, + alertMsg: null + }, + el001: { + realtimeWeight: 1.2, + realtimeSpeed: 1.0, + realtimeHeight: 45.5, + realtimeDipX: 0.5, + realtimeDipY: 0.3, + outDoorStatus: '0', + alert: 'warning', + alertMsg: '风速过大' + }, + el002: { + realtimeWeight: 0.8, + realtimeSpeed: 0.8, + realtimeHeight: 32.0, + realtimeDipX: 0.2, + realtimeDipY: 0.1, + outDoorStatus: '0', + alert: null, + alertMsg: null + } +}; + +// ==================== 预警数据 ==================== +const MOCK_ALERTS = [ + { + id: 'al001', + deviceId: 'tc001', + deviceName: '1号塔吊', + deviceType: 'tower_crane', + level: 'danger', + message: '载重超限', + metric: 'weight', + value: 45.2, + createdAt: '2026-04-14 11:30:00', + status: 'unread', + handleNote: null + }, + { + id: 'al002', + deviceId: 'el001', + deviceName: '1号升降机', + deviceType: 'elevator', + level: 'warning', + message: '风速过大', + metric: 'windSpeed', + value: 5.2, + createdAt: '2026-04-14 10:15:00', + status: 'unread', + handleNote: null + }, + { + id: 'al003', + deviceId: 'tc002', + deviceName: '2号塔吊', + deviceType: 'tower_crane', + level: 'warning', + message: '力矩超限', + metric: 'momentPercent', + value: 78.5, + createdAt: '2026-04-13 16:20:00', + status: 'handled', + handleNote: '已安排人员检修,现已恢复正常' + }, + { + id: 'al004', + deviceId: 'tc001', + deviceName: '1号塔吊', + deviceType: 'tower_crane', + level: 'danger', + message: '回转角度异常', + metric: 'angle', + value: 185.0, + createdAt: '2026-04-13 14:00:00', + status: 'handled', + handleNote: '传感器误报,已校准' + }, + { + id: 'al005', + deviceId: 'el001', + deviceName: '1号升降机', + deviceType: 'elevator', + level: 'warning', + message: '高度接近上限', + metric: 'realtimeHeight', + value: 95.0, + createdAt: '2026-04-12 09:30:00', + status: 'ignored', + handleNote: '属正常施工需要' + }, + { + id: 'al006', + deviceId: 'tc003', + deviceName: '3号塔吊', + deviceType: 'tower_crane', + level: 'warning', + message: '设备离线', + metric: 'status', + value: null, + createdAt: '2026-04-14 08:30:00', + status: 'unread', + handleNote: null + } +]; + +// ==================== 隐患随手拍数据 ==================== +const MOCK_REPORTS = [ + { + id: 'rep001', + category: '高空坠落', + severity: '较大', + location: 'A区基坑', + description: '基坑周边防护栏杆缺失,存在高空坠落风险', + reporter: '张三', + reportedAt: '2026-04-14 09:00:00', + status: 'pending' + }, + { + id: 'rep002', + category: '触电', + severity: '一般', + location: 'B区钢筋加工区', + description: '配电箱门未关闭,电缆裸露', + reporter: '李四', + reportedAt: '2026-04-13 15:30:00', + status: 'resolved' + }, + { + id: 'rep003', + category: '物体打击', + severity: '重大', + location: 'C区脚手架', + description: '脚手架上散落物料未清理,高空落物风险', + reporter: '王五', + reportedAt: '2026-04-12 11:20:00', + status: 'processing' + } +]; + +// ==================== 施工日志数据 ==================== +const MOCK_LOGS = [ + { + id: 'log001', + date: '2026-04-14', + location: 'A区主楼', + content: '完成3层混凝土浇筑', + workers: 28, + weather: '晴', + remark: '施工顺利,质量合格' + }, + { + id: 'log002', + date: '2026-04-13', + location: 'B区地下室', + content: '土方开挖', + workers: 18, + weather: '多云', + remark: '发现地下管线,已联系相关部门' + }, + { + id: 'log003', + date: '2026-04-12', + location: 'C区基坑', + content: '基坑支护施工', + workers: 12, + weather: '阴', + remark: '按计划进行中' + } +]; + +// ==================== 用户数据 ==================== +const MOCK_USER = { + id: 1, + username: 'admin', + realName: '张工地', + role: '管理员', + phone: '138****1234', + avatar: null, + department: '工程部' +}; + +// ==================== 辅助函数 ==================== + +/** + * 根据设备ID获取设备信息 + * @param {string} id - 设备ID + * @returns {Object|undefined} 设备对象 + */ +function getDeviceById(id) { + return MOCK_DEVICES.find(function(device) { + return device.id === id; + }); +} + +/** + * 根据预警ID获取预警信息 + * @param {string} id - 预警ID + * @returns {Object|undefined} 预警对象 + */ +function getAlertById(id) { + return MOCK_ALERTS.find(function(alert) { + return alert.id === id; + }); +} + +/** + * 根据设备ID获取实时数据 + * @param {string} id - 设备ID + * @returns {Object|undefined} 实时数据对象 + */ +function getRealtimeById(id) { + return MOCK_REALTIME[id]; +} + +/** + * 获取所有在线设备 + * @returns {Array} 在线设备列表 + */ +function getOnlineDevices() { + return MOCK_DEVICES.filter(function(device) { + return device.status === 'online'; + }); +} + +/** + * 获取未读预警数量 + * @returns {number} 未读预警数量 + */ +function getUnreadAlertCount() { + return MOCK_ALERTS.filter(function(alert) { + return alert.status === 'unread'; + }).length; +} + +// 导出全局变量和函数 +window.MOCK_DEVICES = MOCK_DEVICES; +window.MOCK_REALTIME = MOCK_REALTIME; +window.MOCK_ALERTS = MOCK_ALERTS; +window.MOCK_REPORTS = MOCK_REPORTS; +window.MOCK_LOGS = MOCK_LOGS; +window.MOCK_USER = MOCK_USER; +window.getDeviceById = getDeviceById; +window.getAlertById = getAlertById; +window.getRealtimeById = getRealtimeById; +window.getOnlineDevices = getOnlineDevices; +window.getUnreadAlertCount = getUnreadAlertCount;