修改冀北问题

This commit is contained in:
guanj
2025-12-09 20:04:55 +08:00
parent 8c41a8fc77
commit 0fe2d2b911
49 changed files with 6357 additions and 5917 deletions

View File

@@ -30,3 +30,18 @@ export const getSubstationSelect = () => {
method: 'get' method: 'get'
}) })
} }
// 查询变电站详情
export const getSubstationSelectLine = (id: string) => {
return request({
url: '/device-boot/line/getSubstationData',
method: 'post',
data: [id]
})
}
// 查询监测点
export const getLineOverLimitData = (id: string) => {
return request({
url: '/device-boot/line/getLineOverLimitData?id=' + id,
method: 'post'
})
}

View File

@@ -31,7 +31,7 @@
<div class="divBox mt10"> <div class="divBox mt10">
<span class="iconfont icon-igw-f-warning-data" style="color: #ff6600"></span> <span class="iconfont icon-igw-f-warning-data" style="color: #ff6600"></span>
<span class="divBox_title">低于90%监测点数</span> <span class="divBox_title">低于90%监测点数</span>
<span class="divBox_num" style="color: #ff6600"> <span class="divBox_num" style="color: #57bc6e">
{{ monitoringPoints.abnormalNum }} {{ monitoringPoints.abnormalNum }}
</span> </span>
</div> </div>
@@ -90,7 +90,7 @@
{{ o.citTotalNum }} {{ o.citTotalNum }}
</span> </span>
<!-- 低于90%监测点数 --> <!-- 低于90%监测点数 -->
<span style="flex: 1; color: #ff9100" class="text"> <span style="flex: 1; color: #388e3c" class="text">
{{ o.citBelowNum }} {{ o.citBelowNum }}
</span> </span>
<span <span
@@ -179,10 +179,17 @@ const tableStore: any = new TableStore({
monitoringPoints.value.runNum = tableStore.table.data.totalNum monitoringPoints.value.runNum = tableStore.table.data.totalNum
monitoringPoints.value.abnormalNum = tableStore.table.data.belowNum monitoringPoints.value.abnormalNum = tableStore.table.data.belowNum
monitoringPoints.value.totalOnlineRate = tableStore.table.data.totalOnlineRate - 0 monitoringPoints.value.totalOnlineRate = tableStore.table.data.totalOnlineRate - 0
abnormal.value = tableStore.table.data.citDetailList abnormal.value = tableStore.table.data.citDetailList.filter((k: any) => {
if (tableStore.table.params.statisticalType.name == '终端厂家') {
return k.citTotalNum != 0
} else {
return k.citName != '上送国网' && k.citName != '非上送国网'
}
})
} }
}) })
tableStore.table.params.deptIndex = dictData.state.area[0].id tableStore.table.params.deptIndex = dictData.state.area[0].id
tableStore.table.params.lineRunFlag = 0
const echart = () => { const echart = () => {
percentage.value = { percentage.value = {
color: ['#FF9100'], color: ['#FF9100'],

View File

@@ -31,7 +31,7 @@
<div class="divBox mt10"> <div class="divBox mt10">
<span class="iconfont icon-igw-f-warning-data" style="color: #ff6600"></span> <span class="iconfont icon-igw-f-warning-data" style="color: #ff6600"></span>
<span class="divBox_title">低于90%终端数</span> <span class="divBox_title">低于90%终端数</span>
<span class="divBox_num" style="color: #ff6600"> <span class="divBox_num" style="color: #57bc6e">
{{ monitoringPoints.abnormalNum }} {{ monitoringPoints.abnormalNum }}
</span> </span>
</div> </div>
@@ -88,7 +88,7 @@
{{ o.citTotalNum }} {{ o.citTotalNum }}
</span> </span>
<!-- 低于90%终端数 --> <!-- 低于90%终端数 -->
<span style="flex: 1; color: #ff9100" class="text"> <span style="flex: 1; color: #388e3c" class="text">
{{ o.citBelowNum }} {{ o.citBelowNum }}
</span> </span>
<span <span
@@ -177,12 +177,18 @@ const tableStore: any = new TableStore({
monitoringPoints.value.runNum = tableStore.table.data.totalNum monitoringPoints.value.runNum = tableStore.table.data.totalNum
monitoringPoints.value.abnormalNum = tableStore.table.data.belowNum monitoringPoints.value.abnormalNum = tableStore.table.data.belowNum
monitoringPoints.value.totalOnlineRate = tableStore.table.data.totalOnlineRate - 0 monitoringPoints.value.totalOnlineRate = tableStore.table.data.totalOnlineRate - 0
abnormal.value = tableStore.table.data.citDetailList.filter( abnormal.value = tableStore.table.data.citDetailList.filter((k: any) => {
(k: any) => k.citName != '上送国网' && k.citName != '非上送国网' if (tableStore.table.params.statisticalType.name == '终端厂家') {
) return k.citTotalNum != 0
} else {
return k.citName != '上送国网' && k.citName != '非上送国网'
}
})
} }
}) })
tableStore.table.params.deptIndex = dictData.state.area[0].id tableStore.table.params.deptIndex = dictData.state.area[0].id
tableStore.table.params.lineRunFlag = 0
const echart = () => { const echart = () => {
percentage.value = { percentage.value = {
color: ['#FF9100'], color: ['#FF9100'],

View File

@@ -108,7 +108,7 @@
</span> </span>
<!-- --> <!-- -->
<sp <sp
style="flex: 1; color: #ff9100" style="flex: 1; color: #388e3c"
class="text" class="text"
:class="` ${o.integrity < 90 ? 'text-red' : ''}`" :class="` ${o.integrity < 90 ? 'text-red' : ''}`"
> >
@@ -123,7 +123,7 @@
</span> </span>
<span <span
style="flex: 1; color: #388e3c" style="flex: 1; color: #388e3c"
:class="` ${o.qualified < 90 ? 'text-red' : ''}`" :class="` ${o.qualified > 10 ? 'text-red' : ''}`"
class="text" class="text"
> >
{{ o.qualified }} {{ o.qualified }}
@@ -229,11 +229,17 @@ const tableStore: any = new TableStore({
statisticsList.value.checkNum = totalData.value.filter(item => item.runFlag === '调试').length statisticsList.value.checkNum = totalData.value.filter(item => item.runFlag === '调试').length
statisticsList.value.stopRunNum = totalData.value.filter(item => item.runFlag === '停运').length statisticsList.value.stopRunNum = totalData.value.filter(item => item.runFlag === '停运').length
abnormal.value = tableStore.table.data.filter((k: any) => k.name != '上送国网' && k.name != '非上送国网') abnormal.value = tableStore.table.data.filter((k: any) => {
if (tableStore.table.params.statisticalType.name == '终端厂家') {
return k.count != 0
} else {
return k.name != '上送国网' && k.name != '非上送国网'
}
})
} }
}) })
tableStore.table.params.deptIndex = dictData.state.area[0].id tableStore.table.params.deptIndex = dictData.state.area[0].id
tableStore.table.params.lineRunFlag = 0
provide('tableStore', tableStore) provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {

View File

@@ -1,4 +1,4 @@
export let color = [ export const color = [
'#07CCCA', '#07CCCA',
'#00BFF5', '#00BFF5',
'#FFBF00', '#FFBF00',
@@ -8,7 +8,10 @@ export let color = [
'#FF9100', '#FF9100',
'#5B6E96', '#5B6E96',
'#66FFCC', '#66FFCC',
'#B3B' '#B266FF',
'#FF6680',
'#40A0FF',
'#33CC99'
] ]
export const gradeColor3 = ['#339966', '#FFCC33', '#A52a2a'] export const gradeColor3 = ['#339966', '#FFCC33', '#A52a2a']
export const gradeColor5 = ['#00CC00', '#99CC99', '#FF9900', '#996600', '#A52a2a'] export const gradeColor5 = ['#00CC00', '#99CC99', '#FF9900', '#996600', '#A52a2a']

View File

@@ -0,0 +1,205 @@
<template>
<el-dialog draggable v-model="dialogVisible" :title="title" width="1200px">
<el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="监测点详情" name="tab1">
<el-descriptions :column="3" border label-width="150px">
<el-descriptions-item label="项目工程">
{{ details.areaName }}
</el-descriptions-item>
<el-descriptions-item label="项目单位">
{{ details.gdName }}
</el-descriptions-item>
<el-descriptions-item label="所属变电站">
{{ details.bdName }}
</el-descriptions-item>
<el-descriptions-item label="电压等级">
{{ details.scale }}
</el-descriptions-item>
<el-descriptions-item label="终端厂家">
{{ details.manufacturer }}
</el-descriptions-item>
<el-descriptions-item label="终端名称">
{{ details.devName }}
</el-descriptions-item>
<el-descriptions-item label="网络参数">
{{ details.ip }}
</el-descriptions-item>
<el-descriptions-item label="监测点名称">
{{ details.lineName }}
</el-descriptions-item>
<el-descriptions-item label="监测点序号">
{{ details.id }}
</el-descriptions-item>
<el-descriptions-item label="通讯状态">
{{ details.comFlag }}
</el-descriptions-item>
<el-descriptions-item label="干扰源类型">
{{ details.loadType }}
</el-descriptions-item>
<el-descriptions-item label="监测点对象名称">
{{ details.objName }}
</el-descriptions-item>
<el-descriptions-item label="接线方式">
{{ details.ptType }}
</el-descriptions-item>
<el-descriptions-item label="PT变比">
{{ details.pt }}
</el-descriptions-item>
<el-descriptions-item label="CT变比">
{{ details.ct }}
</el-descriptions-item>
<el-descriptions-item label="基准容量(MVA)">
{{ details.standardCapacity }}
</el-descriptions-item>
<el-descriptions-item label="最小短路容量(MVA)">
{{ details.shortCapacity }}
</el-descriptions-item>
<el-descriptions-item label="供电设备容量(MVA)">
{{ details.devCapacity }}
</el-descriptions-item>
<el-descriptions-item label="用户协议容量(MVA)">
{{ details.dealCapacity }}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="监测点限值" name="tab2">
<el-descriptions :column="3" border label-width="250px">
<el-descriptions-item label="电压偏差上限值(%)">
{{ limitValue.voltageDev }}
</el-descriptions-item>
<el-descriptions-item label="电压偏差下限值(%)">
{{ limitValue.uvoltageDev }}
</el-descriptions-item>
<el-descriptions-item label="频率偏差限值(Hz)">
{{ limitValue.freqDev }}
</el-descriptions-item>
<el-descriptions-item label="三相电压不平衡度限值(%)">
{{ limitValue.ubalance }}
</el-descriptions-item>
<el-descriptions-item label="负序电流限值(A)">
{{ limitValue.ineg }}
</el-descriptions-item>
<el-descriptions-item label="长时闪变限值(%)">
{{ limitValue.flicker }}
</el-descriptions-item>
<el-descriptions-item label="电压总畸变率限值(%)">
{{ limitValue.uaberrance }}
</el-descriptions-item>
<el-descriptions-item label="奇次谐波电压含有率限值(%)">
{{ limitValue.oddHarm }}
</el-descriptions-item>
<el-descriptions-item label="偶次谐波电压含有率限值(%)">
{{ limitValue.evenHarm }}
</el-descriptions-item>
<el-descriptions-item label="3次谐波电流幅值限值(A)">
{{ limitValue.iharm3 }}
</el-descriptions-item>
<el-descriptions-item label="4次谐波电流幅值限值(A)">
{{ limitValue.iharm4 }}
</el-descriptions-item>
<el-descriptions-item label="5次谐波电流幅值限值(A)">
{{ limitValue.iharm5 }}
</el-descriptions-item>
<el-descriptions-item label="6次谐波电流幅值限值(A)">
{{ limitValue.iharm6 }}
</el-descriptions-item>
<el-descriptions-item label="7次谐波电流幅值限值(A)">
{{ limitValue.iharm7 }}
</el-descriptions-item>
<el-descriptions-item label="8次谐波电流幅值限值(A)">
{{ limitValue.iharm8 }}
</el-descriptions-item>
<el-descriptions-item label="9次谐波电流幅值限值(A)">
{{ limitValue.iharm9 }}
</el-descriptions-item>
<el-descriptions-item label="10次谐波电流幅值限值(A)">
{{ limitValue.iharm10 }}
</el-descriptions-item>
<el-descriptions-item label="11次谐波电流幅值限值(A)">
{{ limitValue.iharm11 }}
</el-descriptions-item>
<el-descriptions-item label="12次谐波电流幅值限值(A)">
{{ limitValue.iharm12 }}
</el-descriptions-item>
<el-descriptions-item label="13次谐波电流幅值限值(A)">
{{ limitValue.iharm13 }}
</el-descriptions-item>
<el-descriptions-item label="14次谐波电流幅值限值(A)">
{{ limitValue.iharm14 }}
</el-descriptions-item>
<el-descriptions-item label="15次谐波电流幅值限值(A)">
{{ limitValue.iharm15 }}
</el-descriptions-item>
<el-descriptions-item label="16次谐波电流幅值限值(A)">
{{ limitValue.iharm16 }}
</el-descriptions-item>
<el-descriptions-item label="17次谐波电流幅值限值(A)">
{{ limitValue.iharm17 }}
</el-descriptions-item>
<el-descriptions-item label="18次谐波电流幅值限值(A)">
{{ limitValue.iharm18 }}
</el-descriptions-item>
<el-descriptions-item label="19次谐波电流幅值限值(A)">
{{ limitValue.iharm19 }}
</el-descriptions-item>
<el-descriptions-item label="20次谐波电流幅值限值(A)">
{{ limitValue.iharm20 }}
</el-descriptions-item>
<el-descriptions-item label="21次谐波电流幅值限值(A)">
{{ limitValue.iharm21 }}
</el-descriptions-item>
<el-descriptions-item label="22次谐波电流幅值限值(A)">
{{ limitValue.iharm22 }}
</el-descriptions-item>
<el-descriptions-item label="23次谐波电流幅值限值(A)">
{{ limitValue.iharm23 }}
</el-descriptions-item>
<el-descriptions-item label="24次谐波电流幅值限值(A)">
{{ limitValue.iharm24 }}
</el-descriptions-item>
<el-descriptions-item label="25次谐波电流幅值限值(A)">
{{ limitValue.iharm25 }}
</el-descriptions-item>
<el-descriptions-item label="0.5-1.5次间谐波电压含有率限值(%)">
{{ limitValue.inUharm }}
</el-descriptions-item>
<el-descriptions-item label="2.5-15.5次谐波电压含有率限值(%)">
{{ limitValue.inUharm16 }}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
</el-tabs>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref, inject } from 'vue'
import { getLineOverLimitData, getLineDetailData } from '@/api/device-boot/line'
const dialogVisible = ref(false)
const title = ref('')
const activeName = ref('tab1')
const details: any = ref([])
const limitValue: any = ref([])
const open = (data: any) => {
details.value = []
limitValue.value = []
activeName.value = 'tab1'
title.value = data.name.replace(/[^]*/g, '') + '_详情'
getLineDetailData(data.id).then(res => {
details.value = res.data
})
getLineOverLimitData(data.id).then(res => {
limitValue.value = res.data
})
dialogVisible.value = true
}
const handleClick = (tab: any, event: Event) => {}
defineExpose({ open })
</script>
<style lang="scss" scoped>
:deep(.el-upload-list__item) {
width: 400px;
}
</style>

View File

@@ -0,0 +1,34 @@
<template>
<el-dialog draggable v-model="dialogVisible" :title="title" width="500px">
<el-descriptions class="margin-top" :column="1" border label-width="150px">
<el-descriptions-item label="变电站名称">{{ list[0]?.srbName }}</el-descriptions-item>
<el-descriptions-item label="电压等级">{{ list[0]?.scale }}</el-descriptions-item>
<el-descriptions-item label="经度">{{ list[0]?.coordY }}</el-descriptions-item>
<el-descriptions-item label="纬度">{{ list[0]?.coordX }}</el-descriptions-item>
</el-descriptions>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref, inject } from 'vue'
import { getSubstationSelectLine } from '@/api/device-boot/line'
const dialogVisible = ref(false)
const title = ref('')
const list: any = ref([])
const open = (data: any) => {
list.value = []
title.value = data.name.replace(/[^]*/g, '') + '_详情'
getSubstationSelectLine(data.id).then(res => {
list.value = res.data
})
dialogVisible.value = true
}
defineExpose({ open })
</script>
<style lang="scss" scoped>
:deep(.el-upload-list__item) {
width: 400px;
}
</style>

