From f3acb8ce787f3df0eda633031473be4e6a9ff448 Mon Sep 17 00:00:00 2001 From: zmc <zmc_li@foxmail.com> Date: 星期四, 12 十月 2023 16:56:28 +0800 Subject: [PATCH] 油烟 更新了实时监控页面 --- src/test/TestSelect.vue | 1778 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 1,733 insertions(+), 45 deletions(-) diff --git a/src/test/TestSelect.vue b/src/test/TestSelect.vue index 6273f74..919d833 100644 --- a/src/test/TestSelect.vue +++ b/src/test/TestSelect.vue @@ -1,60 +1,1748 @@ -<!-- <script > -import {store} from '../utils/status.js' - export default { - data() { - return{ - store - } - }, - methods: { - - } -} -</script> - +<!-- 鍔ㄦ�佽绠楁姌绾垮浘瀹藉害 --> <template> + <el-row ref="h1"> + <el-col> + {{ windowWidth }} + <!-- 鑿滃崟璇绘爣棰� --> + <div ref="h1" class="header-container"> + <span class="describe-info">搴楅摵鍚嶉�夋嫨锛�</span> + <!-- 搴楅摵鍚� 绾ц仈 --> + <ShopNameAndID @submit-id="(n) => (deviceId[1] = n)"></ShopNameAndID> + + <!-- 寮傚父绫诲瀷閫夋嫨 --> + <ExceptionType @submitExceptionType="(val) => (exceptionValue = val)"> + </ExceptionType> + + <TimeSelect @submit-time="giveTime"></TimeSelect> + </div> + <div + ref="h2" + style="display: flex; margin-top: 2px; justify-content: right" + > + <el-button + type="primary" + plain + @click="showTable" + style="margin-left: 20px" + :loading="button.queryButton" + >鏌ヨ</el-button + > + + <el-tooltip + class="box-item" + effect="dark" + content="鐐瑰嚮鍙鍑篍xcel鏂囦欢" + placement="top-start" + > + <!-- 鍋氭垚鍑芥暟js鏂囦欢 --> + <el-icon + class="iconExcel clickable" + title="瀵煎嚭Excel鏂囦欢" + @click="exportDom" + > + <i-ep-Download /> + <!-- 瀵煎嚭涓篍xcel --> + </el-icon> + </el-tooltip> + </div> + <div style="display: flex; justify-content: right; margin-right: 40px"> + <span class="collapse-header-text"> + 闈欏畨鍖� {{ beginTime }} 鈥斺�� {{ endTime }} 娌圭儫妫�娴嬪紓甯镐俊鎭眹鎬�</span + > + </div> + <br /> + + <el-collapse ref="h3" v-model="activeNames"> + <el-collapse-item name="1"> + <template #title> + <el-tooltip + class="box-item" + effect="dark" + content="鐐瑰嚮鍙姌鍙�" + placement="right-start" + > + <h4 class="collapse-header">寮傚父鍒嗘瀽</h4> + <el-icon class="header-icon"> + <i-ep-info-filled /> + </el-icon> + </el-tooltip> + + <el-tooltip + class="box-item" + effect="dark" + content="鐐瑰嚮鍙姌鍙�" + placement="right-start" + > + </el-tooltip> + </template> + <el-card class="box-card"> + <el-row :gutter="25"> + <el-col :span="8"> + <div style="display: flex"> + <img + src="@/assets/exceed.jpg" + style="width: 25px; height: 25px; margin-top: 5px" + /> + <span + style=" + font-size: 16px; + font-weight: bold; + margin-top: 4px; + margin-left: 4px; + " + >娌圭儫娴撳害瓒呮爣</span + > + </div> + + <div class="box-card-label"> + <el-scrollbar> + <span class="box-card-label">搴楅摵鏁伴噺锛�</span> + <span style="font-size: 20px" + >{{ exception0.length }} /{{ shopsTotal }}</span + > + <span style="margin-left: 150px; font-size: 14px"> + 鍗犳瘮锛歿{ + ((exception0.length / shopsTotal) * 100).toFixed(1) + }}%</span + > + </el-scrollbar> + </div> + + <hr /> + <div class="box-card-butcontainer"> + <el-card class="sub-box-card"> + <el-scrollbar max-height="70px"> + <ExceptionText + v-for="(item, index) in exception0" + :key="item" + :devId="item.devId" + exception-value="0" + :begin-time="beginTime" + :end-time="endTime" + @submit-exception-data="getAbnormalDataByClick" + > + {{ item.diName }} + <span + v-if="index < exception0.length - 1" + class="text-blank" + >,</span + > + </ExceptionText> + </el-scrollbar> + </el-card> + </div> + </el-col> + + <el-col :span="8"> + <div style="display: flex"> + <img + src="@/assets/exception.jpg" + style="width: 25px; height: 25px; margin-top: 5px" + /> + <span + style=" + font-size: 16px; + font-weight: bold; + margin-top: 5px; + margin-left: 4px; + " + >渚涚數寮傚父</span + > + </div> + <div class="box-card-label"> + <el-scrollbar> + <span class="box-card-label">搴楅摵鏁伴噺锛�</span> + <span style="font-size: 20px" + >{{ exception1.length }} /{{ shopsTotal }}</span + > + <span style="margin-left: 150px; font-size: 14px"> + 鍗犳瘮锛歿{ + ((exception1.length / shopsTotal) * 100).toFixed(1) + }}%</span + > + </el-scrollbar> + </div> + + <hr /> + + <div> + <el-card class="sub-box-card"> + <el-scrollbar max-height="70px"> + <ExceptionText + v-for="(item, index) in exception1" + :key="item" + :devId="item.devId" + exception-value="1" + :begin-time="beginTime" + :end-time="endTime" + @submit-exception-data="getAbnormalDataByClick" + > + {{ item.diName }} + <span + v-if="index < exception1.length - 1" + class="text-blank" + >,</span + > + </ExceptionText> + </el-scrollbar> + </el-card> + </div> + </el-col> + + <el-col :span="8"> + <div style="display: flex"> + <img + src="@/assets/offline.jpg" + style="width: 25px; height: 25px; margin-top: 5px" + /> + <span + style=" + font-size: 16px; + font-weight: bold; + margin-top: 5px; + margin-left: 4px; + " + >鎺夌嚎</span + > + </div> + <div class="box-card-label"> + <el-scrollbar> + <span class="box-card-label">搴楅摵鏁伴噺锛�</span> + <span style="font-size: 20px" + >{{ exception2.length }} /{{ shopsTotal }}</span + > + <span style="margin-left: 150px; font-size: 14px"> + 鍗犳瘮锛歿{ + ((exception2.length / shopsTotal) * 100).toFixed(1) + }}%</span + > + </el-scrollbar> + </div> + <hr /> + <div> + <el-card class="sub-box-card"> + <el-scrollbar max-height="70px"> + <ExceptionText + v-for="(item, index) in exception2" + :key="item" + :devId="item.devId" + exception-value="2" + :begin-time="beginTime" + :end-time="endTime" + @submit-exception-data="getAbnormalDataByClick" + > + {{ item.diName }} + <span + v-if="index < exception2.length - 1" + class="text-blank" + >,</span + > + </ExceptionText> + </el-scrollbar> + </el-card> + </div> + </el-col> + </el-row> + </el-card> + </el-collapse-item> + </el-collapse> + + <h4 class="table-text">寮傚父鏁版嵁</h4> + + </el-col> + </el-row> + <el-card class="table-page" v-show="!isNoData"> + <el-table + ref="tableH" + v-loading="loading" + :data="displayData" + style="width: 100%" + border + :height="tableHeight" + :cell-class-name="tableCellClassName" + + > + <el-table-column prop="diName" label="搴楅摵鍚嶇О"> + <template #default="{ row }"> + <el-tooltip effect="dark" :content="row.diName"> + <div class="cell ellipsis">{{ row.diName }}</div> + </el-tooltip> + </template> + </el-table-column> + + <el-table-column prop="devId" label="璁惧缂栧彿"> + <template #default="{ row }"> + <el-tooltip effect="dark" :content="row.devId"> + <div class="cell ellipsis">{{ row.devId }}</div> + </el-tooltip> + </template> + </el-table-column> + + <el-table-column prop="exception" label="寮傚父鍒嗙被"> + <template #default="{ row }"> + <el-tooltip effect="dark" :content="row.exception"> + <div class="cell ellipsis">{{ row.exception }}</div> + </el-tooltip> + </template> + </el-table-column> + <el-table-column label="寮傚父绫诲瀷"> + <template #default="{ row }"> + <span v-if="row.exceptionType == '0'">娌圭儫鏁版嵁瓒呮爣</span> + <span v-else-if="row.exceptionType == '1'">鐤戜技渚涚數寮傚父</span> + <span v-else-if="row.exceptionType == '2'">鎺夌嚎</span> + </template> + </el-table-column> + <el-table-column prop="region" label="鍦板尯"> + <template #default="{ row }"> + <el-tooltip effect="dark" :content="row.region"> + <div class="cell ellipsis">{{ row.region }}</div> + </el-tooltip> + </template> + </el-table-column> + + <el-table-column prop="beginTime" label="寮�濮嬫椂闂�"> + <template #default="{ row }"> + <el-tooltip effect="dark" :content="row.beginTime"> + <div class="cell ellipsis">{{ row.beginTime }}</div> + </el-tooltip> + </template> + </el-table-column> + <el-table-column prop="endTime" label="缁撴潫鏃堕棿"> + <template #default="{ row }"> + <el-tooltip effect="dark" :content="row.endTime"> + <div class="cell ellipsis">{{ row.endTime }}</div> + </el-tooltip> + </template> + </el-table-column> + <el-table-column label="鎿嶄綔"> + <template #default="{ row }"> + <el-button + type="primary" + class="table-button" + @click="showDrawer(row)" + >鏌ョ湅璇︽儏</el-button + > + </template> + </el-table-column> + </el-table> + + <el-pagination + ref="h4" + background + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + :total="total" + :page-size="pageSize" + layout="total,prev, pager, next, jumper" + /> + </el-card> + <el-empty v-show="isNoData" :image-size="200" /> + <!-- 瀵硅瘽妗� --> <div> - <el-button @click="store.increment()">澧炲姞</el-button> - <div>count:{{ store.count }}</div> + <el-dialog ref="diag" v-model="centerDialogVisible" draggable align-center> + <template #header> + <div style="font-size: 17px"> + 搴楅摵鍚嶏細{{ rowShopName }} + <span style="margin-left: 40px">寮傚父绫诲瀷锛�</span> + <span v-if="rowExceptionType == '0'">娌圭儫鏁版嵁瓒呮爣</span> + <span v-else-if="rowExceptionType == '1'">渚涚數寮傚父</span> + <span v-else-if="rowExceptionType == '2'">鎺夌嚎</span> + <div style="margin-top: 10px"> + 寮傚父鏃堕棿娈碉細{{ rowBeginTime }} ~ + {{ rowEndTime }} + </div> + </div> + <div class="dialog-button-position"> + <el-button + type="danger" + :loading="button.preButton" + :disabled="isPreCantouch || banTouch" + @click="getPreviousRowData" + >涓婃潯寮傚父</el-button + > + <el-button + type="danger" + :loading="button.afterButton" + :disabled="isNextCantouch || banTouch" + @click="getNextRowData" + >涓嬫潯寮傚父</el-button + > + </div> + </template> + + <!-- 瓒呮爣鏁版嵁鏃� --> + <!-- 鎶樼嚎鍥� --> + + <!-- 鎺夌嚎 --> + <!-- <div + ref="ref" + v-show="isOfflineShow" + style=" + width: 100%; + height: 300px; + /* min-width: 100px; */ + margin-bottom: 20px; + margin-left: 10px; + min-width: 350px; + " + ></div> --> + + <ExceptionTypeLineChart + :option="option" + :is-open-dialog="centerDialogVisible" + v-loading="chartLoading" + ></ExceptionTypeLineChart> + + <!-- --> + <div style="margin-top: 40px; margin-bottom: 5px; border: 1px"> + <el-table + :data="exceedingData" + height="360" + border + style="margin-top: 25px" + > + <el-table-column fixed prop="diName" label="搴楅摵鍚嶇О" /> + <el-table-column prop="mvStatCode" label="璁惧缂栧彿" /> + + <el-table-column prop="mvDataTime" label="閲囬泦鏃堕棿" /> + <el-table-column + prop="mvFumeConcentration2" + label="娌圭儫娴撳害(mg/m鲁)" + /> + </el-table> + </div> + + <el-tag type="success" class="mx-1" effect="dark" round + ><span class="table-line-lable" v-show="rowExceptionType == '0'" + >寮傚父璁板綍锛� + </span> + <span v-show="rowExceptionType == '1' || rowExceptionType == '2'" + >缂哄け鏁版嵁锛�</span + > + <span class="table-line-num">{{ exceptionTotal }}鏉�</span> + <span v-show="rowExceptionType === '1' || rowExceptionType === '2'"> + (閫昏緫璁$畻)</span + > + </el-tag> + </el-dialog> </div> </template> -<style lang="scss" scoped> +<script> +import ExceptionType from '../sfc/ExceptionType.vue'; +import TimeSelect from '../sfc/TimeSelect.vue'; +import ExceptionText from '../sfc/ExceptionText.vue'; +import * as XLSX from 'xlsx/xlsx.mjs'; +import dayjs from 'dayjs'; +import axiosInstanceInstance from '../utils/request.js'; -</style> --> +const ShopNameAndID = defineAsyncComponent(() => + import('../sfc/../sfc/ShopNameAndID.vue') +); -<!-- <script setup> - -import { useMouse } from '../utils/status1.js' -const { x, y } = useMouse() - -</script> --> - -<template> -Mouse position is at: {{ x }}, {{ y }} -<div>{{ c }}</div> -<div>{{ d }}</div> -</template> - -<script > -import { useMouse } from '../utils/status1.js' +// 寮傚父鍥惧舰寮傛缁勪欢 +const ExceptionTypeLineChart = defineAsyncComponent(() => + import('../sfc/ExceptionTypeLineChart.vue') +); export default { - setup() { - const { x, y } = useMouse() - return { x, y } + name: 'TablePage', + components: { + ExceptionType, + TimeSelect, + ShopNameAndID, + ExceptionText, + ExceptionTypeLineChart }, - data(){ - return{ - c:'濂界殑', - d:1 + data() { + return { + // 椤甸潰绐楀彛瀹藉害 + windowWidth:0, + // 椤甸潰绐楀彛楂樺害 + windowHeight:0, + + // 瀵硅瘽妗嗙殑瀹藉害 + dialogW:'', + // 鎶樼嚎鍥惧姞杞戒腑 + chartLoading:false, + button:{ + // 鏌ヨ鎸夐挳 + queryButton:false, + // 涓婁竴鏉℃寜閽� + preButton:false, + // 涓嬩竴鏉℃寜閽� + afterButton:false, + // + banTouch:0 + }, + // 寮傚父鎶樼嚎鍥剧殑閰嶇疆 + option: {}, + // 鎶樼嚎鍥惧睍绀� + isChartShow: false, + // table鍏冪礌 + tableRef: null, + // 寮傚父琛ㄦ牸鏁版嵁 + tableHeight: 300, + // 绌烘暟鎹姸鎬� + isNoData: false, + // 寮瑰嚭妗嗕腑琛ㄦ牸鏉℃暟 + exceptionTotal: 0, + // 鏃犳暟鎹椂鐨勬椂闂存暟缁勶紝鍏冪礌鐩稿樊10鍒嗛挓 + // abnormalTimeTenMinute: [], + // 搴楅摵鎬绘暟 + shopsTotal: 0, + + // 鈥欎笂涓�鏉♀�樻寜閽槸鍚﹀彲浠ヨ鐐瑰嚮鐘舵�� + isPreCantouch: false, + // 鈥欎笅涓�鏉♀�樻寜閽槸鍚﹀彲浠ヨ鐐瑰嚮鐘舵�� + isNextCantouch: false, + + // 瀵硅瘽妗嗘槸鍚﹀睍绀� + centerDialogVisible: false, + + // 鎶藉眽澶撮儴淇℃伅 + // 鎶樼嚎鍥惧搴旂殑褰撳墠琛ㄦ牸琛屾暟鎹� + // 搴楅摵鍚� + rowShopName: '', + // 寮傚父绫诲瀷 + rowExceptionType: '', + // 寮傚父寮�濮嬫椂闂� + rowBeginTime: '', + // 寮傚父缁撴潫鏃堕棿 + rowEndTime: '', + // 寮傚父鐨勮澶囩紪鍙� + rowMvStatCode: '', + + // 琛ㄦ牸鐨勪竴琛屾暟鎹� + rowTable: [], + //鎷兼帴鐨勬墍鏈夋暟鎹� + allExceptionTimeData: [], + // 鏃犳暟鎹椂澧炲姞鐨勫墠30鍒嗛挓鏁版嵁 + beforeData: [], + // 鏃犳暟鎹椂澧炲姞鐨勫悗40鍒嗛挓鏁版嵁 + afterData: [], + + // -1琛ㄧず鏈�夋嫨琛ㄦ牸鐨勮 + selectedRowIndex: -1, + + // 榛樿閫夋嫨鐨勬姌鍙犻潰鏉跨紪鍙� + activeNames: ['1'], + // 寮傚父鏃剁殑琛ㄦ牸 + abnormalTb: [], + // 寮傚父鐨勮捣姝㈡椂闂� + abnormalBt: '', + abnormalEt: '', + // 鏄惁灞曠ず鏃堕棿杞� 鍚� + isAbnormal: false, + // 淇濆瓨鐫�寮傚父绫诲瀷0瀵瑰簲鐨勫簵閾哄悕绉板拰璁惧缂栧彿 + exception0: [], + // 淇濆瓨鐫�寮傚父绫诲瀷1瀵瑰簲鐨勫簵閾哄悕绉板拰璁惧缂栧彿 + exception1: [], + // 淇濆瓨鐫�寮傚父绫诲瀷2瀵瑰簲鐨勫簵閾哄悕绉板拰璁惧缂栧彿 + exception2: [], + // 鍔犺浇鍔ㄧ敾 + loading: false, + // 鎶藉眽鍔犺浇鍔ㄧ敾 + loadingDrawer: true, + // 鍒嗛〉灞曠ず鏁版嵁 + + // 寮傚父琛ㄧ殑鏁版嵁 + displayData: [], + // 瀛樻斁鍚庣杩斿洖鐨刯son鏁版嵁 + jsonData: [], + // 鍒嗛〉鐨勮捣濮嬬储寮� + startIndex: 0, + // 褰撳墠椤� + currentPage: 1, + // 姣忛〉鏉℃暟 + pageSize: 10, + total: 0, + // 閫夋嫨搴楅摵鍚� + deviceId: [], + deviceInfo: [], + // 鏃堕棿閫夋嫨鍣ㄥ紑濮嬫椂闂� + beginTime: '', + // 鏃堕棿閫夋嫨鍣ㄧ粨鏉熸椂闂� + endTime: '', + // 寮傚父琛ㄦ暟鎹� + abnormalData: [], + // 寮瑰嚭鐨勫璇濇涓殑寮傚父琛ㄦ牸鏁版嵁 + exceedingData: [], + drawerVisible: false, + // 琛ㄦ牸鐨勪竴琛屾暟鎹� + drawerData: {}, + // 鎶藉眽鏂瑰悜锛屼粠鍙冲悜宸︽墦寮� + drawerDirection: 'rtl', + optionsTime: [ + // 鏃堕棿棰楃矑搴� + { + value: '10', + label: '10鍒嗛挓鏁版嵁', + disabled: true + } + ], + // 搴楅摵鍚� 绾ц仈閫夋嫨鍣� + optionsShop: [], + // 寮傚父绫诲瀷閫夋嫨鍣� + exceptionValue: [] + }; + }, + // 鐩戝惉 鍒ゆ柇鎸夐挳鏄惁鍙偣鍑� + watch: { + selectedRowIndex(newVaue) { + // 澶勪簬琛ㄦ牸鐨勬渶鍚庝竴鏉℃暟鎹� 璁剧疆鈥樹笂涓�鏉♀�欐寜閽笉鍙偣 + if (newVaue === this.displayData.length - 1) { + this.isPreCantouch = true; + //鐢ㄦ埛鍏堢偣浜嗙涓�鏉★紝pre涓簍rue,鐒跺悗鐐瑰嚮鏈�鍚庝竴鏉�,next涓簍rue銆傛鏃朵袱涓寜閽兘琚皝閿� + if (this.isNextCantouch == true) { + this.isNextCantouch = false; + } + } + // 澶勪簬琛ㄦ牸绗竴鏉℃暟鎹� 璁剧疆鈥樹笅涓�鏉♀�欐寜閽笉鍙偣 + else if (newVaue === 0) { + this.isNextCantouch = true; + //鐢ㄦ埛鍏堢偣浜嗚〃鏍兼渶鍚庝竴鏉�,next涓簍rue,鐒跺悗鐐瑰嚮绗竴鏉★紝pre涓簍rue銆傛鏃朵袱涓寜閽兘琚皝閿� + if (this.isPreCantouch == true) { + this.isPreCantouch = false; + } + } + // 澶勪簬琛ㄦ牸鐨勪腑闂磋 灏嗘寜閽缃负鍙偣鍑荤姸鎬� + else { + this.isPreCantouch = false; + this.isNextCantouch = false; + } + }, + + // 褰撻�夋嫨鐨勬椂闂村彂鐢熷彉鍖栨椂锛屽紓甯稿垎鏋愰儴鍒嗙殑寮傚父搴楅摵鏁伴噺鍚屾鍙樺寲 + beginTime() { + this.getShopNames(); + }, + endTime() { + this.getShopNames(); + }, + centerDialogVisible() { + window.addEventListener('resize', this.updateChart); } }, - watch:{ - x(){ - this.d = this.x + + mounted() { + // 浠庢帴鍙h幏鍙栧簵閾哄悕绉� 缁欑骇鑱斾笅鎷夋 + this.getDeviceInfo(); + // 灞曠ず鏈�杩�7澶╂暟鎹� + this.getRecentSevenDays(); + // 鏍规嵁寮傚父绫诲瀷杩斿洖搴楅摵鍚嶇О鍜岃澶囩紪鍙� 娓叉煋寮傚父鍒嗘瀽閮ㄥ垎瀵瑰簲鐨勫簵閾哄悕 + this.getShopNames(); + this.calcTableHeight(); + window.addEventListener('resize', this.updateChart); + window.onresize = () => { + return (() => { + //绐楀彛缂╂斁鑷姩鑾峰彇椤甸潰瀹介珮 + this.windowWidth = document.documentElement.clientWidth; //瀹� + this.windowHeight = document.documentElement.clientHeight;; //楂� + })() + } + + }, + methods: { + // 鍔熻兘锛氭敼鍙樿〃鏍兼煇涓崟鍏冩牸鐨勯鑹� + tableCellClassName({ row, column, rowIndex, columnIndex }) { + if(columnIndex == 3){ + if (row.exceptionType == '0') { + return 'exceeding-row'; + } else if (row.exceptionType == '1') { + return 'abnormal-power-supply'; + } else if (row.exceptionType == '2') { + return 'disconnect'; + } + } + + }, + // 鍔熻兘锛氬姩鎬佽绠楀璇濇鐨勫搴� + calDialogWidth(){ + + // this.dialogW = `calc(100vw-)` + // console.log('瀹藉害涓�',w); + }, + //鍔熻兘锛� 鍔ㄦ�佽绠楄〃鏍奸珮搴� + calcTableHeight() { + const h1 = this.$refs.h1.$el.offsetHeight; + const h2 = this.$refs.h4.$el.offsetHeight; + this.tableHeight = `calc(100vh - ${h1}px - ${h2}px - 45px - var(--el-main-padding) * 2 - var(--el-card-padding))`; + }, + + //鍔熻兘锛� 鏃堕棿鏄惁瓒呰繃10鍒嗛挓 + isTimeDifferenceGreaterThan10Minutes(dateString1, dateString2) { + const date1 = new Date(dateString1); + const date2 = new Date(dateString2); + + // 璁$畻涓や釜鏃ユ湡鐨勬椂闂村樊锛堟绉掞級 + const timeDifferenceMs = Math.abs(date1 - date2); + + // 杞崲涓哄垎閽� + const timeDifferenceMinutes = Math.floor(timeDifferenceMs / (1000 * 60)); + + // 鍒ゆ柇鏃堕棿宸槸鍚﹀ぇ浜�10鍒嗛挓 + return timeDifferenceMinutes > 10; + }, + + // 浠�10鍒嗛挓涓洪棿闅旇繑鍥炴椂闂村瓧绗︿覆鏁扮粍 + generateTimePoints(timePoints, yAxisData) { + let updatedTimePoints = []; + let yAxisDataAdressed = []; + for (let i = 0; i < timePoints.length; i++) { + updatedTimePoints.push(timePoints[i]); + yAxisDataAdressed.push(yAxisData[i]); + if (i < timePoints.length - 1) { + let current = timePoints[i]; + let next = timePoints[i + 1]; + while (this.isTimeDifferenceGreaterThan10Minutes(current, next)) { + current = dayjs(current) + .add(10, 'minute') + .format('YYYY-MM-DD HH:mm:ss'); + updatedTimePoints.push(current); + yAxisDataAdressed.push(null); + } + } + } + let obj = {}; + obj['time'] = updatedTimePoints; + obj['data'] = yAxisDataAdressed; + return obj; + }, + + isExceedOneMonth(dateStr1, dateStr2) { + // 瓒呰繃涓�涓湀锛岃繑鍥濼rue锛屽惁鍒欒繑鍥濬alse + // 灏嗘棩鏈熷瓧绗︿覆杞负鏃ユ湡瀵硅薄 + const date1 = new Date(dateStr1); + const date2 = new Date(dateStr2); + + // 鑾峰彇涓や釜鏃ユ湡鐨勫勾銆佹湀銆佹棩 + const year1 = date1.getFullYear(); + const month1 = date1.getMonth(); + const day1 = date1.getDate(); + + const year2 = date2.getFullYear(); + const month2 = date2.getMonth(); + const day2 = date2.getDate(); + + // 鍒ゆ柇涓や釜鏃ユ湡鏄惁鐩稿樊涓�涓湀 + if (year1 === year2) { + // 骞翠唤鐩哥瓑锛屾瘮杈冩湀浠藉樊鍊� + if (Math.abs(month1 - month2) === 1) { + // 鏈堜唤宸�间负1锛岃繕闇�瑕佸垽鏂叿浣撴棩鏈� + if ( + (month1 < month2 && day1 < day2) || + (month1 > month2 && day1 > day2) + ) { + return true; + } + } + } else if (Math.abs(year1 - year2) === 1) { + // 骞翠唤宸�间负1锛屾瘮杈冩湀浠藉拰鏃ユ湡 + if ( + (year1 < year2 && month1 === 11 && month2 === 0 && day1 < day2) || + (year1 > year2 && month1 === 0 && month2 === 11 && day1 > day2) + ) { + return true; + } + } + + // 榛樿杩斿洖false锛岃〃绀轰袱涓棩鏈熷瓧绗︿覆涓嶇浉宸竴涓湀 + return false; + }, + + // 鍒氭墦寮�鍗$墖鏃剁涓�涓浘褰笉浼氳嚜鍔ㄤ几缂� 褰撶偣鍑讳笂/涓嬩竴鏉℃椂浼氳嚜鍔ㄤ几缂� + // 鍥惧舰鍝嶅簲寮忓彉鍖� + updateChart() { + this.$nextTick(() => { + this.calDialogWidth() + }); + }, + + // 浠庢椂闂撮�夋嫨鍣ㄧ粍浠舵嬁鍒板紑濮嬪拰缁撴潫鏃堕棿 + giveTime(val) { + //灏嗕腑鍥芥爣鍑嗘椂闂磋浆涓烘寚瀹氭牸寮�(璇ョ粍浠惰繑鍥炵殑鏍囧噯鏃堕棿鐨勬牸寮忥紝鎵�浠ュ繀椤荤殑鍔犺繖涓嚱鏁�) + this.beginTime = dayjs(val[0]).format('YYYY-MM-DD HH:mm:ss'); + this.endTime = dayjs(val[1]).format('YYYY-MM-DD HH:mm:ss'); + }, + + // 鍙傛暟锛氬紓甯哥殑寮�濮嬪拰缁撴潫鏃堕棿銆傝繑鍥炴椂闂存暟缁勶紝浠庡紑濮嬫椂闂寸殑鍚�10鍒嗛挓鍒扮粨鏉熸椂闂翠负姝€�� + // 姣斿12:00:00-13:00:00 鎵�浠ヨ繑鍥炵殑鏁扮粍鍏冪礌鏄� 12:10:00 ,12:20:00,12:30:00....13:00:00 + descTenTime(begin, end) { + let time = []; + if (begin == end) { + time.push(begin); + return time; + } + // 淇濈暀缁撴灉 00 10 20 30 + let temp = dayjs(begin).add(10, 'minute').format('YYYY-MM-DD HH:mm:ss'); + while (temp != end) { + time.push(temp); + temp = dayjs(temp).add(10, 'minute').format('YYYY-MM-DD HH:mm:ss'); + } + // 鍔犱笂寮傚父鐨勭粨鏉熸椂闂� + time.push(temp); + return time; + }, + + // 淇濆瓨褰撳墠閫夋嫨鐨勮鎵�鏈変俊鎭� + setinfo(index) { + this.rowShopName = this.displayData[index].diName; + this.rowExceptionType = this.displayData[index].exceptionType; + this.rowBeginTime = this.displayData[index].beginTime; + this.rowEndTime = this.displayData[index].endTime; + this.rowMvStatCode = this.displayData[index].devId; + }, + + //鍔熻兘锛� 渚涚數寮傚父鍜屾帀绾挎椂鐨勮〃鏍兼暟鎹� + setExceptionData() { + // 鏃犳暟鎹椂鐨勬椂闂存暟缁� 鏃堕棿鐩稿樊10鍒嗛挓 + const abnormalTimeTenMinute = this.descTenTime( + this.rowBeginTime, + this.rowEndTime + ); + // 鍘婚櫎渚涚數寮傚父鍜屾帀绾垮尯闂寸殑绗竴涓湁鍏冪礌鐨勫�� + this.exceedingData = []; + + for (let i = 0; i < abnormalTimeTenMinute.length; i++) { + this.exceedingData.push({ + mvStatCode: this.rowMvStatCode, + diName: this.rowShopName, + mvDataTime: abnormalTimeTenMinute[i], + mvFumeConcentration2: '' + }); + } + + // 淇濆瓨鏃犳暟鎹椂琛ㄦ牸鏉℃暟 + this.exceptionTotal = abnormalTimeTenMinute.length; + }, + // 鐐瑰嚮琛ㄦ牸鐨勮鏃� + selectTableRow(row) { + // 鑾峰彇褰撳墠琛岀殑绱㈠紩 + this.selectedRowIndex = this.displayData.indexOf(row); + // 杩涘叆鎶藉眽椤甸潰鏇存柊澶撮儴鏁版嵁 + this.setinfo(this.selectedRowIndex); + }, + + // 鑾峰彇鑾峰彇琛ㄦ牸涓嬩竴琛屾暟鎹� + getNextRowData() { + // 涓嶆槸琛ㄦ牸鐨勭涓�琛� + if (this.selectedRowIndex !== 0) { + // 鐐瑰嚮杩囩▼涓� 閿佷綇涓婁笅鏉℃寜閽� 鍦ㄨ缃畬鍥惧舰閰嶇疆椤瑰悗瑙i攣 + this.banTouch = 1 + + //寰楀埌涓婁竴琛屾暟鎹储寮� + this.selectedRowIndex = this.selectedRowIndex - 1; + //璇锋眰鏁版嵁 鏀瑰彉exceedingData + this.setinfo(this.selectedRowIndex); + let params = {}; + if (this.drawerData.devId) { + params['devId'] = this.displayData[this.selectedRowIndex].devId; + } + if (this.drawerData.beginTime) { + params['beginTime'] = + this.displayData[this.selectedRowIndex].beginTime; + } + if (this.drawerData.endTime) { + params['endTime'] = this.displayData[this.selectedRowIndex].endTime; + } + this.button.afterButton = true + axiosInstanceInstance + .get('/fume/exceed', { params: params }) + .then((response) => { + // 淇濆瓨杩斿洖鐨勮秴鏍囨暟鎹� + this.exceedingData = response.data.data; + this.drawChartTest(); + this.exceptionTotal = this.exceedingData.length; + this.button.afterButton = false + }); + } + + }, + + // 鑾峰彇鑾峰彇琛ㄦ牸涓嬩竴琛屾暟鎹� + getPreviousRowData() { + // 涓嶆槸琛ㄦ牸鐨勭涓�琛� + if (this.selectedRowIndex < this.displayData.length - 1) { + // 鐐瑰嚮杩囩▼涓� 閿佷綇涓婁笅鏉℃寜閽� 鍦ㄨ缃畬鍥惧舰閰嶇疆椤瑰悗瑙i攣 + this.banTouch = 1 + + //寰楀埌涓婁竴琛屾暟鎹储寮� + this.selectedRowIndex = this.selectedRowIndex + 1; + + //璇锋眰鏁版嵁 鏀瑰彉exceedingData + this.setinfo(this.selectedRowIndex); + let params = {}; + if (this.drawerData.devId) { + params['devId'] = this.displayData[this.selectedRowIndex].devId; + } + if (this.drawerData.beginTime) { + params['beginTime'] = + this.displayData[this.selectedRowIndex].beginTime; + } + if (this.drawerData.endTime) { + params['endTime'] = this.displayData[this.selectedRowIndex].endTime; + } + this.button.preButton = true + axiosInstanceInstance + .get('/fume/exceed', { params: params }) + .then((response) => { + // 淇濆瓨杩斿洖鐨勮秴鏍囨暟鎹� + this.exceedingData = response.data.data; + this.drawChartTest(); + this.exceptionTotal = this.exceedingData.length; + this.button.preButton = false + }); + } + }, + + // 鈥樻煡鐪嬭鎯呪�� 寮瑰嚭妗嗛儴鍒� + showDrawer(row) { + // 璁$畻褰撳墠琛岀殑绱㈠紩 + this.selectTableRow(row); + + this.rowTable = row; + + // 琛ㄦ牸鐨勮鏁版嵁浠ュ璞″舰寮忕粰drawerData + this.drawerData = row; + + this.centerDialogVisible = true; + // 鏍规嵁琛屾暟鎹姹傝缁嗚秴鏍囨暟鎹覆鏌撴姌绾垮浘 + let params = {}; + if (this.drawerData.devId) { + params['devId'] = this.drawerData.devId; + } + if (this.drawerData.beginTime) { + params['beginTime'] = this.drawerData.beginTime; + } + if (this.drawerData.endTime) { + params['endTime'] = this.drawerData.endTime; + } + + axiosInstanceInstance + .get('/fume/exceed', { params: params }) + .then((response) => { + // 淇濆瓨杩斿洖鐨勮秴鏍囨暟鎹� + this.exceedingData = response.data.data; + this.drawChartTest(); + this.exceptionTotal = this.exceedingData.length; + }); + }, + + // 鐢ㄦ埛鏍规嵁杈撳叆鐨勬潯浠舵煡璇� + showTable() { + if (this.isExceedOneMonth(this.beginTime, this.endTime)) { + alert('鏃堕棿璺ㄥ害涓嶈兘瓒呰繃涓�涓湀'); + return; + } + let params = {}; + + if (this.deviceId[1]) { + params['devId'] = this.deviceId[1]; + } + if (this.exceptionValue.length != 0) { + params['exceptionValue'] = this.exceptionValue.join(); + } + + if (this.beginTime) { + params['beginTime'] = this.beginTime; + } + if (this.endTime) { + params['endTime'] = this.endTime; + } + this.loading = true; + this.button.queryButton = true + + axiosInstanceInstance + .get('/fume/abnormalthree', { params: params }) + .then((response) => { + this.abnormalData = response.data.data; + this.total = this.abnormalData.length; + this.loading = false; + this.button.queryButton = false + if (response.data.data.length == 0) { + ElMessage('璇ユ椂娈垫棤鏁版嵁'); + this.isNoData = true; + return; + } + // 绉婚櫎绌烘暟鎹姸鎬� + this.isNoData = false; + this.handleCurrentChange(1); + + }); + }, + handleSizeChange(val) { + this.pageSize = val; + // 鏀瑰彉姣忛〉鏄剧ず鏁扮洰鏃惰烦鍒扮涓�椤� + this.handleCurrentChange(1); + }, + handleCurrentChange(val) { + const startIndex = (val - 1) * this.pageSize; + const endIndex = startIndex + this.pageSize; + + this.displayData = this.abnormalData.slice(startIndex, endIndex); + }, + + //鐩稿樊澶氬皯涓崄鍒嗛挓 璁$畻涓苟涓嶅寘鎷紑濮嬫椂闂达紝浣嗗寘鎷粨鏉熸椂闂淬�� + diffTenMinutesNum(beginNormal, endNormal) { + // 灏嗗紑濮嬫椂闂村拰缁撴潫鏃堕棿杞崲涓篸ayjs瀵硅薄 + const start = dayjs(beginNormal); + const end = dayjs(endNormal); + + // 璁$畻缁撴潫鏃堕棿鍑忓幓寮�濮嬫椂闂翠腑闂寸浉宸灏戜釜鍗佸垎閽� + const diffInMinutes = end.diff(start, 'minute'); + const diffInTenMinutes = Math.floor(diffInMinutes / 10); + return diffInTenMinutes; + }, + + // 鍙傛暟锛氬紓甯哥殑寮�濮嬫椂闂达紝寮傚父鐨勭粨鏉熸椂闂淬�� + // 鍔熻兘锛氳繑鍥炲紑濮嬫椂闂寸殑鍓�30鍒嗛挓鐨勬椂闂寸偣锛岀粨鏉熸椂闂村悗40鍒嗛挓鐨勬椂闂寸偣 + before30AndAfter40(begin, end) { + let time = []; + const before30MinBegin = dayjs(begin) + .subtract(30, 'minute') + .format('YYYY-MM-DD HH:mm:ss'); + // 鍚庝竴娈电殑寮�濮嬫椂闂� + const after10MinBegin = dayjs(end) + .add(10, 'minute') + .format('YYYY-MM-DD HH:mm:ss'); + // 寰�鍚�40鍒嗛挓 + const after40MinEnd = dayjs(end) + .add(40, 'minute') + .format('YYYY-MM-DD HH:mm:ss'); + time.push(before30MinBegin); + time.push(after10MinBegin); + time.push(after40MinEnd); + return time; + }, + + // 鍙傛暟锛氳澶囩紪鍙凤紝 寮�濮嬫椂闂达紝 缁撴潫鏃堕棿 + // 鍔熻兘锛氳繑鍥炴煇璁惧鍦ㄨ鏃舵鍘嗗彶鏁版嵁鐨刧et璇锋眰鍙傛暟銆� + requestGetParms(devnum, begin, end) { + return { + devId: devnum, + beginTime: begin, + endTime: end + }; + }, + // 鍙傛暟锛氬璞℃暟缁�(璇ュ璞′腑鐨勫睘鎬т笉鑳芥槸寮曠敤绫诲瀷锛屽惁鍒欐嫹璐濈殑鍊艰繕鏄細鐩镐簰褰卞搷) + // 鍔熻兘锛氭嫹璐濊瀵硅薄鏁扮粍銆� + shallowCopyList(itemIsObjOfList) { + let tempList = []; + itemIsObjOfList.forEach((item) => { + tempList.push({ ...item }); + }); + return tempList; + }, + + // 鍙傛暟锛氭坊鍔犻灏炬椂闂存暟鎹殑寮傚父鏁版嵁鏁扮粍(鍏冪礌涓哄璞�) + // 鍔熻兘锛氬涓棿寮傚父鍖洪棿鏃堕棿鍜屽�艰繘琛岃ˉ鍏咃紝杩斿洖澶勭悊鍚庣殑缁撴灉 + // 璇︾粏鎻忚堪锛氶亶鍘嗘暟缁勶紝褰撳彂鐜版暟缁勫厓绱犱负绌烘椂锛岃缃鍏冪礌鐨勬椂闂翠负涓婁竴涓厓绱犳椂闂寸殑鍚�10鍒嗛挓锛屽苟鎶婃祿搴﹀�艰缃负null(涓婁釜鍏冪礌鐨勬椂闂翠竴瀹氫笉涓虹┖锛屾棤闇�鍐嶅幓鍒ゆ柇涓婁釜鍏冪礌涓虹┖鐨勬儏鍐�)銆� + addTenMinutes(exceptionDataArr) { + // x杞� 鏃ユ湡鏃堕棿 + let dateList = []; + // y杞� 瓒呮爣娌圭儫娴撳害 + let fumeExceeding = []; + let obj = {}; + for (let i = 0; i < exceptionDataArr.length; i++) { + if (exceptionDataArr[i] == null) { + //x杞存棩鏈熴�傚厓绱犱负null鏃讹紝 璁剧疆璇ュ厓绱犵殑鏃堕棿涓哄墠涓�鍏冪礌鐨勬椂闂村悗10鍒嗛挓 + dateList.push( + dayjs(dateList[dateList.length - 1]) + .add(10, 'minute') + .format('YYYY-MM-DD HH:mm:ss') + ); + // 瓒呮爣娌圭儫娴撳害 + fumeExceeding.push(null); + } else { + //x杞存棩鏈� + dateList.push(exceptionDataArr[i].mvDataTime); + // 瓒呮爣娌圭儫娴撳害 + fumeExceeding.push(exceptionDataArr[i].mvFumeConcentration2); + } + } + obj['dateList'] = dateList; + obj['fumeExceeding'] = fumeExceeding; + return obj; + }, + + // 鍙傛暟锛氬姞涓婂墠鍚庡尯闂寸殑寮傚父鏁版嵁锛屾椂闂村瓧绗︿覆 + // 鍔熻兘锛氬垽鏂璬ata涓槸鍚︽湁璇ユ棩鏈熸椂闂达紝瀛樺湪杩斿洖璇ユ椂闂村搴旂殑娴撳害鍊硷紝鍚﹀垯杩斿洖-1 + findTimeInExceptionData(data, time) { + for (let i = 0; i < data.length; i++) { + if (data[i] == null) { + continue; + } + if (data[i]['mvDataTime'] == time) { + return data[i]['mvFumeConcentration2']; + } + } + return -1; + }, + // 鍙傛暟:鍓嶅尯闂寸殑寮�濮嬫椂闂达紝 鍚庡尯闂寸殑缁撴潫鏃堕棿, 鍔犱笂鍓嶅悗鍖洪棿鐨勬�绘椂闂存鐨勫紓甯告暟鎹殑瀵硅薄鏁扮粍 + // 鍔熻兘锛氭牴鎹紑濮嬪拰缁撴潫鏃堕棿,杩斿洖浠�10鍒嗛挓涓洪棿闅旂殑鏃堕棿鍜屽搴旂殑鍊� + keepContinuousByEachTenMinutes( + intervalStarTime, + intervalEndTime, + headAndTailExceptionData + ) { + let xAxis = []; + let yAxis = []; + let obj = {}; + let current = intervalStarTime; + let tail = dayjs(intervalEndTime) + .add(10, 'minute') + .format('YYYY-MM-DD HH:mm:ss'); + while (current != tail) { + let value = this.findTimeInExceptionData( + headAndTailExceptionData, + current + ); + if (value != -1) { + xAxis.push(current); + yAxis.push(value); + } else { + xAxis.push(current); + yAxis.push(null); + } + current = dayjs(current) + .add(10, 'minute') + .format('YYYY-MM-DD HH:mm:ss'); + } + obj['xAxis'] = xAxis; + obj['yAxis'] = yAxis; + return obj; + }, + + // 鍙傛暟锛氳秴鏍囨暟鎹墠闈㈠尯闂寸殑鏁版嵁 + // 鍔熻兘锛氳繑鍥為櫎鍘绘渶鍚庝竴涓厓绱犵殑鏁扮粍 + removeLastItemOfBeforeData(beforeDataOfExceeding) { + let tempList = []; + if (beforeDataOfExceeding.length == 1) { + return tempList; + } else { + for (let i = 0; i < beforeDataOfExceeding.length - 1; i++) { + tempList.push({ ...beforeDataOfExceeding[i] }); + } + return tempList; + } + }, + + // 璁剧疆option + // 鍙傛暟锛歺杞存椂闂达紝 y杞存补鐑熸祿搴︼紝 寮傚父绫诲埆(0浠h〃瓒呮爣锛�1浠h〃渚涚數寮傚父鍜屾帀绾�), 寮傚父寮�濮嬫椂闂达紝寮傚父缁撴潫鏃堕棿锛屽紓甯稿紑濮嬫椂闂村湪鏁翠釜鍖洪棿鐨勭储寮曚笅鏍囷紝寮傚父缁撴潫鏃堕棿鍦ㄦ暣涓尯闂寸殑绱㈠紩涓嬫爣 + setOption( + xData, + yData, + exceptionCategory, + exceptionBeginTime, + exceptionEndTime, + beginIndex, + endIndex + ) { + this.option = {}; + // 瓒呮爣 + if (exceptionCategory == 0) { + this.option = { + tooltip: {}, + toolbox: { + // 宸ュ叿鏍� + feature: { + // dataZoom: { + // yAxisIndex: 'none' + // }, + // 淇濆瓨涓哄浘鐗� + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + data: xData, + name: '鏃堕棿', + axisLabel: { + formatter: function (value) { + return value.slice(11, -3); + } + } + }, + yAxis: { + type: 'value', + name: 'mg/m鲁' + }, + series: [ + { + name: '娌圭儫娴撳害', + type: 'line', + data: yData.map((item) => { + if (item >= 1) { + return { + value: item, + itemStyle: { + color: 'red' + } + }; + } + return item; + }), + // 鍙樻崲鎸囧畾鏃堕棿鍖洪棿鐨勮儗鏅鑹� + markArea: { + itemStyle: { + color: 'rgba(255, 173, 177, 0.4)' + }, + data: [ + [ + { + name: '瓒呮爣鏃堕棿娈�', + xAxis: exceptionBeginTime + }, + { + xAxis: exceptionEndTime + } + ] + ] + }, + markLine: { + symbol: 'none', + itemStyle: { + // 鍩虹嚎鍏叡鏍峰紡 + normal: { + lineStyle: { + type: 'dashed' + }, + label: { + show: true, + position: 'end', + formatter: '{b}' + } + } + }, + data: [ + { + name: '瓒呮爣', + type: 'average', + yAxis: 1, + lineStyle: { + // color: '#ff0000' + color: 'red' + } + } + ] + } + } + ], + // 鎸囧畾鏃堕棿鍖洪棿鐨勭嚎娈靛彉棰滆壊 + visualMap: { + show: false, + dimension: 0, + pieces: [ + { + lte: beginIndex, + color: 'green' + }, + { + gt: beginIndex, + lte: endIndex, + color: 'red' + }, + { + gt: endIndex, + lte: xData.length - 1, + color: 'green' + } + ] + } + }; + } + // 渚涚數寮傚父鍜屾帀绾� + else if (exceptionCategory == 1) { + this.option = { + tooltip: {}, + toolbox: { + // 宸ュ叿鏍� + feature: { + // dataZoom: { + // // 鍖哄煙缂╂斁 + // yAxisIndex: 'none' + // }, + // 淇濆瓨涓哄浘鐗� + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + data: xData, + name: '鏃堕棿', + axisLabel: { + formatter: function (value) { + return value.slice(11, -3); + } + } + }, + yAxis: { + type: 'value', + name: 'mg/m鲁' + }, + series: [ + { + name: '娌圭儫鏁版嵁', + type: 'line', + data: yData, + markLine: { + silent: true, + data: [ + // 鏍囨敞鏃犳暟鎹椂闂存鐨勬晥鏋滐紝灏嗚繖涓椂闂存鐨勬暟杞撮儴鍒嗗彉涓虹孩鑹� + { + name: '鏃犳暟鎹�', + xAxis: exceptionBeginTime + }, + { + xAxis: exceptionEndTime + } + ], + lineStyle: { + color: 'red' + } + } + } + ] + }; + } + this.banTouch = 0 + }, + + // 鍔熻兘锛氱偣鍑� 鈥樻煡鐪嬭鎯呪�欙紝 鈥樹笅涓�鏉♀�欐寜閽椂浼� 鍏堥�昏緫璁$畻銆傛渶鍚庡睍绀哄浘褰� + drawChartTest() { + this.beforeData = []; + this.afterData = []; + this.allExceptionTimeData = []; + //寮傚父鐨勫紑濮嬫椂闂� 缁撴潫鏃堕棿 + let exceptionBeginTime = this.rowBeginTime; + let exceptionEndTime = this.rowEndTime; + + // beforeAndAfterTime[0]:鍓�30鍒嗛挓鐨勬椂闂寸偣 + // beforeAndAfterTime[1]:鍚�10鍒嗛挓鐨勬椂闂寸偣 + // beforeAndAfterTime[2]:鍚�40鍒嗛挓鐨勬椂闂寸偣 + let beforeAndAfterTime = this.before30AndAfter40( + exceptionBeginTime, + exceptionEndTime + ); + + // 鏋勯�犲紓甯告椂闂村墠鐨勫尯闂存暟鎹姹傚弬鏁� + let paramsBefore = this.requestGetParms( + this.displayData[this.selectedRowIndex].devId, + beforeAndAfterTime[0], + this.displayData[this.selectedRowIndex].beginTime + ); + + // 鏋勯�犲紓甯告椂闂村悗鐨勫尯闂存暟鎹姹傚弬鏁� + let paramsAfter = this.requestGetParms( + this.displayData[this.selectedRowIndex].devId, + beforeAndAfterTime[1], + beforeAndAfterTime[2] + ); + + // 鎶樼嚎鍥惧姞杞戒腑鏁堟灉 + this.chartLoading = true + // 璇锋眰鍓嶅崐娈� + axiosInstanceInstance + .get('/fume/history', { params: paramsBefore }) + .then((result1) => { + this.beforeData = result1.data.data; + // 璇锋眰鍚庡崐娈� + axiosInstanceInstance + .get('/fume/history', { params: paramsAfter }) + .then((result2) => { + this.afterData = result2.data.data; + //淇濆瓨寮傚父鍖洪棿鐨勫�� + let tempArr = []; + // 淇濆瓨寮傚父鍖洪棿鍓嶅悗鐨勫�� + let before = []; + let after = []; + + // 鍒ゆ柇鏄惁鏄緵鐢靛紓甯告垨鎺夌嚎 + if ( + this.rowExceptionType === '1' || + this.rowExceptionType === '2' + ) { + // 閲嶆瀯琛ㄦ牸 缂哄け寮傚父鏁版嵁鑷姩濉厖 + this.setExceptionData(); + + //鐩稿樊鍑犱釜10鍒嗛挓 + const TenMinuteNum = this.diffTenMinutesNum( + exceptionBeginTime, + exceptionEndTime + ); + //鐢╪ull濉厖涓紓甯告棤鏁版嵁鐨勬椂闂� + for (let i = 0; i < TenMinuteNum; i++) { + tempArr.push(null); + } + before = this.shallowCopyList(this.beforeData); + + after = this.shallowCopyList(this.afterData); + // after = this.afterData + } + // 瓒呮爣 + else { + let beforeTemp = this.removeLastItemOfBeforeData( + this.beforeData + ); + // 鍓嶅悗鍖洪棿鍙樉绀鸿窛绂昏秴鏍囧尯闂存椂闂存渶杩戠殑娴撳害灏忎簬1鐨勬椂闂寸偣 + for (let i = beforeTemp.length - 1; i >= 0; i--) { + if (beforeTemp[i].mvFumeConcentration2 >= 1) { + break; + } + if (beforeTemp[i].mvFumeConcentration2 < 1) { + before.unshift(this.beforeData[i]); + } + } + + for (let i = 0; i < this.afterData.length; i++) { + if (this.afterData[i].mvFumeConcentration2 >= 1) { + break; + } + if (this.afterData[i].mvFumeConcentration2 < 1) { + after.unshift(this.afterData[i]); + } + } + tempArr = this.shallowCopyList(this.exceedingData); + } + + // 灏嗗墠鍚庡尯闂存暟鎹� 涓� 寮傚父鍖洪棿鏁版嵁 鍚堝苟 + this.allExceptionTimeData = [...before, ...tempArr, ...after]; + // x杞存棩鏈熸椂闂� + let dateList = []; + // y杞� 瓒呮爣娌圭儫娴撳害 + let fumeExceeding = []; + let timeAndValue = {}; + + // 浠庢坊鍔犱簡棣栦綅鍖洪棿鐨勫紑濮嬪拰缁撴潫鏃堕棿杩涜閬嶅巻 淇濊瘉鏃堕棿浠�10鍒嗛挓涓洪棿闅� + timeAndValue = this.keepContinuousByEachTenMinutes( + beforeAndAfterTime[0], + beforeAndAfterTime[2], + this.allExceptionTimeData + ); + + dateList = timeAndValue['xAxis']; + fumeExceeding = timeAndValue['yAxis']; + + // 鎻愬彇寮傚父璧峰鏃堕棿鐐瑰湪鏁翠釜鍖洪棿鍐呯殑鏁版嵁绱㈠紩 + let startIndex = dateList.findIndex( + (item) => item === exceptionBeginTime + ); + let endIndex = dateList.findIndex( + (item) => item === exceptionEndTime + ); + + // 渚涚數寮傚父鍜屾帀绾挎儏鍐� 瓒呮爣鎯呭喌 + if ( + this.rowExceptionType === '1' || + this.rowExceptionType === '2' + ) { + this.setOption( + dateList, + fumeExceeding, + 1, + exceptionBeginTime, + exceptionEndTime, + startIndex, + endIndex + ); + } else { + // 瓒呮爣鎯呭喌 + this.setOption( + dateList, + fumeExceeding, + 0, + exceptionBeginTime, + exceptionEndTime, + startIndex, + endIndex + ); + } + this.chartLoading = false + }); + }); + }, + + getDeviceInfo() { + // 绾ц仈涓嬫媺妗嗘暟鎹� 浠庢帴鍙d腑鍔ㄦ�佽幏鍙� + axiosInstanceInstance.get('/fume/device').then((result) => { + this.deviceInfo = result.data.data; + // 鑾峰彇鍒版�荤殑搴楅摵鏁伴噺 + this.shopsTotal = result.data.data.length; + this.deviceInfo.forEach((item) => { + this.optionsShop[this.optionsShop.length] = { + value: item.diName, + label: item.diName, + children: [ + { + value: item.diCode, + label: item.diCode + } + ] + }; + }); + }); + }, + exportDom() { + // 瀵煎嚭涓篍xcel鏂囦欢 + const fields = [ + 'devId', + 'exceptionType', + 'region', + 'beginTime', + 'endTime' + ]; + const itemsFormatted = this.abnormalData.map((item) => { + const newItem = {}; + fields.forEach((field) => { + newItem[field] = item[field]; + }); + return newItem; + }); + // 鍒涘缓xlsx瀵硅薄 + const xls = XLSX.utils.json_to_sheet(itemsFormatted); + // 缂栬緫琛ㄥご琛� 淇敼琛ㄥご + xls['A1'].v = '璁惧缂栧彿'; + xls['B1'].v = '寮傚父绫诲瀷'; + xls['C1'].v = '鍦板尯'; + xls['D1'].v = '寮�濮嬫椂闂�'; + xls['E1'].v = '缁撴潫鏃堕棿'; + // 鍒涘缓workbook锛屽苟鎶妔heet娣诲姞杩涘幓 + const wb = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(wb, xls, 'Sheet1'); + // 灏唚orkbook杞负浜岃繘鍒秞lsx鏂囦欢骞朵笅杞� + XLSX.writeFile(wb, '鍒嗘瀽鏁版嵁.xlsx'); + }, + + getAbnormalDataByClick(val) { + this.abnormalData = val; + this.total = this.abnormalData.length; + // 榛樿鏄剧ず绗竴椤� + this.handleCurrentChange(1); + }, + + // 鏍规嵁寮傚父绫诲瀷杩斿洖搴楅摵鍚嶇О鍜岃澶囩紪鍙� + // 姣斿娌圭儫瓒呮爣瀵瑰簲鐨勬墍鏈夊簵閾哄悕绉板拰璁惧缂栧彿锛堝凡鍘婚櫎閲嶅鐨勫簵閾哄悕锛� + getShopNames() { + axiosInstanceInstance + .get('/fume/shopname', { + params: { + exceptionType: '0', + beginTime: this.beginTime, + endTime: this.endTime + } + }) + .then((result) => { + this.exception0 = result.data.data; + }); + axiosInstanceInstance + .get('/fume/shopname', { + params: { + exceptionType: '1', + beginTime: this.beginTime, + endTime: this.endTime + } + }) + .then((result) => { + this.exception1 = result.data.data; + }); + axiosInstanceInstance + .get('/fume/shopname', { + params: { + exceptionType: '2', + beginTime: this.beginTime, + endTime: this.endTime + } + }) + .then((result) => { + this.exception2 = result.data.data; + }); + }, + + // 椤甸潰鍔犺浇鏃堕粯璁ゅ睍绀�7澶╁紓甯歌〃鏁版嵁 + getRecentSevenDays() { + // 缁欑骇鑱旈�夋嫨鍣ㄨ缃粯璁ょ殑閫夋嫨椤� + this.devId = ['浠樺皬濮愬湪鎴愰兘', 'qinshi_31010320210010']; + let params = {}; + params['beginTime'] = this.beginTime; + params['endTime'] = this.endTime; + axiosInstanceInstance + .get('/fume/abnormalone', { params: params }) + .then((response) => { + if (response.data.data.length == 0) { + ElMessage('璇ユ椂娈垫棤鏁版嵁'); + return; + } + // 淇濆瓨杩斿洖鐨� + this.abnormalData = response.data.data; + // 鍒嗛〉 + this.total = this.abnormalData.length; + // 榛樿鏄剧ず绗竴椤� + this.handleCurrentChange(1); + this.loading = false; + }); } } - -} +}; </script> +<style scoped> + +.header-container { + display: flex; + margin-left: 20px; + /* flex-wrap: wrap; + align-items: center; */ +} +.ellipsis { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.iconExcel { + font-size: 25px; + margin-left: 20px; + bottom: -6px; +} + +/* 鍙紶鏍囩澶村彉涓哄彲鐐瑰嚮鐘舵�� */ +.clickable { + cursor: pointer; +} +.card-header { + margin: 0; +} + +body { + margin: 0; +} +.exception-divider-rowline { + margin: 10px 0px; +} +/* 寮傚父鍒嗘瀽鏁版嵁涓庢寜閽� */ +.exception-container { + display: flex; +} +.example-showcase .el-loading-mask { + z-index: 9; +} + +.scrollbar-demo-item { + display: flex; + align-items: center; + justify-content: center; + height: 20px; + margin: 10px; + text-align: center; + border-radius: 4px; + background: var(--el-color-primary-light-9); + color: var(--el-color-primary); +} +.collapse-header { + margin-left: 5px; + font-size: 18px; +} +.collapse-header-text { + margin-top: 5px; + font-size: 14px; + color: gray; +} + +.box-card-label { + font-size: 14px; + white-space: nowrap; +} +:deep().el-card { + border-radius: 9px; +} +/* 鈥樻煡鐪嬭鎯呪�� 鐨勫脊鍑烘楂樺害璋冩暣 */ +:deep().el-dialog { + height: 98%; + /* 涓嶅嚭鐜版粴鍔ㄦ潯 */ + overflow-y: hidden; + border-radius: 9px; +} +.table-page { + margin-left: 20px; +} + +.table-text { + font-size: 18px; + margin: 5px 0px 10px 20px; +} +.text-blank { + margin-right: 10px; + color: #000000; +} +/* 搴楅摵鍚嶉�夋嫨鏂囨湰 */ +.describe-info { + margin-top: 5px; + font-weight: bold; + white-space: nowrap; +} +/* 鏃堕棿閫夋嫨鏂囨湰 */ +.describe-time-text { + margin-left: 30px; + margin-top: 5px; + font-weight: bold; +} + +/* 寮傚父琛ㄦ牸涓嬫爣绛句腑鐨勬暟缁� */ +.table-line-num { + font-weight: bold; + color: black; +} +.button_info.el-button_inner { + text-align: left; +} +.el-collapse { + margin-left: 20px; +} +:deep().el-collapse .el-collapse-item__content { + padding-bottom: 0px; +} +.box-card { + height: 190px; +} + +.sub-box-card { + height: 100px; + border: 0px; +} + +.mx-1 { + margin-bottom: 0px; +} +.dialog-button-position { + display: flex; + justify-content: right; + margin-bottom: 10px; +} + +:deep().el-table__row .exceeding-row{ + background-color: #F53F3F; +} +:deep().el-table__row .abnormal-power-supply{ + background-color: #FDF4BF; +} +:deep().el-table__row .disconnect{ + background-color: #F7BA1E; +} + + +.el-table { + color: #000000; +} +/* 琛ㄦ牸鐨勫唴杈硅窛 */ +:deep().el-table .el-table__cell { + padding: 2px; +} + + +/* 琛ㄦ牸涓殑鎸夐挳瀹藉害閾烘弧 */ +.table-button { + width: 100%; +} + +</style> + -- Gitblit v1.9.3