| | |
| | | ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] |
| | | ElOption: typeof import('element-plus/es')['ElOption'] |
| | | ElPagination: typeof import('element-plus/es')['ElPagination'] |
| | | ElRadio: typeof import('element-plus/es')['ElRadio'] |
| | | ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] |
| | | ElRow: typeof import('element-plus/es')['ElRow'] |
| | | ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] |
| | | ElSelect: typeof import('element-plus/es')['ElSelect'] |
| | |
| | | "dayjs": "^1.11.9", |
| | | "echarts": "^5.4.3", |
| | | "element-plus": "^2.3.6", |
| | | "js-cookie": "^3.0.1", |
| | | "pinia": "^2.1.3", |
| | | "sass": "^1.63.4", |
| | | "vue": "^3.3.4", |
| | |
| | | "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", |
| | | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", |
| | | "dev": true |
| | | }, |
| | | "node_modules/js-cookie": { |
| | | "version": "3.0.1", |
| | | "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.1.tgz", |
| | | "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", |
| | | "engines": { |
| | | "node": ">=12" |
| | | } |
| | | }, |
| | | "node_modules/js-stringify": { |
| | | "version": "1.0.2", |
| | |
| | | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", |
| | | "dev": true |
| | | }, |
| | | "js-cookie": { |
| | | "version": "3.0.1", |
| | | "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.1.tgz", |
| | | "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==" |
| | | }, |
| | | "js-stringify": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmmirror.com/js-stringify/-/js-stringify-1.0.2.tgz", |
| | |
| | | "dayjs": "^1.11.9", |
| | | "echarts": "^5.4.3", |
| | | "element-plus": "^2.3.6", |
| | | "js-cookie": "^3.0.1", |
| | | "pinia": "^2.1.3", |
| | | "sass": "^1.63.4", |
| | | "vue": "^3.3.4", |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import {$http} from '@/api/index.js'; |
| | | |
| | | export default { |
| | | |
| | | /** |
| | | * æ ¹æ®ç«ç¹ï¼æ¶é´æ®µæ¥è¯¢åå²è¡¨ä¸æææ°æ® |
| | | * @paramï¼ |
| | | * @returnsï¼ |
| | | */ |
| | | submitSetting(argsObj){ |
| | | |
| | | return $http.post('dust/setting',argsObj); |
| | | } |
| | | |
| | | } |
| | |
| | | _params.exceptionType = exceptionType; |
| | | } |
| | | return $http.get('/dust/exceptiondata1', { params: _params }); |
| | | }, |
| | | |
| | | getSitesNum(){ |
| | | return $http.get('/dust/sitename'); |
| | | } |
| | | |
| | | |
| | | |
| | | }; |
| | |
| | | <script> |
| | | import { isCollapse } from './isCollapse'; |
| | | import { selectedName } from './selectName'; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | menuHeight: '600px', |
| | | isCollapseAside: isCollapse, |
| | | selected: selectedName, |
| | | optionClick: [ |
| | | ' æ°æ®é£é©æ¨¡å', |
| | | 'æ°æ®é£é©æå', |
| | | 'ç«ç¹ç»¼åé£é©æå', |
| | | 'é£è¡å·¡æ£', |
| | | 'ç«ç¹å®¡æ ¸è¾
å©', |
| | | 'å岿°æ®ç®¡ç', |
| | | 'æ°æ®æ¥å
¥ç®¡ç', |
| | | 'ä¸å¡æ¥è¡¨', |
| | | 'æ°æ®æ¥å
¥é
ç½®', |
| | | ] |
| | | }; |
| | | }, |
| | | methods:{ |
| | |
| | | mounted(){ |
| | | this.menuHeight = this.calMenuHeight(); |
| | | console.log('meta:',this.$route.matched); |
| | | |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | <span class="parent-title">é£é©è¯ä¼°</span> |
| | | </template> |
| | | |
| | | <el-menu-item index="avgDay" @click="selected = optionClick[0]"> |
| | | <el-menu-item index="avgDay" > |
| | | <el-icon><i-ep-Stopwatch /></el-icon> |
| | | æ°æ®é£é©æ¨¡å |
| | | </el-menu-item> |
| | | <el-menu-item index="analysis" @click="selected = optionClick[1]"> |
| | | <el-menu-item index="analysis" > |
| | | <el-icon><i-ep-Stopwatch /></el-icon> |
| | | æ°æ®é£é©æå |
| | | </el-menu-item><el-menu-item index="riskrank" @click="selected = optionClick[2]"> |
| | | æ°æ®æåæ¸
å |
| | | </el-menu-item><el-menu-item index="riskrank" > |
| | | <el-icon><i-ep-Stopwatch /></el-icon> |
| | | ç«ç¹ç»¼åé£é©æå |
| | | 综åé£é©æå |
| | | </el-menu-item> |
| | | |
| | | |
| | |
| | | <el-icon><i-ep-Histogram /></el-icon> |
| | | <span class="parent-title">线ä¸å·¡æ£</span> |
| | | </template> |
| | | <el-menu-item index="edata" @click="selected = optionClick[3]"> |
| | | <el-menu-item index="edata" > |
| | | <el-icon><i-ep-Bell /></el-icon> |
| | | é£è¡å·¡æ£ |
| | | </el-menu-item> |
| | | |
| | | <el-menu-item index="testData" @click="selected = optionClick[4]"> |
| | | <el-menu-item index="testData"> |
| | | <el-icon><i-ep-Bell /></el-icon> |
| | | ç«ç¹å®¡æ ¸è¾
å© |
| | | </el-menu-item> |
| | |
| | | </template> |
| | | |
| | | |
| | | <el-menu-item index="hdata" @click="selected = optionClick[4]"> |
| | | <el-menu-item index="hdata" > |
| | | <el-icon><i-ep-Histogram /></el-icon> |
| | | å岿°æ®ç®¡ç |
| | | </el-menu-item> |
| | | <el-menu-item index="management" @click="selected = optionClick[5]"> |
| | | |
| | | <!-- <el-menu-item index="management" > |
| | | <el-icon><i-ep-Histogram /></el-icon> |
| | | æ°æ®æ¥å
¥ç®¡ç |
| | | </el-menu-item> |
| | | <el-menu-item index="report" @click="selected = optionClick[6]"> |
| | | <el-menu-item index="report" > |
| | | <el-icon><i-ep-Histogram /></el-icon> |
| | | ä¸å¡æ¥è¡¨ |
| | | </el-menu-item> |
| | | </el-menu-item> --> |
| | | |
| | | </el-sub-menu> |
| | | |
| | |
| | | <span class="parent-title">é
置管ç</span> |
| | | </template> |
| | | |
| | | <el-menu-item index="setting" @click="selected = optionClick[7]"> |
| | | <el-menu-item index="setting" > |
| | | <el-icon><i-ep-Histogram /></el-icon> |
| | | æ°æ®æ¥å
¥é
ç½® |
| | | </el-menu-item> |
| | |
| | | // import './assets/main.css' |
| | | |
| | | import { createApp } from 'vue' |
| | | import { createPinia } from 'pinia' |
| | | |
| | | // import { createPinia } from 'pinia' |
| | | import Cookie from 'js-cookie' |
| | | import App from './App.vue' |
| | | import router from './router' |
| | | |
| | |
| | | |
| | | const app = createApp(App) |
| | | |
| | | function SecretPiniaPlugin() { |
| | | return { secret: 'the cake is a lie',vue:'333.0' } |
| | | } |
| | | |
| | | const pinia = createPinia() |
| | | // å°æä»¶æä¾ç» pinia |
| | | pinia.use(SecretPiniaPlugin) |
| | | // function SecretPiniaPlugin() { |
| | | // return { secret: 'the cake is a lie',vue:'333.0' } |
| | | // } |
| | | |
| | | // const pinia = createPinia() |
| | | // // å°æä»¶æä¾ç» pinia |
| | | // pinia.use(SecretPiniaPlugin) |
| | | // pinia.use(() => ({'天':'é¨å¤©'})) |
| | | |
| | | router.beforeEach((to,from,next)=>{ |
| | | const token = Cookie.get('token') |
| | | if(!token && to.name!='login'){ |
| | | next({name:'login'}) |
| | | } |
| | | // tokenåå¨ï¼ä½ç¨æ·åæ¢çæ¯ç»å½é¡µé¢æ¶ï¼è¿åé»è®¤ä¸»çé¢ |
| | | else if(token && to.name =='login'){ |
| | | next({name:'edata'}) |
| | | }else{ |
| | | next() |
| | | } |
| | | }) |
| | | |
| | | // axios.defaults.baseURL = 'http://192.168.1.4:8081' |
| | | axios.defaults.baseURL = 'http://localhost:8081' |
| | | app.config.globalProperties.$http = axios |
| | | |
| | | app.use(pinia) |
| | | // app.use(pinia) |
| | | app.use(router) |
| | | |
| | | |
| | |
| | | // ç»éé¡µé¢ |
| | | { |
| | | path: "/login", |
| | | name: 'fst', |
| | | name: 'login', |
| | | component: () => import('@/views/login/LoginSystem.vue') |
| | | |
| | | }, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import dayjs from 'dayjs'; |
| | | export default { |
| | | /** |
| | | * è®¡ç®æ¥æç¸å·®å 天 |
| | | * @paramï¼ |
| | | * @createTime:å¼å§æ¶é´ï¼ç»ææ¶é´ |
| | | * @returnsï¼ |
| | | */ |
| | | getDaysDifference(startDate, endDate) { |
| | | return dayjs(endDate).diff(startDate, 'day') + 1; |
| | | }, |
| | | /** |
| | | * ä»åææ°æ®æ°ç»ä¸è®¡ç®æå°åå¤§å¼ ,å¹³åå¼ï¼ å¨çº¿çï¼ææçï¼è¶
æ çï¼åä¸ä¸ªå¼ä¸º0~100åå¼ï¼ |
| | | * @paramï¼åæè¡¨ä¸çæ°æ® |
| | | * @returnsï¼ |
| | | */ |
| | | calBillData(arr, beginTime, endTime) { |
| | | let min = 65536; |
| | | let max = -1; |
| | | let avg = 0; |
| | | let online = 0; |
| | | let valid = 0; |
| | | let exceeding = 0; |
| | | |
| | | let sumAvg = 0; |
| | | let sumOnline = 0; |
| | | let sumValid = 0; |
| | | let sumExceeding = 0; |
| | | |
| | | // 计ç®éæ©çæ¶é´çç¸å·®çå¤©æ° |
| | | let begin = dayjs(beginTime).format('YYYY-MM-DD'); |
| | | let end = dayjs(endTime).format('YYYY-MM-DD'); |
| | | let dayDiff = this.getDaysDifference(begin, end); |
| | | console.log('æ¥æé´é', dayDiff); |
| | | let obj = {}; |
| | | // è®¡ç®æå°åå¤§å¼ |
| | | arr.forEach((item) => { |
| | | if (item.min < min) { |
| | | min = item.min; |
| | | } |
| | | if (item.max > max) { |
| | | max = item.max; |
| | | } |
| | | // 计ç®å¹³åå¼ï¼å¨çº¿çï¼ææçï¼è¶
æ ç |
| | | sumAvg = sumAvg + item.dayAvg; |
| | | sumOnline = sumOnline + Number(item.dayOnline.slice(0, -1)); |
| | | sumValid = sumValid + Number(item.dayValid.slice(0, -1)); |
| | | sumExceeding = sumExceeding + Number(item.dayExceeding.slice(0, -1)); |
| | | }); |
| | | // 计ç®åå¼ |
| | | avg = sumAvg / dayDiff; |
| | | // console.log('sumavg:',sumAvg,dayDiff); |
| | | online = sumOnline / dayDiff; |
| | | valid = sumValid / dayDiff; |
| | | exceeding = sumExceeding / dayDiff; |
| | | obj['min'] = min.toFixed(3); |
| | | obj['max'] = max.toFixed(3); |
| | | |
| | | obj['avg'] = avg.toFixed(2); |
| | | obj['online'] = online.toFixed(2); |
| | | obj['valid'] = valid.toFixed(2); |
| | | obj['exceeding'] = exceeding.toFixed(2); |
| | | |
| | | return obj; |
| | | }, |
| | | |
| | | /** |
| | | * 计ç®å¼å¸¸ç±»åèé度 å¼å¸¸å¤ç°ç |
| | | * @paramï¼ å¼å¸¸æ°æ®æ°ç» |
| | | * @returnsï¼ |
| | | */ |
| | | calRecur(exceptionArr) { |
| | | // å
¸åå¼å¸¸å¤ç°ç |
| | | let exceptionTyprRecurRate = 0; |
| | | // é级çªå |
| | | let mutationCount = 0; |
| | | // è¶
æ ä¸´è¿ |
| | | let exceedingNearCount = 0; |
| | | // è¶
æ æ¬¡æ°ä¸´ç |
| | | let exceedindCriticalDegree = 0; |
| | | |
| | | // ä¿ååºç°çä¸åå¼å¸¸ç±»å |
| | | let exception = []; |
| | | // å¼å¸¸ç±»åèé度 |
| | | let exceptionTypeAggregation = 0; |
| | | |
| | | exceptionArr.forEach((item) => { |
| | | // å¼å¸¸å¤ç°ç |
| | | if (item.exceptionType == 4) { |
| | | mutationCount++; |
| | | } else if (item.exceptionType == 5) { |
| | | exceedingNearCount++; |
| | | } else if (item.exceptionType == 6) { |
| | | exceedindCriticalDegree++; |
| | | } |
| | | |
| | | // å¼å¸¸ç±»åèé度 |
| | | if (exception.length == 0) { |
| | | exception.push(item.exceptionType); |
| | | } |
| | | // ä¿åæ°çå¼å¸¸ç±»å |
| | | else if (exception.indexOf(item.exceptionType) == -1) { |
| | | exception.push(item.exceptionType); |
| | | } |
| | | }); |
| | | |
| | | let sum = 0; |
| | | // 次æ°å1ï¼è¯¥å¼å¸¸åºç°2次ï¼ç®å¤ç°1次ãåºç°3次ï¼ç®å¤ç°2次... |
| | | if (mutationCount > 1) { |
| | | sum = sum + mutationCount - 1; |
| | | } |
| | | if (exceedingNearCount > 1) { |
| | | sum = sum + exceedindCriticalDegree - 1; |
| | | } |
| | | if (exceedindCriticalDegree > 1) { |
| | | sum = sum + exceedindCriticalDegree - 1; |
| | | } |
| | | // console.log('sum:', sum); |
| | | // console.log('exception:', exception); |
| | | // console.log( |
| | | // 'å
¶ä»', |
| | | // mutationCount, |
| | | // exceedindCriticalDegree, |
| | | // exceedindCriticalDegree |
| | | // ); |
| | | switch (sum) { |
| | | case 0: |
| | | exceptionTyprRecurRate = sum / 3; |
| | | break; |
| | | case 1: |
| | | exceptionTyprRecurRate = sum / 3; |
| | | break; |
| | | case 2: |
| | | case sum >= 3: |
| | | exceptionTyprRecurRate = 1; |
| | | break; |
| | | default: |
| | | return 'error'; |
| | | } |
| | | |
| | | exceptionTypeAggregation = exception.length / 8; |
| | | |
| | | let obj = {}; |
| | | obj['exceptionRecurrence'] = exceptionTyprRecurRate; |
| | | obj['exceptionTypeAggregation'] = exceptionTypeAggregation; |
| | | |
| | | return obj; |
| | | } |
| | | }; |
| | |
| | | const DustLineChart = defineAsyncComponent(() => |
| | | import('./components/DustLineChart.vue') |
| | | ); |
| | | |
| | | import exceptionApi from '@/api/exceptionApi.js'; |
| | | import dayjs from 'dayjs'; |
| | | export default { |
| | | components: { |
| | | ExceptionType, |
| | | InputSearch, |
| | | // InputSearch, |
| | | TimeSelectWithShortCuts, |
| | | DustExceptionText, |
| | | DustLineChart, |
| | |
| | | displayData: [], |
| | | // è¡¨æ ¼é«åº¦ |
| | | tableHeight: 400, |
| | | // è¡¨æ ¼æ°æ® |
| | | // è¡¨æ ¼æ¾ç¤º |
| | | isTableShow:false, |
| | | // å½å页 |
| | | currentPage: 1, |
| | | // æ¯é¡µæ¡æ° |
| | | pageSize: 20, |
| | | // è¡¨æ ¼çæ»è®°å½æ° |
| | | total: 0, |
| | | |
| | | // è¡¨æ ¼æ¥è¯¢æ æ°æ®æ¶ |
| | | isNoData: false, |
| | | // isNoData: false, |
| | | // å¯¹è¯æ¡æ¾ç¤º |
| | | dialogTableVisible: false, |
| | | // ä¿åå¼å¸¸å¯¹åºçåºéºåç§°å设å¤ç¼å· |
| | |
| | | // ç«ç¹æ»æ°é |
| | | siteTotal: 0, |
| | | |
| | | // å¼å¸¸çç«ç¹æ»æ°é |
| | | // exceptionSiteNum:0, |
| | | |
| | | // éä¸è¡¨æ ¼å½åè¡çæ°æ® |
| | | tableCurrentRowData: null, |
| | |
| | | banTouch:0, |
| | | // 0代表å页ï¼1代表ä¸å页 |
| | | originClick:0 |
| | | } |
| | | |
| | | }, |
| | | // æ¡ä»¶æ¥è¯¢å¯¹è¯æ¡ |
| | | conditionDialogVisible:false |
| | | }; |
| | | }, |
| | | setup() { |
| | |
| | | this.backExceptionDataAWeekAgo(); |
| | | // æ¥è¯¢æ¶é´æ®µçåå¼å¸¸çç«ç¹ï¼æ¥è¯¢è¯¥æ¶é´åºé´çåå¼å¸¸æ°é |
| | | this.getShopNames(); |
| | | |
| | | this.getSiteNume() |
| | | }, |
| | | |
| | | methods: { |
| | | // æ¾åç«ç¹æ»æ°é |
| | | getSiteNume(){ |
| | | exceptionApi.getSitesNum().then(res => { |
| | | this.siteTotal = res.data.data.length |
| | | }) |
| | | |
| | | }, |
| | | |
| | | /** |
| | | * descriptionï¼ç¹å»å¼å¸¸ç«ç¹ååæ¶ è¿åçæ°æ® |
| | |
| | | this.displayData = response.data.data.rows; |
| | | this.loading.queryButton = false |
| | | this.loading.tableLoading = false; |
| | | |
| | | if (response.data.data.total == 0) { |
| | | ElMessage('è¯¥æ¶æ®µæ æ°æ®'); |
| | | this.isNoData = true; |
| | | this.isTableShow = false |
| | | return; |
| | | } |
| | | this.isTableShow = true |
| | | this.total = response.data.data.total; |
| | | // ç§»é¤ç©ºæ°æ®ç¶æ |
| | | this.isNoData = false; |
| | | }); |
| | | |
| | | this.conditionDialogVisible = false |
| | | }, |
| | | |
| | | /** |
| | |
| | | |
| | | if (response.data.data.total == 0) { |
| | | ElMessage('è¯¥æ¶æ®µæ æ°æ®'); |
| | | this.isNoData = true; |
| | | this.isTableShow = false |
| | | return; |
| | | } |
| | | this.isTableShow = true |
| | | this.total = response.data.data.total; |
| | | this.loading.tableLoading = false; |
| | | }); |
| | |
| | | </script> |
| | | |
| | | <template> |
| | | <el-button type="primary" @click="conditionDialogVisible = true"> |
| | | æç´¢æ¡ä»¶ |
| | | </el-button> |
| | | |
| | | <el-dialog |
| | | v-model="conditionDialogVisible" |
| | | title="Tips" |
| | | width="30%" |
| | | class="condition-dialog" |
| | | > |
| | | <el-row ref="h1"> |
| | | <el-col> |
| | | <el-form :inline="true"> |
| | |
| | | <el-form-item > |
| | | <AreaAndmonitorType ></AreaAndmonitorType> |
| | | </el-form-item> |
| | | <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 timeType="day" @submit-time="giveTime" ></TimeSelectWithShortCuts> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | ></ExceptionType> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <TimeSelectWithShortCuts @submit-time="giveTime"></TimeSelectWithShortCuts> |
| | | </el-form-item> |
| | | |
| | | </div> |
| | | |
| | | <div class="head-container-search"> |
| | |
| | | </el-form> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | <!-- |
| | | <template #footer> |
| | | |
| | | <span class="dialog-footer"> |
| | | <el-button @click="dialogVisible = false">Cancel</el-button> |
| | | <el-button type="primary" @click="dialogVisible = false"> |
| | | Confirm |
| | | </el-button> |
| | | </span> |
| | | </template> --> |
| | | </el-dialog> |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | <el-row class="head-describtion-text" ref="h2"> |
| | | <el-row> |
| | |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col v-show="!isNoData"> |
| | | <el-row v-show="isTableShow"> |
| | | <el-col > |
| | | <el-table |
| | | ref="table" |
| | | :data="displayData" |
| | |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-empty v-show="isNoData" :image-size="200" /> |
| | | |
| | | <el-dialog v-model="dialogTableVisible" draggable align-center height="300px"> |
| | | <!-- 头 --> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | |
| | | .el-row { |
| | | margin-left: 10px; |
| | | } |
| | | /* 䏿èåå¼å§ */ |
| | | .example-showcase .el-dropdown-link { |
| | | cursor: pointer; |
| | | color: var(--el-color-primary); |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | /* 䏿èåç»æ */ |
| | | |
| | | /* æ¡ä»¶æ¥è¯¢æ¨¡åçæ ·å¼ */ |
| | | .head-container-search { |
| | |
| | | checker: 'admin', |
| | | checkDate: '', |
| | | checkerNotes: '', |
| | | enterpriseNotes: '' |
| | | enterpriseNotes: '', |
| | | |
| | | }, |
| | | auditTableData: [], |
| | | auditNumByTime: 0 |
| | | // å®¡æ ¸ç¶æä¸ä¸º0 |
| | | auditData: [], |
| | | }; |
| | | }, |
| | | setup() { |
| | |
| | | } |
| | | }, |
| | | computed: { |
| | | |
| | | // å®¡è®¡æ»æ°ï¼å
æ¬é¨åå®¡æ ¸ï¼ |
| | | auditTotal(){ |
| | | return this.auditData.length |
| | | }, |
| | | // è§èå®¡è®¡æ»æ° |
| | | auditedRegular(){ |
| | | let count = 0 |
| | | this.auditData.forEach(item => { |
| | | if(item.auditStatus == 3){ |
| | | count ++ |
| | | } |
| | | }) |
| | | return count |
| | | }, |
| | | // é¨åå®¡æ ¸æ°é |
| | | auditPart(){ |
| | | let count = 0 |
| | | this.auditData.forEach(item => { |
| | | if(item.auditStatus == 1 || item.auditStatus == 2){ |
| | | count ++ |
| | | } |
| | | }) |
| | | return count |
| | | }, |
| | | // å¾
å®¡æ ¸æ° |
| | | unCheckedNUm() { |
| | | return this.total - this.auditNumByTime; |
| | | return this.total - this.auditedRegular; |
| | | }, |
| | | // å®¡æ ¸æ¯ä¾ |
| | | checkedRate() { |
| | | return (this.auditNumByTime / this.total) * 100; |
| | | } |
| | | return ((this.auditedRegular / this.total) * 100).toFixed(1); |
| | | }, |
| | | }, |
| | | mounted() { |
| | | this.backExceptionDataAWeekAgo(); |
| | |
| | | |
| | | methods: { |
| | | /** |
| | | * æ¥ç该段æ¶é´å
å·²å®¡æ ¸çæ°é |
| | | * æ¥ç该段æ¶é´å
å·²å®¡æ ¸çæ°æ® |
| | | * @paramï¼ |
| | | * @returnsï¼ |
| | | */ |
| | | gethasCheckedNumByTime() { |
| | | submitApi.getAuditNumByTime(this.beginTime, this.endTime).then((res) => { |
| | | this.auditNumByTime = res.data.data.length; |
| | | this.auditData = res.data.data; |
| | | }); |
| | | }, |
| | | /** |
| | |
| | | if (enterprise) { |
| | | this.tableCurrentRowData.enterpriseContent = enterprise; |
| | | } |
| | | |
| | | // æ´æ°åæçæ°æ® |
| | | setTimeout(() => { |
| | | this.gethasCheckedNumByTime(); |
| | | }, 1500); |
| | | |
| | | } else { |
| | | ElMessage.warning('æäº¤å¤±è´¥'); |
| | | } |
| | |
| | | if (enterpriseContent) { |
| | | this.tableCurrentRowData.enterpriseContent = enterpriseContent; |
| | | } |
| | | |
| | | // æ´æ°åæçæ°æ® |
| | | setTimeout(() => { |
| | | this.gethasCheckedNumByTime(); |
| | | }, 1500); |
| | | } else { |
| | | ElMessage.warning('æäº¤å¤±è´¥'); |
| | | } |
| | |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row class="anasysis" ref="h2"> |
| | | <!-- <el-row class="anasysis" ref="h2"> |
| | | <el-col :span="6"> |
| | | <el-card> |
| | | <el-statistic title="å
¨é¨å®¡æ ¸æ°" :value="total" /> |
| | |
| | | </el-statistic> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> --> |
| | | |
| | | |
| | | <div class="checknum"> |
| | | <el-row class="anasysis" ref="h2"> |
| | | <el-col :span="8"> |
| | | <span class="checknum-blue">åºå®¡æ ¸æ°ï¼</span> {{ total }}<span class="checknum-rate">({{ checkedRate }}%) </span> |
| | | </el-col> |
| | | |
| | | <el-col :span="8"> |
| | | <div><span class="checknum-green">å·²å®¡æ ¸æ°ï¼</span>{{ auditTotal }}</div> |
| | | <div>è§èå®¡æ ¸æ°ï¼{{ auditedRegular }}</div> |
| | | <div>é¨åå®¡æ ¸æ°ï¼{{ auditPart }}</div> |
| | | </el-col > |
| | | |
| | | <el-col :span="8"> |
| | | <span><span class="checknum-red">å¾
å®¡æ ¸æ°ï¼</span>{{ unCheckedNUm }}</span> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | |
| | | |
| | | <el-row> |
| | | <el-col v-show="!isNoData"> |
| | |
| | | plain |
| | | v-else-if="row.auditStatus == 1 || row.auditStatus == 2" |
| | | @click="openAuditDiag(row)" |
| | | >å®¡æ ¸</el-button |
| | | >å¾
å®¡æ ¸</el-button |
| | | > |
| | | |
| | | <el-button |
| | |
| | | size="default" |
| | | type="danger" |
| | | @click="openAuditDiag(row)" |
| | | >å®¡æ ¸</el-button |
| | | >å¾
å®¡æ ¸</el-button |
| | | > |
| | | <!-- <span v-if="row.auditStatus == 3">å·²å®¡æ ¸</span |
| | | ><span v-else>å®¡æ ¸</span> --> |
| | |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <el-card> |
| | | |
| | | <el-card v-show="tableCurrentRowData.auditStatus==3"> |
| | | <template #header>å®¡æ ¸è¯¦æ
</template> |
| | | <el-form> |
| | | <el-form-item label="å®¡æ ¸äºº">{{ |
| | |
| | | }}</el-form-item> |
| | | </el-form> |
| | | </el-card> |
| | | |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="close">åæ¶</el-button> |
| | |
| | | .el-row { |
| | | margin-left: 20px; |
| | | } |
| | | |
| | | /* æ¡ä»¶æ¥è¯¢æ¨¡åçæ ·å¼ */ |
| | | .head-container-search { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | // float: right; |
| | | } |
| | | |
| | | .head-describtion-text { |
| | | justify-content: flex-end; |
| | | margin-bottom: 10px; |
| | | font-size: 14px; |
| | | color: gray; |
| | | } |
| | | |
| | | /* æ¡ä»¶æ¥è¯¢æ¨¡åç»æ */ |
| | | |
| | | |
| | | |
| | | /*åæ */ |
| | | .anasysis { |
| | | margin-bottom: 20px; |
| | | // .anasysis { |
| | | // margin-bottom: 20px; |
| | | // } |
| | | // :deep(.el-statistic__head) { |
| | | // font-weight: bold; |
| | | // font-size: 16px; |
| | | // } |
| | | .checknum { |
| | | border: 1px solid orange; |
| | | margin-bottom: 10px; |
| | | margin-left: 20px; |
| | | margin: 0px 5px 10px 20px; |
| | | } |
| | | :deep(.el-statistic__head) { |
| | | .checknum-rate{ |
| | | margin-left: 5px; |
| | | } |
| | | .checknum-blue { |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: blue; |
| | | } |
| | | |
| | | .checknum-green { |
| | | font-weight: bold; |
| | | color: green; |
| | | } |
| | | .checknum-red { |
| | | font-weight: bold; |
| | | color: red; |
| | | } |
| | | /* åæç»æ */ |
| | | |
| | | /* è¡¨æ ¼æ¨¡åçæ ·å¼ */ |
| | | |
| | | |
| | | |
| | | /* è¡¨æ ¼æ¨¡åçæ ·å¼ */ |
| | | :global(.el-table .black-row) { |
| | | color: black; |
| | | } |
| | |
| | | |
| | | 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 LineChart from './components/LineChart.vue'; |
| | | |
| | | import dayjs from 'dayjs'; |
| | | export default { |
| | |
| | | // å
¸åå¼å¸¸å¤ç°ç |
| | | exceptionRecurrence: '', |
| | | // å¼å¸¸ç±»åæ®èé度 |
| | | exceptionTypeAggregation: '', |
| | | |
| | | exceptionTypeAggregation: '' |
| | | } |
| | | }; |
| | | }, |
| | | setup() { |
| | | const { height } = useWindowSize(); |
| | | return { height }; |
| | | |
| | | computed: { |
| | | weight() { |
| | | return ( |
| | | (100 - this.bill.online) * 0.1 + |
| | | (100 - this.bill.valid) * 0.2 + |
| | | this.bill.exceeding * 0.2 + |
| | | this.bill.exceptionTypeAggregation * 0.2 + |
| | | this.bill.exceptionRecurrence * 0.3 |
| | | ).toFixed(2); |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.fetch(); |
| | |
| | | let exceedindCriticalDegree = 0; |
| | | |
| | | // ä¿ååºç°çä¸åå¼å¸¸ç±»å |
| | | let exception = [] |
| | | let exception = []; |
| | | // å¼å¸¸ç±»åèé度 |
| | | let exceptionTypeAggregation = 0 |
| | | let exceptionTypeAggregation = 0; |
| | | |
| | | exceptionArr.forEach(item => { |
| | | exceptionArr.forEach((item) => { |
| | | // å¼å¸¸å¤ç°ç |
| | | if (item.exceptionType == 4) { |
| | | mutationCount++; |
| | |
| | | |
| | | // å¼å¸¸ç±»åèé度 |
| | | if(exception.length == 0){ |
| | | exception.push(item.exceptionType) |
| | | exception.push(item.exceptionType); |
| | | } |
| | | // ä¿åæ°çå¼å¸¸ç±»å |
| | | else if(exception.indexOf(item.exceptionType) == -1){ |
| | | exception.push(item.exceptionType) |
| | | exception.push(item.exceptionType); |
| | | } |
| | | }); |
| | | |
| | |
| | | } |
| | | console.log('sum:',sum); |
| | | console.log('exception:',exception); |
| | | console.log('å
¶ä»',mutationCount,exceedindCriticalDegree,exceedindCriticalDegree); |
| | | console.log( |
| | | 'å
¶ä»', |
| | | mutationCount, |
| | | exceedindCriticalDegree, |
| | | exceedindCriticalDegree |
| | | ); |
| | | switch (sum) { |
| | | case 0: |
| | | exceptionTyprRecurRate = sum / 3; |
| | |
| | | return 'error'; |
| | | } |
| | | |
| | | exceptionTypeAggregation = exception.length / 8 |
| | | exceptionTypeAggregation = exception.length / 8; |
| | | |
| | | let obj = {} |
| | | obj['exceptionRecurrence'] = exceptionTyprRecurRate |
| | | obj['exceptionTypeAggregation'] = exceptionTypeAggregation |
| | | let obj = {}; |
| | | obj['exceptionRecurrence'] = exceptionTyprRecurRate; |
| | | obj['exceptionTypeAggregation'] = exceptionTypeAggregation; |
| | | |
| | | return obj |
| | | return obj; |
| | | }, |
| | | /** |
| | | * è®¡ç®æ¥æç¸å·®å 天 |
| | |
| | | * @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 dayjs(endDate).diff(startDate,'day') + 1; |
| | | }, |
| | | /** |
| | |
| | | |
| | | // ç¹å»å±ç¤ºæé® |
| | | fetchData() { |
| | | if ( |
| | | this.form.beginTime >= this.form.endTime && |
| | | (this.form.beginTime != null || this.form.endTime != null) && |
| | | (this.form.beginTime != '' || tthis.form.endTime != '') |
| | | ) { |
| | | alert('请è¾å
¥ææçæ¶é´æ®µ'); |
| | | return; |
| | | } |
| | | let params = {}; |
| | | if (this.form.name) { |
| | | params['siteName'] = this.form.name; |
| | |
| | | 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 |
| | | this.begin = this.chartData[0].lst; |
| | | this.end = this.chartData[this.chartData.length - 1].lst; |
| | | }); |
| | | }, |
| | | |
| | |
| | | }) |
| | | .then((res) => { |
| | | console.log('å¼å¸¸ï¼', res.data.data); |
| | | let obj = this.calRecur(res.data.data) |
| | | this.bill.exceptionRecurrence = obj['exceptionRecurrence'] |
| | | this.bill.exceptionTypeAggregation = obj['exceptionTypeAggregation'] |
| | | let obj = this.calRecur(res.data.data); |
| | | this.bill.exceptionRecurrence = obj['exceptionRecurrence']; |
| | | this.bill.exceptionTypeAggregation = obj['exceptionTypeAggregation']; |
| | | }); |
| | | } |
| | | } |
| | |
| | | <div class="search-container"> |
| | | <el-container> |
| | | <el-main> |
| | | |
| | | <el-form :inline="true" :model="form" > |
| | | |
| | | <el-form-item> |
| | | <AreaAndmonitorType></AreaAndmonitorType> |
| | | </el-form-item> |
| | |
| | | ></TimeSelectWithShortCuts> |
| | | </el-form-item> |
| | | |
| | | |
| | | <el-form-item> |
| | | <el-button type="primary" @click="fetch">å±ç¤ºæçº¿å¾</el-button> |
| | | </el-form-item> |
| | | |
| | | </el-form> |
| | | |
| | | <div class="time-text">æ°æ®ç»è®¡æ¶æ®µï¼{{ begin}} ~ {{ end }}</div> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="16" > |
| | | |
| | | <el-card |
| | | shadow="never" |
| | | <el-card shadow="never"> |
| | | <DustRadarChart |
| | | :name="[ |
| | | 'æ°æ®ææçé£é©', |
| | | 'å
¸åå¼å¸¸å¤ç°çé£é©', |
| | | 'å¼å¸¸ç±»åèé度é£é©', |
| | | 'æ°æ®è¶
æ çé£é©', |
| | | 'æ°æ®å¨çº¿çé£é©' |
| | | ]" |
| | | :yData="[ |
| | | bill.valid, |
| | | bill.exceptionRecurrence, |
| | | bill.exceptionTypeAggregation, |
| | | bill.exceeding, |
| | | bill.online |
| | | ]" |
| | | ></DustRadarChart> |
| | | <div> |
| | | æéï¼ |
| | | <span |
| | | :class="{ |
| | | 'weightColor-low': weight < 0.2, |
| | | 'weightColor-medium': weight >= 0.2 && weight < 0.6, |
| | | 'weightColor-heigh': weight >= 0.6 |
| | | }" |
| | | >{{ weight }}</span |
| | | > |
| | | <DustRadarChart :name="['æ°æ®ææç','å
¸åå¼å¸¸å¤ç°ç','å¼å¸¸ç±»åèé度','æ°æ®è¶
æ ç','æ°æ®å¨çº¿ç']" :yData="[bill.valid,bill.exceptionRecurrence,bill.exceptionTypeAggregation,bill.exceeding,bill.online]" ></DustRadarChart> |
| | | æéï¼{{ ((bill.online*0.1+bill.valid*0.2+bill.exceeding*0.2+bill.exceptionTypeAggregation*0.2+bill.exceptionRecurrence*0.3)*0.01).toFixed(2) }} |
| | | </div> |
| | | <div></div> |
| | | </el-card> |
| | | |
| | | |
| | | </el-col> |
| | | |
| | | <el-col :xs="24" :sm="24" :md="6" :lg="6" :xl="4"> |
| | | <el-card |
| | | shadow="never" |
| | | style="width: 200px;min-width: 200px;" |
| | | <el-card shadow="never" style="width: 200px; min-width: 200px"> |
| | | <template #header> |
| | | <h1 |
| | | :class="{ |
| | | 'weightColor-low': weight < 0.2, |
| | | 'weightColor-medium': weight >= 0.2 && weight < 0.6, |
| | | 'weightColor-heigh': weight >= 0.6 |
| | | }" |
| | | > |
| | | <template #header><span class="title-16">é£é©è¯¦æ
</span></template> |
| | | é£é©å¼ï¼{{ weight }} |
| | | </h1> |
| | | </template> |
| | | <template #default> |
| | | <div class="risk-grade"> |
| | | <h1>é£é©ç级ï¼</h1> |
| | | <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"> |
| | | <h1>管æ§å»ºè®®ï¼</h1> |
| | | <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> |
| | | </template> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :xs="24" :sm="24" :md="6" :lg="6" :xl="4"> |
| | | <el-card shadow="never" style="width: 200px; min-width: 200px"> |
| | | <template #header |
| | | ><span class="title-16">é£é©è¯¦æ
</span></template |
| | | > |
| | | <el-form > |
| | | <el-form-item label="æå¤§å¼ï¼"> |
| | | {{ bill.max }} mg/m³ |
| | |
| | | <el-form-item label="å¼å¸¸ç±»åèé度ï¼"> |
| | | {{ bill.exceptionTypeAggregation*100 }}% |
| | | </el-form-item> |
| | | <el-form-item label="å
¸åå¼å¸¸å¤ç°çï¼" label-width="auto"> |
| | | <el-form-item label="å
¸åå¼å¸¸å¤ç°çï¼"> |
| | | {{ bill.exceptionRecurrence*100 }}% |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :xs="24" :sm="24" :md="6" :lg="6" :xl="4"> |
| | | <el-card |
| | | shadow="never" |
| | | |
| | | style="width:200px; min-width: 200px;" |
| | | > |
| | | <template #header> |
| | | <span class="title-16">é£é©ç级</span> |
| | | </template> |
| | | <template #default> |
| | | <!-- <el-space direction="vertical" :size="15" > --> |
| | | <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> |
| | | |
| | | |
| | | |
| | | <!-- </el-space> --> |
| | | </template> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | |
| | | <el-row :gutter="24"> |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> |
| | | <el-card |
| | | shadow="never" |
| | | |
| | | > |
| | | <el-card shadow="never"> |
| | | <template #default> |
| | | <LineChart |
| | | title="æ¥åå¼" |
| | |
| | | </el-col> |
| | | |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> |
| | | <el-card |
| | | shadow="never" |
| | | |
| | | > |
| | | <el-card shadow="never"> |
| | | <template #default> |
| | | <LineChart |
| | | title="æ¥å¨çº¿ç" |
| | |
| | | </el-col> |
| | | |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> |
| | | <el-card shadow="never" |
| | | > |
| | | <el-card shadow="never"> |
| | | <template #default> |
| | | <LineChart |
| | | title="æ¥ææç" |
| | |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | |
| | | </el-main> |
| | | </el-container> |
| | | </div> |
| | |
| | | display: flex; |
| | | margin-bottom: 10px; |
| | | } |
| | | .grade-instance { |
| | | margin-top: 40px; |
| | | } |
| | | .block-color { |
| | | width: 1em; |
| | | height: 1em; |
| | |
| | | background-color: red; |
| | | } |
| | | .medium { |
| | | background-color: #FADC19; |
| | | background-color: #fadc19; |
| | | } |
| | | .low { |
| | | background-color: #9FDB1D; |
| | | background-color: #9fdb1d; |
| | | } |
| | | |
| | | .el-text { |
| | |
| | | } |
| | | .el-form-item { |
| | | margin-bottom: 20px; |
| | | |
| | | } |
| | | :deep().el-form-item__content { |
| | | justify-content: flex-end; |
| | | |
| | | } |
| | | .title-16 { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | } |
| | | .el-row { |
| | | .weightColor-low { |
| | | color: #9fdb1d; |
| | | } |
| | | .weightColor-medium { |
| | | color: #dabe09; |
| | | } |
| | | .weightColor-heigh { |
| | | color: red; |
| | | } |
| | | .risk-grade { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | } |
| | | </style> |
| | |
| | | tableData: [], |
| | | isNoData: false, |
| | | loading: false, |
| | | // begin: '2023-05-01', //å¼å§æ¶é´ |
| | | // end: '2023-05-15', //ç»ææ¶é´ |
| | | |
| | | form: { |
| | | // å¼å§æ¶é´ |
| | |
| | | |
| | | <el-card> |
| | | <el-empty v-show="isNoData" :image-size="200" /> |
| | | </el-card> |
| | | |
| | | <el-table |
| | | :data="tableData" |
| | |
| | | @update:current-page="handleCurrentChange" |
| | | @update:page-size="handleSizeChange" |
| | | /> |
| | | </el-card> |
| | | |
| | | </el-main> |
| | | </el-container> |
| | | </div> |
| | |
| | | <script> |
| | | import TimeSelectWithShortCuts from '@/sfc/TimeSelectWithShortCuts.vue'; |
| | | import InputSearch from '@/sfc/InputSearch.vue'; |
| | | import AreaAndmonitorType from '@/sfc/AreaAndmonitorType.vue'; |
| | | import exceptionApi from '@/api/exceptionApi.js'; |
| | | import {useCommonFunction} from '../../utils/common.js'; |
| | | import index from '@/utils/risk_estimate_common_function/index.js' |
| | | import dayjs from 'dayjs'; |
| | | export default { |
| | | components: { |
| | | TimeSelectWithShortCuts, |
| | | AreaAndmonitorType, |
| | | InputSearch |
| | | }, |
| | | data() { |
| | | return{ |
| | | // å½å页 |
| | | currentPage: 1, |
| | | // æ¯é¡µæ¡æ° |
| | | pageSize: 20, |
| | | total: 0, |
| | | // è¡¨æ ¼æ°æ® |
| | | tableData: [], |
| | | isNoData: false, |
| | | loading: false, |
| | | |
| | | form: { |
| | | // ç«ç¹åç§° |
| | | name: '', |
| | | // å¼å§æ¶é´ |
| | | beginTime: '', |
| | | // ç»ææ¶é´ |
| | | endTime: '' |
| | | }, |
| | | bill: { |
| | | min: '', |
| | | max: '', |
| | | avg: '', |
| | | online: '', |
| | | valid: '', |
| | | exceeding: '', |
| | | |
| | | // å
¸åå¼å¸¸å¤ç°ç |
| | | exceptionRecurrence: '', |
| | | // å¼å¸¸ç±»åæ®èé度 |
| | | exceptionTypeAggregation: '', |
| | | }, |
| | | // { |
| | | // siteName:'', |
| | | // region:'', |
| | | // monitorType:'', |
| | | // riskValue:'', |
| | | // riskGrage:'', |
| | | // riskAdvice:'', |
| | | // beginTime:'', |
| | | // endTime:'', |
| | | // } |
| | | table:[] |
| | | }; |
| | | }, |
| | | setup(){ |
| | | // å¼å
¥ ç¾åå·æ¯è¾å¤§å° 导åºåè½ |
| | | const {exportToExcel} = useCommonFunction() |
| | | return {exportToExcel} |
| | | }, |
| | | |
| | | computed: { |
| | | weight() { |
| | | return ( |
| | | (100 - this.bill.online) * 0.1 + |
| | | (100 - this.bill.valid) * 0.2 + |
| | | this.bill.exceeding * 0.2 + |
| | | this.bill.exceptionTypeAggregation * 0.2 + |
| | | this.bill.exceptionRecurrence * 0.3 |
| | | ).toFixed(2); |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | watch:{ |
| | | weight(){ |
| | | this.table[0].riskValue = this.weight |
| | | } |
| | | }, |
| | | methods: { |
| | | /** |
| | | * å°ä¸å½æ åæ¶é´è½¬ä¸ºæå®æ ¼å¼ |
| | | * @paramï¼ |
| | | * @returnsï¼ |
| | | */ |
| | | giveTime(val) { |
| | | //å°ä¸å½æ åæ¶é´è½¬ä¸ºæå®æ ¼å¼(该ç»ä»¶è¿åçæ åæ¶é´çæ ¼å¼ï¼æä»¥å¿
é¡»çå è¿ä¸ªå½æ°) |
| | | this.form.beginTime = dayjs(val[0]).format('YYYY-MM-DD HH:mm:ss'); |
| | | this.form.endTime = dayjs(val[1]).format('YYYY-MM-DD HH:mm:ss'); |
| | | }, |
| | | // ç¹å»å±ç¤ºæé® |
| | | fetchData() { |
| | | |
| | | 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; |
| | | exceptionApi |
| | | .analysisdata(this.form.name, this.form.beginTime, this.form.endTime) |
| | | .then((response) => { |
| | | this.chartData = response.data.data; |
| | | this.loading = false; |
| | | if (response.data.data.length == 0) { |
| | | this.isNoData = true; |
| | | return; |
| | | } |
| | | // ç§»é¤ç©ºæ°æ®ç¶æ |
| | | this.isNoData = false; |
| | | let temp = index.calBillData(this.chartData,this.form.beginTime,this.form.endTime); |
| | | 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.begin = this.chartData[0].lst; |
| | | this.end = this.chartData[this.chartData.length - 1].lst; |
| | | const tempObj = {} |
| | | tempObj.region = 'éå±±åº' |
| | | tempObj.monitorType = 'æ¬å°' |
| | | tempObj.siteName = this.form.name |
| | | tempObj.beginTime = this.form.beginTime |
| | | tempObj.endTime = this.form.endTime |
| | | |
| | | // this.table[0].region = 'éå±±åº' |
| | | // this.table[0].monitorType = 'æ¬å°' |
| | | // this.table[0].siteName = this.form.name |
| | | // this.table[0].beginTime = this.form.beginTime |
| | | // this.table[0].endTime = this.form.endTime |
| | | |
| | | if(this.weight>=0.6){ |
| | | tempObj.riskGrage = 'é«é£é©' |
| | | tempObj.riskAdvice = '建议对该ç«ç¹è¿è¡çº¿ä¸æ§æ³æ£æ¥ï¼ä¸é¡¹æ°æ®å¯¹æ¯' |
| | | // this.table[0].riskGrage = 'é«é£é©' |
| | | // this.table[0].riskAdvice = '建议对该ç«ç¹è¿è¡çº¿ä¸æ§æ³æ£æ¥ï¼ä¸é¡¹æ°æ®å¯¹æ¯' |
| | | }else if(this.weight<0.6 && this.weight>=0.2){ |
| | | tempObj.riskGrage = 'ä¸é£é©' |
| | | tempObj.riskAdvice = '建议å¼å±å¸¸æè¿½è¸ªåæ' |
| | | // this.table[0].riskGrage = 'ä¸é£é©' |
| | | // this.table[0].riskAdvice = '建议å¼å±å¸¸æè¿½è¸ªåæ' |
| | | }else { |
| | | tempObj.riskGrage = 'ä½é£é©' |
| | | tempObj.riskAdvice = '建议å¼å¯¼ä¼ä¸é¿æä¿æ' |
| | | // this.table[0].riskGrage = 'ä½é£é©' |
| | | // this.table[0].riskAdvice = '建议å¼å¯¼ä¼ä¸é¿æä¿æ' |
| | | } |
| | | this.table.push(tempObj) |
| | | }); |
| | | }, |
| | | |
| | | // ä¼ä¸å¼å¸¸è¯¦æ
|
| | | exceptiondataCount() { |
| | | 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']; |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * åå§å è½½å½æ° |
| | | */ |
| | | fetch() { |
| | | // åææ°æ® |
| | | this.fetchData(); |
| | | // å¼å¸¸æ°æ® |
| | | this.exceptiondataCount(); |
| | | }, |
| | | |
| | | /** |
| | | * 导åºä¸ºExcel |
| | | |
| | | */ |
| | | exportData(){ |
| | | if(this.table.length!=0){ |
| | | const tableColumns = ['siteName','region','monitorType','riskValue','riskGrage','riskAdvice','beginTime','endTime'] |
| | | const excelColumns = [['A1','ç«ç¹åç§°'], |
| | | ['B1','åºå'],['C1','çæµç±»å'],['D1','é£é©å¼'], |
| | | ['E1','é£é©ç级'],['F1','ç®¡æ§æªæ½'],['G1','å¼å§æ¥æ'], |
| | | ['H1','ç»ææ¥æ']] |
| | | |
| | | this.exportToExcel(this.table,tableColumns,excelColumns,'综åé£é©æå.xlsx') |
| | | } |
| | | |
| | | }, |
| | | |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <template> |
| | | <div> |
| | | ç«ç¹ç»¼åé£é©æå |
| | | </div> |
| | | <el-row> |
| | | <el-row> |
| | | <el-form :inline="true" :model="form"> |
| | | <el-form-item> |
| | | <AreaAndmonitorType></AreaAndmonitorType> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <InputSearch |
| | | isNeedDefaultSite="1" |
| | | @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-button type="warning" @click="exportData">导åº</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-row> |
| | | </el-row> |
| | | |
| | | <el-table |
| | | :data="table" |
| | | height="600px" |
| | | style="width: 100%" |
| | | v-loading="loading" |
| | | :cell-class-name="tableCellClassName" |
| | | > |
| | | <el-table-column |
| | | type="index" |
| | | prop="name" |
| | | label="åºå·" |
| | | :index="indexMethod" |
| | | fixed |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="siteName" label="ç«ç¹åç§°" show-overflow-tooltip /> |
| | | <el-table-column prop="region" label="åºå" show-overflow-tooltip /> |
| | | <el-table-column prop="monitorType" label="æ£æµç±»å" show-overflow-tooltip /> |
| | | <el-table-column prop="riskValue" label="é£é©å¼" show-overflow-tooltip /> |
| | | <el-table-column prop="riskGrage" label="é£é©ç级" show-overflow-tooltip /> |
| | | <el-table-column prop="riskAdvice" label="ç®¡æ§æªæ½" show-overflow-tooltip /> |
| | | <el-table-column prop="beginTime" label="å¼å§æ¥æ" show-overflow-tooltip /> |
| | | <el-table-column prop="endTime" label="ç»ææ¥æ" show-overflow-tooltip /> |
| | | </el-table> |
| | | <el-empty v-show="isNoData" :image-size="200" /> |
| | | |
| | | </template> |
| | | |
| | | <style scoped> |
| | | .el-row,.el-table { |
| | | margin: 10px 0px 0px 10px |
| | | } |
| | | .el-table{ |
| | | |
| | | } |
| | | </style> |
| | |
| | | color: ['#ddd', '#aaa'] |
| | | } |
| | | }, |
| | | // shape: 'circle', |
| | | |
| | | indicator: [ |
| | | { name: this.name[0], max: 1 }, |
| | | { name: this.name[1], 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' |
| | | }, |
| | |
| | | data: [ |
| | | { |
| | | value: [ |
| | | (this.yData[0] / 100).toFixed(4), |
| | | (1 - (this.yData[0] / 100).toFixed(4)), |
| | | this.yData[1], |
| | | this.yData[2], |
| | | (this.yData[3] / 100).toFixed(4), |
| | | (this.yData[4] / 100).toFixed(4) |
| | | 1-((this.yData[4] / 100).toFixed(4)) |
| | | ], |
| | | // value: [ |
| | | // this.yData[0], |
| | |
| | | </template> |
| | | |
| | | <script lang="ts"> |
| | | import Cookie from 'js-cookie' |
| | | export default { |
| | | data() { |
| | | return { |
| | |
| | | // ç»å½é»è¾ |
| | | if (this.username === 'admin' && this.password === 'admin123') { |
| | | ElMessage.success('ç»å½æå'); |
| | | const token = 'abc' |
| | | Cookie.set('token',token) |
| | | // ç»å½æåï¼è·³è½¬å°å¯¹åºé¡µé¢ |
| | | this.$router.push('/edata') // å设ç»å½æååè·³è½¬å° '/dashboard' é¡µé¢ |
| | | } else { |
| | |
| | | <script> |
| | | import {useCounterStore} from '@/stores/counter'; |
| | | import TimeSelectWithShortCuts from '@/sfc/TimeSelectWithShortCuts.vue'; |
| | | import settingApi from '@/api/data_access_setting/settingApi.js' |
| | | import dayjs from 'dayjs'; |
| | | export default { |
| | | components: { |
| | | TimeSelectWithShortCuts, |
| | | |
| | | }, |
| | | data(){ |
| | | return{ |
| | | |
| | | // åºå |
| | | radio:0, |
| | | // 宿¶ |
| | | radio1:'', |
| | | beginTime:'', |
| | | endTime:'', |
| | | } |
| | | }, |
| | | setup(){ |
| | | const store = useCounterStore() |
| | | const unsubscribe = store.$onAction( |
| | | ({ |
| | | name, // action çåå |
| | | store, // store å®ä¾ |
| | | args, // è°ç¨è¿ä¸ª action çåæ° |
| | | after, // å¨è¿ä¸ª action æ§è¡å®æ¯ä¹åï¼æ§è¡è¿ä¸ªå½æ° |
| | | onError, // å¨è¿ä¸ª action æåºå¼å¸¸çæ¶åï¼æ§è¡è¿ä¸ªå½æ° |
| | | }) => { |
| | | // è®°å½å¼å§çæ¶é´åé |
| | | const startTime = Date.now() |
| | | // è¿å°å¨ `store` ä¸çæä½æ§è¡ä¹å触å |
| | | console.log(`Start "${name}" with params [${args.join(', ')}].`) |
| | | |
| | | // 妿 action æåå¹¶ä¸å®å
¨è¿è¡åï¼after å°è§¦åã |
| | | // å®å°çå¾
ä»»ä½è¿åç promise |
| | | after((result) => { |
| | | console.log( |
| | | `Finished "${name}" after ${ |
| | | Date.now() - startTime |
| | | }ms.\nResult: ${result}.` |
| | | ) |
| | | }) |
| | | |
| | | // 妿 action æåºæè¿å Promise.reject ï¼onError å°è§¦å |
| | | onError((error) => { |
| | | console.warn( |
| | | `Failed "${name}" after ${Date.now() - startTime}ms.\nError: ${error}.` |
| | | ) |
| | | }) |
| | | } |
| | | ) |
| | | return{ |
| | | store,unsubscribe |
| | | } |
| | | }, |
| | | computed:{ |
| | | a(){ |
| | | return this.store.doubleCount*2 |
| | | }, |
| | | |
| | | }, |
| | | mounted(){ |
| | | |
| | | }, |
| | | methods:{ |
| | | doThing(){ |
| | | this.store.increment(5) |
| | | this.store.doubleCount |
| | | giveTime(val) { |
| | | //å°ä¸å½æ åæ¶é´è½¬ä¸ºæå®æ ¼å¼(该ç»ä»¶è¿åçæ åæ¶é´çæ ¼å¼ï¼æä»¥å¿
é¡»çå è¿ä¸ªå½æ°) |
| | | this.beginTime = dayjs(val[0]).format('YYYY-MM-DD HH:mm:ss'); |
| | | this.endTime = dayjs(val[1]).format('YYYY-MM-DD HH:mm:ss'); |
| | | }, |
| | | set(){ |
| | | const params = {} |
| | | params.user = 'admin' |
| | | params.beginTime = this.beginTime |
| | | params.endTime = this.endTime |
| | | params.region = 'éå±±' |
| | | params.isRegularTime = this.radio1 |
| | | settingApi.submitSetting(params).then(res => { |
| | | if(res.data.code == 1){ |
| | | ElMessage.success('设置æå') |
| | | }else{ |
| | | ElMessage('设置失败') |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div> |
| | | <el-button type="primary" @click="doThing">ç¹å»{{ store.doubleCount }}</el-button> |
| | | </div> |
| | | <div>{{ a }}</div> |
| | | <div>{{ store.secret }}</div> |
| | | <div>{{ store.vue }}</div> |
| | | <div>{{ store.天 }}</div> |
| | | <div>çæé
ç½®æä»¶</div> |
| | | <el-form> |
| | | <el-form-item label="åºå"> |
| | | <el-radio-group v-model="radio"> |
| | | <el-radio :label="0">éå±±</el-radio> |
| | | <!-- <el-radio :label="6">Option B</el-radio> |
| | | <el-radio :label="9">Option C</el-radio> --> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="éæ©èµ·å§æ¶é´"> |
| | | <TimeSelectWithShortCuts @submit-time="giveTime"></TimeSelectWithShortCuts> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æ¯å¦å®æ¶"> |
| | | <el-radio-group v-model="radio1" > |
| | | <el-radio label="1" size="large">æ¯</el-radio> |
| | | <el-radio label="2" size="large">å¦</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> <el-button @click="set">设置</el-button></el-form-item> |
| | | </el-form> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |