From e7c05e5d214a149bdaba12f2e84ad0e8136f8726 Mon Sep 17 00:00:00 2001 From: Gary Gu <garygu@Garydebijibendiannao.local> Date: Wed, 28 May 2025 10:23:06 +0800 Subject: [PATCH] feat: 设备状态接口对接 --- src/views/EquipmentView.vue | 360 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 329 insertions(+), 31 deletions(-) diff --git a/src/views/EquipmentView.vue b/src/views/EquipmentView.vue index 7b2233b..8a19837 100644 --- a/src/views/EquipmentView.vue +++ b/src/views/EquipmentView.vue @@ -49,7 +49,7 @@ > </div> <div class="equipment-status" :style="sectionStyle"> - <el-select v-model="equipmentSelected" placeholder="请选择"> + <el-select v-model="deviceSelected" placeholder="请选择" @change="handleSelectChange"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> </el-select> <div @@ -171,6 +171,7 @@ <script> import V2Echarts from "@/components/V2Echarts.vue"; + import { HomeAPI } from "@/api/home"; export default { name: "EquipmentView", components: { @@ -184,44 +185,23 @@ }, data() { return { - equipmentSelected: "", - options: [ - { - value: "选项1", - label: "黄金糕", - }, - { - value: "选项2", - label: "双皮奶", - }, - { - value: "选项3", - label: "蚵仔煎", - }, - { - value: "选项4", - label: "龙须面", - }, - { - value: "选项5", - label: "北京烤鸭", - }, - ], + deviceSelected: "", + options: [], backgroundImage: new URL("@/assets/images/backgrounds/cover_bg.png", import.meta.url).href, titleImage: new URL("@/assets/images/titles/renyuan.png", import.meta.url).href, middleImage: new URL("@/assets/images/titles/shebei.png", import.meta.url).href, bottomImage: new URL("@/assets/images/titles/huanjing.png", import.meta.url).href, bgImage: new URL("@/assets/images/titles/title_second.png", import.meta.url).href, enviorImage: new URL("@/assets/images/titles/wendu_bg.png", import.meta.url).href, - deviceOnline: 1, - deviceTotal: 27, + deviceOnline: 0, + deviceTotal: 0, currentTab: "塔吊监控", circleItems: [ { id: "zaixianChartBox", name: "总在线", - value: 22, - percentage: 81.5, + value: 0, + percentage: 0, options: { tooltip: { trigger: "item", @@ -308,8 +288,8 @@ { id: "lixianChartBox", name: "总离线", - value: 5, - percentage: 33, + value: 0, + percentage: 0, options: { tooltip: { trigger: "item", @@ -397,7 +377,7 @@ id: "baojingChartBox", name: "总报警", value: 0, - percentage: 20, + percentage: 0, options: { tooltip: { trigger: "item", @@ -507,12 +487,330 @@ handler(newVal) { console.log("设备界面接收到的数据:", newVal); // 处理数据变化的逻辑 + this.getDeviceTypes(newVal); }, deep: true, // 深度监听对象内部变化 immediate: true, // 立即执行一次 }, }, + mounted() {}, methods: { + /** + * 处理设备选择变化 + * @param val + */ + handleSelectChange(val) { + this.getDeviceState(val); + }, + /** + * 获取设备类型 + * @param bindId + */ + getDeviceTypes(bindId) { + const params = { + bindId, + }; + HomeAPI.GetDeviceType(params).then((res) => { + if (res.Ret === 1) { + const result = res.Data; + if (result.length > 0) { + this.options = result.map((item) => ({ + value: item.Id, + label: item.Name, + })); + this.deviceSelected = this.options[0].value; // 默认选中第一个项目 + this.getDeviceState(this.deviceSelected); + } else { + this.options = []; + } + } + }); + }, + /** + * 获取设备状态 + * @param deviceTypeId + */ + getDeviceState(deviceTypeId) { + const params = { + bindId: this.selectedId || "", + deviceTypeId, + }; + HomeAPI.GetJSCDeviceState(params).then((res) => { + if (res.Ret === 1) { + const result = res.Data; + if (result) { + this.deviceOnline = result.TotalOnlineNumber; + this.deviceTotal = result.TotalOnlineNumber + result.TotalOfflineNumber; + this.circleItems = [ + { + id: "zaixianChartBox", + name: "总在线", + value: result.TotalOnlineNumber, + percentage: result.TotalOnlineRate, + options: { + tooltip: { + trigger: "item", + show: false, + }, + legend: { + itemWidth: 8, + itemHeight: 8, + top: "5%", + left: "center", + show: false, + }, + series: [ + { + type: "pie", + radius: ["70%", "80%"], + center: ["50%", "50%"], + avoidLabelOverlap: false, + hoverAnimation: false, + startAngle: 90, + itemStyle: { + normal: { + label: { + show: false, + }, + labelLine: { + show: false, + }, + shadowBlur: 40, + borderWidth: 5, + shadowColor: "rgba(0, 0, 0, 0)", // 边框阴影 + }, + }, + data: [ + { + value: 100, + name: "", + itemStyle: { + color: "#234E84", + }, + }, + ], + }, + { + type: "pie", + radius: ["70%", "100%"], + center: ["50%", "50%"], + avoidLabelOverlap: false, + hoverAnimation: false, + startAngle: 90, + itemStyle: { + normal: { + label: { + show: false, + }, + labelLine: { + show: false, + }, + shadowBlur: 40, + borderWidth: 10, + shadowColor: "rgba(0, 0, 0, 0)", // 边框阴影 + }, + }, + data: [ + { + value: result.TotalOnlineRate, + name: "", + itemStyle: { + color: "#00FFFF", + }, + }, + { + value: 100 - result.TotalOnlineRate, + name: "", + itemStyle: { + color: "transparent", + }, + }, + ], + }, + ], + }, + }, + { + id: "lixianChartBox", + name: "总离线", + value: result.TotalOfflineNumber, + percentage: result.TotalOfflineRate, + options: { + tooltip: { + trigger: "item", + show: false, + }, + legend: { + itemWidth: 8, + itemHeight: 8, + top: "5%", + left: "center", + show: false, + }, + series: [ + { + type: "pie", + radius: ["70%", "80%"], + center: ["50%", "50%"], + avoidLabelOverlap: false, + hoverAnimation: false, + startAngle: 90, + itemStyle: { + normal: { + label: { + show: false, + }, + labelLine: { + show: false, + }, + shadowBlur: 40, + borderWidth: 5, + shadowColor: "rgba(0, 0, 0, 0)", // 边框阴影 + }, + }, + data: [ + { + value: 100, + name: "", + itemStyle: { + color: "#234E84", + }, + }, + ], + }, + { + type: "pie", + radius: ["70%", "100%"], + center: ["50%", "50%"], + avoidLabelOverlap: false, + hoverAnimation: false, + startAngle: 90, + itemStyle: { + normal: { + label: { + show: false, + }, + labelLine: { + show: false, + }, + shadowBlur: 40, + borderWidth: 10, + shadowColor: "rgba(0, 0, 0, 0)", // 边框阴影 + }, + }, + data: [ + { + value: result.TotalOfflineRate, + name: "", + itemStyle: { + color: "#00FFFF", + }, + }, + { + value: 100 - result.TotalOfflineRate, + name: "", + itemStyle: { + color: "transparent", + }, + }, + ], + }, + ], + }, + }, + { + id: "baojingChartBox", + name: "总报警", + value: result.TotalAlarmsNumber, + percentage: result.TotalAlarmsRate, + options: { + tooltip: { + trigger: "item", + show: false, + }, + legend: { + itemWidth: 8, + itemHeight: 8, + top: "5%", + left: "center", + show: false, + }, + series: [ + { + type: "pie", + radius: ["70%", "80%"], + center: ["50%", "50%"], + avoidLabelOverlap: false, + hoverAnimation: false, + startAngle: 90, + itemStyle: { + normal: { + label: { + show: false, + }, + labelLine: { + show: false, + }, + shadowBlur: 40, + borderWidth: 5, + shadowColor: "rgba(0, 0, 0, 0)", // 边框阴影 + }, + }, + data: [ + { + value: 100, + name: "", + itemStyle: { + color: "#234E84", + }, + }, + ], + }, + { + type: "pie", + radius: ["70%", "100%"], + center: ["50%", "50%"], + avoidLabelOverlap: false, + hoverAnimation: false, + startAngle: 90, + itemStyle: { + normal: { + label: { + show: false, + }, + labelLine: { + show: false, + }, + shadowBlur: 40, + borderWidth: 10, + shadowColor: "rgba(0, 0, 0, 0)", // 边框阴影 + }, + }, + data: [ + { + value: result.TotalAlarmsRate, + name: "", + itemStyle: { + color: "#00FFFF", + }, + }, + { + value: 100 - result.TotalAlarmsRate, + name: "", + itemStyle: { + color: "transparent", + }, + }, + ], + }, + ], + }, + }, + ]; + } + } + }); + }, handleControlBtnClick(tab) { this.currentTab = tab; }, -- Gitblit v1.9.3