| | |
| | | |
| | | |
| | | |
| | | // const url = 'http://localhost:8081/'; |
| | | const url = 'http://localhost:8081/'; |
| | | // é¨ç½² |
| | | const url = 'http://114.215.109.124:8803/'; |
| | | // const url = 'http://114.215.109.124:8803/'; |
| | | |
| | | //é£ç¾½ç管 |
| | | const $http = axios.create({ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <router-view v-slot="{ Component, route }"> |
| | | <!-- <transition :name="route.meta.transition || 'fade'"> --> |
| | | <keep-alive> |
| | | <component |
| | | v-if="route.meta.keepAlive" |
| | | :is="Component" |
| | | :key="route.name" |
| | | /> |
| | | </keep-alive> |
| | | <component v-if="!route.meta.keepAlive" :is="Component" :key="route.name" /> |
| | | <!-- </transition> --> |
| | | </router-view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'CoreContent', |
| | | }; |
| | | </script> |
| | | <style scoped></style> |
| | | |
| | |
| | | </el-link> |
| | | </el-row> |
| | | |
| | | <!-- <hr/> --> |
| | | <div class="horizontal-line"></div> |
| | | <el-scrollbar :height="menuHeight"> |
| | | |
| | |
| | | <span class="parent-title">é£é©è¯ä¼°</span> |
| | | </template> |
| | | <!-- æªéä¸ --> |
| | | <el-menu-item index="avgDay" v-show="menu[0].avalue" @click="changeIcon(0)" > |
| | | <el-menu-item index="/avgDay" v-show="menu[0].avalue" @click="changeIcon(0)" > |
| | | <img src="@/assets/generalModel.png" height="23"> |
| | | æ°æ®é£é©æ¨¡å |
| | | </el-menu-item> |
| | | <!-- ç°ç --> |
| | | <el-menu-item index="avgDay" v-show="!menu[0].avalue" @click="changeIcon(0)"> |
| | | <el-menu-item index="/avgDay" v-show="!menu[0].avalue" @click="changeIcon(0)"> |
| | | <img src="@/assets/generalModel2.png" height="23"> |
| | | æ°æ®é£é©æ¨¡å |
| | | </el-menu-item> |
| | | |
| | | |
| | | <el-menu-item index="analysis" v-show="menu[1].avalue" @click="changeIcon(1)"> |
| | | <el-menu-item index="/analysis" v-show="menu[1].avalue" @click="changeIcon(1)"> |
| | | <img src="@/assets/generalModel.png" height="23"> |
| | | æ°æ®æåæ¸
å |
| | | </el-menu-item> |
| | | <el-menu-item index="analysis" v-show="!menu[1].avalue" @click="changeIcon(1)"> |
| | | <el-menu-item index="/analysis" v-show="!menu[1].avalue" @click="changeIcon(1)"> |
| | | <!-- <el-icon><i-ep-Stopwatch /></el-icon> --> |
| | | <img src="@/assets/generalModel2.png" height="23"> |
| | | æ°æ®æåæ¸
å |
| | | </el-menu-item> |
| | | |
| | | <el-menu-item index="riskrank" v-show="menu[2].avalue" @click="changeIcon(2)"> |
| | | <el-menu-item index="/riskrank" v-show="menu[2].avalue" @click="changeIcon(2)"> |
| | | <img src="@/assets/generalModel.png" height="23"> |
| | | 综åé£é©æå |
| | | </el-menu-item> |
| | | <el-menu-item index="riskrank" v-show="!menu[2].avalue" @click="changeIcon(2)"> |
| | | <el-menu-item index="/riskrank" v-show="!menu[2].avalue" @click="changeIcon(2)"> |
| | | <img src="@/assets/generalModel2.png" height="23"> |
| | | 综åé£é©æå |
| | | </el-menu-item> |
| | |
| | | <img src="@/assets/onlineInspection.png" height="23"> |
| | | <span class="parent-title">线ä¸å·¡æ£</span> |
| | | </template> |
| | | <el-menu-item index="edata" v-show="menu[3].avalue" @click="changeIcon(3)"> |
| | | <el-menu-item index="/edata" v-show="menu[3].avalue" @click="changeIcon(3)"> |
| | | <img src="@/assets/generalModel.png" height="23"> |
| | | é£è¡å·¡æ£ |
| | | </el-menu-item> |
| | | <el-menu-item index="edata" v-show="!menu[3].avalue" @click="changeIcon(32)"> |
| | | <el-menu-item index="/edata" v-show="!menu[3].avalue" @click="changeIcon(32)"> |
| | | <img src="@/assets/generalModel2.png" height="23"> |
| | | é£è¡å·¡æ£ |
| | | </el-menu-item> |
| | | |
| | | |
| | | <el-menu-item index="testData" v-show="menu[4].avalue" @click="changeIcon(4)"> |
| | | <el-menu-item index="/testData" v-show="menu[4].avalue" @click="changeIcon(4)"> |
| | | <img src="@/assets/generalModel.png" height="23"> |
| | | ç«ç¹å®¡æ ¸è¾
å© |
| | | </el-menu-item> |
| | | <el-menu-item index="testData" v-show="!menu[4].avalue" @click="changeIcon(4)"> |
| | | <el-menu-item index="/testData" v-show="!menu[4].avalue" @click="changeIcon(4)"> |
| | | <img src="@/assets/generalModel2.png" height="23"> |
| | | ç«ç¹å®¡æ ¸è¾
å© |
| | | </el-menu-item> |
| | |
| | | </template> |
| | | |
| | | |
| | | <el-menu-item index="hdata" v-show="menu[5].avalue" @click="changeIcon(5)"> |
| | | <el-menu-item index="/hdata" v-show="menu[5].avalue" @click="changeIcon(5)"> |
| | | <img src="@/assets/generalModel.png" height="23"> |
| | | å岿°æ®ç®¡ç |
| | | </el-menu-item> |
| | | <el-menu-item index="hdata" v-show="!menu[5].avalue" @click="changeIcon(5)" > |
| | | <el-menu-item index="/hdata" v-show="!menu[5].avalue" @click="changeIcon(5)" > |
| | | <img src="@/assets/generalModel2.png" height="23"> |
| | | å岿°æ®ç®¡ç |
| | | </el-menu-item> |
| | | |
| | | <!-- <el-menu-item index="management" > |
| | | <!-- <el-menu-item index="/management" > |
| | | <el-icon><i-ep-Histogram /></el-icon> |
| | | æ°æ®æ¥å
¥ç®¡ç |
| | | </el-menu-item> --> |
| | |
| | | width: 220px; |
| | | border-right: none; |
| | | &.el-menu--collapse { |
| | | //ä¾§è¾¹æ æå æ¶çæ ·å¼ |
| | | /* //ä¾§è¾¹æ æå æ¶çæ ·å¼ */ |
| | | width: 65px; |
| | | & .title-text { |
| | | //æå æ¶éèh1æå |
| | | /* //æå æ¶éèh1æå */ |
| | | display: none; |
| | | } |
| | | & span { |
| | |
| | | right: 0; |
| | | height: 1px; |
| | | background-color: rgb(221, 217, 217,0.2); |
| | | // width: 180px; |
| | | /* // width: 180px; */ |
| | | } |
| | | </style> |
| | |
| | | <script > |
| | | import AppAside from "./AppAside.vue"; |
| | | import AppHeader from "./AppHeader.vue" |
| | | import Content from '@/components/core/Content.vue'; |
| | | export default{ |
| | | components:[ |
| | | AppAside, |
| | | AppHeader |
| | | AppHeader, |
| | | Content |
| | | ], |
| | | data(){ |
| | | return{ |
| | |
| | | <el-container class="header-and-main"> |
| | | <AppHeader/> |
| | | <el-main > |
| | | <RouterView/> |
| | | <Content></Content> |
| | | <!-- <RouterView/> --> |
| | | </el-main> |
| | | </el-container> |
| | | </el-container> |
| | |
| | | height: 100vh; |
| | | min-width: 1445px; |
| | | } |
| | | // åç´æ¹å溢åºåºåç¦æ¢æ»å¨ |
| | | /* // åç´æ¹å溢åºåºåç¦æ¢æ»å¨ */ |
| | | .el-main { |
| | | background-color: #f4f4f5; |
| | | padding: 0; |
| | |
| | | import { ElMessage } from 'element-plus' |
| | | // å
¨å±å¼å
¥æ ·å¼ |
| | | import 'element-plus/theme-chalk/src/index.scss' |
| | | |
| | | import pinia from './stores/index'; |
| | | import { useLoadingStore } from "@/stores/loadingStore"; |
| | | |
| | | const app = createApp(App) |
| | | |
| | |
| | | next() |
| | | } |
| | | }) |
| | | |
| | | |
| | | const loadingStore = useLoadingStore(pinia) |
| | | router.afterEach((to, from) => { |
| | | loadingStore.clearLoading() |
| | | }) |
| | | |
| | | |
| | | // æ¬å° |
| | | // axios.defaults.baseURL = 'http://localhost:8081' |
| | | axios.defaults.baseURL = 'http://localhost:8081' |
| | | // é¨ç½² |
| | | axios.defaults.baseURL = 'http://114.215.109.124:8803' |
| | | // axios.defaults.baseURL = 'http://114.215.109.124:8803' |
| | | app.config.globalProperties.$http = axios |
| | | |
| | | app.use(ElMessage) |
| | | app.config.globalProperties.$message = ElMessage |
| | | app.use(router) |
| | | |
| | | app.use(pinia) |
| | | |
| | | app.mount('#app') |
| | |
| | | { |
| | | path: "/avgDay", |
| | | name: 'avgDay', |
| | | meta: { title: 'æ°æ®å驿¨¡å' }, |
| | | meta: { title: 'æ°æ®å驿¨¡å' , keepAlive: true}, |
| | | component: () => import('@/views/line_graph/DataRiskModel.vue') |
| | | }, |
| | | |
| | |
| | | { |
| | | path: "/analysis", |
| | | name: 'analysis', |
| | | meta: { title: 'æ°æ®é£é©æå' }, |
| | | meta: { title: 'æ°æ®é£é©æå' , keepAlive: true}, |
| | | component: () => import('@/views/line_graph/DataRiskRank.vue') |
| | | }, |
| | | // æ°æ®é£é©æå |
| | | { |
| | | path: "/riskrank", |
| | | name: 'riskrank', |
| | | meta: { title: '综åé£é©æå' }, |
| | | meta: { title: '综åé£é©æå' , keepAlive: true }, |
| | | component: () => import('@/views/line_graph/SiteComprehensiveRskRanking.vue') |
| | | }, |
| | | |
| | |
| | | { |
| | | path: "/edata", |
| | | name: 'edata', |
| | | meta: { title: 'é£è¡å·¡æ£' }, |
| | | meta: { title: 'é£è¡å·¡æ£' , keepAlive: true}, |
| | | component: () => import('@/views/exception/FlightInspection.vue') |
| | | }, |
| | | |
| | |
| | | { |
| | | path: "/testData", |
| | | name: 'testData', |
| | | meta: { title: 'ç«ç¹å®¡æ ¸è¾
å©' }, |
| | | meta: { title: 'ç«ç¹å®¡æ ¸è¾
å©' , keepAlive: true}, |
| | | component: () => import('@/views/exception/SiteAuditAssistance.vue') |
| | | }, |
| | | |
| | |
| | | { |
| | | path: "/hdata", |
| | | name: 'hdata', |
| | | meta: { title: 'å岿°æ®ç®¡ç' }, |
| | | meta: { title: 'å岿°æ®ç®¡ç' , keepAlive: true}, |
| | | component: () => import('@/views/data_management/HistoryData.vue') |
| | | }, |
| | | // æ°æ®æ¥å
¥ç®¡ç |
| | |
| | | meta: { title: 'æ°æ®æ¥å
¥é
ç½®' }, |
| | | component: () => import('@/views/setting/SetConfiguration.vue') |
| | | }, |
| | | |
| | | |
| | | // æ°æ®æ¥å
¥é
ç½® |
| | | { |
| | | path: "/detail/:siteName/:month", |
| | | name: 'detail', |
| | | meta: { title: 'ç«ç¹å
·ä½ä¿¡æ¯' }, |
| | | component: () => import('@/views/line_graph/components/SiteDetail.vue') |
| | | }, |
| | | |
| | | // é£é©æ¨¡ååµå
¥ |
| | | { |
| | | path: "/subRiskModel", |
| | | name: 'subRiskModel', |
| | | meta: { title: 'é£é©æ¨¡ååµå
¥ ' }, |
| | | component: () => import('@/views/line_graph/components/subRiskModel.vue') |
| | | }, |
| | | |
| | | ], |
| | | }, |
| | | |
| | |
| | | ] |
| | | }) |
| | | |
| | | |
| | | export default router |
| | |
| | | <!-- |
| | | è¿ç¨æç´¢ ç«ç¹åç§° è¾å
¥æ¡ç»ä»¶ |
| | | æ ¹æ®è¾å
¥ç«ç¹çå
容æä¾å¯¹åºçè¾å
¥å»ºè®® |
| | | |
| | | ** |
| | | å¨ç¶ç»ä»¶ä¸è®¾ç½® |
| | | <InputSearch :isNeedDefaultSite="1" @submit-value="(n)=>form.name=n"> </InputSearch> |
| | |
| | | ç¶ç»ä»¶éè¿æ³¨å
¥ :isNeedDefaultSite="1"æ :isNeedDefaultSite="0"æ¥ä»£è¡¨è¯¥è¾å
¥æ¡ææ é»è®¤çç«ç¹åç§° |
| | | 1代表éè¦é»è®¤å¼ ï¼0代表ä¸éè¦é»è®¤å¼ |
| | | --> |
| | | |
| | | |
| | | |
| | | <script> |
| | | import exceptionApi from '@/api/exceptionApi.js'; |
| | | export default { |
| | |
| | | import dayjs from 'dayjs'; |
| | | |
| | | export default { |
| | | props:{ |
| | | month:{ |
| | | type:String, |
| | | default:'' |
| | | } |
| | | }, |
| | | emits:['submitValue'], |
| | | |
| | | data() { |
| | |
| | | value:'' |
| | | } |
| | | }, |
| | | watch:{ |
| | | month(){ |
| | | if(this.month!=''){ |
| | | this.value = this.month |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.pre_month() |
| | | }, |
| | |
| | | case 'currentMonth': |
| | | this.time[0] = dayjs().startOf('month').format('YYYY-MM-DD HH:mm:ss') |
| | | this.time[1] = dayjs().subtract(1,'day').format('YYYY-MM-DD 23:59:59') |
| | | break |
| | | // 鲿¢å¨æ¯æç1å·ï¼åºç°time[0]>time[1]çæ
åµ |
| | | if(this.time[0]<this.time[1]){ |
| | | break |
| | | } |
| | | default: |
| | | this.time[0] = dayjs().subtract(1, 'month').format('YYYY-MM-DD HH:mm:ss'); |
| | | this.time[1] = dayjs().format('YYYY-MM-DD HH:mm:ss'); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import { createPinia } from 'pinia'; |
| | | |
| | | const pinia = createPinia(); |
| | | |
| | | export default pinia; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // å è½½ç¶æçé»è¾ç®¡ç |
| | | |
| | | import { defineStore } from 'pinia' |
| | | |
| | | export const useLoadingStore = defineStore('loading', { |
| | | state: () => { |
| | | return { |
| | | loadingStatus: [] |
| | | } |
| | | }, |
| | | actions: { |
| | | clearLoading() { |
| | | this.loadingStatus.forEach(l => { |
| | | if (typeof l === 'function') { |
| | | l() |
| | | } |
| | | }); |
| | | if (this.loadingStatus.length > 0) { |
| | | this.loadingStatus = [] |
| | | } |
| | | } |
| | | } |
| | | }) |
| | |
| | | // è¶
æ ä¸´è¿ |
| | | let exceedingNearCount = 0; |
| | | // è¶
æ æ¬¡æ°ä¸´ç |
| | | let exceedindCriticalDegree = 0; |
| | | let exceedingCriticalDegree = 0; |
| | | |
| | | // ä¿ååºç°çä¸åå¼å¸¸ç±»å |
| | | let exception = []; |
| | |
| | | } else if (item.exceptionType == 5) { |
| | | exceedingNearCount++; |
| | | } else if (item.exceptionType == 6) { |
| | | exceedindCriticalDegree++; |
| | | exceedingCriticalDegree++; |
| | | } |
| | | |
| | | // å¼å¸¸ç±»åèé度 |
| | |
| | | sum = sum + mutationCount - 1; |
| | | } |
| | | if (exceedingNearCount > 1) { |
| | | sum = sum + exceedindCriticalDegree - 1; |
| | | sum = sum + exceedingNearCount - 1; |
| | | } |
| | | if (exceedindCriticalDegree > 1) { |
| | | sum = sum + exceedindCriticalDegree - 1; |
| | | if (exceedingCriticalDegree > 1) { |
| | | sum = sum + exceedingCriticalDegree - 1; |
| | | } |
| | | |
| | | switch (sum) { |
| | | case 0: |
| | | exceptionTyprRecurRate = sum / 3; |
| | | switch (true) { |
| | | case (sum == 0 || sum == 1) : |
| | | exceptionTyprRecurRate = (sum / 3).toFixed(2); |
| | | break; |
| | | case 1: |
| | | exceptionTyprRecurRate = sum / 3; |
| | | break; |
| | | case 2: |
| | | case sum >= 3: |
| | | case (sum == 2|| sum >=3) : |
| | | exceptionTyprRecurRate = 1; |
| | | break; |
| | | default: |
| | | return 'error'; |
| | | } |
| | | |
| | | exceptionTypeAggregation = exception.length / 8; |
| | | exceptionTypeAggregation = (exception.length / 8).toFixed(2); |
| | | |
| | | let obj = {}; |
| | | obj['exceptionRecurrence'] = exceptionTyprRecurRate; |
| | |
| | | const table = [] |
| | | let i = 0 |
| | | anaData.forEach((res) =>{ |
| | | |
| | | let siteName = res.name |
| | | // ä»åææ°æ®ä¸å¾å°è®¾å¤ç¼å· |
| | | let mnCode = res.mnCode |
| | | // æ¾å°å¼å¸¸æ°æ®ä¸mnCodeçäºvalueç对象 |
| | |
| | | <script> |
| | | import getHistoryApi from '@/api/py/getHistoryApi.js' |
| | | import { ElMessage } from 'element-plus' |
| | | import exceptionApi from '@/api/exceptionApi.js' |
| | | export default { |
| | | data() { |
| | | return {} |
| | | return { |
| | | async: 'æªå®æ....', |
| | | normal: 'æªåå....' |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | // this.query() |
| | | // this.getAnalysisData() |
| | | }, |
| | | methods: { |
| | | getData() { |
| | |
| | | setTimeout(() => { |
| | | ElMessage.success('æ°æ®è·åä¸') |
| | | }, 600) |
| | | }, |
| | | // async query() { |
| | | // await exceptionApi.analysisdata('','2023-08-01','2023-10-01', 'day').then((response) => { |
| | | // const chartData = response.data.data |
| | | // this.async = '宿' |
| | | // }) |
| | | // this.normal= 'åå' |
| | | // }, |
| | | // query() { |
| | | // exceptionApi.analysisdata('','2023-08-01','2023-10-01', 'day').then((response) => { |
| | | // const chartData = response.data.data |
| | | // this.async = '宿' |
| | | // }) |
| | | // this.normal= 'åå' |
| | | // }, |
| | | |
| | | // query() { |
| | | // exceptionApi.analysisdata('','2023-08-01','2023-10-01', 'day') |
| | | // .then((response) => { |
| | | // return response.data.data |
| | | // }).then((res)=>{ |
| | | // a = exceptionApi.analysisdataByType('2023-09-01','month') |
| | | |
| | | // }) |
| | | // }, |
| | | |
| | | // getd1(){ |
| | | // return exceptionApi.analysisdataByType('2023-09-01','month') |
| | | // }, |
| | | // async query() { |
| | | // const analysis = await exceptionApi.analysisdata('','2023-08-01','2023-10-01', 'day') |
| | | // console.log('åææ°æ®ä¸ºï¼',analysis); |
| | | // const exception = await exceptionApi.analysisdataByType('2023-09-01','month') |
| | | // console.log('å¼å¸¸æ°æ®ä¸ºï¼',exception); |
| | | // } |
| | | getAnalysisData() { |
| | | const analysis = exceptionApi.analysisdata( |
| | | this.form.name, |
| | | this.form.beginTime, |
| | | this.form.endTime, |
| | | 'day' |
| | | ) |
| | | const exception = exceptionApi.exceptiondata1({ |
| | | siteName: this.form.name, |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | this.loading = true |
| | | this.queryButton = true |
| | | Promise.all([analysis, exception]).then((res) => { |
| | | this.chartData = res[0].data.data |
| | | let exceptionData = res[1].data.data |
| | | // console.log('åææ°æ®ï¼',analysisData); |
| | | // console.log('å¼å¸¸æ°æ®ï¼',exceptionData); |
| | | // å¾å°æææ°æ®çèµ·å§æ¶é´ |
| | | this.begin = this.chartData[0].lst |
| | | this.end = this.chartData[this.chartData.length - 1].lst |
| | | // ç§»é¤ç©ºæ°æ®ç¶æ |
| | | this.isNoData = false |
| | | // çææçº¿å¾æ°æ®é
ç½® |
| | | this.setChart() |
| | | |
| | | // æ¥ç»è®¡æ°æ® |
| | | let temp = index.calBillData(this.chartData, this.begin, this.end) |
| | | // å¼å¸¸æ°æ® |
| | | let obj = index.calRecur(exceptionData) |
| | | |
| | | this.bill.min = temp['min'] |
| | | this.bill.max = temp['max'] |
| | | this.bill.avg = temp['avg'] |
| | | this.bill.online = temp['online'] |
| | | this.bill.valid = temp['valid'] |
| | | this.bill.exceeding = temp['exceeding'] |
| | | |
| | | this.bill.exceptionRecurrence = obj['exceptionRecurrence'] |
| | | this.bill.exceptionTypeAggregation = obj['exceptionTypeAggregation'] |
| | | }) |
| | | } |
| | | } |
| | | } |
| | |
| | | </el-descriptions> |
| | | |
| | | <el-button type="primary" @click="getData"> èªå¨è·å </el-button> |
| | | <div>弿¥å½æ°ï¼{{ async }}</div> |
| | | <div style="margin-bottom: 20px"></div> |
| | | <div>åé¢ï¼ {{ normal }}</div> |
| | | </template> |
| | | |
| | | |
| | | <style scoped> |
| | | .el-descriptions, |
| | | |
| | | .el-button { |
| | | margin: 20px; |
| | | } |
| | |
| | | break |
| | | // è¶
æ |
| | | case '2': |
| | | case '5': |
| | | case '6': |
| | | this.dialog.option = { |
| | | title: { |
| | | text: this.tableCurrentRowData.exception, |
| | |
| | | } |
| | | break |
| | | case '4': |
| | | case '5': |
| | | case '6': |
| | | case '7': |
| | | this.dialog.option = { |
| | | title: { |
| | |
| | | <!-- æ¥åå¼ --> |
| | | |
| | | <script> |
| | | // import DateSelectWithShortCuts from '@/sfc/DateSelectWithShortCuts.vue' |
| | | import InputSearch from '@/sfc/InputSearch.vue' |
| | | import AreaAndmonitorType from '@/sfc/AreaAndmonitorType.vue' |
| | | |
| | | import DustRadarChart from './components/DustRadarChart.vue' |
| | | import exceptionApi from '@/api/exceptionApi.js' |
| | | |
| | | import LineChart from './components/LineChart.vue' |
| | | import index from '@/utils/risk_estimate_common_function/index.js' |
| | | import ButtonClick from '@/sfc/ButtonClick.vue' |
| | | import dayjs from 'dayjs' |
| | | import rank from '@/utils/risk_estimate_common_function/rank.js' |
| | | import MonthSelect from '@/sfc/MonthSelect.vue'; |
| | | import MonthSelect from '@/sfc/MonthSelect.vue' |
| | | export default { |
| | | components: { |
| | | LineChart, |
| | | // DateSelectWithShortCuts, |
| | | InputSearch, |
| | | AreaAndmonitorType, |
| | | DustRadarChart, |
| | |
| | | return { |
| | | isNoData: false, |
| | | loading: false, |
| | | screenLoading:false, |
| | | screenLoading: false, |
| | | parentDataFlag:false, |
| | | chartData: [], |
| | | chartData1: {}, //ä¿åæ¥è¯¢çç»æ |
| | | chartData2: {}, |
| | | chartData3: {}, |
| | | chartData4: {}, |
| | | //devId:'', //设å¤ç¼å· |
| | | begin: '', //å¼å§æ¶é´ |
| | | end: '', //ç»ææ¶é´ |
| | | |
| | |
| | | name: '', |
| | | // 设å¤ç¼å· |
| | | number: '', |
| | | |
| | | month:'', |
| | | // å¼å§æ¶é´ |
| | | beginTime: '', |
| | | // ç»ææ¶é´ |
| | | endTime: '' |
| | | }, |
| | | month: '', |
| | | // ä¼ éç»æä»½ç»ä»¶çå¼ |
| | | sfc_month: '', |
| | | // æçº¿å¾é
置项 |
| | | option: {}, |
| | | // æ°æ®æ¸
å |
| | |
| | | queryButton: false, |
| | | |
| | | // é£é©å¼æåååçç«ç¹ |
| | | top_10_sites_with_risk_values:[ |
| | | {name:'éå±±åºéå±±æ°åJSC1-0401åå
1-11-01å°å项ç®09', |
| | | riskValue:0.2 |
| | | } |
| | | ] |
| | | top_10_sites_with_risk_values: [{ name: '', riskValue: 0.2 }], |
| | | // é£é©å¼ |
| | | weight: '' |
| | | } |
| | | }, |
| | | |
| | | watch:{ |
| | | |
| | | }, |
| | | computed: { |
| | | weight() { |
| | | let singleOnline = ((100 - this.bill.online) / 100) * 0.1 |
| | | let singleValid = ((100 - this.bill.valid) / 100) * 0.2 |
| | | let singleExceeding = (this.bill.exceeding / 100) * 0.2 |
| | | let singleAggregation = this.bill.exceptionTypeAggregation * 0.2 |
| | | let singleRecurrence = this.bill.exceptionRecurrence * 0.3 |
| | | let allWeight = ( |
| | | singleOnline + |
| | | singleValid + |
| | | singleExceeding + |
| | | singleAggregation + |
| | | singleRecurrence |
| | | ).toFixed(2) |
| | | |
| | | return allWeight |
| | | watch: { |
| | | sName() { |
| | | // å½å«ç页é¢è°ç¨æ¶ |
| | | if (this.sName != ''|| this.month_1 != '') { |
| | | // æ´æ°ç«ç¹åååæ¶é´ |
| | | this.form.name = this.sName |
| | | this.month = this.month_1 |
| | | this.parentDataFlag = true |
| | | // æ´æ°ææ¸
å |
| | | this.getRiskRank() |
| | | // æ´æ°ç»è®¡æ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | } |
| | | } |
| | | }, |
| | | |
| | | mounted() { |
| | | // 页é¢å è½½æ¾ç¤ºé£é©æé«çç«ç¹ |
| | | // this.getRiskWeightName() |
| | | |
| | | this.fetch() |
| | | // 计ç®é£é©æåæ¸
å |
| | | this.getRiskRank() |
| | | // // å è½½é£é©å¼æé«çç«ç¹æ°æ® |
| | | this.ShowDefaultData() |
| | | }, |
| | | |
| | | methods: { |
| | | |
| | | // æ¥è¯¢ç«ç¹ç»è®¡ä¿¡æ¯ |
| | | querySiteStaticsInfo(row){ |
| | | querySiteStaticsInfo(row) { |
| | | this.form.name = row.siteName |
| | | this.riskDetails() |
| | | // æ´æ°ç»è®¡æ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | }, |
| | | |
| | | async getRiskWeightName() { |
| | | this.screenLoading = true |
| | | this.form.name = await rank.fetchData(this.form.beginTime, this.form.endTime); |
| | | |
| | | // å 载该é£é©æ¸
å |
| | | this.fetch() |
| | | this.screenLoading = false |
| | | }, |
| | | |
| | | giveMonth(val){ |
| | | // æ ¼å¼åæä»½ |
| | | giveMonth(val) { |
| | | //å°ä¸å½æ åæ¶é´è½¬ä¸ºæå®æ ¼å¼(该ç»ä»¶è¿åçæ åæ¶é´çæ ¼å¼ï¼æä»¥å¿
é¡»çå è¿ä¸ªå½æ°) |
| | | this.form.month = dayjs(val).format('YYYY-MM-DD'); |
| | | // åæ¶æ´æ°å¼å§åç»ææ¶é´ |
| | | this.form.beginTime = dayjs(this.form.month).startOf().format('YYYY-MM-DD HH:mm:ss') |
| | | this.form.endTime = dayjs(this.form.month).endOf('month').format('YYYY-MM-DD HH:mm:ss') |
| | | console.log(this.form.beginTime,this.form.endTime); |
| | | |
| | | }, |
| | | this.month = dayjs(val).format('YYYY-MM-DD') |
| | | // åæ¶æ´æ°å¼å§åç»ææ¶é´ |
| | | this.form.beginTime = dayjs(this.month).startOf().format('YYYY-MM-DD HH:mm:ss') |
| | | this.form.endTime = dayjs(this.month).endOf('month').format('YYYY-MM-DD HH:mm:ss') |
| | | }, |
| | | |
| | | /** |
| | | * å°ä¸å½æ åæ¶é´è½¬ä¸ºæå®æ ¼å¼ |
| | | * é£é©è¯ä¼°æé® |
| | | * @paramï¼ |
| | | * @returnsï¼ |
| | | */ |
| | | giveTime(val) { |
| | | //å°ä¸å½æ åæ¶é´è½¬ä¸ºæå®æ ¼å¼(该ç»ä»¶è¿åçæ åæ¶é´çæ ¼å¼ï¼æä»¥å¿
é¡»çå è¿ä¸ªå½æ°) |
| | | this.form.beginTime = dayjs(val[0]).format('YYYY-MM-DD') |
| | | this.form.endTime = dayjs(val[1]).format('YYYY-MM-DD') |
| | | }, |
| | | /** |
| | | * åå§å è½½å½æ° |
| | | * @paramï¼ |
| | | * @returnsï¼ |
| | | */ |
| | | fetch() { |
| | | // 计ç®é£é©æåæ¸
å,è·åé£é©æé«çç«ç¹åå |
| | | riskAssessment() { |
| | | // æ´æ°æåæ¸
å |
| | | this.getRiskRank() |
| | | |
| | | // åææ°æ® |
| | | this.fetchData() |
| | | // å¼å¸¸æ°æ® |
| | | this.exceptiondataCount() |
| | | |
| | | |
| | | }, |
| | | riskDetails() { |
| | | // åææ°æ® |
| | | this.fetchData() |
| | | // å¼å¸¸æ°æ® |
| | | this.exceptiondataCount() |
| | | // æ´æ°åææ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | }, |
| | | |
| | | // ç¹å»å±ç¤ºæé® |
| | | fetchData() { |
| | | // æ´æ°åææ°æ® |
| | | getAnalysisData() { |
| | | // æ¥ç»è®¡æ°æ® |
| | | this.fetchDayAnalysisData() |
| | | // å¼å¸¸æ°æ® |
| | | this.fetchExceptionAnalysisData() |
| | | }, |
| | | |
| | | findObjectByPropertyValue(array, property, value) { |
| | | return array.find((obj) => obj[property] === value) |
| | | }, |
| | | |
| | | // æ¤é¡µé¢æå¼æ¶ |
| | | ShowDefaultData() { |
| | | // é»è®¤å è½½å±ç¤ºçå
容 |
| | | this.updateOriginPage() |
| | | }, |
| | | |
| | | // å è½½é»è®¤å±ç¤ºçå
容 |
| | | async updateOriginPage() { |
| | | this.screenLoading = true |
| | | // æ´æ°æåæ¸
åï¼å¹¶å¾å°é£é©å¼æé«ç«ç¹ |
| | | this.form.name = await this.getRiskRank() |
| | | this.screenLoading = false |
| | | // æ´æ°æ¥ç»è®¡æ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | }, |
| | | |
| | | // 计ç®é£é©å¼ |
| | | calRiskValue() { |
| | | exceptionApi.analysisdataByType(this.month, 'month').then((response) => { |
| | | const chartData = response.data.data |
| | | |
| | | if (response.data.data.length == 0) { |
| | | return |
| | | } |
| | | // ä»å¯¹è±¡æ°ç»æ¾å°è¯¥ç«ç¹æå¨çå
ç´ |
| | | let siteItem = this.findObjectByPropertyValue(chartData, 'name', this.form.name) |
| | | if (Object.keys(siteItem).length === 0) { |
| | | return |
| | | } |
| | | let arr = [] |
| | | arr.push(siteItem) |
| | | exceptionApi |
| | | .exceptiondata1({ |
| | | siteName: this.form.name, |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | .then((res) => { |
| | | let table = index.merge(arr, res.data.data, this.form.beginTime, this.form.endTime) |
| | | this.weight = table[0].riskValue |
| | | }) |
| | | }) |
| | | }, |
| | | |
| | | // æ ¹æ®ç®åç«ç¹ï¼æä»½ï¼æ¥æçº¿å¾æ¥ç»è®¡æ°æ® |
| | | fetchDayAnalysisData() { |
| | | let params = {} |
| | | if (this.form.name) { |
| | | params['siteName'] = this.form.name |
| | |
| | | this.loading = true |
| | | this.queryButton = true |
| | | exceptionApi |
| | | .analysisdata(this.form.name, this.form.beginTime, this.form.endTime,'day') |
| | | .analysisdata(this.form.name, this.form.beginTime, this.form.endTime, 'day') |
| | | .then((response) => { |
| | | this.chartData = response.data.data |
| | | this.loading = false |
| | |
| | | this.isNoData = true |
| | | return |
| | | } |
| | | this.begin = this.chartData[0].lst |
| | | this.end = this.chartData[this.chartData.length - 1].lst |
| | | |
| | | // ç§»é¤ç©ºæ°æ®ç¶æ |
| | | this.isNoData = false |
| | | this.setChart() |
| | | |
| | | let temp = index.calBillData(this.chartData, this.form.beginTime, this.form.endTime) |
| | | // æçº¿å¾æ°æ® |
| | | let temp = index.calBillData(this.chartData, this.begin, this.end) |
| | | this.bill.min = temp['min'] |
| | | this.bill.max = temp['max'] |
| | | |
| | |
| | | this.bill.online = temp['online'] |
| | | this.bill.valid = temp['valid'] |
| | | this.bill.exceeding = temp['exceeding'] |
| | | |
| | | this.begin = this.chartData[0].lst |
| | | this.end = this.chartData[this.chartData.length - 1].lst |
| | | }) |
| | | }, |
| | | |
| | | // ä¼ä¸å¼å¸¸ç»è®¡æ°æ® |
| | | fetchExceptionAnalysisData() { |
| | | exceptionApi |
| | | .exceptiondata1({ |
| | | siteName: this.form.name, |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | .then((res) => { |
| | | let obj = index.calRecur(res.data.data) |
| | | this.bill.exceptionRecurrence = obj['exceptionRecurrence'] |
| | | this.bill.exceptionTypeAggregation = obj['exceptionTypeAggregation'] |
| | | }) |
| | | }, |
| | | |
| | | // éæ©å
¶ä»å¼ç±»åæ¶ |
| | | setChart() { |
| | | if (this.chartData.length) { |
| | |
| | | } |
| | | }, |
| | | |
| | | // ä¼ä¸å¼å¸¸è¯¦æ
|
| | | exceptiondataCount() { |
| | | exceptionApi |
| | | .exceptiondata1({ |
| | | siteName: this.form.name, |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | // å¾å°å10é£é©æåæ¸
å |
| | | async getRiskRank() { |
| | | let staticsData = await exceptionApi.analysisdataByType(this.month, 'month') |
| | | |
| | | let exceptionData = await exceptionApi.exceptiondata1({ |
| | | siteName: '', |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | |
| | | const riskValueSites = index.merge( |
| | | staticsData.data.data, |
| | | exceptionData.data.data, |
| | | this.form.beginTime, |
| | | this.form.endTime |
| | | ) |
| | | this.top_10_sites_with_risk_values = this.getTopRiskData(riskValueSites, 10) |
| | | if (this.top_10_sites_with_risk_values.length != 0) { |
| | | // è¡¨æ ¼æé£é©å¼ååæå |
| | | this.$nextTick(() => { |
| | | this.$refs.table.sort('riskValue', 'descending') |
| | | }) |
| | | .then((res) => { |
| | | let obj = index.calRecur(res.data.data) |
| | | this.bill.exceptionRecurrence = obj['exceptionRecurrence'] |
| | | this.bill.exceptionTypeAggregation = obj['exceptionTypeAggregation'] |
| | | }) |
| | | // Promise |
| | | return this.top_10_sites_with_risk_values[0].siteName |
| | | } |
| | | }, |
| | | |
| | | // ç¹å»é£é©æåæé® |
| | | getRiskRank() { |
| | | exceptionApi |
| | | .analysisdataByType(this.form.month, 'month') |
| | | .then((response) => { |
| | | let staticsData = response.data.data |
| | | |
| | | exceptionApi |
| | | .exceptiondata1({ |
| | | siteName: this.form.name, |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | .then((res) => { |
| | | const riskValueSite = index.merge( |
| | | staticsData, |
| | | res.data.data, |
| | | this.form.beginTime, |
| | | this.form.endTime |
| | | ) |
| | | // è·åæåå10çé£é©å¼ç«ç¹ |
| | | |
| | | this.top_10_sites_with_risk_values = this.getTopriskData(riskValueSite,10) |
| | | this.form.name = this.top_10_sites_with_risk_values[0].siteName |
| | | |
| | | this.$nextTick(()=>{ |
| | | this.$refs.table.sort('riskValue','descending') |
| | | console.log('è¡¨æ ¼æ°æ®ä¸ºï¼',this.top_10_sites_with_risk_values); |
| | | }) |
| | | |
| | | }) |
| | | |
| | | }) |
| | | }, |
| | | /** |
| | | * éåºæåï¼è¿åéåºånumçå
ç´ |
| | | * @paramï¼ å¯¹è±¡æ°ç»ï¼è¿åçæ°é |
| | | */ |
| | | getTopriskData(arr,num) { |
| | | // æç
§riskValueéåºæå |
| | | arr.sort((a, b) => b.riskValue - a.riskValue); |
| | | // è·åånum个å
ç´ |
| | | return arr.slice(0,num); |
| | | } |
| | | |
| | | /** |
| | | * éåºæåï¼è¿åéåºånumçå
ç´ |
| | | * @paramï¼ å¯¹è±¡æ°ç»ï¼è¿åçæ°é |
| | | */ |
| | | getTopRiskData(arr, num) { |
| | | // æç
§riskValueéåºæå |
| | | arr.sort((a, b) => b.riskValue - a.riskValue) |
| | | // è·åånum个å
ç´ |
| | | return arr.slice(0, num) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | |
| | | <template> |
| | | <el-form :inline="true" :model="form"> |
| | |
| | | <AreaAndmonitorType></AreaAndmonitorType> |
| | | </el-form-item> |
| | | <el-form-item class="form-item"> |
| | | <!-- <InputSearch isNeedDefaultSite="1" @submit-value="(n) => (form.name = n)" :siteName="form.name"></InputSearch> --> |
| | | <InputSearch :site-name="form.name" isNeedDefaultSite="1" @submit-value="(n) => (form.name = n)" ></InputSearch> |
| | | <InputSearch |
| | | :site-name="form.name" |
| | | isNeedDefaultSite="0" |
| | | @submit-value="(n) => (form.name = n)" |
| | | ></InputSearch> |
| | | </el-form-item> |
| | | |
| | | <!-- <el-form-item> |
| | | <DateSelectWithShortCuts @submit-time="giveTime"></DateSelectWithShortCuts> |
| | | </el-form-item> --> |
| | | |
| | | |
| | | <el-form-item> |
| | | <MonthSelect @submit-value="giveMonth"></MonthSelect> |
| | | <MonthSelect :month="this.month_1" @submit-value="giveMonth"></MonthSelect> |
| | | </el-form-item> |
| | | |
| | | |
| | | <el-form-item> |
| | | <ButtonClick |
| | | content="é£é©è¯ä¼°" |
| | | type="primary" |
| | | :loading="queryButton" |
| | | @do-search="fetch" |
| | | @do-search="riskAssessment" |
| | | ></ButtonClick> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div v-loading="screenLoading" class="wait-name"> |
| | | <div class="chart-container" v-show="!isNoData && !screenLoading " > |
| | | <div class="time-text">æ°æ®ç»è®¡æ¶æ®µï¼{{ begin }} ~ {{ end }}</div> |
| | | |
| | | <el-row :gutter="10"> |
| | | <el-col :span="5"> |
| | | <div class="table-class"> |
| | | <el-table |
| | | ref="table" |
| | | highlight-current-row="true" |
| | | :data="top_10_sites_with_risk_values" |
| | | :default-sort="{ prop: 'riskValue', order: 'descending' }" |
| | | height="540"> |
| | | <el-table-column |
| | | type="index" |
| | | label="åºå·" |
| | | :index="indexMethod" |
| | | fixed |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | prop="siteName" |
| | | label="ç«ç¹åç§°" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | prop="riskValue" |
| | | label="é£é©å¼" |
| | | sortable |
| | | width="70" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column label="æä½" align="center"> |
| | | <template #default="{ row }"> |
| | | <el-button type="primary" text class="table-button" @click="querySiteStaticsInfo(row)" |
| | | >é£é©è¯¦æ
</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div v-loading="screenLoading" class="wait-name"> |
| | | <div class="chart-container" v-show="!isNoData && !screenLoading"> |
| | | <div class="time-text"> |
| | | <span>æ°æ®ç»è®¡æ¶æ®µï¼{{ begin }} ~ {{ end }}</span> |
| | | <span class="site-name">{{ form.name }}</span> |
| | | </div> |
| | | |
| | | </el-col> |
| | | |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never"> |
| | | <DustRadarChart |
| | | :name="[ |
| | | 'æ°æ®ææé£é©', |
| | | 'å
¸åå¼å¸¸å¤ç°é£é©', |
| | | 'å¼å¸¸ç±»åèéé£é©', |
| | | 'æ°æ®è¶
æ é£é©', |
| | | 'æ°æ®å¨çº¿é£é©' |
| | | ]" |
| | | :yData="[ |
| | | bill.valid, |
| | | bill.exceptionRecurrence, |
| | | bill.exceptionTypeAggregation, |
| | | bill.exceeding, |
| | | bill.online |
| | | ]" |
| | | ></DustRadarChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="3"> |
| | | <el-card shadow="never" class="card-height"> |
| | | <template #header> |
| | | <h1 |
| | | :class="{ |
| | | 'weightColor-low': weight < 0.2, |
| | | 'weightColor-medium': weight >= 0.2 && weight < 0.6, |
| | | 'weightColor-heigh': weight >= 0.6 |
| | | }" |
| | | <el-row :gutter="10"> |
| | | <el-col :span="5"> |
| | | <el-card shadow="never" class="table-class"> |
| | | <el-table |
| | | ref="table" |
| | | highlight-current-row="true" |
| | | :data="top_10_sites_with_risk_values" |
| | | :default-sort="{ prop: 'riskValue', order: 'descending' }" |
| | | height="540" |
| | | > |
| | | é£é©å¼(0~1)ï¼{{ weight }} |
| | | </h1> |
| | | </template> |
| | | <div class="risk-grade"> |
| | | <strong>é£é©ç级ï¼</strong> |
| | | <span v-if="weight >= 0.6"> é«é£é©</span> |
| | | <span v-else-if="weight >= 0.2 && weight < 0.6"> ä¸é£é©</span> |
| | | <span v-else> ä½é£é©</span> |
| | | </div> |
| | | |
| | | <div class="risk-advice"> |
| | | <strong>管æ§å»ºè®®ï¼</strong> |
| | | <span v-if="weight >= 0.6"> 建议对该ç«ç¹è¿è¡çº¿ä¸æ§æ³æ£æ¥ï¼ä¸é¡¹æ°æ®å¯¹æ¯</span> |
| | | <span v-else-if="weight >= 0.2 && weight < 0.6"> 建议å¼å±å¸¸æè¿½è¸ªåæ</span> |
| | | <span v-else> 建议å¼å¯¼ä¼ä¸é¿æä¿æ</span> |
| | | </div> |
| | | <div class="grade-instance"> |
| | | <div class="container"> |
| | | <div class="block-color heigh"></div> |
| | | <div>é«é£é©(â¥0.6)</div> |
| | | </div> |
| | | <div class="container"> |
| | | <div class="block-color medium"></div> |
| | | <div>ä¸é£é©(0.2~0.6)</div> |
| | | </div> |
| | | <div class="container"> |
| | | <div class="block-color low"></div> |
| | | <div>ä½é£é©(ï¼0.2)</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="4"> |
| | | <el-card shadow="never" class="card-height"> |
| | | <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="å
¸åå¼å¸¸å¤ç°çï¼"> |
| | | {{ bill.exceptionRecurrence * 100 }}% |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥åå¼" :chartData="chartData1" yName="mg/m³" seriesName="æ¥åå¼"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥å¨çº¿ç" :chartData="chartData2" yName="%" seriesName="æ¥å¨çº¿ç"> |
| | | </LineChart> |
| | | </el-card> |
| | | <el-table-column |
| | | type="index" |
| | | label="åºå·" |
| | | :index="indexMethod" |
| | | fixed |
| | | width="25" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="siteName" label="ç«ç¹åç§°" show-overflow-tooltip /> |
| | | <el-table-column |
| | | prop="riskValue" |
| | | label="é£é©å¼" |
| | | sortable |
| | | width="67" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column label="æä½" align="center"> |
| | | <template #default="{ row }"> |
| | | <el-button |
| | | type="primary" |
| | | text |
| | | class="table-button" |
| | | @click="querySiteStaticsInfo(row)" |
| | | >é£é©è¯¦æ
</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never"> |
| | | <DustRadarChart |
| | | :name="[ |
| | | 'æ°æ®ææé£é©', |
| | | 'å
¸åå¼å¸¸å¤ç°é£é©', |
| | | 'å¼å¸¸ç±»åèéé£é©', |
| | | 'æ°æ®è¶
æ é£é©', |
| | | 'æ°æ®å¨çº¿é£é©' |
| | | ]" |
| | | :yData="[ |
| | | bill.valid, |
| | | bill.exceptionRecurrence, |
| | | bill.exceptionTypeAggregation, |
| | | bill.exceeding, |
| | | bill.online |
| | | ]" |
| | | ></DustRadarChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="3"> |
| | | <el-card shadow="never" class="card-height"> |
| | | <template #header> |
| | | <h1 |
| | | :class="{ |
| | | 'weightColor-low': weight < 0.2, |
| | | 'weightColor-medium': weight >= 0.2 && weight < 0.6, |
| | | 'weightColor-heigh': weight >= 0.6 |
| | | }" |
| | | > |
| | | é£é©å¼(0~1)ï¼{{ weight }} |
| | | </h1> |
| | | </template> |
| | | <div class="risk-grade"> |
| | | <strong>é£é©ç级ï¼</strong> |
| | | <span v-if="weight >= 0.6"> é«é£é©</span> |
| | | <span v-else-if="weight >= 0.2 && weight < 0.6"> ä¸é£é©</span> |
| | | <span v-else> ä½é£é©</span> |
| | | </div> |
| | | |
| | | <div class="risk-advice"> |
| | | <strong>管æ§å»ºè®®ï¼</strong> |
| | | <span v-if="weight >= 0.6"> 建议对该ç«ç¹è¿è¡çº¿ä¸æ§æ³æ£æ¥ï¼ä¸é¡¹æ°æ®å¯¹æ¯</span> |
| | | <span v-else-if="weight >= 0.2 && weight < 0.6"> 建议å¼å±å¸¸æè¿½è¸ªåæ</span> |
| | | <span v-else> 建议å¼å¯¼ä¼ä¸é¿æä¿æ</span> |
| | | </div> |
| | | <div class="grade-instance"> |
| | | <div class="container"> |
| | | <div class="block-color heigh"></div> |
| | | <div>é«é£é©(â¥0.6)</div> |
| | | </div> |
| | | <div class="container"> |
| | | <div class="block-color medium"></div> |
| | | <div>ä¸é£é©(0.2~0.6)</div> |
| | | </div> |
| | | <div class="container"> |
| | | <div class="block-color low"></div> |
| | | <div>ä½é£é©(ï¼0.2)</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥ææç" :chartData="chartData3" yName="%" seriesName="æ¥ææç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-card shadow="never" class="card-height"> |
| | | <template #header><span class="title-16">é£é©è¯¦æ
</span></template> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥è¶
æ ç" :chartData="chartData4" yName="%" seriesName="æ¥è¶
æ ç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | <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="å
¸åå¼å¸¸å¤ç°çï¼"> |
| | | {{ bill.exceptionRecurrence * 100 }}% |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥åå¼" :chartData="chartData1" yName="mg/m³" seriesName="æ¥åå¼"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥å¨çº¿ç" :chartData="chartData2" yName="%" seriesName="æ¥å¨çº¿ç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥ææç" :chartData="chartData3" yName="%" seriesName="æ¥ææç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥è¶
æ ç" :chartData="chartData4" yName="%" seriesName="æ¥è¶
æ ç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-empty description="ææ æ°æ®" v-show="isNoData " :image-size="200" /> |
| | | <el-empty description="ææ æ°æ®" v-show="isNoData" :image-size="200" /> |
| | | </template> |
| | | |
| | | <style scoped> |
| | |
| | | margin: 10px; |
| | | } |
| | | .form-item { |
| | | margin-top:10px; |
| | | margin-top: 10px; |
| | | } |
| | | .chart-container { |
| | | margin-left: 10px; |
| | | } |
| | | .time-text { |
| | | letter-spacing: 2px; |
| | | font-size: 14px; |
| | | color: #333333; |
| | | letter-spacing: 1px; |
| | | } |
| | | .el-card { |
| | | margin-top: 15px; |
| | |
| | | color: red; |
| | | } |
| | | /* .wait-name { |
| | | width: 500px; |
| | | height: 600px; |
| | | } */ |
| | | width: 500px; |
| | | height: 600px; |
| | | } */ |
| | | .table-class { |
| | | border: 1px solid blue; |
| | | margin: 20px 0px 20px 0px; |
| | | /* border: 1px solid blue; */ |
| | | /* margin: 20px 0px 20px 0px; */ |
| | | height: 540px; |
| | | } |
| | | |
| | | .table-button { |
| | | letter-spacing: 1px; |
| | | text-decoration: underline; |
| | | border-radius: 0px; |
| | | } |
| | | .site-name { |
| | | margin-left: 20px; |
| | | } |
| | | </style> |
| | |
| | | this.form.endTime = dayjs(val[1]).format('YYYY-MM-DD HH:mm:ss'); |
| | | }, |
| | | |
| | | |
| | | |
| | | |
| | | // ç¹å»ç»è®¡æé® |
| | | fetchData() { |
| | | let params = {}; |
| | |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <ButtonClick style="margin-right: 12px;" content="é£é©æå" type="primary" :loading="queryButton" @do-search="fetchData" ></ButtonClick> |
| | | <ButtonClick style="margin-right: 12px;" content="æ°æ®æå" type="primary" :loading="queryButton" @do-search="fetchData" ></ButtonClick> |
| | | <ButtonExportExcel content="å¯¼åºæ°æ®" type="success" :loading="exportButton" @do-export="exportData"></ButtonExportExcel> |
| | | </el-form-item> |
| | | </el-form> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- æ¥åå¼ --> |
| | | |
| | | <script> |
| | | import InputSearch from '@/sfc/InputSearch.vue' |
| | | import AreaAndmonitorType from '@/sfc/AreaAndmonitorType.vue' |
| | | import DustRadarChart from './components/DustRadarChart.vue' |
| | | import exceptionApi from '@/api/exceptionApi.js' |
| | | import LineChart from './components/LineChart.vue' |
| | | import index from '@/utils/risk_estimate_common_function/index.js' |
| | | import ButtonClick from '@/sfc/ButtonClick.vue' |
| | | import dayjs from 'dayjs' |
| | | import MonthSelect from '@/sfc/MonthSelect.vue' |
| | | export default { |
| | | components: { |
| | | LineChart, |
| | | InputSearch, |
| | | AreaAndmonitorType, |
| | | DustRadarChart, |
| | | ButtonClick, |
| | | MonthSelect |
| | | }, |
| | | data() { |
| | | return { |
| | | isNoData: false, |
| | | loading: false, |
| | | screenLoading: false, |
| | | parentDataFlag:false, |
| | | chartData: [], |
| | | chartData1: {}, //ä¿åæ¥è¯¢çç»æ |
| | | chartData2: {}, |
| | | chartData3: {}, |
| | | chartData4: {}, |
| | | begin: '', //å¼å§æ¶é´ |
| | | end: '', //ç»ææ¶é´ |
| | | |
| | | form: { |
| | | // ç«ç¹åç§° |
| | | name: '', |
| | | // 设å¤ç¼å· |
| | | number: '', |
| | | // å¼å§æ¶é´ |
| | | beginTime: '', |
| | | // ç»ææ¶é´ |
| | | endTime: '' |
| | | }, |
| | | month: '', |
| | | // ä¼ éç»æä»½ç»ä»¶çå¼ |
| | | sfc_month: '', |
| | | // æçº¿å¾é
置项 |
| | | option: {}, |
| | | // æ°æ®æ¸
å |
| | | bill: { |
| | | min: '', |
| | | max: '', |
| | | avg: '', |
| | | online: 100, |
| | | valid: 100, |
| | | exceeding: 0, |
| | | |
| | | // å
¸åå¼å¸¸å¤ç°ç |
| | | exceptionRecurrence: 0, |
| | | // å¼å¸¸ç±»åæ®èé度 |
| | | exceptionTypeAggregation: 0 |
| | | }, |
| | | status: { |
| | | isHasData: false |
| | | }, |
| | | // æ¥è¯¢æé®å è½½ææ |
| | | queryButton: false, |
| | | |
| | | // é£é©å¼æåååçç«ç¹ |
| | | top_10_sites_with_risk_values: [{ name: '', riskValue: 0.2 }], |
| | | // é£é©å¼ |
| | | weight: '' |
| | | } |
| | | }, |
| | | |
| | | watch: { |
| | | sName() { |
| | | // å½å«ç页é¢è°ç¨æ¶ |
| | | if (this.sName != ''|| this.month_1 != '') { |
| | | // æ´æ°ç«ç¹åååæ¶é´ |
| | | this.form.name = this.sName |
| | | this.month = this.month_1 |
| | | this.parentDataFlag = true |
| | | // æ´æ°ææ¸
å |
| | | this.getRiskRank() |
| | | // æ´æ°ç»è®¡æ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | } |
| | | } |
| | | }, |
| | | |
| | | mounted() { |
| | | // // å è½½é£é©å¼æé«çç«ç¹æ°æ® |
| | | this.ShowDefaultData() |
| | | }, |
| | | |
| | | methods: { |
| | | // æ¥è¯¢ç«ç¹ç»è®¡ä¿¡æ¯ |
| | | querySiteStaticsInfo(row) { |
| | | this.form.name = row.siteName |
| | | // æ´æ°ç»è®¡æ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | }, |
| | | |
| | | // æ ¼å¼åæä»½ |
| | | giveMonth(val) { |
| | | //å°ä¸å½æ åæ¶é´è½¬ä¸ºæå®æ ¼å¼(该ç»ä»¶è¿åçæ åæ¶é´çæ ¼å¼ï¼æä»¥å¿
é¡»çå è¿ä¸ªå½æ°) |
| | | this.month = dayjs(val).format('YYYY-MM-DD') |
| | | // åæ¶æ´æ°å¼å§åç»ææ¶é´ |
| | | this.form.beginTime = dayjs(this.month).startOf().format('YYYY-MM-DD HH:mm:ss') |
| | | this.form.endTime = dayjs(this.month).endOf('month').format('YYYY-MM-DD HH:mm:ss') |
| | | }, |
| | | |
| | | /** |
| | | * é£é©è¯ä¼°æé® |
| | | * @paramï¼ |
| | | * @returnsï¼ |
| | | */ |
| | | riskAssessment() { |
| | | // æ´æ°æåæ¸
å |
| | | this.getRiskRank() |
| | | // æ´æ°åææ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | }, |
| | | |
| | | // æ´æ°åææ°æ® |
| | | getAnalysisData() { |
| | | // æ¥ç»è®¡æ°æ® |
| | | this.fetchDayAnalysisData() |
| | | // å¼å¸¸æ°æ® |
| | | this.fetchExceptionAnalysisData() |
| | | }, |
| | | |
| | | findObjectByPropertyValue(array, property, value) { |
| | | return array.find((obj) => obj[property] === value) |
| | | }, |
| | | |
| | | // æ¤é¡µé¢æå¼æ¶ |
| | | ShowDefaultData() { |
| | | // é»è®¤å è½½å±ç¤ºçå
容 |
| | | this.updateOriginPage() |
| | | }, |
| | | |
| | | // å è½½é»è®¤å±ç¤ºçå
容 |
| | | async updateOriginPage() { |
| | | this.screenLoading = true |
| | | // æ´æ°æåæ¸
åï¼å¹¶å¾å°é£é©å¼æé«ç«ç¹ |
| | | this.form.name = await this.getRiskRank() |
| | | this.screenLoading = false |
| | | // æ´æ°æ¥ç»è®¡æ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | }, |
| | | |
| | | // 计ç®é£é©å¼ |
| | | calRiskValue() { |
| | | exceptionApi.analysisdataByType(this.month, 'month').then((response) => { |
| | | const chartData = response.data.data |
| | | |
| | | if (response.data.data.length == 0) { |
| | | return |
| | | } |
| | | // ä»å¯¹è±¡æ°ç»æ¾å°è¯¥ç«ç¹æå¨çå
ç´ |
| | | let siteItem = this.findObjectByPropertyValue(chartData, 'name', this.form.name) |
| | | if (Object.keys(siteItem).length === 0) { |
| | | return |
| | | } |
| | | let arr = [] |
| | | arr.push(siteItem) |
| | | exceptionApi |
| | | .exceptiondata1({ |
| | | siteName: this.form.name, |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | .then((res) => { |
| | | let table = index.merge(arr, res.data.data, this.form.beginTime, this.form.endTime) |
| | | this.weight = table[0].riskValue |
| | | }) |
| | | }) |
| | | }, |
| | | |
| | | // æ ¹æ®ç®åç«ç¹ï¼æä»½ï¼æ¥æçº¿å¾æ¥ç»è®¡æ°æ® |
| | | fetchDayAnalysisData() { |
| | | let params = {} |
| | | if (this.form.name) { |
| | | params['siteName'] = this.form.name |
| | | } |
| | | if (this.form.beginTime) { |
| | | params['beginTime'] = this.form.beginTime |
| | | } |
| | | if (this.form.endTime) { |
| | | params['endTime'] = this.form.endTime |
| | | } |
| | | this.loading = true |
| | | this.queryButton = true |
| | | exceptionApi |
| | | .analysisdata(this.form.name, this.form.beginTime, this.form.endTime, 'day') |
| | | .then((response) => { |
| | | this.chartData = response.data.data |
| | | this.loading = false |
| | | this.queryButton = false |
| | | if (response.data.data.length == 0) { |
| | | this.isNoData = true |
| | | return |
| | | } |
| | | this.begin = this.chartData[0].lst |
| | | this.end = this.chartData[this.chartData.length - 1].lst |
| | | |
| | | // ç§»é¤ç©ºæ°æ®ç¶æ |
| | | this.isNoData = false |
| | | this.setChart() |
| | | // æçº¿å¾æ°æ® |
| | | let temp = index.calBillData(this.chartData, this.begin, this.end) |
| | | this.bill.min = temp['min'] |
| | | this.bill.max = temp['max'] |
| | | |
| | | this.bill.avg = temp['avg'] |
| | | this.bill.online = temp['online'] |
| | | this.bill.valid = temp['valid'] |
| | | this.bill.exceeding = temp['exceeding'] |
| | | }) |
| | | }, |
| | | // ä¼ä¸å¼å¸¸ç»è®¡æ°æ® |
| | | fetchExceptionAnalysisData() { |
| | | exceptionApi |
| | | .exceptiondata1({ |
| | | siteName: this.form.name, |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | .then((res) => { |
| | | let obj = index.calRecur(res.data.data) |
| | | this.bill.exceptionRecurrence = obj['exceptionRecurrence'] |
| | | this.bill.exceptionTypeAggregation = obj['exceptionTypeAggregation'] |
| | | }) |
| | | }, |
| | | |
| | | |
| | | // éæ©å
¶ä»å¼ç±»åæ¶ |
| | | setChart() { |
| | | if (this.chartData.length) { |
| | | // xè½´æ¥ææ¶é´ |
| | | let dateList = [] |
| | | //é¢ç²ç©å¹³åæµåº¦ |
| | | let dayAvg = [] |
| | | let dataOnline = [] |
| | | let dataValid = [] |
| | | let dataExceed = [] |
| | | this.chartData.forEach((item) => { |
| | | //xè½´æ¥æ |
| | | dateList.push(item.lst) |
| | | // å岿²¹çæµåº¦ |
| | | dayAvg.push(item.dayAvg) |
| | | dataOnline.push(item.dayOnline.slice(0, -1)) |
| | | dataValid.push(item.dayValid.slice(0, -1)) |
| | | dataExceed.push(item.dayExceeding.slice(0, -1)) |
| | | }) |
| | | |
| | | this.chartData1 = { |
| | | x: dateList, |
| | | y: dayAvg |
| | | } |
| | | this.chartData2 = { |
| | | x: dateList, |
| | | y: dataOnline |
| | | } |
| | | this.chartData3 = { |
| | | x: dateList, |
| | | y: dataValid |
| | | } |
| | | this.chartData4 = { |
| | | x: dateList, |
| | | y: dataExceed |
| | | } |
| | | } |
| | | }, |
| | | |
| | | // å¾å°å10é£é©æåæ¸
å |
| | | async getRiskRank() { |
| | | let staticsData = await exceptionApi.analysisdataByType(this.month, 'month') |
| | | |
| | | let exceptionData = await exceptionApi.exceptiondata1({ |
| | | siteName: '', |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | |
| | | const riskValueSites = index.merge( |
| | | staticsData.data.data, |
| | | exceptionData.data.data, |
| | | this.form.beginTime, |
| | | this.form.endTime |
| | | ) |
| | | this.top_10_sites_with_risk_values = this.getTopRiskData(riskValueSites, 10) |
| | | if (this.top_10_sites_with_risk_values.length != 0) { |
| | | // è¡¨æ ¼æé£é©å¼ååæå |
| | | this.$nextTick(() => { |
| | | this.$refs.table.sort('riskValue', 'descending') |
| | | }) |
| | | // Promise |
| | | return this.top_10_sites_with_risk_values[0].siteName |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * éåºæåï¼è¿åéåºånumçå
ç´ |
| | | * @paramï¼ å¯¹è±¡æ°ç»ï¼è¿åçæ°é |
| | | */ |
| | | getTopRiskData(arr, num) { |
| | | // æç
§riskValueéåºæå |
| | | arr.sort((a, b) => b.riskValue - a.riskValue) |
| | | // è·åånum个å
ç´ |
| | | return arr.slice(0, num) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <el-form :inline="true" :model="form"> |
| | | <el-form-item class="form-item"> |
| | | <AreaAndmonitorType></AreaAndmonitorType> |
| | | </el-form-item> |
| | | <el-form-item class="form-item"> |
| | | <InputSearch |
| | | :site-name="form.name" |
| | | isNeedDefaultSite="0" |
| | | @submit-value="(n) => (form.name = n)" |
| | | ></InputSearch> |
| | | </el-form-item> |
| | | |
| | | |
| | | |
| | | <el-form-item> |
| | | <MonthSelect :month="this.month_1" @submit-value="giveMonth"></MonthSelect> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <ButtonClick |
| | | content="é£é©è¯ä¼°" |
| | | type="primary" |
| | | :loading="queryButton" |
| | | @do-search="riskAssessment" |
| | | ></ButtonClick> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <div v-loading="screenLoading" class="wait-name"> |
| | | <div class="chart-container" v-show="!isNoData && !screenLoading"> |
| | | <div class="time-text"> |
| | | <span>æ°æ®ç»è®¡æ¶æ®µï¼{{ begin }} ~ {{ end }}</span> |
| | | <span class="site-name">{{ form.name }}</span> |
| | | </div> |
| | | |
| | | <el-row :gutter="10"> |
| | | <el-col :span="5"> |
| | | <el-card shadow="never" class="table-class"> |
| | | <el-table |
| | | ref="table" |
| | | highlight-current-row="true" |
| | | :data="top_10_sites_with_risk_values" |
| | | :default-sort="{ prop: 'riskValue', order: 'descending' }" |
| | | height="540" |
| | | > |
| | | <el-table-column |
| | | type="index" |
| | | label="åºå·" |
| | | :index="indexMethod" |
| | | fixed |
| | | width="25" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="siteName" label="ç«ç¹åç§°" show-overflow-tooltip /> |
| | | <el-table-column |
| | | prop="riskValue" |
| | | label="é£é©å¼" |
| | | sortable |
| | | width="67" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column label="æä½" align="center"> |
| | | <template #default="{ row }"> |
| | | <el-button |
| | | type="primary" |
| | | text |
| | | class="table-button" |
| | | @click="querySiteStaticsInfo(row)" |
| | | >é£é©è¯¦æ
</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never"> |
| | | <DustRadarChart |
| | | :name="[ |
| | | 'æ°æ®ææé£é©', |
| | | 'å
¸åå¼å¸¸å¤ç°é£é©', |
| | | 'å¼å¸¸ç±»åèéé£é©', |
| | | 'æ°æ®è¶
æ é£é©', |
| | | 'æ°æ®å¨çº¿é£é©' |
| | | ]" |
| | | :yData="[ |
| | | bill.valid, |
| | | bill.exceptionRecurrence, |
| | | bill.exceptionTypeAggregation, |
| | | bill.exceeding, |
| | | bill.online |
| | | ]" |
| | | ></DustRadarChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="3"> |
| | | <el-card shadow="never" class="card-height"> |
| | | <template #header> |
| | | <h1 |
| | | :class="{ |
| | | 'weightColor-low': weight < 0.2, |
| | | 'weightColor-medium': weight >= 0.2 && weight < 0.6, |
| | | 'weightColor-heigh': weight >= 0.6 |
| | | }" |
| | | > |
| | | é£é©å¼(0~1)ï¼{{ weight }} |
| | | </h1> |
| | | </template> |
| | | <div class="risk-grade"> |
| | | <strong>é£é©ç级ï¼</strong> |
| | | <span v-if="weight >= 0.6"> é«é£é©</span> |
| | | <span v-else-if="weight >= 0.2 && weight < 0.6"> ä¸é£é©</span> |
| | | <span v-else> ä½é£é©</span> |
| | | </div> |
| | | |
| | | <div class="risk-advice"> |
| | | <strong>管æ§å»ºè®®ï¼</strong> |
| | | <span v-if="weight >= 0.6"> 建议对该ç«ç¹è¿è¡çº¿ä¸æ§æ³æ£æ¥ï¼ä¸é¡¹æ°æ®å¯¹æ¯</span> |
| | | <span v-else-if="weight >= 0.2 && weight < 0.6"> 建议å¼å±å¸¸æè¿½è¸ªåæ</span> |
| | | <span v-else> 建议å¼å¯¼ä¼ä¸é¿æä¿æ</span> |
| | | </div> |
| | | <div class="grade-instance"> |
| | | <div class="container"> |
| | | <div class="block-color heigh"></div> |
| | | <div>é«é£é©(â¥0.6)</div> |
| | | </div> |
| | | <div class="container"> |
| | | <div class="block-color medium"></div> |
| | | <div>ä¸é£é©(0.2~0.6)</div> |
| | | </div> |
| | | <div class="container"> |
| | | <div class="block-color low"></div> |
| | | <div>ä½é£é©(ï¼0.2)</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="4"> |
| | | <el-card shadow="never" class="card-height"> |
| | | <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="å
¸åå¼å¸¸å¤ç°çï¼"> |
| | | {{ bill.exceptionRecurrence * 100 }}% |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥åå¼" :chartData="chartData1" yName="mg/m³" seriesName="æ¥åå¼"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥å¨çº¿ç" :chartData="chartData2" yName="%" seriesName="æ¥å¨çº¿ç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥ææç" :chartData="chartData3" yName="%" seriesName="æ¥ææç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥è¶
æ ç" :chartData="chartData4" yName="%" seriesName="æ¥è¶
æ ç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | <el-empty description="ææ æ°æ®" v-show="isNoData" :image-size="200" /> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | .el-form { |
| | | margin: 10px; |
| | | } |
| | | .form-item { |
| | | margin-top: 10px; |
| | | } |
| | | .chart-container { |
| | | margin-left: 10px; |
| | | } |
| | | .time-text { |
| | | letter-spacing: 2px; |
| | | } |
| | | .el-card { |
| | | margin-top: 15px; |
| | | border-radius: 9px; |
| | | } |
| | | .chart-container { |
| | | width: 98%; |
| | | /* height: 600px; */ |
| | | } |
| | | .card-value { |
| | | /* min-width:900px; */ |
| | | /* padding:0px */ |
| | | } |
| | | .card-height { |
| | | height: 540px; |
| | | } |
| | | .el-header { |
| | | background-color: #010408; |
| | | color: #333; |
| | | line-height: 60px; |
| | | } |
| | | .risk-advice { |
| | | margin: 40px 0px; |
| | | } |
| | | .container { |
| | | display: flex; |
| | | margin-bottom: 10px; |
| | | } |
| | | .grade-instance { |
| | | margin-top: 80px; |
| | | } |
| | | .block-color { |
| | | width: 1em; |
| | | height: 1em; |
| | | margin-right: 10px; |
| | | margin-top: 3px; |
| | | } |
| | | .heigh { |
| | | background-color: red; |
| | | } |
| | | .medium { |
| | | background-color: #fadc19; |
| | | } |
| | | .low { |
| | | background-color: #9fdb1d; |
| | | } |
| | | |
| | | .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; |
| | | } |
| | | .weightColor-low { |
| | | color: #9fdb1d; |
| | | } |
| | | .weightColor-medium { |
| | | color: #dabe09; |
| | | } |
| | | .weightColor-heigh { |
| | | color: red; |
| | | } |
| | | .risk-grade { |
| | | display: flex; |
| | | margin-top: 10px; |
| | | } |
| | | :deep().el-table__header-wrapper { |
| | | color: red; |
| | | } |
| | | /* .wait-name { |
| | | width: 500px; |
| | | height: 600px; |
| | | } */ |
| | | .table-class { |
| | | /* border: 1px solid blue; */ |
| | | /* margin: 20px 0px 20px 0px; */ |
| | | height: 540px; |
| | | } |
| | | |
| | | .table-button { |
| | | letter-spacing: 1px; |
| | | text-decoration: underline; |
| | | border-radius: 0px; |
| | | } |
| | | .site-name { |
| | | margin-left: 120px; |
| | | } |
| | | </style> |
| | | |
| | |
| | | import ButtonClick from '@/sfc/ButtonClick.vue' |
| | | import { ElMessage } from 'element-plus' |
| | | import MonthSelect from '@/sfc/MonthSelect.vue'; |
| | | import SiteDetail from '@/views/line_graph/components/SiteDetail.vue' |
| | | import { useLoadingStore } from '@/stores/loadingStore'; |
| | | import { mapStores } from 'pinia'; |
| | | export default { |
| | | components: { |
| | | AreaAndmonitorType, |
| | | ButtonExportExcel, |
| | | ButtonClick, |
| | | MonthSelect |
| | | MonthSelect, |
| | | SiteDetail, |
| | | }, |
| | | |
| | | data() { |
| | | return { |
| | | // è¡¨æ ¼æ°æ® |
| | |
| | | // è¡¨æ ¼æ°æ® |
| | | table: [], |
| | | // è¡¨æ ¼é«åº¦ |
| | | tableHeight: 600 |
| | | tableHeight: 600, |
| | | currentRow:[] |
| | | } |
| | | }, |
| | | setup() { |
| | | // å¼å
¥ ç¾åå·æ¯è¾å¤§å° 导åºåè½ |
| | | const { exportToExcel } = useCommonFunction() |
| | | return { exportToExcel } |
| | | }, |
| | | computed: { |
| | | ...mapStores(useLoadingStore), |
| | | }, |
| | | mounted(){ |
| | | // |
| | |
| | | |
| | | exceptionApi |
| | | .exceptiondata1({ |
| | | siteName: this.form.name, |
| | | siteName: '', |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | |
| | | |
| | | }) |
| | | }, |
| | | |
| | | // ä¼ä¸å¼å¸¸è¯¦æ
|
| | | // exceptiondataCount() { |
| | | // exceptionApi |
| | | // .exceptiondata1({ |
| | | // // siteName: this.form.name, |
| | | // siteName: '', |
| | | // beginTime: this.form.beginTime, |
| | | // endTime: this.form.endTime |
| | | // }) |
| | | // .then((res) => { |
| | | // let obj = index.calRecur(res.data.data) |
| | | // this.bill.exceptionRecurrence = obj['exceptionRecurrence'] |
| | | // this.bill.exceptionTypeAggregation = obj['exceptionTypeAggregation'] |
| | | // }) |
| | | // }, |
| | | |
| | | /** |
| | | * åå§å è½½å½æ° |
| | |
| | | } else { |
| | | ElMessage('æ æ°æ®éè¦å¯¼åº') |
| | | } |
| | | }, |
| | | openDetail(row){ |
| | | this.$router.push(`/detail/${row.siteName}/${this.form.month}`) |
| | | } |
| | | } |
| | | } |
| | |
| | | <AreaAndmonitorType></AreaAndmonitorType> |
| | | </el-form-item> |
| | | |
| | | <!-- <el-form-item> |
| | | <InputSearch isNeedDefaultSite="1" @submit-value="(n) => (form.name = n)"></InputSearch> |
| | | </el-form-item> --> |
| | | |
| | | <el-form-item> |
| | | <MonthSelect @submit-value="giveMonth"></MonthSelect> |
| | | <MonthSelect @submit-value="giveMonth"></MonthSelect> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | :data="table" |
| | | :height="tableHeight" |
| | | v-loading="loading" |
| | | element-loading-text="åå°åæä¸..." |
| | | style="width: 98%" |
| | | :cell-class-name="tableCellClassName" |
| | | :default-sort="{ prop: 'riskValue', order: 'descending' }" |
| | |
| | | width="55" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="siteName" label="ç«ç¹åç§°" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="siteName" label="ç«ç¹åç§°" align="center" show-overflow-tooltip > |
| | | <template #default="{ row }"> |
| | | <el-button type="primary" text class="table-button" @click="openDetail(row)" |
| | | >{{row.siteName}}</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="region" label="åºå" align="center" width="80" show-overflow-tooltip /> |
| | | <el-table-column prop="monitorType" label="æ£æµç±»å" align="center" width="80" show-overflow-tooltip /> |
| | | <el-table-column |
| | |
| | | /> |
| | | </el-table> |
| | | <el-empty v-show="isNoData" :image-size="200" /> |
| | | |
| | | |
| | | |
| | | </template> |
| | | |
| | | <style scoped> |
| | |
| | | background-color: red; |
| | | /* color: rgb(241, 236, 236); */ |
| | | } |
| | | .table-button { |
| | | letter-spacing: 1px; |
| | | text-decoration: underline; |
| | | border-radius: 0px; |
| | | } |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!--ç¹å»ç«ç¹ 跳转è³é£é©æ¨¡åé¡µé¢ --> |
| | | <script> |
| | | import subRiskModel from '@/views/line_graph/components/subRiskModel.vue' |
| | | export default { |
| | | components: { |
| | | subRiskModel |
| | | }, |
| | | data() { |
| | | return { |
| | | siteName: '', |
| | | month: '' |
| | | } |
| | | }, |
| | | watch: {}, |
| | | mounted() {}, |
| | | beforeRouteEnter(to, from, next) { |
| | | next((vm) => { |
| | | // éè¿ `vm` 访é®ç»ä»¶å®ä¾ |
| | | vm.siteName = to.params.siteName |
| | | vm.month = to.params.month |
| | | }) |
| | | }, |
| | | methods: { |
| | | // åéé¡µé¢ |
| | | onBack() { |
| | | this.$router.back() |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <el-page-header @back="onBack"> |
| | | <template #content> |
| | | <span> ç«ç¹é£é©æ°æ®è¯¦æ
</span> |
| | | </template> |
| | | </el-page-header> |
| | | |
| | | <subRiskModel :sName="siteName" :month_1="month"> </subRiskModel> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | .el-page-header { |
| | | margin: 10px 0px 10px 10px; |
| | | } |
| | | span { |
| | | font-size: 14px; |
| | | color: #333333; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- é£é©æ¨¡åçé¡µé¢ |
| | | åºå«ï¼ |
| | | 1.æ¥åç¶ç»ä»¶ä¼ å |
| | | 2.æ åå§å è½½æ°æ®ï¼æ mountedï¼ |
| | | --> |
| | | |
| | | <script> |
| | | import InputSearch from '@/sfc/InputSearch.vue' |
| | | import AreaAndmonitorType from '@/sfc/AreaAndmonitorType.vue' |
| | | import DustRadarChart from '@/views/line_graph/components/DustRadarChart.vue' |
| | | import exceptionApi from '@/api/exceptionApi.js' |
| | | import LineChart from '@/views/line_graph/components/LineChart.vue' |
| | | import index from '@/utils/risk_estimate_common_function/index.js' |
| | | import ButtonClick from '@/sfc/ButtonClick.vue' |
| | | import dayjs from 'dayjs' |
| | | import MonthSelect from '@/sfc/MonthSelect.vue' |
| | | export default { |
| | | props: { |
| | | sName: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | month_1: { |
| | | type: String, |
| | | default: '' |
| | | } |
| | | }, |
| | | components: { |
| | | LineChart, |
| | | // DateSelectWithShortCuts, |
| | | InputSearch, |
| | | AreaAndmonitorType, |
| | | DustRadarChart, |
| | | ButtonClick, |
| | | MonthSelect |
| | | }, |
| | | data() { |
| | | return { |
| | | isNoData: false, |
| | | loading: false, |
| | | screenLoading: false, |
| | | parentDataFlag:false, |
| | | chartData: [], |
| | | chartData1: {}, //ä¿åæ¥è¯¢çç»æ |
| | | chartData2: {}, |
| | | chartData3: {}, |
| | | chartData4: {}, |
| | | //devId:'', //设å¤ç¼å· |
| | | begin: '', //å¼å§æ¶é´ |
| | | end: '', //ç»ææ¶é´ |
| | | |
| | | form: { |
| | | // ç«ç¹åç§° |
| | | name: '', |
| | | // 设å¤ç¼å· |
| | | number: '', |
| | | |
| | | // month:'', |
| | | // å¼å§æ¶é´ |
| | | beginTime: '', |
| | | // ç»ææ¶é´ |
| | | endTime: '' |
| | | }, |
| | | month: '', |
| | | // ä¼ éç»æä»½ç»ä»¶çå¼ |
| | | sfc_month: '', |
| | | // æçº¿å¾é
置项 |
| | | option: {}, |
| | | // æ°æ®æ¸
å |
| | | bill: { |
| | | min: '', |
| | | max: '', |
| | | avg: '', |
| | | online: 100, |
| | | valid: 100, |
| | | exceeding: 0, |
| | | |
| | | // å
¸åå¼å¸¸å¤ç°ç |
| | | exceptionRecurrence: 0, |
| | | // å¼å¸¸ç±»åæ®èé度 |
| | | exceptionTypeAggregation: 0 |
| | | }, |
| | | status: { |
| | | isHasData: false |
| | | }, |
| | | // æ¥è¯¢æé®å è½½ææ |
| | | queryButton: false, |
| | | |
| | | // é£é©å¼æåååçç«ç¹ |
| | | top_10_sites_with_risk_values: [{ name: '', riskValue: 0.2 }], |
| | | // é£é©å¼ |
| | | weight: '' |
| | | } |
| | | }, |
| | | |
| | | watch: { |
| | | sName() { |
| | | // å½å«ç页é¢è°ç¨æ¶ |
| | | if (this.sName != ''|| this.month_1 != '') { |
| | | // æ´æ°ç«ç¹åååæ¶é´ |
| | | this.form.name = this.sName |
| | | this.month = this.month_1 |
| | | // åæ¶æ´æ°æèµ·å§æ¶é´ |
| | | this.form.beginTime = dayjs(this.month).startOf().format('YYYY-MM-DD HH:mm:ss') |
| | | this.form.endTime = dayjs(this.month).endOf('month').format('YYYY-MM-DD HH:mm:ss') |
| | | |
| | | this.parentDataFlag = true |
| | | // æ´æ°ææ¸
å |
| | | this.getRiskRank() |
| | | // æ´æ°ç»è®¡æ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | |
| | | |
| | | } |
| | | } |
| | | }, |
| | | |
| | | mounted() { |
| | | |
| | | }, |
| | | |
| | | methods: { |
| | | // æ¥è¯¢ç«ç¹ç»è®¡ä¿¡æ¯ |
| | | querySiteStaticsInfo(row) { |
| | | this.form.name = row.siteName |
| | | // æ´æ°ç»è®¡æ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | }, |
| | | |
| | | // æ ¼å¼åæä»½ |
| | | giveMonth(val) { |
| | | //å°ä¸å½æ åæ¶é´è½¬ä¸ºæå®æ ¼å¼(该ç»ä»¶è¿åçæ åæ¶é´çæ ¼å¼ï¼æä»¥å¿
é¡»çå è¿ä¸ªå½æ°) |
| | | this.month = dayjs(val).format('YYYY-MM-DD') |
| | | // åæ¶æ´æ°å¼å§åç»ææ¶é´ |
| | | this.form.beginTime = dayjs(this.month).startOf().format('YYYY-MM-DD HH:mm:ss') |
| | | this.form.endTime = dayjs(this.month).endOf('month').format('YYYY-MM-DD HH:mm:ss') |
| | | console.log(this.form.beginTime, this.form.endTime) |
| | | }, |
| | | |
| | | /** |
| | | * é£é©è¯ä¼°æé® |
| | | * @paramï¼ |
| | | * @returnsï¼ |
| | | */ |
| | | riskAssessment() { |
| | | // æ´æ°æåæ¸
å |
| | | this.getRiskRank() |
| | | // æ´æ°åææ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | }, |
| | | |
| | | // æ´æ°åææ°æ® |
| | | getAnalysisData() { |
| | | // æ¥ç»è®¡æ°æ® |
| | | this.fetchDayAnalysisData() |
| | | // å¼å¸¸æ°æ® |
| | | this.fetchExceptionAnalysisData() |
| | | }, |
| | | |
| | | findObjectByPropertyValue(array, property, value) { |
| | | return array.find((obj) => obj[property] === value) |
| | | }, |
| | | |
| | | // æ¤é¡µé¢æå¼æ¶ |
| | | ShowDefaultData() { |
| | | // é»è®¤å è½½å±ç¤ºçå
容 |
| | | this.updateOriginPage() |
| | | }, |
| | | |
| | | // å è½½é»è®¤å±ç¤ºçå
容 |
| | | async updateOriginPage() { |
| | | |
| | | // æ´æ°æåæ¸
åï¼å¹¶å¾å°é£é©å¼æé«ç«ç¹ |
| | | this.form.name = await this.getRiskRank() |
| | | |
| | | // æ´æ°æ¥ç»è®¡æ°æ® |
| | | this.getAnalysisData() |
| | | // 计ç®é£é©å¼ |
| | | this.calRiskValue() |
| | | }, |
| | | |
| | | // 计ç®é£é©å¼ |
| | | calRiskValue() { |
| | | exceptionApi.analysisdataByType(this.month, 'month').then((response) => { |
| | | const chartData = response.data.data |
| | | |
| | | if (response.data.data.length == 0) { |
| | | return |
| | | } |
| | | // ä»å¯¹è±¡æ°ç»æ¾å°è¯¥ç«ç¹æå¨çå
ç´ |
| | | let siteItem = this.findObjectByPropertyValue(chartData, 'name', this.form.name) |
| | | if (Object.keys(siteItem).length === 0) { |
| | | return |
| | | } |
| | | let arr = [] |
| | | arr.push(siteItem) |
| | | exceptionApi |
| | | .exceptiondata1({ |
| | | siteName: this.form.name, |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | .then((res) => { |
| | | let table = index.merge(arr, res.data.data, this.form.beginTime, this.form.endTime) |
| | | this.weight = table[0].riskValue |
| | | }) |
| | | }) |
| | | }, |
| | | |
| | | // æ ¹æ®ç®åç«ç¹ï¼æä»½ï¼æ¥æçº¿å¾æ¥ç»è®¡æ°æ® |
| | | fetchDayAnalysisData() { |
| | | let params = {} |
| | | if (this.form.name) { |
| | | params['siteName'] = this.form.name |
| | | } |
| | | if (this.form.beginTime) { |
| | | params['beginTime'] = this.form.beginTime |
| | | } |
| | | if (this.form.endTime) { |
| | | params['endTime'] = this.form.endTime |
| | | } |
| | | this.loading = true |
| | | this.queryButton = true |
| | | exceptionApi |
| | | .analysisdata(this.form.name, this.form.beginTime, this.form.endTime, 'day') |
| | | .then((response) => { |
| | | this.chartData = response.data.data |
| | | this.loading = false |
| | | this.queryButton = false |
| | | if (response.data.data.length == 0) { |
| | | this.isNoData = true |
| | | return |
| | | } |
| | | this.begin = this.chartData[0].lst |
| | | this.end = this.chartData[this.chartData.length - 1].lst |
| | | |
| | | // ç§»é¤ç©ºæ°æ®ç¶æ |
| | | this.isNoData = false |
| | | this.setChart() |
| | | // æçº¿å¾æ°æ® |
| | | let temp = index.calBillData(this.chartData, this.begin, this.end) |
| | | this.bill.min = temp['min'] |
| | | this.bill.max = temp['max'] |
| | | |
| | | this.bill.avg = temp['avg'] |
| | | this.bill.online = temp['online'] |
| | | this.bill.valid = temp['valid'] |
| | | this.bill.exceeding = temp['exceeding'] |
| | | }) |
| | | }, |
| | | // ä¼ä¸å¼å¸¸ç»è®¡æ°æ® |
| | | fetchExceptionAnalysisData() { |
| | | exceptionApi |
| | | .exceptiondata1({ |
| | | siteName: this.form.name, |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | .then((res) => { |
| | | let obj = index.calRecur(res.data.data) |
| | | this.bill.exceptionRecurrence = obj['exceptionRecurrence'] |
| | | this.bill.exceptionTypeAggregation = obj['exceptionTypeAggregation'] |
| | | }) |
| | | }, |
| | | |
| | | // éæ©å
¶ä»å¼ç±»åæ¶ |
| | | setChart() { |
| | | if (this.chartData.length) { |
| | | // xè½´æ¥ææ¶é´ |
| | | let dateList = [] |
| | | //é¢ç²ç©å¹³åæµåº¦ |
| | | let dayAvg = [] |
| | | let dataOnline = [] |
| | | let dataValid = [] |
| | | let dataExceed = [] |
| | | this.chartData.forEach((item) => { |
| | | //xè½´æ¥æ |
| | | dateList.push(item.lst) |
| | | // å岿²¹çæµåº¦ |
| | | dayAvg.push(item.dayAvg) |
| | | dataOnline.push(item.dayOnline.slice(0, -1)) |
| | | dataValid.push(item.dayValid.slice(0, -1)) |
| | | dataExceed.push(item.dayExceeding.slice(0, -1)) |
| | | }) |
| | | |
| | | this.chartData1 = { |
| | | x: dateList, |
| | | y: dayAvg |
| | | } |
| | | this.chartData2 = { |
| | | x: dateList, |
| | | y: dataOnline |
| | | } |
| | | this.chartData3 = { |
| | | x: dateList, |
| | | y: dataValid |
| | | } |
| | | this.chartData4 = { |
| | | x: dateList, |
| | | y: dataExceed |
| | | } |
| | | } |
| | | }, |
| | | |
| | | // å¾å°å10é£é©æåæ¸
å |
| | | async getRiskRank() { |
| | | this.screenLoading = true |
| | | let staticsData = await exceptionApi.analysisdataByType(this.month, 'month') |
| | | |
| | | let exceptionData = await exceptionApi.exceptiondata1({ |
| | | siteName: '', |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | |
| | | const riskValueSites = index.merge( |
| | | staticsData.data.data, |
| | | exceptionData.data.data, |
| | | this.form.beginTime, |
| | | this.form.endTime |
| | | ) |
| | | this.top_10_sites_with_risk_values = this.getTopRiskData(riskValueSites, 10) |
| | | |
| | | if (this.top_10_sites_with_risk_values.length != 0) { |
| | | // è¡¨æ ¼æé£é©å¼ååæå |
| | | this.$nextTick(() => { |
| | | this.$refs.table.sort('riskValue', 'descending') |
| | | }) |
| | | this.screenLoading = false |
| | | // Promise |
| | | return this.top_10_sites_with_risk_values[0].siteName |
| | | } |
| | | this.screenLoading = false |
| | | }, |
| | | |
| | | /** |
| | | * éåºæåï¼è¿åéåºånumçå
ç´ |
| | | * @paramï¼ å¯¹è±¡æ°ç»ï¼è¿åçæ°é |
| | | */ |
| | | getTopRiskData(arr, num) { |
| | | // æç
§riskValueéåºæå |
| | | arr.sort((a, b) => b.riskValue - a.riskValue) |
| | | // è·åånum个å
ç´ |
| | | return arr.slice(0, num) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <el-form :inline="true" :model="form"> |
| | | <el-form-item class="form-item"> |
| | | <AreaAndmonitorType></AreaAndmonitorType> |
| | | </el-form-item> |
| | | <el-form-item class="form-item"> |
| | | <!-- <InputSearch isNeedDefaultSite="1" @submit-value="(n) => (form.name = n)" :siteName="form.name"></InputSearch> --> |
| | | <InputSearch |
| | | :site-name="form.name" |
| | | isNeedDefaultSite="0" |
| | | @submit-value="(n) => (form.name = n)" |
| | | ></InputSearch> |
| | | </el-form-item> |
| | | |
| | | <!-- <el-form-item> |
| | | <DateSelectWithShortCuts @submit-time="giveTime"></DateSelectWithShortCuts> |
| | | </el-form-item> --> |
| | | |
| | | <el-form-item> |
| | | <MonthSelect :month="this.month_1" @submit-value="giveMonth"></MonthSelect> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <ButtonClick |
| | | content="é£é©è¯ä¼°" |
| | | type="primary" |
| | | :loading="queryButton" |
| | | @do-search="riskAssessment" |
| | | ></ButtonClick> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <div v-loading="screenLoading" class="wait-name"> |
| | | <div class="chart-container" v-show="!isNoData && !screenLoading"> |
| | | <div class="time-text"> |
| | | <span>æ°æ®ç»è®¡æ¶æ®µï¼{{ begin }} ~ {{ end }}</span> |
| | | <span class="site-name">{{ form.name }}</span> |
| | | </div> |
| | | |
| | | <el-row :gutter="10"> |
| | | <el-col :span="5"> |
| | | <el-card shadow="never" class="table-class"> |
| | | <el-table |
| | | ref="table" |
| | | highlight-current-row="true" |
| | | :data="top_10_sites_with_risk_values" |
| | | :default-sort="{ prop: 'riskValue', order: 'descending' }" |
| | | height="540" |
| | | > |
| | | <el-table-column |
| | | type="index" |
| | | label="åºå·" |
| | | :index="indexMethod" |
| | | fixed |
| | | width="25" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="siteName" label="ç«ç¹åç§°" show-overflow-tooltip /> |
| | | <el-table-column |
| | | prop="riskValue" |
| | | label="é£é©å¼" |
| | | sortable |
| | | width="67" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column label="æä½" align="center"> |
| | | <template #default="{ row }"> |
| | | <el-button |
| | | type="primary" |
| | | text |
| | | class="table-button" |
| | | @click="querySiteStaticsInfo(row)" |
| | | >é£é©è¯¦æ
</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never"> |
| | | <DustRadarChart |
| | | :name="[ |
| | | 'æ°æ®ææé£é©', |
| | | 'å
¸åå¼å¸¸å¤ç°é£é©', |
| | | 'å¼å¸¸ç±»åèéé£é©', |
| | | 'æ°æ®è¶
æ é£é©', |
| | | 'æ°æ®å¨çº¿é£é©' |
| | | ]" |
| | | :yData="[ |
| | | bill.valid, |
| | | bill.exceptionRecurrence, |
| | | bill.exceptionTypeAggregation, |
| | | bill.exceeding, |
| | | bill.online |
| | | ]" |
| | | ></DustRadarChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="3"> |
| | | <el-card shadow="never" class="card-height"> |
| | | <template #header> |
| | | <h1 |
| | | :class="{ |
| | | 'weightColor-low': weight < 0.2, |
| | | 'weightColor-medium': weight >= 0.2 && weight < 0.6, |
| | | 'weightColor-heigh': weight >= 0.6 |
| | | }" |
| | | > |
| | | é£é©å¼(0~1)ï¼{{ weight }} |
| | | </h1> |
| | | </template> |
| | | <div class="risk-grade"> |
| | | <strong>é£é©ç级ï¼</strong> |
| | | <span v-if="weight >= 0.6"> é«é£é©</span> |
| | | <span v-else-if="weight >= 0.2 && weight < 0.6"> ä¸é£é©</span> |
| | | <span v-else> ä½é£é©</span> |
| | | </div> |
| | | |
| | | <div class="risk-advice"> |
| | | <strong>管æ§å»ºè®®ï¼</strong> |
| | | <span v-if="weight >= 0.6"> 建议对该ç«ç¹è¿è¡çº¿ä¸æ§æ³æ£æ¥ï¼ä¸é¡¹æ°æ®å¯¹æ¯</span> |
| | | <span v-else-if="weight >= 0.2 && weight < 0.6"> 建议å¼å±å¸¸æè¿½è¸ªåæ</span> |
| | | <span v-else> 建议å¼å¯¼ä¼ä¸é¿æä¿æ</span> |
| | | </div> |
| | | <div class="grade-instance"> |
| | | <div class="container"> |
| | | <div class="block-color heigh"></div> |
| | | <div>é«é£é©(â¥0.6)</div> |
| | | </div> |
| | | <div class="container"> |
| | | <div class="block-color medium"></div> |
| | | <div>ä¸é£é©(0.2~0.6)</div> |
| | | </div> |
| | | <div class="container"> |
| | | <div class="block-color low"></div> |
| | | <div>ä½é£é©(ï¼0.2)</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="4"> |
| | | <el-card shadow="never" class="card-height"> |
| | | <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="å
¸åå¼å¸¸å¤ç°çï¼"> |
| | | {{ bill.exceptionRecurrence * 100 }}% |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥åå¼" :chartData="chartData1" yName="mg/m³" seriesName="æ¥åå¼"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥å¨çº¿ç" :chartData="chartData2" yName="%" seriesName="æ¥å¨çº¿ç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥ææç" :chartData="chartData3" yName="%" seriesName="æ¥ææç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :span="12"> |
| | | <el-card shadow="never" class="card-value"> |
| | | <LineChart title="æ¥è¶
æ ç" :chartData="chartData4" yName="%" seriesName="æ¥è¶
æ ç"> |
| | | </LineChart> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | <el-empty description="ææ æ°æ®" v-show="isNoData" :image-size="200" /> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | .el-form { |
| | | margin: 10px; |
| | | } |
| | | .form-item { |
| | | margin-top: 10px; |
| | | } |
| | | .chart-container { |
| | | margin-left: 10px; |
| | | } |
| | | .time-text { |
| | | letter-spacing: 2px; |
| | | } |
| | | .el-card { |
| | | margin-top: 15px; |
| | | border-radius: 9px; |
| | | } |
| | | .chart-container { |
| | | width: 98%; |
| | | /* height: 600px; */ |
| | | } |
| | | .card-value { |
| | | /* min-width:900px; */ |
| | | /* padding:0px */ |
| | | } |
| | | .card-height { |
| | | height: 540px; |
| | | } |
| | | .el-header { |
| | | background-color: #010408; |
| | | color: #333; |
| | | line-height: 60px; |
| | | } |
| | | .risk-advice { |
| | | margin: 40px 0px; |
| | | } |
| | | .container { |
| | | display: flex; |
| | | margin-bottom: 10px; |
| | | } |
| | | .grade-instance { |
| | | margin-top: 80px; |
| | | } |
| | | .block-color { |
| | | width: 1em; |
| | | height: 1em; |
| | | margin-right: 10px; |
| | | margin-top: 3px; |
| | | } |
| | | .heigh { |
| | | background-color: red; |
| | | } |
| | | .medium { |
| | | background-color: #fadc19; |
| | | } |
| | | .low { |
| | | background-color: #9fdb1d; |
| | | } |
| | | |
| | | .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; |
| | | } |
| | | .weightColor-low { |
| | | color: #9fdb1d; |
| | | } |
| | | .weightColor-medium { |
| | | color: #dabe09; |
| | | } |
| | | .weightColor-heigh { |
| | | color: red; |
| | | } |
| | | .risk-grade { |
| | | display: flex; |
| | | margin-top: 10px; |
| | | } |
| | | :deep().el-table__header-wrapper { |
| | | color: red; |
| | | } |
| | | /* .wait-name { |
| | | width: 500px; |
| | | height: 600px; |
| | | } */ |
| | | .table-class { |
| | | /* border: 1px solid blue; */ |
| | | /* margin: 20px 0px 20px 0px; */ |
| | | height: 540px; |
| | | } |
| | | |
| | | .table-button { |
| | | letter-spacing: 1px; |
| | | text-decoration: underline; |
| | | border-radius: 0px; |
| | | } |
| | | .site-name { |
| | | margin-left: 120px; |
| | | } |
| | | </style> |
| | | |
| | |
| | | } |
| | | }) |
| | | }, |
| | | // get(){ |
| | | |
| | | // exceptionApi.analysisdata('éå±±åºéå±±æ°åJSC1-0401åå
1-11-01å°å项ç®09','2023-07-01 00:00:00','2023-07-03 00:00:00').then((res)=>{ |
| | | // this.a = res.data.data |
| | | // // console.log('æ°æ®ä¸ºï¼',res.data.data); |
| | | // return res.data.data |
| | | // }).then(result =>{ |
| | | // console.log('é¾ï¼',result); |
| | | // exceptionApi.analysisdata('䏿µ·å½æå»ºææéå
¬å¸','2023-07-01 00:00:00','2023-07-03 00:00:00') |
| | | // } |
| | | // ) |
| | | // }, |
| | | |
| | | // async getAll(){ |
| | | // const a = await this.$http |
| | | // .get('/dust/sitenamecode', { |
| | | // params: { |
| | | // exceptionType: '0', |
| | | // beginTime: this.beginTime, |
| | | // endTime: this.endTime |
| | | // } |
| | | // }).then((result) => { |
| | | // this.exception.exception0 = result.data.data |
| | | // }) |
| | | |
| | | // const b = await this.$http |
| | | // .get('/dust/sitenamecode', { |
| | | // params: { |
| | | // exceptionType: '1', |
| | | // beginTime: this.beginTime, |
| | | // endTime: this.endTime |
| | | // } |
| | | // }).then((result) => { |
| | | // this.exception.exception1 = result.data.data |
| | | // }) |
| | | |
| | | |
| | | // const c = await this.$http |
| | | // .get('/dust/sitenamecode', { |
| | | // params: { |
| | | // exceptionType: '2', |
| | | // beginTime: this.beginTime, |
| | | // endTime: this.endTime |
| | | // } |
| | | // }).then((result) => { |
| | | // this.exception.exception2 = result.data.data |
| | | // }) |
| | | // const d = await this.$http |
| | | // .get('/dust/sitenamecode', { |
| | | // params: { |
| | | // exceptionType: '3', |
| | | // beginTime: this.beginTime, |
| | | // endTime: this.endTime |
| | | // } |
| | | // }).then((result) => { |
| | | // this.exception.exception3 = result.data.data |
| | | // }) |
| | | |
| | | // console.log('å¤1ï¼',this.exception.exception0); |
| | | // console.log('å¤2ï¼',this.exception.exception1); |
| | | // console.log('å¤3ï¼',this.exception.exception2); |
| | | // console.log('å¤4ï¼',this.exception.exception3); |
| | | // // Promise.all([a,b,c,d,e,f,g,h]).then((responses)=>{ |
| | | // // console.log('å
¨é¨æ°æ®ä¸ºï¼'); |
| | | // // for (const response of responses) { |
| | | // // console.log('æ°æ®ï¼',response.data.data); |
| | | |
| | | // // } |
| | | // // }) |
| | | // } |
| | | |
| | | } |
| | | } |
| | | </script> |