View File

@@ -1,32 +1,84 @@
<template> <template>
<div :style="{ width: menuCollapse ? '40px' : props.width }" style="transition: all 0.3s; overflow: hidden"> <div :style="{ width: menuCollapse ? '40px' : props.width }" style="transition: all 0.3s; overflow: hidden">
<Icon v-show="menuCollapse" @click="onMenuCollapse" :name="menuCollapse ? 'el-icon-Expand' : 'el-icon-Fold'" <Icon
:class="menuCollapse ? 'unfold' : ''" size="18" class="fold ml10 mt20 menu-collapse" v-show="menuCollapse"
style="cursor: pointer" /> @click="onMenuCollapse"
:name="menuCollapse ? 'el-icon-Expand' : 'el-icon-Fold'"
:class="menuCollapse ? 'unfold' : ''"
size="18"
class="fold ml10 mt20 menu-collapse"
style="cursor: pointer"
/>
<div class="cn-tree" :style="{ opacity: menuCollapse ? 0 : 1 }"> <div class="cn-tree" :style="{ opacity: menuCollapse ? 0 : 1 }">
<div style="display: flex; align-items: center" class="mb10"> <div style="display: flex; align-items: center" class="mb10">
<el-input v-model="filterText" placeholder="请输入内容" clearable maxlength="10" show-word-limit @input="change"> <el-input
v-model="filterText"
placeholder="请输入内容"
clearable
maxlength="10"
show-word-limit
@input="change"
>
<template #prefix> <template #prefix>
<Icon name="el-icon-Search" style="font-size: 16px" /> <Icon name="el-icon-Search" style="font-size: 16px" />
</template> </template>
</el-input> </el-input>
<Icon @click="onMenuCollapse" :name="menuCollapse ? 'el-icon-Expand' : 'el-icon-Fold'" <Icon
:class="menuCollapse ? 'unfold' : ''" size="18" class="fold ml10 menu-collapse" @click="onMenuCollapse"
style="cursor: pointer" v-if="props.canExpand" /> :name="menuCollapse ? 'el-icon-Expand' : 'el-icon-Fold'"
<el-button icon="el-icon-Plus" v-if="props.addTree" type="primary" class="ml10" :class="menuCollapse ? 'unfold' : ''"
@click="onAddTree">新增</el-button> size="18"
class="fold ml10 menu-collapse"
style="cursor: pointer"
v-if="props.canExpand"
/>
<el-button icon="el-icon-Plus" v-if="props.addTree" type="primary" class="ml10" @click="onAddTree">
新增
</el-button>
</div> </div>
<el-tree style="flex: 1; overflow: auto" ref="treeRef" :props="defaultProps" highlight-current <el-tree
:filter-node-method="filterNode" node-key="id" v-bind="$attrs"> style="flex: 1; overflow: auto"
ref="treeRef"
:props="defaultProps"
highlight-current
:filter-node-method="filterNode"
node-key="id"
v-bind="$attrs"
>
<template #default="{ node, data }"> <template #default="{ node, data }">
<span class="custom-tree-node"> <span class="custom-tree-node">
<Icon :name="data.icon" style="font-size: 16px" :style="{ color: data.color }" <Icon
v-if="data.icon" /> :name="data.icon"
<span style="margin-left: 4px">{{ node.label }}</span> style="font-size: 16px"
:style="{ color: data.color }"
v-if="data.icon"
/>
<el-tooltip
class="box-item"
effect="customized"
placement="bottom-start"
:offset="0"
v-if=" data.level == 6"
>
<template #content>
<el-button type="primary" plain @click="viewDetails(data)">
{{ data.level == 3 ? '变电站详情' : '监测点详情' }}
</el-button>
</template>
<span style="margin-left: 4px">{{ node.label }}</span>
</el-tooltip>
<span v-else style="margin-left: 4px">{{ node.label }}</span>
</span> </span>
</template> </template>
</el-tree> </el-tree>
</div> </div>
<!-- 变电站详情 -->
<SubstationDetails ref="SubstationRef"/>
<!-- 监测点详情 -->
<MonitoringPointDetails ref="MonitoringPointRef"/>
</div> </div>
</template> </template>
@@ -35,6 +87,9 @@ import useCurrentInstance from '@/utils/useCurrentInstance'
import { ElTree } from 'element-plus' import { ElTree } from 'element-plus'
import { ref, watch } from 'vue' import { ref, watch } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import MonitoringPointDetails from './details/monitoringPointDetails.vue'
import SubstationDetails from './details/substationDetails.vue'
defineOptions({ defineOptions({
name: 'govern/tree' name: 'govern/tree'
}) })
@@ -52,22 +107,25 @@ const props = withDefaults(defineProps<Props>(), {
}) })
const { proxy } = useCurrentInstance() const { proxy } = useCurrentInstance()
const menuCollapse = ref(false) const menuCollapse = ref(false)
const MonitoringPointRef = ref()
const SubstationRef = ref()
const filterText = ref('') const filterText = ref('')
const defaultProps = { const defaultProps = {
label: 'name', label: 'name',
value: 'id' value: 'id'
} }
const specialCharsPattern = /[`~!@$%^&*\-+=<>?:"{}|,.\/;'\\[\]·~@¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、~]/g; const specialCharsPattern = /[`~!@$%^&*\-+=<>?:"{}|,.\/;'\\[\]·~@¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、~]/g
const change=(val) => { const change = val => {
if (specialCharsPattern.test(val)) { if (specialCharsPattern.test(val)) {
ElMessage.warning('禁止输入特殊字符!') ElMessage.warning('禁止输入特殊字符!')
filterText.value = val.replace(/[`~!@$%^&*\-+=<>?:"{}|,.\/;'\\[\]·~@¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、~]/g, "") filterText.value = val.replace(
console.log("🚀 ~ change ~ filterText.value:", filterText.value) /[`~!@$%^&*\-+=<>?:"{}|,.\/;'\\[\]·~@¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、~]/g,
''
)
console.log('🚀 ~ change ~ filterText.value:', filterText.value)
treeRef.value!.filter(filterText.value) treeRef.value!.filter(filterText.value)
}else{ } else {
treeRef.value!.filter(filterText.value) treeRef.value!.filter(filterText.value)
} }
} }
@@ -88,18 +146,30 @@ const onMenuCollapse = () => {
menuCollapse.value = !menuCollapse.value menuCollapse.value = !menuCollapse.value
proxy.eventBus.emit('cnTreeCollapse', menuCollapse) proxy.eventBus.emit('cnTreeCollapse', menuCollapse)
} }
// 查看详情
const viewDetails = (data: any) => {
console.log("🚀 ~ viewDetails ~ data:", data)
if (data.level == 3) {
// 变电站详情
// substationDetails
SubstationRef.value.open(data)
} else {
// 监测点详情
MonitoringPointRef.value.open(data)
}
// proxy.eventBus.emit('viewDetails', data)
}
const filterNode = (value: string, data: any, node: any) => { const filterNode = (value: string, data: any, node: any) => {
if (!value) return true if (!value) return true
// return data.name.includes(value) // return data.name.includes(value)
if (data.name) { if (data.name) {
return chooseNode(value, data, node) return chooseNode(value, data, node)
} }
} }
// 过滤父节点 / 子节点 (如果输入的参数是父节点且能匹配则返回该节点以及其下的所有子节点如果参数是子节点则返回该节点的父节点。name是中文字符enName是英文字符. // 过滤父节点 / 子节点 (如果输入的参数是父节点且能匹配则返回该节点以及其下的所有子节点如果参数是子节点则返回该节点的父节点。name是中文字符enName是英文字符.
const chooseNode = (value: string, data: any, node: any) => { const chooseNode = (value: string, data: any, node: any) => {
if (data.name.indexOf(value) !== -1) { if (data.name.indexOf(value) !== -1) {
return true return true
} }
@@ -160,3 +230,16 @@ defineExpose({ treeRef })
align-items: center; align-items: center;
} }
</style> </style>
<style>
.el-popper.is-customized {
/* Set padding to ensure the height is 32px */
padding: 0;
background: var(--el-color-primary-light-3);
}
.el-popper.is-customized .el-popper__arrow::before {
background: var(--el-color-primary-light-3);
right: 0;
display: none;
}
</style>

View File

@@ -781,7 +781,7 @@ provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}) })

