Files
admin-sjzx/src/views/pqs/runManage/cleaning/components/anomalyDetails.vue
2025-12-19 11:58:26 +08:00

232 lines
9.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-dialog draggable width="1550px" class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<div style="display: flex" v-loading="loading">
<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>
<!-- <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">
<template v-slot="{ row }">
{{ row.dateList?.length }}
</template>
</vxe-column>
<!-- <vxe-column field="errCount" title="异常次数" width="80px"></vxe-column> -->
</vxe-table>
</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>
</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)
const height = mainHeight(90, 2)
const tableRef = ref()
const title = ref('')
const loading = ref(false)
const loading1 = ref(false)
const TableData = ref([])
const TableData1 = ref([])
const dateList: any = ref([])
const pageNum = ref(1)
const pageSize = ref(20)
const numKey = ref(0)
const targetKey = ref('')
const errCount = ref('')
const timeSum = ref('')
const timeList = ref([])
const showColumn = ref(true)
const open = (data: anyObj, time: string[], num: number) => {
// title.value = (num == 0 ? data.targetName : data.monitorName) + '_异常监测点详情'
loading.value = true
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]
})
.then(async res => {
TableData.value = res.data
await tableRef.value.setCurrentRow(TableData.value[0])
await currentChangeEvent()
loading.value = false
})
.catch(() => {
loading.value = false
})
dialogVisible.value = true
}
const currentChangeEvent = () => {
let data = tableRef.value.getCurrentRecord()
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
TableData1.value = []
let data = tableRef.value.getCurrentRecord()
monitorAbnormalTableDetail({
monitorIds: [data.monitorId],
time: timeList.value,
searchBeginTime: data.date,
targetKey: numKey.value == 0 ? targetKey.value : ''
})
.then(res => {
errCount.value = res.data.errCount
timeSum.value = res.data.timeSum
TableData1.value = res.data.time
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) {
.row--current {
// background-color: var(--el-color-primary-light-8) !important;
}
}
.form {
position: relative;
.form_but {
position: absolute;
right: -22px;
}
}
.title{
font-weight: 600;
font-size: 16px;
}
</style>