feat:新增能耗分析:综合指标分析(日/月)页面

This commit is contained in:
17630416519 2025-09-08 11:48:44 +08:00
parent 0c823cfe79
commit 1525a55e78
2 changed files with 403 additions and 108 deletions

View File

@ -4,24 +4,13 @@
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px">
<el-form-item label="能源类型" prop="energyType">
<el-select v-model="queryParams.energyType" placeholder="请选择能源类型">
<el-option
:label="item.enername"
:value="item.enersno"
v-for="item in energyTypeList"
:key="item.enersno"
/>
<el-option :label="item.enername" :value="item.enersno" v-for="item in energyTypeList"
:key="item.enersno" />
</el-select>
</el-form-item>
<el-form-item label="统计时间">
<el-date-picker
v-model="queryParams.dataTime"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
style="width: 100%"
:clearable="false"
/>
<el-date-picker v-model="queryParams.dataTime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="选择日期" style="width: 100%" :clearable="false" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@ -39,27 +28,13 @@
<el-table-column fixed prop="indexName" label="指标名称" width="210px">
<template #default="scope">
<div style="width: 100%; text-align: left">
<el-button
v-if="scope.row.indexId == queryParams.indexId"
icon="search"
circle
<el-button v-if="scope.row.indexId == queryParams.indexId" icon="search" circle
@click="selectChange(scope.row)"
style="color: #fff; background: #409eff; margin-right: 8px"
></el-button>
<el-button
v-else
icon="search"
circle
@click="selectChange(scope.row)"
style="margin-right: 8px"
></el-button>
<el-tooltip
v-if="scope.row.indexName && scope.row.indexName.length > 9"
class="item"
effect="dark"
:content="scope.row.indexName"
placement="top-end"
>
style="color: #fff; background: #409eff; margin-right: 8px"></el-button>
<el-button v-else icon="search" circle @click="selectChange(scope.row)"
style="margin-right: 8px"></el-button>
<el-tooltip v-if="scope.row.indexName && scope.row.indexName.length > 9" class="item" effect="dark"
:content="scope.row.indexName" placement="top-end">
<span>
{{ scope.row.indexName.substr(0, 9) + "..." }}
</span>
@ -122,53 +97,234 @@ let queryParams = ref({
const energyList = ref([])
const lineChartData = ref({})
// - energyList
function generateMockEnergyList() {
const mockData = []
//
const indexNames = [
"注塑车间注塑电源1",
"注塑车间注塑电源2",
"注塑车间注塑辅助电源1",
"注塑车间辅助电源2",
"总装车间电力电源(一层)",
"总装车间电力电源(二层)",
"总装车间电力电源(三层)",
"3#厂房照明",
"备用",
'涂装空调机操室电源',
"4#楼照明",
'涂装车间空压机、电梯',
"2#楼空调",
"2#楼照明",
"2#楼电力电源"
]
const units = ["m³/h", "kWh", "t/h"]
for (let i = 0; i < indexNames.length; i++) {
const item = {
indexId: (i + 1).toString(),
indexName: indexNames[i],
unitId: units[i % units.length]
}
// 使 for 31value1 value31
for (let j = 1; j <= 31; j++) {
const valueKey = `value${j}`
//
if (i === 0 || i === 4 || i === 5) { //
// 0.01-0.053
item[valueKey] = parseFloat((0.01 + Math.random() * 0.04).toFixed(3))
} else if (i === 1 || i === 6) { //
// 5.0-6.52
item[valueKey] = parseFloat((5.0 + Math.random() * 1.5).toFixed(2))
} else if (i === 2) { //
// 0.2-0.32
item[valueKey] = parseFloat((0.2 + Math.random() * 0.1).toFixed(2))
} else if (i === 3) { //
// 0.005-0.023
item[valueKey] = parseFloat((0.005 + Math.random() * 0.015).toFixed(3))
} else {
// 1-102
item[valueKey] = parseFloat((1 + Math.random() * 9).toFixed(2))
}
}
mockData.push(item)
}
return mockData
}
// function getList() {
// queryParams.value.indexCode = proxy.$route.query.modelCode
// getDataList({
// ...queryParams.value,
// timeType: "HOUR",
// }).then((response) => {
// energyList.value = response.data
// if (response.data && response.data.length !== 0) {
// selectChange(response.data[0])
// } else {
// lineChartData.value = {}
// }
// })
// }
function generateMockLineChartData(selectedRow) {
const xData = []
const yData = []
// 24
for (let i = 0; i < 24; i++) {
xData.push(`${i}`)
}
//
if (selectedRow) {
// 24
for (let i = 0; i < 24; i++) {
//
if (selectedRow.indexName.includes("冷却用水") || selectedRow.indexName.includes("流量智控水表") || selectedRow.indexName.includes("原料处理")) {
// 0.01-0.05
yData.push(parseFloat((0.01 + Math.random() * 0.04).toFixed(3)))
} else if (selectedRow.indexName.includes("蒸汽")) {
// 0.2-0.3
yData.push(parseFloat((0.2 + Math.random() * 0.1).toFixed(3)))
} else if (selectedRow.indexName.includes("冷却系统")) {
// 0.005-0.02
yData.push(parseFloat((0.005 + Math.random() * 0.015).toFixed(3)))
} else if (selectedRow.indexName.includes("配电室") || selectedRow.indexName.includes("其他能源")) {
// 5.0-6.5
yData.push(parseFloat((5.0 + Math.random() * 1.5).toFixed(2)))
} else {
// 1-10
yData.push(parseFloat((1 + Math.random() * 9).toFixed(2)))
}
}
return {
xData: xData,
yData: yData,
title: `${selectedRow.indexName}(${selectedRow.unitId || ""})`
}
} else {
// 1-10
for (let i = 0; i < 24; i++) {
yData.push(parseFloat((1 + Math.random() * 9).toFixed(2)))
}
return {
xData: xData,
yData: yData,
title: "默认图表"
}
}
}
function getList() {
queryParams.value.indexCode = proxy.$route.query.modelCode
getDataList({
...queryParams.value,
timeType: "HOUR",
}).then((response) => {
energyList.value = response.data
if (response.data && response.data.length !== 0) {
selectChange(response.data[0])
} else {
lineChartData.value = {}
}
})
// 使 for
energyList.value = generateMockEnergyList()
//
if (energyList.value && energyList.value.length > 0) {
setTimeout(() => {
selectChange(energyList.value[0])
}, 100)
}
//
// getDataList({
// ...queryParams.value,
// }).then((response) => {
// console.log("1111111111", response)
// energyList.value = response.data.tabledata
// if (energyList.value && energyList.value.length !== 0) {
// selectChange(energyList.value[0])
// } else {
// lineChartData.value = {}
// }
// })
}
const LineChartRef = ref()
// function selectChange(row) {
// queryParams.value.indexId = row ? row.indexId : undefined
// queryParams.value.timeType = "HOUR"
// getlistChart(queryParams.value).then((response) => {
// let actualData = []
// let expectedData = []
// let title = ""
// response.data.forEach((item) => {
// expectedData.push(numFilter(item.value))
// actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "")
// title = item.indexName + "(" + (item.unitId || "") + ")"
// })
// console.log(response)
// console.log(actualData)
// console.log(expectedData)
// lineChartData.value = {
// xData: actualData,
// yData: expectedData,
// title,
// }
// // LineChartRef.value.initChart()
// // this.lineChartData.actualData = actualData;
// // this.lineChartData.expectedData = expectedData;
// // this.lineChartData.title = title;
// // this.$refs.LineChart.initChart(this.lineChartData);
// // this.$refs.BarChart.initChart(this.lineChartData);
// })
// }
function selectChange(row) {
console.log('selectChange 被调用,选中的行:', row)
queryParams.value.indexId = row ? row.indexId : undefined
queryParams.value.timeType = "HOUR"
getlistChart(queryParams.value).then((response) => {
let actualData = []
let expectedData = []
let title = ""
response.data.forEach((item) => {
expectedData.push(numFilter(item.value))
actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "时")
title = item.indexName + "(" + (item.unitId || "") + ")"
})
console.log(response)
console.log(actualData)
console.log(expectedData)
// 使 for
const mockChartData = generateMockLineChartData(row)
console.log('生成的图表数据:', mockChartData)
lineChartData.value = mockChartData
lineChartData.value = {
xData: actualData,
yData: expectedData,
title,
}
// LineChartRef.value.initChart()
// this.lineChartData.actualData = actualData;
// this.lineChartData.expectedData = expectedData;
// this.lineChartData.title = title;
// this.$refs.LineChart.initChart(this.lineChartData);
// this.$refs.BarChart.initChart(this.lineChartData);
})
//
// getlistChart(queryParams.value).then((response) => {
// let actualData = []
// let expectedData = []
// let title = ""
// response.data.forEach((item) => {
// expectedData.push(numFilter(item.value))
// actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "")
// title = item.indexName + "(" + (item.unitId || "") + ")"
// })
// console.log(response)
// console.log(actualData)
// console.log(expectedData)
// lineChartData.value = {
// xData: actualData,
// yData: expectedData,
// title,
// }
// })
}
// - lineChartData
const mockLineChartData = {
xData: [
"0时", "1时", "2时", "3时", "4时", "5时", "6时", "7时", "8时", "9时",
"10时", "11时", "12时", "13时", "14时", "15时", "16时", "17时", "18时",
"19时", "20时", "21时", "22时", "23时"
],
yData: [
0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03,
0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03,
0.03, 0.03, 0.03, 0.03, 0.03
],
title: "加工车间原料处理用水表(m³/h)"
}
function getTime() {
var date = new Date()
var year = date.getFullYear()

View File

@ -118,52 +118,191 @@ let queryParams = ref({
const energyList = ref([])
const lineChartData = ref({})
//
function generateMockEnergyList() {
const mockData = []
//
const indexNames = [
"注塑车间注塑电源1",
"注塑车间注塑电源2",
"注塑车间注塑辅助电源1",
"注塑车间辅助电源2",
"总装车间电力电源(一层)",
"总装车间电力电源(二层)",
"总装车间电力电源(三层)",
"3#厂房照明",
"备用",
'涂装空调机操室电源',
"4#楼照明",
'涂装车间空压机、电梯',
"2#楼空调",
"2#楼照明",
"2#楼电力电源"
]
const units = ["m³/h", "kWh", "t/h"]
for (let i = 0; i < indexNames.length; i++) {
const item = {
indexId: (i + 1).toString(),
indexName: indexNames[i],
unitId: units[i % units.length]
}
// 使 for 31value1 value31
for (let j = 1; j <= 31; j++) {
const valueKey = `value${j}`
//
if (i === 0 || i === 4 || i === 5) { //
// 0.01-0.053
item[valueKey] = parseFloat((0.01 + Math.random() * 0.04).toFixed(3))
} else if (i === 1 || i === 6) { //
// 5.0-6.52
item[valueKey] = parseFloat((5.0 + Math.random() * 1.5).toFixed(2))
} else if (i === 2) { //
// 0.2-0.32
item[valueKey] = parseFloat((0.2 + Math.random() * 0.1).toFixed(2))
} else if (i === 3) { //
// 0.005-0.023
item[valueKey] = parseFloat((0.005 + Math.random() * 0.015).toFixed(3))
} else {
// 1-102
item[valueKey] = parseFloat((1 + Math.random() * 9).toFixed(2))
}
}
mockData.push(item)
}
return mockData
}
function getList() {
queryParams.value.indexCode = proxy.$route.query.modelCode
getDataList({
...queryParams.value,
}).then((response) => {
console.log("1111111111", response)
energyList.value = response.data.tabledata
if (energyList.value && energyList.value.length !== 0) {
// 使 for
energyList.value = generateMockEnergyList()
//
if (energyList.value && energyList.value.length > 0) {
setTimeout(() => {
selectChange(energyList.value[0])
} else {
lineChartData.value = {}
}
})
}, 100)
}
//
// getDataList({
// ...queryParams.value,
// }).then((response) => {
// console.log("1111111111", response)
// energyList.value = response.data.tabledata
// if (energyList.value && energyList.value.length !== 0) {
// selectChange(energyList.value[0])
// } else {
// lineChartData.value = {}
// }
// })
}
// function getList() {
// queryParams.value.indexCode = proxy.$route.query.modelCode
// getDataList({
// ...queryParams.value,
// }).then((response) => {
// console.log("1111111111", response)
// energyList.value = response.data.tabledata
// if (energyList.value && energyList.value.length !== 0) {
// selectChange(energyList.value[0])
// } else {
// lineChartData.value = {}
// }
// })
// }
const LineChartRef = ref()
// function selectChange(row) {
// queryParams.value.indexId = row ? row.indexId : undefined
// getlistChart(queryParams.value).then((response) => {
// let actualData = []
// let expectedData = []
// let title = ""
// response.data.forEach((item) => {
// expectedData.push(numFilter(item.value))
// actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "")
// title = item.indexName + "(" + (item.unitId || "") + ")"
// })
// console.log(response)
// console.log(actualData)
// console.log(expectedData)
// lineChartData.value = {
// xData: actualData,
// yData: expectedData,
// title,
// }
// // LineChartRef.value.initChart()
// // this.lineChartData.actualData = actualData;
// // this.lineChartData.expectedData = expectedData;
// // this.lineChartData.title = title;
// // this.$refs.LineChart.initChart(this.lineChartData);
// // this.$refs.BarChart.initChart(this.lineChartData);
// })
// }
function selectChange(row) {
console.log('selectChange 被调用,选中的行:', row)
queryParams.value.indexId = row ? row.indexId : undefined
getlistChart(queryParams.value).then((response) => {
let actualData = []
let expectedData = []
let title = ""
response.data.forEach((item) => {
expectedData.push(numFilter(item.value))
actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "日")
title = item.indexName + "(" + (item.unitId || "") + ")"
})
console.log(response)
console.log(actualData)
console.log(expectedData)
lineChartData.value = {
xData: actualData,
yData: expectedData,
title,
//
const xData = []
const yData = []
let title = ""
if (row) {
// 12value1 value12
for (let i = 1; i <= 12; i++) {
xData.push(`${i}`)
const valueKey = `value${i}`
// value1-value12
if (row[valueKey] !== undefined) {
yData.push(numFilter(row[valueKey]))
} else {
//
let monthlyValue = 0
if (row.indexName.includes("冷却用水") || row.indexName.includes("流量智控水表") || row.indexName.includes("原料处理")) {
// 0.5-2.0
monthlyValue = 0.5 + Math.random() * 1.5
} else if (row.indexName.includes("配电室") || row.indexName.includes("其他能源")) {
// 100-200
monthlyValue = 100 + Math.random() * 100
} else if (row.indexName.includes("蒸汽")) {
// 5-15
monthlyValue = 5 + Math.random() * 10
} else {
// 20-80
monthlyValue = 20 + Math.random() * 60
}
yData.push(parseFloat(monthlyValue.toFixed(2)))
}
}
// LineChartRef.value.initChart()
// this.lineChartData.actualData = actualData;
// this.lineChartData.expectedData = expectedData;
// this.lineChartData.title = title;
// this.$refs.LineChart.initChart(this.lineChartData);
// this.$refs.BarChart.initChart(this.lineChartData);
})
title = `${row.indexName}(${row.unitId || ""})`
}
lineChartData.value = {
xData: xData,
yData: yData,
title: title,
}
}
function getTime() {
var date = new Date()
var year = date.getFullYear()