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