From 0825e9e96a6f2d4b71a51d32dae1302f2496c4d1 Mon Sep 17 00:00:00 2001 From: zmc <zmc_li@foxmail.com> Date: 星期四, 23 十一月 2023 16:58:27 +0800 Subject: [PATCH] 1.增加了风险模型的跳转逻辑 2.增加了风险模型的组件 --- src/utils/common.js | 214 +++++++++++++------------- src/api/index.js | 16 - src/views/risk_assessment/components/CompDataRiskModel.vue | 1 src/api/statistic/statisticApi.js | 27 +++ src/views/risk_assessment/DataIndexRank.vue | 187 ++++++++++++---------- src/router/index.js | 9 - src/views/risk_assessment/components/DustRadarChart.vue | 2 7 files changed, 248 insertions(+), 208 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index e4deb55..2ae6d75 100644 --- a/src/api/index.js +++ b/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 } diff --git a/src/api/statistic/statisticApi.js b/src/api/statistic/statisticApi.js new file mode 100644 index 0000000..bb5d1d2 --- /dev/null +++ b/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 }) + } +} diff --git a/src/router/index.js b/src/router/index.js index ecc110e..d47d617 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -79,15 +79,6 @@ component: () => import('@/views/setting/SetConfiguration.vue') }, - - // 椋庨櫓妯″瀷宓屽叆杩囨浮椤甸潰 - // { - // path: '/detail/:siteName/:month/:type', - // name: 'RiskModelDetail', - // meta: { title: '绔欑偣鍏蜂綋淇℃伅', transition: 'slide-left' }, - // component: () => import('@/views/risk_assessment/components/SiteDetail.vue') - // }, - // 椋庨櫓妯″瀷宓屽叆 { path: '/subRiskModel', diff --git a/src/utils/common.js b/src/utils/common.js index f88dfe1..54f6dae 100644 --- a/src/utils/common.js +++ b/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,涓嶈秴杩囦竴涓湀鍒欒繑鍥瀎alse - */ +import * as XLSX from 'xlsx/xlsx.mjs' +import dayjs from 'dayjs' - function isExceedOneMonth(dateStr1, dateStr2) { - // 瓒呰繃涓�涓湀锛岃繑鍥濼rue锛屽惁鍒欒繑鍥濬alse - // 灏嗘棩鏈熷瓧绗︿覆杞负鏃ユ湡瀵硅薄 - const date1 = new Date(dateStr1); - const date2 = new Date(dateStr2); - - // 鑾峰彇涓や釜鏃ユ湡鐨勫勾銆佹湀銆佹棩 - const year1 = date1.getFullYear(); - const month1 = date1.getMonth(); - const day1 = date1.getDate(); - - const year2 = date2.getFullYear(); - const month2 = date2.getMonth(); - const day2 = date2.getDate(); - - // 鍒ゆ柇涓や釜鏃ユ湡鏄惁鐩稿樊涓�涓湀 - if (year1 === year2) { - // 骞翠唤鐩哥瓑锛屾瘮杈冩湀浠藉樊鍊� - if (Math.abs(month1 - month2) === 1) { - // 鏈堜唤宸�间负1锛岃繕闇�瑕佸垽鏂叿浣撴棩鏈� - if ( - (month1 < month2 && day1 < day2) || - (month1 > month2 && day1 > day2) - ) { - return true; - } - } - } else if (Math.abs(year1 - year2) === 1) { - // 骞翠唤宸�间负1锛屾瘮杈冩湀浠藉拰鏃ユ湡 - if ( - (year1 < year2 && month1 === 11 && month2 === 0 && day1 < day2) || - (year1 > year2 && month1 === 0 && month2 === 11 && day1 > day2) - ) { - return true; - } +export function useCommonFunction() { + /** + * description锛氬垽鏂捣濮嬫椂闂磋法搴︽槸鍚﹁秴杩�1涓湀 + * @param锛� 寮�濮嬫椂闂达紝缁撴潫鏃堕棿 + * @createTime:2023-08-18 + * @returns锛氳秴杩囦竴涓湀杩斿洖true,涓嶈秴杩囦竴涓湀鍒欒繑鍥瀎alse + */ + + function isExceedOneMonth(dateStr1, dateStr2) { + // 瓒呰繃涓�涓湀锛岃繑鍥濼rue锛屽惁鍒欒繑鍥濬alse + // 灏嗘棩鏈熷瓧绗︿覆杞负鏃ユ湡瀵硅薄 + const date1 = new Date(dateStr1) + const date2 = new Date(dateStr2) + + // 鑾峰彇涓や釜鏃ユ湡鐨勫勾銆佹湀銆佹棩 + const year1 = date1.getFullYear() + const month1 = date1.getMonth() + const day1 = date1.getDate() + + const year2 = date2.getFullYear() + const month2 = date2.getMonth() + const day2 = date2.getDate() + + // 鍒ゆ柇涓や釜鏃ユ湡鏄惁鐩稿樊涓�涓湀 + if (year1 === year2) { + // 骞翠唤鐩哥瓑锛屾瘮杈冩湀浠藉樊鍊� + if (Math.abs(month1 - month2) === 1) { + // 鏈堜唤宸�间负1锛岃繕闇�瑕佸垽鏂叿浣撴棩鏈� + if ((month1 < month2 && day1 < day2) || (month1 > month2 && day1 > day2)) { + return true } - - // 榛樿杩斿洖false锛岃〃绀轰袱涓棩鏈熷瓧绗︿覆涓嶇浉宸竴涓湀 - return false; } - - /** - * 鐧惧垎鍙锋瘮杈冨ぇ灏� - * @param锛� a鏄惁澶т簬b - * @returns锛氬ぇ浜庯紝鍒欒繑鍥瀟rue銆傚惁鍒欒繑鍥瀎alse - */ - 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 } + } - /** - *瀵煎嚭涓篹xcel - * @param锛� 琛ㄦ牸鏁版嵁锛屽緟瀵煎嚭鐨勮〃鏍煎垪锛宔xcel鍒楋紝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锛氬ぇ浜庯紝鍒欒繑鍥瀟rue銆傚惁鍒欒繑鍥瀎alse + */ + function cmpp(a, b) { + return Number(a.replace('%', '')) >= Number(b.replace('%', '')) + } + + /** + *瀵煎嚭涓篹xcel + * @param锛� 琛ㄦ牸鏁版嵁锛屽緟瀵煎嚭鐨勮〃鏍煎垪锛宔xcel鍒楋紝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锛屽苟鎶妔heet娣诲姞杩涘幓 - const wb = XLSX.utils.book_new(); - XLSX.utils.book_append_sheet(wb, xls, 'Sheet1'); - // 灏唚orkbook杞负浜岃繘鍒秞lsx鏂囦欢骞朵笅杞� - 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锛屽苟鎶妔heet娣诲姞杩涘幓 + const wb = XLSX.utils.book_new() + XLSX.utils.book_append_sheet(wb, xls, 'Sheet1') + // 灏唚orkbook杞负浜岃繘鍒秞lsx鏂囦欢骞朵笅杞� + 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 } } - diff --git a/src/views/risk_assessment/DataIndexRank.vue b/src/views/risk_assessment/DataIndexRank.vue index 04e205d..d7c9407 100644 --- a/src/views/risk_assessment/DataIndexRank.vue +++ b/src/views/risk_assessment/DataIndexRank.vue @@ -3,9 +3,12 @@ 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' + + export default { components: { @@ -40,8 +43,8 @@ }, setup() { // 寮曞叆 鐧惧垎鍙锋瘮杈冨ぇ灏� 瀵煎嚭鍔熻兘 - const { cmpp, exportToExcel } = useCommonFunction() - return { cmpp, exportToExcel } + const { cmpp, exportToExcel, percentFormatter } = useCommonFunction() + return { cmpp, exportToExcel, percentFormatter } }, mounted() { @@ -112,9 +115,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) { @@ -144,21 +147,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 姝e簭锛宒escending 闄嶅簭 + 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 @@ -181,84 +190,90 @@ } </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> diff --git a/src/views/risk_assessment/components/CompDataRiskModel.vue b/src/views/risk_assessment/components/CompDataRiskModel.vue index 8e98a1b..0c1fc5b 100644 --- a/src/views/risk_assessment/components/CompDataRiskModel.vue +++ b/src/views/risk_assessment/components/CompDataRiskModel.vue @@ -418,6 +418,7 @@ <el-form-item v-show="showAll"> <MonthSelect @submit-value="giveMonth"></MonthSelect> </el-form-item> + <el-form-item v-show="showAll"> <ButtonClick diff --git a/src/views/risk_assessment/components/DustRadarChart.vue b/src/views/risk_assessment/components/DustRadarChart.vue index 1848330..6a90aac 100644 --- a/src/views/risk_assessment/components/DustRadarChart.vue +++ b/src/views/risk_assessment/components/DustRadarChart.vue @@ -55,6 +55,8 @@ } }, methods: { + + initRadarChart() { this.chart = echarts.init(document.getElementById('main')); }, -- Gitblit v1.9.3