From 54ef36700435d541a1154503b14f25ad984f6f90 Mon Sep 17 00:00:00 2001 From: zhouwenxuan <1175765986@qq.com> Date: 星期二, 05 九月 2023 13:21:29 +0800 Subject: [PATCH] 实时监控页面 --- src/views/monitorData/gasData/index.vue | 97 +++++++------ package.json | 179 ++++++++++++------------ src/views/monitorData/fluxData/index.vue | 92 ++++++------ src/types/monitorData.d.ts | 2 src/views/monitorData/weatherData/index.vue | 34 +--- 5 files changed, 203 insertions(+), 201 deletions(-) diff --git a/package.json b/package.json index 90518f1..aa83b8d 100644 --- a/package.json +++ b/package.json @@ -1,91 +1,92 @@ { - "name": "vue-next-admin", - "version": "2.1.1", - "description": "vue3 vite next admin template", - "author": "lyt_20201208", - "license": "MIT", - "scripts": { - "dev": "vite --force", - "build": "vite build", - "lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue src/" - }, - "dependencies": { - "@amap/amap-jsapi-loader": "^1.0.1", - "@element-plus/icons-vue": "^2.0.6", - "@kjgl77/datav-vue3": "^1.6.1", - "@wangeditor/editor": "^5.1.14", - "axios": "^0.27.2", - "countup.js": "^2.2.0", - "cropperjs": "^1.5.12", - "echarts": "^5.3.3", - "echarts-gl": "^2.0.9", - "echarts-wordcloud": "^2.0.0", - "element-plus": "^2.2.9", - "js-base64": "^3.7.2", - "js-cookie": "^3.0.1", - "json-bigint": "^1.0.0", - "jsplumb": "^2.15.6", - "mitt": "^3.0.0", - "nprogress": "^0.2.0", - "pinia": "^2.0.14", - "pinia-plugin-persistedstate": "^2.1.1", - "print-js": "^1.6.0", - "qrcodejs2-fixes": "^0.0.2", - "screenfull": "^6.0.1", - "sortablejs": "^1.15.0", - "splitpanes": "^3.1.1", - "vue": "^3.2.36", - "vue-clipboard3": "^2.0.0", - "vue-grid-layout": "^3.0.0-beta1", - "vue-i18n": "^9.1.10", - "vue-router": "^4.0.15", - "wangeditor": "^4.7.15", - "xlsx": "^0.18.5" - }, - "devDependencies": { - "@types/json-bigint": "^1.0.1", - "@types/node": "^17.0.39", - "@types/nprogress": "^0.2.0", - "@types/sortablejs": "^1.13.0", - "@typescript-eslint/eslint-plugin": "^5.27.0", - "@typescript-eslint/parser": "^5.27.0", - "@vitejs/plugin-vue": "^2.3.3", - "@vue/compiler-sfc": "^3.2.36", - "amfe-flexible": "^2.2.1", - "dotenv": "^16.0.1", - "eslint": "^8.17.0", - "eslint-plugin-vue": "^9.1.0", - "postcss-pxtorem": "^6.0.0", - "prettier": "^2.6.2", - "sass": "^1.52.2", - "sass-loader": "^13.0.0", - "typescript": "^4.7.3", - "vite": "^2.9.9", - "vue-eslint-parser": "^9.0.2" - }, - "browserslist": [ - "> 1%", - "last 2 versions", - "not dead" - ], - "bugs": { - "url": "https://gitee.com/lyt-top/vue-next-admin/issues" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">= 6.0.0" - }, - "keywords": [ - "vue", - "vue3", - "vuejs/vue-next", - "element-ui", - "element-plus", - "vue-next-admin", - "next-admin" - ], - "repository": { - "type": "git", - "url": "https://gitee.com/lyt-top/vue-next-admin.git" - } + "name": "vue-next-admin", + "version": "2.1.1", + "description": "vue3 vite next admin template", + "author": "lyt_20201208", + "license": "MIT", + "scripts": { + "dev": "vite --force", + "build": "vite build", + "lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue src/" + }, + "dependencies": { + "@amap/amap-jsapi-loader": "^1.0.1", + "@element-plus/icons-vue": "^2.0.6", + "@kjgl77/datav-vue3": "^1.6.1", + "@wangeditor/editor": "^5.1.14", + "axios": "^0.27.2", + "countup.js": "^2.2.0", + "cropperjs": "^1.5.12", + "echarts": "^5.3.3", + "echarts-gl": "^2.0.9", + "echarts-wordcloud": "^2.0.0", + "element-plus": "^2.2.9", + "js-base64": "^3.7.2", + "js-cookie": "^3.0.1", + "json-bigint": "^1.0.0", + "jsplumb": "^2.15.6", + "mitt": "^3.0.0", + "moment": "^2.29.4", + "nprogress": "^0.2.0", + "pinia": "^2.0.14", + "pinia-plugin-persistedstate": "^2.1.1", + "print-js": "^1.6.0", + "qrcodejs2-fixes": "^0.0.2", + "screenfull": "^6.0.1", + "sortablejs": "^1.15.0", + "splitpanes": "^3.1.1", + "vue": "^3.2.36", + "vue-clipboard3": "^2.0.0", + "vue-grid-layout": "^3.0.0-beta1", + "vue-i18n": "^9.1.10", + "vue-router": "^4.0.15", + "wangeditor": "^4.7.15", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@types/json-bigint": "^1.0.1", + "@types/node": "^17.0.39", + "@types/nprogress": "^0.2.0", + "@types/sortablejs": "^1.13.0", + "@typescript-eslint/eslint-plugin": "^5.27.0", + "@typescript-eslint/parser": "^5.27.0", + "@vitejs/plugin-vue": "^2.3.3", + "@vue/compiler-sfc": "^3.2.36", + "amfe-flexible": "^2.2.1", + "dotenv": "^16.0.1", + "eslint": "^8.17.0", + "eslint-plugin-vue": "^9.1.0", + "postcss-pxtorem": "^6.0.0", + "prettier": "^2.6.2", + "sass": "^1.52.2", + "sass-loader": "^13.0.0", + "typescript": "^4.7.3", + "vite": "^2.9.9", + "vue-eslint-parser": "^9.0.2" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ], + "bugs": { + "url": "https://gitee.com/lyt-top/vue-next-admin/issues" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">= 6.0.0" + }, + "keywords": [ + "vue", + "vue3", + "vuejs/vue-next", + "element-ui", + "element-plus", + "vue-next-admin", + "next-admin" + ], + "repository": { + "type": "git", + "url": "https://gitee.com/lyt-top/vue-next-admin.git" + } } diff --git a/src/types/monitorData.d.ts b/src/types/monitorData.d.ts index d49cb4c..a0219f5 100644 --- a/src/types/monitorData.d.ts +++ b/src/types/monitorData.d.ts @@ -35,6 +35,8 @@ pageIndex: number; pageSize: number; searchParams:{ + startTime: string; + endTime: string; time: Array<any>; gas: string; } diff --git a/src/views/monitorData/fluxData/index.vue b/src/views/monitorData/fluxData/index.vue index 8eda26d..f36da95 100644 --- a/src/views/monitorData/fluxData/index.vue +++ b/src/views/monitorData/fluxData/index.vue @@ -8,7 +8,6 @@ v-model="state.tableData.listQuery.searchParams.time" type="datetimerange" format="YYYY-MM-DD HH:mm:ss" - value-format="YYYY-MM-DD HH:mm:ss" range-separator="~" start-placeholder="开始时间" end-placeholder="结束时间" @@ -22,7 +21,7 @@ style="max-width: 180px" size="default" > - <el-option v-for="item in state.tableData.areaList" :key="item.label" :label="item.value" :value="item.label"></el-option> + <el-option v-for="item in state.tableData.areaList" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </el-form-item> <el-form-item label="气体:"> @@ -32,7 +31,7 @@ style="max-width: 180px" size="default" > - <el-option v-for="item in state.tableData.gasList" :key="item.label" :label="item.value" :value="item.label"></el-option> + <el-option v-for="item in state.tableData.gasList" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </el-form-item> <el-button size="default" type="primary" class="ml10" @click="search()"> @@ -83,8 +82,10 @@ import * as echarts from "echarts"; import { ElMessage, ElMessageBox } from 'element-plus' import {TableFluxState} from "/@/types/monitorData"; +import moment from "moment/moment"; +import { gasManageApi } from "/@/api/basicDataManage/gasManage"; +import {areaManageApi} from "/@/api/basicDataManage/areaManage"; -const infoRef = ref(); const state = reactive<TableFluxState>({ tableData: { data: [], @@ -99,26 +100,8 @@ area: '' } }, - gasList: [ - { - label: '1', - value: '甲醛' - }, - { - label: '2', - value: '甲烷' - } - ], - areaList: [ - { - label: '1', - value: '1号区域' - }, - { - label: '2', - value: '2号区域' - } - ], + gasList: [], + areaList: [], } }); @@ -151,6 +134,8 @@ onMounted( () => { getNowTime(); + getArea(); + getAllGas(); initCharts(); } @@ -161,13 +146,47 @@ let sTime = `${isDate.getFullYear()}-${isDate.getMonth() + 1}-${isDate.getDate()}` let eTime = `${isDate.getFullYear()}-${isDate.getMonth() + 1}-${isDate.getDate()}` sTime = `${sTime} 00:00:30` - eTime = `${eTime} 23:59:59` + eTime = `${eTime} ` + moment().format('HH:mm:ss') state.tableData.listQuery.searchParams.time = [sTime ,eTime]; - console.log("time",state.tableData.listQuery.searchParams.time) } const initInfoData = () => { + const param = { + startTime: moment(state.tableData.listQuery.searchParams.time[0]).format('YYYY-MM-DD HH:mm:ss'), + endTime: moment(state.tableData.listQuery.searchParams.time[1]).format('YYYY-MM-DD HH:mm:ss') + } console.log("数据列表") }; + +const getArea = async () => { + const param = { + pageIndex: 1, + pageSize: 999, + searchParams:{ + name: '' + } + } + let res = await areaManageApi().getAreaPage(param); + if(res.data.code == 100) { + state.tableData.areaList = res.data.data; + }else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } +} +const getAllGas = async () => { + let res = await gasManageApi().getGas({}); + if(res.data.code == 100) { + state.tableData.gasList = res.data.data; + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } +}; + const onHandleSizeChange = (val: number) => { state.tableData.listQuery.pageSize = val; initInfoData(); @@ -177,31 +196,16 @@ state.tableData.listQuery.pageIndex = val; initInfoData(); }; -const del = (val: any) => { - ElMessageBox.confirm( - '确定删除此条数据?', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - } - ) - .then(() => { - ElMessage({ - type: 'success', - message: '删除成功', - }) - }) -}; - const search = () => { + initInfoData(); console.log("22",state.tableData.listQuery.searchParams) } const reset = () => { state.tableData.listQuery.searchParams.time = []; state.tableData.listQuery.searchParams.area = ''; state.tableData.listQuery.searchParams.gas = ''; + state.tableData.listQuery.pageIndex = 1; + initInfoData(); } const labelOption = { diff --git a/src/views/monitorData/gasData/index.vue b/src/views/monitorData/gasData/index.vue index 992af73..c1804a3 100644 --- a/src/views/monitorData/gasData/index.vue +++ b/src/views/monitorData/gasData/index.vue @@ -8,7 +8,6 @@ v-model="state.tableData.listQuery.searchParams.time" type="datetimerange" format="YYYY-MM-DD HH:mm:ss" - value-format="YYYY-MM-DD HH:mm:ss" range-separator="~" start-placeholder="开始时间" end-placeholder="结束时间" @@ -22,7 +21,7 @@ style="max-width: 180px" size="default" > - <el-option v-for="item in state.tableData.gasList" :key="item.label" :label="item.value" :value="item.label"></el-option> + <el-option v-for="item in state.tableData.gasList" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </el-form-item> <el-button size="default" type="primary" class="ml10" @click="search()"> @@ -72,8 +71,9 @@ import * as echarts from "echarts"; import { ElMessage, ElMessageBox } from 'element-plus' import {TableGasState} from "/@/types/monitorData"; +import { gasManageApi } from "/@/api/basicDataManage/gasManage"; +import moment from "moment"; -const infoRef = ref(); const state = reactive<TableGasState>({ tableData: { data: [], @@ -83,27 +83,20 @@ pageIndex: 1, pageSize: 10, searchParams:{ + startTime: '', + endTime: '', time: [], gas: '' } }, - gasList: [ - { - label: '1', - value: '甲醛' - }, - { - label: '2', - value: '甲烷' - } - ] + gasList: [] } }); const chooseTime = (val: any) => { console.log("val",val) - let sTime = Date.parse(new Date(val[0].replace(/-/g, "/"))); - let eTime = Date.parse(new Date(val[1].replace(/-/g, "/"))); + let sTime = Date.parse(new Date(val[0])); + let eTime = Date.parse(new Date(val[1])); const datadiff = eTime - sTime + 86400000; const time = 7 * 24 * 60 * 60 * 1000; if (sTime > eTime) { @@ -117,14 +110,18 @@ state.tableData.listQuery.searchParams.time = []; return false; } else { - console.log('七天内数据') } } } +const dataZoomEnd = ref(); +const xData = ref(['10:18:26', '10:18:56', '10:19:24', '10:19:54', '10:20:26', '10:20:56', '10:21:24']); onMounted( () => { getNowTime(); + getAllGas(); + dataZoomEnd.value = xData.value.length > 25 ? 30 : 100; //x轴数量大于25,滑动框显示前30%标签,否则显示100% + console.log("dataZoomEnd",dataZoomEnd.value) initCharts(); } ); @@ -133,13 +130,29 @@ let sTime = `${isDate.getFullYear()}-${isDate.getMonth() + 1}-${isDate.getDate()}` let eTime = `${isDate.getFullYear()}-${isDate.getMonth() + 1}-${isDate.getDate()}` sTime = `${sTime} 00:00:00` - eTime = `${eTime} 23:59:59` - state.tableData.listQuery.searchParams.time = [sTime ,eTime]; - console.log("time",state.tableData.listQuery.searchParams.time) + eTime = `${eTime} ` + moment().format('HH:mm:ss') + state.tableData.listQuery.searchParams.time = [sTime,eTime]; } const initInfoData = () => { - console.log("数据列表") + const param = { + startTime: moment(state.tableData.listQuery.searchParams.time[0]).format('YYYY-MM-DD HH:mm:ss'), + endTime: moment(state.tableData.listQuery.searchParams.time[1]).format('YYYY-MM-DD HH:mm:ss') + } + console.log("数据列表",param) }; + +const getAllGas = async () => { + let res = await gasManageApi().getGas({}); + if(res.data.code == 100) { + state.tableData.gasList = res.data.data; + }else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } +}; + const onHandleSizeChange = (val: number) => { state.tableData.listQuery.pageSize = val; initInfoData(); @@ -149,35 +162,18 @@ state.tableData.listQuery.pageIndex = val; initInfoData(); }; -const openDialog = (type: string, value: any) => { - infoRef.value.openDialog(type, value); -}; -const del = (val: any) => { - ElMessageBox.confirm( - '确定删除此条数据?', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - } - ) - .then(() => { - ElMessage({ - type: 'success', - message: '删除成功', - }) - }) -}; - const search = () => { + initInfoData(); console.log("vla",state.tableData.listQuery.searchParams) } const reset = () => { state.tableData.listQuery.searchParams.time = []; - state.tableData.listQuery.searchParams.gas = ''; + state.tableData.listQuery.pageIndex = 1; + initInfoData(); } + + const initCharts = () => { const myChart = echarts.init(document.getElementById('gasChart')); @@ -192,7 +188,11 @@ xAxis: { show: true, type: 'category', - data: ['10:18:26', '10:18:28', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + // axisLabel: { + // interval: 0, + // rotate: 45 + // }, + data: xData.value }, yAxis: { show: true, @@ -219,7 +219,16 @@ }, } - ] + ], + // dataZoom: [ + // { + // type: 'slider', + // show: dataZoomEnd.value == 100 ? false : true, + // realtime: true, + // start: 0, + // end: dataZoomEnd.value + // }, + // ] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); diff --git a/src/views/monitorData/weatherData/index.vue b/src/views/monitorData/weatherData/index.vue index f8f4ad4..eda444c 100644 --- a/src/views/monitorData/weatherData/index.vue +++ b/src/views/monitorData/weatherData/index.vue @@ -8,7 +8,6 @@ v-model="state.tableData.listQuery.searchParams.time" type="datetimerange" format="YYYY-MM-DD HH:mm:ss" - value-format="YYYY-MM-DD HH:mm:ss" range-separator="~" start-placeholder="开始时间" end-placeholder="结束时间" @@ -72,6 +71,7 @@ import * as echarts from "echarts"; import { ElMessage, ElMessageBox } from 'element-plus' import {TableWeatherState} from "/@/types/monitorData"; +import moment from "moment/moment"; const infoRef = ref(); const state = reactive<TableWeatherState>({ @@ -138,6 +138,7 @@ () => { getNowTime(); initCharts(); + initInfoData() } ); const getNowTime = () => { @@ -145,11 +146,14 @@ let sTime = `${isDate.getFullYear()}-${isDate.getMonth() + 1}-${isDate.getDate()}` let eTime = `${isDate.getFullYear()}-${isDate.getMonth() + 1}-${isDate.getDate()}` sTime = `${sTime} 00:00:00` - eTime = `${eTime} 23:59:59` + eTime = `${eTime} ` + moment().format('HH:mm:ss') state.tableData.listQuery.searchParams.time = [sTime ,eTime]; - console.log("time",state.tableData.listQuery.searchParams.time) } const initInfoData = () => { + const param = { + startTime: moment(state.tableData.listQuery.searchParams.time[0]).format('YYYY-MM-DD HH:mm:ss'), + endTime: moment(state.tableData.listQuery.searchParams.time[1]).format('YYYY-MM-DD HH:mm:ss') + } console.log("数据列表") }; const onHandleSizeChange = (val: number) => { @@ -161,34 +165,16 @@ state.tableData.listQuery.pageIndex = val; initInfoData(); }; -const openDialog = (type: string, value: any) => { - infoRef.value.openDialog(type, value); -}; -const del = (val: any) => { - ElMessageBox.confirm( - '确定删除此条数据?', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - } - ) - .then(() => { - ElMessage({ - type: 'success', - message: '删除成功', - }) - }) -}; const search = () => { console.log("vla",state.tableData.listQuery.searchParams) + initInfoData(); } const reset = () => { state.tableData.listQuery.searchParams.time = []; - state.tableData.listQuery.searchParams.weatherType = ''; + state.tableData.listQuery.pageIndex = 1; + initInfoData(); } const initCharts = () => { -- Gitblit v1.9.2