From 4c558f4254bf66fc23f471f9e0a34972cd2cc1ab Mon Sep 17 00:00:00 2001
From: he wei <858544502@qq.com>
Date: 星期六, 21 六月 2025 19:02:29 +0800
Subject: [PATCH] U

---
 src/views/alarm/earlyWarningAnalysis.vue |  551 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 315 insertions(+), 236 deletions(-)

diff --git a/src/views/alarm/earlyWarningAnalysis.vue b/src/views/alarm/earlyWarningAnalysis.vue
index 0f27387..e9e0798 100644
--- a/src/views/alarm/earlyWarningAnalysis.vue
+++ b/src/views/alarm/earlyWarningAnalysis.vue
@@ -13,7 +13,7 @@
 
 import useStation from "@/hooks/useStationList.js";
 const { provice, city, country, stationName, stationId, powerId,
-	proviceList, cityList, countryList, stationList, powerList, isManual,
+  proviceList, cityList, countryList, stationList, powerList, isManual,
   getPowerList,
   whenLoaded,
 } = useStation();
@@ -29,10 +29,11 @@
 
 
 import {
-	confirmBattAlm,
-	getBattAlmHis,
-	getPwrAlmParam,
-  getPwrAllAlmParam,
+  getPwrtAlmAnalyse,
+  getDevAlmAnalyse,
+  getBattAlmAnalyse,
+  getHisRealInAlm,
+  getAlmSummaryParam,
 } from "@/api/alarm.js";
 
 import {
@@ -44,92 +45,42 @@
 const flag = ref(Math.random());
 
 
-const headers = [
-	{
-		prop: "fullName",
-		label: "鏈烘埧鍚嶇О",
-		width: "220",
-	},
-	{
-		prop: "powerName",
-		label: "鐢垫簮鍚嶇О",
-		width: "80",
-	},
-	{
-		prop: "alarmName",
-		label: "鍛婅鍚嶇О",
-		width: "160",
-	},
-	{
-		prop: "alarmLimithUpper",
-		label: "涓婁笂闄愰槇鍊�",
-		width: "120",
-	},
-	{
-		prop: "alarmLimithUpperLevelStr",
-		label: "涓婁笂闄愮瓑绾�",
-		width: "120",
-	},
-	{
-		prop: "alarmLimithUpperEnStr",
-		label: "涓婁笂闄愪娇鑳�",
-		width: "120",
-	},
-	{
-		prop: "alarmLimith",
-		label: "涓婇檺闃堝��",
-		width: "120",
-	},
-	{
-		prop: "alarmLimithLevelStr",
-		label: "涓婇檺绛夌骇",
-		width: "120",
-	},
-	{
-		prop: "alarmLimithEnStr",
-		label: "涓婇檺浣胯兘",
-		width: "120",
-	},
-	{
-		prop: "alarmLimitl",
-		label: "涓嬮檺闃堝��",
-		width: "120",
-	},
-	{
-		prop: "alarmLimitlLevelStr",
-		label: "涓嬮檺绛夌骇",
-		width: "120",
-	},
-	{
-		prop: "alarmLimitlEnStr",
-		label: "涓嬮檺浣胯兘",
-		width: "120",
-	},
-	{
-		prop: "alarmLimitlLower",
-		label: "涓嬩笅闄愰槇鍊�",
-		width: "120",
-	},
-	{
-		prop: "alarmLimitlLowerLevelStr",
-		label: "涓嬩笅闄愮瓑绾�",
-		width: "120",
-	},
-	{
-		prop: "alarmLimitlLowerEnStr",
-		label: "涓嬩笅闄愪娇鑳�",
-		width: "120",
-	},
+const headers0 = [
+  {
+    prop: "fullName",
+    label: "鏈烘埧鍚嶇О",
+    width: "220",
+  },
+  {
+    prop: "powerName",
+    label: "鐢垫簮鍚嶇О",
+    width: "80",
+  },
+  {
+    prop: "almName",
+    label: "鍛婅鍚嶇О",
+    width: "160",
+  },
+  {
+    prop: "almLevelStr",
+    label: "鍛婅绛夌骇",
+    width: "120",
+  },
+  {
+    prop: "almStartTime",
+    label: "鍛婅寮�濮嬫椂闂�",
+    width: "120",
+  },
 ];
 
-// const pageCurr = ref(1);
-// const pageSize = ref(10);
-// const total = ref(0);
+const pageNum0 = ref(1);
+const pageSize0 = ref(10);
+const total0 = ref(0);
 const addEditVisible = ref(false);
 const dialogTitle = ref("");
-const datas = reactive({
-	tableData: [],
-	rowData: {},
+const datas0 = reactive({
+  tableData: [],
+  rowData: {},
 });
 
 const currentRow = ref({});
@@ -138,62 +89,62 @@
 
 const alarmId = ref('');
 
-function getList() {
-	let params = {
-		almIdList: alarmId.value ? [alarmId.value] : undefined,
-		provice: provice.value || undefined,
-		city: city.value || undefined,
-		country: country.value || undefined,
-		stationId: stationId.value || undefined,
-		powerId: powerId.value || undefined,
-	};
-
-  if (!powerId.value) {
-    $message.error('璇烽�夋嫨鐢垫簮');
-    return false;
-  }
+// 鐢垫簮鍛婅鍒楄〃
+function getList0() {
+  let params = {
+    almIdList: alarmId.value ? [alarmId.value] : undefined,
+    provice: provice.value || undefined,
+    city: city.value || undefined,
+    country: country.value || undefined,
+    stationId: stationId.value || undefined,
+    powerId: powerId.value || undefined,
+    almLevel: alarmLevel.value,
+    pageNum: pageNum0.value,
+    pageSize: pageSize0.value,
+  };
 
   let loading = $loading();
-	getPwrAlmParam(params).then((res) => {
-		let { code, data, data2, data3 } = res;
-		let list = [];
-		// let _total = 0;
+  getPwrtAlmAnalyse(params).then((res) => {
+    let { code, data, data2 } = res;
+    let list = [];
+    // let _total0 = 0;
     loading.close();
-		if (code && data) {
-			// console.log(data);
-      let bInf = data3;
-			list = data2.map(v => ({
+    if (code && data) {
+      // console.log(data);
+      list = data2.list.map(v => ({
         ...v,
-        fullName: bInf.fullName,
-        powerName: bInf.powerName,
-				alarmLimithUpperLevelStr: ['', '涓�绾у憡璀�', '浜岀骇鍛婅', '涓夌骇鍛婅', '鍥涚骇鍛婅'][v.alarmLimithUpperLevel],
-				alarmLimithUpperEnStr: ['涓嶅惎鐢�', '鍚敤'][v.alarmLimithUpperEn],
-				alarmLimithLevelStr: ['', '涓�绾у憡璀�', '浜岀骇鍛婅', '涓夌骇鍛婅', '鍥涚骇鍛婅'][v.alarmLimithLevel],
-				alarmLimithEnStr: ['涓嶅惎鐢�', '鍚敤'][v.alarmLimithEn],
-				alarmLimitlLevelStr: ['', '涓�绾у憡璀�', '浜岀骇鍛婅', '涓夌骇鍛婅', '鍥涚骇鍛婅'][v.alarmLimitlLevel],
-				alarmLimitlEnStr: ['涓嶅惎鐢�', '鍚敤'][v.alarmLimitlEn],
-				alarmLimitlLowerLevelStr: ['', '涓�绾у憡璀�', '浜岀骇鍛婅', '涓夌骇鍛婅', '鍥涚骇鍛婅'][v.alarmLimitlLowerLevel],
-				alarmLimitlLowerEnStr: ['涓嶅惎鐢�', '鍚敤'][v.alarmLimitlLowerEn],
-			}));
-			// _total = data2.total;
-		}
-		datas.tableData = list;
-		// total.value = _total;
-	})
-		.catch((err) => {
-			console.log(err);
-		});
+        almLevelStr: ['', '涓�绾у憡璀�', '浜岀骇鍛婅', '涓夌骇鍛婅', '鍥涚骇鍛婅'][v.almLevel],
+        
+      }));
+      // _total0 = data2.total0;
+    }
+    datas0.tableData = list;
+    // total0.value = _total0;
+  })
+    .catch((err) => {
+      console.log(err);
+    });
 }
 
-
+const allProps = ref([]);
+// 鏌ヨ灞炴�у搴斿叧绯�
+async function getAllProps() {
+  let res = await getAlmSummaryParam();
+  let { code, data, data2 } = res;
+  let list = [];
+  if (code && data) {
+      list = data2;
+    }
+    allProps.value = list;
+}
 
 // 鏌ヨ鍛婅绫诲瀷
 async function getAlarmType() {
-	let res = await getPowerAlmIdType();
-	let { code, data, data2 } = res;
-	let list = [];
-	if (code && data) {
-		Object.keys(data2).map((key) => {
+  let res = await getPowerAlmIdType();
+  let { code, data, data2 } = res;
+  let list = [];
+  if (code && data) {
+    Object.keys(data2).map((key) => {
       Object.keys(data2[key]).map((key2) => {
         list.push({
           value: key2,
@@ -201,116 +152,125 @@
         });
       })
     });
-	}
-	alarmTypeList.value = list;
+  }
+  alarmTypeList.value = list;
 }
 
 
-// 灞曠ず鏁版嵁鏁伴噺
-// function handleSizeChange(val) {
-// 	pageSize.value = val;
-// 	getList();
-// }
-// 缈婚〉
-// function handleCurrentChange(val) {
-// 	pageCurr.value = val;
-// 	getList();
-// }
 
 const alarmType = ref(0);
+const acTab = ref('power');
+const alarmLevel = ref(1);
 
-function edit(record) {
-  dialogTitle.value = `缂栬緫鍛婅鍙傛暟--${record.alarmName}`;
-  alarmType.value = record.alarmType;
-  addEditVisible.value = true;
-  currentRow.value = record;
-  // console.log('record', record, '=============');
-  
+async function view(record) {
+  let params = {
+    powerId: record.powerId,
+    almId: record.almId,
+    startTime: record.almStartTime,
+    battgroupId: record.battgroupIdList.length ? record.battgroupIdList[0] : 0,
+  }
+  let res = await getHisRealInAlm(params);
 }
 
-function onOk() {
-	addEditVisible.value = false;
-	// handleCurrentChange(1);
-}
-function onCanel() {
-	addEditVisible.value = false;
-}
 
 function exportExcel() {
-	let _headers = headers.map(v => {
-		let prop = v.prop;
-		let label = v.label;
-		if (prop == 'almIsConfirmed') {
-			prop = 'almIsConfirmedStr';
-		}
-		return {
-			prop,
-			label
-		};
-	});
-	ExportFile(_headers, datas.tableData, "鐢垫簮鍛婅鍙傛暟");
-}
-
-async function exportExcelAll() {
-  let res = await getPwrAllAlmParam();
-  let { code, data, data2 } = res;
-  let list = [];
-  if (code && data) {
-			list = data2.map(v => ({
-        ...v,
-				alarmLimithUpperLevelStr: ['', '涓�绾у憡璀�', '浜岀骇鍛婅', '涓夌骇鍛婅', '鍥涚骇鍛婅'][v.alarmLimithUpperLevel],
-				alarmLimithUpperEnStr: ['涓嶅惎鐢�', '鍚敤'][v.alarmLimithUpperEn],
-				alarmLimithLevelStr: ['', '涓�绾у憡璀�', '浜岀骇鍛婅', '涓夌骇鍛婅', '鍥涚骇鍛婅'][v.alarmLimithLevel],
-				alarmLimithEnStr: ['涓嶅惎鐢�', '鍚敤'][v.alarmLimithEn],
-				alarmLimitlLevelStr: ['', '涓�绾у憡璀�', '浜岀骇鍛婅', '涓夌骇鍛婅', '鍥涚骇鍛婅'][v.alarmLimitlLevel],
-				alarmLimitlEnStr: ['涓嶅惎鐢�', '鍚敤'][v.alarmLimitlEn],
-				alarmLimitlLowerLevelStr: ['', '涓�绾у憡璀�', '浜岀骇鍛婅', '涓夌骇鍛婅', '鍥涚骇鍛婅'][v.alarmLimitlLowerLevel],
-				alarmLimitlLowerEnStr: ['涓嶅惎鐢�', '鍚敤'][v.alarmLimitlLowerEn],
-			}));
-  }
-  let _headers = headers.map(v => {
+  let _headers = headers0.map(v => {
     let prop = v.prop;
     let label = v.label;
+    if (prop == 'almIsConfirmed') {
+      prop = 'almIsConfirmedStr';
+    }
     return {
       prop,
       label
     };
   });
-  ExportFile(_headers, list, "鐢垫簮鍛婅鍙傛暟-鍏ㄩ儴");
+  ExportFile(_headers, datas0.tableData, "鐢垫簮鍛婅");
 }
 
+// 灞曠ず鏁版嵁鏁伴噺
+function handleSizeChange0(val) {
+  pageSize0.value = val;
+  getList0();
+}
+// 缈婚〉
+function handleCurrentChange0(val) {
+  pageNum0.value = val;
+  getList0();
+}
+
+async function exportExcelAll() {
+  // let res = await getPwrAllAlmParam();
+  // let { code, data, data2 } = res;
+  // let list = [];
+  // if (code && data) {
+  // 		list = data2.map(v => ({
+  //       ...v,
+  // 			almLevelStr: ['', '涓�绾у憡璀�', '浜岀骇鍛婅', '涓夌骇鍛婅', '鍥涚骇鍛婅'][v.almLevel],
+  // 		}));
+  // }
+  // let _headers = headers0.map(v => {
+  //   let prop = v.prop;
+  //   let label = v.label;
+  //   return {
+  //     prop,
+  //     label
+  //   };
+  // });
+  // ExportFile(_headers, list, "鐢垫簮鍛婅-鍏ㄩ儴");
+}
+
+
+// 鑾峰彇灞炴�у搴旂殑涓枃鍚嶇О
+function getPropName(prop) {
+  let name = '';
+  let obj = allProps.value.filter(v => v.fieldName == prop);
+  if (obj.length) {
+    name = obj[0].fieldNameZh;
+  }
+  return name;
+}
+
+const name0 = ref('涓诲睘鎬ф洸绾�');
+const subProp = ref([]);
+
+subProp.value = [1];
+subProp.value = [1, 2];
+subProp.value = [1, 2, 3];
+subProp.value = [1, 2, 3, 4];
+
 onMounted(async () => {
-	await getAlarmType();
-	// getList();
-   console.log('stationList', stationList, '===========1==');
+  await getAlarmType();
+  getAllProps();
+  getList0();
 });
 
-onActivated(async () => {
-  let pageFlag = getQueryString("pageFlag");
-  // console.log('pageFlag', pageFlag, flag.value, '=============');
-  await nextTick();
-  await whenLoaded();
+// onActivated(async () => {
+//   let pageFlag = getQueryString("pageFlag");
+//   // console.log('pageFlag', pageFlag, flag.value, '=============');
+//   await nextTick();
+//   await whenLoaded();
   
-  if (pageFlag && pageFlag != flag.value) {
-    // let provice, city, country, stationName, battId;
+//   if (pageFlag && pageFlag != flag.value) {
+//     // let provice, city, country, stationName, battId;
     
-    if (getQueryString('stationId')) {
-      let statId = getQueryString('stationId');
-      let stat = stationList.value.find(v => v.stationId == statId);
-      if (stat) {
-        isManual.value = true;
-        stationName.value = stat.stationName;
-        await getPowerList();
-      }
-    }
-    if (getQueryString('powerId')) {
-      powerId.value = getQueryString('powerId') * 1;
-      // console.log('battId', battId.value, battList.value, '=============');
-    }
-    getList();
-    flag.value = pageFlag;
-  }
-});
+//     if (getQueryString('stationId')) {
+//       let statId = getQueryString('stationId');
+//       let stat = stationList.value.find(v => v.stationId == statId);
+//       if (stat) {
+//         isManual.value = true;
+//         stationName.value = stat.stationName;
+//         await getPowerList();
+//       }
+//     }
+//     if (getQueryString('powerId')) {
+//       powerId.value = getQueryString('powerId') * 1;
+//       // console.log('battId', battId.value, battList.value, '=============');
+//     }
+//     getList();
+//     flag.value = pageFlag;
+//   }
+// });
 </script>
 
 <template>
@@ -318,10 +278,11 @@
     <!-- <div class="page-header">
       </div> -->
     <div class="page-content">
-      <yc-card is-full>
-        <div class="page-content-wrapper">
+      <el-tabs tab-position="left" v-model="acTab" type="card" class="main-tabs">
+        <el-tab-pane name="power" class="tab-pane" label="鐢垫簮鍛婅">
+          <div class="page-content-wrapper">
           <div class="page-content-tools page-filter">
-            <div class="grid-container" :style="{'--counter': 8}">
+            <div class="grid-container" :style="{'--counter': 9}">
               <div class="grid-item">
                 <div class="label">鐪�</div>
                 <div class="value">
@@ -437,6 +398,18 @@
                   </el-select>
                 </div>
               </div>
+              <div class="grid-item">
+                <!-- <div class="label">涓�绾у憡璀�</div>
+                <div class="label">浜岀骇鍛婅</div>
+                <div class="label">涓夌骇鍛婅</div>
+                <div class="label">鍥涚骇鍛婅</div> -->
+                <el-radio-group v-model="alarmLevel" size="small" style="grid-column: span 6;">
+                  <el-radio-button :label="1">涓�绾у憡璀�</el-radio-button>
+                  <el-radio-button :label="2">浜岀骇鍛婅</el-radio-button>
+                  <el-radio-button :label="3">涓夌骇鍛婅</el-radio-button>
+                  <el-radio-button :label="4">鍥涚骇鍛婅</el-radio-button>
+                </el-radio-group>
+              </div>
             </div>
           </div>
           <div class="page-content-table">
@@ -447,7 +420,7 @@
                   stripe
                   height="100%"
                   size="small"
-                  :data="datas.tableData"
+                  :data="datas0.tableData"
                   style="width: 100%"
                 >
                   <el-table-column
@@ -457,7 +430,7 @@
                     width="60"
                   ></el-table-column>
                   <el-table-column
-                    v-for="header in headers"
+                    v-for="header in headers0"
                     :key="header.prop"
                     :prop="header.prop"
                     :label="header.label"
@@ -479,15 +452,15 @@
                   <el-table-column
                     label="鎿嶄綔"
                     fixed="right"
-                    width="240"
+                    width="120"
                     align="center"
                   >
                     <template #default="scope">
                       <el-button
-                        type="primary"
+                        type="warning"
                         size="small"
-                        @click="edit(scope.row)"
-                        >淇敼</el-button
+                        @click="view(scope.row)"
+                        >鏌ョ湅璇︽儏</el-button
                       >
                     </template>
                   </el-table-column>
@@ -501,27 +474,75 @@
                 type="primary"
                 round
                 size="small"
-                @click="getList"
+                @click="getList0"
                 :icon="Search"
                 >鏌ヨ</el-button
               >
             </div>
             <div class="el-page-container">
+              <el-pagination v-model:current-page="pageNum0" v-model:page-size="pageSize0"
+                :page-sizes="[20, 40, 60, 80, 100, 200, 300, 400]" size="small" layout="total, sizes, prev, pager, next, jumper" :total="total0"
+                @size-change="handleSizeChange0" @current-change="handleCurrentChange0" />
             </div>
             <div class="page-tool">
-              <el-button type="primary" round size="small" @click="exportExcel"
+              <!-- <el-button type="primary" round size="small" @click="exportExcel"
                 >瀵煎嚭</el-button
               >
               <el-button type="primary" round size="small" @click="exportExcelAll"
                 >瀵煎嚭鍏ㄩ儴</el-button
-              >
+              > -->
             </div>
           </div>
         </div>
-      </yc-card>
+        </el-tab-pane>
+        <el-tab-pane name="dev" label="璁惧鍛婅">璁惧鍛婅</el-tab-pane>
+        <el-tab-pane name="batt" label="鐢垫睜鍛婅">鐢垫睜鍛婅</el-tab-pane>
+      </el-tabs>
     </div>
     <div class="page-footer">
-      
+      <div class="left">
+        <card :title="name0"></card>
+      </div>
+      <div class="right">
+        <div class="btn-grp">
+          <!-- <div class="item">
+            <div class="label">閫夋嫨鐢垫睜缁�</div>
+            <div class="value">
+              <el-select
+                v-model="battId"
+                size="small"
+                clearable
+                placeholder="璇烽�夋嫨鐢垫睜缁�"
+              >
+                <el-option
+                  v-for="item in battList"
+                  :key="'l5_' + item.powerId"
+                  :label="`${item.stationName}-${item.powerName}`"
+                  :value="item.powerId"
+                >
+                </el-option>
+              </el-select>
+            </div>
+          </div>
+          <div class="item">
+            <div class="label">璁剧疆鏃堕棿鍛ㄦ湡</div>
+            <div class="value">
+              {{ 132 }}
+            </div>
+          </div>
+          <div class="item">
+            <div class="label">鍏虫敞灞炴��</div>
+          </div> -->
+        </div>
+        <!-- 涓�涓氨鍒嗕竴鍧� 涓や釜灏卞垎涓ゅ垪涓�琛� 涓や釜浠ヤ笂灏变袱鍒椾袱琛� -->
+        <div :class="['contain', { 'grid1': subProp.length == 1, 'grid2': subProp.length == 2, 'grid3': subProp.length > 2}]">
+          <template v-for="(sub, idx) in subProp" :key="'sub_' + idx">
+            <card :title="'娆″睘鎬�' + (idx + 1)">
+              <line-chart :ref="() => chartRefs[idx]"></line-chart>
+            </card>
+          </template>
+        </div>
+      </div>
     </div>
     <!-- 寮圭獥 -->
     <el-dialog
@@ -548,12 +569,70 @@
 <style scoped lang="less">
 .page-wrapper {
   display: flex;
-  flex-direction: row;
-  // padding: 8px;
+  flex-direction: column;
+  padding: 8px;
   height: 100%;
 
   .page-content {
     flex: 1;
+    .main-tabs {
+      height: 100%;
+      :deep(.el-tabs__header) {
+
+        border-bottom: 0 none;
+      }
+      :deep(.el-tabs__header) {
+         .el-tabs__nav {
+            border: 0 none;
+          }
+        .el-tabs__item {
+          background: #21487e;
+          color: #fff;
+          border: 0 none;
+          &.is-active {
+            background: #409EFF;
+          }
+        }
+      }
+    }
+  }
+  .page-footer {
+    flex: 2;
+    display: flex;
+    .left {
+      flex: 1;
+    }
+    .right {
+      flex: 1.6;
+      margin-left: 10px;
+      display: flex;
+      flex-direction: column;
+      .btn-grp {
+        display: flex;
+        justify-content: flex-end;
+        padding: 8px;
+      }
+      .contain {
+        flex: 1;
+        display: grid;
+        grid-column-gap: 8px;
+        grid-row-gap: 8px;
+        &.grid1 {
+          grid-template-columns: repeat(1, 1fr);
+        }
+        &.grid2 {
+          grid-template-columns: repeat(2, 1fr);
+          grid-template-rows: repeat(1, 1fr);
+        }
+        &.grid3 {
+          grid-template-columns: repeat(2, 1fr);
+          grid-template-rows: repeat(2, 1fr);
+        }
+      }
+    }
+  }
+  .tab-pane {
+    height: 100%;
   }
 }
 

--
Gitblit v1.9.1