View File

@@ -797,7 +797,7 @@ provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}) })

View File

@@ -42,7 +42,7 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input <el-input
v-model="tableStore.table.params.filterName" v-model="tableStore.table.params.filterName"
@keyup="searchEvent" @keyup="searchEvent"

View File

@@ -38,7 +38,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input <el-input
v-model="tableStore.table.params.filterName" v-model="tableStore.table.params.filterName"
@keyup="searchEvent" @keyup="searchEvent"

View File

@@ -3073,7 +3073,7 @@ const setDown = () => {
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
if (VITE_FLAG) { if (VITE_FLAG) {
getYwZtSubstation({ orgId: '' }).then(res => { getYwZtSubstation({ orgId: '' }).then(res => {

View File

@@ -207,7 +207,7 @@ const revise = () => {
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
// tableStore.index() // tableStore.index()
}) })

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="default-main"> <div >
<TableHeader ref="TableHeaderRef"> <TableHeader ref="TableHeaderRef">
<template v-slot:select> <template v-slot:select>
<el-form-item label="名称"> <el-form-item label="名称">
@@ -26,6 +26,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/libModel/pageLibModelQuery', url: '/supervision-boot/libModel/pageLibModelQuery',
method: 'POST', method: 'POST',
showPage: true, // 确保启用分页 showPage: true, // 确保启用分页
publicHeight: 60,
column: [ column: [
{ {
title: '典型设备', title: '典型设备',

View File

@@ -1,15 +1,19 @@
<template> <template>
<div class="default-main"> <div>
<TableHeader> <TableHeader>
<template v-slot:select> <template v-slot:select>
<el-form-item label="名称"> <el-form-item label="名称">
<el-input v-model="tableStore.table.params.searchValue" clearable <el-input
placeholder="请输入搜索名称" maxlength="32" show-word-limit/> v-model="tableStore.table.params.searchValue"
clearable
placeholder="请输入搜索名称"
maxlength="32"
show-word-limit
/>
</el-form-item> </el-form-item>
</template> </template>
</TableHeader> </TableHeader>
<Table ref="tableRef" isGroup/> <Table ref="tableRef" isGroup />
</div> </div>
</template> </template>
<script setup lang="tsx"> <script setup lang="tsx">
@@ -23,7 +27,8 @@ const tableRef = ref()
const tableStore = new TableStore({ const tableStore = new TableStore({
url: '/supervision-boot/libModel/pageLibModelQuery', url: '/supervision-boot/libModel/pageLibModelQuery',
method: 'POST', method: 'POST',
column: [ publicHeight: 60,
column: [
{ {
title: '谐波源', title: '谐波源',
children: [ children: [
@@ -32,12 +37,14 @@ const tableStore = new TableStore({
title: '序号', title: '序号',
width: '80', width: '80',
formatter: (row: any) => { formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1 return (
(tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
)
} }
}, },
{ field: 'name', title: '名称',minWidth: 200 }, { field: 'name', title: '名称', minWidth: 200 },
{ field: 'voltage', title: '电压等级',minWidth: 200 }, { field: 'voltage', title: '电压等级', minWidth: 200 },
{ field: 'capacity', title: '容量',minWidth: 200 } { field: 'capacity', title: '容量', minWidth: 200 }
] ]
}, },
{ {
@@ -50,13 +57,13 @@ const tableStore = new TableStore({
})) }))
} }
], ],
// 在请求发送前处理参数 // 在请求发送前处理参数
beforeSearchFun: () => { beforeSearchFun: () => {
tableStore.table.params.pageSize = 100 tableStore.table.params.pageSize = 100
}, },
resetCallback: () => { resetCallback: () => {
tableStore.table.params.searchValue = '' tableStore.table.params.searchValue = ''
}, }
}) })
tableStore.table.params.type = 1 tableStore.table.params.type = 1
@@ -70,5 +77,4 @@ const queryData = () => {
defineExpose({ defineExpose({
queryData queryData
}) })
</script> </script>

View File

@@ -73,7 +73,7 @@ const information = adminInfo.roleCode.includes('information_info')
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}) })

View File

@@ -3,7 +3,7 @@
<div v-show="view"> <div v-show="view">
<TableHeader datePicker area showExport> <TableHeader datePicker area showExport>
<template #select> <template #select>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.searchValue" placeholder="输入关键字筛选" /> <el-input v-model="tableStore.table.params.searchValue" placeholder="输入关键字筛选" />
</el-form-item> </el-form-item>
<el-form-item label="统计类型:"> <el-form-item label="统计类型:">

View File

@@ -571,7 +571,7 @@ const group = (chart: any, myChartDom: any) => {
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
userDataList({ userDataList({
pageNum: 1, pageNum: 1,

View File

@@ -32,7 +32,7 @@
<el-option label="非电网侧" value="2"></el-option> <el-option label="非电网侧" value="2"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input <el-input
v-model="searchKeyword" v-model="searchKeyword"
placeholder="请输入变电站/终端/监测点" placeholder="请输入变电站/终端/监测点"
@@ -63,21 +63,21 @@
<vxe-column field="gdName" title="供电公司" align="center" min-width="120" ></vxe-column> <vxe-column field="gdName" title="供电公司" align="center" min-width="120" ></vxe-column>
<vxe-column field="subStationName" :show-overflow="true" title="变电站" align="center" min-width="150"></vxe-column> <vxe-column field="subStationName" :show-overflow="true" title="变电站" align="center" min-width="150"></vxe-column>
<vxe-column field="devName" title="终端名称" align="center" min-width="120"></vxe-column> <vxe-column field="devName" title="终端名称" align="center" min-width="120"></vxe-column>
<vxe-column field="devType" title="终端型号" align="center" min-width="150"></vxe-column> <!-- <vxe-column field="devType" title="终端型号" align="center" min-width="150"></vxe-column> -->
<vxe-column field="loginTime" title="投运时间" align="center" min-width="120"></vxe-column> <!-- <vxe-column field="loginTime" title="投运时间" align="center" min-width="120"></vxe-column> -->
<vxe-column field="lineName" title="监测点名称" align="center" min-width="150" :formatter="formatMonitorId"></vxe-column> <vxe-column field="lineName" title="监测点名称" align="center" min-width="150" :formatter="formatMonitorId"></vxe-column>
<vxe-column field="powerFlag" title="监测位置" align="center" min-width="100"></vxe-column> <!-- <vxe-column field="powerFlag" title="监测位置" align="center" min-width="100"></vxe-column> -->
<vxe-column field="lineVoltage" title="监测点电压等级" align="center" min-width="120"></vxe-column> <!-- <vxe-column field="lineVoltage" title="监测点电压等级" align="center" min-width="120"></vxe-column> -->
<vxe-column field="loadType" title="干扰源类型" align="center" min-width="120"></vxe-column> <!-- <vxe-column field="loadType" title="干扰源类型" align="center" min-width="120"></vxe-column> -->
<vxe-column field="objName" title="监测对象名称" align="center" min-width="150" :formatter="formatMonitorId"></vxe-column> <!-- <vxe-column field="objName" title="监测对象名称" align="center" min-width="150" :formatter="formatMonitorId"></vxe-column> -->
<vxe-column field="interval" title="统计间隔" align="center" min-width="100" :formatter="formatMonitorId"></vxe-column> <!-- <vxe-column field="interval" title="统计间隔" align="center" min-width="100" :formatter="formatMonitorId"></vxe-column> -->
<vxe-column field="onlineRate" title="在线率(%)" align="center" min-width="100"></vxe-column> <!-- <vxe-column field="onlineRate" title="在线率(%)" align="center" min-width="100"></vxe-column> -->
<vxe-column field="integrity" title="完整率(%)" align="center" min-width="100"></vxe-column> <!-- <vxe-column field="integrity" title="完整率(%)" align="center" min-width="100"></vxe-column> -->
<vxe-column field="harmonicValue" :title="harmonicValueTitle" align="center" min-width="120"></vxe-column> <vxe-column field="harmonicValue" :title="harmonicValueTitle" align="center" min-width="120"></vxe-column>
<vxe-column field="upCounts" title="暂升次数(次)" align="center" min-width="100"></vxe-column> <!-- <vxe-column field="upCounts" title="暂升次数(次)" align="center" min-width="100"></vxe-column> -->
<vxe-column field="downCounts" title="电压暂降(次)" align="center" min-width="100"></vxe-column> <!-- <vxe-column field="downCounts" title="电压暂降(次)" align="center" min-width="100"></vxe-column> -->
<vxe-column field="breakCounts" title="短时中断(次)" align="center" min-width="100"></vxe-column> <!-- <vxe-column field="breakCounts" title="短时中断(次)" align="center" min-width="100"></vxe-column> -->
<vxe-column field="monitorId" title="一类监测点" align="center" min-width="120" :formatter="formatMonitorId"></vxe-column> <!-- <vxe-column field="monitorId" title="一类监测点" align="center" min-width="120" :formatter="formatMonitorId"></vxe-column> -->
</vxe-table> </vxe-table>
</div> </div>

View File

@@ -32,7 +32,7 @@
<el-option label="非电网侧" value="2"></el-option> <el-option label="非电网侧" value="2"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input <el-input
v-model="searchKeyword" v-model="searchKeyword"
placeholder="请输入变电站" placeholder="请输入变电站"
@@ -86,9 +86,10 @@
</div> </div>
<!-- 添加弹窗 --> <!-- 添加弹窗 -->
<el-dialog <el-dialog draggable
v-model="detailDialogVisible" v-model="detailDialogVisible"
:title="detailDialogTitle" :title="detailDialogTitle"
width="1000px"
> >
<div v-loading="detailLoading"> <div v-loading="detailLoading">
@@ -99,6 +100,7 @@
ref="detailTableRef" ref="detailTableRef"
:data="detailData" :data="detailData"
auto-resize auto-resize
v-bind="defaultAttribute"
resizable resizable
show-overflow show-overflow
height="400px" height="400px"
@@ -123,6 +125,7 @@
import { ref, onMounted, provide, onBeforeUnmount, computed, watch } from 'vue' import { ref, onMounted, provide, onBeforeUnmount, computed, watch } from 'vue'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import TableHeader from '@/components/table/header/index.vue' import TableHeader from '@/components/table/header/index.vue'
import { defaultAttribute } from '@/components/table/defaultAttribute' import { defaultAttribute } from '@/components/table/defaultAttribute'
import { useDictData } from '@/stores/dictData' import { useDictData } from '@/stores/dictData'

View File

@@ -109,7 +109,7 @@ const tableStore = new TableStore({
{ field: 'name', title: '电网拓扑', minWidth: '150' }, { field: 'name', title: '电网拓扑', minWidth: '150' },
{ {
field: 'onlineMonitorNumber', field: 'onlineMonitorNumber',
title: '在线监测点数(个)', title: '在监测点数(个)',
minWidth: '100px', minWidth: '100px',
formatter: (row: any) => { formatter: (row: any) => {
return row.cellValue == -1 ? '/' : row.cellValue return row.cellValue == -1 ? '/' : row.cellValue

View File

@@ -1,7 +1,7 @@
<template> <template>
<TableHeader area datePicker ref="TableHeaderRef"> <TableHeader area datePicker ref="TableHeaderRef">
<template #select> <template #select>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input <el-input
v-model="tableStore.table.params.filterName" v-model="tableStore.table.params.filterName"
@keyup="searchEvent" @keyup="searchEvent"

View File

@@ -1,7 +1,7 @@
<template> <template>
<TableHeader area datePicker ref="TableHeaderRef"> <TableHeader area datePicker ref="TableHeaderRef">
<template #select> <template #select>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input <el-input
v-model="tableStore.table.params.filterName" v-model="tableStore.table.params.filterName"
@keyup="searchEvent" @keyup="searchEvent"

View File

@@ -12,8 +12,8 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.filterName" placeholder="输入关键字筛选" /> <el-input v-model="tableStore.table.params.searchValue" clearable placeholder="输入监测点名称" />
</el-form-item> </el-form-item>
</template> </template>
@@ -47,7 +47,7 @@
<span class="divBox_title">低于90%监测点数</span> <span class="divBox_title">低于90%监测点数</span>
<span <span
class="divBox_num text-style" class="divBox_num text-style"
style="color: #ff6600" style="color: #57bc6e"
@click="totalTable(90, '低于90%监测点_')" @click="totalTable(90, '低于90%监测点_')"
> >
{{ monitoringPoints.abnormalNum }} {{ monitoringPoints.abnormalNum }}
@@ -115,7 +115,7 @@
</span> </span>
<!-- 低于90%监测点数 --> <!-- 低于90%监测点数 -->
<span <span
style="flex: 1; color: #ff9100" style="flex: 1; color: #388e3c"
class="text text-style" class="text text-style"
@click="renderTable(o.detailList, 90, o.citName + '_低于90%监测点_')" @click="renderTable(o.detailList, 90, o.citName + '_低于90%监测点_')"
> >
@@ -160,13 +160,13 @@
</span> </span>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="cit" title="所在地市" width="110px"></vxe-column> <vxe-column field="cit" title="所在地市" minWidth="110px"></vxe-column>
<vxe-column field="company" title="供电公司"></vxe-column> <vxe-column field="company" title="供电公司" minWidth="110px"></vxe-column>
<vxe-column field="subStation" title="变电站"></vxe-column> <vxe-column field="subStation" title="变电站" minWidth="110px"></vxe-column>
<vxe-column field="manufacturer" title="终端厂家"></vxe-column> <vxe-column field="manufacturer" title="终端厂家" minWidth="110px"></vxe-column>
<vxe-column field="deviceName" title="终端名称"></vxe-column> <vxe-column field="deviceName" title="终端名称" minWidth="110px"></vxe-column>
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="130px"></vxe-column> <vxe-column field="ip" title="终端IP" :formatter="formatter" width="130px" ></vxe-column>
<vxe-column field="lineName" title="监测点名称" :formatter="formatter"></vxe-column> <vxe-column field="lineName" title="监测点名称" :formatter="formatter" minWidth="110px"></vxe-column>
<vxe-column field="runFlag" title="运行状态" width="90px"> <vxe-column field="runFlag" title="运行状态" width="90px">
<template #default="{ row }"> <template #default="{ row }">
<el-tag <el-tag
@@ -267,7 +267,13 @@ const tableStore = new TableStore({
monitoringPoints.value.runNum = tableStore.table.data.totalNum monitoringPoints.value.runNum = tableStore.table.data.totalNum
monitoringPoints.value.abnormalNum = tableStore.table.data.belowNum monitoringPoints.value.abnormalNum = tableStore.table.data.belowNum
monitoringPoints.value.totalOnlineRate = tableStore.table.data.totalOnlineRate - 0 monitoringPoints.value.totalOnlineRate = tableStore.table.data.totalOnlineRate - 0
abnormal.value = tableStore.table.data.citDetailList abnormal.value = tableStore.table.data.citDetailList.filter((k: any) => {
if (tableStore.table.params.statisticalType.name == '终端厂家') {
return k.citTotalNum != 0
} else {
return k.citName != '上送国网' && k.citName != '非上送国网'
}
})
// 合并子集数据 并去重 // 合并子集数据 并去重
totalData.value = Array.from( totalData.value = Array.from(
tableStore.table.data.citDetailList tableStore.table.data.citDetailList
@@ -413,7 +419,8 @@ const echart = () => {
} }
} }
tableStore.table.params.deptIndex = dictData.state.area[0].id tableStore.table.params.deptIndex = dictData.state.area[0].id
tableStore.table.params.lineRunFlag = '' tableStore.table.params.lineRunFlag = 0
tableStore.table.params.searchValue = ''
const formatter = (row: any) => { const formatter = (row: any) => {
return row.cellValue || '/' return row.cellValue || '/'

View File

@@ -1,7 +1,7 @@
<template> <template>
<TableHeader area datePicker ref="TableHeaderRef"> <TableHeader area datePicker ref="TableHeaderRef">
<template #select> <template #select>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.filterName" @keyup="searchEvent" placeholder="输入关键字筛选" /> <el-input v-model="tableStore.table.params.filterName" @keyup="searchEvent" placeholder="输入关键字筛选" />
</el-form-item> </el-form-item>
<el-form-item label="统计类型:"> <el-form-item label="统计类型:">

View File

@@ -12,8 +12,8 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.filterName" placeholder="输入关键字筛选" /> <el-input v-model="tableStore.table.params.searchValue" placeholder="输入终端名称" />
</el-form-item> </el-form-item>
</template> </template>
@@ -47,7 +47,7 @@
<span class="divBox_title">低于90%终端数</span> <span class="divBox_title">低于90%终端数</span>
<span <span
class="divBox_num text-style" class="divBox_num text-style"
style="color: #ff6600" style="color: #57bc6e"
@click="totalTable(90, '低于90%终端_')" @click="totalTable(90, '低于90%终端_')"
> >
{{ monitoringPoints.abnormalNum }} {{ monitoringPoints.abnormalNum }}
@@ -115,7 +115,7 @@
</span> </span>
<!-- 低于90%终端数 --> <!-- 低于90%终端数 -->
<span <span
style="flex: 1; color: #ff9100" style="flex: 1; color: #388e3c"
class="text text-style" class="text text-style"
@click="renderTable(o.detailList, 90, o.citName + '_低于90%终端_')" @click="renderTable(o.detailList, 90, o.citName + '_低于90%终端_')"
> >
@@ -161,10 +161,10 @@
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="cit" title="所在地市" width="110px"></vxe-column> <vxe-column field="cit" title="所在地市" width="110px"></vxe-column>
<vxe-column field="company" title="供电公司"></vxe-column> <vxe-column field="company" title="供电公司" minWidth="110px"></vxe-column>
<vxe-column field="subStation" title="变电站"></vxe-column> <vxe-column field="subStation" title="变电站" minWidth="110px"></vxe-column>
<vxe-column field="manufacturer" title="终端厂家"></vxe-column> <vxe-column field="manufacturer" title="终端厂家" minWidth="110px"></vxe-column>
<vxe-column field="deviceName" title="终端名称"></vxe-column> <vxe-column field="deviceName" title="终端名称" minWidth="110px"></vxe-column>
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="130px"></vxe-column> <vxe-column field="ip" title="终端IP" :formatter="formatter" width="130px"></vxe-column>
<vxe-column field="runFlag" title="运行状态" width="90px"> <vxe-column field="runFlag" title="运行状态" width="90px">
<template #default="{ row }"> <template #default="{ row }">
@@ -267,9 +267,15 @@ const tableStore = new TableStore({
monitoringPoints.value.runNum = tableStore.table.data.totalNum monitoringPoints.value.runNum = tableStore.table.data.totalNum
monitoringPoints.value.abnormalNum = tableStore.table.data.belowNum monitoringPoints.value.abnormalNum = tableStore.table.data.belowNum
monitoringPoints.value.totalOnlineRate = tableStore.table.data.totalOnlineRate - 0 monitoringPoints.value.totalOnlineRate = tableStore.table.data.totalOnlineRate - 0
abnormal.value = tableStore.table.data.citDetailList.filter( abnormal.value = tableStore.table.data.citDetailList.filter((k: any) => {
(k: any) => k.citName != '上送国网' && k.citName != '非上送国网' if (tableStore.table.params.statisticalType.name == '终端厂家') {
) return k.citTotalNum != 0
} else {
return k.citName != '上送国网' && k.citName != '非上送国网'
}
})
console.log(123, tableStore.table.params.statisticalType.name)
// 合并子集数据 并去重 // 合并子集数据 并去重
totalData.value = Array.from( totalData.value = Array.from(
tableStore.table.data.citDetailList tableStore.table.data.citDetailList
@@ -417,7 +423,8 @@ const echart = () => {
} }
} }
tableStore.table.params.deptIndex = dictData.state.area[0].id tableStore.table.params.deptIndex = dictData.state.area[0].id
tableStore.table.params.lineRunFlag = '' tableStore.table.params.lineRunFlag = 0
tableStore.table.params.searchValue = ''
const formatter = (row: any) => { const formatter = (row: any) => {
return row.cellValue || '/' return row.cellValue || '/'
@@ -478,7 +485,7 @@ tableStore.table.params.name = ''
provide('tableStore', tableStore) provide('tableStore', tableStore)
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import '@/assets/font/iconfont.css'; @import '@/assets/font/iconfont.css';
.card-list { .card-list {
display: flex; display: flex;
.monitoringPoints { .monitoringPoints {

View File

@@ -90,7 +90,7 @@ const activeName = ref('2')
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}) })
const handleNodeClick = (data: any, node: any) => { const handleNodeClick = (data: any, node: any) => {

View File

@@ -109,7 +109,7 @@ provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}) })
getTemplateByDept({ id: dictData.state.area[0].id }) getTemplateByDept({ id: dictData.state.area[0].id })

View File

@@ -129,7 +129,7 @@ provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}) })
getTemplateByDept({ id: dictData.state.area[0].id }) getTemplateByDept({ id: dictData.state.area[0].id })

View File

@@ -79,7 +79,7 @@ onMounted(() => {
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}) })

View File

@@ -52,7 +52,7 @@
</div> </div>
<vxe-table v-bind="defaultAttribute" ref="vxeRef" height="365px" :data="tableData"> <vxe-table v-bind="defaultAttribute" ref="vxeRef" height="365px" :data="tableData">
<vxe-column field="deptName" title="区域" /> <vxe-column field="deptName" title="区域" />
<vxe-column sortable field="onlineNum" title="在线监测点数(个)" /> <vxe-column sortable field="onlineNum" title="在监测点数(个)" />
<vxe-column sortable field="overNum" title="超标监测点数量(个)" /> <vxe-column sortable field="overNum" title="超标监测点数量(个)" />
<vxe-column sortable field="overRatio" title="超标监测点占比(%)" /> <vxe-column sortable field="overRatio" title="超标监测点占比(%)" />

View File

@@ -49,7 +49,7 @@
</div> </div>
<vxe-table v-bind="defaultAttribute" ref="vxeRef" height="365px" :data="tableData"> <vxe-table v-bind="defaultAttribute" ref="vxeRef" height="365px" :data="tableData">
<vxe-column field="deptName" title="区域" /> <vxe-column field="deptName" title="区域" />
<vxe-column sortable field="onlineNum" title="在线监测点数(个)" /> <vxe-column sortable field="onlineNum" title="在监测点数(个)" />
<vxe-column sortable field="overNum" title="超标监测点数量(个)" /> <vxe-column sortable field="overNum" title="超标监测点数量(个)" />
<vxe-column sortable field="overRatio" title="超标监测点占比(%)" /> <vxe-column sortable field="overRatio" title="超标监测点占比(%)" />

View File

@@ -6,7 +6,7 @@
<span style="font-size: 16px">{{ dropList.lineName }}详情 </span> <span style="font-size: 16px">{{ dropList.lineName }}详情 </span>
<span style="font-weight: 500">最新数据时间</span> <span style="font-weight: 500">最新数据时间</span>
<span style="color: var(--color-primary-default)">{{ dropList.updateTime }}</span> <span style="color: var(--color-primary-default)">{{ dropList.updateTime }}</span>
<span style="font-weight: 500">统计日期</span> <span style="font-weight: 500" class="ml20">统计日期</span>
<span style="color: var(--color-primary-default)"> <span style="color: var(--color-primary-default)">
{{ getTimeOfTheMonth('3')[0] + '至' + getTimeOfTheMonth('3')[1] }} {{ getTimeOfTheMonth('3')[0] + '至' + getTimeOfTheMonth('3')[1] }}
</span> </span>
@@ -657,7 +657,7 @@ const echart = (row: any) => {
}, },
indicator: indicator indicator: indicator
}, },
color: color,
series: [] series: []
} }
@@ -666,13 +666,17 @@ const echart = (row: any) => {
name: item.time, name: item.time,
type: 'radar', type: 'radar',
symbol: 'none', symbol: 'none',
areaStyle: { areaStyle: {
normal: { opacity: 0.6, // 调整透明度,避免重叠遮挡
color: '#2a9fe069' color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
} { offset: 0, color: `${color[i]}50` },
{ offset: 1, color: `${color[i]}50` } // 渐变透明
])
}, },
itemStyle: { lineStyle: {
color: '#2a9fe0' color: color[i],
width: 2
}, },
data: [item.ratioList] data: [item.ratioList]
}) })

