Merge pull request '邓洁 : 有害气体echarts数据,切换站点与隧道数据渲染' (#164) from dengjie into dev

Reviewed-on: http://git.feashow.cn/clay/tunnel-cloud-web/pulls/164
This commit is contained in:
odjbin
2023-12-18 06:39:22 +00:00
5 changed files with 147 additions and 68 deletions

View File

@@ -14,6 +14,13 @@ export const getLargeScreenInfo = () => {
method: 'get' method: 'get'
}) })
} }
//通过站点id获取隧道信息
export const getTunnelBySiteId = (siteId) => {
return request({
url: `/tunnel/large/screen/tunnel/option/${siteId}`,
method: 'get'
})
}
// 风压echarts数据 // 风压echarts数据
export const getEchartsInfo = (equipmentId) => { export const getEchartsInfo = (equipmentId) => {
return request({ return request({
@@ -21,3 +28,10 @@ export const getEchartsInfo = (equipmentId) => {
method: 'get' method: 'get'
}) })
} }
// 有害气体echarts数据
export const getBadGasEchartsInfo = (tunnelId) => {
return request({
url: `/tunnel/large/screen/echarts/gas/sensor/${tunnelId}`,
method: 'get'
})
}

View File

@@ -81,7 +81,6 @@ body,
.current-site { .current-site {
display: flex; display: flex;
align-items: center; align-items: center;
> span:first-child { > span:first-child {
color: #f7b500; color: #f7b500;
margin-right: 20px; margin-right: 20px;

View File

@@ -44,10 +44,12 @@
import GasInfoItem from "./childComps/GasInfoItem.vue"; import GasInfoItem from "./childComps/GasInfoItem.vue";
import * as echarts from "echarts"; import * as echarts from "echarts";
import TimeRangeBtn from "@/components/timeRangeBtn/index.vue"; import TimeRangeBtn from "@/components/timeRangeBtn/index.vue";
import {getBadGasEchartsInfo} from "@/api/largeScreen";
const props = defineProps({ const props = defineProps({
list: Array, list: Array,
badGasData: Array, badGasData: Array,
tunnelId:Number
}); });
const timeList = ref(["年", "月", "日"]); const timeList = ref(["年", "月", "日"]);
const selectTimeButton = ref(2); const selectTimeButton = ref(2);
@@ -80,6 +82,14 @@ watch(
}, },
{ deep: true } { deep: true }
); );
watch(
() => props.tunnelId,
(now) => {
props.tunnelId=now
},
{ deep: true }
);
const timeSelect = (index) => { const timeSelect = (index) => {
console.log("选择时间", index); console.log("选择时间", index);
if (index === 0) { if (index === 0) {
@@ -119,12 +129,19 @@ const changeData = (item) => {
unit: item.unit, unit: item.unit,
}; };
}; };
const getBadGasChartInfo = () => {
console.log('tunnnelid--------',props.tunnelId)
getBadGasEchartsInfo(props.tunnelId).then(res => {
if (res?.code === 1000) {
isVisited.value = true
nextTick(() => {
initChart(res.data.dates, res.data)
})
}
})
}
const handleOpenChart = () => { const handleOpenChart = () => {
console.log("有害气体弹窗"); getBadGasChartInfo()
isVisited.value = true;
nextTick(() => {
initChart();
});
}; };
const getImageUrl = (name) => { const getImageUrl = (name) => {
return new URL(`../../../assets/images/badGasInfo/${name}`, import.meta.url) return new URL(`../../../assets/images/badGasInfo/${name}`, import.meta.url)
@@ -133,7 +150,7 @@ const getImageUrl = (name) => {
/** /**
* 初始化echarts实例方法 * 初始化echarts实例方法
*/ */
const initChart = () => { const initChart = (type, values) => {
//3.初始化container容器 //3.初始化container容器
myEcharts = echarts.init(document.getElementById("containerBad")); myEcharts = echarts.init(document.getElementById("containerBad"));
//5.传入数据 //5.传入数据
@@ -196,33 +213,34 @@ const initChart = () => {
//X轴 //X轴
xAxis: { xAxis: {
type: "category", type: "category",
data: [ // data: [
"00:00", // "00:00",
"01:00", // "01:00",
"02:00", // "02:00",
"03:00", // "03:00",
"04:00", // "04:00",
"05:00", // "05:00",
"06:00", // "06:00",
"07:00", // "07:00",
"08:00", // "08:00",
"09:00", // "09:00",
"10:00", // "10:00",
"11:00", // "11:00",
"12:00", // "12:00",
"13:00", // "13:00",
"14:00", // "14:00",
"15:00", // "15:00",
"16:00", // "16:00",
"17:00", // "17:00",
"18:00", // "18:00",
"19:00", // "19:00",
"20:00", // "20:00",
"21:00", // "21:00",
"22:00", // "22:00",
"23:00", // "23:00",
"24:00", // "24:00",
], // ],
data:type,
axisLabel: { axisLabel: {
textStyle: { textStyle: {
fontSize: 45, fontSize: 45,
@@ -244,10 +262,11 @@ const initChart = () => {
series: [ series: [
{ {
name: "二氧化碳", name: "二氧化碳",
data: [ // data: [
56, 12, 89, 34, 71, 43, 67, 20, 98, 72, 19, 61, 3, 85, 47, 92, 17, 76, // 56, 12, 89, 34, 71, 43, 67, 20, 98, 72, 19, 61, 3, 85, 47, 92, 17, 76,
69, 25, 31, 49, 81, 63, // 69, 25, 31, 49, 81, 63,
], // ],
data:values.carbonDioxideValues,
type: "line", type: "line",
smooth: true, smooth: true,
symbolSize: 24, symbolSize: 24,
@@ -257,10 +276,11 @@ const initChart = () => {
}, },
{ {
name: "一氧化碳", name: "一氧化碳",
data: [ // data: [
96, 38, 75, 10, 62, 81, 41, 27, 69, 16, 33, 57, 73, 87, 22, 46, 11, // 96, 38, 75, 10, 62, 81, 41, 27, 69, 16, 33, 57, 73, 87, 22, 46, 11,
79, 51, 29, 60, 48, 83, 15, // 79, 51, 29, 60, 48, 83, 15,
], // ],
data:values.carbonMonoxideValues,
type: "line", type: "line",
smooth: true, smooth: true,
symbolSize: 24, symbolSize: 24,
@@ -270,10 +290,11 @@ const initChart = () => {
}, },
{ {
name: "二氧化氮", name: "二氧化氮",
data: [ // data: [
53, 88, 10, 67, 92, 31, 74, 46, 20, 37, 85, 16, 63, 70, 41, 99, 25, // 53, 88, 10, 67, 92, 31, 74, 46, 20, 37, 85, 16, 63, 70, 41, 99, 25,
77, 82, 13, 68, 49, 55, 7, 39, // 77, 82, 13, 68, 49, 55, 7, 39,
], // ],
data:values.nitrogenDioxideValues,
type: "line", type: "line",
smooth: true, smooth: true,
symbolSize: 24, symbolSize: 24,
@@ -283,10 +304,11 @@ const initChart = () => {
}, },
{ {
name: "一氧化氮", name: "一氧化氮",
data: [ // data: [
37, 19, 85, 62, 28, 91, 43, 76, 14, 68, 33, 52, 71, 26, 97, 49, 82, // 37, 19, 85, 62, 28, 91, 43, 76, 14, 68, 33, 52, 71, 26, 97, 49, 82,
17, 66, 30, 78, 55, 23, 47, // 17, 66, 30, 78, 55, 23, 47,
], // ],
data:values.sulfurMonoxideValues,
type: "line", type: "line",
smooth: true, smooth: true,
symbolSize: 24, symbolSize: 24,
@@ -296,10 +318,11 @@ const initChart = () => {
}, },
{ {
name: "二氧化硫", name: "二氧化硫",
data: [ // data: [
6, 30, 91, 77, 28, 51, 42, 83, 16, 65, 35, 72, 18, 96, 47, 79, 100, // 6, 30, 91, 77, 28, 51, 42, 83, 16, 65, 35, 72, 18, 96, 47, 79, 100,
23, 80, 44, 62, 59, 13, 86, // 23, 80, 44, 62, 59, 13, 86,
], // ],
data:values.sulfurDioxideValues,
type: "line", type: "line",
smooth: true, smooth: true,
symbolSize: 24, symbolSize: 24,
@@ -309,10 +332,11 @@ const initChart = () => {
}, },
{ {
name: "硫化氢", name: "硫化氢",
data: [ // data: [
13, 27, 39, 51, 62, 73, 84, 95, 10, 20, 30, 40, 50, 60, 70, 80, 90, // 13, 27, 39, 51, 62, 73, 84, 95, 10, 20, 30, 40, 50, 60, 70, 80, 90,
100, 11, 21, 31, 41, 51, // 100, 11, 21, 31, 41, 51,
], // ],
data:values.hydrogenSulfideValues,
type: "line", type: "line",
smooth: true, smooth: true,
symbolSize: 24, symbolSize: 24,

View File

@@ -31,7 +31,7 @@
import WindPressureItem from "./childComps/WindPressureItem.vue"; import WindPressureItem from "./childComps/WindPressureItem.vue";
import TimeRangeBtn from "@/components/timeRangeBtn/index.vue" import TimeRangeBtn from "@/components/timeRangeBtn/index.vue"
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import {getEchartsInfo} from "../../../api/largeScreen"; import {getEchartsInfo} from "@/api/largeScreen";
const props = defineProps({ const props = defineProps({
list: Array, list: Array,
@@ -60,7 +60,6 @@ watch(() => props.winData, (now) => {
const getWindInfo = (equipmentId) => { const getWindInfo = (equipmentId) => {
getEchartsInfo(equipmentId).then(res => { getEchartsInfo(equipmentId).then(res => {
console.log('res-wind', res)
if (res?.code === 1000) { if (res?.code === 1000) {
isVisited.value = true isVisited.value = true
nextTick(() => { nextTick(() => {

View File

@@ -7,7 +7,14 @@
<div class="top-right"> <div class="top-right">
<div class="current-site"> <div class="current-site">
当前站点<span>{{ currentSite }}</span> 当前站点<span>{{ currentSite }}</span>
<div class="toggle"></div> <el-dropdown trigger="click" @command="handleCommand">
<div class="toggle"></div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item v-for="item in siteList" :key="item.value" :command="item">{{ item.label }}</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div> </div>
<div class="current-user"> <div class="current-user">
上午好<span>{{ currentUser }}</span> 上午好<span>{{ currentUser }}</span>
@@ -32,7 +39,7 @@
:close-on-click-modal="false" :close-on-press-escape="false"> :close-on-click-modal="false" :close-on-press-escape="false">
<wind-pressure-list v-if="showFan" :list="socketData.windPressure" :win-data="largeScreenData"/> <wind-pressure-list v-if="showFan" :list="socketData.windPressure" :win-data="largeScreenData"/>
<air-info v-if="showFan" :list="socketData.sensor" :air-data="largeScreenData"/> <air-info v-if="showFan" :list="socketData.sensor" :air-data="largeScreenData"/>
<bad-gas-info v-if="showFan" :list="socketData.sensor" :bad-gas-data="largeScreenData"/> <bad-gas-info v-if="showFan" :list="socketData.sensor" :bad-gas-data="largeScreenData" :tunnelId="tunnelId"/>
</el-drawer> </el-drawer>
<div v-if="drawerRight" class="right-arrow" @click="closeRight"></div> <div v-if="drawerRight" class="right-arrow" @click="closeRight"></div>
<div v-else class="shrink-right" @click="closeRight"></div> <div v-else class="shrink-right" @click="closeRight"></div>
@@ -62,10 +69,9 @@ import BadGasInfo from "@/components/content/badGasInfo/BadGasInfo.vue";
import ManageBtn from "@/components/manageBtn/index.vue"; import ManageBtn from "@/components/manageBtn/index.vue";
import ManageLength from "@/components/manageLength/index.vue"; import ManageLength from "@/components/manageLength/index.vue";
import {dateFormat} from "@/utils/date.js"; import {dateFormat} from "@/utils/date.js";
import {onMounted} from "vue";
import {getToken} from "@/utils/auth"; import {getToken} from "@/utils/auth";
import {useAuthStore} from "@/store/userstore.js"; import {useAuthStore} from "@/store/userstore.js";
import {getLargeScreen, getLargeScreenInfo} from "@/api/largeScreen"; import {getLargeScreen, getLargeScreenInfo, getTunnelBySiteId} from "@/api/largeScreen";
import {ElMessageBox} from "element-plus"; import {ElMessageBox} from "element-plus";
import {getUserInfo} from "@/api/login"; import {getUserInfo} from "@/api/login";
@@ -75,7 +81,8 @@ const selectIndex = ref(-1);
const showFan = ref(false); const showFan = ref(false);
const drawerLeft = ref(true); const drawerLeft = ref(true);
const drawerRight = ref(true); const drawerRight = ref(true);
const currentSite = ref("松江站"); const currentSite = ref("");
const siteList = ref([])
const currentUser = ref(""); const currentUser = ref("");
const currentDate = ref(dateFormat()); const currentDate = ref(dateFormat());
const tunnelBtn = ref(); const tunnelBtn = ref();
@@ -114,8 +121,9 @@ const getOtherInfo = () => {
if (res?.code === 1000) { if (res?.code === 1000) {
routeList.value = res.data.routeList routeList.value = res.data.routeList
currentSite.value = res.data.siteOption[0].label currentSite.value = res.data.siteOption[0].label
tunnelList.value = res.data.tunnelOption siteList.value = res.data.siteOption
tunnelId.value = res.data.tunnelOption[0].value tunnelId.value = res.data.tunnelOption[0].value
getTunnel(res.data.siteOption[0].value)
getScreenInfo(tunnelId.value); getScreenInfo(tunnelId.value);
} }
}); });
@@ -127,8 +135,17 @@ const getScreenInfo = async (id) => {
} }
}); });
}; };
//根据站点id获取隧道信息
const getTunnel = (id) => {
getTunnelBySiteId(id).then((res) => {
if (res?.code === 1000) {
tunnelList.value = res.data
getScreenInfo(res.data[0].value)
}
});
}
const changeTunnel = (e) => { const changeTunnel = (e) => {
console.log('e', e,tunnelList.value) tunnelId.value = e
let newObj = {} let newObj = {}
tunnelList.value.forEach((item, index) => { tunnelList.value.forEach((item, index) => {
if (index === e) { if (index === e) {
@@ -139,7 +156,6 @@ const changeTunnel = (e) => {
nextTick(() => { nextTick(() => {
showFan.value = true; showFan.value = true;
}); });
console.log('newObj', newObj)
} }
const manageSelect = (index) => { const manageSelect = (index) => {
console.log("首页点击-", index); console.log("首页点击-", index);
@@ -149,6 +165,11 @@ const manageSelect = (index) => {
router.push("/tunnel/1"); router.push("/tunnel/1");
} }
}; };
const handleCommand=(item)=>{
console.log('commads',item)
currentSite.value=item.label
getTunnel(item.value)
}
const closeLeft = () => { const closeLeft = () => {
drawerLeft.value = !drawerLeft.value; drawerLeft.value = !drawerLeft.value;
}; };
@@ -216,7 +237,29 @@ const closeSocket = () => {
}; };
initWebSocket(); initWebSocket();
</script> </script>
<style lang="scss">
.el-popper{
border: 1px solid #0F82AF;
.el-scrollbar__wrap {
.el-dropdown__list {
.el-dropdown-menu {
background-color:#072247;
.el-dropdown-menu__item{
color: #FFFFFF;
border:none;
}
.el-dropdown-menu__item:hover{
background-color:#072247;
color: #08B7B8;
}
}
}
}
}
</style>
<style lang="scss" scoped> <style lang="scss" scoped>
#main { #main {
height: 100%; height: 100%;