修改冀北现场反馈问题
This commit is contained in:
@@ -0,0 +1,245 @@
|
||||
<template>
|
||||
<el-dialog draggable width="1250px" class="cn-operate-dialog" v-model="dialogVisible" :title="title">
|
||||
<div style="display: flex" v-loading="loading">
|
||||
<div :style="height1" class="mr10 box" style="width: 300px">
|
||||
<vxe-table
|
||||
height="auto"
|
||||
:data="timeList"
|
||||
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="name" 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 targetKey = ref('')
|
||||
const errCount = ref('')
|
||||
const timeSum = ref('')
|
||||
const timeList = ref([])
|
||||
const showColumn = ref(true)
|
||||
const open = (data: anyObj, time: string[]) => {
|
||||
// title.value = (num == 0 ? data.targetName : data.monitorName) + '_异常监测点详情'
|
||||
loading.value = true
|
||||
title.value = '详情'
|
||||
TableData.value = []
|
||||
TableData1.value = []
|
||||
timeList.value = []
|
||||
targetKey.value = data.key
|
||||
monitorAbnormalTable({
|
||||
monitorIds:[data.lineId],
|
||||
targetKey: '',
|
||||
searchBeginTime: time[0],
|
||||
searchEndTime: time[1]
|
||||
})
|
||||
.then(async res => {
|
||||
TableData.value = res.data
|
||||
timeList.value = TableData.value[0]?.dateList.map((item: any) => {
|
||||
return {
|
||||
name: item
|
||||
}
|
||||
})
|
||||
await tableRef.value.setCurrentRow(timeList.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
|
||||
//[data.dateList[0]]
|
||||
init()
|
||||
}
|
||||
const init = () => {
|
||||
loading1.value = true
|
||||
TableData1.value = []
|
||||
let data = tableRef.value.getCurrentRecord()
|
||||
monitorAbnormalTableDetail({
|
||||
monitorIds: [TableData.value[0]?.monitorId],
|
||||
time: [data.name],
|
||||
searchBeginTime: TableData.value[0].date,
|
||||
targetKey: ''
|
||||
})
|
||||
.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 {
|
||||
// display: flex;
|
||||
// justify-content: end;
|
||||
// position: relative;
|
||||
// .form_but {
|
||||
|
||||
// right: -22px;
|
||||
// }
|
||||
}
|
||||
.title {
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
}
|
||||
</style>
|
||||
@@ -6,16 +6,33 @@
|
||||
<el-form-item label="区域">
|
||||
<Area ref="areaRef" v-model="tableStore.table.params.deptId" @changeValue="changeArea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="筛选数据">
|
||||
<el-input v-model="tableStore.table.params.searchValue" clearable maxlength="32" show-word-limit placeholder="请输入监测点名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="筛选数据">
|
||||
<el-input
|
||||
v-model="tableStore.table.params.searchValue"
|
||||
clearable
|
||||
maxlength="32"
|
||||
show-word-limit
|
||||
placeholder="请输入监测点名称"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="监测点性质">
|
||||
<el-select v-model="tableStore.table.params.lineType" clearable placeholder="请选择监测点性质">
|
||||
<el-option label="电网侧" value="0" />
|
||||
<el-option label="非电网侧" value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="超标指标">
|
||||
<el-form-item label="数据类型">
|
||||
<el-select
|
||||
v-model="tableStore.table.params.dataType"
|
||||
@change="changeDataType"
|
||||
placeholder="请选择监测点性质"
|
||||
>
|
||||
<el-option label="超标数据" value="1" />
|
||||
<el-option label="异常数据" value="2" />
|
||||
<el-option label="无数据" value="0" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="超标指标" v-show="tableStore.table.params.dataType == 1">
|
||||
<el-select
|
||||
v-model="tableStore.table.params.targetList"
|
||||
clearable
|
||||
@@ -27,7 +44,7 @@
|
||||
<el-option v-for="item in exceeded" :key="item.id" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据类型">
|
||||
<!-- <el-form-item label="数据类型">
|
||||
<el-switch
|
||||
v-model="tableStore.table.params.dataType"
|
||||
inline-prompt
|
||||
@@ -36,7 +53,7 @@
|
||||
active-text="超标数据"
|
||||
inactive-text="无数据"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
<!-- <el-form-item label="预警阈值">
|
||||
<el-input-number
|
||||
v-model="tableStore.table.params.alertThreshold"
|
||||
@@ -77,6 +94,8 @@
|
||||
<alarmList ref="alarmListRef" @onSubmit="tableStore.index()" />
|
||||
<!-- 详情 -->
|
||||
<detail ref="detailRef" />
|
||||
<!-- 异常数据详情 -->
|
||||
<abnormal ref="abnormalRef" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, provide, nextTick } from 'vue'
|
||||
@@ -88,6 +107,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { useDictData } from '@/stores/dictData'
|
||||
import alarmList from './form/alarmList.vue'
|
||||
import detail from './form/detail.vue'
|
||||
import abnormal from './form/abnormal.vue'
|
||||
const VITE_FLAG = import.meta.env.VITE_NAME == 'jibei'
|
||||
const dictData = useDictData()
|
||||
import { useRouter } from 'vue-router'
|
||||
@@ -101,8 +121,10 @@ const tableRef = ref()
|
||||
const industry = dictData.getBasicData('Business_Type')
|
||||
const TableHeaderRef = ref()
|
||||
const alarmListRef = ref()
|
||||
const abnormalRef = ref()
|
||||
const flagTime = ref(false)
|
||||
const detailRef = ref()
|
||||
const time: any = ref([])
|
||||
const list: any = ref({
|
||||
deptId: '',
|
||||
searchBeginTime: '',
|
||||
@@ -119,7 +141,7 @@ const tableStore = new TableStore({
|
||||
filename: '在线监测',
|
||||
// isWebPaging:true,
|
||||
column: [
|
||||
{ type: 'checkbox', width: 40 },
|
||||
{ type: 'checkbox', width: 40 },
|
||||
{
|
||||
title: '序号',
|
||||
|
||||
@@ -180,11 +202,15 @@ const tableStore = new TableStore({
|
||||
return row.targetType == 0
|
||||
},
|
||||
click: row => {
|
||||
detailRef.value.open({
|
||||
text: '详情',
|
||||
row: row,
|
||||
list: list.value
|
||||
})
|
||||
if (row.dataType == 2) {
|
||||
abnormalRef.value.open(row, time.value)
|
||||
} else {
|
||||
detailRef.value.open({
|
||||
text: '详情',
|
||||
row: row,
|
||||
list: list.value
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -289,6 +315,7 @@ const tableStore = new TableStore({
|
||||
}
|
||||
],
|
||||
beforeSearchFun: () => {
|
||||
time.value = [tableStore.table.params.startTime, tableStore.table.params.endTime]
|
||||
tableStore.table.params.currentPage = tableStore.table.params.pageNum
|
||||
list.value.deptId = tableStore.table.params.deptId
|
||||
|
||||
@@ -300,8 +327,10 @@ const tableStore = new TableStore({
|
||||
list.value.lineType = tableStore.table.params.lineType
|
||||
list.value.alarmThreshold = tableStore.table.params.alarmThreshold
|
||||
flag.value = level.value
|
||||
console.log('flag',flag.value)
|
||||
flagTime.value = tableStore.table.params.dataType == 0 ? true : false
|
||||
if (tableStore.table.params.dataType != 1) {
|
||||
delete tableStore.table.params.targetList
|
||||
}
|
||||
},
|
||||
loadCallback: () => {
|
||||
// tableStore.table.data = [
|
||||
@@ -335,7 +364,7 @@ tableStore.table.params.dataType = '1'
|
||||
tableStore.table.params.deptId = dictData.state.area[0].id
|
||||
provide('tableStore', tableStore)
|
||||
onMounted(() => {
|
||||
TableHeaderRef.value.setDatePicker([{label: '月', value: 3}])
|
||||
TableHeaderRef.value.setDatePicker([{ label: '月', value: 3 }])
|
||||
|
||||
tableStore.index()
|
||||
setTimeout(() => {
|
||||
@@ -343,6 +372,13 @@ onMounted(() => {
|
||||
}, 10)
|
||||
})
|
||||
|
||||
const changeDataType = e => {
|
||||
if (e == 1) {
|
||||
tableStore.table.params.targetList = exceeded.filter(item => item.code == 'Total_Indicator')[0].id
|
||||
? [exceeded.filter(item => item.code == 'Total_Indicator')[0].id]
|
||||
: []
|
||||
}
|
||||
}
|
||||
const changeAlert = e => {
|
||||
if (e == null) {
|
||||
tableStore.table.params.alertThreshold = 5
|
||||
@@ -363,19 +399,33 @@ const changeAlarm = e => {
|
||||
}
|
||||
}
|
||||
}
|
||||
let flagList = exceeded.filter(item => item.name == '谐波电压' || item.name == '谐波电流').map(item => item.id)
|
||||
// 发起预警单
|
||||
const launch = (title: string) => {
|
||||
console.log('🚀 ~ flagList:', flagList)
|
||||
|
||||
if (tableStore.table.selection.length == 0) {
|
||||
ElMessage.warning('请选择一条数据')
|
||||
return
|
||||
}
|
||||
let flag = false
|
||||
tableStore.table.selection.forEach(item => {
|
||||
if (!flagList.includes(item.targetType)) {
|
||||
flag = true
|
||||
}
|
||||
})
|
||||
if (flag) {
|
||||
ElMessage.warning('目前只支持谐波电压/谐波电流下发预告警单')
|
||||
return
|
||||
}
|
||||
|
||||
console.log('🚀 ~ launch ~ list.value:', tableStore.table.selection)
|
||||
|
||||
alarmListRef.value.open({
|
||||
text: title,
|
||||
form: list.value,
|
||||
row: tableStore.table.selection
|
||||
})
|
||||
console.log('🚀 ~ launch ~ list.value:', list.value)
|
||||
}
|
||||
const changeArea = e => {
|
||||
level.value = e.data.level
|
||||
|
||||
Reference in New Issue
Block a user