View File

@@ -2,7 +2,7 @@
<div> <div>
<TableHeader date-picker area ref="TableHeaderRef"> <TableHeader date-picker area ref="TableHeaderRef">
<template v-slot:select> <template v-slot:select>
<el-form-item label="对象类型"> <!-- <el-form-item label="对象类型">
<el-select <el-select
v-model="tableStore.table.params.objType" v-model="tableStore.table.params.objType"
clearable clearable
@@ -16,7 +16,7 @@
:value="item.id" :value="item.id"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<el-form-item label="终端厂家:"> <el-form-item label="终端厂家:">
<el-select <el-select
v-model="tableStore.table.params.manufacturer" v-model="tableStore.table.params.manufacturer"
@@ -136,7 +136,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item class="form_but"> <el-form-item class="form_but">
<el-button type="primary" @click="MonitorVerify" icon="el-icon-Refresh">更新</el-button> <el-button type="primary" @click="MonitorVerify" icon="el-icon-Search">查询</el-button>
<el-button type="primary" @click="onExport" icon="el-icon-Download">导出</el-button> <el-button type="primary" @click="onExport" icon="el-icon-Download">导出</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>

View File

@@ -1,6 +1,6 @@
<template> <template>
<el-dialog draggable width="1350px" class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable width="1350px" class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<div style="display: flex"> <div style="display: flex" v-loading="loading">
<div :style="height1" class="mr10 box" style="width: 500px"> <div :style="height1" class="mr10 box" style="width: 500px">
<vxe-table <vxe-table
height="auto" height="auto"
@@ -39,6 +39,7 @@
<vxe-column field="type" title="数据类型" width="105px" :formatter="formatter"></vxe-column> <vxe-column field="type" title="数据类型" width="105px" :formatter="formatter"></vxe-column>
<vxe-column field="val" title="值" width="85px" :formatter="formatter"></vxe-column> <vxe-column field="val" title="值" width="85px" :formatter="formatter"></vxe-column>
<vxe-column field="overLimitValue" title="限值" width="85px" :formatter="formatter"></vxe-column>
</vxe-table> </vxe-table>
<div class="table-pagination"> <div class="table-pagination">
<el-pagination <el-pagination
@@ -68,6 +69,7 @@ const height1 = mainHeight(-110, 2)
const height = mainHeight(10, 2) const height = mainHeight(10, 2)
const tableRef = ref() const tableRef = ref()
const title = ref('') const title = ref('')
const loading = ref(false)
const loading1 = ref(false) const loading1 = ref(false)
const TableData = ref([]) const TableData = ref([])
const TableData1 = ref([]) const TableData1 = ref([])
@@ -78,6 +80,7 @@ const targetKey = ref('')
const clickRow = ref({}) const clickRow = ref({})
const open = (data: anyObj, time: string[], num: number) => { const open = (data: anyObj, time: string[], num: number) => {
// title.value = (num == 0 ? data.targetName : data.monitorName) + '_告警详情展示' // title.value = (num == 0 ? data.targetName : data.monitorName) + '_告警详情展示'
loading.value = true
title.value = '告警监测点详情' title.value = '告警监测点详情'
numKey.value = num numKey.value = num
targetKey.value = data.key targetKey.value = data.key
@@ -87,11 +90,16 @@ const open = (data: anyObj, time: string[], num: number) => {
targetKey: num == 0 ? data.key : '', targetKey: num == 0 ? data.key : '',
searchBeginTime: time[0], searchBeginTime: time[0],
searchEndTime: time[1] searchEndTime: time[1]
}).then(res => {
TableData.value = res.data
tableRef.value.setCurrentRow(TableData.value[0])
currentChangeEvent()
}) })
.then(res => {
TableData.value = res.data
tableRef.value.setCurrentRow(TableData.value[0])
currentChangeEvent()
loading.value = false
})
.catch(() => {
loading.value = false
})
dialogVisible.value = true dialogVisible.value = true
} }
const currentChangeEvent = () => { const currentChangeEvent = () => {

View File

@@ -254,7 +254,7 @@ onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
setTimeout(() => { setTimeout(() => {
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}, 100) }, 100)
}) })

