From 6c83f1009ca85f04457004fb98a8960028b5fdc1 Mon Sep 17 00:00:00 2001
From: ali <ali9696@163.com>
Date: 星期二, 11 二月 2025 16:34:16 +0800
Subject: [PATCH] 综合能耗日月年
---
zhitan-vue/src/assets/styles/ruoyi.scss | 7
zhitan-vue/src/views/comprehensive/monthlyComprehensive/index.vue | 241 ++++++++++
zhitan-vue/src/views/comprehensive/yearComprehensive/index.vue | 245 +++++++++++
zhitan-vue/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js | 17
zhitan-vue/src/views/comprehensive/comps/LineChart.vue | 173 +++++++
zhitan-vue/src/api/comprehensiveStatistics/processEnergyConsumption.js | 19
zhitan-vue/src/api/comprehensiveStatistics/comprehensive.js | 70 +++
zhitan-vue/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js | 26 +
zhitan-vue/src/utils/ruoyi.js | 207 +++++----
zhitan-vue/src/views/comprehensive/dailyComprehensive/index.vue | 245 +++++++++++
zhitan-vue/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js | 17
11 files changed, 1,175 insertions(+), 92 deletions(-)
diff --git a/zhitan-vue/src/api/comprehensiveStatistics/comprehensive.js b/zhitan-vue/src/api/comprehensiveStatistics/comprehensive.js
new file mode 100644
index 0000000..bd8dbb5
--- /dev/null
+++ b/zhitan-vue/src/api/comprehensiveStatistics/comprehensive.js
@@ -0,0 +1,70 @@
+import request from '@/utils/request'
+
+//鍏ㄥ巶缁煎悎鑳借�楃粺璁�
+export function getDataList(query) {
+ return request({
+ url: '/statisticalData/comprehensiveStatistics/list',
+ method: 'get',
+ params: query
+ })
+}
+
+//鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘
+export function getlistChart(query) {
+ return request({
+ url: '/statisticalData/comprehensiveStatistics/listChart',
+ method: 'get',
+ params: query
+ })
+}
+export function exportList(query) {
+ return request({
+ url: '/statisticalData/comprehensiveStatistics/export',
+ method: 'get',
+ params: query
+ })
+}
+export function getEnergyList(query) {
+ return request({
+ url: '/statisticalData/comprehensiveStatistics/getList',
+ method: 'get',
+ params: query
+ })
+}
+//閲嶇偣璁惧鑳借�楁帓鍚�
+export function energyList(query) {
+ return request({
+ url: '/statisticalData/comprehensiveStatistics/energyList',
+ method: 'get',
+ params: query
+ })
+}
+//璁惧
+export function getFacilityArchives() {
+ return request({
+ url: '/statisticalData/comprehensiveStatistics/getFacilityArchives',
+ method: 'get'
+ })
+}
+//閲嶇偣璁惧
+export function getPointFacility() {
+ return request({
+ url: '/statisticalData/comprehensiveStatistics/getPointFacility',
+ method: 'get'
+ })
+}
+export function getDeviceList(query) {
+ return request({
+ url: '/statisticalData/comprehensiveStatistics/getDeviceList',
+ method: 'get',
+ params: query
+ })
+}
+//鑾峰彇妯″瀷涓嬬殑鑳芥簮鍝佺
+export function energyDevice(query) {
+ return request({
+ url: '/statisticalData/comprehensiveStatistics/energyDevice',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/zhitan-vue/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js b/zhitan-vue/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js
new file mode 100644
index 0000000..701aa46
--- /dev/null
+++ b/zhitan-vue/src/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive.js
@@ -0,0 +1,26 @@
+import request from "@/utils/request"
+
+//鏌ヨ鏃ユ姤琛�
+export function getDataList(query) {
+ return request({
+ url: "/comprehensive/dailyComprehensive/list",
+ method: "get",
+ params: query,
+ })
+}
+export function getlistChart(query) {
+ return request({
+ url: "/comprehensive/dailyComprehensive/listChart",
+ method: "get",
+ params: query,
+ })
+}
+
+// 瀵煎嚭缁煎悎鎶ヨ〃
+export function exportList(query) {
+ return request({
+ url: "/report/dailyReport/export",
+ method: "get",
+ params: query,
+ })
+}
diff --git a/zhitan-vue/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js b/zhitan-vue/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js
new file mode 100644
index 0000000..b3a5668
--- /dev/null
+++ b/zhitan-vue/src/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive.js
@@ -0,0 +1,17 @@
+import request from '@/utils/request'
+
+//鏌ヨ鏃ユ姤琛�
+export function getDataList(query) {
+ return request({
+ url: '/comprehensive/monthlyComprehensive/list',
+ method: 'get',
+ params: query
+ })
+}
+export function getlistChart(query) {
+ return request({
+ url: '/comprehensive/monthlyComprehensive/listChart',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/zhitan-vue/src/api/comprehensiveStatistics/processEnergyConsumption.js b/zhitan-vue/src/api/comprehensiveStatistics/processEnergyConsumption.js
new file mode 100644
index 0000000..38858e5
--- /dev/null
+++ b/zhitan-vue/src/api/comprehensiveStatistics/processEnergyConsumption.js
@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+//鍏ㄥ巶缁煎悎鑳借�楃粺璁�
+export function getDataList(query) {
+ return request({
+ url: '/statisticalData/processEnergyConsumption/list',
+ method: 'get',
+ params: query
+ })
+}
+
+//鍏ㄥ巶缁煎悎鑳借�楃粺璁″浘
+export function getlistChart(query) {
+ return request({
+ url: '/statisticalData/processEnergyConsumption/listChart',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/zhitan-vue/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js b/zhitan-vue/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js
new file mode 100644
index 0000000..03cb827
--- /dev/null
+++ b/zhitan-vue/src/api/comprehensiveStatistics/yearComprehensive/yearComprehensive.js
@@ -0,0 +1,17 @@
+import request from '@/utils/request'
+
+//鏌ヨ鏃ユ姤琛�
+export function getDataList(query) {
+ return request({
+ url: '/comprehensive/yearComprehensive/list',
+ method: 'get',
+ params: query
+ })
+}
+export function getlistChart(query) {
+ return request({
+ url: '/comprehensive/yearComprehensive/listChart',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/zhitan-vue/src/assets/styles/ruoyi.scss b/zhitan-vue/src/assets/styles/ruoyi.scss
index d83440a..505048c 100644
--- a/zhitan-vue/src/assets/styles/ruoyi.scss
+++ b/zhitan-vue/src/assets/styles/ruoyi.scss
@@ -312,6 +312,10 @@
// tr:hover > td {
// background-color: #141E4A;
// }
+
+ .el-table-fixed-column--left {
+ background-color: #110f2e !important;
+ }
}
}
@@ -858,6 +862,9 @@
// tr:hover > td {
// background-color: #141E4A;
// }
+ .el-table-fixed-column--left {
+ background-color: #fff;
+ }
}
}
diff --git a/zhitan-vue/src/utils/ruoyi.js b/zhitan-vue/src/utils/ruoyi.js
index 4efca08..74f7c30 100644
--- a/zhitan-vue/src/utils/ruoyi.js
+++ b/zhitan-vue/src/utils/ruoyi.js
@@ -1,5 +1,3 @@
-
-
/**
* 閫氱敤js鏂规硶灏佽澶勭悊
* Copyright (c) 2019 ruoyi
@@ -10,17 +8,20 @@
if (arguments.length === 0 || !time) {
return null
}
- const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
+ const format = pattern || "{y}-{m}-{d} {h}:{i}:{s}"
let date
- if (typeof time === 'object') {
+ if (typeof time === "object") {
date = time
} else {
- if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
+ if (typeof time === "string" && /^[0-9]+$/.test(time)) {
time = parseInt(time)
- } else if (typeof time === 'string') {
- time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
+ } else if (typeof time === "string") {
+ time = time
+ .replace(new RegExp(/-/gm), "/")
+ .replace("T", " ")
+ .replace(new RegExp(/\.[\d]{3}/gm), "")
}
- if ((typeof time === 'number') && (time.toString().length === 10)) {
+ if (typeof time === "number" && time.toString().length === 10) {
time = time * 1000
}
date = new Date(time)
@@ -32,14 +33,16 @@
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
- a: date.getDay()
+ a: date.getDay(),
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
- if (key === 'a') { return ['鏃�', '涓�', '浜�', '涓�', '鍥�', '浜�', '鍏�'][value] }
+ if (key === "a") {
+ return ["鏃�", "涓�", "浜�", "涓�", "鍥�", "浜�", "鍏�"][value]
+ }
if (result.length > 0 && value < 10) {
- value = '0' + value
+ value = "0" + value
}
return value || 0
})
@@ -49,89 +52,92 @@
// 琛ㄥ崟閲嶇疆
export function resetForm(refName) {
if (this.$refs[refName]) {
- this.$refs[refName].resetFields();
+ this.$refs[refName].resetFields()
}
}
// 娣诲姞鏃ユ湡鑼冨洿
export function addDateRange(params, dateRange, propName) {
- let search = params;
- search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
- dateRange = Array.isArray(dateRange) ? dateRange : [];
- if (typeof (propName) === 'undefined') {
- search.params['beginTime'] = dateRange[0];
- search.params['endTime'] = dateRange[1];
+ let search = params
+ search.params =
+ typeof search.params === "object" && search.params !== null && !Array.isArray(search.params) ? search.params : {}
+ dateRange = Array.isArray(dateRange) ? dateRange : []
+ if (typeof propName === "undefined") {
+ search.params["beginTime"] = dateRange[0]
+ search.params["endTime"] = dateRange[1]
} else {
- search.params['begin' + propName] = dateRange[0];
- search.params['end' + propName] = dateRange[1];
+ search.params["begin" + propName] = dateRange[0]
+ search.params["end" + propName] = dateRange[1]
}
- return search;
+ return search
}
// 鍥炴樉鏁版嵁瀛楀吀
export function selectDictLabel(datas, value) {
if (value === undefined) {
- return "";
+ return ""
}
- var actions = [];
+ var actions = []
Object.keys(datas).some((key) => {
- if (datas[key].value == ('' + value)) {
- actions.push(datas[key].label);
- return true;
+ if (datas[key].value == "" + value) {
+ actions.push(datas[key].label)
+ return true
}
})
if (actions.length === 0) {
- actions.push(value);
+ actions.push(value)
}
- return actions.join('');
+ return actions.join("")
}
// 鍥炴樉鏁版嵁瀛楀吀锛堝瓧绗︿覆鏁扮粍锛�
export function selectDictLabels(datas, value, separator) {
- if (value === undefined || value.length ===0) {
- return "";
+ if (value === undefined || value.length === 0) {
+ return ""
}
if (Array.isArray(value)) {
- value = value.join(",");
+ value = value.join(",")
}
- var actions = [];
- var currentSeparator = undefined === separator ? "," : separator;
- var temp = value.split(currentSeparator);
+ var actions = []
+ var currentSeparator = undefined === separator ? "," : separator
+ var temp = value.split(currentSeparator)
Object.keys(value.split(currentSeparator)).some((val) => {
- var match = false;
+ var match = false
Object.keys(datas).some((key) => {
- if (datas[key].value == ('' + temp[val])) {
- actions.push(datas[key].label + currentSeparator);
- match = true;
+ if (datas[key].value == "" + temp[val]) {
+ actions.push(datas[key].label + currentSeparator)
+ match = true
}
})
if (!match) {
- actions.push(temp[val] + currentSeparator);
+ actions.push(temp[val] + currentSeparator)
}
})
- return actions.join('').substring(0, actions.join('').length - 1);
+ return actions.join("").substring(0, actions.join("").length - 1)
}
// 瀛楃涓叉牸寮忓寲(%s )
export function sprintf(str) {
- var args = arguments, flag = true, i = 1;
+ var args = arguments,
+ flag = true,
+ i = 1
str = str.replace(/%s/g, function () {
- var arg = args[i++];
- if (typeof arg === 'undefined') {
- flag = false;
- return '';
+ var arg = args[i++]
+ if (typeof arg === "undefined") {
+ flag = false
+ return ""
}
- return arg;
- });
- return flag ? str : '';
+ return arg
+ })
+ return flag ? str : ""
}
// 杞崲瀛楃涓诧紝undefined,null绛夎浆鍖栦负""
export function parseStrEmpty(str) {
if (!str || str == "undefined" || str == "null") {
- return "";
+ return ""
}
- return str;
+ return str
}
// 鏁版嵁鍚堝苟
@@ -139,16 +145,16 @@
for (var p in target) {
try {
if (target[p].constructor == Object) {
- source[p] = mergeRecursive(source[p], target[p]);
+ source[p] = mergeRecursive(source[p], target[p])
} else {
- source[p] = target[p];
+ source[p] = target[p]
}
} catch (e) {
- source[p] = target[p];
+ source[p] = target[p]
}
}
- return source;
-};
+ return source
+}
/**
* 鏋勯�犳爲鍨嬬粨鏋勬暟鎹�
@@ -159,88 +165,105 @@
*/
export function handleTree(data, id, parentId, children) {
let config = {
- id: id || 'id',
- parentId: parentId || 'parentId',
- childrenList: children || 'children'
- };
+ id: id || "id",
+ parentId: parentId || "parentId",
+ childrenList: children || "children",
+ }
- var childrenListMap = {};
- var nodeIds = {};
- var tree = [];
+ var childrenListMap = {}
+ var nodeIds = {}
+ var tree = []
for (let d of data) {
- let parentId = d[config.parentId];
+ let parentId = d[config.parentId]
if (childrenListMap[parentId] == null) {
- childrenListMap[parentId] = [];
+ childrenListMap[parentId] = []
}
- nodeIds[d[config.id]] = d;
- childrenListMap[parentId].push(d);
+ nodeIds[d[config.id]] = d
+ childrenListMap[parentId].push(d)
}
for (let d of data) {
- let parentId = d[config.parentId];
+ let parentId = d[config.parentId]
if (nodeIds[parentId] == null) {
- tree.push(d);
+ tree.push(d)
}
}
for (let t of tree) {
- adaptToChildrenList(t);
+ adaptToChildrenList(t)
}
function adaptToChildrenList(o) {
if (childrenListMap[o[config.id]] !== null) {
- o[config.childrenList] = childrenListMap[o[config.id]];
+ o[config.childrenList] = childrenListMap[o[config.id]]
}
if (o[config.childrenList]) {
for (let c of o[config.childrenList]) {
- adaptToChildrenList(c);
+ adaptToChildrenList(c)
}
}
}
- return tree;
+ return tree
}
/**
-* 鍙傛暟澶勭悊
-* @param {*} params 鍙傛暟
-*/
+ * 鍙傛暟澶勭悊
+ * @param {*} params 鍙傛暟
+ */
export function tansParams(params) {
- let result = ''
+ let result = ""
for (const propName of Object.keys(params)) {
- const value = params[propName];
- var part = encodeURIComponent(propName) + "=";
- if (value !== null && value !== "" && typeof (value) !== "undefined") {
- if (typeof value === 'object') {
+ const value = params[propName]
+ var part = encodeURIComponent(propName) + "="
+ if (value !== null && value !== "" && typeof value !== "undefined") {
+ if (typeof value === "object") {
for (const key of Object.keys(value)) {
- if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
- let params = propName + '[' + key + ']';
- var subPart = encodeURIComponent(params) + "=";
- result += subPart + encodeURIComponent(value[key]) + "&";
+ if (value[key] !== null && value[key] !== "" && typeof value[key] !== "undefined") {
+ let params = propName + "[" + key + "]"
+ var subPart = encodeURIComponent(params) + "="
+ result += subPart + encodeURIComponent(value[key]) + "&"
}
}
} else {
- result += part + encodeURIComponent(value) + "&";
+ result += part + encodeURIComponent(value) + "&"
}
}
}
return result
}
-
// 杩斿洖椤圭洰璺緞
export function getNormalPath(p) {
- if (p.length === 0 || !p || p == 'undefined') {
+ if (p.length === 0 || !p || p == "undefined") {
return p
- };
- let res = p.replace('//', '/')
- if (res[res.length - 1] === '/') {
+ }
+ let res = p.replace("//", "/")
+ if (res[res.length - 1] === "/") {
return res.slice(0, res.length - 1)
}
- return res;
+ return res
}
// 楠岃瘉鏄惁涓篵lob鏍煎紡
export function blobValidate(data) {
- return data.type !== 'application/json'
+ return data.type !== "application/json"
+}
+
+// 閫氱敤涓嬭浇鏂规硶
+const baseURL = import.meta.env.VITE_APP_BASE_API
+export function download(fileName) {
+ window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true
+}
+
+// 閫氱敤涓嬭浇鏂规硶 showfileName锛氫笅杞藉悗鐨勬枃浠跺悕绉板甫鎵╁睍鍚�;filePath:瑕佷笅杞芥枃浠剁殑缁濆璺緞,甯︾潃鏂囦欢鍚嶅拰鎵╁睍鍚嶏紱deleteflage涓嬭浇瀹屾垚鍚庢槸鍚﹀垹闄ゆ枃浠�
+export function fileDownload(showfileName, filePath, deleteflage) {
+ window.location.href =
+ baseURL +
+ "/common/downloadAssign?showFileName=" +
+ encodeURI(showfileName) +
+ "&filePath=" +
+ encodeURI(filePath) +
+ "&delete=" +
+ deleteflage
}
diff --git a/zhitan-vue/src/views/comprehensive/comps/LineChart.vue b/zhitan-vue/src/views/comprehensive/comps/LineChart.vue
new file mode 100644
index 0000000..e9cc744
--- /dev/null
+++ b/zhitan-vue/src/views/comprehensive/comps/LineChart.vue
@@ -0,0 +1,173 @@
+<template>
+ <div class="chart-box">
+ <div id="ChartDom" style="width: 100%; height: 100%"></div>
+ </div>
+</template>
+
+<script setup>
+import * as echarts from "echarts"
+const { proxy } = getCurrentInstance()
+import useSettingsStore from "@/store/modules/settings"
+const settingsStore = useSettingsStore()
+const emit = defineEmits()
+const props = defineProps({
+ chartData: {
+ type: Object,
+ default: () => {},
+ },
+})
+
+watch(
+ () => props.chartData,
+ (val) => {
+ console.log("watch", val)
+ initChart()
+ }
+)
+watch(
+ () => settingsStore.sideTheme,
+ (val) => {
+ initChart()
+ }
+)
+
+function initChart(value) {
+ const chartDom = document.getElementById("ChartDom")
+ if (echarts.getInstanceByDom(chartDom)) {
+ echarts.dispose(chartDom)
+ }
+ const myChart = echarts.init(chartDom)
+ let option = {
+ title: {
+ text: props.chartData.title,
+ left: "40",
+ textStyle: {
+ color: "#2979ff",
+ },
+ },
+ color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"],
+ tooltip: {
+ trigger: "axis",
+ axisPointer: {
+ type: "shadow",
+ },
+ },
+ legend: {
+ icon: "rect",
+ itemWidth: 14,
+ itemHeight: 10,
+ textStyle: {
+ color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222",
+ },
+ },
+ grid: {
+ top: "40",
+ left: "50",
+ right: "40",
+ bottom: "20",
+ containLabel: true,
+ },
+ xAxis: {
+ type: "category",
+ axisPointer: {
+ type: "shadow",
+ },
+ axisLine: {
+ show: true,
+ lineStyle: {
+ color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222",
+ },
+ },
+ axisTick: {
+ show: false,
+ },
+ splitArea: {
+ show: false,
+ },
+ splitLine: {
+ show: false,
+ },
+ axisLabel: {
+ color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222",
+ fontSize: 14,
+ padding: [5, 0, 0, 0],
+ // formatter: '{value} ml'
+ },
+ data: props.chartData.xData,
+ },
+ yAxis: [
+ {
+ type: "value",
+ nameTextStyle: {
+ color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222",
+ fontSize: 14,
+ padding: [0, 0, 5, 0],
+ },
+ axisLine: {
+ show: false,
+ },
+ splitLine: {
+ show: true,
+ lineStyle: {
+ type: "dashed",
+ color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222",
+ },
+ },
+ axisTick: {
+ show: false,
+ },
+ splitArea: {
+ show: false,
+ },
+ axisLabel: {
+ color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222",
+ fontSize: 14,
+ },
+ },
+ ],
+ series: [
+ {
+ name: props.chartData.title,
+ type: "bar",
+ barWidth: "16",
+ // tooltip: {
+ // valueFormatter: function (value) {
+ // return value + "tce"
+ // },
+ // },
+ itemStyle: {
+ borderRadius: [15, 15, 0, 0],
+ },
+ data: props.chartData.yData,
+ markPoint: {
+ data: [
+ { type: "max", name: "Max" },
+ { type: "min", name: "Min" },
+ ],
+ },
+ },
+ ],
+ }
+ setTimeout(() => {
+ myChart.setOption(option)
+ }, 200)
+
+ window.addEventListener(
+ "resize",
+ () => {
+ myChart.resize()
+ },
+ { passive: true }
+ )
+}
+</script>
+
+<style lang="scss" scoped>
+.chart-box {
+ width: 100%;
+ height: 400px;
+ border: 1px solid #eaeaea;
+ margin-top: 20px;
+ padding-top: 20px;
+}
+</style>
diff --git a/zhitan-vue/src/views/comprehensive/dailyComprehensive/index.vue b/zhitan-vue/src/views/comprehensive/dailyComprehensive/index.vue
new file mode 100644
index 0000000..a3d5183
--- /dev/null
+++ b/zhitan-vue/src/views/comprehensive/dailyComprehensive/index.vue
@@ -0,0 +1,245 @@
+<template>
+ <div class="page">
+ <div class="form-card">
+ <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-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-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+ <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ <!-- <el-form-item>
+ <el-button type="warning" icon="Download" @click="handleExport"> 瀵煎嚭 </el-button>
+ </el-form-item> -->
+ </el-form>
+ </div>
+
+ <div class="table-bg-style">
+ <div class="table-box">
+ <el-table :data="energyList" v-loading="loading" border max-height="380px">
+ <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
+ @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.length > 9"
+ class="item"
+ effect="dark"
+ :content="scope.row.indexName"
+ placement="top-end"
+ >
+ <span>
+ {{ scope.row.indexName.substr(0, 9) + "..." }}
+ </span>
+ </el-tooltip>
+ <span v-else>{{ scope.row.indexName }}</span>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column v-for="index in 24" :key="index" :label="index - 1 + '鏃�'" align="center" min-width="100">
+ <template #default="scope">{{ numFilter(scope.row[`value${index - 1}`]) }}</template>
+ </el-table-column>
+ </el-table>
+
+ <div>
+ <line-chart ref="LineChartRef" :chartData="lineChartData" />
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script setup>
+import {
+ getDataList,
+ getlistChart,
+ exportList,
+} from "@/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive"
+import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"
+import LineChart from "../comps/LineChart.vue"
+let { proxy } = getCurrentInstance()
+const energyTypeList = ref()
+function getEnergyTypeList() {
+ listEnergyTypeList().then((res) => {
+ energyTypeList.value = res.data
+ // form.value.indexType = alarm_record_category.value[0].value
+ // form.value.energyType = energyTypeList.value[0].enersno
+ getList()
+ })
+}
+getEnergyTypeList()
+function numFilter(value) {
+ // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
+ let realVal = ""
+ if (!isNaN(value) && value !== "" && value !== null) {
+ realVal = parseFloat(value).toFixed(2)
+ } else {
+ realVal = "--"
+ }
+ return realVal
+}
+let loading = ref(false)
+let total = ref(0)
+let queryParams = ref({
+ indexStorageId: "",
+ indexCode: "",
+ pageNum: 1,
+ pageSize: 10,
+ dataTime: "",
+})
+
+const energyList = ref([])
+const lineChartData = ref({})
+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])
+ }
+ })
+}
+
+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: [
+ // "0鏃�",
+ // "1鏃�",
+ // "2鏃�",
+ // "3鏃�",
+ // "4鏃�",
+ // "5鏃�",
+ // "6鏃�",
+ // "7鏃�",
+ // "8鏃�",
+ // "9鏃�",
+ // "10鏃�",
+ // "11鏃�",
+ // "12鏃�",
+ // "13鏃�",
+ // "14鏃�",
+ // "15鏃�",
+ // "16鏃�",
+ // "17鏃�",
+ // "18鏃�",
+ // "19鏃�",
+ // "20鏃�",
+ // "21鏃�",
+ // "22鏃�",
+ // "23鏃�",
+ // ],
+ 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 getTime() {
+ var date = new Date()
+ var year = date.getFullYear()
+ var month = date.getMonth() + 1
+ var date = date.getDate()
+ month = month < 10 ? "0" + month : month
+ date = date < 10 ? "0" + date : date
+ queryParams.value.dataTime = year + "-" + month + "-" + date
+}
+getTime()
+
+// 瀵煎嚭鎸夐挳鎿嶄綔
+function handleExport() {
+ exportList(queryParams.value).then((response) => {
+ console.log(response)
+ // download(response.msg);
+ })
+}
+
+function handleQuery() {
+ queryParams.value.pageNum = 1
+ getList()
+}
+
+function resetQuery() {
+ queryParams.value = {
+ limitName: "",
+ pageNum: 1,
+ pageSize: 10,
+ dataTime: null,
+ }
+ getTime()
+ getList()
+}
+</script>
+
+<style lang="scss" scoped>
+@import "@/assets/styles/page.scss";
+
+.header-box {
+ :deep .el-form-item__content {
+ color: #fff;
+ font-size: 16px;
+ }
+}
+
+:deep .el-table--fit {
+ border-bottom: 1px solid #eaeaea;
+}
+</style>
diff --git a/zhitan-vue/src/views/comprehensive/monthlyComprehensive/index.vue b/zhitan-vue/src/views/comprehensive/monthlyComprehensive/index.vue
new file mode 100644
index 0000000..c63c0fe
--- /dev/null
+++ b/zhitan-vue/src/views/comprehensive/monthlyComprehensive/index.vue
@@ -0,0 +1,241 @@
+<template>
+ <div class="page">
+ <div class="form-card">
+ <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-select>
+ </el-form-item>
+ <el-form-item label="缁熻鏃堕棿">
+ <el-date-picker
+ style="width: 100%"
+ v-model="queryParams.dataTime"
+ type="month"
+ :clearable="false"
+ value-format="yyyy-MM"
+ placeholder="閫夋嫨鏃ユ湡"
+ >
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+ <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ <!-- <el-form-item>
+ <el-button type="warning" icon="Download" @click="handleExport"> 瀵煎嚭 </el-button>
+ </el-form-item> -->
+ </el-form>
+ </div>
+
+ <div class="table-bg-style">
+ <div class="table-box">
+ <el-table :data="energyList" v-loading="loading" border max-height="380px">
+ <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
+ @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.length > 9"
+ class="item"
+ effect="dark"
+ :content="scope.row.indexName"
+ placement="top-end"
+ >
+ <span>
+ {{ scope.row.indexName.substr(0, 9) + "..." }}
+ </span>
+ </el-tooltip>
+ <span v-else>{{ scope.row.indexName }}</span>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column v-for="index in 31" :key="index" :label="index + '鏃�'" align="center" min-width="100">
+ <template #default="scope">{{ numFilter(scope.row[`value${index - 1}`]) }}</template>
+ </el-table-column>
+ </el-table>
+
+ <div>
+ <line-chart ref="LineChartRef" :chartData="lineChartData" />
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script setup>
+import { getDataList, getlistChart } from "@/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive"
+import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"
+import LineChart from "../comps/LineChart.vue"
+let { proxy } = getCurrentInstance()
+const energyTypeList = ref()
+function getEnergyTypeList() {
+ listEnergyTypeList().then((res) => {
+ energyTypeList.value = res.data
+ // form.value.indexType = alarm_record_category.value[0].value
+ // form.value.energyType = energyTypeList.value[0].enersno
+ getList()
+ })
+}
+getEnergyTypeList()
+function numFilter(value) {
+ // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
+ let realVal = ""
+ if (!isNaN(value) && value !== "" && value !== null) {
+ realVal = parseFloat(value).toFixed(2)
+ } else {
+ realVal = "--"
+ }
+ return realVal
+}
+let loading = ref(false)
+let total = ref(0)
+let queryParams = ref({
+ indexStorageId: "",
+ indexCode: "",
+ pageNum: 1,
+ pageSize: 10,
+ dataTime: "",
+ timeType: "DAY",
+})
+
+const energyList = ref([])
+const lineChartData = ref({})
+function getList() {
+ queryParams.value.indexCode = proxy.$route.query.modelCode
+ getDataList({
+ ...queryParams.value,
+ }).then((response) => {
+ energyList.value = response.data.tabledata
+ if (energyList.value && energyList.value.length !== 0) {
+ selectChange(energyList.value[0])
+ }
+ })
+}
+
+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: [
+ // "0鏃�",
+ // "1鏃�",
+ // "2鏃�",
+ // "3鏃�",
+ // "4鏃�",
+ // "5鏃�",
+ // "6鏃�",
+ // "7鏃�",
+ // "8鏃�",
+ // "9鏃�",
+ // "10鏃�",
+ // "11鏃�",
+ // "12鏃�",
+ // "13鏃�",
+ // "14鏃�",
+ // "15鏃�",
+ // "16鏃�",
+ // "17鏃�",
+ // "18鏃�",
+ // "19鏃�",
+ // "20鏃�",
+ // "21鏃�",
+ // "22鏃�",
+ // "23鏃�",
+ // ],
+ 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 getTime() {
+ var date = new Date()
+ var year = date.getFullYear()
+ var month = date.getMonth() + 1
+ var date = date.getDate()
+ month = month < 10 ? "0" + month : month
+ date = date < 10 ? "0" + date : date
+ queryParams.value.dataTime = year + "-" + month
+}
+getTime()
+
+// 瀵煎嚭鎸夐挳鎿嶄綔
+function handleExport() {
+ exportList(queryParams.value).then((response) => {
+ console.log(response)
+ // download(response.msg);
+ })
+}
+
+function handleQuery() {
+ queryParams.value.pageNum = 1
+ getList()
+}
+
+function resetQuery() {
+ queryParams.value = {
+ limitName: "",
+ pageNum: 1,
+ pageSize: 10,
+ dataTime: null,
+ timeType: "DAY",
+ }
+ getTime()
+ getList()
+}
+</script>
+
+<style lang="scss" scoped>
+@import "@/assets/styles/page.scss";
+
+.header-box {
+ :deep .el-form-item__content {
+ color: #fff;
+ font-size: 16px;
+ }
+}
+
+:deep .el-table--fit {
+ border-bottom: 1px solid #eaeaea;
+}
+</style>
diff --git a/zhitan-vue/src/views/comprehensive/yearComprehensive/index.vue b/zhitan-vue/src/views/comprehensive/yearComprehensive/index.vue
new file mode 100644
index 0000000..494e37a
--- /dev/null
+++ b/zhitan-vue/src/views/comprehensive/yearComprehensive/index.vue
@@ -0,0 +1,245 @@
+<template>
+ <div class="page">
+ <div class="form-card">
+ <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-select>
+ </el-form-item>
+ <el-form-item label="缁熻鏃堕棿">
+ <el-date-picker
+ style="width: 100%"
+ v-model="queryParams.dataTime"
+ type="year"
+ :clearable="false"
+ value-format="YYYY"
+ placeholder="閫夋嫨鏃ユ湡"
+ >
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+ <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ <!-- <el-form-item>
+ <el-button type="warning" icon="Download" @click="handleExport"> 瀵煎嚭 </el-button>
+ </el-form-item> -->
+ </el-form>
+ </div>
+
+ <div class="table-bg-style">
+ <div class="table-box">
+ <el-table :data="energyList" v-loading="loading" border max-height="380px">
+ <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
+ @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.length > 9"
+ class="item"
+ effect="dark"
+ :content="scope.row.indexName"
+ placement="top-end"
+ >
+ <span>
+ {{ scope.row.indexName.substr(0, 9) + "..." }}
+ </span>
+ </el-tooltip>
+ <span v-else>{{ scope.row.indexName }}</span>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column v-for="index in 12" :key="index" :label="index + '鏈�'" align="center" min-width="100">
+ <template #default="scope">{{ numFilter(scope.row[`value${index - 1}`]) }}</template>
+ </el-table-column>
+ </el-table>
+
+ <div>
+ <line-chart ref="LineChartRef" :chartData="lineChartData" />
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script setup>
+import { getDataList, getlistChart } from "@/api/comprehensiveStatistics/yearComprehensive/yearComprehensive"
+import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"
+import LineChart from "../comps/LineChart.vue"
+let { proxy } = getCurrentInstance()
+const energyTypeList = ref()
+function getEnergyTypeList() {
+ listEnergyTypeList().then((res) => {
+ energyTypeList.value = res.data
+ // form.value.indexType = alarm_record_category.value[0].value
+ // form.value.energyType = energyTypeList.value[0].enersno
+ getList()
+ })
+}
+getEnergyTypeList()
+function numFilter(value) {
+ // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
+ let realVal = ""
+ if (!isNaN(value) && value !== "" && value !== null) {
+ realVal = parseFloat(value).toFixed(2)
+ } else {
+ realVal = "--"
+ }
+ return realVal
+}
+let loading = ref(false)
+let queryParams = ref({
+ indexStorageId: "",
+ indexCode: "",
+ pageNum: 1,
+ pageSize: 10,
+ dataTime: "2025-01-0",
+ timeType: "MONTH",
+})
+
+const energyList = ref([])
+const lineChartData = ref({})
+function getList() {
+ queryParams.value.indexCode = proxy.$route.query.modelCode
+ getDataList({
+ ...queryParams.value,
+ dataTime: queryParams.value.dataTime ? queryParams.value.dataTime + "-01" : "",
+ }).then((response) => {
+ energyList.value = response.data
+ if (response.data && response.data.length !== 0) {
+ selectChange(response.data[0])
+ }
+ })
+}
+
+const LineChartRef = ref()
+function selectChange(row) {
+ queryParams.value.indexId = row ? row.indexId : undefined
+ getlistChart({
+ ...queryParams.value,
+ dataTime: queryParams.value.dataTime ? queryParams.value.dataTime + "-01" : "",
+ }).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: [
+ // "0鏃�",
+ // "1鏃�",
+ // "2鏃�",
+ // "3鏃�",
+ // "4鏃�",
+ // "5鏃�",
+ // "6鏃�",
+ // "7鏃�",
+ // "8鏃�",
+ // "9鏃�",
+ // "10鏃�",
+ // "11鏃�",
+ // "12鏃�",
+ // "13鏃�",
+ // "14鏃�",
+ // "15鏃�",
+ // "16鏃�",
+ // "17鏃�",
+ // "18鏃�",
+ // "19鏃�",
+ // "20鏃�",
+ // "21鏃�",
+ // "22鏃�",
+ // "23鏃�",
+ // ],
+ 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 getTime() {
+ var date = new Date()
+ var year = date.getFullYear()
+ var month = date.getMonth() + 1
+ var date = date.getDate()
+ month = month < 10 ? "0" + month : month
+ date = date < 10 ? "0" + date : date
+ queryParams.value.dataTime = year + ""
+}
+
+// 瀵煎嚭鎸夐挳鎿嶄綔
+function handleExport() {
+ exportList(queryParams.value).then((response) => {
+ console.log(response)
+ // download(response.msg);
+ })
+}
+
+function handleQuery() {
+ queryParams.value.pageNum = 1
+ getList()
+}
+
+function resetQuery() {
+ queryParams.value = {
+ limitName: "",
+ pageNum: 1,
+ pageSize: 10,
+ dataTime: null,
+ timeType: "MONTH",
+ }
+ getTime()
+ getList()
+}
+
+getTime()
+</script>
+
+<style lang="scss" scoped>
+@import "@/assets/styles/page.scss";
+
+.header-box {
+ :deep .el-form-item__content {
+ color: #fff;
+ font-size: 16px;
+ }
+}
+
+:deep .el-table--fit {
+ border-bottom: 1px solid #eaeaea;
+}
+</style>
--
Gitblit v1.9.3