From 011aab07af85ba820b9f96a02c249b7ba26c8d26 Mon Sep 17 00:00:00 2001
From: he wei <858544502@qq.com>
Date: 星期四, 26 六月 2025 09:02:06 +0800
Subject: [PATCH] U 整理提交

---
 src/views/realtime/tabs/system.vue |  882 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 815 insertions(+), 67 deletions(-)

diff --git a/src/views/realtime/tabs/system.vue b/src/views/realtime/tabs/system.vue
index 0056ad8..d75cb0e 100644
--- a/src/views/realtime/tabs/system.vue
+++ b/src/views/realtime/tabs/system.vue
@@ -1,22 +1,644 @@
-<script setup>
-import { ref } from "vue";
+<script setup name="tabSystem">
+import { nextTick, ref, reactive, computed, watch, onMounted } from "vue";
 import svgDiagram from '@/components/svgDiagram.vue';
 import info from '@/components/info.vue';
-// import lineChart from '@/components/echarts/line1.vue';
-import lineChart from '@/components/echarts/BaseChart.vue';
+import lineChart from '@/components/echarts/line1.vue';
+import lineChart2 from '@/components/echarts/line2.vue';
+import hrParams from '@/components/hrParams.vue';
+import devAlarmParams from '../devAlarmParams.vue';
+
+import lineChart3 from '@/components/echarts/line-scroll.vue';
+// import lineChart from '@/components/echarts/BaseChart.vue';
 // import lineChart from '../bar8.vue';
+import moment from 'moment';
+import getBinaryDigits from '@/utils/getBinaryDigits.js';
+
+import useElement from "@/hooks/useElement.js";
+	const { $loading, $message, $confirm } = useElement();
+
+
+import {
+	getBattDevData100,
+	getPwrHisAcinData100,
+	getPwrHisDcoutData100,
+  getPwrHeartParam,
+} from "@/api/realtime";
+
+import {
+  stopDis,
+  restart,
+} from '@/api/control';
+
 
 const props = defineProps({
-  data: {
-    type: Object,
-    default: {},
-  },
+	data: {
+		type: Object,
+		default: {},
+	},
+	powerId: {
+		type: [Number, String],
+	},
+	devId: {
+		type: [Number, String],
+	},
+	battgroupId: {
+		type: [Number, String],
+	},
 });
 
 const tabIdx0 = ref(0);
 const tabIdx1 = ref(0);
 
+const chart0 = ref(null);
+const chart1 = ref(null);
+const chart2 = ref(null);
 
