测试问题整改
This commit is contained in:
@@ -63,7 +63,35 @@ export function getLineInfoById(data:any) {
|
|||||||
}
|
}
|
||||||
export function getLineRank(data:any) {
|
export function getLineRank(data:any) {
|
||||||
return request({
|
return request({
|
||||||
url: 'harmonic-boot/PollutionSubstation/getLineRank',
|
url: '/harmonic-boot/PollutionSubstation/getLineRank',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function deptInfo(data:any) {
|
||||||
|
return request({
|
||||||
|
url: '/harmonic-boot/detailAnalysis/deptInfo',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function getXbLineInfoById(data:any) {
|
||||||
|
return request({
|
||||||
|
url: '/harmonic-boot/detailAnalysis/getXbLineInfoById',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function getSubInfoById(data:any) {
|
||||||
|
return request({
|
||||||
|
url: '/harmonic-boot/detailAnalysis/getSubInfoById',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function getXbLineRank(data:any) {
|
||||||
|
return request({
|
||||||
|
url: '/harmonic-boot/detailAnalysis/getXbLineRank',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
|
|||||||
27253
src/assets/map/中国.json
27253
src/assets/map/中国.json
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -24,7 +24,7 @@ const { push, options, currentRoute } = useRouter()
|
|||||||
const url = '/api-docx/excelreport' + currentRoute.value?.href?.split('?')[1]
|
const url = '/api-docx/excelreport' + currentRoute.value?.href?.split('?')[1]
|
||||||
console.log("🚀 ~ url:", url)
|
console.log("🚀 ~ url:", url)
|
||||||
const excelOptions = ref({
|
const excelOptions = ref({
|
||||||
xls: currentRoute.value.href?.split('?')[1].split('.')[1] == 'xls' ? true : true
|
xls: currentRoute.value.href?.split('?')[1].split('.')[1] == 'xls' ? true : false
|
||||||
})
|
})
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
console.log()
|
console.log()
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ const initChart = () => {
|
|||||||
},
|
},
|
||||||
backgroundColor: 'rgba(0,0,0,0.35)',
|
backgroundColor: 'rgba(0,0,0,0.35)',
|
||||||
borderWidth: 0,
|
borderWidth: 0,
|
||||||
confine:true,
|
confine: true,
|
||||||
...(props.options?.tooltip || null)
|
...(props.options?.tooltip || null)
|
||||||
},
|
},
|
||||||
toolbox: {
|
toolbox: {
|
||||||
@@ -75,9 +75,15 @@ const initChart = () => {
|
|||||||
saveAsImage: {
|
saveAsImage: {
|
||||||
title: '保存图片',
|
title: '保存图片',
|
||||||
},
|
},
|
||||||
...(props.options?.toolbox?.featureProps || null),
|
|
||||||
|
|
||||||
|
...(props.options?.toolbox?.featureProps || null)
|
||||||
},
|
},
|
||||||
|
emphasis: {
|
||||||
|
iconStyle: {
|
||||||
|
borderColor: config.layout.elementUiPrimary[0], // 鼠标悬停时的边框颜色
|
||||||
|
color: config.layout.elementUiPrimary[0] // 鼠标悬停时的图标颜色
|
||||||
|
}
|
||||||
|
},
|
||||||
// },
|
// },
|
||||||
...(props.options?.toolbox || null)
|
...(props.options?.toolbox || null)
|
||||||
},
|
},
|
||||||
@@ -123,9 +129,10 @@ const initChart = () => {
|
|||||||
series: props.options?.series,
|
series: props.options?.series,
|
||||||
...props.options?.options
|
...props.options?.options
|
||||||
}
|
}
|
||||||
|
// console.log(options.series,"获取x轴");
|
||||||
handlerBar(options)
|
handlerBar(options)
|
||||||
// 处理柱状图
|
// 处理柱状图
|
||||||
chart.setOption(options,true)
|
chart.setOption(options, true)
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
chart.resize()
|
chart.resize()
|
||||||
@@ -205,6 +212,9 @@ const handlerXAxis = () => {
|
|||||||
let temp = {
|
let temp = {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
axisTick: { show: false },
|
axisTick: { show: false },
|
||||||
|
nameTextStyle: {
|
||||||
|
color: '#000'
|
||||||
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
// lineStyle: {
|
// lineStyle: {
|
||||||
color: '#000'
|
color: '#000'
|
||||||
@@ -214,9 +224,10 @@ const handlerXAxis = () => {
|
|||||||
// textStyle: {
|
// textStyle: {
|
||||||
fontFamily: 'dinproRegular',
|
fontFamily: 'dinproRegular',
|
||||||
color: '#000',
|
color: '#000',
|
||||||
fontSize: '12'
|
fontSize: '12',
|
||||||
// }
|
// }
|
||||||
}
|
},
|
||||||
|
// boundaryGap: false,
|
||||||
}
|
}
|
||||||
// props.options?.xAxis 是数组还是对象
|
// props.options?.xAxis 是数组还是对象
|
||||||
if (Array.isArray(props.options?.xAxis)) {
|
if (Array.isArray(props.options?.xAxis)) {
|
||||||
@@ -234,9 +245,6 @@ const handlerXAxis = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let throttle: ReturnType<typeof setTimeout>
|
let throttle: ReturnType<typeof setTimeout>
|
||||||
// 动态计算table高度
|
// 动态计算table高度
|
||||||
const resizeObserver = new ResizeObserver(entries => {
|
const resizeObserver = new ResizeObserver(entries => {
|
||||||
|
|||||||
@@ -187,6 +187,7 @@ const GetEchar = async (name: string) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const MapReturn = (name: string) => {
|
const MapReturn = (name: string) => {
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ const options:any = dictData.state.area
|
|||||||
const areaName = ref(dictData.state.area[0].name)
|
const areaName = ref(dictData.state.area[0].name)
|
||||||
const jbName = ref(dictData.state.area[0].name)
|
const jbName = ref(dictData.state.area[0].name)
|
||||||
const change = (e: any) => {
|
const change = (e: any) => {
|
||||||
|
console.log("🚀 ~ change ~ cascader.value.getCheckedNodes()[0]?.pathLabels.length:", cascader.value.getCheckedNodes()[0]?.pathLabels.length)
|
||||||
|
|
||||||
if (cascader.value.getCheckedNodes()[0]?.pathLabels.length == 1) {
|
if (cascader.value.getCheckedNodes()[0]?.pathLabels.length == 1) {
|
||||||
areaName.value = cascader.value.getCheckedNodes()[0].pathLabels[0]
|
areaName.value = cascader.value.getCheckedNodes()[0].pathLabels[0]
|
||||||
} else if (cascader.value.getCheckedNodes()[0]?.pathLabels.length >= 2) {
|
} else if (cascader.value.getCheckedNodes()[0]?.pathLabels.length >= 2) {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { inject, ref, onMounted, nextTick, onUnmounted } from 'vue'
|
import { inject, ref, onMounted, nextTick, onUnmounted,watch } from 'vue'
|
||||||
import type TableStore from '@/utils/tableStore'
|
import type TableStore from '@/utils/tableStore'
|
||||||
import DatePicker from '@/components/form/datePicker/index.vue'
|
import DatePicker from '@/components/form/datePicker/index.vue'
|
||||||
import Area from '@/components/form/area/index.vue'
|
import Area from '@/components/form/area/index.vue'
|
||||||
@@ -81,6 +81,14 @@ const headerFormSecondStyleClose = {
|
|||||||
height: '0',
|
height: '0',
|
||||||
padding: '0'
|
padding: '0'
|
||||||
}
|
}
|
||||||
|
watch(
|
||||||
|
() => tableStore.table.params.deptIndex,
|
||||||
|
(newVal) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
areaRef.value.change()
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
)
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if (props.datePicker) {
|
if (props.datePicker) {
|
||||||
tableStore.table.params.searchBeginTime = datePickerRef.value.timeValue[0]
|
tableStore.table.params.searchBeginTime = datePickerRef.value.timeValue[0]
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<Toolbar style="border-bottom: 1px solid #e4e4e4; border-top: 1px solid #e4e4e4" :editor="editorRef"
|
<Toolbar style="border-bottom: 1px solid #e4e4e4; border-top: 1px solid #e4e4e4" :editor="editorRef"
|
||||||
:defaultConfig="toolbarConfig" mode="default" />
|
:defaultConfig="toolbarConfig" mode="default" />
|
||||||
<Editor v-bind="$attrs" :defaultConfig="editorConfig" mode="default" @onCreated="handleCreated"
|
<Editor v-bind="$attrs" :defaultConfig="editorConfig" mode="default" @onCreated="handleCreated"
|
||||||
style="height: calc(100% - 42px)" />
|
style="height: 300px;overflow-y: auto" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
|||||||
@@ -45,14 +45,14 @@
|
|||||||
</template>
|
</template>
|
||||||
</vxe-column>
|
</vxe-column>
|
||||||
<vxe-column field="source" title="数据来源"></vxe-column>
|
<vxe-column field="source" title="数据来源"></vxe-column>
|
||||||
<vxe-column field="useFLag" title="是否启用">
|
<!-- <vxe-column field="useFLag" title="是否启用">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag :type="row.useFLag === 1 ? 'success' : 'info'" effect="dark"
|
<el-tag :type="row.useFLag === 1 ? 'success' : 'info'" effect="dark"
|
||||||
style="cursor: pointer" @click="change(row)">
|
style="cursor: pointer" @click="change(row)">
|
||||||
{{ row.useFLag === 1 ? '是' : '否' }}
|
{{ row.useFLag === 1 ? '是' : '否' }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</vxe-column>
|
</vxe-column> -->
|
||||||
<vxe-column field="definition" title="定义">
|
<vxe-column field="definition" title="定义">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
|
|
||||||
@@ -81,11 +81,14 @@
|
|||||||
<PopupEdit ref="popupEditRef" v-if="popupEditFlag"
|
<PopupEdit ref="popupEditRef" v-if="popupEditFlag"
|
||||||
@getTree="treeRef.loadData(dotList.id), (popupEditFlag = false)" />
|
@getTree="treeRef.loadData(dotList.id), (popupEditFlag = false)" />
|
||||||
<!-- 定义 -->
|
<!-- 定义 -->
|
||||||
<el-dialog v-model="viewFlag" title="定义" width="60%">
|
<el-dialog draggable v-model="viewFlag" title="定义" width="60%">
|
||||||
<div class="editor" ref="editorRef" v-html="summary" style="min-height: 300px;" />
|
<div style="min-height: 300px; max-height: 55vh;">
|
||||||
|
<div class="editor" ref="editorRef" v-html="summary" />
|
||||||
|
|
||||||
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<!-- 删除 -->
|
<!-- 删除 -->
|
||||||
<el-dialog v-model="dialogVisible" title="请选择需要删除的数据" width="400">
|
<el-dialog draggable v-model="dialogVisible" title="请选择需要删除的数据" width="400">
|
||||||
<el-tree-select v-model="TreeValue" :data="TreeData" filterable check-strictly :props="defaultProps"
|
<el-tree-select v-model="TreeValue" :data="TreeData" filterable check-strictly :props="defaultProps"
|
||||||
default-expand-all :render-after-expand="false" />
|
default-expand-all :render-after-expand="false" />
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
|||||||
@@ -1,54 +1,37 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div class="charts" style="position: relative; width: 100%" v-loading="loading">
|
||||||
class="charts"
|
<div style="position: absolute; right: 60px; top: 5px; font-weight: bold"
|
||||||
style="position: relative; width: 100%"
|
v-if="!loading && tableStore.table.data.length != 0">
|
||||||
:style="`height: calc(${tableStore.table.height} - 75px)`"
|
<el-tag style="
|
||||||
v-loading="loading"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
style="position: absolute; right: 60px; top: 5px; font-weight: bold"
|
|
||||||
v-if="!loading && tableStore.table.data.length != 0"
|
|
||||||
>
|
|
||||||
<el-tag
|
|
||||||
style="
|
|
||||||
background: #cc0000;
|
background: #cc0000;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
border: 1px solid #cc0000;
|
border: 1px solid #cc0000;
|
||||||
float: left;
|
float: left;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
"
|
"></el-tag>
|
||||||
></el-tag>
|
|
||||||
<span style="color: #cc0000; font-weight: 400; float: left">  在线率<60%   </span>
|
<span style="color: #cc0000; font-weight: 400; float: left">  在线率<60%   </span>
|
||||||
<el-tag
|
<el-tag size="mini" style="
|
||||||
size="mini"
|
|
||||||
style="
|
|
||||||
background: #ffcc33;
|
background: #ffcc33;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
border: 1px solid #ffcc33;
|
border: 1px solid #ffcc33;
|
||||||
float: left;
|
float: left;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
"
|
"></el-tag>
|
||||||
></el-tag>
|
<span style="color: #ffcc33; font-weight: 400; float: left">  60%≤在线率<90%   </span>
|
||||||
<span style="color: #ffcc33; font-weight: 400; float: left">  60%≤在线率<90%   </span>
|
<el-tag style="
|
||||||
<el-tag
|
|
||||||
style="
|
|
||||||
background: #339966;
|
background: #339966;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
border: 1px solid #339966;
|
border: 1px solid #339966;
|
||||||
float: left;
|
float: left;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
"
|
"></el-tag>
|
||||||
></el-tag>
|
<span style="color: #339966; font-weight: 400; float: left">  在线率≥90%</span>
|
||||||
<span style="color: #339966; font-weight: 400; float: left">  在线率≥90%</span>
|
|
||||||
</div>
|
</div>
|
||||||
<my-echart
|
<my-echart class="mt10" :style="`margin-top:50px;height: calc(${tableStore.table.height} - 135px)`"
|
||||||
class="mt10"
|
:options="options" />
|
||||||
:style="`margin-top:50px;height: calc(${tableStore.table.height} - 120px)`"
|
|
||||||
:options="options"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@@ -126,19 +109,7 @@ const tableStore = new TableStore({
|
|||||||
legend: {
|
legend: {
|
||||||
show: false
|
show: false
|
||||||
},
|
},
|
||||||
toolbox: {
|
|
||||||
show: true,
|
|
||||||
feature: {
|
|
||||||
saveAsImage: {
|
|
||||||
// bottom: '10px',
|
|
||||||
show: true,
|
|
||||||
title: '保存'
|
|
||||||
// yAxisIndex: 'none'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
right: 0,
|
|
||||||
top: 0
|
|
||||||
},
|
|
||||||
tooltip: {
|
tooltip: {
|
||||||
backgroundColor: '#fff',
|
backgroundColor: '#fff',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
@@ -152,22 +123,14 @@ const tableStore = new TableStore({
|
|||||||
// legendColorList[i]
|
// legendColorList[i]
|
||||||
// }"></p>
|
// }"></p>
|
||||||
tips += `<div style="min-width:80px;display:flex;justify-content:space-between;align-items:center">
|
tips += `<div style="min-width:80px;display:flex;justify-content:space-between;align-items:center">
|
||||||
<span style="margin-left:5px;dislpay:block;min-width:80px;color:#000">${
|
<span style="margin-left:5px;dislpay:block;min-width:80px;color:#000">${params[i].seriesName
|
||||||
params[i].seriesName
|
}</span> ${params[i].seriesName == '在线率' ? params[i].value?.toFixed(2) : params[i].value
|
||||||
}</span> ${
|
} </div>`
|
||||||
params[i].seriesName == '在线率' ? params[i].value?.toFixed(2) : params[i].value
|
|
||||||
} </div>`
|
|
||||||
}
|
}
|
||||||
return tips
|
return tips
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
grid: {
|
|
||||||
top: '50px', // 等价于 y: '16%'
|
|
||||||
left: '10px',
|
|
||||||
right: '10px',
|
|
||||||
bottom: '40px',
|
|
||||||
containLabel: true
|
|
||||||
},
|
|
||||||
calculable: true,
|
calculable: true,
|
||||||
xAxis: {
|
xAxis: {
|
||||||
name: titleX,
|
name: titleX,
|
||||||
@@ -348,7 +311,7 @@ const tableStore = new TableStore({
|
|||||||
|
|
||||||
provide('tableStore', tableStore)
|
provide('tableStore', tableStore)
|
||||||
|
|
||||||
onMounted(() => {})
|
onMounted(() => { })
|
||||||
defineExpose({ getTableStoreParams })
|
defineExpose({ getTableStoreParams })
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss"></style>
|
<style scoped lang="scss"></style>
|
||||||
|
|||||||
@@ -131,6 +131,9 @@ import TableHeader from '@/components/table/header/index.vue'
|
|||||||
import TableStore from '@/utils/tableStore'
|
import TableStore from '@/utils/tableStore'
|
||||||
import Table from '@/components/table/index.vue'
|
import Table from '@/components/table/index.vue'
|
||||||
import charts from './components/charts.vue'
|
import charts from './components/charts.vue'
|
||||||
|
defineOptions({
|
||||||
|
name: 'harmonic-boot/harmonic/getIntegrityData'
|
||||||
|
})
|
||||||
const tableRef = ref()
|
const tableRef = ref()
|
||||||
const chartsRef = ref()
|
const chartsRef = ref()
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
@@ -183,7 +186,7 @@ const handleClick = (tab: any, e: any) => {
|
|||||||
// const datePickerRef = ref()
|
// const datePickerRef = ref()
|
||||||
const tableHeaderRef = ref()
|
const tableHeaderRef = ref()
|
||||||
const tableStore = new TableStore({
|
const tableStore = new TableStore({
|
||||||
// publicHeight: 60,
|
publicHeight: 60,
|
||||||
showPage: false,
|
showPage: false,
|
||||||
url: '/device-boot/LineIntegrityData/getLineIntegrityData',
|
url: '/device-boot/LineIntegrityData/getLineIntegrityData',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -352,17 +355,17 @@ watch(
|
|||||||
)
|
)
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.online {
|
// .online {
|
||||||
width: 100%;
|
// width: 100%;
|
||||||
height: 100%;
|
// height: 100%;
|
||||||
.online_header {
|
// .online_header {
|
||||||
width: 100%;
|
// width: 100%;
|
||||||
max-height: 140px;
|
// max-height: 140px;
|
||||||
padding: 10px;
|
// padding: 10px;
|
||||||
box-sizing: border-box;
|
// box-sizing: border-box;
|
||||||
}
|
// }
|
||||||
.online_main {
|
// .online_main {
|
||||||
padding: 0 10px;
|
// padding: 0 10px;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<my-echart
|
<my-echart
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
class="mt10"
|
class="mt10"
|
||||||
:style="`height: calc(${tableStore.table.height} - 75px)`"
|
:style="`height: calc(${tableStore.table.height} - 135px)`"
|
||||||
:options="options"
|
:options="options"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
@@ -65,19 +65,7 @@ const tableStore = new TableStore({
|
|||||||
title: {
|
title: {
|
||||||
text: title
|
text: title
|
||||||
},
|
},
|
||||||
toolbox: {
|
|
||||||
show: true,
|
|
||||||
feature: {
|
|
||||||
saveAsImage: {
|
|
||||||
// bottom: '10px',
|
|
||||||
show: true,
|
|
||||||
title: '保存'
|
|
||||||
// yAxisIndex: 'none'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
right: 10,
|
|
||||||
top: 0
|
|
||||||
},
|
|
||||||
tooltip: {
|
tooltip: {
|
||||||
formatter: function (params: any) {
|
formatter: function (params: any) {
|
||||||
var tips = ''
|
var tips = ''
|
||||||
@@ -94,13 +82,7 @@ const tableStore = new TableStore({
|
|||||||
return tips
|
return tips
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
grid: {
|
|
||||||
top: '50px', // 等价于 y: '16%'
|
|
||||||
left: '10px',
|
|
||||||
right: '10px',
|
|
||||||
bottom: '80px',
|
|
||||||
containLabel: true
|
|
||||||
},
|
|
||||||
xAxis: {
|
xAxis: {
|
||||||
name: titleX,
|
name: titleX,
|
||||||
data: tableStore.table.data.type
|
data: tableStore.table.data.type
|
||||||
|
|||||||
@@ -131,6 +131,9 @@ import TableHeader from '@/components/table/header/index.vue'
|
|||||||
import TableStore from '@/utils/tableStore'
|
import TableStore from '@/utils/tableStore'
|
||||||
import Table from '@/components/table/index.vue'
|
import Table from '@/components/table/index.vue'
|
||||||
import charts from './components/charts.vue'
|
import charts from './components/charts.vue'
|
||||||
|
defineOptions({
|
||||||
|
name: 'harmonic-boot/area/harmonicDistortionRate'
|
||||||
|
})
|
||||||
const tableRef = ref()
|
const tableRef = ref()
|
||||||
const onlineChartsRef = ref()
|
const onlineChartsRef = ref()
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
@@ -185,7 +188,7 @@ const handleClick = (tab: any, e: any) => {
|
|||||||
// const datePickerRef = ref()
|
// const datePickerRef = ref()
|
||||||
const tableHeaderRef = ref()
|
const tableHeaderRef = ref()
|
||||||
const tableStore = new TableStore({
|
const tableStore = new TableStore({
|
||||||
// publicHeight: 60,
|
publicHeight: 60,
|
||||||
showPage: false,
|
showPage: false,
|
||||||
url: '/harmonic-boot/tHDistortion/getTHDistortionData',
|
url: '/harmonic-boot/tHDistortion/getTHDistortionData',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -303,17 +306,17 @@ watch(
|
|||||||
)
|
)
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.online {
|
// .online {
|
||||||
width: 100%;
|
// width: 100%;
|
||||||
height: 100%;
|
// height: 100%;
|
||||||
.online_header {
|
// .online_header {
|
||||||
width: 100%;
|
// width: 100%;
|
||||||
max-height: 140px;
|
// max-height: 140px;
|
||||||
padding: 10px;
|
// padding: 10px;
|
||||||
box-sizing: border-box;
|
// box-sizing: border-box;
|
||||||
}
|
// }
|
||||||
.online_main {
|
// .online_main {
|
||||||
padding: 0 10px;
|
// padding: 0 10px;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,52 +1,37 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div class="charts" style="position: relative; width: 100%">
|
||||||
class="charts"
|
|
||||||
style="position: relative; width: 100%"
|
|
||||||
:style="`height: calc(${tableStore.table.height} - 75px)`"
|
|
||||||
>
|
|
||||||
|
|
||||||
<div style="position: absolute; right: 60px; top: 5px; font-weight: bold" v-if="!loading && tableStore.table.data.length != 0">
|
<div style="position: absolute; right: 60px; top: 5px; font-weight: bold"
|
||||||
<el-tag
|
v-if="!loading && tableStore.table.data.length != 0">
|
||||||
style="
|
<el-tag style="
|
||||||
background: #cc0000;
|
background: #cc0000;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
border: 1px solid #cc0000;
|
border: 1px solid #cc0000;
|
||||||
float: left;
|
float: left;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
"
|
"></el-tag>
|
||||||
></el-tag>
|
|
||||||
<span style="color: #cc0000; font-weight: 400; float: left">  在线率<60%   </span>
|
<span style="color: #cc0000; font-weight: 400; float: left">  在线率<60%   </span>
|
||||||
<el-tag
|
<el-tag size="mini" style="
|
||||||
size="mini"
|
|
||||||
style="
|
|
||||||
background: #ffcc33;
|
background: #ffcc33;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
border: 1px solid #ffcc33;
|
border: 1px solid #ffcc33;
|
||||||
float: left;
|
float: left;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
"
|
"></el-tag>
|
||||||
></el-tag>
|
<span style="color: #ffcc33; font-weight: 400; float: left">  60%≤在线率<90%   </span>
|
||||||
<span style="color: #ffcc33; font-weight: 400; float: left">  60%≤在线率<90%   </span>
|
<el-tag style="
|
||||||
<el-tag
|
|
||||||
style="
|
|
||||||
background: #339966;
|
background: #339966;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
border: 1px solid #339966;
|
border: 1px solid #339966;
|
||||||
float: left;
|
float: left;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
"
|
"></el-tag>
|
||||||
></el-tag>
|
<span style="color: #339966; font-weight: 400; float: left">  在线率>90%</span>
|
||||||
<span style="color: #339966; font-weight: 400; float: left">  在线率>90%</span>
|
|
||||||
</div>
|
</div>
|
||||||
<my-echart
|
<my-echart v-loading="loading" :style="`height: calc(${tableStore.table.height} - 125px)`" :options="options" />
|
||||||
v-loading="loading"
|
|
||||||
class="mt10"
|
|
||||||
:style="`height: calc(${tableStore.table.height} - 100px)`"
|
|
||||||
:options="options"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@@ -153,11 +138,9 @@ const tableStore = new TableStore({
|
|||||||
// legendColorList[i]
|
// legendColorList[i]
|
||||||
// }"></p>
|
// }"></p>
|
||||||
tips += `<div style="min-width:80px;display:flex;justify-content:space-between;align-items:center">
|
tips += `<div style="min-width:80px;display:flex;justify-content:space-between;align-items:center">
|
||||||
<span style="margin-left:5px;dislpay:block;min-width:80px;color:#000">${
|
<span style="margin-left:5px;dislpay:block;min-width:80px;color:#000">${params[i].seriesName
|
||||||
params[i].seriesName
|
}</span> ${params[i].seriesName == '在线率' ? params[i].value?.toFixed(2) : params[i].value
|
||||||
}</span> ${
|
} </div>`
|
||||||
params[i].seriesName == '在线率' ? params[i].value?.toFixed(2) : params[i].value
|
|
||||||
} </div>`
|
|
||||||
}
|
}
|
||||||
return tips
|
return tips
|
||||||
}
|
}
|
||||||
@@ -178,58 +161,32 @@ const tableStore = new TableStore({
|
|||||||
{
|
{
|
||||||
type: 'value',
|
type: 'value',
|
||||||
name: '台',
|
name: '台',
|
||||||
nameTextStyle: {
|
|
||||||
color: '#000',
|
|
||||||
verticalAlign: 'top', //标题位置
|
|
||||||
padding: [-22, 0, 10, 0]
|
|
||||||
},
|
|
||||||
// max:50,
|
// max:50,
|
||||||
// interval: 2,
|
// interval: 2,
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: true
|
show: false
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#000'
|
color: '#000'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
axisLine: {
|
|
||||||
show: true,
|
|
||||||
symbol: ['none', 'arrow'],
|
|
||||||
symbolOffset: 25, //箭头距离x轴末端距离
|
|
||||||
lineStyle: {
|
|
||||||
// shadowOffsetY: -25,
|
|
||||||
color: '#000',
|
|
||||||
shadowColor: '#000' //设置阴影的颜色
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'value',
|
type: 'value',
|
||||||
name: '%',
|
name: '%',
|
||||||
nameTextStyle: {
|
|
||||||
color: '#000',
|
|
||||||
verticalAlign: 'top', //标题位置
|
|
||||||
padding: [-22, 0, 10, 0]
|
|
||||||
},
|
|
||||||
max: 100,
|
max: 100,
|
||||||
// nameTextStyle: {
|
// nameTextStyle: {
|
||||||
// color: "#000"
|
// color: "#000"
|
||||||
// },
|
// },
|
||||||
position: 'right',
|
position: 'right',
|
||||||
offset: 0,
|
offset: 0,
|
||||||
axisLine: {
|
|
||||||
show: true,
|
|
||||||
// symbol: ["none", "arrow"],
|
|
||||||
symbolOffset: 20, //箭头距离x轴末端距离
|
|
||||||
lineStyle: {
|
|
||||||
shadowOffsetY: -20,
|
|
||||||
color: '#000',
|
|
||||||
shadowColor: '#000' //设置阴影的颜色
|
|
||||||
}
|
|
||||||
},
|
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: true
|
show: false
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
show: true,
|
show: true,
|
||||||
@@ -452,7 +409,7 @@ const tableStore = new TableStore({
|
|||||||
|
|
||||||
provide('tableStore', tableStore)
|
provide('tableStore', tableStore)
|
||||||
|
|
||||||
onMounted(() => {})
|
onMounted(() => { })
|
||||||
defineExpose({ getTableStoreParams })
|
defineExpose({ getTableStoreParams })
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss"></style>
|
<style scoped lang="scss"></style>
|
||||||
|
|||||||
@@ -199,6 +199,9 @@ import TableHeader from '@/components/table/header/index.vue'
|
|||||||
import TableStore from '@/utils/tableStore'
|
import TableStore from '@/utils/tableStore'
|
||||||
import Table from '@/components/table/index.vue'
|
import Table from '@/components/table/index.vue'
|
||||||
import charts from './components/charts.vue'
|
import charts from './components/charts.vue'
|
||||||
|
defineOptions({
|
||||||
|
name: 'harmonic-boot/area/terminalonlinerate'
|
||||||
|
})
|
||||||
const tableRef = ref()
|
const tableRef = ref()
|
||||||
const chartsRef = ref()
|
const chartsRef = ref()
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
@@ -251,10 +254,11 @@ const handleClick = (tab: any, e: any) => {
|
|||||||
// const datePickerRef = ref()
|
// const datePickerRef = ref()
|
||||||
const tableHeaderRef = ref()
|
const tableHeaderRef = ref()
|
||||||
const tableStore = new TableStore({
|
const tableStore = new TableStore({
|
||||||
// publicHeight: 60,
|
publicHeight: 100,
|
||||||
showPage: false,
|
showPage: false,
|
||||||
url: '/harmonic-boot/terminal/getTerminalData',
|
url: '/harmonic-boot/terminal/getTerminalData',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
|
||||||
column: [
|
column: [
|
||||||
{
|
{
|
||||||
title: formData.value.statisticalType.name,
|
title: formData.value.statisticalType.name,
|
||||||
@@ -399,19 +403,7 @@ watch(
|
|||||||
)
|
)
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.online {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
.online_header {
|
|
||||||
width: 100%;
|
|
||||||
max-height: 140px;
|
|
||||||
padding: 10px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.online_main {
|
|
||||||
padding: 0 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.table_legend {
|
.table_legend {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
|
|||||||
@@ -0,0 +1,124 @@
|
|||||||
|
<template>
|
||||||
|
<div class="default-main">
|
||||||
|
|
||||||
|
<TableHeader date-picker area>
|
||||||
|
<template #select>
|
||||||
|
<!-- <el-form-item label="统计类型:">
|
||||||
|
<el-select v-model="tableStore.table.params.statisticalType" placeholder="请选择统计类型" value-key="id">
|
||||||
|
<el-option v-for="item in classificationData" :key="item.id" :label="item.name" :value="item">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="电压等级:">
|
||||||
|
<el-select v-model="tableStore.table.params.scale" filterable multiple collapse-tags clearable
|
||||||
|
placeholder="请选择电压等级" 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="tableStore.table.params.manufacturer" filterable multiple collapse-tags
|
||||||
|
clearable placeholder="请选择终端厂家" value-key="id">
|
||||||
|
<el-option v-for="item in terminaloption" :key="item.id" :label="item.name" :value="item">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="干扰源类型:">
|
||||||
|
<el-select v-model="tableStore.table.params.loadType" filterable multiple collapse-tags clearable
|
||||||
|
placeholder="请选择干扰源类型" value-key="id">
|
||||||
|
<el-option v-for="item in interfereoption" :key="item.id" :label="item.name" :value="item">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</TableHeader>
|
||||||
|
<Table ref="tableRef" isGroup />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, onMounted, provide } from 'vue'
|
||||||
|
import TableStore from '@/utils/tableStore'
|
||||||
|
import Table from '@/components/table/index.vue'
|
||||||
|
import { useDictData } from '@/stores/dictData'
|
||||||
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
|
const dictData = useDictData()
|
||||||
|
defineOptions({
|
||||||
|
name: 'harmonic-boot/detailedAnalysis/station'
|
||||||
|
})
|
||||||
|
const view = ref(true)
|
||||||
|
const classificationData = dictData.getBasicData('Statistical_Type', ["Report_Type"])
|
||||||
|
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
|
||||||
|
const terminaloption = dictData.getBasicData('Dev_Manufacturers')
|
||||||
|
const interfereoption = dictData.getBasicData('Interference_Source')
|
||||||
|
|
||||||
|
|
||||||
|
const tableStore = new TableStore({
|
||||||
|
url: '/harmonic-boot/detailAnalysis/warnSubstationDetail',
|
||||||
|
method: 'POST',
|
||||||
|
column: [
|
||||||
|
{
|
||||||
|
field: 'index',
|
||||||
|
title: '序号',
|
||||||
|
width: '60',
|
||||||
|
formatter: (row: any) => {
|
||||||
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ field: 'provinceCompany', title: '地级区', minWidth: "100px", },
|
||||||
|
{ field: 'cityCompany', title: '地区公司', minWidth: "100px", },
|
||||||
|
{ field: 'plantName', title: '变电站名称', minWidth: "180px", },
|
||||||
|
{ field: 'plantVoltageLevel', title: '电压等级', minWidth: "100px", },
|
||||||
|
{ field: 'onlineMonitorCounts', title: '在线监测点数量(个)', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "150px", },
|
||||||
|
{ field: 'alertMonitorCounts', title: '告警监测点数量(个)', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "150px", },
|
||||||
|
{ field: 'alertCounts', title: '告警次数', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
{ field: 'alertAlarmFrequency', title: '告警频次(次/点)', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "150px", },
|
||||||
|
{
|
||||||
|
title: '各项稳态指标告警频次(次/点)', children: [
|
||||||
|
{ field: 'frequencyDeviation', title: '频率偏差', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
{ field: 'voltageDeviation', title: '电压偏差', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
{ field: 'harmonicVoltage', title: '谐波电压', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
{ field: 'harmonicCurrent', title: '谐波电流', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
{ field: 'threePhaseVoltageUnbalance', title: '三相电压不平衡度', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "180px", },
|
||||||
|
{ field: 'flicker', title: '闪变', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
{ field: 'negative', title: '负序电流', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
{ field: 'interHarmonic', title: '间谐波电压', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
title: '各项暂态指标告警频次(次/点)', children: [
|
||||||
|
{ field: 'shortInterruption', title: '短时中断', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
{ field: 'voltageDip', title: '电压暂降', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
{ field: 'voltageSwell', title: '电压暂升', formatter: (row: any) => { return row.cellValue == -1 ? '/' : row.cellValue }, minWidth: "100px", },
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
loadCallback: () => {
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
tableStore.table.params.statisticalType = classificationData[0]
|
||||||
|
tableStore.table.params.powerFlag = 2
|
||||||
|
tableStore.table.params.monitorFlag = 2
|
||||||
|
tableStore.table.params.scale = []
|
||||||
|
tableStore.table.params.manufacturer = []
|
||||||
|
tableStore.table.params.loadType = []
|
||||||
|
const wp = ref({})
|
||||||
|
|
||||||
|
provide('tableStore', tableStore)
|
||||||
|
onMounted(() => {
|
||||||
|
tableStore.index()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
|
|
||||||
<el-dialog v-model="dialogVisible" :title="title" width="70%">
|
<el-dialog draggable v-model="dialogVisible" :title="title" width="70%">
|
||||||
<vxe-table height="400px" auto-resize :data="tableData" v-loading="loading" v-bind="defaultAttribute"
|
<div style="height: 55vh">
|
||||||
|
<vxe-table height="auto" auto-resize :data="tableData" v-loading="loading" v-bind="defaultAttribute"
|
||||||
:key="key">
|
:key="key">
|
||||||
|
|
||||||
<vxe-column field="name" title="名称"></vxe-column>
|
<vxe-column field="name" title="名称"></vxe-column>
|
||||||
@@ -60,7 +61,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</vxe-column>
|
</vxe-column>
|
||||||
</vxe-table>
|
</vxe-table>
|
||||||
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
|
|
||||||
<el-dialog v-model="dialogVisible" title="排名前10的监测点" width="1200">
|
<el-dialog v-model="dialogVisible" title="排名前10的监测点" width="1200">
|
||||||
<div style="height: 500px">
|
<div style="height: 55vh">
|
||||||
<my-echart class="tall" :options="echartList" />
|
<my-echart class="tall" :options="echartList" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -188,9 +188,8 @@ import { ref, onMounted, provide } from 'vue'
|
|||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
import * as echarts from 'echarts/core'
|
import * as echarts from 'echarts/core'
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: 'Region/distribution'
|
name: 'harmonic-boot/qydetailedAnalysis/pollutionqy'
|
||||||
})
|
})
|
||||||
|
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const echartList = ref({})
|
const echartList = ref({})
|
||||||
const provinceDetailsRef = ref()
|
const provinceDetailsRef = ref()
|
||||||
@@ -494,7 +493,7 @@ const histogram = (res: any) => {
|
|||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
tableStore.index()
|
tableStore.index()
|
||||||
})
|
})
|
||||||
const layout = mainHeight(123) as any
|
const layout = mainHeight(133) as any
|
||||||
const layout1 = mainHeight(93) as any
|
const layout1 = mainHeight(93) as any
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -0,0 +1,133 @@
|
|||||||
|
<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">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div v-if="!voltageLevelFlag">
|
||||||
|
<vxe-column field="name" title="名称" min-width="150"></vxe-column>
|
||||||
|
<vxe-column field="onlineCount" title="在线监测点数" min-width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.onlineCount == 3.14159 ? '暂无数据' : scope.row.onlineCount }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="overLineCount" min-width="120" title="超标监测点数">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.overLineCount == 3.14159 ? '暂无数据' : scope.row.overLineCount }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="averageOverDay" min-width="120" title="平均超标天数">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.averageOverDay == 3.14159 ? '暂无数据' : scope.row.averageOverDay }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="ratio" title="超标占比(%)">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.ratio == 3.14159 ? '暂无数据' : scope.row.ratio }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="warningFreq" title="告警频次">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.warningFreq == 3.14159 ? '暂无数据' : scope.row.warningFreq }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<vxe-column field="name" title="名称" min-width="150"></vxe-column>
|
||||||
|
<vxe-column field="overDays" title="超标天数"></vxe-column>
|
||||||
|
<vxe-colgroup title="各指标超标次数">
|
||||||
|
<vxe-column field="overThreeTimes" title="3次">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.overThreeTimes == 3.14159 ? '暂无数据' : scope.row.overThreeTimes }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="overFiveTimes" title="5次">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.overFiveTimes == 3.14159 ? '暂无数据' : scope.row.overFiveTimes }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="overSevenTimes" title="7次">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.overSevenTimes == 3.14159 ? '暂无数据' : scope.row.overSevenTimes }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="overElevenTimes" title="11次">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.overElevenTimes == 3.14159 ? '暂无数据' : scope.row.overElevenTimes }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="overThirteenTimes" title="13次">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.overThirteenTimes == 3.14159 ? '暂无数据' : scope.row.overThirteenTimes }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="overTwentyThreeTimes" title="23次">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.overTwentyThreeTimes == 3.14159 ? '暂无数据' : scope.row.overTwentyThreeTimes
|
||||||
|
}}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="overTwentyFiveTimes" title="25次">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.overTwentyFiveTimes == 3.14159 ? '暂无数据' : scope.row.overTwentyFiveTimes }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="otherTimes" title="其他次">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.otherTimes == 3.14159 ? '暂无数据' : scope.row.otherTimes }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
</vxe-colgroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</vxe-table>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup lang='ts'>
|
||||||
|
import { ref, reactive } from 'vue'
|
||||||
|
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
||||||
|
import { getSubInfoById, getXbLineInfoById } from '@/api/harmonic-boot/area'
|
||||||
|
const dialogVisible = ref(false)
|
||||||
|
const loading = ref(false)
|
||||||
|
const voltageLevelFlag = ref(false)
|
||||||
|
const tableData = ref([])
|
||||||
|
const title = ref('')
|
||||||
|
const key = ref(0)
|
||||||
|
const statisticalName = ref('')
|
||||||
|
const open = (row: any, flag: boolean, params: any) => {
|
||||||
|
voltageLevelFlag.value = flag
|
||||||
|
loading.value = true
|
||||||
|
title.value = row.name + '详情'
|
||||||
|
statisticalName.value = params.statisticalType.name + '(%)'
|
||||||
|
tableData.value = []
|
||||||
|
if (flag) {
|
||||||
|
getXbLineInfoById({ ...params, deptIndex: row.pid, id: row.id }).then((res: any) => {
|
||||||
|
tableData.value = res.data
|
||||||
|
loading.value = false
|
||||||
|
}).catch(() => {
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
|
||||||
|
} else {
|
||||||
|
getSubInfoById({ ...params, deptIndex: row.id }).then((res: any) => {
|
||||||
|
tableData.value = res.data
|
||||||
|
loading.value = false
|
||||||
|
}).catch(() => {
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
key.value += 1
|
||||||
|
dialogVisible.value = true
|
||||||
|
}
|
||||||
|
defineExpose({ open })
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped></style>
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
<el-dialog v-model="dialogVisible" title="排名前10的监测点" width="1200">
|
||||||
|
<div style="height: 55vh">
|
||||||
|
<my-echart class="tall" :options="echartList" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup lang='ts'>
|
||||||
|
import { ref, reactive } from 'vue'
|
||||||
|
import MyEchart from '@/components/echarts/MyEchart.vue'
|
||||||
|
import { getXbLineRank } from '@/api/harmonic-boot/area'
|
||||||
|
import * as echarts from 'echarts/core'
|
||||||
|
const dialogVisible = ref(false)
|
||||||
|
|
||||||
|
const echartList = ref({})
|
||||||
|
|
||||||
|
const open = (row: any,) => {
|
||||||
|
getXbLineRank({ ...row, reportFlag: 3, id: '' }).then((res: any) => {
|
||||||
|
echartList.value = {
|
||||||
|
// title: {
|
||||||
|
// text: ''
|
||||||
|
// },
|
||||||
|
tooltip: {
|
||||||
|
formatter: function (params: any) {
|
||||||
|
// console.log(params);
|
||||||
|
var tips = ''
|
||||||
|
for (var i = 0; i < params.length; i++) {
|
||||||
|
tips += params[i].name + '</br/>'
|
||||||
|
tips += '超标天数' + ':' + ' ' + ' ' + (params[i].value == 0.14159 ? '暂无数据' : params[i].value +'天') + '</br/>'
|
||||||
|
}
|
||||||
|
return tips
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
xAxis: {
|
||||||
|
name: '监测点',
|
||||||
|
data: res.data.map((item: any) => item.name),
|
||||||
|
axisLabel: {
|
||||||
|
fontFamily: 'dinproRegular',
|
||||||
|
color: '#000',
|
||||||
|
fontSize: '12',
|
||||||
|
rotate: 30,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
name: '天',// 给X轴加单位
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
options: {
|
||||||
|
dataZoom: null,
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
|
||||||
|
type: 'bar',
|
||||||
|
data: res.data.map((item: any) => {
|
||||||
|
return item.overDays == 3.14159 ? 0.14159 : item.overDays
|
||||||
|
}),
|
||||||
|
barMaxWidth: 30,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dialogVisible.value = true
|
||||||
|
}
|
||||||
|
defineExpose({ open })
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped></style>
|
||||||
@@ -0,0 +1,473 @@
|
|||||||
|
<template>
|
||||||
|
<div class="default-main">
|
||||||
|
<TableHeader datePicker ref="header">
|
||||||
|
<template v-slot:select>
|
||||||
|
<el-form-item label="统计类型">
|
||||||
|
<el-select v-model="tableStore.table.params.statisticalType" value-key="id" placeholder="请选择统计类型">
|
||||||
|
<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="el-icon-DataAnalysis"
|
||||||
|
@click="rankingClick">排名前10监测点</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</TableHeader>
|
||||||
|
<div v-loading="tableStore.table.loading" class="pr10">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12" class="pd10">
|
||||||
|
<el-tag style="background: #339966; color: #fff" size="small">优</el-tag>
|
||||||
|
<span style="color: #339966">:优秀≤60%</span>
|
||||||
|
<el-tag style="background: #ffcc33; color: #fff" size="small">良</el-tag>
|
||||||
|
<span style="color: #ffcc33">:60%<良好<90% </span>
|
||||||
|
<el-tag style="background: #cc0000; color: #fff" size="small">差</el-tag>
|
||||||
|
<span style="color: #cc0000">:极差≥90%</span>
|
||||||
|
<div :style="{ height: layout.height }" style="overflow-y: auto" class="mt10">
|
||||||
|
<div class=" cardBox">
|
||||||
|
<el-card v-for="(item, index) in tableStore.table.data" :key="index">
|
||||||
|
<template #header>
|
||||||
|
<div style="cursor: pointer;" @click="queryline(item, false)">
|
||||||
|
<el-tag v-if="item.data < 60 && item.data > 0"
|
||||||
|
style="color: #fff; background: #339966" size="small">
|
||||||
|
优
|
||||||
|
</el-tag>
|
||||||
|
<el-tag v-if="60 <= item.data && item.data < 90"
|
||||||
|
style="color: #fff; background: #ffcc33" size="small">
|
||||||
|
良
|
||||||
|
</el-tag>
|
||||||
|
<el-tag v-if="90 <= item.data && item.data"
|
||||||
|
style="color: #fff; background: #cc0000" size="small">
|
||||||
|
差
|
||||||
|
</el-tag>
|
||||||
|
<el-tag v-if="item.data == 3.14159 || item.data == 0"
|
||||||
|
style="color: #fff; background: #ccc" size="small">
|
||||||
|
无
|
||||||
|
</el-tag>
|
||||||
|
<span>{{ item.name }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<div class="card-content">
|
||||||
|
<div class="card-item" v-for="(item1, index1) in item.children"
|
||||||
|
:key="index1" @click="queryline(item1, true)">
|
||||||
|
<el-tag v-if="item1.data == 3.14159 || item1.data == 0"
|
||||||
|
style="background: #ccc; color: #fff" size="small">
|
||||||
|
无
|
||||||
|
</el-tag>
|
||||||
|
<el-tag
|
||||||
|
v-if="0 < item1.data && item1.data < 1 && item1.data !== 3.14159"
|
||||||
|
style="background: #339966; color: #fff" size="small">
|
||||||
|
1级
|
||||||
|
</el-tag>
|
||||||
|
<el-tag
|
||||||
|
v-if="1 <= item1.data && item1.data < 1.2 && item1.data !== 3.14159"
|
||||||
|
style="background: #3399ff; color: #fff" size="small">
|
||||||
|
2级
|
||||||
|
</el-tag>
|
||||||
|
<el-tag
|
||||||
|
v-if="1.2 <= item1.data && item1.data < 1.6 && item1.data !== 3.14159"
|
||||||
|
style="background: #ffcc33; color: #fff" size="small">
|
||||||
|
3级
|
||||||
|
</el-tag>
|
||||||
|
<el-tag
|
||||||
|
v-if="1.6 <= item1.data && item1.data < 2 && item1.data !== 3.14159"
|
||||||
|
style="background: #ff9900; color: #fff" size="small">
|
||||||
|
4级
|
||||||
|
</el-tag>
|
||||||
|
<el-tag v-if="2 <= item1.data && item1.data && item1.data !== 3.14159"
|
||||||
|
style="background: #cc0000; color: #fff" size="small">
|
||||||
|
5级
|
||||||
|
</el-tag>
|
||||||
|
<span class="xdf">
|
||||||
|
<el-tooltip :show-arrow="false" :offset="-0" :content="item1.name"
|
||||||
|
popper-class="atooltip" placement="bottom-start">
|
||||||
|
|
||||||
|
<div class="tooltipText">
|
||||||
|
{{ item1.name }}
|
||||||
|
</div>
|
||||||
|
</el-tooltip>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<my-echart class="tall" :options="echartList" />
|
||||||
|
<div class="tall">
|
||||||
|
<vxe-table height="auto" auto-resize :data="dataList" v-bind="defaultAttribute">
|
||||||
|
<vxe-column field="name" title="名称"></vxe-column>
|
||||||
|
<vxe-column field="onlineCount" title="在线监测点数(个)">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.onlineCount == 3.14159 ? '暂无数据' : scope.row.onlineCount == 0 ? '/' : scope.row.onlineCount }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="overLineCount" title="超标监测点数(个)">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.overLineCount == 3.14159 ? '暂无数据' : scope.row.overLineCount == 0 ? '/': scope.row.overLineCount }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="averageOverDay" title="平均超标天数(天)">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.averageOverDay == 3.14159 ? '暂无数据' : scope.row.averageOverDay == 0 ?'/' : scope.row.averageOverDay }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column field="ratio" title="监测点超标占比(%)">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.ratio == 3.14159 ? '暂无数据' : scope.row.ratio == 0 ? '/' : scope.row.ratio }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
|
||||||
|
</vxe-table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
<!-- 详情 -->
|
||||||
|
<provinceDetails ref="provinceDetailsRef" />
|
||||||
|
<!-- 排名前10的监测点 -->
|
||||||
|
<ranking ref="rankingRef" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
|
import { useDictData } from '@/stores/dictData'
|
||||||
|
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
||||||
|
import provinceDetails from './components/provinceDetails.vue'
|
||||||
|
import ranking from './components/ranking.vue'
|
||||||
|
import MyEchart from '@/components/echarts/MyEchart.vue'
|
||||||
|
import TableStore from '@/utils/tableStore'
|
||||||
|
import { ref, onMounted, provide } from 'vue'
|
||||||
|
import { mainHeight } from '@/utils/layout'
|
||||||
|
import { deptInfo } from '@/api/harmonic-boot/area'
|
||||||
|
import * as echarts from 'echarts/core'
|
||||||
|
defineOptions({
|
||||||
|
name: 'harmonic-boot/detailedAnalysis/station'
|
||||||
|
})
|
||||||
|
const dictData = useDictData()
|
||||||
|
const echartList = ref({})
|
||||||
|
const provinceDetailsRef = ref()
|
||||||
|
const rankingRef = ref()
|
||||||
|
const dataList = ref([])
|
||||||
|
|
||||||
|
const header = ref()
|
||||||
|
const options = dictData.getBasicData('Indicator_Type', ['PLPC', 'DYPC', 'SXDYBPHD', 'CSSB', 'FXDL', 'JXBDY'])
|
||||||
|
const tableStore = new TableStore({
|
||||||
|
url: '/harmonic-boot/detailAnalysis/deptSubRelations',
|
||||||
|
method: 'POST',
|
||||||
|
column: [],
|
||||||
|
loadCallback: () => {
|
||||||
|
deptInfo(tableStore.table.params).then((res: any) => {
|
||||||
|
histogram(res.data)
|
||||||
|
dataList.value = res.data
|
||||||
|
})
|
||||||
|
header.value.areaRef.change()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
provide('tableStore', tableStore)
|
||||||
|
|
||||||
|
tableStore.table.params.deptIndex = dictData.state.area[0].id
|
||||||
|
tableStore.table.params.statisticalType = options[0]
|
||||||
|
tableStore.table.params.monitorFlag = 2
|
||||||
|
tableStore.table.params.powerFlag = 2
|
||||||
|
tableStore.table.params.statFlag = true
|
||||||
|
tableStore.table.params.serverName = 'event-boot'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 地图数处理
|
||||||
|
const rankingClick = () => {
|
||||||
|
rankingRef.value.open(tableStore.table.params)
|
||||||
|
}
|
||||||
|
const queryline = (row: any, flag: boolean) => {
|
||||||
|
provinceDetailsRef.value.open(row, flag, tableStore.table.params)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表格数据处理
|
||||||
|
// 柱状图数据处理
|
||||||
|
const histogram = (res: any) => {
|
||||||
|
|
||||||
|
|
||||||
|
echartList.value = {
|
||||||
|
title: {
|
||||||
|
text: '监测点超标占比'
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
formatter: function (params: any) {
|
||||||
|
// console.log(params);
|
||||||
|
var tips = ''
|
||||||
|
for (var i = 0; i < params.length; i++) {
|
||||||
|
tips += params[i].name + '</br/>'
|
||||||
|
tips += '监测点数' + ':' + ' ' + ' ' + (params[i].value == 0.14159 ? '暂无数据' : params[i].value) + '</br/>'
|
||||||
|
}
|
||||||
|
return tips
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
xAxis: {
|
||||||
|
name: '区域',
|
||||||
|
data: res.map((item: any) => item.name)
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
name: '等级',// 给X轴加单位
|
||||||
|
min: 0,
|
||||||
|
max: 100,
|
||||||
|
|
||||||
|
splitLine: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
show: true,
|
||||||
|
|
||||||
|
// 这里重新定义就可以
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
options: {
|
||||||
|
dataZoom: null,
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
|
||||||
|
type: 'bar',
|
||||||
|
data: res.map((item: any) => {
|
||||||
|
return item.lineRatio == 3.14159 ? 0.14159 : item.lineRatio
|
||||||
|
}),
|
||||||
|
barMaxWidth: 30,
|
||||||
|
|
||||||
|
itemStyle: {
|
||||||
|
normal: {
|
||||||
|
// 随机显示
|
||||||
|
//color:function(d){return "#"+Math.floor(Math.random()*(256*256*256-1)).toString(16);}
|
||||||
|
|
||||||
|
// 定制显示(按顺序)
|
||||||
|
color: function (params) {
|
||||||
|
if (params.value == 0 || params.value == 0.14159) {
|
||||||
|
return '#ccc'
|
||||||
|
} else if (params.value >= 90) {
|
||||||
|
return new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#CC0000'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
} else if (60 < params.value && params.value < 90) {
|
||||||
|
return new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#FFCC33'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
} else if (
|
||||||
|
|
||||||
|
params.value <= 60 &&
|
||||||
|
params.value >= 0 &&
|
||||||
|
params.value !== 0.05
|
||||||
|
) {
|
||||||
|
return new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#339966'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
} else if (params.value == 0.05) {
|
||||||
|
return new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#999999'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
markLine: {
|
||||||
|
silent: false,
|
||||||
|
symbol: 'circle',
|
||||||
|
lineStyle: {
|
||||||
|
color: 'red',
|
||||||
|
width: 1
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
lineStyle: {
|
||||||
|
width: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
name: '',
|
||||||
|
yAxis: 60,
|
||||||
|
lineStyle: {
|
||||||
|
color: '#339966'
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
//position: "middle",
|
||||||
|
formatter: '{b}',
|
||||||
|
textStyle: {
|
||||||
|
color: '#339966'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
name: '',
|
||||||
|
yAxis: 90,
|
||||||
|
lineStyle: {
|
||||||
|
color: '#FFCC33'
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
// position: "middle",
|
||||||
|
formatter: '{b}',
|
||||||
|
textStyle: {
|
||||||
|
color: '#FFCC33'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
name: '',
|
||||||
|
yAxis: 100,
|
||||||
|
lineStyle: {
|
||||||
|
color: '#CC0000'
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
// position: "middle",
|
||||||
|
formatter: '{b}',
|
||||||
|
textStyle: {
|
||||||
|
color: '#CC0000'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
tableStore.index()
|
||||||
|
})
|
||||||
|
const layout = mainHeight(133) as any
|
||||||
|
const layout1 = mainHeight(93) as any
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.tall {
|
||||||
|
height: calc(v-bind('layout1.height') / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
color: #fff;
|
||||||
|
border: #fff;
|
||||||
|
margin-left: 5px;
|
||||||
|
width: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.cardBox) {
|
||||||
|
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: auto;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||||
|
grid-template-rows: max-content;
|
||||||
|
grid-gap: 10px;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.el-card {
|
||||||
|
background-image: linear-gradient(var(--el-color-primary), var(--el-color-primary-light-3));
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.el-card__header {
|
||||||
|
padding: 10px !important;
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
div {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-card__body {
|
||||||
|
padding: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-content {
|
||||||
|
height: 200px;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
overflow-y: auto;
|
||||||
|
color: #000;
|
||||||
|
|
||||||
|
.card-item {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
width: 50%;
|
||||||
|
display: flex;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdf {
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltipText {
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #fff;
|
||||||
|
// width: 50%;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
margin-left: 5px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,543 @@
|
|||||||
|
<template>
|
||||||
|
<div class="default-main">
|
||||||
|
<TableHeader area date-picker ref="header">
|
||||||
|
<template v-slot:select>
|
||||||
|
<el-form-item label="统计类型">
|
||||||
|
<el-select v-model="tableStore.table.params.statisticalType" value-key="id" placeholder="请选择统计类型">
|
||||||
|
<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</TableHeader>
|
||||||
|
<div v-loading="tableStore.table.loading" class="pr10">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<MyEchartMap ref="EchartMap" :options="echartMapList" class="map"
|
||||||
|
@getRegionByRegion="getRegionByRegion" />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<my-echart class="tall" :options="echartList" />
|
||||||
|
<div class="tall">
|
||||||
|
<vxe-table height="auto" auto-resize :data="tableStore.table.data" v-bind="defaultAttribute">
|
||||||
|
<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"
|
||||||
|
size="small">
|
||||||
|
{{ scope.row.data }}
|
||||||
|
</span>
|
||||||
|
<span v-if="scope.row.data == 0.1" type="primary" size="small">/</span>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
|
||||||
|
<vxe-column field="data" 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-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
<div class="mask"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
|
import { useDictData } from '@/stores/dictData'
|
||||||
|
import MyEchartMap from '@/components/echarts/MyEchartMap.vue'
|
||||||
|
import MyEchart from '@/components/echarts/MyEchart.vue'
|
||||||
|
import TableStore from '@/utils/tableStore'
|
||||||
|
import { ref, onMounted, provide } from 'vue'
|
||||||
|
import { mainHeight } from '@/utils/layout'
|
||||||
|
import * as echarts from 'echarts/core'
|
||||||
|
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
||||||
|
defineOptions({
|
||||||
|
name: 'harmonic-boot/detailedAnalysis/pollution'
|
||||||
|
})
|
||||||
|
const EchartMap = ref()
|
||||||
|
const dictData = useDictData()
|
||||||
|
const changeName = ref('')
|
||||||
|
const echartMapList: any = ref({})
|
||||||
|
const echartList = ref({})
|
||||||
|
const header = ref()
|
||||||
|
const list: any = ref([])
|
||||||
|
const geoCoordMap: any = ref([])
|
||||||
|
const options = dictData.getBasicData('Pollution_Statis', ['V_All', 'I_Neg', 'V_Inharm', 'V_Dev', 'V_Unbalance', 'Plt', 'Freq_Dev'])
|
||||||
|
const tableStore = new TableStore({
|
||||||
|
url: '/harmonic-boot/PollutionSubstation/deptSubstationRelations',
|
||||||
|
method: 'POST',
|
||||||
|
column: [],
|
||||||
|
beforeSearchFun: () => { },
|
||||||
|
loadCallback: () => {
|
||||||
|
changeName.value = tableStore.table.params.statisticalType.name
|
||||||
|
map(tableStore.table.data)
|
||||||
|
histogram(tableStore.table.data)
|
||||||
|
EchartMap.value.GetEchar(header.value.areaRef.areaName)
|
||||||
|
console.log("🚀 ~ header.value.areaRef.areaName:", header.value.areaRef.areaName)
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
tableStore.table.params.monitorFlag = 2
|
||||||
|
tableStore.table.params.powerFlag = 2
|
||||||
|
tableStore.table.params.reportFlag = 3
|
||||||
|
|
||||||
|
tableStore.table.params.statisticalType = options[0]
|
||||||
|
provide('tableStore', tableStore)
|
||||||
|
|
||||||
|
// 地图点击事件
|
||||||
|
const getRegionByRegion = (list: any) => {
|
||||||
|
tableStore.table.params.deptIndex = list.id
|
||||||
|
tableStore.onTableAction('search', {})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 地图数处理
|
||||||
|
const map = (res: any) => {
|
||||||
|
let areaData: any = []
|
||||||
|
let xarr = []
|
||||||
|
let yarr = []
|
||||||
|
let arr = []
|
||||||
|
let arr1: any = []
|
||||||
|
res.forEach(element => {
|
||||||
|
xarr.push(element.name)
|
||||||
|
if (element.data == 0) {
|
||||||
|
element.data = 0.1
|
||||||
|
yarr.push(element.data)
|
||||||
|
}
|
||||||
|
yarr.push(element.data)
|
||||||
|
let p = {
|
||||||
|
name: element.name,
|
||||||
|
value: element.data
|
||||||
|
}
|
||||||
|
arr.push(p)
|
||||||
|
let d = element.name.split('\n')
|
||||||
|
let p1 = {
|
||||||
|
name: d[0],
|
||||||
|
value: element.data
|
||||||
|
}
|
||||||
|
|
||||||
|
arr1.push(p1)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
echartMapList.value = {
|
||||||
|
name: '',
|
||||||
|
title: {
|
||||||
|
text: '电能质量污区图分布'
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
formatter: function (params) {
|
||||||
|
var tips = ''
|
||||||
|
|
||||||
|
if (params.value === -1 || window.isNaN(params.value)) {
|
||||||
|
tips =
|
||||||
|
"<font style='color:#fff'>" +
|
||||||
|
params.name +
|
||||||
|
'</font><br/>区域污染评估:' +
|
||||||
|
"<font style='color:#fff'><font style='color:#fff'>暂无数据</font><br/>"
|
||||||
|
} else if (params.value === 0.1 || window.isNaN(params.value)) {
|
||||||
|
tips =
|
||||||
|
"<font style='color:#fff'>" +
|
||||||
|
params.name +
|
||||||
|
'</font><br/>区域污染评估:' +
|
||||||
|
"<font style='color:#fff'><font style='color:#fff'>暂无数据</font><br/>"
|
||||||
|
} else {
|
||||||
|
tips +=
|
||||||
|
"<font style='color:#fff'>" +
|
||||||
|
params.name +
|
||||||
|
'</font><br/>区域污染评估' +
|
||||||
|
"<font style='color:#fff'>:" +
|
||||||
|
params.value +
|
||||||
|
'</font><br/>'
|
||||||
|
}
|
||||||
|
return tips
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
visualMap: {
|
||||||
|
min: 0,
|
||||||
|
max: 2,
|
||||||
|
left: 25,
|
||||||
|
bottom: 40,
|
||||||
|
pieces: [
|
||||||
|
{
|
||||||
|
gt: 2,
|
||||||
|
lt: 10000,
|
||||||
|
label: '重度污染',
|
||||||
|
color: '#CC0000',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gte: 1.2,
|
||||||
|
lt: 1.6,
|
||||||
|
label: '轻度污染',
|
||||||
|
color: '#FFCC33'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gt: 1.6,
|
||||||
|
lt: 2,
|
||||||
|
label: '中度污染',
|
||||||
|
color: '#FF9900'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gte: 1,
|
||||||
|
lte: 1.2,
|
||||||
|
label: '轻微污染',
|
||||||
|
color: '#3399FF'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gte: 0.1,
|
||||||
|
lte: 1,
|
||||||
|
label: '无污染',
|
||||||
|
color: '#339966'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gte: -1,
|
||||||
|
lte: 0.05,
|
||||||
|
label: '无数据',
|
||||||
|
color: '#ccc'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
|
||||||
|
options: {
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
|
||||||
|
type: "map",
|
||||||
|
geoIndex: 0,
|
||||||
|
data: arr1,
|
||||||
|
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 柱状图数据处理
|
||||||
|
const histogram = (res: any) => {
|
||||||
|
echartList.value = {
|
||||||
|
title: {
|
||||||
|
text: '区域'
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
formatter: function (params: any) {
|
||||||
|
// console.log(params);
|
||||||
|
var tips = ''
|
||||||
|
for (var i = 0; i < params.length; i++) {
|
||||||
|
tips += params[i].name + '</br/>'
|
||||||
|
tips += '监测点数' + ':' + ' ' + ' ' + (params[i].value == 0.14159 ? '暂无数据' : params[i].value) + '</br/>'
|
||||||
|
}
|
||||||
|
return tips
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
xAxis: {
|
||||||
|
name: '区域',
|
||||||
|
data: res.map((item: any) => item.name)
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
name: '等级',// 给X轴加单位
|
||||||
|
min: 0,
|
||||||
|
max: 2,
|
||||||
|
interval: 0.2,
|
||||||
|
splitLine: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
show: true,
|
||||||
|
|
||||||
|
// 这里重新定义就可以
|
||||||
|
formatter: function (value, index) {
|
||||||
|
var texts = []
|
||||||
|
if (value === 1) {
|
||||||
|
texts.push('1级')
|
||||||
|
} else if (value === 1.2) {
|
||||||
|
texts.push('2级')
|
||||||
|
} else if (value === 1.4) {
|
||||||
|
texts.push('3级')
|
||||||
|
} else if (value === 1.6) {
|
||||||
|
texts.push('4级')
|
||||||
|
} else if (value === 2) {
|
||||||
|
texts.push('5级')
|
||||||
|
}
|
||||||
|
return texts
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
options: {
|
||||||
|
dataZoom: null,
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
|
||||||
|
type: 'bar',
|
||||||
|
data: res.map((item: any) => {
|
||||||
|
return item.data == 3.14159 ? 0.14159 : item.data
|
||||||
|
}),
|
||||||
|
barMaxWidth: 30,
|
||||||
|
|
||||||
|
itemStyle: {
|
||||||
|
normal: {
|
||||||
|
// 随机显示
|
||||||
|
//color:function(d){return "#"+Math.floor(Math.random()*(256*256*256-1)).toString(16);}
|
||||||
|
|
||||||
|
// 定制显示(按顺序)
|
||||||
|
color: function (params) {
|
||||||
|
if (params.value == 0 || params.value == 0.14159) {
|
||||||
|
return '#ccc'
|
||||||
|
} else if (params.value > 2) {
|
||||||
|
return new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#CC0000'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
} else if (1.6 < params.value && params.value <= 2) {
|
||||||
|
return new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#FF9900'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
} else if (1.2 < params.value && params.value <= 1.6) {
|
||||||
|
return new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#FFCC33'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
} else if (1 < params.value && params.value <= 1.2) {
|
||||||
|
return new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#3399FF'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
} else if (
|
||||||
|
0 < params.value &&
|
||||||
|
params.value <= 1 &&
|
||||||
|
params.value >= 0 &&
|
||||||
|
params.value !== 0.05
|
||||||
|
) {
|
||||||
|
return new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#339966'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
} else if (params.value == 0.05) {
|
||||||
|
return new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#999999'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
markLine: {
|
||||||
|
silent: false,
|
||||||
|
symbol: 'circle',
|
||||||
|
lineStyle: {
|
||||||
|
color: 'red',
|
||||||
|
width: 1
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
lineStyle: {
|
||||||
|
width: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
name: '',
|
||||||
|
yAxis: 1,
|
||||||
|
lineStyle: {
|
||||||
|
color: '#339966'
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
//position: "middle",
|
||||||
|
formatter: '{b}',
|
||||||
|
textStyle: {
|
||||||
|
color: '#339966'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '',
|
||||||
|
yAxis: 1.2,
|
||||||
|
lineStyle: {
|
||||||
|
color: '#3399FF'
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
// position: "middle",
|
||||||
|
formatter: '{b}',
|
||||||
|
textStyle: {
|
||||||
|
color: '#3399FF'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '',
|
||||||
|
yAxis: 1.4,
|
||||||
|
lineStyle: {
|
||||||
|
color: '#FFCC33'
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
// position: "middle",
|
||||||
|
formatter: '{b}',
|
||||||
|
textStyle: {
|
||||||
|
color: '#FFCC33'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '',
|
||||||
|
yAxis: 1.6,
|
||||||
|
lineStyle: {
|
||||||
|
color: '#FF9900'
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
// position: "middle",
|
||||||
|
formatter: '{b}',
|
||||||
|
textStyle: {
|
||||||
|
color: '#FF9900'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '',
|
||||||
|
yAxis: 2,
|
||||||
|
lineStyle: {
|
||||||
|
color: '#CC0000'
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
// position: "middle",
|
||||||
|
formatter: '{b}',
|
||||||
|
textStyle: {
|
||||||
|
color: '#CC0000'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
tableStore.index()
|
||||||
|
}, 10)
|
||||||
|
})
|
||||||
|
const layout = mainHeight(83) as any
|
||||||
|
const layout1 = mainHeight(93) as any
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.map {
|
||||||
|
height: v-bind('layout.height');
|
||||||
|
}
|
||||||
|
|
||||||
|
.tall {
|
||||||
|
height: calc(v-bind('layout1.height') / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mask {
|
||||||
|
width: 100px;
|
||||||
|
height: 150px;
|
||||||
|
background-color: rgba(0, 0, 0, 0);
|
||||||
|
position: absolute;
|
||||||
|
left: 25px;
|
||||||
|
bottom: 40px;
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -69,7 +69,7 @@ import { useDictData } from '@/stores/dictData'
|
|||||||
import TableHeader from '@/components/table/header/index.vue'
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: 'harmonic-boot/run/terminalmessage'
|
name: 'harmonic-boot/run/devicemessage'
|
||||||
})
|
})
|
||||||
const view = ref(true)
|
const view = ref(true)
|
||||||
const classificationData = dictData.getBasicData('Statistical_Type', ["Report_Type"])
|
const classificationData = dictData.getBasicData('Statistical_Type', ["Report_Type"])
|
||||||
@@ -106,6 +106,7 @@ const tableStore = new TableStore({
|
|||||||
title: '供电公司',
|
title: '供电公司',
|
||||||
minWidth: 100
|
minWidth: 100
|
||||||
},
|
},
|
||||||
|
{ field: 'objName', title: '监测点对象名称' , minWidth: 240},
|
||||||
{ field: 'manufacturer', title: '厂家' , minWidth: 100},
|
{ field: 'manufacturer', title: '厂家' , minWidth: 100},
|
||||||
{ field: 'scale', title: '电压等级' , minWidth: 100},
|
{ field: 'scale', title: '电压等级' , minWidth: 100},
|
||||||
{ field: 'businessType', title: '行业类型' , minWidth: 100},
|
{ field: 'businessType', title: '行业类型' , minWidth: 100},
|
||||||
@@ -115,7 +116,7 @@ const tableStore = new TableStore({
|
|||||||
{ field: 'lineName', title: '监测点名称' , minWidth: 100},
|
{ field: 'lineName', title: '监测点名称' , minWidth: 100},
|
||||||
{ field: 'comFlag', title: '通讯状态' , minWidth: 100},
|
{ field: 'comFlag', title: '通讯状态' , minWidth: 100},
|
||||||
{ field: 'loadType', title: '干扰源类型' , minWidth: 100},
|
{ field: 'loadType', title: '干扰源类型' , minWidth: 100},
|
||||||
{ field: 'objName', title: '监测点对象名称' , minWidth: 240},
|
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ const map = (res: any) => {
|
|||||||
},
|
},
|
||||||
color: ['green', 'red'],
|
color: ['green', 'red'],
|
||||||
legend: {
|
legend: {
|
||||||
|
selectedMode: false,
|
||||||
data: [
|
data: [
|
||||||
{
|
{
|
||||||
name: '正常'
|
name: '正常'
|
||||||
|
|||||||
Reference in New Issue
Block a user