src/api/index.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/api/statistic/statisticApi.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/router/index.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/utils/common.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/risk_assessment/DataIndexRank.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/risk_assessment/components/SiteDetail.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/index.js
@@ -1,27 +1,25 @@ import axios from 'axios'; import { setInterceptors } from './config'; import axios from 'axios' import { setInterceptors } from './config' // const url = 'http://localhost:8081/'; // é¨ç½² const url = 'http://114.215.109.124:8803/'; // const url = 'http://192.168.1.8:8081/'; // const url = 'http://192.168.0.123:8081/' //é£ç¾½ç管 const $http = axios.create({ baseURL: url, timeout: 10000 }); }) /* Pythonåå° */ const url_py = 'http://127.0.0.1:8089/' const $http_py = axios.create({ baseURL: url_py, timeout: 10000 }); }) //æ·»å æ¦æªå¨ setInterceptors($http,$http_py); setInterceptors($http, $http_py) export { $http,$http_py,url}; export { $http, $http_py, url } src/api/statistic/statisticApi.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ import { $http } from '@/api/index.js' export default { /** * æç §èªå®ä¹æåºè·åæ¥ç»è®¡æ°æ® */ fetchDayStatisticByOrder({ page, pageSize, siteName = '', beginTime = null, endTime = null, orderProp, asc = true }) { let params = { page: page, pageSize: pageSize, siteName: siteName, beginTime: beginTime, endTime: endTime, orderProp: orderProp, asc: asc } return $http.get('/dust/analysistime', { params: params }) } } src/router/index.js
@@ -79,14 +79,6 @@ component: () => import('@/views/setting/SetConfiguration.vue') }, // é£é©æ¨¡ååµå ¥è¿æ¸¡é¡µé¢ { path: '/detail/:siteName/:month/:titleName', name: 'RiskModelDetail', meta: { title: 'ç«ç¹å ·ä½ä¿¡æ¯', transition: 'slide-left' }, component: () => import('@/views/risk_assessment/components/SiteDetail.vue') }, // é£é©æ¨¡ååµå ¥ { path: '/subRiskModel', src/utils/common.js
@@ -1,113 +1,119 @@ import * as XLSX from 'xlsx/xlsx.mjs'; export function useCommonFunction(){ /** * descriptionï¼å¤æèµ·å§æ¶é´è·¨åº¦æ¯å¦è¶ è¿1个æ * @paramï¼ å¼å§æ¶é´ï¼ç»ææ¶é´ * @createTime:2023-08-18 * @returnsï¼è¶ è¿ä¸ä¸ªæè¿åtrue,ä¸è¶ è¿ä¸ä¸ªæåè¿åfalse */ import * as XLSX from 'xlsx/xlsx.mjs' import dayjs from 'dayjs' function isExceedOneMonth(dateStr1, dateStr2) { // è¶ è¿ä¸ä¸ªæï¼è¿åTrueï¼å¦åè¿åFalse // å°æ¥æåç¬¦ä¸²è½¬ä¸ºæ¥æå¯¹è±¡ const date1 = new Date(dateStr1); const date2 = new Date(dateStr2); // è·åä¸¤ä¸ªæ¥æçå¹´ãæãæ¥ const year1 = date1.getFullYear(); const month1 = date1.getMonth(); const day1 = date1.getDate(); const year2 = date2.getFullYear(); const month2 = date2.getMonth(); const day2 = date2.getDate(); // å¤æä¸¤ä¸ªæ¥ææ¯å¦ç¸å·®ä¸ä¸ªæ if (year1 === year2) { // 年份ç¸çï¼æ¯è¾æä»½å·®å¼ if (Math.abs(month1 - month2) === 1) { // æä»½å·®å¼ä¸º1ï¼è¿éè¦å¤æå ·ä½æ¥æ if ( (month1 < month2 && day1 < day2) || (month1 > month2 && day1 > day2) ) { return true; } } } else if (Math.abs(year1 - year2) === 1) { // 年份差å¼ä¸º1ï¼æ¯è¾æä»½åæ¥æ if ( (year1 < year2 && month1 === 11 && month2 === 0 && day1 < day2) || (year1 > year2 && month1 === 0 && month2 === 11 && day1 > day2) ) { return true; } export function useCommonFunction() { /** * descriptionï¼å¤æèµ·å§æ¶é´è·¨åº¦æ¯å¦è¶ è¿1个æ * @paramï¼ å¼å§æ¶é´ï¼ç»ææ¶é´ * @createTime:2023-08-18 * @returnsï¼è¶ è¿ä¸ä¸ªæè¿åtrue,ä¸è¶ è¿ä¸ä¸ªæåè¿åfalse */ function isExceedOneMonth(dateStr1, dateStr2) { // è¶ è¿ä¸ä¸ªæï¼è¿åTrueï¼å¦åè¿åFalse // å°æ¥æåç¬¦ä¸²è½¬ä¸ºæ¥æå¯¹è±¡ const date1 = new Date(dateStr1) const date2 = new Date(dateStr2) // è·åä¸¤ä¸ªæ¥æçå¹´ãæãæ¥ const year1 = date1.getFullYear() const month1 = date1.getMonth() const day1 = date1.getDate() const year2 = date2.getFullYear() const month2 = date2.getMonth() const day2 = date2.getDate() // å¤æä¸¤ä¸ªæ¥ææ¯å¦ç¸å·®ä¸ä¸ªæ if (year1 === year2) { // 年份ç¸çï¼æ¯è¾æä»½å·®å¼ if (Math.abs(month1 - month2) === 1) { // æä»½å·®å¼ä¸º1ï¼è¿éè¦å¤æå ·ä½æ¥æ if ((month1 < month2 && day1 < day2) || (month1 > month2 && day1 > day2)) { return true } // é»è®¤è¿åfalseï¼è¡¨ç¤ºä¸¤ä¸ªæ¥æå符串ä¸ç¸å·®ä¸ä¸ªæ return false; } /** * ç¾åå·æ¯è¾å¤§å° * @paramï¼ aæ¯å¦å¤§äºb * @returnsï¼å¤§äºï¼åè¿åtrueãå¦åè¿åfalse */ function cmpp(a, b) { return Number(a.replace('%', '')) >= Number(b.replace('%', '')); } else if (Math.abs(year1 - year2) === 1) { // 年份差å¼ä¸º1ï¼æ¯è¾æä»½åæ¥æ if ( (year1 < year2 && month1 === 11 && month2 === 0 && day1 < day2) || (year1 > year2 && month1 === 0 && month2 === 11 && day1 > day2) ) { return true } } /** *导åºä¸ºexcel * @paramï¼ è¡¨æ ¼æ°æ®ï¼å¾ 导åºçè¡¨æ ¼åï¼excelåï¼excelæä»¶å * @returns */ function exportToExcel(exportData,tableColumns,excelColumnsName,excelName='data.xlsx'){ const itemsFormatted = exportData.map((item) => { const newItem = {}; tableColumns.forEach((col) => { newItem[col] = item[col]; }); return newItem; }); // å建xlsx对象 const xls = XLSX.utils.json_to_sheet(itemsFormatted); // ç¼è¾è¡¨å¤´è¡ ä¿®æ¹è¡¨å¤´ excelColumnsName.forEach(item =>{ xls[item[0]].v = item[1] // é»è®¤è¿åfalseï¼è¡¨ç¤ºä¸¤ä¸ªæ¥æå符串ä¸ç¸å·®ä¸ä¸ªæ return false } /** * ç¾åå·æ¯è¾å¤§å° * @paramï¼ aæ¯å¦å¤§äºb * @returnsï¼å¤§äºï¼åè¿åtrueãå¦åè¿åfalse */ function cmpp(a, b) { return Number(a.replace('%', '')) >= Number(b.replace('%', '')) } /** *导åºä¸ºexcel * @paramï¼ è¡¨æ ¼æ°æ®ï¼å¾ 导åºçè¡¨æ ¼åï¼excelåï¼excelæä»¶å * @returns */ function exportToExcel(exportData, tableColumns, excelColumnsName, excelName = 'data.xlsx') { const itemsFormatted = exportData.map((item) => { const newItem = {} tableColumns.forEach((col) => { newItem[col] = item[col] }) // å建workbookï¼å¹¶æsheetæ·»å è¿å» const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, xls, 'Sheet1'); // å°workbook转为äºè¿å¶xlsxæä»¶å¹¶ä¸è½½ XLSX.writeFile(wb, excelName); } return newItem }) // å建xlsx对象 const xls = XLSX.utils.json_to_sheet(itemsFormatted) /** * descriptionï¼è¿åæ¶é´æ°ç»ï¼é´é15åéã * @paramï¼ å¼å¸¸çå¼å§,å¼å¸¸ç»ææ¶é´ * @createTime:2023-08-17 * @returnsï¼æ¯å¦12:00:00-13:00:00 æä»¥è¿åçæ°ç»å ç´ æ¯ 12:00:00 ,12:15:00,12:30:00,12:45:00ï¼13:00:00 */ function descFiftyTime(begin, end) { let time = []; if (begin == end) { time.push(begin); return time; } time.push(begin); let temp = dayjs(begin).add(15, 'minute').format('YYYY-MM-DD HH:mm:ss'); while (temp != end) { time.push(temp); temp = dayjs(temp).add(15, 'minute').format('YYYY-MM-DD HH:mm:ss'); } // å ä¸å¼å¸¸çç»ææ¶é´ time.push(temp); return time; } // ç¼è¾è¡¨å¤´è¡ ä¿®æ¹è¡¨å¤´ excelColumnsName.forEach((item) => { xls[item[0]].v = item[1] }) // å建workbookï¼å¹¶æsheetæ·»å è¿å» const wb = XLSX.utils.book_new() XLSX.utils.book_append_sheet(wb, xls, 'Sheet1') // å°workbook转为äºè¿å¶xlsxæä»¶å¹¶ä¸è½½ XLSX.writeFile(wb, excelName) } return {isExceedOneMonth,cmpp,exportToExcel,descFiftyTime} /** * descriptionï¼è¿åæ¶é´æ°ç»ï¼é´é15åéã * @paramï¼ å¼å¸¸çå¼å§,å¼å¸¸ç»ææ¶é´ * @createTime:2023-08-17 * @returnsï¼æ¯å¦12:00:00-13:00:00 æä»¥è¿åçæ°ç»å ç´ æ¯ 12:00:00 ,12:15:00,12:30:00,12:45:00ï¼13:00:00 */ function descFiftyTime(begin, end) { let time = [] if (begin == end) { time.push(begin) return time } time.push(begin) let temp = dayjs(begin).add(15, 'minute').format('YYYY-MM-DD HH:mm:ss') while (temp != end) { time.push(temp) temp = dayjs(temp).add(15, 'minute').format('YYYY-MM-DD HH:mm:ss') } // å ä¸å¼å¸¸çç»ææ¶é´ time.push(temp) return time } /** * æ ¼å¼å为ç¾åå· * @param {*} v * @returns */ function percentFormatter(v) { return v * 100 + '%' } return { isExceedOneMonth, cmpp, exportToExcel, descFiftyTime, percentFormatter } } src/views/risk_assessment/DataIndexRank.vue
@@ -3,6 +3,7 @@ import AreaAndmonitorType from '@/sfc/AreaAndmonitorType.vue' import { useCommonFunction } from '../../utils/common.js' import requetsApi from '@/api/exportExcel/requetsApi.js' import statisticApi from '@/api/statistic/statisticApi.js' import dayjs from 'dayjs' import ButtonExportExcel from '@/sfc/ButtonExportExcel.vue' import ButtonClick from '@/sfc/ButtonClick.vue' @@ -40,8 +41,8 @@ }, setup() { // å¼å ¥ ç¾åå·æ¯è¾å¤§å° 导åºåè½ const { cmpp, exportToExcel } = useCommonFunction() return { cmpp, exportToExcel } const { cmpp, exportToExcel, percentFormatter } = useCommonFunction() return { cmpp, exportToExcel, percentFormatter } }, mounted() { @@ -97,12 +98,12 @@ // å¨çº¿çï¼ææç 䏿»¡è¶³æ åæ¶ åé¢è² if (columnIndex == 7) { if (!this.cmpp(row.dayOnline, '90%')) { if (row.dayOnline < 0.9) { return 'red-color' } } if (columnIndex == 8) { if (!this.cmpp(row.dayValid, '90%')) { if (row.dayValid < 0.9) { return 'red-color' } } @@ -111,9 +112,9 @@ // åè½ï¼è¡¨æ ¼é«åº¦æ ¹æ®å 容èªéåº calTableHeight() { const h1 = this.$refs.h1.$el.offsetHeight const h2 = this.$refs.h2.$el.offsetHeight; const h2 = this.$refs.h2.$el.offsetHeight // å ¶ä¸ä¸ä¸ª40æ¯çåçæ»å¤è¾¹è· this.tableHeight = `calc(100vh - ${h1}px - ${h2}px - 40px - 120px - var(--el-main-padding) * 2`; this.tableHeight = `calc(100vh - ${h1}px - ${h2}px - 40px - 120px - var(--el-main-padding) * 2` }, // 页大尿¹åæ¶è§¦å handleSizeChange(val) { @@ -143,21 +144,27 @@ }, // ç¹å»ç»è®¡æé® fetchData() { let params = {} params['page'] = this.currentPage params['pageSize'] = this.pageSize params['siteName'] = '' fetchData(p) { const { prop, order } = p ? p : { prop: 'dayAvg', order: 'descending' } let params = { page: this.currentPage, pageSize: this.pageSize, siteName: '', orderProp: prop, //æåº ascending æ£åºï¼descending éåº asc: order == 'ascending' } if (this.form.beginTime) { params['beginTime'] = this.form.beginTime } if (this.form.endTime) { params['endTime'] = this.form.endTime } this.loading = true this.queryButton = true this.isNoData = false this.$http.get('/dust/analysistime', { params: params }).then((response) => { statisticApi.fetchDayStatisticByOrder(params).then((response) => { this.tableData = response.data.data.rows this.loading = false this.queryButton = false @@ -171,92 +178,95 @@ }) }, openDetail(row) { const encodedSiteName = encodeURIComponent(row.siteName) let titleName = 'ç«ç¹é£é©æ°æ®è¯¦æ ' this.$router.push(`/detail/${encodedSiteName}/${this.form.month}/${titleName}`) const encodedSiteName = encodeURIComponent(row.name) this.$router.push(`/exceptionDetail/${encodedSiteName}/${row.lst}`) } } } </script> <template> <el-form :inline="true" :model="form" ref="h1"> <el-form-item> <AreaAndmonitorType></AreaAndmonitorType> </el-form-item> <el-form-item> <TimeShortCuts timeType="currentMonth" @submit-time="giveTime"></TimeShortCuts> </el-form-item> <el-form-item> <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> <el-card v-show="!isNoData"> <el-table :data="tableData" :height="tableHeight" 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="name" label="ç¹ä½åç§°" show-overflow-tooltip width="300"> <template #default="{ row }"> <el-button type="primary" text @click="openDetail(row)"> <span class="rank-site">{{row.name }}</span></el-button> </template> </el-table-column> <el-table-column prop="mnCode" label="设å¤ç¼ç " show-overflow-tooltip /> <el-table-column prop="lst" label="çæµæ¥æ" sortable show-overflow-tooltip /> <el-table-column prop="dayAvg" label="æ¥å¹³åå¼" sortable show-overflow-tooltip /> <el-table-column prop="min" label="æ¥æå°å¼" sortable show-overflow-tooltip /> <el-table-column prop="max" label="æ¥æå¤§å¼" sortable show-overflow-tooltip /> <el-table-column prop="dayOnline" label="æ¥å¨çº¿ç" sortable show-overflow-tooltip /> <el-table-column prop="dayValid" label="æ¥ææç" sortable show-overflow-tooltip /> <el-table-column prop="dayExceeding" label="æ¥è¶ æ ç" sortable show-overflow-tooltip /> </el-table> <el-pagination ref="h2" :page-sizes="[10, 20, 50, 100]" :total="total" layout="total,sizes, prev, pager, next, jumper" v-model:current-page="currentPage" v-model:page-size="pageSize" @update:current-page="handleCurrentChange" @update:page-size="handleSizeChange" <el-form :inline="true" :model="form" ref="h1"> <el-form-item> <AreaAndmonitorType></AreaAndmonitorType> </el-form-item> <el-form-item> <TimeShortCuts timeType="currentMonth" @submit-time="giveTime"></TimeShortCuts> </el-form-item> <el-form-item> <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> <el-card v-show="!isNoData"> <el-table :data="tableData" :height="tableHeight" style="width: 100%" v-loading="loading" :cell-class-name="tableCellClassName" @sort-change="fetchData" > <el-table-column type="index" prop="name" label="åºå·" :index="indexMethod" fixed show-overflow-tooltip /> </el-card> <el-empty v-show="isNoData" :image-size="200" /> <el-table-column prop="name" label="ç¹ä½åç§°" show-overflow-tooltip width="300"> <template #default="{ row }"> <el-button type="primary" text @click="openDetail(row)"> <span class="rank-site">{{ row.name }}</span></el-button > </template> </el-table-column> <el-table-column prop="mnCode" label="设å¤ç¼ç " show-overflow-tooltip /> <el-table-column prop="lst" label="çæµæ¥æ" sortable="custom" show-overflow-tooltip /> <el-table-column prop="dayAvg" label="æ¥å¹³åå¼" sortable="custom" show-overflow-tooltip /> <el-table-column prop="min" label="æ¥æå°å¼" sortable="custom" show-overflow-tooltip /> <el-table-column prop="max" label="æ¥æå¤§å¼" sortable="custom" show-overflow-tooltip /> <el-table-column prop="dayOnline" label="æ¥å¨çº¿ç" sortable="custom" show-overflow-tooltip> <template #default="{ row }"> {{ percentFormatter(row.dayOnline) }} </template> </el-table-column> <el-table-column prop="dayValid" label="æ¥ææç" sortable="custom" show-overflow-tooltip> <template #default="{ row }"> {{ percentFormatter(row.dayValid) }} </template> </el-table-column> <el-table-column prop="dayExceeding" label="æ¥è¶ æ ç" sortable="custom" show-overflow-tooltip> <template #default="{ row }"> {{ percentFormatter(row.dayExceeding) }} </template> </el-table-column> </el-table> <el-pagination ref="h2" :page-sizes="[10, 20, 50, 100]" :total="total" layout="total,sizes, prev, pager, next, jumper" v-model:current-page="currentPage" v-model:page-size="pageSize" @update:current-page="handleCurrentChange" @update:page-size="handleSizeChange" /> </el-card> <el-empty v-show="isNoData" :image-size="200" /> </template> <style scoped> src/views/risk_assessment/components/SiteDetail.vue
@@ -10,8 +10,6 @@ return { siteName: '', month: '', // 页æ é¢ title:'' } }, watch: {},