From 76be37f36138f16e34b6eee5ac530c28bc738946 Mon Sep 17 00:00:00 2001 From: huangjp Date: Thu, 12 Mar 2026 10:42:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=89=E4=BC=8Fpv8pcs4?= =?UTF-8?q?=E6=9F=B4=E5=8F=91=E6=8B=93=E6=89=91=E5=9B=BE=E7=94=B5=E6=B5=81?= =?UTF-8?q?=E6=B5=81=E5=90=91=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../topology/pv8FourthTopCenter.vue | 581 +++++++++++++++--- pages/tabbar/dashboard.vue | 6 +- static/aidex/login/bg-logo1.png | Bin 0 -> 13119 bytes 3 files changed, 483 insertions(+), 104 deletions(-) create mode 100644 static/aidex/login/bg-logo1.png diff --git a/pages/tabbar/components/topology/pv8FourthTopCenter.vue b/pages/tabbar/components/topology/pv8FourthTopCenter.vue index 6f9bb85..05b56b6 100644 --- a/pages/tabbar/components/topology/pv8FourthTopCenter.vue +++ b/pages/tabbar/components/topology/pv8FourthTopCenter.vue @@ -981,7 +981,7 @@ } ], - pointSpeed: 1, // 移动速度(像素/帧) + pointSpeed: 1.5, // 移动速度(像素/帧) kWValues: { pv1:null, pv2:null, @@ -994,7 +994,11 @@ pcs1:null, pcs2:null, pcs3:null, - pcs4:null + pcs4:null, + bms1:null, + bms2:null, + bms3:null, + bms4:null } } @@ -1247,42 +1251,34 @@ this.movingPoints.forEach(point => (point.isActive = false,point.isMove = false,point.currentStep = 0,point.x = point.path[0].x,point.y = point.path[0].y)); this.stationId = val this.textCanvasData.splice(10) - const api = [ this.getpv1(), this.getpv2(), this.getPcs1(), - this.getpv3(), this.getpv4(), this.getPcs2(), - this.getpv5(), this.getpv6(), this.getPcs3(), - this.getpv7(), this.getpv8(), this.getPcs4(), + const api = [ this.getpv1(), this.getpv2(), this.getPcs1(), this.getBms1(), + this.getpv3(), this.getpv4(), this.getPcs2(), this.getBms2(), + this.getpv5(), this.getpv6(), this.getPcs3(), this.getBms3(), + this.getpv7(), this.getpv8(), this.getPcs4(), this.getBms4(), this.getacdcCenter(), this.getAmmeter() ] Promise.all(api).finally((result) => { // 获取三个 kW 值 - const {pv1,pv2,pv3,pv4,pv5,pv6,pv7,pv8,pcs1,pcs2,pcs3,pcs4} = this.kWValues; + const {pv1,pv2,pv3,pv4,pv5,pv6,pv7,pv8,pcs1,pcs2,pcs3,pcs4,bms1,bms2,bms3,bms4} = this.kWValues; const pvvalues = [pv1,pv2,pv3,pv4,pv5,pv6,pv7,pv8]; const pcsvalues = [pcs1,pcs2,pcs3,pcs4]; + const bmsvalues = [bms1,bms2,bms3,bms4]; const pvallZero = pvvalues.every(v => v === 0); const anyPositive = pvvalues.some(v => v > 1); const anyNegative = pvvalues.some(v => v < 0); - const pcsanyNegative = pvvalues.some(v => v < 15); + const pcsValuesGreater = pcsvalues.some(v => v > 0); + const pcsValuesLess = pcsvalues.some(v => v < 0); // 重置所有点(确保干净) this.movingPoints.forEach(p => (p.isActive = false)); - // 条件3:全部为0 → 只显示点1 - if (pvallZero) { - this.movingPoints.find(p => p.id === 'point-1').isActive = true; - if(pcsanyNegative){ - this.movingPoints.find(p => p.id === 'point-2').isActive = true; - this.movingPoints.find(p => p.id === 'point-4').isActive = true; - this.movingPoints.find(p => p.id === 'point-5').isActive = true; - this.movingPoints.find(p => p.id === 'point-6').isActive = true; - this.movingPoints.find(p => p.id === 'point-7').isActive = true; - } - } else { - // 条件1:任一大于0 → 点6运动 - if (anyPositive) { - this.movingPoints.find(p => p.id === 'point-3').isActive = true; - } - // 再设置其他点显示逻辑 - this.updatePvPcsPoints(); + if(pcsValuesLess){ + this.movingPoints.find(p => p.id === 'point-3').isActive = true; } + if(pcsValuesGreater && ((pv1 + pv2) < pcs1 || (pv3 + pv4) < pcs2 || (pv5 + pv6) < pcs3 || (pv7 + pv8) < pcs4)){ + this.movingPoints.find(p => p.id === 'point-2').isActive = true; + } + // 设置其他点显示逻辑 + this.updatePvPcsPoints(); this.canvasData = [...this.textCanvasData, ...this.imageCanvasData, ...this .lineCanvasData, ...this.circleCanvasData ] @@ -1360,30 +1356,101 @@ }, updatePvPcsPoints() { - const {pv1,pv2,pv3,pv4,pv5,pv6,pv7,pv8,pcs1,pcs2,pcs3,pcs4} = this.kWValues; - + const {pv1,pv2,pv3,pv4,pv5,pv6,pv7,pv8,pcs1,pcs2,pcs3,pcs4,bms1,bms2,bms3,bms4} = this.kWValues; + // 处理点4、5、6、7 + const point4 = this.movingPoints.find(p => p.id === 'point-4'); + const point5 = this.movingPoints.find(p => p.id === 'point-5'); + const point6 = this.movingPoints.find(p => p.id === 'point-6'); + const point7 = this.movingPoints.find(p => p.id === 'point-7'); // 处理左边:点8、9、10、11、12 const point8 = this.movingPoints.find(p => p.id === 'point-8'); const point9 = this.movingPoints.find(p => p.id === 'point-9'); const point10 = this.movingPoints.find(p => p.id === 'point-10'); const point11 = this.movingPoints.find(p => p.id === 'point-11'); const point12 = this.movingPoints.find(p => p.id === 'point-12'); - if(pv1 > 1){ - point8.isActive = true; - point9.isActive = true; - }else if (pv1 < 1){ - point8.isActive = false; - point9.isActive = false; - } - if(pv2 > 1){ - point10.isActive = true; - point11.isActive = true; - }else if (pv2 < 1){ - point10.isActive = false; - point11.isActive = false; - } - if(pcs1 > 5){ - point12.isActive = true; + if(pcs1 > 0){ //正充 + if((pv1 + pv2) < pcs1){ // 光伏小于pcs功率 + point4.isActive = true; + point9.isActive = false; + point11.isActive = false; + if(pv1 > 0){ + point8.isActive = true; + }else{ + point8.isActive = false; + } + if(pv2 > 0){ + point10.isActive = true; + }else{ + point10.isActive = false; + } + point12.isActive = false; + }else if((pv1 + pv2) > pcs1){ // 光伏大于pcs功率 + point4.isActive = false; + if(pv1 > 0){ + point8.isActive = true; + point9.isActive = true; + }else{ + point8.isActive = false; + point9.isActive = false; + } + if(pv2 > 0){ + point10.isActive = true; + point11.isActive = true; + }else{ + point10.isActive = false; + point11.isActive = false; + } + point12.isActive = false; + }else{ + point4.isActive = false; + point8.isActive = true; + point9.isActive = false; + point10.isActive = true; + point11.isActive = false; + point12.isActive = false; + } + }else if(pcs1 < 0){ //负放 Math.abs(num) + if((pv1 + pv2) < Math.abs(pcs1)){ // 光伏小于pcs功率 + if(pv1 > 0){ //光伏有功率 + point8.isActive = false; + point9.isActive = true; + }else{ + point8.isActive = false; + point9.isActive = false; + } + if(pv2 > 0){ //光伏有功率 + point10.isActive = false; + point11.isActive = true; + }else{ + point10.isActive = false; + point11.isActive = false; + } + point12.isActive = true; + }else if((pv1 + pv2) > Math.abs(pcs1)){ // 光伏大于pcs功率 + if(pv1 > 0){ //光伏有功率 + point8.isActive = true; + point9.isActive = true; + }else{ + point8.isActive = false; + point9.isActive = false; + } + if(pv2 > 0){ //光伏有功率 + point10.isActive = true; + point11.isActive = true; + }else{ + point10.isActive = false; + point11.isActive = false; + } + point12.isActive = false; + } + point4.isActive = false; + }else{ + point4.isActive = false; + point8.isActive = false; + point9.isActive = false; + point10.isActive = false; + point11.isActive = false; + point12.isActive = false; } // 处理左边:点13、14、15、16、17 const point13 = this.movingPoints.find(p => p.id === 'point-13'); @@ -1391,22 +1458,89 @@ const point15 = this.movingPoints.find(p => p.id === 'point-15'); const point16 = this.movingPoints.find(p => p.id === 'point-16'); const point17 = this.movingPoints.find(p => p.id === 'point-17'); - if(pv3 > 1){ - point13.isActive = true; - point14.isActive = true; - }else if (pv3 < 1){ - point13.isActive = false; - point14.isActive = false; - } - if(pv4 > 1){ - point15.isActive = true; - point16.isActive = true; - }else if (pv4 < 1){ - point15.isActive = false; - point16.isActive = false; - } - if(pcs2 > 5){ - point17.isActive = true; + if(pcs2 > 0){ //正充 + if((pv3 + pv4) < pcs2){ // 光伏小于pcs功率 + point5.isActive = true; + point14.isActive = false; + point16.isActive = false; + if(pv3 > 0){ + point13.isActive = true; + }else{ + point13.isActive = false; + } + if(pv4 > 0){ + point15.isActive = true; + }else{ + point15.isActive = false; + } + point17.isActive = false; + }else if((pv3 + pv4) > pcs2){ // 光伏大于pcs功率 + point5.isActive = false; + if(pv3 > 0){ + point13.isActive = true; + point14.isActive = true; + }else{ + point13.isActive = false; + point14.isActive = false; + } + if(pv4 > 0){ + point15.isActive = true; + point16.isActive = true; + }else{ + point15.isActive = false; + point16.isActive = false; + } + point17.isActive = false; + }else{ + point5.isActive = false; + point13.isActive = true; + point14.isActive = false; + point15.isActive = true; + point16.isActive = false; + point17.isActive = false; + } + }else if(pcs2 < 0){ //负放 Math.abs(num) + if((pv3 + pv4) < Math.abs(pcs2)){ // 光伏小于pcs功率 + if(pv3 > 0){ //光伏有功率 + point13.isActive = false; + point14.isActive = true; + }else{ + point13.isActive = false; + point14.isActive = false; + } + if(pv4 > 0){ //光伏有功率 + point15.isActive = false; + point16.isActive = true; + }else{ + point15.isActive = false; + point16.isActive = false; + } + point17.isActive = true; + }else if((pv3 + pv4) > Math.abs(pcs2)){ // 光伏大于pcs功率 + if(pv3 > 0){ //光伏有功率 + point13.isActive = true; + point14.isActive = true; + }else{ + point13.isActive = false; + point14.isActive = false; + } + if(pv4 > 0){ //光伏有功率 + point15.isActive = true; + point16.isActive = true; + }else{ + point15.isActive = false; + point16.isActive = false; + } + point17.isActive = false; + } + point5.isActive = false; + }else{ + point5.isActive = false; + point13.isActive = false; + point14.isActive = false; + point15.isActive = false; + point16.isActive = false; + point17.isActive = false; } // 处理左边:点18、19、20、21、22 const point18 = this.movingPoints.find(p => p.id === 'point-18'); @@ -1414,22 +1548,89 @@ const point20 = this.movingPoints.find(p => p.id === 'point-20'); const point21 = this.movingPoints.find(p => p.id === 'point-21'); const point22 = this.movingPoints.find(p => p.id === 'point-22'); - if(pv5 > 1){ - point18.isActive = true; - point19.isActive = true; - }else if (pv5 < 1){ - point18.isActive = false; - point19.isActive = false; - } - if(pv6 > 1){ - point20.isActive = true; - point21.isActive = true; - }else if (pv6 < 1){ - point20.isActive = false; - point21.isActive = false; - } - if(pcs3 > 5){ - point22.isActive = true; + if(pcs3 > 0){ //正充 + if((pv5 + pv6) < pcs3){ // 光伏小于pcs功率 + point6.isActive = true; + point19.isActive = false; + point21.isActive = false; + if(pv5 > 0){ + point18.isActive = true; + }else{ + point18.isActive = false; + } + if(pv6 > 0){ + point20.isActive = true; + }else{ + point20.isActive = false; + } + point22.isActive = false; + }else if((pv5 + pv6) > pcs3){ // 光伏大于pcs功率 + point6.isActive = false; + if(pv5 > 0){ + point18.isActive = true; + point19.isActive = true; + }else{ + point19.isActive = false; + point20.isActive = false; + } + if(pv6 > 0){ + point20.isActive = true; + point21.isActive = true; + }else{ + point20.isActive = false; + point21.isActive = false; + } + point22.isActive = false; + }else{ + point6.isActive = false; + point18.isActive = true; + point19.isActive = false; + point20.isActive = true; + point21.isActive = false; + point22.isActive = false; + } + }else if(pcs3 < 0){ //负放 Math.abs(num) + if((pv5 + pv6) < Math.abs(pcs3)){ // 光伏小于pcs功率 + if(pv5 > 0){ //光伏有功率 + point18.isActive = true; + point19.isActive = false; + }else{ + point18.isActive = false; + point19.isActive = false; + } + if(pv6 > 0){ //光伏有功率 + point20.isActive = true; + point21.isActive = false; + }else{ + point20.isActive = false; + point21.isActive = false; + } + point22.isActive = true; + }else if((pv5 + pv6) > Math.abs(pcs3)){ // 光伏大于pcs功率 + if(pv5 > 0){ //光伏有功率 + point18.isActive = true; + point19.isActive = true; + }else{ + point18.isActive = false; + point19.isActive = false; + } + if(pv6 > 0){ //光伏有功率 + point20.isActive = true; + point21.isActive = true; + }else{ + point20.isActive = false; + point21.isActive = false; + } + point22.isActive = false; + } + point6.isActive = false; + }else{ + point6.isActive = false; + point18.isActive = false; + point19.isActive = false; + point20.isActive = false; + point21.isActive = false; + point22.isActive = false; } // 处理左边:点23、24、25、26、27 const point23 = this.movingPoints.find(p => p.id === 'point-23'); @@ -1437,23 +1638,91 @@ const point25 = this.movingPoints.find(p => p.id === 'point-25'); const point26 = this.movingPoints.find(p => p.id === 'point-26'); const point27 = this.movingPoints.find(p => p.id === 'point-27'); - if(pv7 > 1){ - point23.isActive = true; - point24.isActive = true; - }else if (pv7 < 1){ - point23.isActive = false; - point24.isActive = false; - } - if(pv8 > 1){ - point25.isActive = true; - point26.isActive = true; - }else if (pv8 < 1){ - point25.isActive = false; - point26.isActive = false; - } - if(pcs4 > 5){ - point27.isActive = true; + if(pcs4 > 0){ //正充 + if((pv7 + pv8) < pcs4){ // 光伏小于pcs功率 + point7.isActive = true; + point24.isActive = false; + point26.isActive = false; + if(pv7 > 0){ + point23.isActive = true; + }else{ + point23.isActive = false; + } + if(pv8 > 0){ + point25.isActive = true; + }else{ + point25.isActive = false; + } + point27.isActive = false; + }else if((pv7 + pv8) > pcs4){ // 光伏大于pcs功率 + point7.isActive = false; + if(pv7 > 0){ + point23.isActive = true; + point24.isActive = true; + }else{ + point23.isActive = false; + point24.isActive = false; + } + if(pv8 > 0){ + point25.isActive = true; + point26.isActive = true; + }else{ + point25.isActive = false; + point26.isActive = false; + } + point27.isActive = false; + }else{ + point7.isActive = false; + point23.isActive = true; + point24.isActive = false; + point25.isActive = true; + point26.isActive = false; + point27.isActive = false; + } + }else if(pcs4 < 0){ //负放 Math.abs(num) + if((pv7 + pv8) < Math.abs(pcs4)){ // 光伏小于pcs功率 + if(pv7 > 0){ //光伏有功率 + point23.isActive = false; + point24.isActive = true; + }else{ + point23.isActive = false; + point24.isActive = false; + } + if(pv8 > 0){ //光伏有功率 + point25.isActive = false; + point26.isActive = true; + }else{ + point25.isActive = false; + point26.isActive = false; + } + point27.isActive = true; + }else if((pv7 + pv8) > Math.abs(pcs4)){ // 光伏大于pcs功率 + if(pv7 > 0){ //光伏有功率 + point23.isActive = true; + point24.isActive = true; + }else{ + point23.isActive = false; + point24.isActive = false; + } + if(pv8 > 0){ //光伏有功率 + point25.isActive = true; + point26.isActive = true; + }else{ + point25.isActive = false; + point26.isActive = false; + } + point27.isActive = false; + } + point7.isActive = false; + }else{ + point7.isActive = false; + point23.isActive = false; + point24.isActive = false; + point25.isActive = false; + point26.isActive = false; + point27.isActive = false; } + }, @@ -1612,6 +1881,33 @@ stationId: this.stationId, pageLocation: 'triad-pcs-1' }) + .then((res) => { + if (res.data && res.data.length) { + res.data.forEach((item, index) => { + if (item.name.includes('kW')) { + const value = parseFloat(item.value); + self.kWValues.pcs1 = value; + } + }) + } else { + this.kWValues.pcs1 = 0; // 没数据视为 0 + } + resolve() + }).catch(() => { + this.kWValues.pcs1 = 0; // 出错也视为 0 + resolve(); + }) + }) + }, + + getBms1() { + let self = this; + return new Promise((resolve, reject) => { + self.$u.api.homePageData + .GetDynamicConfig({ + stationId: this.stationId, + pageLocation: 'triad-bms-1' + }) .then((res) => { if (res.data && res.data.length) { this.textCanvasData.push({ @@ -1641,7 +1937,7 @@ res.data.forEach((item, index) => { if (item.name.includes('SOC')) { const value = parseFloat(item.value); - this.kWValues.pcs1 = value; + this.kWValues.bms1 = value; } this.textCanvasData.push({ type: "text", @@ -1657,11 +1953,11 @@ }) }) } else { - this.kWValues.pcs1 = 0; // 没数据视为 0 + this.kWValues.bms1 = 0; // 没数据视为 0 } resolve() }).catch(() => { - this.kWValues.pcs1 = 0; // 出错也视为 0 + this.kWValues.bms1 = 0; // 出错也视为 0 resolve(); }) }) @@ -1801,6 +2097,33 @@ stationId: this.stationId, pageLocation: 'triad-pcs-2' }) + .then((res) => { + if (res.data && res.data.length) { + res.data.forEach((item, index) => { + if (item.name.includes('kW')) { + const value = parseFloat(item.value); + self.kWValues.pcs2 = value; + } + }) + } else { + this.kWValues.pcs2 = 0; // 没数据视为 0 + } + resolve() + }).catch(() => { + this.kWValues.pcs2 = 0; // 出错也视为 0 + resolve(); + }) + }) + }, + + getBms2() { + let self = this; + return new Promise((resolve, reject) => { + self.$u.api.homePageData + .GetDynamicConfig({ + stationId: this.stationId, + pageLocation: 'triad-bms-2' + }) .then((res) => { if (res.data && res.data.length) { this.textCanvasData.push({ @@ -1830,7 +2153,7 @@ res.data.forEach((item, index) => { if (item.name.includes('SOC')) { const value = parseFloat(item.value); - this.kWValues.pcs2 = value; + this.kWValues.bms2 = value; } this.textCanvasData.push({ type: "text", @@ -1846,11 +2169,11 @@ }) }) } else { - this.kWValues.pcs2 = 0; // 没数据视为 0 + this.kWValues.bms2 = 0; // 没数据视为 0 } resolve() }).catch(() => { - this.kWValues.pcs2 = 0; // 出错也视为 0 + this.kWValues.bms2 = 0; // 出错也视为 0 resolve(); }) }) @@ -1990,6 +2313,33 @@ stationId: this.stationId, pageLocation: 'triad-pcs-3' }) + .then((res) => { + if (res.data && res.data.length) { + res.data.forEach((item, index) => { + if (item.name.includes('kW')) { + const value = parseFloat(item.value); + self.kWValues.pcs3 = value; + } + }) + } else { + this.kWValues.pcs3 = 0; // 没数据视为 0 + } + resolve() + }).catch(() => { + this.kWValues.pcs3 = 0; // 出错也视为 0 + resolve(); + }) + }) + }, + + getBms3() { + let self = this; + return new Promise((resolve, reject) => { + self.$u.api.homePageData + .GetDynamicConfig({ + stationId: this.stationId, + pageLocation: 'triad-bms-3' + }) .then((res) => { if (res.data && res.data.length) { this.textCanvasData.push({ @@ -2019,7 +2369,7 @@ res.data.forEach((item, index) => { if (item.name.includes('SOC')) { const value = parseFloat(item.value); - this.kWValues.pcs3 = value; + this.kWValues.bms3 = value; } this.textCanvasData.push({ type: "text", @@ -2035,11 +2385,11 @@ }) }) } else { - this.kWValues.pcs3 = 0; // 没数据视为 0 + this.kWValues.bms3 = 0; // 没数据视为 0 } resolve() }).catch(() => { - this.kWValues.pcs3 = 0; // 出错也视为 0 + this.kWValues.bms3 = 0; // 出错也视为 0 resolve(); }) }) @@ -2179,6 +2529,33 @@ stationId: this.stationId, pageLocation: 'triad-pcs-4' }) + .then((res) => { + if (res.data && res.data.length) { + res.data.forEach((item, index) => { + if (item.name.includes('kW')) { + const value = parseFloat(item.value); + self.kWValues.pcs4 = value; + } + }) + } else { + this.kWValues.pcs4 = 0; // 没数据视为 0 + } + resolve() + }).catch(() => { + this.kWValues.pcs4 = 0; // 出错也视为 0 + resolve(); + }) + }) + }, + + getBms4() { + let self = this; + return new Promise((resolve, reject) => { + self.$u.api.homePageData + .GetDynamicConfig({ + stationId: this.stationId, + pageLocation: 'triad-bms-4' + }) .then((res) => { if (res.data && res.data.length) { this.textCanvasData.push({ @@ -2224,11 +2601,11 @@ }) }) } else { - this.kWValues.pcs4 = 0; // 没数据视为 0 + this.kWValues.bms4 = 0; // 没数据视为 0 } resolve() }).catch(() => { - this.kWValues.pcs4 = 0; // 出错也视为 0 + this.kWValues.bms4 = 0; // 出错也视为 0 resolve(); }) }) diff --git a/pages/tabbar/dashboard.vue b/pages/tabbar/dashboard.vue index d4e0c32..bac4142 100644 --- a/pages/tabbar/dashboard.vue +++ b/pages/tabbar/dashboard.vue @@ -53,8 +53,9 @@ - + + @@ -216,7 +217,8 @@ {name:'pv1AndStorage_sts_261',value:2}, {name:'pv2AndStorage_261',value:3}, {name:'pv2AndStorage_sts_261',value:4}, - {name:'pv8FourthTopCenter',value:5} + {name:'pv8FourthTopCenter',value:5}, + {name:'pv8FourthDieselTopCenter',value:6} ], pvTopologyType:0, society: [{ diff --git a/static/aidex/login/bg-logo1.png b/static/aidex/login/bg-logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..81046639643d460b3c52745039f1157efe4a975e GIT binary patch literal 13119 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 QAI7NP*11)zWF7kd0I)oE_5c6? literal 0 HcmV?d00001