+const labels_0 = [
+	[
+		['涓�璺疉鐩哥數娴�', 'acin1Curra'],
+		['涓�璺疊鐩哥數娴�', 'acin1Currb'],
+		['涓�璺疌鐩哥數娴�', 'acin1Currc'],
+		['浜岃矾A鐩哥數娴�', 'acin2Curra'],
+		['浜岃矾B鐩哥數娴�', 'acin2Currb'],
+		['浜岃矾C鐩哥數娴�', 'acin2Currc'],
+	],
+	[
+		['涓�璺疉鐩哥數鍘�', 'acin1Vola'],
+		['涓�璺疊鐩哥數鍘�', 'acin1Volb'],
+		['涓�璺疌鐩哥數鍘�', 'acin1Volc'],
+		['浜岃矾A鐩哥數鍘�', 'acin2Vola'],
+		['浜岃矾B鐩哥數鍘�', 'acin2Volb'],
+		['浜岃矾C鐩哥數鍘�', 'acin2Volc'],
+	]
+];
+
+const labels_1 = reactive([[], []]);
+
+const devRt = ref({
+  devIp: "127.0.0.0",
+  devVersion: "1",
+  devId: 0,
+  devOnline: 0,
+  recordDatetime: "",
+  devTesttype: 0,
+  devTestgroupnum: 0,
+  devWorkstate: -1,
+  devAlarmstate: 0,
+  devTemp: 0.0,
+  devResTestState: 0,
+  devOnlinevollow: 0,
+  devEachgroupBattsum: 0,
+  devCaptestOnlinevol: 0.0,
+  devCaptestGroupvol: 0.0,
+  devCaptestCurr: 0.0,
+  devCaptestCap: 0.0,
+  devCaptestTimelong: 0,
+  devRestestCount: 0,
+  devCommcount: 0,
+  devErrcommcount: 0,
+  devRxnullerrcount: 0,
+  devLastCaptestStopType: 0,
+  devCondvoldp: 0.0,
+  devConresist: 0.0,
+  devConresist1: 0.0,
+  dev61850alarms: "",
+  devCondvoldp1: 0.0,
+  groupVol1: 0.0,
+  groupVol2: 0.0,
+  groupCurr1: 0.0,
+  groupCurr2: 0.0,
+});
+
+const battRt = ref({
+  groupCurr: 0,
+});
+
+watch(
+	() => tabIdx0.value,
+	() => {
+		nextTick(() => {
+			tabIdx0Change();
+		});
+	},
+	{ immediate: true }
+);
+
+watch(
+	() => tabIdx1.value,
+	() => {
+		nextTick(() => {
+			tabIdx1Change();
+		});
+	},
+	{ immediate: true }
+);
+
+watch(
+	() => props.powerId,
+	(n) => {
+		if (!n) return;
+
+		nextTick(() => {
+      getHeartParam();
+			// getAcinData();
+			// getDevData();
+			// getDcoutData();
+			numChange('acin');
+			numChange('dcout');
+			numChange('dev');
+		});
+	},
+	{ immediate: true }
+);
+
+watch(
+	() => props.data,
+	(n) => {
+		if (!n) return;
+		nextTick(() => {
+			updateRt();
+      if (n.deviceState) {
+        devRt.value = n.deviceState;
+      }
+      if (n.battRtstate) {
+        battRt.value = n.battRtstate;
+      }
+		});
+	},
+	{ immediate: true, deep: true }
+);
+
+const show_num = reactive({
+	acin: 5,
+	dcout: 5,
+	dev: 5,
+});
+
+// 鐢ㄦ潵缁樺浘鐨勬暟鎹�
+const chartData = reactive({
+	acin: [],
+	dcout: [],
+	dev: [],
+});
+
+const modelCfg = ref([]);
+const startIdx = ref(0);
+
+// 鍗婂皬鏃剁殑鏁版嵁鏉℃暟 1绉掍竴绗旇
+// 鏀逛负100绗� 鍙厤缃� 涓変釜灞炴�у彲浠ヨ缃笉鍚�
+const counter = 30 * 60;
+
+let xLabels1 = ref([]);
+let xLabels2 = ref([]);
+
+// 鏍规嵁绮掑害 鍜屾煡璇㈢粨鏋� 琛ュ叏鏁版嵁
+function completeData(type) {
+	// 鏍规嵁绮掑害 璁$畻鍑洪渶瑕佺殑鏉℃暟
+	let num = Math.ceil(counter / show_num[type]);
+	let _num = num - chartData[type].length;
+	let obj = null;
+	let res = [...chartData[type]];
+	switch (type) {
+		case 'acin':
+			obj = {
+				acin1Vola: 0,
+				acin1Volb: 0,
+				acin1Volc: 0,
+				acin2Vola: 0,
+				acin2Volb: 0,
+				acin2Volc: 0,
+				acin1Curra: 0,
+				acin1Currb: 0,
+				acin1Currc: 0,
+				acin2Curra: 0,
+				acin2Currb: 0,
+				acin2Currc: 0,
+			};
+			break;
+		case 'dcout':
+			obj = {
+				m1Outcurr: 0.0,
+				m2Outcurr: 0.0,
+				m3Outcurr: 0.0,
+				m4Outcurr: 0.0,
+				m5Outcurr: 0.0,
+				m6Outcurr: 0.0,
+				m7Outcurr: 0.0,
+				m8Outcurr: 0.0,
+				m9Outcurr: 0.0,
+				m10Outcurr: 0.0,
+				m11Outcurr: 0.0,
+				m12Outcurr: 0.0,
+				m13Outcurr: 0.0,
+				m14Outcurr: 0.0,
+				m15Outcurr: 0.0,
+				m16Outcurr: 0.0,
+				m1OutVol: 0.0,
+				m2OutVol: 0.0,
+				m3OutVol: 0.0,
+				m4OutVol: 0.0,
+				m5OutVol: 0.0,
+				m6OutVol: 0.0,
+				m7OutVol: 0.0,
+				m8OutVol: 0.0,
+				m9OutVol: 0.0,
+				m10OutVol: 0.0,
+				m11OutVol: 0.0,
+				m12OutVol: 0.0,
+				m13OutVol: 0.0,
+				m14OutVol: 0.0,
+				m15OutVol: 0.0,
+				m16OutVol: 0.0,
+				moutputvol: 0.0,
+			};
+			break;
+		case 'dev':
+			obj = {
+				groupVol: 0.0,
+				onlineVol: 0.0,
+				groupCurr: 0.0,
+				groupTmp: 0.0,
+				loadCurr: 0.0,
+			};
+			break;
+	}
+	let _xLabels1 = chartData['dcout'].map(item => item.recordDatetime);
+	let _xLabels2 = chartData['dev'].map(item => item.recordDatetime);
+	// 鏁版嵁鏈�灏忔椂闂�
+	let minTime = chartData[type].length ? chartData[type][0].recordDatetime : moment().format('YYYY-MM-DD HH:mm:ss');
+	if (_num > 0) {
+		for (let i = _num; i--;) {
+			minTime = moment(minTime).subtract(show_num[type], 'seconds').format('YYYY-MM-DD HH:mm:ss');
+			res.unshift({
+				recordDatetime: minTime,
+				...obj,
+			});
+			_xLabels1.unshift(minTime);
+			_xLabels2.unshift(minTime);
+		}
+	}
+	switch (type) {
+		case 'acin':
+			break;
+		case 'dcout':
+			xLabels1.value = yLabels.value.length ? _xLabels1 : [];
+			break;
+		case 'dev':
+			xLabels2.value = _xLabels2;
+			break;
+	}
+	chartData[type] = res;
+}
+
+
+function tabIdx0Change() {
+	updateChart0();
+}
+
+function tabIdx1Change() {
+	updateChart1();
+}
+
+async function getAcinData() {
+	let { code, data, data2 } = await getPwrHisAcinData100(props.powerId);
+	let list = [];
+	if (code && data) {
+		list = data2;
+	}
+	return list;
+}
+
+async function getDevData() {
+	let { code, data, data2 } = await getBattDevData100(props.battgroupId, props.powerId);
+	let list = [];
+	if (code && data) {
+		list = data2;
+	}
+	return list;
+}
+
+async function getDcoutData() {
+	let { code, data, data2, data3 } = await getPwrHisDcoutData100(props.powerId);
+	let list = [];
+	let cfg = [];
+	if (code && data) {
+		list = data2;
+		cfg = getBinaryDigits(data3).map((v, i) => ({ value: v, label: i + 1 })).filter(vv => vv.value).map(v => v.label);
+	}
+	console.log('cfg', cfg, '=============', data3);
+
+	modelCfg.value = cfg;
+	if (cfg.length < 4) {
+		startIdx.value = 0;
+	}
+	// setLabel1();
+	return list;
+}
+
+const yLabels = computed(() => {
+	let res = modelCfg.value.map((idx) => `${idx}#鏁存祦鍣╜);
+	if (modelCfg.value.length > 4) {
+		res = res.slice(startIdx.value, startIdx.value + 4);
+	}
+	return res;
+});
+
+// function setLabel1() {
+//   // console.log('??', modelCfg.value, '=============');
+//   if (modelCfg.value.length <= 4) {
+//     yLabels.value = modelCfg.value.map((idx) => `${idx}#鏁存祦鍣╜);
+//   } else {
+//     yLabels.value = modelCfg.value.slice(startIdx.value, startIdx.value + 4).map((idx) => `${idx}#鏁存祦鍣╜);
+//   }
+// }
+
+const chartData1 = ref([]);
+
+function formatData1() {
+	let res = [];
+	for (let i = 0, len = chartData['dcout'].length; i < len; i++) {
+		yLabels.value.forEach((item, idx) => {
+			res[idx] = res[idx] || [];
+			let type = ['curr', 'Vol'][tabIdx1.value];
+			let _prop = `m${idx + 1}Out${type}`;
+
+			res[idx].push(chartData['dcout'][i][_prop]);
+		});
+	}
+	// console.log('res format', res, yLabels.value, '=============');
+
+	chartData1.value = res;
+}
+
+
+function stopHrTest() {
+  $confirm("鍋滄鏍稿娴嬭瘯", async () => {
+    let loading = $loading();
+    let res = await stopDis(props.powerId, props.battgroupId);
+    loading.close();
+    let { code, data } = res;
+    if (code && data) {
+      $message.success('鎿嶄綔鎴愬姛');
+    } else {
+      $message.error('鎿嶄綔澶辫触');
+    }
+  });
+}
+
+function remoteRestart() {
+  $confirm("杩滅▼閲嶅惎", async () => {
+    let loading = $loading();
+    let res = await restart(props.powerId, props.battgroupId);
+    loading.close();
+    let { code, data } = res;
+    if (code && data) {
+      $message.success('鎿嶄綔鎴愬姛');
+    } else {
+      $message.error('鎿嶄綔澶辫触');
+    }
+  });
+}
+
+const devAlmVisible = ref(false);
+function showDevAlarmParam() {
+  devAlmVisible.value = true;
+}
+
+
+async function numChange(type) {
+	switch (type) {
+		case 'acin':
+			chartData.acin = await getAcinData();
+			completeData('acin');
+			updateChart0();
+			break;
+		case 'dcout':
+			chartData.dcout = await getDcoutData();
+			// setLabel1();
+			completeData('dcout');
+			formatData1();
+			updateChart1();
+			break;
+		case 'dev':
+			chartData.dev = await getDevData();
+			completeData('dev');
+			updateChart2();
+			break;
+	}
+
+}
+
+const battInfo = ref({});
+// 鏇存柊瀹炴椂鏁版嵁
+function updateRt() {
+	let pwrData = props.data.pwrdevAcdcdata;
+	if (!pwrData) {
+		return false;
+	}
+	// 淇敼涓変釜鍥捐〃鐨勬暟鎹�
+	// chart0  chartData['acin']
+	// 鏍规嵁绮掑害 璁$畻鍑洪渶瑕佺殑鏉℃暟
+	// let num = Math.ceil(counter / show_num['acin']);
+	chartData['acin'].shift();
+	chartData['acin'].push(pwrData);
+	updateChart0();
+
+	// chart1  chartData['dcout']
+	// 鏍规嵁绮掑害 璁$畻鍑洪渶瑕佺殑鏉℃暟
+	if (!chartData1.value.length) {
+		modelCfg.value = getBinaryDigits(props.data.powerInf.modelCfg).map((v, i) => ({ value: v, label: i + 1 })).filter(vv => vv.value).map(v => v.label);
+		pwrData.recordDatetime
+		let minTime = pwrData.recordDatetime;
+		let num = Math.ceil(counter / show_num['dcout']);
+		let _label = [];
+		let list = [];
+		for (let i = num; i--;) {
+			minTime = moment(minTime).subtract(show_num['dcout'], 'seconds').format('YYYY-MM-DD HH:mm:ss');
+			list.unshift({
+				recordDatetime: minTime,
+				m1Outcurr: 0.0,
+				m2Outcurr: 0.0,
+				m3Outcurr: 0.0,
+				m4Outcurr: 0.0,
+				m5Outcurr: 0.0,
+				m6Outcurr: 0.0,
+				m7Outcurr: 0.0,
+				m8Outcurr: 0.0,
+				m9Outcurr: 0.0,
+				m10Outcurr: 0.0,
+				m11Outcurr: 0.0,
+				m12Outcurr: 0.0,
+				m13Outcurr: 0.0,
+				m14Outcurr: 0.0,
+				m15Outcurr: 0.0,
+				m16Outcurr: 0.0,
+				m1OutVol: 0.0,
+				m2OutVol: 0.0,
+				m3OutVol: 0.0,
+				m4OutVol: 0.0,
+				m5OutVol: 0.0,
+				m6OutVol: 0.0,
+				m7OutVol: 0.0,
+				m8OutVol: 0.0,
+				m9OutVol: 0.0,
+				m10OutVol: 0.0,
+				m11OutVol: 0.0,
+				m12OutVol: 0.0,
+				m13OutVol: 0.0,
+				m14OutVol: 0.0,
+				m15OutVol: 0.0,
+				m16OutVol: 0.0,
+				moutputvol: 0.0,
+			});
+			_label.unshift(minTime);
+		}
+		xLabels1.value = _label;
+		chartData['dcout'] = list;
+	}
+
+	xLabels1.value.shift();
+	xLabels1.value.push(pwrData.recordDatetime);
+	chartData['dcout'].shift();
+	chartData['dcout'].push(pwrData);
+	nextTick(() => {
+
+		formatData1();
+		updateChart1();
+	});
+
+
+	// chart2  chartData['dev']
+	// 鏍规嵁绮掑害 璁$畻鍑洪渶瑕佺殑鏉℃暟
+	// let num = Math.ceil(counter / show_num['dev']);
+	// TODO battRtstate 缂哄皯loadCurr
+	let devObj = props.data.battRtstate;
+	xLabels2.value.shift();
+	xLabels2.value.push(devObj.recDatetime);
+	chartData['dev'].shift();
+	chartData['dev'].push(devObj);
+	updateChart2();
+
+	// 钃勭數姹犱俊鎭�
+	battInfo.value = props.data.sticRtdata;
+}
+
+const configVisible = ref(false);
+const formRef = ref();
+const form1 = reactive({
+  time: 5,
+  count: 100,
+});
+
+function validatorTime(rule, value, callback) {
+  if(/^\d+$/.test(value)) {
+    if(value<1 || value>30) {
+      callback(new Error('鑼冨洿1~30'));
+    } else {
+      callback();
+    }
+  }else {
+    callback(new Error('璇疯緭鍏ユ暣鏁�'));
+  }
+}
+
+function validatorCount(rule, value, callback) {
+  if(/^\d+$/.test(value)) {
+    if (value<50 || value>200) {
+      callback(new Error('鑼冨洿50~200'));
+    } else {
+      callback();
+    }
+  }else {
+    callback(new Error('璇疯緭鍏ユ暣鏁�'));
+  }
+}
+
+const rules = {
+  time: [{ required: true, message: '璇疯緭鍏ユ椂闂�', trigger: ['blur', 'change'] },
+    { validator: validatorTime, trigger: ['blur', 'change'] },
+  ],
+  count: [{ required: true, message: '璇疯緭鍏ユ潯鏁�', trigger: ['blur', 'change'] }, 
+    { validator: validatorCount, trigger: ['blur', 'change'] },
+  ],
+};
+
+// 鍙栧墠鍗婂皬鏃舵暟鎹� 鏇存柊鍥捐〃
+
+// 鏇存柊鍥捐〃 1 2 3
+function updateChart0() {
+	if (chart0.value) {
+		chart0.value.updateChart(labels_0[tabIdx0.value], chartData['acin']);
+	}
+}
+
+function updateChart1() {
+	if (chart1.value) {
+		chart1.value.updateChart(xLabels1.value, chartData1.value);
+	}
+}
+
+function updateChart2() {
+	if (chart2.value) {
+		chart2.value.updateChart(xLabels2.value, chartData['dev']);
+	}
+}
+
+function scrollHandler(data) {
+	console.log('data', data, '=============');
+
+	startIdx.value += data * 1;
+	nextTick(() => {
+		// updateChart1();
+	})
+}
+
+const hrParamTitle = ref('鏍稿娴嬭瘯');
+const hrParamVisible = ref(false);
+function startHrTest() {
+	hrParamVisible.value = true;
+}
+
+const config = ref({});
+
+async function getHeartParam() {
+  let res = await getPwrHeartParam(props.powerId);
+  let { code, data, data2 } = res.data;
+  let cfg = {};
+  if (code && data) {
+    cfg = data2;
+  }
+  config.value = cfg;
+}
+
+const configTitle = ref('');
+function setConfig(type) {
+  switch(type) {
+    case 0:
+      configTitle.value = '璁剧疆浜ゆ祦杈撳叆閲囬泦鍙傛暟';
+      form1.time = config.value.acinInterverCfg || 5;
+      form1.count = config.value.acinCountCfg || 100;
+      break;
+    case 1:
+      configTitle.value = '璁剧疆鐩存祦杈撳嚭閲囬泦鍙傛暟';
+      form1.time = config.value.acoutInterverCfg || 5;
+      form1.count = config.value.acoutCountCfg || 100;
+      break;
+    case 2:
+      configTitle.value = '璁剧疆鏍稿璁惧閲囬泦鍙傛暟';
+      form1.time = config.value.hrInterverCfg || 5;
+      form1.count = config.value.hrCountCfg || 100;
+      break;
+  }
+  configVisible.value = true;
+}
+
+function updateConfig() {
+  configVisible.value = false;
+}
+
+onMounted(async () => {
+
+});
 </script>
 
 <template>
@@ -64,19 +686,23 @@
           </div>
         </div>
         <div class="p-main">
-          <svg-diagram class="svg-diagram"></svg-diagram>
+          <svg-diagram :data="devRt" :battRt="battRt" class="svg-diagram"></svg-diagram>
         </div>
         <div class="p-right">
           <div class="control-contain">
-            <div class="control-title"><svg-icon icon-class="controls"></svg-icon><span>鎺у埗绠$悊</span></div>
-            <div class="control-btn">鏍稿娴嬭瘯</div>
-            <div class="control-btn">鍋滄鏍稿娴嬭瘯</div>
+            <div class="control-title">
+              <svg-icon icon-class="controls"></svg-icon><span>鎺у埗绠$悊</span>
+            </div>
+            <div class="control-btn" @click="startHrTest">鏍稿娴嬭瘯</div>
+            <div class="control-btn" @click="stopHrTest">鍋滄鏍稿娴嬭瘯</div>
           </div>
           <div class="control-contain">
-            <div class="control-title"><svg-icon icon-class="dev"></svg-icon><span>璁惧绠$悊</span></div>
-            <div class="control-btn">杩滅▼閲嶅惎</div>
+            <div class="control-title">
+              <svg-icon icon-class="dev"></svg-icon><span>璁惧绠$悊</span>
+            </div>
+            <div class="control-btn" @click="remoteRestart">杩滅▼閲嶅惎</div>
             <div class="control-btn">绯荤粺鍙傛暟璁剧疆</div>
-            <div class="control-btn">鍛婅鍙傛暟璁剧疆</div>
+            <div class="control-btn" @click="showDevAlarmParam">鍛婅鍙傛暟璁剧疆</div>
           </div>
           <div class="control-contain no-wrap">
             <div class="control-btn">鏀剧數鐢宠</div>
@@ -92,68 +718,141 @@
               <el-radio-button label="鐢垫祦" :value="0" />
               <el-radio-button label="鐢靛帇" :value="1" />
             </el-radio-group>
-            <svg-icon class-name="btn-setting" icon-class="setting"></svg-icon>
+            <svg-icon class-name="btn-setting" icon-class="setting" @click="setConfig(0)"></svg-icon>
           </template>
-          <line-chart></line-chart>
+          <line-chart ref="chart0"></line-chart>
         </card>
       </div>
       <div class="card-item">
-        <card title="鐩存祦杈撳叆">
+        <card title="鐩存祦杈撳嚭">
           <template #tools>
             <el-radio-group class="tab-idx" v-model="tabIdx1" size="small">
               <el-radio-button label="鐢垫祦" :value="0" />
               <el-radio-button label="鐢靛帇" :value="1" />
             </el-radio-group>
-            <svg-icon class-name="btn-setting" icon-class="setting"></svg-icon>
+            <svg-icon class-name="btn-setting" icon-class="setting" @click="setConfig(1)"></svg-icon>
           </template>
+          <line-chart3
+            ref="chart1"
+            :type="['鐢垫祦', '鐢靛帇'][tabIdx1]"
+            :yLabels="yLabels"
+            :start-idx="startIdx"
+            :mode-count="modelCfg.length"
+            @scroll="scrollHandler"
+          ></line-chart3>
         </card>
       </div>
       <div class="card-item">
         <card title="鏍稿璁惧淇℃伅">
           <template #tools>
-            <svg-icon class-name="btn-setting" icon-class="setting"></svg-icon>
+            <svg-icon class-name="btn-setting" icon-class="setting" @click="setConfig(2)"></svg-icon>
           </template>
+          <line-chart2 ref="chart2"></line-chart2>
         </card>
       </div>
       <div class="card-item">
         <card title="钃勭數姹犱俊鎭�">
           <div class="batt grid">
-            <info
-              label="鏈�澶у閲�"
-              value="#3 8Ah"
-            ></info>
-            <info
-              label="鏈�灏忓閲�"
-              value="100"
-            ></info>
-            <info
-              label="鏈�楂樺唴闃�"
-              value="100"
-            ></info>
-            <info
-              label="鏈�浣庡唴闃�"
-              value="100"
-            ></info>
-            <info
-              label="鏈�楂樼數鍘�"
-              value="100"
-            ></info>
-            <info
-              label="鏈�浣庣數鍘�"
-              value="100"
-            ></info>
-            <info
-              label="鏈�楂樻俯搴�"
-              value="100"
-            ></info>
-            <info
-              label="鏈�浣庢俯搴�"
-              value="100"
-            ></info>
+            <info label="鏈�澶у閲�">
+              <template
+                #value
+                v-if="battInfo.maxCapNumList && battInfo.maxCapNumList.length"
+              >
+                <span class="mon-num">#{{ battInfo.maxCapNumList[0] }}</span>
+                <span class="val">{{ battInfo.maxCap }}Ah</span>
+              </template>
+            </info>
+            <info label="鏈�灏忓閲�">
+              <template
+                #value
+                v-if="battInfo.minCapNumList && battInfo.minCapNumList.length"
+              >
+                <span class="mon-num">#{{ battInfo.minCapNumList[0] }}</span>
+                <span class="val">{{ battInfo.minCap }}Ah</span>
+              </template>
+            </info>
+            <info label="鏈�楂樺唴闃�">
+              <template
+                #value
+                v-if="battInfo.maxResNumList && battInfo.maxResNumList.length"
+              >
+                <span class="mon-num">#{{ battInfo.maxResNumList[0] }}</span>
+                <span class="val">{{ battInfo.maxRes }}m惟</span>
+              </template>
+            </info>
+            <info label="鏈�浣庡唴闃�">
+              <template
+                #value
+                v-if="battInfo.minResNumList && battInfo.minResNumList.length"
+              >
+                <span class="mon-num">#{{ battInfo.minResNumList[0] }}</span>
+                <span class="val">{{ battInfo.minRes }}m惟</span>
+              </template>
+            </info>
+            <info label="鏈�楂樼數鍘�">
+              <template
+                #value
+                v-if="battInfo.maxVolNumList && battInfo.maxVolNumList.length"
+              >
+                <span class="mon-num">#{{ battInfo.maxVolNumList[0] }}</span>
+                <span class="val">{{ battInfo.maxVol }}V</span>
+              </template>
+            </info>
+            <info label="鏈�浣庣數鍘�">
+              <template
+                #value
+                v-if="battInfo.minVolNumList && battInfo.minVolNumList.length"
+              >
+                <span class="mon-num">#{{ battInfo.minVolNumList[0] }}</span>
+                <span class="val">{{ battInfo.minVol }}V</span>
+              </template>
+            </info>
+            <info label="鏈�楂樻俯搴�">
+              <template
+                #value
+                v-if="battInfo.maxTmpNumList && battInfo.maxTmpNumList.length"
+              >
+                <span class="mon-num">#{{ battInfo.maxTmpNumList[0] }}</span>
+                <span class="val">{{ battInfo.maxTmp }}鈩�</span>
+              </template>
+            </info>
+            <info label="鏈�浣庢俯搴�">
+              <template
+                #value
+                v-if="battInfo.minTmpNumList && battInfo.minTmpNumList.length"
+              >
+                <span class="mon-num">#{{ battInfo.minTmpNumList[0] }}</span>
+                <span class="val">{{ battInfo.minTmp }}鈩�</span>
+              </template>
+            </info>
           </div>
         </card>
       </div>
     </div>
+    <!-- 璁剧疆闂撮殧鍙傛暟 -->
+    <el-dialog v-model="configVisible" draggable :title="configTitle" width="560">
+      <el-form ref="formRef" :model="form1" :rules="rules" label-width="10em">
+        <el-form-item label="闂撮殧鏃堕棿(鍒�)" prop="time">
+          <el-input v-model="form1.time"></el-input>
+        </el-form-item>
+        <el-form-item label="鏁版嵁绗旀暟" prop="count">
+          <el-input v-model="form1.count"></el-input>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button @click="configVisible = false">鍏抽棴</el-button>
+        <!-- <el-button type="primary" @click="getConfig">璇诲彇</el-button> -->
+        <el-button type="primary" @click="updateConfig">璁惧畾</el-button>
+      </template>
+    </el-dialog>
+    <!-- 璁剧疆鏍稿鍙傛暟 -->
+    <el-dialog v-model="hrParamVisible" draggable :title="hrParamTitle" width="960">
+      <hr-params :devId="devId" v-model:visible="hrParamVisible" :battgroupId="battgroupId"></hr-params>
+    </el-dialog>
+    <!-- 璁剧疆璁惧鍛婅鍙傛暟 -->
+    <el-dialog v-model="devAlmVisible" draggable title="璁惧鍛婅鍙傛暟" width="960">
+      <dev-alarm-params :devId="devId" v-model:visible="devAlmVisible"></dev-alarm-params>
+    </el-dialog>
   </div>
 </template>
 
@@ -164,24 +863,30 @@
   padding-right: 8px;
   display: flex;
   flex-direction: column;
+
   .row {
     flex: 1.52;
+
     .row-content {
       display: flex;
       flex-direction: row;
       height: 100%;
     }
+
     .p-left {
       width: 240px;
       display: flex;
       flex-direction: column;
+
       .p-item {
         margin: 8px;
         display: flex;
         flex-direction: column;
+
         .panel-title {
           font-size: 24px;
         }
+
         .panel {
           border: 1px solid #5FA9CF;
           background: #073451;
@@ -192,18 +897,22 @@
           font-size: 12px;
           display: flex;
           flex-direction: column;
+
           .panel-row {
             display: flex;
             flex-direction: row;
             margin-bottom: 4px;
+
             .label {
               flex: 0 0 6em;
               margin-right: 0.6em;
               text-align: right;
+
               &::after {
                 content: ":";
               }
             }
+
             .value {
               flex: 1;
             }
@@ -211,9 +920,11 @@
         }
       }
     }
+
     .p-main {
       flex: 1;
     }
+
     .p-right {
       width: 160px;
       margin-left: 20px;
@@ -221,6 +932,7 @@
       padding-top: 20px;
       display: flex;
       flex-direction: column;
+
       .control-contain {
         display: flex;
         flex-direction: column;
@@ -231,6 +943,7 @@
         padding-bottom: 4px;
         overflow: hidden;
         font-size: 12px;
+
         .control-title {
           background: #0B415D;
           font-size: 20px;
@@ -238,10 +951,12 @@
           text-align: center;
           font-weight: 700;
           margin-bottom: 4px;
+
           span {
             margin-left: 0.6em;
           }
         }
+
         .control-btn {
           margin: 2px 4px;
           cursor: pointer;
@@ -250,14 +965,17 @@
           padding: 6px 0;
           text-align: center;
           border-radius: 4px;
+
           &:hover {
             color: #FDFE01;
             border: 1px solid #DF7B26;
             box-shadow: inset 0 0 10px 4px #DF7B26;
           }
         }
+
         &.no-wrap {
           background: transparent;
+
           .control-btn {
             flex: 1;
             border: 1px solid #0BF9FE;
@@ -265,6 +983,7 @@
             font-weight: bold;
             font-size: 14px;
             box-shadow: inset 0 0 10px 4px #0BF9FE;
+
             &:hover {
               color: #FDFE01;
               border: 1px solid #DF7B26;
@@ -274,26 +993,28 @@
         }
       }
     }
+
     &.row2 {
       flex: 1;
       margin-top: 4px;
       display: flex;
       flex-direction: row;
+
       .card-item {
         flex: 1;
         margin: 4px;
       }
     }
   }
-  .svg-diagram {
-    
-  }
+
+  .svg-diagram {}
 
   .btn-setting {
     display: inline-block;
     cursor: pointer;
     margin-left: 0.4em;
     transition: all 1.3s ease;
+
     &:hover {
       transform: rotate(360deg);
       color: #FDFE01;
@@ -317,26 +1038,53 @@
       border-radius: 0;
       box-shadow: none !important;
     }
+
     // .el-radio-button--small .el-radio-button__inner {
     //     border-radius: 0;
     //     font-size: 12px;
     //     padding: 5px 11px;
     // }
     :deep(.el-radio-button__inner) {
-        background: #183A55;
-        border: 1px solid #4D81BA;
-        border-left: 0;
-        border-radius: 0;
-        color: #fff;
-        font-weight: 500;
-        padding: 4px 10px;
+      background: #183A55;
+      border: 1px solid #4D81BA;
+      border-left: 0;
+      border-radius: 0;
+      color: #fff;
+      font-weight: 500;
+      padding: 4px 10px;
     }
+
     :deep(.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner) {
-        background: linear-gradient(69deg, #6EABE4, #6EABE4 25%,  #0A3E77 75%, #0A3E77);
-        // border: 0 none;
-        box-shadow: none;
-        color: #fff;
+      background: linear-gradient(69deg, #6EABE4, #6EABE4 25%, #0A3E77 75%, #0A3E77);
+      // border: 0 none;
+      box-shadow: none;
+      color: #fff;
     }
   }
+
+  .page-filter {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    margin-right: 6px;
+    margin-top: 0;
+    margin-bottom: 0;
+    padding: 0;
+    background: transparent;
+    border: 0 none;
+
+    .label {
+      font-size: 12px;
+      margin-right: 6px;
+
+      &::after {
+        content: ":";
+      }
+    }
+  }
+
+  .mon-num {
+    margin-right: 1em;
+  }
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.1