View File

@@ -2,7 +2,7 @@
<div> <div>
<TableHeader date-picker area ref="TableHeaderRef"> <TableHeader date-picker area ref="TableHeaderRef">
<template v-slot:select> <template v-slot:select>
<el-form-item label="对象类型"> <!-- <el-form-item label="对象类型">
<el-select <el-select
v-model="tableStore.table.params.objType" v-model="tableStore.table.params.objType"
clearable clearable
@@ -16,7 +16,7 @@
:value="item.id" :value="item.id"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<el-form-item label="终端厂家:"> <el-form-item label="终端厂家:">
<el-select v-model="tableStore.table.params.manufacturer" clearable placeholder="请选择终端厂家"> <el-select v-model="tableStore.table.params.manufacturer" clearable placeholder="请选择终端厂家">
<el-option <el-option
@@ -60,8 +60,8 @@
{{ {{
isNaN((monitoringPoints.abnormalNum / monitoringPoints.runNum) * 100) isNaN((monitoringPoints.abnormalNum / monitoringPoints.runNum) * 100)
? 0 ? 0
: Math.floor((monitoringPoints.abnormalNum / monitoringPoints.runNum) * 10000) / : Math.floor((monitoringPoints.abnormalNum / monitoringPoints.runNum) * 10000) /
100 100
}}% }}%
</div> </div>
</div> </div>
@@ -99,13 +99,13 @@
</el-segmented> </el-segmented>
</div> </div>
<div class="header"> <div class="header">
<span style="width: 170px; text-align: left">指标名称</span> <span style="width: 165px; text-align: left">指标名称</span>
<span style="flex: 1">合理范围</span> <span style="flex: 1">合理范围</span>
<span style="width: 90px">异常测点数</span> <span style="width: 80px">异常测点数</span>
</div> </div>
<div :style="indicatorHeight" style="overflow-y: auto"> <div :style="indicatorHeight" style="overflow-y: auto">
<div v-for="o in abnormal.filter(item => item.remark == segmented)" class="abnormal mb10"> <div v-for="o in abnormal.filter(item => item.remark == segmented)" class="abnormal mb10">
<span style="width: 170px; height: 24px" class="iconDiv"> <span style="width: 165px; height: 24px" class="iconDiv">
<div :style="{ backgroundColor: o.ids.length > 0 ? '#FF9100' : '' }"></div> <div :style="{ backgroundColor: o.ids.length > 0 ? '#FF9100' : '' }"></div>
{{ o.targetName }} {{ o.targetName }}
</span> </span>
@@ -113,7 +113,7 @@
<!-- 合理范围 --> <!-- 合理范围 -->
<span style="color: #388e3c" class="text">{{ o.rangeDesc }}</span> <span style="color: #388e3c" class="text">{{ o.rangeDesc }}</span>
</span> </span>
<span style="width: 90px; text-align: center"> <span style="width: 80px; text-align: center">
<span <span
style="color: #388e3c" style="color: #388e3c"
:class="` ${o.ids.length > 0 ? 'text-red' : ''}`" :class="` ${o.ids.length > 0 ? 'text-red' : ''}`"
@@ -173,26 +173,26 @@
</span> </span>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="monitorName" title="监测点名称"></vxe-column> <vxe-column field="monitorName" title="监测点名称" minWidth="110px"></vxe-column>
<vxe-column field="manufacturer" title="终端厂家"></vxe-column> <vxe-column field="manufacturer" title="终端厂家" minWidth="110px"></vxe-column>
<vxe-column field="devName" title="所属终端名称"></vxe-column> <vxe-column field="devName" title="所属终端名称" minWidth="110px"></vxe-column>
<vxe-column field="ip" title="IP"> <vxe-column field="ip" title="IP">
<template #default="{ row }"> <template #default="{ row }">
{{ decryptFromBase64(row.ip) }} {{ decryptFromBase64(row.ip) }}
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="stationName" title="所属电站"></vxe-column> <vxe-column field="stationName" title="所属电站" minWidth="110px"></vxe-column>
<vxe-column field="objType" title="监测对象类型" :formatter="formatter"></vxe-column> <vxe-column field="objType" title="监测对象类型" :formatter="formatter" minWidth="110px"></vxe-column>
<vxe-column field="objName" title="监测对象名称" :formatter="formatter"></vxe-column> <vxe-column field="objName" title="监测对象名称" :formatter="formatter" minWidth="110px"></vxe-column>
<vxe-column field="voltageLevel" title="电压等级"></vxe-column> <vxe-column field="voltageLevel" title="电压等级" minWidth="80px"></vxe-column>
<vxe-column field="abnormalDay" title="异常天数"> <vxe-column field="abnormalDay" title="异常天数" width="80px">
<template #default="{ row }"> <template #default="{ row }">
<span class="table_name" @click="quantityClick(row, 1)"> <span class="table_name" @click="quantityClick(row, 1)">
{{ row.abnormalDay }} {{ row.abnormalDay }}
</span> </span>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="abnormalDay" title="严重度"> <vxe-column field="abnormalDay" title="严重度" width="80px">
<template #default="{ row }"> <template #default="{ row }">
<el-tag type="warning" v-if="row.severity == 0">预警</el-tag> <el-tag type="warning" v-if="row.severity == 0">预警</el-tag>
<el-tag type="danger" v-if="row.severity == 1">告警</el-tag> <el-tag type="danger" v-if="row.severity == 1">告警</el-tag>
@@ -518,7 +518,7 @@ tableStore.table.params.name = ''
provide('tableStore', tableStore) provide('tableStore', tableStore)
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import '@/assets/font/iconfont.css'; @import '@/assets/font/iconfont.css';
.card-list { .card-list {
display: flex; display: flex;
.monitoringPoints { .monitoringPoints {

View File

@@ -1,6 +1,6 @@
<template> <template>
<el-dialog draggable width="1550px" class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable width="1550px" class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<div style="display: flex"> <div style="display: flex" v-loading="loading">
<div :style="height1" class="mr10 box" style="width: 600px"> <div :style="height1" class="mr10 box" style="width: 600px">
<vxe-table <vxe-table
height="auto" height="auto"
@@ -100,6 +100,7 @@ const height1 = mainHeight(-110, 2)
const height = mainHeight(10, 2) const height = mainHeight(10, 2)
const tableRef = ref() const tableRef = ref()
const title = ref('') const title = ref('')
const loading = ref(false)
const loading1 = ref(false) const loading1 = ref(false)
const TableData = ref([]) const TableData = ref([])
const TableData1 = ref([]) const TableData1 = ref([])
@@ -110,6 +111,7 @@ const targetKey = ref('')
const showColumn = ref(true) const showColumn = ref(true)
const open = (data: anyObj, time: string[], num: number) => { const open = (data: anyObj, time: string[], num: number) => {
// title.value = (num == 0 ? data.targetName : data.monitorName) + '_异常监测点详情' // title.value = (num == 0 ? data.targetName : data.monitorName) + '_异常监测点详情'
loading.value = true
title.value = '异常监测点详情' title.value = '异常监测点详情'
TableData.value = [] TableData.value = []
numKey.value = num numKey.value = num
@@ -123,6 +125,9 @@ const open = (data: anyObj, time: string[], num: number) => {
TableData.value = res.data TableData.value = res.data
tableRef.value.setCurrentRow(TableData.value[0]) tableRef.value.setCurrentRow(TableData.value[0])
currentChangeEvent() currentChangeEvent()
loading.value = false
}).catch(() => {
loading.value = false
}) })
dialogVisible.value = true dialogVisible.value = true
} }

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="default-main"> <div class="default-main">
<TableHeader date-picker ref="TableHeaderRef" > <TableHeader date-picker ref="TableHeaderRef">
<template v-slot:select> <template v-slot:select>
<el-form-item label="运行状态"> <el-form-item label="运行状态">
<el-select v-model="tableStore.table.params.lineRunFlag" clearable placeholder="请选择运行状态"> <el-select v-model="tableStore.table.params.lineRunFlag" clearable placeholder="请选择运行状态">
@@ -12,8 +12,8 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.filterName" placeholder="输入关键字筛选" /> <el-input v-model="tableStore.table.params.searchValue" clearable placeholder="输入终端名称" />
</el-form-item> </el-form-item>
</template> </template>
@@ -86,22 +86,22 @@
</span> </span>
<!-- --> <!-- -->
<span <span
style="flex: 1; color: #ff9100" style="flex: 1; color: #388e3c"
class="text" class="text"
:class="` ${o.integrity < 90 ? 'text-red' : ''}`" :class="` ${o.integrity < 90 ? 'text-red' : ''}`"
> >
{{ o.integrity }} {{ o.integrity }}
</span> </span>
<span <span
style="width: 80px; color: #388e3c" style="width: 80px; color: #388e3c"
:class="` ${o.online < 90 ? 'text-red' : ''}`" :class="` ${o.online < 90 ? 'text-red' : ''}`"
class="text" class="text"
> >
{{ o.online }} {{ o.online }}
</span> </span>
<span <span
style="width: 80px; color: #388e3c" style="width: 80px; color: #388e3c"
:class="` ${o.qualified < 90 ? 'text-red' : ''}`" :class="` ${o.qualified > 10 ? 'text-red' : ''}`"
class="text" class="text"
> >
{{ o.qualified }} {{ o.qualified }}
@@ -138,12 +138,12 @@
</span> </span>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="cit" title="所在地市" width="110px"></vxe-column> <vxe-column field="cit" title="所在地市" minWidth="110px"></vxe-column>
<vxe-column field="company" title="供电公司"></vxe-column> <vxe-column field="company" title="供电公司" minWidth="110px"></vxe-column>
<vxe-column field="subName" title="变电站"></vxe-column> <vxe-column field="subName" title="变电站" minWidth="110px"></vxe-column>
<vxe-column field="manufacturer" title="终端厂家"></vxe-column> <vxe-column field="manufacturer" title="终端厂家" minWidth="110px"></vxe-column>
<vxe-column field="name" title="终端名称"></vxe-column> <vxe-column field="name" title="终端名称" minWidth="110px"></vxe-column>
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="130px"></vxe-column> <vxe-column field="ip" title="终端IP" :formatter="formatter" width="130px" ></vxe-column>
<vxe-column field="runFlag" title="运行状态" width="100px"> <vxe-column field="runFlag" title="运行状态" width="100px">
<template #default="{ row }"> <template #default="{ row }">
<el-tag <el-tag
@@ -269,9 +269,13 @@ const tableStore = new TableStore({
statisticsList.value.checkNum = totalData.value.filter(item => item.runFlag === '调试').length statisticsList.value.checkNum = totalData.value.filter(item => item.runFlag === '调试').length
statisticsList.value.stopRunNum = totalData.value.filter(item => item.runFlag === '停运').length statisticsList.value.stopRunNum = totalData.value.filter(item => item.runFlag === '停运').length
abnormal.value = tableStore.table.data.filter( abnormal.value = tableStore.table.data.filter((k: any) => {
(k: any) => k.name != '上送国网' && k.name != '非上送国网' if (tableStore.table.params.statisticalType.name == '终端厂家') {
) return k.count != 0
} else {
return k.name != '上送国网' && k.name != '非上送国网'
}
})
// 合并子集数据 并去重 // 合并子集数据 并去重
totalTable(101, '') totalTable(101, '')
@@ -406,7 +410,8 @@ const echart = () => {
} }
} }
tableStore.table.params.deptIndex = dictData.state.area[0].id tableStore.table.params.deptIndex = dictData.state.area[0].id
tableStore.table.params.lineRunFlag = '' tableStore.table.params.lineRunFlag = 0
tableStore.table.params.searchValue = ''
const formatter = (row: any) => { const formatter = (row: any) => {
return row.cellValue || '/' return row.cellValue || '/'
@@ -425,7 +430,7 @@ const totalTable = (num: number, t: string) => {
} }
const change = (e: string) => { const change = (e: string) => {
title.value = e==''?'' : e+'_' title.value = e == '' ? '' : e + '_'
loading.value = true loading.value = true
pageNum.value = 1 pageNum.value = 1
dataList.value = [] dataList.value = []

View File

@@ -9,7 +9,7 @@
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.searchValue" placeholder="请输入关键字" <el-input v-model="tableStore.table.params.searchValue" placeholder="请输入关键字"
clearable maxlength="32" show-word-limit></el-input> clearable maxlength="32" show-word-limit></el-input>
</el-form-item> </el-form-item>

View File

@@ -9,7 +9,7 @@
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.searchValue" placeholder="请输入关键字" clearable maxlength="32" show-word-limit></el-input> <el-input v-model="tableStore.table.params.searchValue" placeholder="请输入关键字" clearable maxlength="32" show-word-limit></el-input>
</el-form-item> </el-form-item>
</template> </template>

View File

@@ -9,7 +9,7 @@
<el-radio-button :label="1">离线</el-radio-button> <el-radio-button :label="1">离线</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="输入关键字筛选" /> <el-input v-model="tableStore.table.params.searchValue" clearable placeholder="输入关键字筛选" />
</el-form-item> </el-form-item>
<el-form-item label="触发类型:"> <el-form-item label="触发类型:">

View File

@@ -3,7 +3,7 @@
<div v-show="view"> <div v-show="view">
<TableHeader datePicker :showReset="false" showExport ref="TableHeaderRef"> <TableHeader datePicker :showReset="false" showExport ref="TableHeaderRef">
<template #select> <template #select>
<!-- <el-form-item label="筛选">--> <!-- <el-form-item label="筛选数据">-->
<!-- <el-input v-model="tableStore.table.params.searchValue" clearable placeholder="输入关键字筛选" />--> <!-- <el-input v-model="tableStore.table.params.searchValue" clearable placeholder="输入关键字筛选" />-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
</template> </template>

View File

@@ -2,7 +2,7 @@
<div> <div>
<div v-show="view"> <div v-show="view">
<!-- 表头 --> <!-- 表头 -->
<TableHeader date-picker showExport> <TableHeader ref="TableHeaderRef" date-picker showExport>
<template v-slot:operation> <template v-slot:operation>
<el-button :icon="Download" type="primary" @click="download">下载波形</el-button> <el-button :icon="Download" type="primary" @click="download">下载波形</el-button>
</template> </template>
@@ -130,11 +130,16 @@ const tableStore = new TableStore({
}, },
loadCallback: () => {} loadCallback: () => {}
}) })
const TableHeaderRef = ref()
provide('tableStore', tableStore) provide('tableStore', tableStore)
tableStore.table.params.searchState = 0 tableStore.table.params.searchState = 0
onMounted(() => { onMounted(() => {
TableHeaderRef.value.setTheDate(1)
// 加载数据 // 加载数据
tableStore.index() nextTick(() => {
// tableStore.index()
TableHeaderRef.value.onComSearch()
})
}) })
const checkboxConfig = reactive<VxeTablePropTypes.CheckboxConfig<any>>({ const checkboxConfig = reactive<VxeTablePropTypes.CheckboxConfig<any>>({
checkMethod: ({ row }) => { checkMethod: ({ row }) => {

View File

@@ -30,9 +30,9 @@
<EventStatistics :externalHeight='20'/> <EventStatistics :externalHeight='20'/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="运行情况" name="4" lazy :style="height" v-if="!isReload"> <!-- <el-tab-pane label="运行情况" name="4" lazy :style="height" v-if="!isReload">
<RunningCondition :externalHeight='20'/> <RunningCondition :externalHeight='20'/>
</el-tab-pane> </el-tab-pane> -->
<el-tab-pane label="暂态报告" name="5" lazy v-if="!isReload"> <el-tab-pane label="暂态报告" name="5" lazy v-if="!isReload">
<TransientReport /> <TransientReport />
</el-tab-pane> </el-tab-pane>
@@ -70,7 +70,7 @@ const activeName = ref('3')
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}) })
const handleNodeClick = (data: any, node: any) => { const handleNodeClick = (data: any, node: any) => {

View File

@@ -49,7 +49,7 @@ const showTree = ref(false)
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
params.value.deptIndex = adminInfo.$state.deptId params.value.deptIndex = adminInfo.$state.deptId
params.value.searchBeginTime = datePickerRef.value.timeValue[0] params.value.searchBeginTime = datePickerRef.value.timeValue[0]

View File

@@ -17,6 +17,7 @@
</el-form-item> --> </el-form-item> -->
</template> </template>
<template #operation> <template #operation>
<!-- <el-button icon="el-icon-Download" type="primary" @click="preview">预览报告</el-button> -->
<el-button icon="el-icon-Download" type="primary" @click="exportEvent">生成报告</el-button> <el-button icon="el-icon-Download" type="primary" @click="exportEvent">生成报告</el-button>
</template> </template>
</TableHeader> </TableHeader>
@@ -175,7 +176,7 @@ provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}) })
@@ -202,12 +203,41 @@ const exportEvent = () => {
const url = window.URL.createObjectURL(blob) const url = window.URL.createObjectURL(blob)
const link = document.createElement('a') // 创建a标签 const link = document.createElement('a') // 创建a标签
link.href = url link.href = url
link.download = '监测点报告' // 设置下载的文件名 link.download = monitoringPoint.state.lineName.split('>').at(-1)+'_暂态报告' // 设置下载的文件名
document.body.appendChild(link) document.body.appendChild(link)
link.click() //执行下载 link.click() //执行下载
document.body.removeChild(link) document.body.removeChild(link)
}) })
} }
const preview = () => {
if (dotList.value.level != 6) {
return ElMessage({
message: '请选择监测点进行预览!',
type: 'warning'
})
}
let a = ''
formd.value.lineId = monitoringPoint.state.lineId
formd.value.lineName = monitoringPoint.state.lineName.split('>').at(-1)
formd.value.searchBeginTime = TableHeaderRef.value.datePickerRef.timeValue[0]
formd.value.searchEndTime = TableHeaderRef.value.datePickerRef.timeValue[1]
formd.value.flag = TableHeaderRef.value.datePickerRef.interval
ElMessage('生成报告中,请稍等!')
getLineExport(formd.value).then((res: any) => {
let blob = new Blob([res], {
type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=UTF-8'
})
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a') // 创建a标签
link.href = url
link.download = monitoringPoint.state.lineName.split('>').at(-1)+'_暂态报告' // 设置下载的文件名
document.body.appendChild(link)
link.click() //执行下载
document.body.removeChild(link)
})
}
</script> </script>
<style lang="scss"> <style lang="scss">
.splitpanes.default-theme .splitpanes__pane { .splitpanes.default-theme .splitpanes__pane {

View File

@@ -182,7 +182,7 @@ provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
const dom = document.getElementById('navigation-splitpanes') const dom = document.getElementById('navigation-splitpanes')
if (dom) { if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100) size.value = Math.round((180 / dom.offsetHeight) * 120)
} }
}) })
getList({ getList({