src/api/exportExcel/requetsApi.js
@@ -8,5 +8,11 @@ */ fetchAllData(argsObj){ return $http.get('dust/analysisall',{params:argsObj}); }, fetchAlSiteData(argsObj){ return $http.get('dust/historyall',{params:argsObj}); } } src/api/index.js
@@ -2,7 +2,8 @@ import { setInterceptors } from './config'; // const url = 'http://47.100.191.150:9031/'; const url = 'http://192.168.1.4:8081/'; // const url = 'http://192.168.1.4:8081/'; const url = 'http://localhost:8081/'; //é£ç¾½ç管 const $http = axios.create({ src/components/layout/AppAside.vue
@@ -12,6 +12,7 @@ ' æ°æ®é£é©æ¨¡å', 'æ°æ®é£é©æå', 'é£è¡å·¡æ£', 'ç«ç¹å®¡æ ¸è¾ å©', 'å岿°æ®ç®¡ç', 'æ°æ®æ¥å ¥ç®¡ç', 'ä¸å¡æ¥è¡¨', @@ -50,9 +51,12 @@ <el-link href="/hdata" class="logo" > <!-- <img src="@/assets/companylogo.png" alt="" /> --> <h1>å¨çº¿çæµæ°æ®è´¨éè¯ä¼°ä¸é£é©åæ</h1> </el-link> </el-space> <div class="line"> </div> </el-row> <el-scrollbar :height="menuHeight"> @@ -84,9 +88,9 @@ é£è¡å·¡æ£ </el-menu-item> <el-menu-item index="testdata" @click="selected = optionClick[2]"> <el-menu-item index="testdata" @click="selected = optionClick[3]"> <el-icon><i-ep-Bell /></el-icon> å¼å¸¸æµè¯ ç«ç¹å®¡æ ¸è¾ å© </el-menu-item> </el-sub-menu> @@ -98,32 +102,32 @@ </template> <el-menu-item index="hdata" @click="selected = optionClick[3]"> <el-menu-item index="hdata" @click="selected = optionClick[4]"> <el-icon><i-ep-Histogram /></el-icon> å岿°æ®ç®¡ç </el-menu-item> <el-menu-item index="management" @click="selected = optionClick[4]"> <!-- <el-menu-item index="management" @click="selected = optionClick[5]"> <el-icon><i-ep-Histogram /></el-icon> æ°æ®æ¥å ¥ç®¡ç </el-menu-item> <el-menu-item index="report" @click="selected = optionClick[5]"> <el-menu-item index="report" @click="selected = optionClick[6]"> <el-icon><i-ep-Histogram /></el-icon> ä¸å¡æ¥è¡¨ </el-menu-item> </el-menu-item> --> </el-sub-menu> <el-sub-menu index="4"> <!-- <el-sub-menu index="4"> <template #title> <el-icon><i-ep-DataLine /></el-icon> <span class="parent-title">é 置管ç</span> </template> <el-menu-item index="setting" @click="selected = optionClick[6]"> <el-menu-item index="setting" @click="selected = optionClick[7]"> <el-icon><i-ep-Histogram /></el-icon> æ°æ®æ¥å ¥é ç½® </el-menu-item> </el-sub-menu> </el-sub-menu> --> </el-scrollbar> </el-menu> @@ -184,4 +188,10 @@ font-weight: bold; font-size: 18px; } // .line { // width: 180px; // border: 1px solid rgb(255,255,255,0.2); // margin: 0px; // padding: 0px; // } </style> src/main.ts
@@ -14,7 +14,8 @@ const app = createApp(App) axios.defaults.baseURL = 'http://192.168.1.4:8081' // axios.defaults.baseURL = 'http://192.168.1.4:8081' axios.defaults.baseURL = 'http://localhost:8081' app.config.globalProperties.$http = axios app.use(createPinia()) src/router/index.ts
@@ -28,7 +28,7 @@ { path:"/hdata", name:'hdata', component: () => import('@/views/origin_data/TableData.vue') component: () => import('@/views/origin_data/HistoryData.vue') }, // é£è¡å·¡æ£ @@ -38,11 +38,11 @@ component: () => import('@/views/exception/FlightInspection.vue') }, // å¼å¸¸æµè¯ // ç«ç¹å®¡æ ¸è¾ å© { path:"/testdata", name:'testdata', component: () => import('@/views/exception/ExceptionTest.vue') component: () => import('@/views/exception/SiteAuditAssistance.vue') }, // æ°æ®æ¥å ¥é ç½® src/sfc/AreaAndmonitorType.vue
@@ -68,9 +68,10 @@ width: 100px; } .el-space { margin-top: 5px; /* margin-top: 5px; */ } .text { color: black; font-size: 16px; } </style> src/sfc/DustExceptionText.vue
@@ -10,7 +10,8 @@ siteName: String, exceptionType: String, beginTime: String, endTime: String endTime: String, }, emits: ['submitExceptionData'], data() { @@ -34,6 +35,7 @@ .then((result) => { //å°è¿åçç»æä¼ éç»ç¶ç»ä»¶ this.$emit('submitExceptionData', result.data.data); // this.$emit('subloading',false) }); } } @@ -48,4 +50,7 @@ .text { color: #000000; } // .text:hover{ // color: #2876aa; // } </style> src/sfc/ExceptionType.vue
@@ -32,8 +32,14 @@ // this.exceptionType = response.data.data response.data.data.forEach(item => { this.exceptionType.push(item.exceptionType) }); console.log(this.exceptionType); let a = ['0','1','2','3','4','5','6','7'] a.forEach(item=>{ if(this.exceptionType.indexOf(item) == -1){ this.exceptionType.push(item) } }) }) }, handleCheckAllChange (val) { src/sfc/InputSearch.vue
@@ -105,6 +105,7 @@ .text { font-weight: bold; margin-top: 5px; font-size: 16px; } .el-autocomplete { margin-top: 5px; src/sfc/TimeSelect.vue
@@ -59,18 +59,20 @@ </template> <style> .demonstration { margin-left: 15px; margin-top: 5px; font-weight: bold; white-space: nowrap; } .block { display: flex; justify-content: center; width: 90%; white-space: nowrap; } .demonstration { margin-left: 15px; margin-top: 5px; font-weight: bold; white-space: nowrap; } .pick-date { width: 100%; margin-top: 5px; src/sfc/TimeSelectWithShortCuts.vue
@@ -74,18 +74,18 @@ <template> <div class="block"> <div class="demonstration">èµ·æ¢æ¶é´ï¼</div> <el-date-picker v-model="time" type="datetimerange" :shortcuts="shortcuts" range-separator="~" start-placeholder="å¼å§æ¶é´" end-placeholder="ç»ææ¶é´" value-format="YYYY-MM-DD HH:mm:ss" @change="$emit('submitTime', time)" class="pick-date" /> <span class="demonstration">èµ·æ¢æ¶é´ï¼</span> <el-date-picker v-model="time" type="datetimerange" :shortcuts="shortcuts" range-separator="~" start-placeholder="å¼å§æ¶é´" end-placeholder="ç»ææ¶é´" value-format="YYYY-MM-DD HH:mm:ss" @change="$emit('submitTime', time)" class="pick-date" /> </div> </template> @@ -96,8 +96,9 @@ } .demonstration { margin-left: 15px; margin-top: 5px; /* margin-top: 5px; */ font-weight: bold; font-size: 16px; } .pick-date { src/views/exception/FlightInspection.vue
@@ -15,11 +15,8 @@ import dayjs from 'dayjs'; export default { components: { ExceptionType, InputSearch, TimeSelectWithShortCuts, DustExceptionText, DustLineChart, AreaAndmonitorType }, data() { @@ -103,6 +100,8 @@ afterButton: false, // æçº¿å¾ lineChart: false, // å¼å¸¸ç«ç¹ååææ¬ text:false }, @@ -1358,26 +1357,11 @@ <el-form-item > <AreaAndmonitorType ></AreaAndmonitorType> </el-form-item> <el-form-item> <InputSearch :isNeedDefaultSite="0" @submit-value="(n) => (form.name = n)" @submit-site-Nums="(n) => (siteTotal = n)" > </InputSearch> </el-form-item> <el-form-item> <TimeSelectWithShortCuts @submit-time="giveTime"></TimeSelectWithShortCuts> </el-form-item> <el-form-item> <ExceptionType @submit-value="(n) => form.exceptionName = n" ></ExceptionType> </el-form-item> </div> <div class="head-container-search"> @@ -1447,7 +1431,7 @@ </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <div class="card-exception-buttom" v-loading="loading.text" > <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" @@ -1455,7 +1439,7 @@ :begin-time="beginTime" :end-time="endTime" @submit-exception-data="getAbnormalDataByClick" @subloading="(n)=>loading.text=n" v-for="(item, index) in exception.exception4" :key="item" >{{ item.name }} @@ -1514,7 +1498,7 @@ </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <div class="card-exception-buttom" v-loading="loading.text"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" @@ -1581,7 +1565,7 @@ </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <div class="card-exception-buttom" v-loading="loading.text"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" @@ -1648,7 +1632,7 @@ </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <div class="card-exception-buttom" v-loading="loading.text"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" @@ -1719,7 +1703,7 @@ </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <div class="card-exception-buttom" v-loading="loading.text"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" @@ -1781,7 +1765,7 @@ </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <div class="card-exception-buttom" v-loading="loading.text"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" @@ -1843,7 +1827,7 @@ </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <div class="card-exception-buttom" v-loading="loading.text"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" @@ -1974,7 +1958,7 @@ </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <div class="card-exception-buttom" v-loading="loading.text"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" @@ -2005,241 +1989,6 @@ </el-col> </el-row> <el-row> <el-col v-show="!isNoData"> <el-table ref="table" :data="displayData" :height="tableHeight" highlight-current-row="true" size="default" v-loading="loading.tableLoading" border > <el-table-column type="index" label="åºå·" width="60px" align="center" fixed :index="indexMethod1" /> <el-table-column prop="name" label="ç«ç¹åç§°" show-overflow-tooltip /> <el-table-column prop="mnCode" label="设å¤ç¼å·" align="center" show-overflow-tooltip /> <el-table-column prop="exception" label="å¼å¸¸ç±»å" align="center" show-overflow-tooltip /> <el-table-column prop="region" label="åºå" align="center" show-overflow-tooltip /> <el-table-column prop="beginTime" label="å¼å§æ¶é´" align="center" show-overflow-tooltip /> <el-table-column prop="endTime" label="ç»ææ¶é´" align="center" show-overflow-tooltip /> <el-table-column prop="typename" label="åºæ¯" align="center" show-overflow-tooltip /> <el-table-column prop="address" label="å°å" align="center" show-overflow-tooltip /> <el-table-column prop="dutyCompany" label="è¿ç»´å" align="center" show-overflow-tooltip /> <el-table-column label="æä½" align="center"> <template #default="{ row }"> <el-button type="primary" class="table-button" @click="showDialog(row)" >æ¥ç详æ </el-button > </template> </el-table-column> </el-table> <el-pagination ref="h4" background layout="total, sizes, prev, pager, next, jumper" v-model:current-page="currentPage" v-model:page-size="pageSize" :total="total" :page-sizes="[10, 20, 50, 100]" @size-change="handleSizeChange" @current-change="handleCurrentChange" > </el-pagination> </el-col> </el-row> <el-empty v-show="isNoData" :image-size="200" /> <el-dialog v-model="dialogTableVisible" draggable align-center height="300px"> <!-- 头 --> <template #header> <div class="diag-head"> <div class="diag-head-text"> <div> <span class="diag-head-text1">ç«ç¹åç§°ï¼</span >{{ tableCurrentRowData.name }} </div> <div> <span class="diag-head-text1">å¼å¸¸ç±»åï¼</span> <span v-if="tableCurrentRowData.exceptionType == '0'" >æçµææç½</span > <span v-else-if="tableCurrentRowData.exceptionType == '1'" >æ°æ®è¶ ä½</span > <span v-else-if="tableCurrentRowData.exceptionType == '2'">è¶ æ </span> <span v-else-if="tableCurrentRowData.exceptionType == '3'" >æ°æ®é¿æ¶é´æ æ³¢å¨</span > <span v-else-if="tableCurrentRowData.exceptionType == '4'" >é级çªåå¼å¸¸</span > <span v-else-if="tableCurrentRowData.exceptionType == '5'" >临è¿è¶ æ å¼å¸¸</span > <span v-else-if="tableCurrentRowData.exceptionType == '6'" >åæ¥è¶ æ æ¬¡æ°ä¸´çå¼å¸¸</span > <span v-else-if="tableCurrentRowData.exceptionType == '7'" >æ»å¨å¹³åå¼å¼å¸¸</span > </div> <div> <span class="diag-head-text1">å¼å¸¸æ¶é´æ®µï¼</span >{{ tableCurrentRowData.beginTime }} ~ {{ tableCurrentRowData.endTime }} </div> </div> <div class="chart-jump-button"> <el-button type="danger" :loading="loading.preButton" :disabled="dialog.isPreCantouch || flag.banTouch" @click="getPreviousRowData" >䏿¡å¼å¸¸</el-button > <el-button type="danger" :loading="loading.afterButton" :disabled="dialog.isNextCantouch || flag.banTouch" @click="getNextRowData" >䏿¡å¼å¸¸</el-button > </div> </div> </template> <!-- :option="dialog.option" --> <!-- å¾å½¢ --> <DustLineChart :option="dialog.option" :is-open-dialog="dialogTableVisible" v-loading="loading.lineChart" ></DustLineChart> <!-- è¡¨æ ¼ --> <div> <el-table :data="dialog.historyData" size="default" height="200" border> <el-table-column type="index" label="åºå·" width="60px" align="center" fixed :index="indexMethod2" ></el-table-column> <el-table-column fixed prop="name" label="ç«ç¹åç§°" show-overflow-tooltip /> <el-table-column prop="mnCode" label="设å¤ç¼å·" align="center" show-overflow-tooltip /> <el-table-column prop="dutyCompany" label="è¿ç»´å" align="center" show-overflow-tooltip /> <el-table-column prop="lst" label="ééæ¶é´" align="center" show-overflow-tooltip /> <el-table-column prop="dustValue" label="é¢ç²ç©æµåº¦(mg/m³)" align="center" show-overflow-tooltip /> </el-table> </div> <template #footer> <el-tag type="success" class="mx-1" effect="dark" round ><span class="table-line-lable" v-show="tableCurrentRowData.exceptionType == '0'" >ç¼ºå¤±æ°æ®ï¼ </span> <span v-show=" tableCurrentRowData.exceptionType == '1' || tableCurrentRowData.exceptionType == '2' || tableCurrentRowData.exceptionType == '3' || tableCurrentRowData.exceptionType == '4' " >å¼å¸¸æ°æ®ï¼</span > <span class="table-line-num">{{ dialog.exceptionTotal }}æ¡</span> <span v-show=" tableCurrentRowData.exceptionType === '0' " > (é»è¾è®¡ç®)</span > </el-tag> </template> </el-dialog> </template> <style lang="scss" scoped> src/views/exception/SiteAuditAssistance.vue
ÎļþÃû´Ó src/views/exception/ExceptionTest.vue ÐÞ¸Ä @@ -2,7 +2,6 @@ import InputSearch from '../../sfc/InputSearch.vue'; import ExceptionType from '../../sfc/ExceptionType.vue'; import TimeSelectWithShortCuts from '../../sfc/TimeSelectWithShortCuts.vue'; import DustExceptionText from '../../sfc/DustExceptionText.vue'; import { useFetch } from '../../utils/fetch.js'; import { useCommonFunction } from '../../utils/common.js'; import AreaAndmonitorType from '../../sfc/AreaAndmonitorType.vue' @@ -18,7 +17,7 @@ ExceptionType, InputSearch, TimeSelectWithShortCuts, DustExceptionText, DustLineChart, AreaAndmonitorType }, @@ -181,31 +180,17 @@ } }, mounted() { // æµè¯ç»åå¼å½æ° // let param = { // siteName: 'éå±±åºéå±±æ°åJSC1-0401åå 1-11-01å°å项ç®09', // beginTime: '2023-07-01 00:00:00', // endTime: '2023-07-10 00:00:00' // }; // this.backData = this.request('/dust/history1', param); // console.log('å岿°æ®ä¸ºï¼', this.backData.value); this.backExceptionDataAWeekAgo(); // this.calTableHeight(); this.calTableHeight(); // æ¥è¯¢æ¶é´æ®µçåå¼å¸¸çç«ç¹ï¼æ¥è¯¢è¯¥æ¶é´åºé´çåå¼å¸¸æ°é this.getShopNames(); // this.exception.exception0 = this.getSiteNameByExceptionType('0',this.beginTime,this.endTime) // console.log('å¼å¸¸æ°æ®ä¸ºï¼',this.exception.exception0); }, methods: { // getExceptionSiteNum(){ // this.$http.get('/dust/exceptionsitenum').then(result => { // this.exceptionSiteNum = result.data.data.length // }) // }, /** * descriptionï¼ç¹å»å¼å¸¸ç«ç¹ååæ¶ è¿åçæ°æ® * @paramï¼ @@ -1300,10 +1285,9 @@ calTableHeight() { const h1 = this.$refs.h1.$el.offsetHeight; const h2 = this.$refs.h2.$el.offsetHeight; const h3 = this.$refs.h3.$el.offsetHeight; const h4 = this.$refs.h4.$el.offsetHeight; // å ¶ä¸ä¸ä¸ª40æ¯çåçæ»å¤è¾¹è· this.tableHeight = `calc(100vh - ${h1}px - ${h2}px - ${h3}px - ${h4}px - 40px - var(--el-main-padding) * 2)`; this.tableHeight = `calc(100vh - ${h1}px - ${h2}px - ${h4}px - 100px - var(--el-main-padding) * 2)`; }, // 页大尿¹åæ¶è§¦å @@ -1395,615 +1379,6 @@ </el-row> </el-row> <el-row ref="h3"> <el-col> <el-card> <template #header> <div class="card-header">å¼å¸¸åæ</div> </template> <el-row :gutter="20" class="card-row" > <el-col :span="6"> <div class="card-content-unnormal"> <!-- æ 头 --> <div class="card-text1"> <image class="card-header-image"></image> <span class="card-header-text">é级çªåå¼å¸¸</span> </div> <div class="card-content-text"> <el-scrollbar> <span class="card-exceptionname-text1">å¼å¸¸ç«ç¹å æ¯:</span> <span>{{ exception.exception4.length }} /{{ siteTotal }}</span> <span> ({{ ((exception.exception4.length / siteTotal) * 100).toFixed( 1 ) }}%)</span > <div class="card-exceptionname-text2" >å¼å¸¸æ°å æ¯:{{ ( (exception.exception4Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num )) * 100 ).toFixed(1) }}%</div > </el-scrollbar> </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" exception-type="4" :begin-time="beginTime" :end-time="endTime" @submit-exception-data="getAbnormalDataByClick" v-for="(item, index) in exception.exception4" :key="item" >{{ item.name }} <span v-if="index < exception.exception4.length - 1" class="text-blank" >,</span > </DustExceptionText> </el-scrollbar> </div> <!-- ç»æ --> </div> </el-col> <el-col :span="6"> <div class="card-content-unnormal"> <!-- æ 头 --> <div class="card-text1"> <image class="card-header-image"></image> <span class="card-header-text">临è¿è¶ æ å¼å¸¸</span> </div> <div class="card-content-text"> <el-scrollbar> <span class="card-exceptionname-text1">å¼å¸¸ç«ç¹å æ¯:</span> <span>{{ exception.exception5.length }} /{{ siteTotal }}</span> <span> ({{ ((exception.exception5.length / siteTotal) * 100).toFixed( 1 ) }}%)</span > <div class="card-exceptionname-text2" >å¼å¸¸æ°å æ¯:{{ ( (exception.exception5Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num )) * 100 ).toFixed(1) }}%</div > </el-scrollbar> </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" exception-type="5" :begin-time="beginTime" :end-time="endTime" @submit-exception-data="getAbnormalDataByClick" v-for="(item, index) in exception.exception5" :key="item" >{{ item.name }} <span v-if="index < exception.exception5.length - 1" class="text-blank" >,</span > </DustExceptionText> </el-scrollbar> </div> <!-- ç»æ --> </div> </el-col> <el-col :span="6"> <div class="card-content-unnormal"> <!-- æ 头 --> <div class="card-text1"> <image class="card-header-image"></image> <span class="card-header-text">åæ¥è¶ æ æ¬¡æ°ä¸´çå¼å¸¸</span> </div> <div class="card-content-text"> <el-scrollbar> <span class="card-exceptionname-text1">å¼å¸¸ç«ç¹å æ¯:</span> <span>{{ exception.exception6.length }} /{{ siteTotal }}</span> <span> ({{ ((exception.exception6.length / siteTotal) * 100).toFixed( 1 ) }}%)</span > <div class="card-exceptionname-text2" >å¼å¸¸æ°å æ¯:{{ ( (exception.exception6Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num )) * 100 ).toFixed(1) }}%</div > </el-scrollbar> </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" exception-type="6" :begin-time="beginTime" :end-time="endTime" @submit-exception-data="getAbnormalDataByClick" v-for="(item, index) in exception.exception6" :key="item" >{{ item.name }} <span v-if="index < exception.exception6.length - 1" class="text-blank" >,</span > </DustExceptionText> </el-scrollbar> </div> <!-- ç»æ --> </div> </el-col> <el-col :span="6"> <div class="card-content-unnormal"> <!-- æ 头 --> <div class="card-text1"> <image class="card-header-image"></image> <span class="card-header-text">ååè¶å¿å¼å¸¸</span> </div> <div class="card-content-text"> <el-scrollbar> <span class="card-exceptionname-text1">å¼å¸¸ç«ç¹å æ¯:</span> <span>{{ exception.exception7.length }} /{{ siteTotal }}</span> <span> ({{ ((exception.exception7.length / siteTotal) * 100).toFixed( 1 ) }}%)</span > <div class="card-exceptionname-text2" >å¼å¸¸æ°å æ¯:{{ ( (exception.exception7Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num )) * 100 ).toFixed(1) }}%</div > </el-scrollbar> </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" exception-type="7" :begin-time="beginTime" :end-time="endTime" @submit-exception-data="getAbnormalDataByClick" v-for="(item, index) in exception.exception7" :key="item" >{{ item.name }} <span v-if="index < exception.exception7.length - 1" class="text-blank" >,</span > </DustExceptionText> </el-scrollbar> </div> <!-- ç»æ --> </div> </el-col> </el-row> <el-row :gutter="20" > <el-col :span="6"> <div class="card-content-normal"> <!-- æ 头 --> <div class="card-text1"> <image class="card-header-image"></image> <span class="card-header-text">æµåº¦è¶ æ </span> </div> <div class="card-content-text"> <el-scrollbar> <span class="card-exceptionname-text1">å¼å¸¸ç«ç¹å æ¯:</span> <span>{{ exception.exception2.length }} /{{ siteTotal }}</span> <span> ({{ ((exception.exception2.length / siteTotal) * 100).toFixed( 1 ) }}%)</span > <div class="card-exceptionname-text2" >å¼å¸¸æ°å æ¯:{{ ( (exception.exception2Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num )) * 100 ).toFixed(1) }}%</div > </el-scrollbar> </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" exception-type="2" :begin-time="beginTime" :end-time="endTime" @submit-exception-data="getAbnormalDataByClick" v-for="(item, index) in exception.exception2" :key="item" >{{ item.name }} <span v-if="index < exception.exception2.length - 1" class="text-blank" >,</span > </DustExceptionText> </el-scrollbar> </div> <!-- ç»æ --> </div> </el-col> <el-col :span="6" ><div class="card-content-normal"> <!-- æ 头 --> <div class="card-text1"> <image class="card-header-image"></image> <span class="card-header-text">æ°æ®ç¼ºå¤±å¼å¸¸</span> </div> <div class="card-content-text"> <el-scrollbar> <span class="card-exceptionname-text1">å¼å¸¸ç«ç¹å æ¯:</span> <span>{{ exception.exception0.length }} /{{ siteTotal }}</span> <span> ({{ ((exception.exception0.length / siteTotal) * 100).toFixed( 1 ) }}%)</span > <div class="card-exceptionname-text2" >å¼å¸¸æ°å æ¯:{{ ( (exception.exception0Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num)) * 100 ).toFixed(1) }}%</div > </el-scrollbar> </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" exception-type="0" :begin-time="beginTime" :end-time="endTime" @submit-exception-data="getAbnormalDataByClick" v-for="(item, index) in exception.exception0" :key="item" >{{ item.name }} <span v-if="index < exception.exception0.length - 1" class="text-blank" >,</span > </DustExceptionText> </el-scrollbar> </div> <!-- ç»æ --> </div> </el-col> <el-col :span="6"> <div class="card-content-normal"> <!-- æ 头 --> <div class="card-text1"> <image class="card-header-image"></image> <span class="card-header-text">æ°æ®è¶ ä½</span> </div> <div class="card-content-text"> <el-scrollbar> <span class="card-exceptionname-text1">å¼å¸¸ç«ç¹å æ¯:</span> <span>{{ exception.exception1.length }} /{{ siteTotal }}</span> <span> ({{ ((exception.exception1.length / siteTotal) * 100).toFixed( 1 ) }}%)</span > <div class="card-exceptionname-text2" >å¼å¸¸æ°å æ¯:{{ ( (exception.exception1Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num)) * 100 ).toFixed(1) }}%</div > </el-scrollbar> </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" exception-type="1" :begin-time="beginTime" :end-time="endTime" @submit-exception-data="getAbnormalDataByClick" v-for="(item, index) in exception.exception1" :key="item" >{{ item.name }} <span v-if="index < exception.exception1.length - 1" class="text-blank" >,</span > </DustExceptionText> </el-scrollbar> </div> <!-- ç»æ --> </div></el-col > <el-col :span="6" ><div class="card-content-normal"> <!-- æ 头 --> <div class="card-text1"> <image class="card-header-image"></image> <span class="card-header-text">æ°æ®é¿æ¶æ®µæ æ³¢å¨</span> </div> <div class="card-content-text"> <el-scrollbar> <span class="card-exceptionname-text1">å¼å¸¸ç«ç¹å æ¯:</span> <span>{{ exception.exception3.length }} /{{ siteTotal }}</span> <span> ({{ ((exception.exception3.length / siteTotal) * 100).toFixed( 1 ) }}%)</span > <div class="card-exceptionname-text2" >å¼å¸¸æ°å æ¯:{{(100- ((exception.exception0Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num)) * 100 ) - ((exception.exception1Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num)) * 100 ) - ((exception.exception2Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num)) * 100 ) - ((exception.exception4Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num)) * 100 )- ((exception.exception5Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num)) * 100 )- ((exception.exception6Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num)) * 100 )- ((exception.exception7Num / (exception.exception0Num + exception.exception1Num + exception.exception2Num + exception.exception3Num+ exception.exception4Num+ exception.exception5Num+ exception.exception6Num+ exception.exception7Num)) * 100 ) ).toFixed(1) }}%</div > </el-scrollbar> </div> <hr /> <!-- å¼å¸¸çåºéºåå --> <div class="card-exception-buttom"> <el-scrollbar max-height="90px"> <DustExceptionText :site-name="item.name" exception-type="3" :begin-time="beginTime" :end-time="endTime" @submit-exception-data="getAbnormalDataByClick" v-for="(item, index) in exception.exception3" :key="item" >{{ item.name }} <span v-if="index < exception.exception3.length - 1" class="text-blank" >,</span > </DustExceptionText> </el-scrollbar> </div> <!-- ç»æ --> </div> </el-col> </el-row> </el-card> </el-col> </el-row> <el-row> <el-col v-show="!isNoData"> src/views/line_graph/DataRiskModel.vue
@@ -4,11 +4,16 @@ import InputSearch from '../../sfc/InputSearch.vue'; import AreaAndmonitorType from '../../sfc/AreaAndmonitorType.vue'; import DustRadarChart from './components/DustRadarChart.vue'; // import DustRadarChart from './components/DustRadarChart.vue'; import exceptionApi from '@/api/exceptionApi.js'; import { useWindowSize } from '@vueuse/core'; import LineChart from './components/LineChart.vue' const DustRadarChart = defineAsyncComponent(() => import('./components/DustRadarChart.vue') ) import dayjs from 'dayjs'; export default { @@ -153,11 +158,13 @@ * @returnsï¼ */ getDaysDifference(startDate, endDate) { var start = new Date(startDate); var end = new Date(endDate); var timeDiff = Math.abs(end.getTime() - start.getTime()); var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); return diffDays; // var start = new Date(startDate); // var end = new Date(endDate); // var timeDiff = Math.abs(end.getTime() - start.getTime()); // var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); return dayjs(endDate).diff(startDate,'day') + 1; }, /** * ä»åææ°æ®æ°ç»ä¸æ¾å°æå°åå¤§å¼ @@ -181,6 +188,7 @@ let begin = dayjs(this.form.beginTime).format('YYYY-MM-DD'); let end = dayjs(this.form.endTime).format('YYYY-MM-DD'); let dayDiff = this.getDaysDifference(begin, end); console.log('æ¥æé´é',dayDiff); let obj = {}; // è®¡ç®æå°åå¤§å¼ arr.forEach((item) => { @@ -202,13 +210,13 @@ online = sumOnline / dayDiff; valid = sumValid / dayDiff; exceeding = sumExceeding / dayDiff; obj['min'] = min; obj['max'] = max; obj['min'] = min.toFixed(3); obj['max'] = max.toFixed(3); obj['avg'] = avg.toFixed(3); obj['online'] = online.toFixed(3); obj['valid'] = valid.toFixed(3); obj['exceeding'] = exceeding.toFixed(3); obj['avg'] = avg.toFixed(2); obj['online'] = online.toFixed(2); obj['valid'] = valid.toFixed(2); obj['exceeding'] = exceeding.toFixed(2); return obj; }, @@ -345,7 +353,9 @@ <div class="search-container"> <el-container> <el-main> <el-form :inline="true" :model="form"> <el-form-item> <AreaAndmonitorType></AreaAndmonitorType> </el-form-item> @@ -355,79 +365,108 @@ @submit-value="(n) => (form.name = n)" ></InputSearch> </el-form-item> <el-form-item> <TimeSelectWithShortCuts @submit-time="giveTime" ></TimeSelectWithShortCuts> </el-form-item> <el-form-item> <el-button type="primary" @click="fetch">å±ç¤ºæçº¿å¾</el-button> </el-form-item> </el-form> <div>æ°æ®ç»è®¡æ¶æ®µï¼{{ begin}} ~ {{ end }}</div> <div class="time-text">æ°æ®ç»è®¡æ¶æ®µï¼{{ begin}} ~ {{ end }}</div> <el-row :gutter="20"> <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12"> <el-card <el-card shadow="never" :style="{ height: `calc(${height}px - 35vh - 250px)` }" > <DustRadarChart :name="['æ°æ®ææç','å ¸åå¼å¸¸å¤ç°ç','å¼å¸¸ç±»åèé度','æ°æ®è¶ æ ç','æ°æ®å¨çº¿ç']" :data="[bill.valid,bill.exceptionRecurrence,bill.exceptionTypeAggregation,bill.exceeding,bill.online]" ></DustRadarChart> </el-card> <el-row :gutter="20"> <el-col :xs="24" :sm="24" :md="12" :lg="16" :xl="16"> <DustRadarChart :name="['æ°æ®ææç','å ¸åå¼å¸¸å¤ç°ç','å¼å¸¸ç±»åèé度','æ°æ®è¶ æ ç','æ°æ®å¨çº¿ç']" :yData="[bill.valid,bill.exceptionRecurrence,bill.exceptionTypeAggregation,bill.exceeding,bill.online]" ></DustRadarChart> </el-col> <el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6"> <el-col :xs="24" :sm="24" :md="6" :lg="4" :xl="4"> <el-card shadow="never" :style="{ height: `calc(${height}px - 35vh - 250px)` }" > <template #header>é£é©è¯¦æ </template> <el-space direction="vertical"> <div>æå¤§å¼:{{ bill.max }} mg/m³</div> <div>æå°å¼:{{ bill.min }} mg/m³</div> <template #header><span class="title-16">é£é©è¯¦æ </span></template> <el-form > <el-form-item label="æå¤§å¼ï¼"> {{ bill.max }} mg/m³ </el-form-item> <el-form-item label="æå°å¼ï¼"> {{ bill.min }} mg/m³ </el-form-item> <el-form-item label="æ°æ®ææçï¼"> {{ bill.online }}% </el-form-item> <el-form-item label="æ°æ®å¨çº¿çï¼"> {{ bill.valid }}% </el-form-item> <el-form-item label="æ°æ®è¶ æ çï¼"> {{ bill.exceeding }}% </el-form-item> <el-form-item label="å¼å¸¸ç±»åèé度ï¼"> {{ bill.exceptionTypeAggregation*100 }}% </el-form-item> <el-form-item label="å ¸åå¼å¸¸å¤ç°çï¼" label-width="auto"> {{ bill.exceptionRecurrence*100 }}% </el-form-item> </el-form> <!-- <div class="date-text">æå¤§å¼:{{ bill.max }} mg/m³</div> --> <!-- <div>æå°å¼:{{ bill.min }} mg/m³</div> <div>åå¼:{{ bill.avg }} mg/m³</div> <div>æ°æ®ææç:{{ bill.online }}%</div> <div>æ°æ®å¨çº¿ç:{{ bill.valid }}%</div> <div>æ°æ®è¶ æ ç:{{ bill.exceeding }}%</div> <div>å¼å¸¸ç±»åèé度:{{ bill.exceptionTypeAggregation*100 }}%</div> <div>å ¸åå¼å¸¸å¤ç°ç:{{ bill.exceptionRecurrence*100 }}%</div> </el-space> <div>å ¸åå¼å¸¸å¤ç°ç:{{ bill.exceptionRecurrence*100 }}%</div> --> </el-card> </el-col> <el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6"> <el-col :xs="24" :sm="24" :md="6" :lg="4" :xl="4"> <el-card shadow="never" :style="{ height: `calc(${height}px - 35vh - 250px)` }" > <template #header>é£é©ç级</template> <template #header> <span class="title-16">é£é©ç级</span> </template> <template #default> <el-space direction="vertical" :size="15"> <!-- <el-space direction="vertical" :size="15" > --> <div class="container"> <div class="block heigh"></div> <div>é«é£é©(â¥0.6)</div> <div class="block-color heigh"></div> <div>é«é£é©(â¥0.6)</div> </div> <div class="container"> <div class="block medium" ></div> <div>ä¸é£é©(0.2~0.6)</div> <div class="block-color medium" ></div> <div>ä¸é£é©(0.2~0.6)</div> </div> <div class="container"> <div class="block low"></div><div>ä½é£é©(ï¼0.2)</div> <div class="block-color low"></div><div>ä½é£é©(ï¼0.2)</div> </div> </el-space> <!-- </el-space> --> </template> </el-card> </el-col> </el-row> </el-card> <el-row :gutter="24"> <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> <el-card shadow="never" :style="{ height: `calc(${height}px - 35vh - 250px)` }" > <template #default> <LineChart @@ -444,7 +483,7 @@ <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> <el-card shadow="never" :style="{ height: `calc(${height}px - 35vh - 250px)` }" > <template #default> <LineChart @@ -460,7 +499,7 @@ <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> <el-card shadow="never" :style="{ height: `calc(${height}px - 35vh - 250px)` }"> > <template #default> <LineChart title="æ¥ææç" @@ -474,7 +513,7 @@ </el-col> <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> <el-card shadow="never" :style="{ height: `calc(${height}px - 35vh - 250px)` }"> <el-card shadow="never" > <template #default> <LineChart title="æ¥è¶ æ ç" @@ -496,6 +535,9 @@ </template> <style scoped> .time-text { letter-spacing: 2px; } .el-card { margin-top: 15px; border-radius: 9px; @@ -511,12 +553,13 @@ } .container { display: flex; justify-content: space-between; margin-bottom: 10px; } .block { .block-color { width: 1em; height: 1em; margin-right: 10px; margin-top: 3px; } .heigh { background-color: red; @@ -531,4 +574,16 @@ .el-text { align-self: left; } .el-form-item { margin-bottom: 20px; } :deep().el-form-item__content { justify-content: flex-end; } .title-16 { font-size: 16px; font-weight: bold; } </style> src/views/line_graph/components/DustRadarChart.vue
@@ -4,17 +4,19 @@ <script> import * as echarts from 'echarts'; export default { props:{ name:{ type:Array, default:()=>{ return [] } }, data:{ type:Array, default:()=>{ return [] props: { // 屿§ name: { type: Array, default: () => { return []; } }, // æ°æ® yData: { type: Array, default: () => { return []; } } }, @@ -23,9 +25,9 @@ chart: null }; }, watch:{ data(){ this.set() watch: { yData() { this.set(); } }, mounted() { @@ -35,13 +37,30 @@ initRadarChart() { this.chart = echarts.init(document.getElementById('main')); }, set(){ set() { // this.data[0] = this.data[0]*0.01 let option = { title: { text: '综åé£é©' }, tooltip: {}, radar: { // è½´ // axisLine: { // show:true, // lineStyle: { // color: '#F53F3F' ,// 设置边æ¡çº¿çé¢è²ä¸ºé»è² // type:'dashed', // } // }, // è¾¹æ¡é¢è² splitLine: { lineStyle: { // ä½¿ç¨æ·±æµ çé´éè² color: ['#ddd', '#aaa'] } }, // shape: 'circle', indicator: [ { name: this.name[0], max: 1 }, @@ -49,18 +68,42 @@ { name: this.name[2], max: 1 }, { name: this.name[3], max: 1 }, { name: this.name[4], max: 1 } ] ], // splitArea: { // areaStyle: { // // color: ['#77EADF', '#26C3BE', '#64AFE9', '#428BD4'], // shadowColor: 'rgba(0, 0, 0, 0.2)', // shadowBlur: 10 // } // }, axisName: { color: '#428BD4' }, legend: { borderColor: '#428BD4' } }, series: [ { name: 'Budget vs spending', type: 'radar', data: [ { value: [this.data[0]*0.01,this.data[1]*0.01, this.data[2]*0.01,this.data[3]*0.01,this.data[4]*0.01], value: [ (this.yData[0] / 100).toFixed(4), this.yData[1], this.yData[2], (this.yData[3] / 100).toFixed(4), (this.yData[4] / 100).toFixed(4) ], name: 'å¼å¸¸åæ' }, ] } ], label: { show: true, formatter: function (params) { return params.value; } } } ] }; @@ -77,6 +120,6 @@ <style scoped> .chart { width: 100%; height: 35vh; height: 500px; } </style> src/views/line_graph/components/LineChart.vue
@@ -129,7 +129,7 @@ <style> .line-chart { width: 100%; height: 35vh; height: 300px; margin-top: 25px; } </style> src/views/login/LoginSystem.vue
@@ -43,7 +43,7 @@ if (this.username === 'admin' && this.password === 'admin123') { ElMessage.success('ç»å½æå'); // ç»å½æåï¼è·³è½¬å°å¯¹åºé¡µé¢ this.$router.push('/ndata') // å设ç»å½æååè·³è½¬å° '/dashboard' é¡µé¢ this.$router.push('/edata') // å设ç»å½æååè·³è½¬å° '/dashboard' é¡µé¢ } else { // console.log('Login Failed!') ElMessage.error('è´¦å·æå¯ç é误'); @@ -79,7 +79,8 @@ position: absolute; right: 10%; width: 20%; height: 50%; height: 500; } .el-form-item { @@ -112,7 +113,7 @@ letter-spacing: 0.3em; text-align: center; box-sizing: border-box; bottom: 80px; bottom: 10px; } src/views/origin_data/HistoryData.vue
ÎļþÃû´Ó src/views/origin_data/TableData.vue ÐÞ¸Ä @@ -5,6 +5,7 @@ import AreaAndmonitorType from '../../sfc/AreaAndmonitorType.vue' import {useCommonFunction} from '../../utils/common.js'; import requetsApi from '@/api/exportExcel/requetsApi.js' import dayjs from 'dayjs'; @@ -47,8 +48,8 @@ }; }, setup(){ const {isExceedOneMonth} = useCommonFunction() return {isExceedOneMonth} const {isExceedOneMonth,exportToExcel} = useCommonFunction() return {isExceedOneMonth,exportToExcel} }, mounted() { this.backMinuteDataAWeekAgo(); @@ -56,6 +57,45 @@ }, methods: { exportDom(){ let params ={ 'beginTime':this.form.beginTime, 'endTime': this.form.endTime, } if (this.form.name) { params['siteName'] = this.form.name; } if (this.form.number) { params['mnCode'] = this.form.numbe; } if (this.scenarioType.length != 0) { params['scenarioType'] = this.scenarioType; } requetsApi.fetchAlSiteData(params).then(res => { const data = res.data.data console.log('é¿åº¦ï¼',data.length); const tableColumns = [ 'name', 'address', 'dutyCompany', 'mnCode', 'typeName', 'dustValue', 'noiseValue', 'lst', 'quality', 'groupName', ] const excelColumns = [['A1','ç«ç¹åç§°'], ['B1','å°å'],['C1','ä¾åºå'],['D1','设å¤ç¼å·'], ['E1','ç±»å'],['F1','æ¬å°æµåº¦(mg/m³)'],['G1','åªå£°(dB)'], ['H1','ééæ¶é´'],['I1','ç级'],['J1','æå¨åºå¿']] this.exportToExcel(data,tableColumns,excelColumns,'å岿°æ®è¡¨.xlsx') }) }, // åè½ï¼è¡¨æ ¼é«åº¦æ ¹æ®å 容èªéåº calTableHeight() { const h1 = this.$refs.h1.$el.offsetHeight; @@ -92,10 +132,10 @@ // æ¥è¯¢æ°æ® handleSubmit() { if (this.isExceedOneMonth(this.form.beginTime, this.form.endTime)) { alert('æ¶é´è·¨åº¦ä¸è½è¶ è¿ä¸ä¸ªæ'); return; } // if (this.isExceedOneMonth(this.form.beginTime, this.form.endTime)) { // alert('æ¶é´è·¨åº¦ä¸è½è¶ è¿ä¸ä¸ªæ'); // return; // } this.loading = true; let params = {}; params['page'] = this.currentPage; @@ -221,12 +261,12 @@ :data="displayData" :height="tableHeight" v-loading="loading" table-layout="auto" > <!--ç»å®ä¸ä¸ªæ¹æ³ï¼å°è¿åå¼èµç»index,å³è¡¨æ ¼æ¯è¡æ°æ®ç䏿 --> <el-table-column type="index" label="åºå·" width="60px" align="center" fixed :index="indexMethod" @@ -244,7 +284,7 @@ show-overflow-tooltip ></el-table-column> <el-table-column prop="sname" prop="dutyCompany" label="ä¾åºå" align="center" show-overflow-tooltip @@ -262,8 +302,14 @@ ></el-table-column> <el-table-column prop="dustValue" label="æ¬å°æµåº¦" width="80px" label="æ¬å°æµåº¦(mg/m³)" align="center" sortable show-overflow-tooltip ></el-table-column> <el-table-column prop="noiseValue" label="åªå£°(dB)" align="center" sortable show-overflow-tooltip @@ -278,7 +324,6 @@ <el-table-column prop="quality" label="ç级" width="50px" align="center" show-overflow-tooltip ></el-table-column>