<template> <!-- 数据状态- 故障及离线设备分析 --> <div class="equipFault"> <div class="tabsBtn"> <el-button :type="tabIndex == item.key ? 'primary' : ''" v-for="item in tabsArr" :key="item.key" @click="changeTab(item.key)" > {{ item.name }} </el-button> </div> <div class="content"> <!-- 电量及信号分析 --> <div id="lightEchart-nopx" v-loading="echartLoading" v-if="tabIndex == 1 && chartOption.xAxis.data.length > 0"></div> <!-- 暂无数据 --> <el-empty :image-size="80" v-if="tabIndex == 1 && chartOption.xAxis.data.length == 0" /> <!-- 历次故障分析 --> <el-table v-loading="tableLoadingError" :data="tableDataError" border height="200" v-if="tabIndex == 2"> <el-table-column prop="fromDatetime" label="离线开始时间"></el-table-column> <el-table-column prop="toDatetime" label="恢复日期"></el-table-column> <el-table-column prop="durationTime" label="持续时长"></el-table-column> <el-table-column prop="faultType" label="故障类型"> <template #default="scope"> <span>{{ scope.row.faultType == 'low_battery' ? '低电压' : scope.row.faultType == 'low_signal' ? '低信号' : scope.row.faultType == 'exception' ? '异常值' : scope.row.faultType == 'offline' ? '离线' : '--' }}</span> </template> </el-table-column> <el-table-column prop="status" label="状态"> <template #default="scope">工单处理完成</template> </el-table-column> </el-table> <!-- 运维记录分析 --> <el-table :data="tableDataYW" border height="200" v-if="tabIndex == 3"> <el-table-column prop="typeName1" label="养护类型"></el-table-column> <el-table-column prop="typeName2" label="计划养护时间"></el-table-column> <el-table-column prop="typeName3" label="实际养护时间"></el-table-column> <el-table-column prop="typeName4" label="实施人"></el-table-column> <el-table-column prop="typeName5" label="片区责任人"></el-table-column> <el-table-column prop="typeName6" label="行为分析"></el-table-column> </el-table> <!-- 问题建议 --> <div class="suggest-nopx" v-if="tabIndex == 4"> {{ problemSuggest }} </div> </div> </div> </template> <script setup> import { monitorPropertyEchart, stationFaultTime, stationFaultSuggest } from '@/api/dataAnalysis/syntherticData'; const props = defineProps({ stationRow: Object, }); const { proxy } = getCurrentInstance(); const myChart = shallowRef(null); const tabIndex = ref('1'); const tabsArr = ref([ { name: '电量及信号分析', key: '1' }, { name: '历次故障分析', key: '2' }, { name: '运维记录分析', key: '3' }, { name: '问题监测建议', key: '4' }, ]); const tableDataError = ref([]); const tableDataYW = ref([]); const problemSuggest = ref(''); const echartLoading = ref(true); const tableLoadingError = ref(true); const dateRange = ref([]); const chartOption = reactive({ grid: { left: '2%', right: '2%', bottom: '2%', top: '15%', containLabel: true, }, tooltip: { trigger: 'axis', axisPointer: { type: 'none', }, }, legend: { data: ['电量', '信号量'], top: 0, }, xAxis: { type: 'category', data: ['01:00'], axisTick: { show: false, }, }, yAxis: { axisLabel: { color: '#545E75', //字体颜色 fontSize: 16, //字体大小 }, axisTick: { show: false, }, axisLine: { show: false, }, splitLine: { show: true, // 显示网格线 lineStyle: { type: 'dashed', }, }, }, series: [ { name: '电量', type: 'line', smooth: true, data: [12, 13, 24], }, { name: '信号量', type: 'line', smooth: true, data: [11, 16, 28], }, ], }); // tab切换 function changeTab(key) { tabIndex.value = key; switch (key) { case '1': // 电量及信号分析 chartOption.series = []; chartOption.legend.data = []; echartLoading.value = true; let params = { startTime: dateRange.value[0], endTime: dateRange.value[1], stCode: props.stationRow.stCode, monitorCodeList: 'vt,signal', }; monitorPropertyEchart(params).then(res => { let datas = res.data; if (datas.propertyMonitorXList.length == 0) { // 无数据 chartOption.xAxis.data = []; return false; } else { // 有数据 chartOption.xAxis.data = datas.propertyMonitorXList; datas.propertyMonitorList.map(item => { chartOption.series.push({ name: item.monitorPropertyName + item.propertyUnit, type: 'line', smooth: true, data: item.ylist, }); chartOption.legend.data.push(item.monitorPropertyName + item.propertyUnit); }); setTimeout(() => { intChart(); }); echartLoading.value = false; } }); break; case '2': // 历次故障分析 tableLoadingError.value = true; stationFaultTime({ stCode: props.stationRow.stCode }).then(res => { tableDataError.value = res.data; tableLoadingError.value = false; }); break; case '3': // 运维记录分析 tableDataYW.value = [ { typeName1: '定期养护', typeName2: '2023年5月', typeName3: '--', typeName4: '--', typeName5: '朱方仁', typeName6: '未运维', }, { typeName1: '定期养护', typeName2: '2023年2月', typeName3: '2023年3月', typeName4: '陈迁', typeName5: '朱方仁', typeName6: '正常', }, ]; break; case '4': // 问题监测建议 stationFaultSuggest(props.stationRow.stCode).then(res => { problemSuggest.value = res.data; }); break; } } // echarts function intChart() { if (!!myChart.value) { myChart.value.dispose(); } myChart.value = proxy.echarts.init(document.getElementById('lightEchart-nopx')); // 绘制图表 myChart.value.setOption(chartOption); } //自适应 function resizeTheChart() { if (myChart.value) { myChart.value.resize(); } } // 初始化 onMounted(() => { console.log('故障及离线设备分析获取参数--', props.stationRow); // 获取右侧查询日期 dateRange.value = localStorage.getItem('searchDateRangeEquip').split(','); changeTab('1'); window.addEventListener('resize', resizeTheChart); }); </script> <style lang="scss"> .equipFault { width: 100%; .tabsBtn { text-align: center; } .content { margin-top: 15px; #lightEchart-nopx { width: 100%; height: 200px; } .suggest-nopx { line-height: 26px; padding: 10px; font-size: 14px; border: 1px solid #ebf5ff; height: 200px; overflow: auto; white-space: pre-wrap; } } } </style>