diff --git a/package.json b/package.json index ffffa5a3..d310022e 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "echarts": "^5.4.3", "echarts-gl": "^2.0.9", "echarts4": "npm:echarts@^4.9.0", - "element-plus": "2.5.3", + "element-plus": "^2.7.2", "exceljs": "^4.4.0", "file-saver": "^2.0.5", "html2canvas": "^1.4.1", diff --git a/src/api/device-boot/panorama.ts b/src/api/device-boot/panorama.ts index e44611cf..2b8aad23 100644 --- a/src/api/device-boot/panorama.ts +++ b/src/api/device-boot/panorama.ts @@ -85,3 +85,24 @@ export function getEventStatisticsList(data: any) { export function getEventReason(data: any) { return request({ url: '/event-boot/areaAnalysis/getEventReason', method: 'post', data }) } +// 暂态事件统计 +export function getGeneralSituation(data: any) { + return request({ url: '/event-boot/report/getGeneralSituation', method: 'post', data }) +} +// 获取实际运行终端综合信息 +export function getPracticalRunDeviceInfo(data: any) { + return request({ url: '/device-boot/deviceInfo/getPracticalRunDeviceInfo', method: 'post', data }) +} +// 监测终端状态 +export function getGridDiagramCityDev(data: any) { + return request({ url: '/device-boot/gridDiagram/getGridDiagramCityDev', method: 'post', data }) +} +// 稳态指标合格率详情 +export function qualifiedDetail(data: any) { + return request({ url: '/harmonic-boot/grid/qualifiedDetail', method: 'post', data }) +} +// 综合评估趋势对比 +export function getAssessTrend(data: any) { + return request({ url: '/harmonic-boot/grid/getAssessTrend', method: 'post', data }) +} + diff --git a/src/components/bpmnProcessDesigner/package/theme/element-variables.scss b/src/components/bpmnProcessDesigner/package/theme/element-variables.scss index 49bd326d..6a1e2057 100644 --- a/src/components/bpmnProcessDesigner/package/theme/element-variables.scss +++ b/src/components/bpmnProcessDesigner/package/theme/element-variables.scss @@ -34,6 +34,7 @@ span:focus { .el-dialog { margin-top: 50vh !important; transform: translateY(-50%); + padding: 0px !important; overflow: hidden; } .el-dialog__wrapper { diff --git a/src/components/echarts/MyEchart.vue b/src/components/echarts/MyEchart.vue index 414c4198..e90d7189 100644 --- a/src/components/echarts/MyEchart.vue +++ b/src/components/echarts/MyEchart.vue @@ -113,7 +113,7 @@ const handlerBar = (options: any) => { options.series.forEach((item: any) => { if (item.type === 'bar') { item.barMinHeight = 10 - item.barMaxWidth = 30 + item.barMaxWidth = 20 item.itemStyle = Object.assign( { color: (params: any) => { @@ -163,8 +163,8 @@ const handlerYAxis = () => { if (Array.isArray(props.options?.yAxis)) { return props.options?.yAxis.map((item: any) => { return { - ...item, - ...temp + ...temp, + ...item } }) } else { diff --git a/src/components/form/area/index.vue b/src/components/form/area/index.vue index a6235796..d754eec7 100644 --- a/src/components/form/area/index.vue +++ b/src/components/form/area/index.vue @@ -9,7 +9,7 @@ defineOptions({ name: 'Area' }) import { useDictData } from '@/stores/dictData' -const emit = defineEmits(['changeName']) +const emit = defineEmits(["changeValue"]) const cascaderProps = { label: 'name', value: 'id', @@ -18,7 +18,7 @@ const cascaderProps = { } const cascader = ref() const dictData = useDictData() -const options = dictData.state.area +const options:any = dictData.state.area const areaName = ref(dictData.state.area[0].name) const jbName = ref(dictData.state.area[0].name) const change = (e: any) => { @@ -27,7 +27,8 @@ const change = (e: any) => { } else if (cascader.value.getCheckedNodes()[0]?.pathLabels.length >= 2) { areaName.value = cascader.value.getCheckedNodes()[0].pathLabels[1] } - emit('changeName', cascader.value.getCheckedNodes()[0].label) + + emit('changeValue', cascader.value.getCheckedNodes()[0]) } const changeName = () => { return jbName.value diff --git a/src/styles/app.scss b/src/styles/app.scss index 6d9a35b8..2c4505b4 100644 --- a/src/styles/app.scss +++ b/src/styles/app.scss @@ -196,7 +196,7 @@ body, } .cn-operate-dialog .el-dialog__footer { - padding: 10px var(--el-dialog-padding-primary); + padding: 15px; box-shadow: var(--el-box-shadow); position: absolute; width: 100%; diff --git a/src/styles/element.scss b/src/styles/element.scss index 210a1433..8372479c 100644 --- a/src/styles/element.scss +++ b/src/styles/element.scss @@ -29,20 +29,26 @@ } } } - +.el-dialog { + padding: 0px !important; +} .el-dialog__header { background: var(--el-color-primary); - margin-right: 0; + padding: 15px; + margin-right: 0px; .el-dialog__headerbtn { + top: 5px; .el-icon { color: var(--el-color-white); } } + .el-dialog__title { color: var(--el-color-white); } + } .el-table { diff --git a/src/views/pqs/qualityInspeection/panorama/components/city/statistics.vue b/src/views/pqs/qualityInspeection/panorama/components/city/statistics.vue new file mode 100644 index 00000000..8359272a --- /dev/null +++ b/src/views/pqs/qualityInspeection/panorama/components/city/statistics.vue @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/pqs/qualityInspeection/panorama/components/cityMapB.vue b/src/views/pqs/qualityInspeection/panorama/components/cityMapB.vue new file mode 100644 index 00000000..cda775ef --- /dev/null +++ b/src/views/pqs/qualityInspeection/panorama/components/cityMapB.vue @@ -0,0 +1,201 @@ + + + + + + + 暂态事件统计 + + + + + + + + + 异常问题总数: + 60个 + + + 已关联工单数: + 60个 + + + 工单转换率: + 60% + + + + + 异常问题总数: + 60个 + + + 已关联工单数: + 60个 + + + 工单转换率: + 60% + + + + + + + + + + + diff --git a/src/views/pqs/qualityInspeection/panorama/components/cityMapL.vue b/src/views/pqs/qualityInspeection/panorama/components/cityMapL.vue new file mode 100644 index 00000000..5f4b9fca --- /dev/null +++ b/src/views/pqs/qualityInspeection/panorama/components/cityMapL.vue @@ -0,0 +1,324 @@ + + + + + + + + 在线监测规模 + + + + + + + + + + + 监测终端状态 + + + + + + + + + + + 监测点 + + + + + + + + + + + + + diff --git a/src/views/pqs/qualityInspeection/panorama/components/cityMapR.vue b/src/views/pqs/qualityInspeection/panorama/components/cityMapR.vue new file mode 100644 index 00000000..a305ac39 --- /dev/null +++ b/src/views/pqs/qualityInspeection/panorama/components/cityMapR.vue @@ -0,0 +1,487 @@ + + + + + + + + 指标合格率统计 + + 详情 + + + + + + + + + + + 稳态指标超标占比 + + + + + 在线监测点数:{{ monitorList.onlineNum }} + 超标监测点数:{{ monitorList.overNum }} + 超标监测点占比:{{ monitorList.overRatio }} + + + + + + + + + + 稳态电能质量指标水平评估 + + + + + + + + + + + {{ item.targetName }} + + + + 均值: + {{ item.avg == 3.14159 ? '--' : item.avg }} + + + 标准差: + {{ item.avg == 3.14159 ? '--' : item.avg }} + + + + + + + + + + + + + 暂态事件统计 + + + + + + + + + + + + diff --git a/src/views/pqs/qualityInspeection/panorama/components/details/evaluate.vue b/src/views/pqs/qualityInspeection/panorama/components/details/evaluate.vue index fcc4dfc3..f7852404 100644 --- a/src/views/pqs/qualityInspeection/panorama/components/details/evaluate.vue +++ b/src/views/pqs/qualityInspeection/panorama/components/details/evaluate.vue @@ -39,7 +39,7 @@ import { ref } from 'vue' import MyEChart from '@/components/echarts/MyEchart.vue' import { defaultAttribute } from '@/components/table/defaultAttribute' -import { getAssessDetail } from '@/api/device-boot/panorama' +import { getAssessDetail, getAssessTrend } from '@/api/device-boot/panorama' const dialogVisible: any = ref(false) const tableData: any = ref([]) @@ -48,50 +48,54 @@ const picEChart = ref() const open = async (row: any) => { getAssessDetail(row).then(res => { tableData.value = res.data + }) + getAssessTrend(row).then(res => { picEChart.value = { - tooltip: { - formatter: function (params: any) { - let tips = '' - - if (params[0].value == 3.14159) { - tips += params[0].name + ':暂无数据' - } else { - tips += params[0].name + ':' + params[0].value + '%' - } - - return tips - } - }, title: { - text: '' + text: '各地市综合评估趋势对比' }, xAxis: { name: '(区域)', data: res.data.map((item: any) => item.deptName) }, + grid: { + bottom: '10px' + }, yAxis: { - name: '', - min: 0, - max: 100 + name: '' }, options: { - series: [ - { - name: '评估得分', - type: 'bar', - - data: res.data.map((item: any) => item.assessData) - } - ] + dataZoom: false, + series: [] } } + + let list: any = [] + let time: any = [] + res.data.forEach((item: any, num: any) => { + time = [] + item.children.forEach((val: any, i: any) => { + if (num == 0) { + list.push([]) + } + time.push(val.dataTime) + list[i].push(val.score == 3.14159 ? null : val.score) + }) + }) + list.forEach((item: any, i: any) => { + picEChart.value.options.series.push({ + name: time[i], + type: 'line', + data: item + }) + }) }) dialogVisible.value = true } const formatter = (row: any) => { if (row.cellValue == 3.14159) { - return '暂无数据' + return '/' } else { return row.cellValue } diff --git a/src/views/pqs/qualityInspeection/panorama/components/details/point.vue b/src/views/pqs/qualityInspeection/panorama/components/details/point.vue index cd6368b0..16a81e6b 100644 --- a/src/views/pqs/qualityInspeection/panorama/components/details/point.vue +++ b/src/views/pqs/qualityInspeection/panorama/components/details/point.vue @@ -17,7 +17,7 @@ 分布统计 diff --git a/src/views/pqs/qualityInspeection/panorama/components/details/stand.vue b/src/views/pqs/qualityInspeection/panorama/components/details/stand.vue index 53569a72..33695391 100644 --- a/src/views/pqs/qualityInspeection/panorama/components/details/stand.vue +++ b/src/views/pqs/qualityInspeection/panorama/components/details/stand.vue @@ -14,15 +14,37 @@ - 污染告警 + + 污染告警 + + + + + + 无污染:(0,1] + + 轻微污染:(1,1.2] + + 轻度污染:(1.2,1.6] + + 中度污染:(1.6,2] + + 重度污染:(2,+∞) + + + + + + + - + 变电站详细列表 @@ -40,11 +62,19 @@ import { ref } from 'vue' import MyEChart from '@/components/echarts/MyEchart.vue' import { useDictData } from '@/stores/dictData' import { defaultAttribute } from '@/components/table/defaultAttribute' + +import { WarningFilled } from '@element-plus/icons-vue' import { getPollutionAlarmPageData, getPollutionAlarmData, getGridDiagramSubTendency } from '@/api/device-boot/panorama' const dictData = useDictData() const dialogVisible: any = ref(false) const time = ref('1') const Voltage = dictData.getBasicData('Dev_Voltage_Stand') +const options: any = dictData.getBasicData('Pollution_Statis').filter(item => { + if (item.code == 'V_Harmonic' || item.code == 'I_All') { + return item + } +}) +const contaminate = ref(options[0].id) const rowList: any = ref({}) const trendEChart: any = ref({}) const tableData: any = ref([]) @@ -62,7 +92,16 @@ const open = async (row: any) => { } analysis(1) // 污染 - getPollutionAlarmData(rowList.value).then(res => { + contaminateC() + // 列表 + getPollutionAlarmPageData(rowList.value).then(res => { + tableData.value = res.data.records + }) + + dialogVisible.value = true +} +const contaminateC = () => { + getPollutionAlarmData({ ...rowList.value, ids: [contaminate.value] }).then(res => { let data = [] let a1 = 0 @@ -70,7 +109,7 @@ const open = async (row: any) => { let a3 = 0 let a4 = 0 let a5 = 0 - if (row.isUpToGrid == 0) { + if (rowList.value.isUpToGrid == 0) { data = res.data.info } else { data = res.data.gwInfo @@ -111,7 +150,7 @@ const open = async (row: any) => { name: `重度污染:${a5}座` } ] - const color = ['#00B07D', '#FFAF00', '#FF7D00', '#B90000', '#62298B'] + const color = ['#00B07D', '#3399ff', '#ffcc33', '#ff9900', '#cc0000'] list.forEach((item, i) => { picEChart.value[i] = { @@ -208,15 +247,9 @@ const open = async (row: any) => { } }) }) - // 列表 - getPollutionAlarmPageData(rowList.value).then(res => { - tableData.value = res.data.records - }) - - dialogVisible.value = true } const analysis = (e: any) => { - let time = rowList.value.searchBeginTime.slice(0, 4) + `-01-01` + let time = rowList.value.searchBeginTime?.slice(0, 4) + `-01-01` // 分析 getGridDiagramSubTendency({ ...rowList.value, searchBeginTime: time, type: e }).then(res => { let name = [] @@ -262,9 +295,9 @@ const analysis = (e: any) => { } const formatter = (row: any) => { if (row.column.field == 'dataV') { - return row.cellValue == 3.14159 ? '暂无数据' : row.cellValue + return row.cellValue == 3.14159 ? '/' : row.cellValue } else if (row.column.field == 'data') { - return row.cellValue == 3.14159 ? '暂无数据' : row.cellValue + return row.cellValue == 3.14159 ? '/' : row.cellValue } else if (row.column.field == 'voltageLevel') { return Voltage.filter((item: any) => item.id == row.cellValue)[0]?.name } else { @@ -276,7 +309,6 @@ const handleClose = () => { dialogVisible.value = false } - defineExpose({ open })