let table, layer, form, laydate; let temperatureHumidityChart = null; let windSpeedChart = null; let airQualityChart = null; layui.use(["layer", "table", "form", "laydate"], function () { layer = layui.layer; table = layui.table; form = layui.form; laydate = layui.laydate; // 响应成功后的拦截器 $.ajaxSetup({ beforeSend: function (xhr, options) { var originalSuccess = options.success; options.success = function (data, textStatus, jqXhr) { data = modifyResponseData(data); originalSuccess.apply(this, arguments); }; }, }); // 初始化页面 initPage(); // 初始化日期范围选择器 initDateRangePicker(); }); // 初始化页面 function initPage() { initTemperatureHumidityChart(); initWindSpeedChart(); initAirQualityChart(); initEnvironmentRecordTable(); } // 初始化日期范围选择器 function initDateRangePicker() { laydate.render({ elem: '#dateRange', type: 'date', range: true, format: 'yyyy-MM-dd', theme: 'dark', max: 0, done: function(value, date, endDate) { // 日期范围选择完成 } }); } // 查询数据 function queryData() { const dateRange = $('#dateRange').val(); // 重新加载图表数据 getTemperatureHumidityData(); getWindSpeedData(); getAirQualityData(); queryRecords(); } // 初始化温湿度图表(柱状图+折线图,双Y轴) function initTemperatureHumidityChart() { const chartDom = document.getElementById('temperatureHumidityChart'); if (!chartDom) return; if (temperatureHumidityChart) { temperatureHumidityChart.dispose(); } temperatureHumidityChart = echarts.init(chartDom); // 模拟数据 - 后续替换为真实接口数据 const times = ['8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00']; const temperatures = [25, 28, 30, 32, 30, 28, 26]; // 温度(°C) const humidities = [60, 65, 70, 75, 72, 68, 65]; // 湿度(%) const option = { backgroundColor: 'transparent', tooltip: { trigger: 'axis', backgroundColor: 'rgba(13, 34, 37, 0.95)', borderColor: 'rgba(6, 189, 221, 0.8)', borderWidth: 1, borderRadius: 4, padding: [12, 16], textStyle: { color: '#FFFFFF', fontSize: 12 } }, legend: { data: ['温度', '湿度'], top: '5%', right: '5%', textStyle: { color: '#FFFFFF', fontSize: 12 }, itemWidth: 12, itemHeight: 12, icon: 'rect' }, grid: { left: '10%', right: '10%', bottom: '15%', top: '20%', containLabel: true }, xAxis: { type: 'category', data: times, axisLabel: { color: '#FFFFFF', fontSize: 12 }, axisLine: { lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 } }, axisTick: { show: false } }, yAxis: [ { type: 'value', name: '°C', nameTextStyle: { color: '#FFFFFF', fontSize: 12 }, axisLabel: { color: '#FFFFFF', fontSize: 12 }, axisLine: { lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 } }, splitLine: { lineStyle: { color: 'rgba(255, 255, 255, 0.15)', type: 'dashed', width: 1 } } }, { type: 'value', name: '%', nameTextStyle: { color: '#FFFFFF', fontSize: 12 }, axisLabel: { color: '#FFFFFF', fontSize: 12 }, axisLine: { lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 } }, splitLine: { show: false } } ], series: [ { name: '温度', type: 'bar', yAxisIndex: 0, data: temperatures, barWidth: '40%', itemStyle: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#4A90E2' }, { offset: 1, color: '#2E5C8A' }]), borderRadius: [2, 2, 0, 0] }, label: { show: false } }, { name: '湿度', type: 'line', yAxisIndex: 1, data: humidities, itemStyle: { color: '#50E3C2' }, lineStyle: { width: 2, color: '#50E3C2' }, symbol: 'circle', symbolSize: 6, label: { show: false } } ] }; temperatureHumidityChart.setOption(option); // 响应式调整 window.addEventListener('resize', function() { if (temperatureHumidityChart) { temperatureHumidityChart.resize(); } }); } // 初始化风速图表(折线图) function initWindSpeedChart() { const chartDom = document.getElementById('windSpeedChart'); if (!chartDom) return; if (windSpeedChart) { windSpeedChart.dispose(); } windSpeedChart = echarts.init(chartDom); // 模拟数据 - 后续替换为真实接口数据 const times = ['8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00']; const windSpeeds = [5.2, 6.1, 5.8, 4.5, 5.0, 6.2, 5.5]; // 风速(m/s) const option = { backgroundColor: 'transparent', tooltip: { trigger: 'axis', backgroundColor: 'rgba(13, 34, 37, 0.95)', borderColor: 'rgba(6, 189, 221, 0.8)', borderWidth: 1, borderRadius: 4, padding: [12, 16], textStyle: { color: '#FFFFFF', fontSize: 12 } }, legend: { data: ['风速'], top: '5%', right: '5%', textStyle: { color: '#FFFFFF', fontSize: 12 }, itemWidth: 12, itemHeight: 12, icon: 'rect' }, grid: { left: '10%', right: '10%', bottom: '15%', top: '20%', containLabel: true }, xAxis: { type: 'category', data: times, axisLabel: { color: '#FFFFFF', fontSize: 12 }, axisLine: { lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 } }, axisTick: { show: false } }, yAxis: { type: 'value', name: 'm/s', nameTextStyle: { color: '#FFFFFF', fontSize: 12 }, axisLabel: { color: '#FFFFFF', fontSize: 12 }, axisLine: { lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 } }, splitLine: { lineStyle: { color: 'rgba(255, 255, 255, 0.15)', type: 'dashed', width: 1 } } }, series: [ { name: '风速', type: 'line', data: windSpeeds, itemStyle: { color: '#50E3C2' }, lineStyle: { width: 2, color: '#50E3C2' }, symbol: 'circle', symbolSize: 6, areaStyle: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgba(80, 227, 194, 0.3)' }, { offset: 1, color: 'rgba(80, 227, 194, 0.05)' }]) }, label: { show: false } } ] }; windSpeedChart.setOption(option); // 响应式调整 window.addEventListener('resize', function() { if (windSpeedChart) { windSpeedChart.resize(); } }); } // 初始化空气质量图表(双折线图) function initAirQualityChart() { const chartDom = document.getElementById('airQualityChart'); if (!chartDom) return; if (airQualityChart) { airQualityChart.dispose(); } airQualityChart = echarts.init(chartDom); // 模拟数据 - 后续替换为真实接口数据 const times = ['8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00']; const pm25 = [35, 38, 42, 40, 38, 36, 34]; // PM2.5 const pm10 = [55, 60, 65, 62, 58, 56, 54]; // PM10 const option = { backgroundColor: 'transparent', tooltip: { trigger: 'axis', backgroundColor: 'rgba(13, 34, 37, 0.95)', borderColor: 'rgba(6, 189, 221, 0.8)', borderWidth: 1, borderRadius: 4, padding: [12, 16], textStyle: { color: '#FFFFFF', fontSize: 12 } }, legend: { data: ['PM2.5', 'PM10'], top: '5%', right: '5%', textStyle: { color: '#FFFFFF', fontSize: 12 }, itemWidth: 12, itemHeight: 12, icon: 'rect' }, grid: { left: '10%', right: '10%', bottom: '15%', top: '20%', containLabel: true }, xAxis: { type: 'category', data: times, axisLabel: { color: '#FFFFFF', fontSize: 12 }, axisLine: { lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 } }, axisTick: { show: false } }, yAxis: { type: 'value', name: 'µg/m³', nameTextStyle: { color: '#FFFFFF', fontSize: 12 }, axisLabel: { color: '#FFFFFF', fontSize: 12 }, axisLine: { lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 } }, splitLine: { lineStyle: { color: 'rgba(255, 255, 255, 0.15)', type: 'dashed', width: 1 } } }, series: [ { name: 'PM2.5', type: 'line', data: pm25, itemStyle: { color: '#87CEEB' }, lineStyle: { width: 2, color: '#87CEEB' }, symbol: 'circle', symbolSize: 6, label: { show: false } }, { name: 'PM10', type: 'line', data: pm10, itemStyle: { color: '#50E3C2' }, lineStyle: { width: 2, color: '#50E3C2' }, symbol: 'circle', symbolSize: 6, label: { show: false } } ] }; airQualityChart.setOption(option); // 响应式调整 window.addEventListener('resize', function() { if (airQualityChart) { airQualityChart.resize(); } }); } // 生成模拟数据 function generateEnvironmentMockData() { const projectNames = ['安徽淮北凌云220kv 变电站新建工程']; const workPlans = ['WP001', 'WP002', 'WP003', 'WP004', 'WP005']; const locations = ['主变区', '开关站', '控制室', '配电室', '电缆沟']; const monitoringPoints = ['MP001', 'MP002', 'MP003', 'MP004', 'MP005', 'MP006']; const pointNames = ['临建区道路施工 监测点', '主变区监测点', '开关站监测点', '控制室监测点', '配电室监测点', '电缆沟监测点']; const mockData = []; const today = new Date(); for (let i = 0; i < 25; i++) { const date = new Date(today); date.setDate(date.getDate() - Math.floor(i / 3)); const timeStr = date.getFullYear() + '-' + String(date.getMonth() + 1).padStart(2, '0') + '-' + String(date.getDate()).padStart(2, '0') + ' ' + String(8 + (i % 7)).padStart(2, '0') + ':' + String(Math.floor(Math.random() * 60)).padStart(2, '0') + ':' + String(Math.floor(Math.random() * 60)).padStart(2, '0'); mockData.push({ projectName: projectNames[0], workPlanNumber: workPlans[Math.floor(Math.random() * workPlans.length)], workLocation: locations[Math.floor(Math.random() * locations.length)], monitoringPointNumber: monitoringPoints[Math.floor(Math.random() * monitoringPoints.length)], monitoringPointName: pointNames[Math.floor(Math.random() * pointNames.length)], monitoringTime: timeStr, temperature: (20 + Math.floor(Math.random() * 15)).toFixed(1), humidity: (50 + Math.floor(Math.random() * 30)).toFixed(1), windSpeed: (3 + Math.random() * 5).toFixed(1), airQuality: (30 + Math.floor(Math.random() * 40)).toFixed(0) }); } return mockData; } // 初始化环境监测记录表格 function initEnvironmentRecordTable() { const mockData = generateEnvironmentMockData(); table.render({ elem: '#environmentRecordTable', data: mockData, skin: 'line', page: { layout: ['prev', 'page', 'next', 'count', 'skip'], groups: 5, limit: 10, limits: [10, 20, 30] }, height: 'full', cols: [[ {field: 'projectName', title: '工程名称', width: '15%', align: 'center'}, {field: 'workPlanNumber', title: '作业计划编号', width: '10%', align: 'center'}, {field: 'workLocation', title: '作业地点', width: '10%', align: 'center'}, {field: 'monitoringPointNumber', title: '监测点编号', width: '10%', align: 'center'}, {field: 'monitoringPointName', title: '监测点名称', width: '15%', align: 'center'}, {field: 'monitoringTime', title: '监测时间', width: '12%', align: 'center'}, {field: 'temperature', title: '温度', width: '6%', align: 'center'}, {field: 'humidity', title: '湿度', width: '6%', align: 'center'}, {field: 'windSpeed', title: '风速', width: '6%', align: 'center'}, {field: 'airQuality', title: '空气质量', width: '6%', align: 'center'}, {title: '视频查看', width: '6%', align: 'center', templet: function(d) { return '查看'; }}, {title: '分析改进', width: '8%', align: 'center', templet: function(d) { return '分析与改进'; }} ]] }); } // 查询记录 function queryRecords() { const keyword = $('#keywordInput').val(); const dateRange = $('#dateRange').val(); table.reload('environmentRecordTable', { where: { keyword: keyword, dateRange: dateRange, bidCode: parent.parent.$('#bidPro').val() || '' }, page: { curr: 1 } }); } // 查看视频 function viewVideo(monitoringPointNumber) { layer.msg('查看视频: ' + monitoringPointNumber, {icon: 1}); // 后续实现视频查看功能 } // 分析与改进 function analyzeImprove(monitoringPointNumber) { layer.msg('分析与改进: ' + monitoringPointNumber, {icon: 1}); // 后续实现分析改进功能 } // 获取温湿度数据(接口调用) function getTemperatureHumidityData() { const bidCode = parent.parent.$('#bidPro').val() || ''; const dateRange = $('#dateRange').val(); const url = commonUrl + 'screen/largeScreen/dataAnalysis/getTemperatureHumidity'; $.ajax({ url: url, type: 'GET', headers: { decrypt: 'decrypt', Authorization: token }, data: { bidCode: bidCode, dateRange: dateRange }, success: function(res) { if (res.code === 200 && res.data) { updateTemperatureHumidityChart(res.data); } }, error: function(err) { console.error('获取温湿度数据失败:', err); } }); } // 更新温湿度图表 function updateTemperatureHumidityChart(data) { if (!temperatureHumidityChart) return; const times = data.map(item => item.time); const temperatures = data.map(item => item.temperature); const humidities = data.map(item => item.humidity); temperatureHumidityChart.setOption({ xAxis: { data: times }, series: [ { name: '温度', data: temperatures }, { name: '湿度', data: humidities } ] }); } // 获取风速数据(接口调用) function getWindSpeedData() { const bidCode = parent.parent.$('#bidPro').val() || ''; const dateRange = $('#dateRange').val(); const url = commonUrl + 'screen/largeScreen/dataAnalysis/getWindSpeed'; $.ajax({ url: url, type: 'GET', headers: { decrypt: 'decrypt', Authorization: token }, data: { bidCode: bidCode, dateRange: dateRange }, success: function(res) { if (res.code === 200 && res.data) { updateWindSpeedChart(res.data); } }, error: function(err) { console.error('获取风速数据失败:', err); } }); } // 更新风速图表 function updateWindSpeedChart(data) { if (!windSpeedChart) return; const times = data.map(item => item.time); const windSpeeds = data.map(item => item.windSpeed); windSpeedChart.setOption({ xAxis: { data: times }, series: [{ name: '风速', data: windSpeeds }] }); } // 获取空气质量数据(接口调用) function getAirQualityData() { const bidCode = parent.parent.$('#bidPro').val() || ''; const dateRange = $('#dateRange').val(); const url = commonUrl + 'screen/largeScreen/dataAnalysis/getAirQuality'; $.ajax({ url: url, type: 'GET', headers: { decrypt: 'decrypt', Authorization: token }, data: { bidCode: bidCode, dateRange: dateRange }, success: function(res) { if (res.code === 200 && res.data) { updateAirQualityChart(res.data); } }, error: function(err) { console.error('获取空气质量数据失败:', err); } }); } // 更新空气质量图表 function updateAirQualityChart(data) { if (!airQualityChart) return; const times = data.map(item => item.time); const pm25 = data.map(item => item.pm25); const pm10 = data.map(item => item.pm10); airQualityChart.setOption({ xAxis: { data: times }, series: [ { name: 'PM2.5', data: pm25 }, { name: 'PM10', data: pm10 } ] }); }