修改测试bug

This commit is contained in:
guanj
2025-07-10 16:32:49 +08:00
parent 226031a451
commit 2f5ab61e9c
57 changed files with 1962 additions and 1143 deletions

View File

@@ -3001,10 +3001,10 @@ const area = () => {
month = '0' + (month + 1)
}
let day: any = data.getDate()
if (day + 1 >= 10) {
day = day + 1
if (day >= 10) {
day = day
} else {
day = '0' + (day + 1)
day = '0' + (day )
}
deviceBODetail.value.thisTimeCheck = year + '-' + month + '-' + day
deviceBODetail.value.loginTime = year + '-' + month + '-' + day

View File

@@ -42,6 +42,7 @@ import MyEchart from '@/components/echarts/MyEchart.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData'
import * as echarts from 'echarts/core'
import { Top } from '@element-plus/icons-vue/dist/types'
const dictData = useDictData()
const options = ref({})
@@ -112,19 +113,10 @@ const tableStore = new TableStore({
itemHeight: 15,
itemGap: 25
},
toolbox: {
show: true,
feature: {
saveAsImage: {
// bottom: '10px',
show: true,
title: '保存'
// yAxisIndex: 'none'
}
},
right: 0,
top: 0
},
toolbox: {
top: 0,
right: 10,
},
// tooltip: {
// backgroundColor: '#fff',
// textStyle: {

View File

@@ -1,11 +1,11 @@
<template>
<div class="default-main online">
<div class="online_header">
<TableHeader date-picker ref="tableHeaderRef">
<TableHeader date-picker area ref="tableHeaderRef">
<template #select>
<el-form-item label="统计类型:">
<el-select
v-model="formData.statisticalType"
v-model="tableStore.table.params.statisticalType"
placeholder="请选择统计类型"
value-key="id"
style="width: 100%"
@@ -18,58 +18,10 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="区域选择:">
<!-- <el-select ref="select1" v-model="deptName" placeholder="请选择所属部门区域" style="width: 100%">
<el-option :value="formData.deptIndex" style="height: auto"> -->
<!-- {{ formData.deptIndex }} -->
<el-cascader
v-model="formData.deptIndex"
:props="defaultProps"
:options="treeData"
clearable
filterable
collapse-tags
placeholder="请选择区域"
/>
<!-- <el-tree
ref="tree"
v-model="formData.deptName"
:data="treeData"
node-key="id"
accordion
:default-expanded-keys="idArr"
:props="defaultProps"
@node-click="handleNodeClick"
>
<template #default="{ node, data }">
<span :title="data.name">{{ data?.name }}</span>
</template>
</el-tree> -->
<!-- </el-option>
</el-select> -->
</el-form-item>
<!-- <el-form-item label="电压等级:">
<el-select
v-model="formData.scale"
multiple
collapse-tags
clearable
placeholder="请选择电压等级"
style="width: 100%"
value-key="id"
>
<el-option
v-for="item in voltageleveloption"
:key="item.id"
:label="item.name"
:value="item"
></el-option>
</el-select>
</el-form-item> -->
<el-form-item label="终端厂家:">
<el-select
v-model="formData.manufacturer"
v-model="tableStore.table.params.manufacturer"
multiple
collapse-tags
clearable
@@ -85,24 +37,6 @@
></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="干扰源类型:">
<el-select
v-model="formData.loadType"
multiple
collapse-tags
clearable
placeholder="请选择干扰源类型"
style="width: 100%"
value-key="id"
>
<el-option
v-for="(item, index) in interfereoption"
:key="index"
:label="item.name"
:value="item"
></el-option>
</el-select>
</el-form-item> -->
</template>
</TableHeader>
</div>
@@ -151,7 +85,7 @@
></path>
</svg>
</p>
<span style="color: #ffcc33">热备用状态</span>
<span style="color: #ffcc33">检修状态</span>
</li>
<li>
<p style="background: #cc0000">
@@ -178,7 +112,7 @@
</div>
<Table
ref="tableRef"
:tree-config="{ transform: true,parentField: 'uPid', rowField: 'uId' }"
:tree-config="{ transform: true, parentField: 'uPid', rowField: 'uId' }"
:scroll-y="{ enabled: true }"
v-if="activeName == 0"
/>
@@ -291,7 +225,7 @@ const tableStore = new TableStore({
}
},
{
title: '热备用(台)',
title: '检修(台)',
field: 'reaFlag',
type: 'html',
align: 'center',
@@ -329,40 +263,39 @@ const tableStore = new TableStore({
}
}
],
beforeSearchFun: () => {
tableStore.table.params.deptIndex = formData.value.deptIndex
tableStore.table.params.statisticalType = formData.value.statisticalType
tableStore.table.params.scale = formData.value.scale
tableStore.table.params.manufacturer = formData.value.manufacturer
tableStore.table.params.loadType = formData.value.loadType
tableStore.table.params.serverName = 'harmonicBoot'
delete tableStore.table.params.timeFlag
delete tableStore.table.params.startTime
delete tableStore.table.params.endTime
delete tableStore.table.params.pageNum
delete tableStore.table.params.pageSize
// tableStore.table.params.searchBeginTime = tableHeaderRef.value.datePickerRef.timeValue[0]
// tableStore.table.params.searchEndTime = tableHeaderRef.value.datePickerRef.timeValue[1]
},
// beforeSearchFun: () => {
// tableStore.table.params.deptIndex = formData.value.deptIndex
// tableStore.table.params.statisticalType = formData.value.statisticalType
// tableStore.table.params.scale = formData.value.scale
// tableStore.table.params.manufacturer = formData.value.manufacturer
// tableStore.table.params.loadType = formData.value.loadType
// tableStore.table.params.serverName = 'harmonicBoot'
// // delete tableStore.table.params.timeFlag
// // delete tableStore.table.params.startTime
// // delete tableStore.table.params.endTime
// // delete tableStore.table.params.pageNum
// // delete tableStore.table.params.pageSize
// // tableStore.table.params.searchBeginTime = tableHeaderRef.value.datePickerRef.timeValue[0]
// // tableStore.table.params.searchEndTime = tableHeaderRef.value.datePickerRef.timeValue[1]
// },
loadCallback: () => {
tableStore.table.data = tree2List(tableStore.table.data, Math.random() * 1000)
tableStore.table.column[0].title = formData.value.statisticalType.name
chartsRef.value&&chartsRef.value.getTableStoreParams(tableStore.table.params)
chartsRef.value && chartsRef.value.getTableStoreParams(tableStore.table.params)
setTimeout(() => {
activeName.value == 0 && tableRef.value && tableRef.value.getRef().setAllTreeExpand(true)
}, 0)
}
})
const handleSearch = () => {
formData.value.searchBeginTime = datePickerRef.value.timeValue[0]
formData.value.searchEndTime = datePickerRef.value.timeValue[1]
}
tableStore.table.params.deptIndex = ''
tableStore.table.params.statisticalType = []
tableStore.table.params.scale = []
tableStore.table.params.manufacturer = []
tableStore.table.params.loadType = []
tableStore.table.params.deptIndex = treeData.value[0]?.id
tableStore.table.params.statisticalType = classificationData[0]
tableStore.table.params.scale = voltageleveloption
tableStore.table.params.manufacturer = terminaloption
tableStore.table.params.loadType = interfereoption
tableStore.table.params.serverName = 'harmonicBoot'
provide('tableStore', tableStore)
const tree2List = (list: any, id?: string) => {
//存储结果的数组
@@ -403,7 +336,6 @@ watch(
)
</script>
<style lang="scss" scoped>
.table_legend {
width: 100%;
height: 40px;

View File

@@ -1,103 +1,114 @@
<template>
<el-dialog draggable v-model="dialogVisible" :title="title" width="70%">
<div style="height: 55vh">
<vxe-table height="auto" auto-resize :data="tableData" v-loading="loading" v-bind="defaultAttribute"
:key="key">
<vxe-table
height="auto"
auto-resize
:data="tableData"
v-loading="loading"
v-bind="defaultAttribute"
:key="key"
>
<vxe-column field="name" title="名称"></vxe-column>
<vxe-column field="powerCompany" title="供电公司" v-if="voltageLevelFlag"></vxe-column>
<vxe-column field="substation" title="变电站" v-if="voltageLevelFlag"></vxe-column>
<vxe-column field="busBar" title="母线" v-if="voltageLevelFlag"></vxe-column>
<vxe-column field="name" title="名称"></vxe-column>
<vxe-column field="powerCompany" title="供电公司" v-if="voltageLevelFlag"></vxe-column>
<vxe-column field="substation" title="变电站" v-if="voltageLevelFlag"></vxe-column>
<vxe-column field="busBar" title="母线" v-if="voltageLevelFlag"></vxe-column>
<vxe-column field="voltageLevel" title="电压等级"
v-if="statisticalName == '谐波电压' && !voltageLevelFlag"></vxe-column>
<vxe-column field="data" :title="statisticalName">
<template #default="scope">
<span v-if="scope.row.data == 3.14159" type="primary" size="small">暂无数据</span>
<span v-else type="primary" size="small">
{{ parseFloat(scope.row.data.toFixed(2)) }}
</span>
</template>
</vxe-column>
<vxe-column field="zd" title="评估">
<template #default="scope">
<span v-if="
0 <= scope.row.data &&
scope.row.data < 1 &&
scope.row.data !== 3.14159
" style=" font-weight: bold;color: #339966;">
无污染
</span>
<span v-if="
1 <= scope.row.data &&
scope.row.data < 1.2 &&
scope.row.data !== 3.14159
" style=" font-weight: bold;color: #3399ff;">
轻微污染
</span>
<span v-if="
1.2 <= scope.row.data &&
scope.row.data < 1.6 &&
scope.row.data !== 3.14159
" style=" font-weight: bold;color: #ffcc33;">
轻度污染
</span>
<span v-if="
1.6 <= scope.row.data &&
scope.row.data < 2 &&
scope.row.data !== 3.14159
" style=" font-weight: bold;color: #ff9900;">
中度污染
</span>
<span v-if="
2 <= scope.row.data && scope.row.data && scope.row.data !== 3.14159
" style=" font-weight: bold;color: #cc0000;">
重度污染
</span>
<span v-if="scope.row.data == 3.14159" style="color: #000;">
暂无评估
</span>
</template>
</vxe-column>
</vxe-table>
</div>
<vxe-column
field="voltageLevel"
title="电压等级"
v-if="statisticalName == '谐波电压' && !voltageLevelFlag"
>
<template #default="scope">
{{ scaleList.filter(item => item.id == scope.row.voltageLevel)[0].name }}
</template>
</vxe-column>
<vxe-column field="data" :title="statisticalName">
<template #default="scope">
<span v-if="scope.row.data == 3.14159" type="primary" size="small">暂无数据</span>
<span v-else type="primary" size="small">
{{ parseFloat(scope.row.data.toFixed(2)) }}
</span>
</template>
</vxe-column>
<vxe-column field="zd" title="评估">
<template #default="scope">
<span
v-if="0 <= scope.row.data && scope.row.data < 1 && scope.row.data !== 3.14159"
style="font-weight: bold; color: #339966"
>
无污染
</span>
<span
v-if="1 <= scope.row.data && scope.row.data < 1.2 && scope.row.data !== 3.14159"
style="font-weight: bold; color: #3399ff"
>
轻微污染
</span>
<span
v-if="1.2 <= scope.row.data && scope.row.data < 1.6 && scope.row.data !== 3.14159"
style="font-weight: bold; color: #ffcc33"
>
轻度污染
</span>
<span
v-if="1.6 <= scope.row.data && scope.row.data < 2 && scope.row.data !== 3.14159"
style="font-weight: bold; color: #ff9900"
>
中度污染
</span>
<span
v-if="2 <= scope.row.data && scope.row.data && scope.row.data !== 3.14159"
style="font-weight: bold; color: #cc0000"
>
重度污染
</span>
<span v-if="scope.row.data == 3.14159" style="color: #000">暂无评估</span>
</template>
</vxe-column>
</vxe-table>
</div>
</el-dialog>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { ref, reactive } from 'vue'
import { useDictData } from '@/stores/dictData'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { getSubstationInfoById, getLineInfoById } from '@/api/harmonic-boot/area'
const dialogVisible = ref(false)
const dictData = useDictData()
const loading = ref(false)
const voltageLevelFlag = ref(false)
const tableData = ref([])
const scaleList = dictData.getBasicData('Dev_Voltage_Stand')
const title = ref('')
const key = ref(0)
const statisticalName = ref('')
const open = (row: any, flag: boolean, params: any) => {
console.log("🚀 ~ open ~ row:", row)
console.log('🚀 ~ open ~ row:', row)
voltageLevelFlag.value = flag
loading.value = true
title.value = row.name + '详情'
statisticalName.value = params.statisticalType.name
statisticalName.value = params.statisticalType.name
tableData.value = []
if (flag) {
getLineInfoById({ ...params, deptIndex: row.pid, id: row.id ,powerFlag: row.powerFlag }).then((res: any) => {
tableData.value = res.data
loading.value = false
}).catch(() => {
loading.value = false
})
getLineInfoById({ ...params, deptIndex: row.pid, id: row.id, powerFlag: row.powerFlag })
.then((res: any) => {
tableData.value = res.data
loading.value = false
})
.catch(() => {
loading.value = false
})
} else {
getSubstationInfoById({ ...params, deptIndex: row.id }).then((res: any) => {
tableData.value = res.data
loading.value = false
}).catch(() => {
loading.value = false
})
getSubstationInfoById({ ...params, deptIndex: row.id })
.then((res: any) => {
tableData.value = res.data
loading.value = false
})
.catch(() => {
loading.value = false
})
}
key.value += 1

View File

@@ -98,7 +98,7 @@
@click="queryline(item1, true)"
>
<el-tag
v-if="item1.data == 3.14159 "
v-if="item1.data == 3.14159"
style="background: #ccc; color: #fff"
size="small"
>
@@ -271,6 +271,9 @@ const tableStore = new TableStore({
url: '/harmonic-boot/PollutionSubstation/deptSubstationRelations',
method: 'POST',
column: [],
beforeSearchFun: () => {
tableStore.table.params.reportFlag = tableStore.table.params.interval
},
loadCallback: () => {
histogram(tableStore.table.data)
}
@@ -281,7 +284,7 @@ tableStore.table.params.deptIndex = dictData.state.area[0].id
tableStore.table.params.statisticalType = options[0]
tableStore.table.params.monitorFlag = 2
tableStore.table.params.powerFlag = sign[0]?.algoDescribe || 0
tableStore.table.params.reportFlag = 3
tableStore.table.params.serverName = 'event-boot'
const handleTabChange = (val: any) => {
if (val == 0) return
@@ -318,7 +321,7 @@ const histogram = (res: any) => {
'&nbsp' +
'&nbsp' +
(params[i].value == 0.14159
? '无污染'
? '暂无数据'
: params[i].value < 1
? '无污染'
: params[i].value < 1.2
@@ -385,8 +388,7 @@ const histogram = (res: any) => {
// 定制显示(按顺序)
color: function (params) {
if (params.value == 0.14159) {
} else if (params.value == 0) {
if (params.value == 0) {
return '#339966'
} else if (params.value > 2) {
return new echarts.graphic.LinearGradient(
@@ -448,7 +450,7 @@ const histogram = (res: any) => {
0 < params.value &&
params.value <= 1 &&
params.value >= 0 &&
params.value !== 0.05
params.value !== 0.14159
) {
return new echarts.graphic.LinearGradient(
0,
@@ -463,7 +465,7 @@ const histogram = (res: any) => {
],
false
)
} else if (params.value == 0.05) {
} else if (params.value == 0.14159) {
return new echarts.graphic.LinearGradient(
0,
1,
@@ -594,7 +596,7 @@ const map = (res: any) => {
let d = element.name.split('\n')
let p1 = {
name: d[0],
value: element.data
value: element.data == 3.14159 ? -1 : element.data
}
arr1.push(p1)
@@ -673,7 +675,7 @@ const map = (res: any) => {
},
{
gte: -1,
lte: 0.05,
lte: 0.14159,
label: '无数据',
color: '#ccc'
}
@@ -786,7 +788,7 @@ const layout1 = mainHeight(93) as any
.legend {
position: absolute;
right: 15px;
top: 17px;
top: 20px;
z-index: 99;
}
</style>

View File

@@ -22,8 +22,8 @@
<vxe-column field="name" title="名称"></vxe-column>
<vxe-column field="data" :title="changeName">
<template #default="scope">
<span v-if="scope.row.data == -1" type="primary" size="small">暂无数据</span>
<span v-if="scope.row.data !== -1 && scope.row.data !== 0.1" type="primary"
<span v-if="scope.row.data == 3.14159" type="primary" size="small">暂无数据</span>
<span v-if="scope.row.data !== 3.14159 && scope.row.data !== 0.1" type="primary"
size="small">
{{ scope.row.data }}
</span>
@@ -155,7 +155,7 @@ const map = (res: any) => {
let d = element.name.split('\n')
let p1 = {
name: d[0],
value: element.data
value: element.data == 3.14159 ? -1 : element.data
}
arr1.push(p1)

View File

@@ -1,11 +1,11 @@
<template>
<div style="display: flex; flex-direction: column; height: 100%; position: relative" >
<div style="display: flex; flex-direction: column; height: 100%; position: relative">
<el-form :inline="true">
<el-form-item label="多监测点">
<el-checkbox v-model="checked" @change="checkChange" />
</el-form-item>
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
<DatePicker ref="datePickerRef" ></DatePicker>
</el-form-item>
<el-form-item label="指标类型:">
<el-select
@@ -116,7 +116,7 @@
<SecondSheet v-if="options" style="background: #fff; z-index: 10">
<el-button
style="position: absolute; right: 0; top: 0; cursor: pointer; z-index: 3"
icon="el-icon-Back"
icon="el-icon-Back"
size="small"
@click="close"
>
@@ -259,7 +259,7 @@ const conditionChange = () => {
}
if (
formData.condition.includes('46') ||
// formData.condition.includes('47') ||
// formData.condition.includes('47') ||
// formData.condition.includes('48') ||
formData.condition.includes('49')
) {
@@ -275,7 +275,7 @@ const conditionChange = () => {
formData.condition.includes('43') ||
formData.condition.includes('44') ||
(formData.condition.includes('45') && formData.condition.includes('46')) ||
// formData.condition.includes('47') ||
// formData.condition.includes('47') ||
// formData.condition.includes('48') ||
formData.condition.includes('49')
) {
@@ -294,7 +294,7 @@ const conditionChange = () => {
}
if (
formData.condition.includes('46') ||
// formData.condition.includes('47') ||
// formData.condition.includes('47') ||
// formData.condition.includes('48') ||
formData.condition.includes('49')
) {
@@ -311,7 +311,7 @@ const conditionChange = () => {
formData.condition.includes('44') ||
formData.condition.includes('45')) &&
(formData.condition.includes('46') ||
// formData.condition.includes('47') ||
// formData.condition.includes('47') ||
// formData.condition.includes('48') ||
formData.condition.includes('49'))
) {
@@ -323,7 +323,7 @@ const conditionChange = () => {
}
if (
formData.condition.includes('46') ||
// formData.condition.includes('47') ||
// formData.condition.includes('47') ||
// formData.condition.includes('48') ||
formData.condition.includes('49')
) {
@@ -350,7 +350,7 @@ const conditionChange = () => {
formData.condition.includes('44') ||
formData.condition.includes('45')) &&
(formData.condition.includes('46') ||
// formData.condition.includes('47') ||
// formData.condition.includes('47') ||
// formData.condition.includes('48') ||
formData.condition.includes('49'))
) {
@@ -362,7 +362,7 @@ const conditionChange = () => {
}
if (
formData.condition.includes('46') ||
// formData.condition.includes('47') ||
// formData.condition.includes('47') ||
// formData.condition.includes('48') ||
formData.condition.includes('49')
) {
@@ -389,7 +389,7 @@ const conditionChange = () => {
formData.condition.includes('44') ||
formData.condition.includes('45')) &&
(formData.condition.includes('46') ||
// formData.condition.includes('47') ||
// formData.condition.includes('47') ||
// formData.condition.includes('48') ||
formData.condition.includes('49'))
) {
@@ -401,7 +401,7 @@ const conditionChange = () => {
}
if (
formData.condition.includes('46') ||
// formData.condition.includes('47') ||
// formData.condition.includes('47') ||
// formData.condition.includes('48') ||
formData.condition.includes('49')
) {

View File

@@ -132,7 +132,7 @@ const init = (row: any) => {
) / 100
SvData[`h${i - 0.5}`] =
Math.floor(Math.max(...[row.V.A[`SV_` + i], row.V.B[`SV_` + i], row.V.C[`SV_` + i]].map(Number)) * 100) /
Math.floor(Math.max(...[row.V.A[`SV_` + (i-1)], row.V.B[`SV_` + (i-1)], row.V.C[`SV_` + (i-1)]].map(Number)) * 100) /
100
iData[`h${i + 1}`] =
Math.floor(
@@ -140,7 +140,7 @@ const init = (row: any) => {
) / 100
}
SvData[`h49.5`] =
Math.floor(Math.max(...[row.V.A[`SV_50`], row.V.B[`SV_50`], row.V.C[`SV_50`]].map(Number)) * 100) / 100
Math.floor(Math.max(...[row.V.A[`SV_49`], row.V.B[`SV_49`], row.V.C[`SV_49`]].map(Number)) * 100) / 100
tabsList.value[0].data = vData
tabsList.value[1].data = SvData

View File

@@ -341,7 +341,27 @@ const setEcharts = () => {
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0
borderWidth: 0,
formatter(params: any) {
const xname = params[0].value[0]
let str = `${xname}<br>`
params.forEach((el: any, index: any) => {
let marker = ''
// if (el.value[3] == 'dashed') {
// for (let i = 0; i < 3; i++) {
// marker += `<span style="display:inline-block;border: 2px ${el.color} solid;margin-right:5px;width:10px;height:0px;background-color:#ffffff00;"></span>`
// }
// } else {
// marker = `<span style="display:inline-block;border: 2px ${el.color} ${el.value[3]};margin-right:5px;width:40px;height:0px;background-color:#ffffff00;"></span>`
// }
str += `${el.marker} ${el.seriesName.split('(')[0]}${
el.value[1] ? el.value[1] + ' ' + (el.value[2] || '') : '-'
}<br>`
})
return str
}
},
series: []
}

View File

@@ -7,7 +7,7 @@
<el-checkbox v-model="checked" @change="checkChange" />
</el-form-item>
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
<DatePicker ref="datePickerRef" :theCurrentTime="true"></DatePicker>
</el-form-item>
<el-form-item label="指标类型:">
<el-select
@@ -67,7 +67,7 @@
<!-- <el-form :inline="true">
</el-form> -->
<div id="canvas" class="mt10" :style="height1" v-loading="loading">
<div id="canvas" class="mt10" :style="height1" style="overflow-y: auto" v-loading="loading">
<my-echart :options="item.option" v-for="item in list" :style="height" @triggerPoint="triggerPoint" />
</div>
</div>
@@ -90,6 +90,7 @@ import { queryEventDetailByEventId } from '@/api/event-boot/highAndLowPressure'
import TableStore from '@/utils/tableStore'
import waveForm from '@/components/echarts/waveForm.vue'
import html2canvas from 'html2canvas'
import { ElMessage } from 'element-plus'
import * as echarts from 'echarts' // 全引入
const datePickerRef = ref()
const monitoringPoint = useMonitoringPoint()
@@ -139,7 +140,7 @@ onMounted(() => {
init()
})
const height: any = ref(mainHeight(200, 1))
const height1: any = ref(mainHeight(200))
const height1: any = ref(mainHeight(160))
const checkChange = () => {
if (checked.value) {
monitoringPoint.setShowCheckBox(true)
@@ -149,6 +150,9 @@ const checkChange = () => {
}
}
const init = () => {
if (formData.condition.length == 0) {
return ElMessage.warning('请选择指标类型')
}
loading.value = true
formData.lineId = checked.value ? monitoringPoint.state.lineIds : [monitoringPoint.state.lineId]
formData.searchBeginTime = datePickerRef.value.timeValue[0]
@@ -162,13 +166,14 @@ const init = () => {
}
})
getHistoryResult(formData)
.then((res: any) => {
.then(async (res: any) => {
if (directionValue >= 0) {
res.data[directionValue].targetName = '谐波电流方向'
traceability.value = [(res.data as [])[directionValue]]
}
list.value = []
shujuchuli(res)
await shujuchuli(res)
await selectChange(tableHeaderRef.value.showSelect)
loading.value = false
})
.catch(() => {
@@ -1146,7 +1151,7 @@ const shujuchuli = (res: any) => {
rendering()
}
const rendering = () => {
height.value = mainHeight(160, list.value.length)
height.value = mainHeight(160, list.value.length > 3 ? 3 : list.value.length)
list.value.forEach((item: any) => {
if (item.targetName == '电压不平衡') {
@@ -1406,22 +1411,22 @@ const getEcharts = () => {
? 'A相谐波电流方向:无<br/>'
: 'A相谐波电流方向:流出<br/>'
} else if (params[i].seriesName == 'B相谐波电流方向') {
tips += params[i].marker +
params[i].value[1] > 0
tips +=
params[i].marker + params[i].value[1] > 0
? 'B相谐波电流方向:流入<br/>'
: params[i].value[1] == 0
? 'B相谐波电流方向:无<br/>'
: 'B相谐波电流方向:流出<br/>'
} else if (params[i].seriesName == 'C相谐波电流方向') {
tips += params[i].marker +
params[i].value[1] > 0
tips +=
params[i].marker + params[i].value[1] > 0
? 'C相谐波电流方向:流入<br/>'
: params[i].value[1] == 0
? 'C相谐波电流方向:无<br/>'
: 'C相谐波电流方向:流出<br/>'
} else if (params[i].seriesName == '总谐波电流方向') {
tips += params[i].marker +
params[i].value[1] > 0
tips +=
params[i].marker + params[i].value[1] > 0
? '总谐波电流方向:流入<br/>'
: params[i].value[1] == 0
? '总谐波电流方向:无<br/>'
@@ -1430,22 +1435,22 @@ const getEcharts = () => {
let str = (params[i].value[1] * 1).toString()
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
let str1 = str.replace(reg, '$1,')
tips += params[i].marker + params[i].seriesName.replace('(kV)', '') + ':' + str1 + 'kV<br/>'
tips += params[i].marker + params[i].seriesName.replace('(kV)', '') + ':' + str1 + 'kV<br/>'
} else if (params[i].seriesName == '零序电压(V)' || params[i].seriesName == '负序电压(V)') {
let str = (params[i].value[1] * 1).toString()
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
let str1 = str.replace(reg, '$1,')
tips += params[i].marker + params[i].seriesName.replace('(V)', '') + ':' + str1 + 'V<br/>'
tips += params[i].marker + params[i].seriesName.replace('(V)', '') + ':' + str1 + 'V<br/>'
} else if (params[i].seriesName !== '正序电压(kV)') {
let str = (params[i].value[1] * 1).toString()
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
let str1 = str.replace(reg, '$1,')
tips += params[i].marker + params[i].seriesName + ':' + str1 + '<br/>'
tips += params[i].marker + params[i].seriesName + ':' + str1 + '<br/>'
} else {
let str = (params[i].value[2] * 1).toString()
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
let str1 = str.replace(reg, '$1,')
tips += params[i].marker + params[i].seriesName + ':' + str1 + '<br/>'
tips += params[i].marker + params[i].seriesName + ':' + str1 + '<br/>'
let str2 = (params[i].value[3] * 1).toString()
let reg2 = str2.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
@@ -1453,7 +1458,7 @@ const getEcharts = () => {
// if(params[i].seriesName){
// }
tips += params[i].marker + params[i].seriesName + ':' + str12 + '<br/>'
tips += params[i].marker + params[i].seriesName + ':' + str12 + '<br/>'
}
}
@@ -1806,7 +1811,7 @@ const conditionChange = () => {
]
}
setTimeout(() => {
console.log('🚀 ~ setTimeout ~ tableHeaderRef.value:', tableHeaderRef.value)
// console.log('🚀 ~ setTimeout ~ tableHeaderRef.value:', tableHeaderRef.value)
tableHeaderRef.value && tableHeaderRef.value?.computedSearchRow()
}, 100)
@@ -1830,7 +1835,7 @@ const triggerPoint = (data: any) => {
}
// 计算高度
const selectChange = (flag: boolean) => {
height.value = mainHeight(flag ? 220 : 160, list.value.length)
height.value = mainHeight(flag ? 220 : 160, list.value.length > 3 ? 3 : list.value.length)
}
const backbxlb = () => {
view.value = true

View File

@@ -98,15 +98,16 @@ const init = () => {
// }
}
for (let i = 0; i < steadyInfoData.length; i++) {
if (steadyInfoData[i] == 3.1415) {
steadyInfoData[i] = 1
yData2.push(steadyInfoData[i])
} else if (steadyInfoData[i] == 3.14159) {
steadyInfoData[i] = 1
yData2.push(steadyInfoData[i])
} else if (steadyInfoData[i] !== 3.14159) {
yData2.push(steadyInfoData[i])
}
yData2.push(steadyInfoData[i])
// if (steadyInfoData[i] == 3.14159) {
// steadyInfoData[i] = 0
// yData2.push(steadyInfoData[i])
// } else if (steadyInfoData[i] == 3.14159) {
// steadyInfoData[i] = 0
// yData2.push(steadyInfoData[i])
// } else if (steadyInfoData[i] !== 3.14159) {
// yData2.push(steadyInfoData[i])
// }
}
let series: any[] = [
{
@@ -183,13 +184,13 @@ const init = () => {
name: formData.periodBeginTime + '至' + formData.periodEndTime,
type: 'bar',
barMaxWidth: 30,
label: {
show: true,
position: 'top',
distance: 2,
color: '#fff',
fontWeight: 'bolder'
},
// label: {
// show: true,
// position: 'top',
// distance: 2,
// color: '#fff',
// fontWeight: 'bolder'
// },
data: yData2,
itemStyle: {
color: (params: any) => {
@@ -197,6 +198,8 @@ const init = () => {
return gradeColor3[0]
} else if (params.value > 60) {
return gradeColor3[1]
} else if (params.value == 3.14159) {
return '#ccc'
} else {
return gradeColor3[2]
}

View File

@@ -1,23 +1,22 @@
<template>
<div style="display: flex; flex-direction: column; height: 100%">
<TableHeader ref="TableHeaderRef" :showSearch="false" >
<TableHeader ref="TableHeaderRef" :showSearch="false">
<template v-slot:select>
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
<el-form-item label="指标">
<el-radio-group v-model="formData.harmState">
<el-radio-button :label="0">谐波电压含有率</el-radio-button>
<el-radio-button :label="1">谐波电流幅值</el-radio-button>
</el-radio-group>
</el-form-item>
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
<el-form-item label="指标">
<el-radio-group v-model="formData.harmState">
<el-radio-button :label="0">谐波电压含有率</el-radio-button>
<el-radio-button :label="1">谐波电流幅值</el-radio-button>
</el-radio-group>
</el-form-item>
</template>
<template v-slot:operation>
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</template>
</TableHeader>
<vxe-table :data="analysisData" v-bind="defaultAttribute">
<vxe-column field="name" title="指标" width="140px"></vxe-column>
<vxe-column
@@ -27,7 +26,7 @@
width="80px"
></vxe-column>
</vxe-table>
<div style="flex: 1" class="mt10" v-loading="loading">
<div style="flex: 1" class="mt10" v-loading="loading">
<my-echart :options="options" />
</div>
</div>
@@ -69,8 +68,12 @@ const init = () => {
analysisData.value.push(
{
name: '谐波电流幅值(A)',
originData: res.data.harmInHarmValue.map((item: number) => item.toFixed(3)),
...res.data.harmInHarmValue.map((item: number) => item.toFixed(3))
originData: res.data.harmInHarmValue.map((item: number) =>
item == null || item == 3.14159 ? 0.14159 : Math.floor(item * 1000) / 1000
),
...res.data.harmInHarmValue.map((item: number) =>
item == null || item == 3.14159 ? '/' : Math.floor(item * 1000) / 1000
)
},
{
name: '国标限值(A)',
@@ -82,8 +85,12 @@ const init = () => {
analysisData.value.push(
{
name: '谐波电压含有率(%)',
originData: res.data.harmInHarmValue.map((item: number) => item.toFixed(3)),
...res.data.harmInHarmValue.map((item: number) => item.toFixed(3))
originData: res.data.harmInHarmValue.map((item: number) =>
item == null || item == 3.14159 ? 0.14159 : Math.floor(item * 1000) / 1000
),
...res.data.harmInHarmValue.map((item: number) =>
item == null || item == 3.14159 ? '/' : Math.floor(item * 1000) / 1000
)
},
{
name: '国标限值(%)',

View File

@@ -1,26 +1,26 @@
<template>
<div style="display: flex; flex-direction: column; height: 100%">
<TableHeader ref="TableHeaderRef" :showSearch="false" >
<TableHeader ref="TableHeaderRef" :showSearch="false">
<template v-slot:select>
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
<el-form-item label="对比">
<el-select v-model="searchType" clearable placeholder="可选择同比、环比">
<el-option
v-for="item in searchTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
<el-form-item label="对比">
<el-select v-model="searchType" clearable placeholder="可选择同比、环比">
<el-option
v-for="item in searchTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</template>
<template v-slot:operation>
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</template>
</TableHeader>
<div style="flex: 1; display: flex; overflow: hidden" class="mt10" v-loading="loading">
<div style="flex: 1">
<my-echart :options="options1" />
@@ -90,11 +90,15 @@ const init = () => {
formData.periodBeginTime = ''
formData.periodEndTime = ''
}
Promise.all([getComFlagInfoData(formData), getRunInfoData(formData)]).then((res: any) => {
handlerOptions1(res[0].data)
handlerOptions2(res[1].data)
loading.value = false
}).catch(() => { loading.value = false })
Promise.all([getComFlagInfoData(formData), getRunInfoData(formData)])
.then((res: any) => {
handlerOptions1(res[0].data)
handlerOptions2(res[1].data)
loading.value = false
})
.catch(() => {
loading.value = false
})
}
const handlerOptions1 = (data: any) => {
options1.value = {
@@ -106,13 +110,13 @@ const handlerOptions1 = (data: any) => {
},
tooltip: {
formatter: function (params: any) {
var res = params[0].name + '<br/>终端运行状态为:'
var res = params[0].data[0] + '<br/>终端运行状态为:'
var texts = ''
if (params[0].value === 2 || params[0].value === '2') {
if (params[0].data[1] === 2 || params[0].data[1] === '2') {
texts = '退出'
} else if (params[0].value === 0 || params[0].value === '0') {
} else if (params[0].data[1] === 0 || params[0].data[1] === '0') {
texts = '中断'
} else if (params[0].value === 1 || params[0].value === '1') {
} else if (params[0].data[1] === 1 || params[0].data[1] === '1') {
texts = '正常'
}
res = res + texts
@@ -120,11 +124,21 @@ const handlerOptions1 = (data: any) => {
}
},
xAxis: {
type: 'category',
data: data.updateTime
// type: 'category',
// data: data.updateTime
type: 'time',
name: '时间',
//
axisLabel: {
formatter: {
day: '{MM}-{dd}',
month: '{MM}',
year: '{yyyy}'
}
}
},
yAxis: {
name:'状态',
name: '状态',
type: 'value',
axisLabel: {
// 这里重新定义就可以
@@ -144,8 +158,9 @@ const handlerOptions1 = (data: any) => {
series: [
{
name: '中断运行状态',
data: data.type,
type: 'line'
data: data.type.map((item: any, index: number) => [data.updateTime[index], item]),
type: 'line',
step: 'end'
}
]
}
@@ -165,7 +180,7 @@ const handlerOptions2 = (data: any) => {
: [`${formData.searchBeginTime}${formData.searchEndTime}`]
},
yAxis: {
name:'%',
name: '%',
type: 'value'
},
series: [

View File

@@ -1,7 +1,7 @@
<template>
<el-dialog draggable width="1300px" class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-dialog draggable width="135 0px" class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<div style="display: flex">
<div :style="height1" class="mr10 box" style="width: 450px">
<div :style="height1" class="mr10 box" style="width: 500px">
<vxe-table
height="auto"
:data="TableData"
@@ -12,6 +12,7 @@
>
<vxe-column type="seq" title="序号" width="60px"></vxe-column>
<vxe-column field="date" title="日期"></vxe-column>
<vxe-column field="bdName" title="所属电站(场站)" width="120px"></vxe-column>
<vxe-column field="monitorName" title="监测点名称" width="120px"></vxe-column>
<vxe-column field="timeSum" title="告警时间(分钟)" width="80px"></vxe-column>
</vxe-table>

View File

@@ -18,25 +18,50 @@
:value="item.transtypeId"
></el-option>
</el-select>
<el-select
v-if="item.field == 'harmId'"
v-model="form[item.field]"
filterable
clearable
placeholder="请选择谐波源"
>
<el-option
v-for="item in characteristic"
:key="item.harmId"
:label="item.harmName"
:value="item.harmId"
></el-option>
</el-select>
<el-input-number
v-else-if="
item.field == 'transNum' ||
item.field == 'capacitorNum' ||
item.field == 'capacitorCapacity' ||
item.field == 'capacitorReactance'
item.field == 'capacitorReactance' ||
item.field == 'flickerCoeff' ||
item.field == 's'||
item.field == 'transhighCapacity'||
item.field == 'transImpedance'||
item.field == 'nonlinearloadPower'||
item.field == 'powerFactor'
"
style="width: 100%"
v-model="form[item.field]"
show-word-limit
:min="0"
placeholder="请输入值"
></el-input-number>
<el-select
v-else-if="item.field == 'capacitorScale'"
v-else-if="
item.field == 'capacitorScale' ||
item.field == 'linevoltageScale' ||
item.field == 'translowScale'
"
v-model="form[item.field]"
filterable
placeholder="请选择接入变电站"
placeholder="请选择电压等级"
>
<el-option
v-for="item in voltageleveloption"
@@ -64,15 +89,23 @@ import { reactive } from 'vue'
import { useDictData } from '@/stores/dictData'
import {
transformerList,
characteristicList,
assessTransformerParamAdd,
assessTransformerParamEdit,
capacitorAdd,
capacitorEdit
capacitorEdit,
windPowerAdd,
windPowerDdit,
loadParamAdd,
loadParamEdit,
shockAdd,
shockEdit
} from '@/api/advance-boot/assess'
import { ElMessage, ElMessageBox, ElDatePicker } from 'element-plus'
const emits = defineEmits(['init'])
const child: any = ref([])
const transformer: any = ref([])
const characteristic: any = ref([])
const form: any = ref({})
const dictData = useDictData()
//字典获取电压等级
@@ -86,6 +119,17 @@ const rules = {
capacitorCapacity: [{ required: true, message: '请输入单组容量', trigger: 'blur' }],
capacitorReactance: [{ required: true, message: '请输入电抗率', trigger: 'blur' }],
capacitorScale: [{ required: true, message: '请选择电压等级', trigger: 'change' }],
windgeneratorName: [{ required: true, message: '请输入风机名称', trigger: 'blur' }],
flickerCoeff: [{ required: true, message: '请输入风机闪变系数', trigger: 'blur' }],
s: [{ required: true, message: '请输入风机额定视在功率', trigger: 'blur' }],
loadName: [{ required: true, message: '请输入负荷名称', trigger: 'blur' }],
transhighCapacity: [{ required: true, message: '请输入配变容量', trigger: 'blur' }],
transImpedance: [{ required: true, message: '请输入配电变压器阻抗', trigger: 'blur' }],
nonlinearloadPower: [{ required: true, message: '请输入非线性负荷功率', trigger: 'blur' }],
powerFactor: [{ required: true, message: '请输入功率因数', trigger: 'blur' }],
linevoltageScale: [{ required: true, message: '请选择进线电压', trigger: 'change' }],
harmId: [{ required: true, message: '请选择谐波源特性', trigger: 'change' }],
translowScale: [{ required: true, message: '请选择配变低压侧电压', trigger: 'change' }],
}
const formRef = ref()
const dialogVisible = ref(false)
@@ -114,35 +158,66 @@ const info = async () => {
transformerList({}).then((res: any) => {
transformer.value = res.data
})
// 谐波源特特性
characteristicList({}).then((res: any) => {
characteristic.value = res.data
})
}
const submit = async () => {
formRef.value.validate((valid: any) => {
formRef.value.validate(async (valid: any) => {
if (valid) {
if (title.value == '新增_变压器参数维护') {
assessTransformerParamAdd(form.value).then((res: any) => {
await assessTransformerParamAdd(form.value).then((res: any) => {
ElMessage.success('新增成功')
emits('init', 0)
dialogVisible.value = false
})
} else if (title.value == '编辑_变压器参数维护') {
assessTransformerParamEdit(form.value).then((res: any) => {
await assessTransformerParamEdit(form.value).then((res: any) => {
ElMessage.success('修改成功')
emits('init', 0)
dialogVisible.value = false
})
} else if (title.value == '新增_电容器组参数维护') {
capacitorAdd(form.value).then((res: any) => {
await capacitorAdd(form.value).then((res: any) => {
ElMessage.success('新增成功')
emits('init', 1)
dialogVisible.value = false
})
} else if (title.value == '编辑_电容器组参数维护') {
capacitorEdit(form.value).then((res: any) => {
await capacitorEdit(form.value).then((res: any) => {
ElMessage.success('修改成功')
emits('init', 1)
dialogVisible.value = false
})
} else if (title.value == '新增_风电参数') {
await windPowerAdd(form.value).then((res: any) => {
ElMessage.success('新增成功')
emits('init', 2)
})
} else if (title.value == '编辑_风电参数') {
await windPowerDdit(form.value).then((res: any) => {
ElMessage.success('修改成功')
emits('init', 2)
})
} else if (title.value == '新增_用户负荷') {
await loadParamAdd(form.value).then((res: any) => {
ElMessage.success('新增成功')
emits('init', 3)
})
} else if (title.value == '编辑_用户负荷') {
await loadParamEdit(form.value).then((res: any) => {
ElMessage.success('修改成功')
emits('init', 3)
})
}else if (title.value == '新增_冲击负荷') {
await loadParamAdd(form.value).then((res: any) => {
ElMessage.success('新增成功')
emits('init', 4)
})
} else if (title.value == '编辑_冲击负荷') {
await loadParamEdit(form.value).then((res: any) => {
ElMessage.success('修改成功')
emits('init', 4)
})
}
dialogVisible.value = false
}
})
}

View File

@@ -43,11 +43,16 @@ import { useDictData } from '@/stores/dictData'
import {
assessTransformerParamList,
transformerList,
characteristicList,
assessTransformerParamDelete,
capacitorList,
capacitorDelete,
windPowerList,
windPowerDelete
windPowerDelete,
loadParamList,
loadParamDelete,
shockList,
shockDelete
} from '@/api/advance-boot/assess'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { ElMessage, ElMessageBox, ElDatePicker } from 'element-plus'
@@ -58,6 +63,7 @@ const dictData = useDictData()
//字典获取电压等级
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
const transformer: any = ref([])
const characteristic: any = ref([])
const addformRef = ref()
const xTableRef = ref()
@@ -118,15 +124,15 @@ const column: any = ref([
child: [
{
title: '风机名称',
field: 'name'
field: 'windgeneratorName'
},
{
title: '风机闪变系数',
field: 'name1'
title: '闪变系数',
field: 'flickerCoeff'
},
{
title: '风机额定视在功率',
field: 'name2'
title: '额定视在功率(kVA)',
field: 's'
}
]
},
@@ -137,88 +143,82 @@ const column: any = ref([
key: 'loadList',
child: [
{
title: '配电窒名称',
field: 'name'
title: '负荷名称',
field: 'loadName'
},
{
title: '进线电压',
field: 'name1'
field: 'linevoltageScale'
},
{
title: '配变容量(kVA)',
field: 'name2'
field: 'transhighCapacity'
},
{
title: '配电变压器阻抗(%)',
field: 'name3'
field: 'transImpedance'
},
{
title: '谐波源特性',
field: 'name4'
field: 'harmId'
},
{
title: '配变低压侧电压',
field: 'name5'
field: 'translowScale'
},
{
title: '非线性负荷功率(kW)',
field: 'name6'
field: 'nonlinearloadPower'
},
{
title: '功率因',
field: 'name7'
title: '功率因',
field: 'powerFactor'
}
]
},
{
loading: false,
name: '冲击负荷',
name: '冲击负荷',
key: 'impactList',
child: [
{
title: '冲击负荷类型',
field: 'name'
},
{
title: '冲击负荷功率(MVA)',
field: 'name1'
field: 'inpactloadtypeId'
},
{
title: '数量',
field: 'name2'
field: 'inpactloadNum'
},
{
title: '启动方式',
field: 'name3'
title: '容量',
field: 'inpactloadPower'
},
{
title: '启动容量倍数',
field: 'name4'
},
{
title: '冲击负荷高压侧电压',
field: 'name5'
},
{
title: '有无隔离变',
field: 'name6'
title: '是否隔离变',
field: 'isIsolationtrans'
},
{
title: '隔离变阻抗(%)',
field: 'name7'
field: 'isolationtransImpedance'
},
{
title: '高压侧电压',
field: 'inpactloadhighScale'
},
{
title: '低压侧电压',
field: 'name8'
field: 'inpactloadlowScale'
},
{
title: '负荷频度选择',
field: 'name9'
title: '负荷频度',
field: 'inpactloadFreq'
},
{
title: '闪变叠加系数',
field: 'name10'
field: 'flickerCoeff'
}
]
}
@@ -250,34 +250,48 @@ const deleteFform = (item: any, i: any) => {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
}).then(async () => {
if (i == 0) {
assessTransformerParamDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.transId)).then(
await assessTransformerParamDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.transId)).then(
res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
info(i)
}
)
} else if (i == 1) {
capacitorDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.capacitorId)).then(res => {
await capacitorDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.capacitorId)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
info(i)
})
} else if (i == 2) {
windPowerDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.windgeneratorId)).then(res => {
await windPowerDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.windgeneratorId)).then(
res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
}
)
} else if (i == 3) {
await loadParamDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.loadId)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
})
} else if (i == 4) {
await shockDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.inpactloadId)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
info(i)
})
}
info(i)
})
}
// 编辑
@@ -288,18 +302,6 @@ const edit = (item: any, row: any) => {
row: row
})
}
// 过滤数据
const formatter = (row: any) => {
if (row.column.field == 'transtypeId') {
const found = transformer.value.find((item: any) => item.transtypeId == row.cellValue)
return found.transtypeName || '' // 使用可选链并提供默认值
} else if (row.column.field == 'capacitorScale') {
const found = voltageleveloption.find((item: any) => item.id == row.cellValue)
return found.name || ''
} else {
return row.cellValue
}
}
const info = async (i: number) => {
column.value[i].loading = true
@@ -310,30 +312,65 @@ const info = async (i: number) => {
dataList.value.transformerList = res.data
})
} else if (i == 1) {
// 电容器参数维护
await capacitorList({ assessId: props.assessId }).then(res => {
dataList.value.capacitorList = res.data
})
} else if (i == 2) {
// 风电参数
await windPowerList({ assessId: props.assessId }).then(res => {
dataList.value.windPowerList = res.data
})
} else if (i == 3) {
// 用户负荷参数
await loadParamList({ assessId: props.assessId }).then(res => {
dataList.value.loadList = res.data
})
} else if (i == 4) {
// 冲击性负荷
await shockList({ assessId: props.assessId }).then(res => {
dataList.value.impactList = res.data
})
}
column.value[i].loading = false
}
// 过滤数据
const formatter = (row: any) => {
if (row.column.field == 'transtypeId') {
const found = transformer.value.find((item: any) => item.transtypeId == row.cellValue)
return found.transtypeName || '' // 使用可选链并提供默认值
} else if (row.column.field == 'harmId') {
const found = characteristic.value.find((item: any) => item.harmId == row.cellValue)
return found.harmName || '' // 使用可选链并提供默认值
} else if (
row.column.field == 'capacitorScale' ||
row.column.field == 'linevoltageScale' ||
row.column.field == 'translowScale'
) {
const found = voltageleveloption.find((item: any) => item.id == row.cellValue)
return found.name || ''
} else {
return row.cellValue
}
}
// 字典
const dictionary = () => {
// 获取变压器参数字典列表
transformerList({}).then((res: any) => {
transformer.value = res.data
})
// 谐波源特特性
characteristicList({}).then((res: any) => {
characteristic.value = res.data
})
}
onMounted(async () => {
await dictionary()
info(0) // 变压器参数维护
info(1) // 变压器参数维护
info(2) // 变压器参数维护
// info(3) // 变压器参数维护
info(1) // 电容器参数维护
info(2) // 风电参数
info(3) // 用户负荷
info(4) // 冲击性负荷
})
</script>
<style lang="scss" scoped></style>

View File

@@ -1,7 +1,7 @@
<template>
<el-dialog draggable width="1400px" 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="height1" class="mr10 box" style="width: 450px">
<div :style="height1" class="mr10 box" style="width: 600px">
<vxe-table
height="auto"
:data="TableData"
@@ -12,8 +12,10 @@
>
<vxe-column type="seq" title="序号" width="60px"></vxe-column>
<vxe-column field="date" title="日期"></vxe-column>
<vxe-column field="bdName" title="所属电站(场站)" width="120px"></vxe-column>
<vxe-column field="monitorName" title="监测点名称" width="120px"></vxe-column>
<vxe-column field="timeSum" title="异常时间(分钟)" width="80px"></vxe-column>
<vxe-column field="errCount" title="异常次数" width="80px"></vxe-column>
</vxe-table>
</div>

View File

@@ -10,7 +10,7 @@
<script setup lang="ts">
defineOptions({
name: 'runManage/alarmCleaning'
name: 'runManage/cleaning'
})
import abnormal from './components/abnormal.vue'
// import alarm from './components/alarm.vue'

View File

@@ -864,22 +864,22 @@ const 九江 = [
{ lng:116.828758, lat: 29.963141},
{ lng:116.8265, lat: 29.976828},
{ lng:116.82974, lat: 29.989041},
{ lng:116.829544, 30.00654},
{ lng:116.829544, lat: 30.00654},
{ lng:116.80279, lat: 29.99651},
{ lng:116.787327, 30.02033},
{ lng:116.783498, 30.030739},
{ lng:116.770293, 30.035644},
{ lng:116.764549, 30.048939},
{ lng:116.753602, 30.048994},
{ lng:116.747368, 30.057221},
{ lng:116.720319, 30.053897},
{ lng:116.685662, 30.070622},
{ lng:116.666861, 30.076723},
{ lng:116.64261, 30.076396},
{ lng:116.611046, 30.070677},
{ lng:116.596564, 30.059727},
{ lng:116.586059, 30.046324},
{ lng:116.571332, 30.014443},
{ lng:116.787327, lat: 30.02033},
{ lng:116.783498, lat: 30.030739},
{ lng:116.770293, lat: 30.035644},
{ lng:116.764549, lat: 30.048939},
{ lng:116.753602, lat: 30.048994},
{ lng:116.747368, lat: 30.057221},
{ lng:116.720319, lat: 30.053897},
{ lng:116.685662, lat: 30.070622},
{ lng:116.666861, lat: 30.076723},
{ lng:116.64261, lat: 30.076396},
{ lng:116.611046, lat: 30.070677},
{ lng:116.596564, lat: 30.059727},
{ lng:116.586059, lat: 30.046324},
{ lng:116.571332, lat: 30.014443},
{ lng:116.571185, lat: 29.989204},
{ lng:116.564558, lat: 29.949343},
{ lng:116.558716, lat: 29.924306},

View File

@@ -1,25 +1,25 @@
<template>
<div style='display: flex;flex-direction: column;height: 100%' v-loading='loading'>
<el-form :inline='true'>
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
<div style="display: flex; flex-direction: column; height: 100%" v-loading="loading">
<el-form :inline="true" class="fx-jcsb">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
<el-form-item>
<el-button type='primary' @click='init'>查询</el-button>
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item>
</el-form>
<el-descriptions class='mt2' direction='vertical' :column='4' border>
<el-descriptions-item align='center' label='名称'>{{ data.name }}</el-descriptions-item>
<el-descriptions-item align='center' label='事件总数'>{{ data.gs }}</el-descriptions-item>
<el-descriptions-item align='center' label='可容忍'>{{ data.krr }}</el-descriptions-item>
<el-descriptions-item align='center' label='不可容忍'> {{ data.bkrr }}</el-descriptions-item>
<el-descriptions class="mt2" direction="vertical" :column="4" border>
<el-descriptions-item align="center" label="名称">{{ data.name }}</el-descriptions-item>
<el-descriptions-item align="center" label="事件总数">{{ data.gs }}</el-descriptions-item>
<el-descriptions-item align="center" label="可容忍">{{ data.krr }}</el-descriptions-item>
<el-descriptions-item align="center" label="不可容忍">{{ data.bkrr }}</el-descriptions-item>
</el-descriptions>
<div style='flex: 1;' class='mt10'>
<my-echart :options='options' />
<div style="flex: 1" class="mt10">
<my-echart :options="options" />
</div>
</div>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -47,136 +47,123 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1]
getPlot(formData).then(
(res: any) => {
const gongData = gongfunction(res.data.voltageToleranceCurveDataList)
data.gs = res.data.voltageToleranceCurveDataList.length
data.krr = gongData.pointI.length
data.bkrr = gongData.pointIun.length
console.log(gongData)
options.value = {
// backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
// text: `ITIC曲线(总统计:${gongData.pointI.length + gongData.pointIun.length}个,可容忍:${gongData.pointI.length}个,不可容忍:${gongData.pointIun.length}个)`
text: `ITIC曲线`
},
legend: {
data: ['上限', '下限', '可容忍事件', '不可容忍事件'],
},
tooltip: {
trigger: 'item',
show: true,
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
getPlot(formData).then((res: any) => {
const gongData = gongfunction(res.data.voltageToleranceCurveDataList)
data.gs = res.data.voltageToleranceCurveDataList.length
data.krr = gongData.pointI.length
data.bkrr = gongData.pointIun.length
console.log(gongData)
options.value = {
// backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
// text: `ITIC曲线(总统计:${gongData.pointI.length + gongData.pointIun.length}个,可容忍:${gongData.pointI.length}个,不可容忍:${gongData.pointIun.length}个)`
text: `ITIC曲线`
},
legend: {
data: ['上限', '下限', '可容忍事件', '不可容忍事件']
},
tooltip: {
trigger: 'item',
show: true,
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0,
formatter: function (a: any) {
var relVal = ''
relVal =
'<font style=\'color:' +
'\'>发生时间:' +
a.value[2] +
'</font><br/>'
relVal +=
'<font style=\'color:' +
'\'>持续时间:' +
a.value[0] +
's</font><br/>'
relVal +=
'<font style=\'color:' +
'\'>特征幅值:' +
a.value[1].toFixed(2) +
'%</font>'
return relVal
fontSize: 16
}
},
xAxis: [
{
type: 'log',
min: 0.001,
max: 1000,
splitLine: {
show: false
},
name: 's'
}
],
yAxis: [
{
type: 'value',
splitNumber: 10,
minInterval: 3,
name: '%'
}
],
options: {
dataZoom: null,
series: [
{
name: '上限',
type: 'line',
data: [
[0.001, 200],
[0.003, 140],
[0.003, 120],
[0.5, 120],
[0.5, 110],
[10, 110],
[1000, 110]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '下限',
type: 'line',
data: [
[0.02, 0],
[0.02, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[10, 90],
[1000, 90]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointI
},
{
name: '不可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointIun
}
]
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0,
formatter: function (a: any) {
var relVal = ''
relVal = "<font style='color:" + "'>发生时间:" + a.value[2] + '</font><br/>'
relVal += "<font style='color:" + "'>持续时间:" + a.value[0] + 's</font><br/>'
relVal += "<font style='color:" + "'>特征幅值:" + a.value[1].toFixed(2) + '%</font>'
return relVal
}
},
xAxis: [
{
type: 'log',
min: 0.001,
max: 1000,
splitLine: {
show: false
},
name: 's'
}
],
yAxis: [
{
type: 'value',
splitNumber: 10,
minInterval: 3,
name: '%'
}
],
color: ['#007D7B','#07CCCA', 'green','red'],
options: {
dataZoom: null,
series: [
{
name: '上限',
type: 'line',
data: [
[0.001, 200],
[0.003, 140],
[0.003, 120],
[0.5, 120],
[0.5, 110],
[10, 110],
[1000, 110]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '下限',
type: 'line',
data: [
[0.02, 0],
[0.02, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[10, 90],
[1000, 90]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointI
},
{
name: '不可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointIun
}
]
}
nextTick(() => {
loading.value = false
})
}
)
nextTick(() => {
loading.value = false
})
})
}
function gongfunction(arr: any) {
@@ -341,6 +328,5 @@ function gongfunction(arr: any) {
onMounted(() => {
init()
})
</script>
<style></style>

View File

@@ -1,25 +1,25 @@
<template>
<div style='display: flex;flex-direction: column;height: 100%'>
<el-form :inline='true'>
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
<div style="display: flex; flex-direction: column; height: 100%">
<el-form :inline="true" class="fx-jcsb">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
<el-form-item>
<el-button type='primary' @click='init'>查询</el-button>
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item>
</el-form>
<el-descriptions class='mt2' direction='vertical' :column='4' border>
<el-descriptions-item align='center' label='名称'>{{ data.name }}</el-descriptions-item>
<el-descriptions-item align='center' label='事件总数'>{{ data.gs }}</el-descriptions-item>
<el-descriptions-item align='center' label='可容忍'>{{ data.krr }}</el-descriptions-item>
<el-descriptions-item align='center' label='不可容忍'> {{ data.bkrr }}</el-descriptions-item>
<el-descriptions class="mt2" direction="vertical" :column="4" border>
<el-descriptions-item align="center" label="名称">{{ data.name }}</el-descriptions-item>
<el-descriptions-item align="center" label="事件总数">{{ data.gs }}</el-descriptions-item>
<el-descriptions-item align="center" label="可容忍">{{ data.krr }}</el-descriptions-item>
<el-descriptions-item align="center" label="不可容忍">{{ data.bkrr }}</el-descriptions-item>
</el-descriptions>
<div style='flex: 1;' class='mt10'>
<my-echart :options='options' />
<div style="flex: 1" class="mt10">
<my-echart :options="options" />
</div>
</div>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -47,122 +47,109 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1]
getPlot(formData).then(
(res: any) => {
const gongData = gongfunction(res.data.voltageToleranceCurveDataList)
data.gs = res.data.voltageToleranceCurveDataList.length
data.krr = gongData.pointI.length
data.bkrr = gongData.pointIun.length
console.log(gongData)
options.value = {
// backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
text: `SEMI F47曲线`
},
legend: {
data: ['上限', '下限', '可容忍事件', '不可容忍事件'],
},
tooltip: {
trigger: 'item',
show: true,
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
getPlot(formData).then((res: any) => {
const gongData = gongfunction(res.data.voltageToleranceCurveDataList)
data.gs = res.data.voltageToleranceCurveDataList.length
data.krr = gongData.pointI.length
data.bkrr = gongData.pointIun.length
console.log(gongData)
options.value = {
// backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
text: `SEMI F47曲线`
},
legend: {
data: ['上限', '下限', '可容忍事件', '不可容忍事件']
},
tooltip: {
trigger: 'item',
show: true,
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0,
formatter: function (a: any) {
var relVal = ''
relVal =
'<font style=\'color:' +
'\'>发生时间:' +
a.value[2] +
'</font><br/>'
relVal +=
'<font style=\'color:' +
'\'>持续时间:' +
a.value[0] +
's</font><br/>'
relVal +=
'<font style=\'color:' +
'\'>特征幅值:' +
a.value[1].toFixed(2) +
'%</font>'
return relVal
fontSize: 16
}
},
xAxis: [
{
type: 'log',
min: 0.001,
max: 1000,
splitLine: {
show: false
},
name: 's'
}
],
yAxis: [
{
type: 'value',
max: function (value: any) {
return value.max + 20
},
splitNumber: 10,
minInterval: 0.1,
name: '%'
}
],
options: {
dataZoom: null,
series: [
{
name: '边界线',
type: 'line',
data: [
[0.05, 0],
[0.05, 50],
[0.2, 50],
[0.2, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[1000, 80]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointI
},
{
name: '不可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointIun
}
]
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0,
formatter: function (a: any) {
var relVal = ''
relVal = "<font style='color:" + "'>发生时间:" + a.value[2] + '</font><br/>'
relVal += "<font style='color:" + "'>持续时间:" + a.value[0] + 's</font><br/>'
relVal += "<font style='color:" + "'>特征幅值:" + a.value[1].toFixed(2) + '%</font>'
return relVal
}
},
xAxis: [
{
type: 'log',
min: 0.001,
max: 1000,
splitLine: {
show: false
},
name: 's'
}
],
yAxis: [
{
type: 'value',
max: function (value: any) {
return value.max + 20
},
splitNumber: 10,
minInterval: 0.1,
name: '%'
}
],
color: ['#007D7B', 'green', 'red'],
options: {
dataZoom: null,
series: [
{
name: '边界线',
type: 'line',
data: [
[0.05, 0],
[0.05, 50],
[0.2, 50],
[0.2, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[1000, 80]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointI
},
{
name: '不可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointIun
}
]
}
nextTick(() => {
loading.value = false
})
}
)
nextTick(() => {
loading.value = false
})
})
}
function gongfunction(arr: any) {
@@ -327,6 +314,5 @@ function gongfunction(arr: any) {
onMounted(() => {
init()
})
</script>
<style></style>

View File

@@ -1,19 +1,19 @@
<template>
<div style='display: flex;flex-direction: column;height: 100%'>
<el-form :inline='true'>
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
<div style="display: flex; flex-direction: column; height: 100%">
<el-form :inline="true" class="fx-jcsb">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
<el-form-item>
<el-button type='primary' @click='init'>查询</el-button>
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item>
</el-form>
<div style='flex: 1;' class='mt10'>
<my-echart :options='options' />
<div style="flex: 1" class="mt10">
<my-echart :options="options" />
</div>
</div>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -35,138 +35,137 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1]
getProbabilityDistribution(formData).then(
(res: any) => {
let data = res.data
let sisttime = data.sisttime
let persisttime = data.persisttime
options.value = {
backgroundColor: '#fff', //背景色,
title: {
text: '持续时间的概率分布函数',
x: 'center'
},
legend: {
show: true,
data: ['概率分布', '占比'],
getProbabilityDistribution(formData).then((res: any) => {
let data = res.data
let sisttime = data.sisttime
let persisttime = data.persisttime
options.value = {
backgroundColor: '#fff', //背景色,
title: {
text: '持续时间的概率分布函数',
x: 'center'
},
legend: {
top: 0,
show: true,
data: ['概率分布', '占比'],
textStyle: {
rich: {
a: {
verticalAlign: 'middle'
}
},
padding: [2, 0, 0, 0] //[上、右、下、左]
}
},
tooltip: {
//提示框组件
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
textStyle: {
rich: {
a: {
verticalAlign: 'middle'
}
},
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0
},
calculable: true,
xAxis: [
{
type: 'category',
name: '暂降幅值',
nameGap: 10,
nameTextStyle: {
fontSize: 12
},
data: ['0.01', '0.1', '0.25', '0.5', '1', '3', '20', '60', '180']
}
],
yAxis: [
{
type: 'value',
name: '概率分布',
nameTextStyle: {
fontSize: 15
},
axisLabel: {
formatter: '{value}%'
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
type: 'dashed',
opacity: 0.5
}
}
},
{
type: 'value',
name: '占比',
nameTextStyle: {
fontSize: 15
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
type: 'dashed',
opacity: 0.5
}
}
}
],
series: [
{
name: '概率分布',
type: 'line',
data: sisttime,
itemStyle: {
normal: { show: true }
}
},
{
name: '占比',
type: 'bar',
data: persisttime,
barWidth: 30,
itemStyle: {
normal: { show: true }
}
}
],
options: {
dataZoom: null
padding: [2, 0, 0, 0] //[上、右、下、左]
}
}
nextTick(() => {
loading.value = false
})
}
)
}
},
toolbox: {
top: -10
},
tooltip: {
//提示框组件
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0
},
calculable: true,
xAxis: [
{
type: 'category',
name: '持续时间',
nameGap: 10,
nameTextStyle: {
fontSize: 12
},
data: ['0.01', '0.1', '0.25', '0.5', '1', '3', '20', '60', '180']
}
],
yAxis: [
{
type: 'value',
name: '概率分布',
nameTextStyle: {
fontSize: 15
},
axisLabel: {
formatter: '{value}%'
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
type: 'dashed',
opacity: 0.5
}
}
},
{
type: 'value',
name: '占比',
nameTextStyle: {
fontSize: 15
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
type: 'dashed',
opacity: 0.5
}
}
}
],
series: [
{
name: '概率分布',
type: 'line',
data: sisttime,
itemStyle: {
normal: { show: true }
}
},
{
name: '占比',
type: 'bar',
data: persisttime,
barWidth: 30,
itemStyle: {
normal: { show: true }
}
}
],
options: {
dataZoom: null
}
}
nextTick(() => {
loading.value = false
})
})
}
onMounted(() => {
init()
})
</script>
<style></style>

View File

@@ -1,73 +1,73 @@
<template>
<div v-loading='loading' class='dianyazanjiangbaojimidu'>
<el-form :inline='true'>
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
<div v-loading="loading" class="dianyazanjiangbaojimidu">
<el-form :inline="true" class="fx-jcsb">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
<el-form-item>
<el-button type='primary' @click='init'>查询</el-button>
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item>
</el-form>
<div class='mt10 dianyazanjiang'>
<div class='first'>
<div class='mb10'>DISDIP表格(国际发配电联盟UNIPEDE)</div>
<div style='flex: 1;overflow: hidden'>
<vxe-table v-bind='defaultAttribute' height='100%' size='mini' :data='firstData'>
<vxe-colgroup title='剩余电压' field='name' width='80px'></vxe-colgroup>
<vxe-colgroup title='持续事件'>
<vxe-column field='twentyMs' title='20ms'></vxe-column>
<vxe-column field='oneHundredMs' title='100ms'></vxe-column>
<vxe-column field='fiveHundredMs' title='500ms'></vxe-column>
<vxe-column field='oneS' title='1s'></vxe-column>
<vxe-column field='threeS' title='2s'></vxe-column>
<vxe-column field='twentyS' title='20s'></vxe-column>
<vxe-column field='sixtyS' title='60s'></vxe-column>
<vxe-column field='oneEightyS' title='180s'></vxe-column>
<div class="mt10 dianyazanjiang">
<div class="first">
<div class="mb10">DISDIP表格(国际发配电联盟UNIPEDE)</div>
<div style="flex: 1; overflow: hidden">
<vxe-table v-bind="defaultAttribute" height="100%" size="mini" :data="firstData">
<vxe-colgroup title="剩余电压" field="name" width="80px"></vxe-colgroup>
<vxe-colgroup title="持续时间">
<vxe-column field="twentyMs" title="20ms" :formatter="formatter" />
<vxe-column field="oneHundredMs" title="100ms" :formatter="formatter" />
<vxe-column field="fiveHundredMs" title="500ms" :formatter="formatter" />
<vxe-column field="oneS" title="1s" :formatter="formatter" />
<vxe-column field="threeS" title="2s" :formatter="formatter" />
<vxe-column field="twentyS" title="20s" :formatter="formatter" />
<vxe-column field="sixtyS" title="60s" :formatter="formatter" />
<vxe-column field="oneEightyS" title="180s" :formatter="formatter" />
</vxe-colgroup>
</vxe-table>
</div>
</div>
<div class='second'>
<div class='mb10'>EC61000-4-11(用电终端的电压暂降抗度)</div>
<div style='flex: 1;overflow: hidden'>
<vxe-table v-bind='defaultAttribute' height='100%' size='mini' :data='secondData'>
<vxe-colgroup title='剩余电压' field='name' width='80px'></vxe-colgroup>
<vxe-colgroup title='持续事件'>
<vxe-column field='tenTwentyMs' title='10-20ms'></vxe-column>
<vxe-column field='twentyOneHundredMs' title='20-100ms'></vxe-column>
<vxe-column field='zeroPiontOneTwoS' title='0.1-0.2s'></vxe-column>
<vxe-column field='zeroPiontFive1S' title='0.2-0.5s'></vxe-column>
<vxe-column field='zeroPiontTwoFiveS' title='0.5-1s'></vxe-column>
<vxe-column field='role' title='>1s'></vxe-column>
<div class="second">
<div class="mb10">EC61000-4-11(用电终端的电压暂降抗度)</div>
<div style="flex: 1; overflow: hidden">
<vxe-table v-bind="defaultAttribute" height="100%" size="mini" :data="secondData">
<vxe-colgroup title="剩余电压" field="name" width="80px"></vxe-colgroup>
<vxe-colgroup title="持续时间">
<vxe-column field="tenTwentyMs" title="10-20ms" :formatter="formatter" />
<vxe-column field="twentyOneHundredMs" title="20-100ms" :formatter="formatter" />
<vxe-column field="zeroPiontOneTwoS" title="0.1-0.2s" :formatter="formatter" />
<vxe-column field="zeroPiontFive1S" title="0.2-0.5s" :formatter="formatter" />
<vxe-column field="zeroPiontTwoFiveS" title="0.5-1s" :formatter="formatter" />
<vxe-column field="greater1S" title=">1s" :formatter="formatter" />
</vxe-colgroup>
</vxe-table>
</div>
</div>
<div class='third'>
<div class='mb10'>IEC61000-2-8(公共用电暂降测量统计)</div>
<div style='flex: 1;overflow: hidden'>
<vxe-table v-bind='defaultAttribute' height='100%' size='mini' :data='thirdData'>
<vxe-colgroup title='剩余电压' field='name' width='120px'></vxe-colgroup>
<vxe-colgroup title='持续事件'>
<vxe-column field='q' title='0.01-0.1s' align='center'></vxe-column>
<vxe-column field='w' title='0.1-0.25s' align='center'></vxe-column>
<vxe-column field='e' title='0.25-0.5s' align='center'></vxe-column>
<vxe-column field='r' title='0.5-1s' align='center'></vxe-column>
<vxe-column field='t' title='1-3s' align='center'></vxe-column>
<vxe-column field='y' title='3-20s' align='center'></vxe-column>
<vxe-column field='u' title='20-60s' align='center'></vxe-column>
<vxe-column field='i' title='60-180s' align='center'></vxe-column>
<div class="third">
<div class="mb10">IEC61000-2-8(公共用电暂降测量统计)</div>
<div style="flex: 1; overflow: hidden">
<vxe-table v-bind="defaultAttribute" height="100%" size="mini" :data="thirdData">
<vxe-colgroup title="剩余电压" field="name" width="120px"></vxe-colgroup>
<vxe-colgroup title="持续时间">
<vxe-column field="q" title="0.01-0.1s" align="center" :formatter="formatter" />
<vxe-column field="w" title="0.1-0.25s" align="center" :formatter="formatter" />
<vxe-column field="e" title="0.25-0.5s" align="center" :formatter="formatter" />
<vxe-column field="r" title="0.5-1s" align="center" :formatter="formatter" />
<vxe-column field="t" title="1-3s" align="center" :formatter="formatter" />
<vxe-column field="y" title="3-20s" align="center" :formatter="formatter" />
<vxe-column field="u" title="20-60s" align="center" :formatter="formatter" />
<vxe-column field="i" title="60-180s" align="center" :formatter="formatter" />
</vxe-colgroup>
</vxe-table>
</div>
</div>
<div class='charts' id='charts'>
<MyEchart :options='options' />
<div class="charts" id="charts">
<MyEchart :options="options" />
</div>
</div>
</div>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -88,7 +88,9 @@ const firstData = ref([])
const secondData = ref([])
const thirdData = ref([])
const chartsData = ref([])
const formatter = (row: any) => {
return row.cellValue == 0 ? '/' : row.cellValue
}
const init = () => {
formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0]
@@ -209,7 +211,7 @@ const init = () => {
series: [
{
type: 'bar3D',
data: chartsData.value.map(function(item: any) {
data: chartsData.value.map(function (item: any) {
return {
value: [item['x'], item['y'], item['z']]
}
@@ -248,7 +250,7 @@ onMounted(() => {
init()
})
</script>
<style lang='scss'>
<style lang="scss">
.dianyazanjiangbaojimidu {
display: flex;
flex-direction: column;
@@ -261,10 +263,10 @@ onMounted(() => {
min-height: 800px;
display: grid;
grid-template-areas:
'first charts'
'second charts'
'third third '
'third third ';
'first charts'
'second charts'
'third third '
'third third ';
grid-template-rows: 1fr 1fr 1fr 1fr;
grid-template-columns: 1fr 1fr;
grid-gap: 10px;
@@ -274,6 +276,7 @@ onMounted(() => {
display: flex;
flex-direction: column;
overflow: hidden;
height: 280px;
}
.second {
@@ -281,6 +284,7 @@ onMounted(() => {
display: flex;
flex-direction: column;
overflow: hidden;
height: 210px;
}
.third {
@@ -288,6 +292,7 @@ onMounted(() => {
display: flex;
flex-direction: column;
overflow: hidden;
height: 720px;
}
.charts {

View File

@@ -1,11 +1,11 @@
<template>
<div style='display: flex;flex-direction: column;height: 100%' v-loading='loading'>
<el-form :inline='true'>
<el-form :inline='true' class="fx-jcsb">
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
</el-form-item>
<el-form-item>
<el-button type='primary' @click='init'>查询</el-button>
<el-button type='primary' @click='init' icon="el-icon-Search">查询</el-button>
</el-form-item>
</el-form>
<div style='flex: 1;' class='mt10 zanjiangfenbutongji'>
@@ -111,7 +111,7 @@ const initFirst = () => {
formatter: function (params: any) {
let tips = ''
tips += '<font>时间:' + params[0].name + '</font><br/>'
tips += '<font>暂降次数:' + params[0].data + '</font>'
tips += '<font>暂降次数' + params[0].data + '</font>'
return tips
}
},
@@ -147,12 +147,12 @@ const initFirst = () => {
return color[0]
}
},
label: {
show: true,
textStyle: {
label: { show: true, position: 'top' }
}
}
// label: {
// show: true,
// textStyle: {
// label: { show: true, position: 'top' }
// }
// }
}
},
data: handle
@@ -194,7 +194,7 @@ const initSecond = () => {
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
formatter: '{a} <br/>{b} : {c} ({d}%)'
formatter: '{a} <br/>{b} {c} ({d}%)'
},
legend: {
orient: 'vertical',
@@ -204,14 +204,14 @@ const initSecond = () => {
{
name: '暂降原因',
type: 'pie',
radius: '70%',
radius: '65%',
center: ['50%', '53%'],
label: {
normal: {
show: false
},
emphasis: {
show: true
show: false
}
},
lableLine: {
@@ -219,7 +219,7 @@ const initSecond = () => {
show: false
},
emphasis: {
show: true
show: false
}
},
data: valueArray,
@@ -269,7 +269,7 @@ const initThird = () => {
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
formatter: '{a} <br/>{b} : {c} ({d}%)'
formatter: '{a} <br/>{b} {c} ({d}%)'
},
legend: {
orient: 'vertical',
@@ -279,14 +279,14 @@ const initThird = () => {
{
name: '暂降类型',
type: 'pie',
radius: '70%',
radius: '65%',
center: ['50%', '60%'],
label: {
normal: {
show: false
},
emphasis: {
show: true
show: false
}
},
lableLine: {
@@ -294,7 +294,7 @@ const initThird = () => {
show: false
},
emphasis: {
show: true
show: false
}
},
data: valueArray,

View File

@@ -1,19 +1,19 @@
<template>
<div style='display: flex;flex-direction: column;height: 100%'>
<el-form :inline='true'>
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
<div style="display: flex; flex-direction: column; height: 100%">
<el-form :inline="true" class="fx-jcsb">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
<el-form-item>
<el-button type='primary' @click='init'>查询</el-button>
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item>
</el-form>
<div style='flex: 1;' class='mt10'>
<my-echart :options='options' />
<div style="flex: 1" class="mt10">
<my-echart :options="options" />
</div>
</div>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -35,150 +35,138 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1]
getProbabilityDistribution(formData).then(
(res: any) => {
let data = res.data
let eventValue = data.eventvalue
let pereventValue = data.pereventvalue
options.value = {
backgroundColor: '#fff', //背景色,
title: {
text: '暂降幅值的概率分布函数',
x: 'center'
},
legend: {
show: true,
data: ['概率分布', '占比'],
getProbabilityDistribution(formData).then((res: any) => {
let data = res.data
let eventValue = data.eventvalue
let pereventValue = data.pereventvalue
options.value = {
backgroundColor: '#fff', //背景色,
title: {
text: '暂降幅值的概率分布函数',
x: 'center'
},
legend: {
show: true,
top: 0,
data: ['概率分布', '占比'],
textStyle: {
rich: {
a: {
verticalAlign: 'middle'
}
},
padding: [2, 0, 0, 0] //[上、右、下、左]
}
},
tooltip: {
//提示框组件
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
textStyle: {
rich: {
a: {
verticalAlign: 'middle'
}
},
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0
},
calculable: true,
xAxis: [
{
type: 'category',
name: '暂降幅值',
nameGap: 10,
nameTextStyle: {
fontSize: 12
},
data: [
'0',
'10%',
'20%',
'30%',
'40%',
'50%',
'60%',
'70%',
'80%',
'90%',
'100%'
]
}
],
yAxis: [
{
type: 'value',
name: '概率分布',
nameTextStyle: {
fontSize: 15
},
axisLabel: {
formatter: '{value}%'
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
type: 'dashed',
opacity: 0.5
}
}
},
{
type: 'value',
name: '占比',
nameTextStyle: {
fontSize: 15
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
type: 'dashed',
opacity: 0.5
}
}
}
],
series: [
{
name: '占比',
type: 'bar',
data: pereventValue,
barWidth: 30,
itemStyle: {
normal: { show: true }
}
},
{
name: '概率分布',
type: 'line',
data: eventValue,
itemStyle: {
normal: { show: true }
}
}
],
options: {
dataZoom: null
padding: [2, 0, 0, 0] //[上、右、下、左]
}
}
nextTick(() => {
loading.value = false
})
}
)
}
},
toolbox: {
top: -10
},
tooltip: {
//提示框组件
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0
},
calculable: true,
xAxis: [
{
type: 'category',
name: '暂降幅值',
nameGap: 10,
nameTextStyle: {
fontSize: 12
},
data: ['0', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%']
}
],
yAxis: [
{
type: 'value',
name: '概率分布',
nameTextStyle: {
fontSize: 15
},
axisLabel: {
formatter: '{value}%'
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
type: 'dashed',
opacity: 0.5
}
}
},
{
type: 'value',
name: '占比',
nameTextStyle: {
fontSize: 15
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
type: 'dashed',
opacity: 0.5
}
}
}
],
series: [
{
name: '占比',
type: 'bar',
data: pereventValue,
barWidth: 30,
itemStyle: {
normal: { show: true }
}
},
{
name: '概率分布',
type: 'line',
data: eventValue,
itemStyle: {
normal: { show: true }
}
}
],
options: {
dataZoom: null
}
}
nextTick(() => {
loading.value = false
})
})
}
onMounted(() => {
init()
})
</script>
<style></style>

View File

@@ -76,17 +76,22 @@
@click="markerClick(path)"
></bm-marker>
</BmlMarkerClusterer>
<bm-marker :position="infoWindowPoint" :icon="{ url: '1', size: { width: 0, height: 0 } }" >
<bm-info-window :show="infoWindowPoint.show" @close="infoWindowPoint.show = false">
<el-descriptions :title="infoWindowPoint.lineName" style="min-width: 240px;" :column="1" v-if="infoWindowPoint.lineId">
<bm-marker :position="infoWindowPoint" :icon="{ url: '1', size: { width: 0, height: 0 } }">
<bm-info-window :show="infoWindowPoint.show" @close="infoWindowPoint.show = false">
<el-descriptions
:title="infoWindowPoint.lineName"
style="min-width: 240px"
:column="1"
v-if="infoWindowPoint.lineId"
>
<el-descriptions-item label="供电公司">{{ infoWindowPoint.gdName }}</el-descriptions-item>
<el-descriptions-item label="变电站(场站)">{{ infoWindowPoint.subName }}</el-descriptions-item>
<el-descriptions-item label="母线">{{ infoWindowPoint.voltageName }}</el-descriptions-item>
<el-descriptions-item label="网络参数">
{{ infoWindowPoint.ip }}
</el-descriptions-item>
<el-descriptions-item label="PT变">{{ infoWindowPoint.pt2 }}</el-descriptions-item>
<el-descriptions-item label="CT变">{{ infoWindowPoint.ct2 }}</el-descriptions-item>
<el-descriptions-item label="PT变">{{ infoWindowPoint.pt2 }}</el-descriptions-item>
<el-descriptions-item label="CT变">{{ infoWindowPoint.ct2 }}</el-descriptions-item>
<el-descriptions-item label="生产厂家">
{{ infoWindowPoint.manufacturer }}
</el-descriptions-item>
@@ -232,7 +237,7 @@ const handler = async ({ BMap, map }: any) => {
siteList.value = list
center.value.lng = list[0]?.lng || 0
center.value.lat = list[0]?.lat || 0
center.value.lat = list[0]?.lat + 0.01 || 0
watch(
() => monitoringPoint.state.lineId,
(newLineId, oldLineId) => {
@@ -240,7 +245,7 @@ const handler = async ({ BMap, map }: any) => {
if (value == undefined) return
center.value.lng = value.lng
center.value.lat = value.lat
center.value.lat = value.lat + 0.01
infoWindowPoint.value = value
infoWindowPoint.value.show = true
monitoringPoint.setValue(
@@ -270,10 +275,10 @@ onMounted(() => {
if (siteList.value.length == 0) {
setTimeout(() => {
hackReset.value = false
}, 1000)
}, 500)
setTimeout(() => {
hackReset.value = true
}, 2000)
}, 1000)
}
})
</script>

View File

@@ -1,31 +1,38 @@
<template>
<div v-loading='loading' class='running-condition'>
<el-form :inline='true'>
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
<div v-loading="loading" class="running-condition">
<el-form :inline="true" class="fx-jcsb">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
<el-form-item>
<el-button type='primary' @click='init'>查询</el-button>
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item>
</el-form>
<div style='flex: 1;' class='mt10 zanjiangfenbutongji'>
<div style="flex: 1" class="mt10 zanjiangfenbutongji">
<div
style='position: absolute; right: 10px; top: 10px; z-index: 2;display: flex;align-items: center;font-size: 12px'>
<el-tag style='width: 20px;height: 12px' :style='{ background: gradeColor3[2] }'></el-tag>
<span class='ml2' :style='{ color: gradeColor3[2] }'> {{ 'X<60%' }} </span>
<el-tag class='ml10' style='width: 20px;height: 12px'
:style='{ background: gradeColor3[1] }'></el-tag>
<span class='ml2' :style='{ color: gradeColor3[1] }'>{{ '60%≤X<90%' }} </span>
<el-tag class='ml10' style='width: 20px;height: 12px'
:style='{ background: gradeColor3[0] }'></el-tag>
<span class='ml2' :style='{ color: gradeColor3[0] }'> {{ 'X≥90 %' }}</span>
style="
position: absolute;
right: 55px;
top: 25px;
z-index: 2;
display: flex;
align-items: center;
font-size: 12px;
"
>
<el-tag style="width: 20px; height: 12px" :style="{ background: gradeColor3[2] }"></el-tag>
<span class="ml2" :style="{ color: gradeColor3[2] }">{{ 'X<60%' }}</span>
<el-tag class="ml10" style="width: 20px; height: 12px" :style="{ background: gradeColor3[1] }"></el-tag>
<span class="ml2" :style="{ color: gradeColor3[1] }">{{ '60%≤X<90%' }}</span>
<el-tag class="ml10" style="width: 20px; height: 12px" :style="{ background: gradeColor3[0] }"></el-tag>
<span class="ml2" :style="{ color: gradeColor3[0] }">{{ 'X≥90 %' }}</span>
</div>
<my-echart :options='secondOptions' style='flex: 1;height: 100%' />
<my-echart :options='firstOptions' style='flex: 1;height: 100%' />
<my-echart :options="secondOptions" style="flex: 1; height: 100%" />
<my-echart :options="firstOptions" style="flex: 1; height: 100%" />
</div>
</div>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { nextTick, onMounted, reactive, ref, watch } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -210,19 +217,8 @@ const initFirst = () => {
}
}
const initSecond = () => {
let list = secondData.value.type
let items = secondData.value.updateTime
let list = secondData.value.type.map((item, i) => [secondData.value.updateTime[i], item])
for (let i = 0; i < items.length; i++) {
if (i != 0) {
i
items[i] = items[i].slice(11)
} else if (i == 0) {
let date = items[i].slice(11)
let t = items[i].slice(0, 10)
items[i] = '(' + date + ')' + '\n' + t
}
}
secondOptions.value = {
tooltip: {
trigger: 'axis',
@@ -241,37 +237,30 @@ const initSecond = () => {
},
backgroundColor: 'rgba(0,0,0,0.55)',
formatter: function (params: any) {
let res = '时间: ' + params[0].name + '<br/>运行状态:'
let texts = ''
if (params[0].value === 2 || params[0].value === '2') {
texts = '退出'
} else if (params[0].value === 0 || params[0].value === '0') {
texts = '中断'
} else if (params[0].value === 1 || params[0].value === '1') {
texts = '正常'
}
res = res + texts
console.log('🚀 ~ initSecond ~ params:', params)
let res = ''
res += `${params[0].value[0]}${params[0].value[1] == '0' ? '中断' : '正常'}` //params[0].value[0] + '' //+ params[0].value[1] == '0' ? '中断' : '正常'
console.log('🚀 ~ initSecond ~ res:', res)
return res
}
},
dataZoom: [
{
type: 'inside',
height: 13,
start: 0,
end: 100,
bottom: '25px'
},
{ height: 13, start: 0, bottom: '25px', end: 100 }
],
xAxis: {
// name: '时间',
// type: 'category',
// data: items,
// boundaryGap: false
type: 'time',
name: '时间',
type: 'category',
data: items,
boundaryGap: false
//
axisLabel: {
formatter: {
day: '{MM}-{dd}',
month: '{MM}',
year: '{yyyy}'
}
}
},
yAxis: {
name: '状态',
@@ -311,9 +300,8 @@ const initSecond = () => {
onMounted(() => {
init()
})
</script>
<style lang='scss'>
<style lang="scss">
.running-condition {
display: flex;
flex-direction: column;

View File

@@ -44,7 +44,7 @@
<div class="selectBox">
<el-select
@change="pointChange"
:popper-append-to-body="false"
filterable
clearable
v-model="lineId"
@@ -101,13 +101,15 @@
<bm-info-window :show="infoWindowPoint.show" @close="infoWindowPoint.show = false">
<el-descriptions :title="infoWindowPoint.lineName" :column="1" v-if="infoWindowPoint.lineId">
<el-descriptions-item label="供电公司">{{ infoWindowPoint.gdName }}</el-descriptions-item>
<el-descriptions-item label="变电站(场站)">{{ infoWindowPoint.subName }}</el-descriptions-item>
<el-descriptions-item label="变电站(场站)">
{{ infoWindowPoint.subName }}
</el-descriptions-item>
<el-descriptions-item label="母线">{{ infoWindowPoint.voltageName }}</el-descriptions-item>
<el-descriptions-item label="网络参数">
{{ infoWindowPoint.ip }}
</el-descriptions-item>
<el-descriptions-item label="PT变">{{ infoWindowPoint.pt2 }}</el-descriptions-item>
<el-descriptions-item label="CT变">{{ infoWindowPoint.ct2 }}</el-descriptions-item>
<el-descriptions-item label="PT变">{{ infoWindowPoint.pt2 }}</el-descriptions-item>
<el-descriptions-item label="CT变">{{ infoWindowPoint.ct2 }}</el-descriptions-item>
<el-descriptions-item label="生产厂家">
{{ infoWindowPoint.manufacturer }}
</el-descriptions-item>
@@ -273,7 +275,7 @@ const handler = async ({ BMap, map }: any) => {
}, 0)
siteList.value = list
center.value.lng = areaLineInfo.value[0]?.lng || 0
center.value.lat = areaLineInfo.value[0]?.lat || 0
center.value.lat = areaLineInfo.value[0]?.lat + 0.04 || 0
infoWindowPoint.value = areaLineInfo.value[0] || {}
infoWindowPoint.value.show = true
@@ -291,7 +293,7 @@ const pointChange = (val: string) => {
let data = areaLineInfo.value.find((item: any) => item.lineId == val)
center.value.lng = data.lng
center.value.lat = data.lat
center.value.lat = data.lat + 0.04
infoWindowPoint.value = data
infoWindowPoint.value.show = true
zoom.value = 13
@@ -330,10 +332,10 @@ onMounted(() => {
if (window.localStorage.getItem('BMAP_SECKEY') == null) {
hackReset.value = false
}
}, 1000)
}, 500)
setTimeout(() => {
hackReset.value = true
}, 2000)
}, 1000)
}
})
</script>

View File

@@ -1,18 +1,25 @@
<template>
<el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" title="暂降事件列表">
<vxe-table v-loading="loading" height="auto" auto-resize :data="tableData" v-bind="defaultAttribute">
<vxe-column type="seq" title="序号" width="80px"></vxe-column>
<vxe-column field="startTime" title="发生时间" width="200"></vxe-column>
<vxe-column field="duration" title="持续时间(s)" width="120"></vxe-column>
<vxe-column field="featureAmplitude" title="暂降(骤升)幅值(%)" width="150">
<template #default="{ row }">
{{ (row.featureAmplitude * 100).toFixed(2) }}
</template>
</vxe-column>
<vxe-column field="gdName" title="供电公司" width="200"></vxe-column>
<vxe-column field="subName" title="变电站" min-width="200"></vxe-column>
<vxe-column field="lineName" title="监测点" width="200"></vxe-column>
</vxe-table>
<div style="height: 40vh">
<vxe-table v-loading="loading" height="auto" auto-resize :data="tableData" v-bind="defaultAttribute">
<vxe-column type="seq" title="序号" width="80px"></vxe-column>
<vxe-column field="startTime" title="发生时间" width="180"></vxe-column>
<vxe-column field="duration" title="持续时间(s)" width="100"></vxe-column>
<vxe-column field="gdName" title="供电公司" min-width="150"></vxe-column>
<vxe-column field="subName" title="变电站" min-width="150"></vxe-column>
<vxe-column field="lineName" title="监测点" min-width="150"></vxe-column>
<vxe-column field="advanceType" title="暂降类型" width="100">
<template #default="{ row }">
{{ type.find(item => item.id === row.advanceType)?.name }}
</template>
</vxe-column>
<vxe-column field="featureAmplitude" title="暂降(骤升)幅值(%)" width="150">
<template #default="{ row }">
{{ (row.featureAmplitude * 100).toFixed(2) }}
</template>
</vxe-column>
</vxe-table>
</div>
</el-dialog>
</template>
<script lang="ts" setup>
@@ -20,7 +27,9 @@ import { ref, inject } from 'vue'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { getNoDealEventsByLineId } from '@/api/event-boot/areaInfo'
import { useDictData } from '@/stores/dictData'
const dictData = useDictData()
const type = dictData.getBasicData('Event_Type')
const dialogVisible = ref(false)
const tableData = ref([])
const loading = ref(true)

View File

@@ -23,10 +23,10 @@
<div style="flex: 1; overflow: hidden">
<vxe-table height="auto" auto-resize :data="tableData" v-bind="defaultAttribute">
<vxe-column type="seq" title="序号" width="70px"></vxe-column>
<vxe-column field="startTime" title="发生时刻"></vxe-column>
<vxe-column field="lineName" title="监测点"></vxe-column>
<vxe-column field="featureAmplitude" title="暂降(骤升)幅值(%)" width="150"></vxe-column>
<vxe-column field="duration" title="持续时间(s)" width="120"></vxe-column>
<vxe-column field="startTime" title="发生时刻" width="200"></vxe-column>
<vxe-column field="lineName" title="监测点" width="120"></vxe-column>
<vxe-column field="featureAmplitude" title="暂降(骤升)幅值(%)"></vxe-column>
<vxe-column field="duration" title="持续时间(s)"></vxe-column>
</vxe-table>
</div>
</div>

View File

@@ -18,7 +18,11 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="电网标志">
<el-select v-model="tableStore.table.params.powerFlag" placeholder="请选择电网标志">
<el-option v-for="item in sign" :key="item.id" :label="item.name" :value="item.algoDescribe" />
</el-select>
</el-form-item>
<el-form-item label="筛选数据">
<el-input
@@ -40,13 +44,14 @@ import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData'
import { getEventReport } from '@/api/event-boot/report.ts'
import { getEventReport } from '@/api/event-boot/report'
defineOptions({
name: 'Operationmanagement/terminalmanagement'
})
const dictData = useDictData()
const triggerType = dictData.getBasicData('Event_Statis')
const sign:any = dictData.getBasicData('power_flag')
const tableRef = ref()
const tableStore = new TableStore({
@@ -109,7 +114,7 @@ const tableStore = new TableStore({
})
tableStore.table.params.comFlag = '1'
tableStore.table.params.monitorFlag = 0
tableStore.table.params.powerFlag = 1
tableStore.table.params.powerFlag = sign[0]?.algoDescribe || 0
tableStore.table.params.serverName = 'event-boot'
tableStore.table.params.waveType=''
tableStore.table.params.searchValue=''