2025-12-08 16:28:34 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<el-dialog draggable width="1550px" class="cn-operate-dialog" v-model="dialogVisible" :title="title">
|
2025-12-09 20:04:55 +08:00
|
|
|
|
<div style="display: flex" v-loading="loading">
|
2025-12-08 16:28:34 +08:00
|
|
|
|
<div :style="height1" class="mr10 box" style="width: 600px">
|
|
|
|
|
|
<vxe-table
|
|
|
|
|
|
height="auto"
|
|
|
|
|
|
:data="TableData"
|
|
|
|
|
|
v-bind="defaultAttribute"
|
|
|
|
|
|
ref="tableRef"
|
|
|
|
|
|
:row-config="{ isCurrent: true, isHover: true }"
|
|
|
|
|
|
@current-change="currentChangeEvent"
|
|
|
|
|
|
>
|
|
|
|
|
|
<vxe-column type="seq" title="序号" width="60px"></vxe-column>
|
2025-12-19 11:58:26 +08:00
|
|
|
|
<!-- <vxe-column field="date" title="日期"></vxe-column> -->
|
|
|
|
|
|
<vxe-column field="bdName" title="所属电站(场站)"></vxe-column>
|
|
|
|
|
|
<vxe-column field="monitorName" title="监测点名称"></vxe-column>
|
|
|
|
|
|
<vxe-column field="timeSum" title="异常天数" width="80px">
|
2025-12-08 16:28:34 +08:00
|
|
|
|
<template v-slot="{ row }">
|
2025-12-19 11:58:26 +08:00
|
|
|
|
{{ row.dateList?.length }}
|
2025-12-08 16:28:34 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
</vxe-column>
|
2025-12-19 11:58:26 +08:00
|
|
|
|
<!-- <vxe-column field="errCount" title="异常次数" width="80px"></vxe-column> -->
|
2025-12-08 16:28:34 +08:00
|
|
|
|
</vxe-table>
|
2025-12-19 11:58:26 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div style="width: 920px" v-loading="loading1">
|
|
|
|
|
|
<el-form :inline="true" class="form">
|
|
|
|
|
|
<el-form-item label="统计日期">
|
|
|
|
|
|
<el-select
|
|
|
|
|
|
v-model="timeList"
|
|
|
|
|
|
multiple
|
|
|
|
|
|
collapse-tags
|
|
|
|
|
|
clearable
|
|
|
|
|
|
placeholder="请选择异常天数"
|
|
|
|
|
|
style="width: 200px"
|
|
|
|
|
|
>
|
|
|
|
|
|
<el-option v-for="item in dateList" :key="item" :label="item" :value="item" />
|
|
|
|
|
|
</el-select>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
<el-form-item class="form_but">
|
|
|
|
|
|
<span class="mr20">异常时间:<span class="title">{{ timeSum }}</span>分钟</span>
|
|
|
|
|
|
<span class="mr10">异常次数:<span class="title">{{ errCount }}</span>次</span>
|
|
|
|
|
|
|
|
|
|
|
|
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
</el-form>
|
|
|
|
|
|
<div :style="height">
|
|
|
|
|
|
<vxe-table
|
|
|
|
|
|
height="auto"
|
|
|
|
|
|
:data="TableData1.slice((pageNum - 1) * pageSize, pageNum * pageSize)"
|
|
|
|
|
|
v-bind="defaultAttribute"
|
|
|
|
|
|
>
|
|
|
|
|
|
<vxe-column type="seq" title="序号" width="80px">
|
|
|
|
|
|
<template #default="{ rowIndex }">
|
|
|
|
|
|
<span>{{ (pageNum - 1) * pageSize + rowIndex + 1 }}</span>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</vxe-column>
|
|
|
|
|
|
<vxe-column field="time" title="时间" width="150px"></vxe-column>
|
|
|
|
|
|
<vxe-column field="targetName" title="指标类型" min-width="80px"></vxe-column>
|
|
|
|
|
|
<vxe-column field="phaseType" title="相别" width="60px">
|
|
|
|
|
|
<template v-slot="{ row }">
|
|
|
|
|
|
{{ row.phaseType == 'T' ? '/' : row.phaseType }}
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</vxe-column>
|
|
|
|
|
|
<vxe-column field="rangeDesc" title="合理范围" min-width="90px"></vxe-column>
|
|
|
|
|
|
<vxe-column
|
|
|
|
|
|
field="max"
|
|
|
|
|
|
title="最大"
|
|
|
|
|
|
width="85px"
|
|
|
|
|
|
:formatter="formatter"
|
|
|
|
|
|
v-if="showColumn"
|
|
|
|
|
|
></vxe-column>
|
|
|
|
|
|
<vxe-column
|
|
|
|
|
|
field="min"
|
|
|
|
|
|
title="最小"
|
|
|
|
|
|
width="85px"
|
|
|
|
|
|
:formatter="formatter"
|
|
|
|
|
|
v-if="showColumn"
|
|
|
|
|
|
></vxe-column>
|
|
|
|
|
|
<vxe-column
|
|
|
|
|
|
field="avg"
|
|
|
|
|
|
title="平均"
|
|
|
|
|
|
width="85px"
|
|
|
|
|
|
:formatter="formatter"
|
|
|
|
|
|
v-if="showColumn"
|
|
|
|
|
|
></vxe-column>
|
|
|
|
|
|
<vxe-column
|
|
|
|
|
|
field="cp95"
|
|
|
|
|
|
title="CP95"
|
|
|
|
|
|
width="85px"
|
|
|
|
|
|
:formatter="formatter"
|
|
|
|
|
|
v-if="showColumn"
|
|
|
|
|
|
></vxe-column>
|
|
|
|
|
|
<vxe-column
|
|
|
|
|
|
field="featureAmplitude"
|
|
|
|
|
|
title="幅值"
|
|
|
|
|
|
width="85px"
|
|
|
|
|
|
:formatter="formatter"
|
|
|
|
|
|
v-if="!showColumn"
|
|
|
|
|
|
></vxe-column>
|
|
|
|
|
|
</vxe-table>
|
|
|
|
|
|
<div class="table-pagination">
|
|
|
|
|
|
<el-pagination
|
|
|
|
|
|
v-model:currentPage="pageNum"
|
|
|
|
|
|
v-model:page-size="pageSize"
|
|
|
|
|
|
:page-sizes="[10, 20, 50, 100, 200]"
|
|
|
|
|
|
background
|
|
|
|
|
|
layout="sizes,total, ->, prev, pager, next, jumper"
|
|
|
|
|
|
:total="TableData1.length"
|
|
|
|
|
|
></el-pagination>
|
|
|
|
|
|
</div>
|
2025-12-08 16:28:34 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
|
|
|
import { ref, inject } from 'vue'
|
|
|
|
|
|
import { reactive } from 'vue'
|
|
|
|
|
|
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
|
|
|
|
|
import { ElMessage } from 'element-plus'
|
|
|
|
|
|
import { monitorAbnormalTable, monitorAbnormalTableDetail } from '@/api/device-boot/dataVerify'
|
|
|
|
|
|
import { mainHeight } from '@/utils/layout'
|
|
|
|
|
|
const dialogVisible = ref(false)
|
|
|
|
|
|
const height1 = mainHeight(-110, 2)
|
2025-12-19 11:58:26 +08:00
|
|
|
|
const height = mainHeight(90, 2)
|
2025-12-08 16:28:34 +08:00
|
|
|
|
const tableRef = ref()
|
|
|
|
|
|
const title = ref('')
|
2025-12-09 20:04:55 +08:00
|
|
|
|
const loading = ref(false)
|
2025-12-08 16:28:34 +08:00
|
|
|
|
const loading1 = ref(false)
|
|
|
|
|
|
const TableData = ref([])
|
|
|
|
|
|
const TableData1 = ref([])
|
2025-12-19 11:58:26 +08:00
|
|
|
|
const dateList: any = ref([])
|
2025-12-08 16:28:34 +08:00
|
|
|
|
const pageNum = ref(1)
|
|
|
|
|
|
const pageSize = ref(20)
|
|
|
|
|
|
const numKey = ref(0)
|
|
|
|
|
|
const targetKey = ref('')
|
2025-12-19 11:58:26 +08:00
|
|
|
|
const errCount = ref('')
|
|
|
|
|
|
const timeSum = ref('')
|
|
|
|
|
|
const timeList = ref([])
|
2025-12-08 16:28:34 +08:00
|
|
|
|
const showColumn = ref(true)
|
|
|
|
|
|
const open = (data: anyObj, time: string[], num: number) => {
|
|
|
|
|
|
// title.value = (num == 0 ? data.targetName : data.monitorName) + '_异常监测点详情'
|
2025-12-09 20:04:55 +08:00
|
|
|
|
loading.value = true
|
2025-12-08 16:28:34 +08:00
|
|
|
|
title.value = '异常监测点详情'
|
|
|
|
|
|
TableData.value = []
|
|
|
|
|
|
numKey.value = num
|
|
|
|
|
|
targetKey.value = data.key
|
|
|
|
|
|
monitorAbnormalTable({
|
|
|
|
|
|
monitorIds: num == 0 ? data.ids : [data.monitorId],
|
|
|
|
|
|
targetKey: num == 0 ? data.key : '',
|
|
|
|
|
|
searchBeginTime: time[0],
|
|
|
|
|
|
searchEndTime: time[1]
|
|
|
|
|
|
})
|
2025-12-11 15:03:11 +08:00
|
|
|
|
.then(async res => {
|
|
|
|
|
|
TableData.value = res.data
|
|
|
|
|
|
await tableRef.value.setCurrentRow(TableData.value[0])
|
|
|
|
|
|
await currentChangeEvent()
|
|
|
|
|
|
loading.value = false
|
|
|
|
|
|
})
|
|
|
|
|
|
.catch(() => {
|
|
|
|
|
|
loading.value = false
|
|
|
|
|
|
})
|
2025-12-08 16:28:34 +08:00
|
|
|
|
dialogVisible.value = true
|
|
|
|
|
|
}
|
|
|
|
|
|
const currentChangeEvent = () => {
|
|
|
|
|
|
let data = tableRef.value.getCurrentRecord()
|
2025-12-19 11:58:26 +08:00
|
|
|
|
|
|
|
|
|
|
dateList.value = data.dateList
|
|
|
|
|
|
console.log('🚀 ~ currentChangeEvent ~ dateList.value:', dateList.value)
|
|
|
|
|
|
timeList.value = [data.dateList[0]]
|
|
|
|
|
|
init()
|
|
|
|
|
|
}
|
|
|
|
|
|
const init = () => {
|
|
|
|
|
|
if(timeList.value.length == 0) return ElMessage.warning('请选择异常天数!')
|
|
|
|
|
|
loading1.value = true
|
2025-12-08 16:28:34 +08:00
|
|
|
|
TableData1.value = []
|
2025-12-19 11:58:26 +08:00
|
|
|
|
let data = tableRef.value.getCurrentRecord()
|
2025-12-08 16:28:34 +08:00
|
|
|
|
monitorAbnormalTableDetail({
|
|
|
|
|
|
monitorIds: [data.monitorId],
|
2025-12-19 11:58:26 +08:00
|
|
|
|
time: timeList.value,
|
2025-12-08 16:28:34 +08:00
|
|
|
|
searchBeginTime: data.date,
|
|
|
|
|
|
targetKey: numKey.value == 0 ? targetKey.value : ''
|
|
|
|
|
|
})
|
|
|
|
|
|
.then(res => {
|
2025-12-19 11:58:26 +08:00
|
|
|
|
errCount.value = res.data.errCount
|
|
|
|
|
|
timeSum.value = res.data.timeSum
|
|
|
|
|
|
TableData1.value = res.data.time
|
2025-12-08 16:28:34 +08:00
|
|
|
|
showColumn.value = res.data[0]?.featureAmplitude == null ? true : false
|
|
|
|
|
|
loading1.value = false
|
|
|
|
|
|
pageNum.value = 1
|
|
|
|
|
|
})
|
|
|
|
|
|
.catch(() => {
|
|
|
|
|
|
loading1.value = false
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
const formatter = (row: any) => {
|
|
|
|
|
|
return row.cellValue == null ? '/' : (row.cellValue - 0).toFixed(2)
|
|
|
|
|
|
}
|
|
|
|
|
|
defineExpose({ open })
|
|
|
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
.table-pagination {
|
|
|
|
|
|
height: 58px;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
max-width: 100%;
|
|
|
|
|
|
background-color: var(--ba-bg-color-overlay);
|
|
|
|
|
|
padding: 13px 15px;
|
|
|
|
|
|
border-left: 1px solid #e4e7e9;
|
|
|
|
|
|
border-right: 1px solid #e4e7e9;
|
|
|
|
|
|
border-bottom: 1px solid #e4e7e9;
|
|
|
|
|
|
}
|
|
|
|
|
|
:deep(.box) {
|
2025-12-19 11:58:26 +08:00
|
|
|
|
.row--current {
|
|
|
|
|
|
// background-color: var(--el-color-primary-light-8) !important;
|
2025-12-08 16:28:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-12-19 11:58:26 +08:00
|
|
|
|
.form {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
.form_but {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
right: -22px;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.title{
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
|
}
|
2025-12-08 16:28:34 +08:00
|
|
|
|
</style>
|