Browse Source

Merge branch 'develop' of http://39.106.31.193:9211/mengff/jihe-hs into develop

wangqin
刘朋 8 months ago
parent
commit
03c874c937
  1. 2
      ruoyi-ui/src/assets/styles/JiHeExpressway.scss
  2. 6
      ruoyi-ui/src/common/menuData.js
  3. 6
      ruoyi-ui/src/views/JiHeExpressway/components/Card1/index.vue
  4. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Broadcast/components/BroadcastReleases.vue
  5. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Camera/components/CameraControlDialog.vue
  6. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/CongestedRoadSections/index.vue
  7. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue
  8. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/GuardrailCollision/index.vue
  9. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/HighwayDetails/index.vue
  10. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Intermodulation/index.vue
  11. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SmartDevice/components/DeviceControlDialog.vue
  12. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SmartDevice/index.vue
  13. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/WakeUpLightCurtainInfo/index.vue
  14. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/WeatherForecast/index.vue
  15. 13
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue
  16. 19
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js
  17. 31
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
  18. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Thumbnail/index.vue
  19. 3
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/dutyOfficer/components/ModifyDutyInformationTable.vue
  20. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue
  21. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue
  22. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js
  23. 14
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/index.vue
  24. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js
  25. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/TemperatureTrend/assets/charts.js
  26. 67
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/TemperatureTrend/index.vue
  27. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/visibilityTrends/assets/charts.js
  28. 66
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/visibilityTrends/index.vue
  29. 173
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/weaterData/index.vue
  30. 76
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/index.vue
  31. 28
      ruoyi-ui/src/views/JiHeExpressway/pages/service/board/index.vue
  32. 22
      ruoyi-ui/src/views/JiHeExpressway/pages/service/boardRecord/images/refresh.svg
  33. 186
      ruoyi-ui/src/views/JiHeExpressway/pages/service/boardRecord/index.vue

2
ruoyi-ui/src/assets/styles/JiHeExpressway.scss

@ -278,7 +278,7 @@
}
.el-picker-panel{
.today div a,.today div span{
.today div a,.today div span, .today a{
color: #ff0 !important;
font-weight: bold !important;
}

6
ruoyi-ui/src/common/menuData.js

@ -177,6 +177,12 @@ export default [
path: "/service/board",
component: "service/board/index.vue",
},
// {
// title: "情报板记录",
// name: "boardRecord",
// path: "/service/boardRecord",
// component: "service/boardRecord/index.vue",
// },
{
title: "情报板敏感词",
name: "sensitive",

6
ruoyi-ui/src/views/JiHeExpressway/components/Card1/index.vue

@ -1,4 +1,5 @@
<template>
<div @click="onClick">
<BorderRadiusImage
class="Card"
borderRadius="2px"
@ -27,6 +28,7 @@
<span class="text">正常</span>
</div> -->
</BorderRadiusImage>
</div>
</template>
<script>
@ -107,6 +109,10 @@ export default {
getValue(key) {
return pathGet(this.cardData, key) ?? "-";
},
onClick() {
this.$emit("click", this.data);
},
},
};
</script>

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Broadcast/components/BroadcastReleases.vue

@ -1,5 +1,5 @@
<template>
<Dialog v-model="modelVisible" title="广播发布" width="550px">
<Dialog v-model="modelVisible" title="广播发布" width="850px">
<div class="BroadcastReleases">
<div class="body">
<div class="left">

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Camera/components/CameraControlDialog.vue

@ -1,5 +1,5 @@
<template>
<Dialog v-model="modelVisible" title="相机控制" noneMask width="550px">
<Dialog v-model="modelVisible" title="相机控制" noneMask width="600px">
<div class="CameraControlDialog">
<div class="direction">
<div class="control-container top" @click="controlClick(21)">

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/CongestedRoadSections/index.vue

@ -1,5 +1,5 @@
<template>
<Dialog class="CongestedRoadSections" width="550px">
<Dialog class="CongestedRoadSections" width="600px">
<div class="video-presentations">
<div class="video-item"></div>
<div class="video-item"></div>

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue

@ -1,5 +1,5 @@
<template>
<Dialog v-model="modelVisible" title="设备操作" width="550px">
<Dialog v-model="modelVisible" title="设备操作" width="600px">
<div class="DeviceControlDialog">
<Form
v-model="formData"

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/GuardrailCollision/index.vue

@ -1,5 +1,5 @@
<template>
<Dialog v-model="obverseVisible" title="护栏碰撞弹窗" width="550px">
<Dialog v-model="obverseVisible" title="护栏碰撞弹窗" width="600px">
<Video class="video-stream" :pileNum="dialogData.stakeMark" />
<div class="GuardrailCollision">

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/HighwayDetails/index.vue

@ -1,5 +1,5 @@
<template>
<Dialog class="HighwayDetails" width="550px">
<Dialog class="HighwayDetails" width="600px">
<div class="video-presentations">
<div class="video-item"></div>
<div class="video-item"></div>

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Intermodulation/index.vue

@ -1,5 +1,5 @@
<template>
<Dialog v-model="obverseVisible" title="一类交调站弹窗" width="550px">
<Dialog v-model="obverseVisible" title="一类交调站弹窗" width="600px">
<Video class="video-stream" :pileNum="dialogData.stakeMark" />
<div class="Intermodulation">

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SmartDevice/components/DeviceControlDialog.vue

@ -1,5 +1,5 @@
<template>
<Dialog v-model="modelVisible" title="设备操作" width="550px">
<Dialog v-model="modelVisible" title="设备操作" width="600px">
<div class="DeviceControlDialog">
<DeviceParams :dialogData="dialogData" />
</div>

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SmartDevice/index.vue

@ -1,5 +1,5 @@
<template>
<Dialog v-model="obverseVisible" title="智能设备箱" width="550px">
<Dialog v-model="obverseVisible" title="智能设备箱" width="600px">
<Video class="video-stream" :pileNum="dialogData.stakeMark" />
<div class="SmartDevice">

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/WakeUpLightCurtainInfo/index.vue

@ -1,5 +1,5 @@
<template>
<Dialog class="WakeUpLightCurtainInfo" width="550px">
<Dialog class="WakeUpLightCurtainInfo" width="600px">
<div class="operation-btn">
<div class="photo-btn">图像</div>
<div class="video-btn">视频</div>

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/WeatherForecast/index.vue

@ -1,5 +1,5 @@
<template>
<Dialog class="WeatherForecast" width="550px"> s </Dialog>
<Dialog class="WeatherForecast" width="600px"> s </Dialog>
</template>
<script>

13
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue

@ -148,7 +148,7 @@ export default {
await Promise.allSettled((this.tabContentData || []).map(item => this.handleDeviceImmediate(item, true)))
Object.keys(lngLatMap).forEach(key => {
addInGraphHandle(lngLatMap[key]);
})
});
}
}
},
@ -227,15 +227,20 @@ export default {
const status = item.status;
console.log(item, "item");
if (!status) { this.nowSelected = item.title; this.nowSelectedCompleted = false; }
if (!status) { //
this.nowSelected = item.title;
this.nowSelectedCompleted = false;
}
else if (this.nowSelected === item.title && this.nowSelectedCompleted === false) return;
item.status = item.status ? "" : "_active";
console.log("%c [ key ]-102-「index.vue」", "font-size:15px; background:#9d63e9; color:#e1a7ff;", key);
if (!eventMap[`${key}${status ? "_close" : ""}`]) return this.$emit("onClickItem", item);
if (!eventMap[`${key}${status ? "_close" : ""}`]) {
this.emitter.emit("selectedCompleted", item);
return this.$emit("onClickItem", item);
}
console.log(`${key}${status ? "_close" : ""}`, this.filterData, isDefault)
await eventMap[`${key}${status ? "_close" : ""}`]?.call(this, item, this.filterData, isDefault, this.cb);

19
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js

@ -144,9 +144,11 @@ export const eventMap = {
loadingMessage?.close();
if (!data) return;
if (!data.length && !isDefault)
if (!data) return this.emitter.emit("selectedCompleted", item);
if (!data.length && !isDefault) {
this.emitter.emit("selectedCompleted", item);
return Message.warning(`未查询到${item.title}设备!`);
}
eventMap[`地图路测设备/map_close`](item);
const cbCall = () =>
@ -200,10 +202,12 @@ export const eventMap = {
loadingMessage?.close();
if (!data) return;
if (!data) return this.emitter.emit("selectedCompleted", item);
if (!data.length && !isDefault)
if (!data.length && !isDefault) {
this.emitter.emit("selectedCompleted", item);
return Message.warning(`没有${item.title}事件数据!`);
}
eventMap[`地图事件专题/map_close`](item);
const cbCall = () => cb?.(item, { deviceType: `事件专题_${deviceType}` });
@ -257,10 +261,12 @@ export const eventMap = {
.catch(() => {});
loadingMessage?.close();
if (!data) return;
if (!data) return this.emitter.emit("selectedCompleted", item);
if (!data?.length && !isDefault)
if (!data?.length && !isDefault) {
this.emitter.emit("selectedCompleted", item);
return Message.warning(`没有${item.title}数据!`);
}
eventMap[`事件专题/感知事件_close`](item);
const cbCall = () => cb?.(item, { deviceType: `感知事件_${warningState}` });
@ -338,4 +344,5 @@ function removeDataPreHandle(markers) {
}
};
lngLatMapHandle(markers, cb);
window.renderData?.(window.page); //移除后,重新渲染弹出框更新数据
}

31
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js

@ -2,7 +2,7 @@ import { loadAMap } from "@screen/pages/Home/components/AMapContainer/loadAMap.j
// import { Message } from "element-ui";
import Vue from "vue";
import { lngLatMap } from "./buttonEvent";
import { upperFirst } from "lodash";
import { upperFirst, filter } from "lodash";
/**
* @typedef {Object} Point
* @property {number} weight - The weight of the item.
@ -27,6 +27,7 @@ const normalBg = require(`@screen/images/mapBg/active.svg`);
const faultTitleBg = require(`@screen/images/mapBg/fault_title.svg`);
const normalTitleBg = require(`@screen/images/mapBg/active_title.svg`);
const eventRegex = "./事件专题";
/**
* 聚合点
*/
@ -126,6 +127,12 @@ export class MarkerCluster {
const startIndex = (page - 1) * pageSize;
const endIndex = startIndex + pageSize;
let num = (page - 1) * pageSize;
if (data.length === 0 || data.length === 1) {
return this.infoWindow.close();
}
const { latitude: lat, longitude: lng } = data[0].extData;
const lngLatStr = `${parseFloat(lng)}/${parseFloat(lat)}`; //更新清除节点后的数据
data = lngLatMap[lngLatStr];
// 截取当前页的数据
const currentPageData = data.slice(startIndex, endIndex);
window.currentPageData = currentPageData;
@ -145,7 +152,7 @@ export class MarkerCluster {
.join("");
// 渲染当前页数据
dataContainer.innerHTML = itemsTpl;
dataPage.innerHTML = `${page}`;
dataPage && (dataPage.innerHTML = `${page}`);
bindItemClick();
}
@ -195,7 +202,7 @@ export class MarkerCluster {
</div>`);
window.infoWindow = this.infoWindow;
this.infoWindow.open(map, currentPageData[0].lnglat);
window.openInfoWindow = true;
this.infoWindow.dom.querySelector(".info-close").onclick = () =>
this.infoWindow.close();
@ -230,11 +237,22 @@ export class MarkerCluster {
let hasClick = false;
const reset = () => {
if (!window.openInfoWindow) {
// console.log(window.openInfoWindow, "rest");
this.infoWindow?.close?.();
}
};
map.on("zoomstart", reset);
map.on("mapmove", reset);
map.on("moveend", async () => {
if (window.openInfoWindow) {
console.log("窗口位移结束");
window.openInfoWindow = false;
await new Promise((resolve) => setTimeout(resolve, 840));
window.infoWindow?.open?.();
}
});
const markerCluster = new AMap.MarkerCluster(map, [], {
// gridSize: 15,
@ -483,9 +501,9 @@ export function marksAddInGraph(data) {
export function addInGraphHandle(data) {
const graphInstance = window.graphInstance;
const extData = data[0].extData;
console.log(extData, "extData");
// console.log(extData, "extData11111");
const { item: eventItem } = data[0].config;
if (eventItem.id.match("./事件专题")) {
if (eventItem.id.match(eventRegex)) {
let { stakeMark, lang, direction } = extData;
stakeMark = upperFirst(stakeMark); //统一格式 大写K
const distance =
@ -515,11 +533,12 @@ export function addInGraphHandle(data) {
});
// }, 0);
}
console.log(lang, "lang");
// console.log(lang, "lang");
}
}
function getDataConf(data, extData) {
data = data.filter((item) => item.config.item.id.match(eventRegex));
let dataConf;
const nowBg = getState(data) ? normalBg : faultBg;
if (data.length === 1) {

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Thumbnail/index.vue

@ -13,7 +13,7 @@ import { actualLocationList, canvasList } from "./data.js";
const mouseenterDebounceFunc = debounce(({ node }) => {
if (["custom-html"].indexOf(node.shape) >= 0) {
node.setZIndex(100);
console.log(node);
// console.log(node);
}
}, 0);
const mouseleaveDebounceFunc = debounce(({ node }) => {

3
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/dutyOfficer/components/ModifyDutyInformationTable.vue

@ -394,7 +394,8 @@ export default {
<style lang="scss" scoped>
.ModifyDutyInformationTable {
width: 947px;
height: 658px;
// height: 658px;
height: 570px;
color: #fff;
display: flex;
flex-direction: column;

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue

@ -1,5 +1,5 @@
<template>
<Dialog v-model="modelVisible" title="事件详情" width="880px" top="15%">
<Dialog v-model="modelVisible" title="事件详情" width="890px" top="15%">
<div
class="EventDetail"
:style="{

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue

@ -231,7 +231,7 @@ export default {
if (this.activeName == '-1') {
url = '/business/warning/export'
} else {
url = '/dc/system/event/export';
url = '/dc/system/event/export?eventState=' + this.searchData.eventState;
}
let loadingInstance = Loading.service({
fullscreen: true,

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js

@ -49,7 +49,7 @@ let options = {
},
},
axisLabel: {
interval: 0,
interval: 1,
align: "center",
rotate: "1",
margin: "20",

14
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/index.vue

@ -104,6 +104,7 @@
:current-page.sync="pageIndex"
layout="total, sizes, prev, pager, next"
:total="pageTotal"
@size-change="handleSizeChange"
>
</Pagination>
</div>
@ -153,7 +154,7 @@ export default {
typeQuery: "", //
pageTotal: 0,
pageIndex: 1,
pageSize: 10,
pageSize: 30,
searchFormList,
equipSeries: [
"高清网络球形摄像机",
@ -183,6 +184,10 @@ export default {
clearInterval(this.interval);
},
methods: {
handleSizeChange(size){
this.pageSize = size;
this.initData();
},
initData() {
this.startTime = moment().startOf("month").format("YYYY-MM-DD HH:mm:ss");
this.time = moment().format("YYYY-MM-DD HH:mm:ss");
@ -379,24 +384,23 @@ export default {
});
},
//
initQueryTable(pageIndex, pageSize = 30) {
initQueryTable(pageIndex) {
this.setStatus("02", "doing");
getSystemStatusTabList({
startTime: this.startTime,
time: this.time,
type: this.typeQuery,
pageNum: pageIndex,
pageSize: pageSize,
pageSize: this.pageSize,
}).then((res) => {
if (res.code == 200) {
// if (res.rows && res.rows.length > 0) {
this.setStatus("02", "finish");
this.pageIndex = pageIndex;
this.pageSize = pageSize;
this.pageTotal = res.total;
this.tableData = res.rows;
this.tableData.forEach((it, index) => {
it.order = (pageIndex - 1) * pageSize + index + 1;
it.order = (pageIndex - 1) * this.pageSize + index + 1;
});
// } else {
// this.setStatus("02", "empty");

2
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js

@ -58,7 +58,7 @@ var options = {
grid: {
top: "15%", //上边距
right: "0", //右边距
left: "15px", //左边距
left: "30px", //左边距
bottom: "0%", //下边距
containLabel: true,
},

5
ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/TemperatureTrend/assets/charts.js

@ -108,10 +108,7 @@ var options = {
showSymbol: false,
smooth: true, // 是否曲线
name: "实时数据", // 图例对应类别
data: [
12, 12, 23, 23, 30, 12, 26, 28, 31, 23, 25, 12, 18, 18, 18, 18, 23, 21,
20, 20, 20, 20, 20, 22, 22, 12, 12, 12,
], // 纵坐标数据
data: [], // 纵坐标数据
lineStyle: {
color: "#FFD15C",
},

67
ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/TemperatureTrend/index.vue

@ -1,5 +1,5 @@
<template>
<div class='congestion'>
<div class="congestion">
<WgtTitle :title="'气温变化趋势'"></WgtTitle>
<div class="board">
<div class="charts" id="temperatureTrend"></div>
@ -8,24 +8,44 @@
</template>
<script>
import WgtTitle from '../../../../../widgets/title'
import WgtTitle from "../../../../../widgets/title";
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import temperatureCharts from "./assets/charts";
import {
getListLatest,
getDeviceNameListLatest,
getIdDevices,
} from "@/api/perception/meteorologyCheck";
export default {
name: 'temperatureTrend',
name: "temperatureTrend",
components: {
WgtTitle
WgtTitle,
},
props: {
data: {
type: Array,
},
},
watch: {
data: {
handler(data) {
let newData = [];
data.forEach((item) => {
newData.push(item.avgVisibility);
});
temperatureCharts.series[0].data = newData;
this.myChart.setOption(temperatureCharts);
},
deep: true,
},
},
data() {
return {
myChart: null,
}
};
},
created() {
},
created() {},
methods: {
reiszeChart() {
this.$nextTick(() => {
@ -33,25 +53,26 @@
this.myChart.resize();
}
});
}
},
update(){
},
update() {},
mounted() {
setTimeout(() => {
this.$nextTick(() => {
this.myChart = echarts.init(document.getElementById('temperatureTrend'));
this.myChart.setOption(chartsStatistics);
this.myChart = echarts.init(
document.getElementById("temperatureTrend")
);
this.myChart.setOption(temperatureCharts);
});
});
},
}
};
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.congestion {
display: flex; flex-direction: column;
display: flex;
flex-direction: column;
.board {
flex: 1;
padding: 0px 20px;
@ -59,17 +80,19 @@
border-radius: 5px 5px 5px 5px;
opacity: 1;
border: 1px solid;
border-image: linear-gradient(360deg, rgba(55, 231, 255,0.3), rgba(55, 231, 255, 0)) 1 1;
border-image: linear-gradient(
360deg,
rgba(55, 231, 255, 0.3),
rgba(55, 231, 255, 0)
)
1 1;
display: flex;
justify-content: space-between;
align-items: center;
}
}
.charts {
height: 200px;
width: 100%;
}
</style>

5
ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/visibilityTrends/assets/charts.js

@ -107,10 +107,7 @@ var options = {
showSymbol: false,
smooth: true, // 是否曲线
name: "实时数据", // 图例对应类别
data: [
12, 12, 23, 23, 30, 12, 26, 28, 31, 23, 25, 12, 18, 18, 18, 18, 23, 21,
20, 20, 20, 20, 20, 22, 22, 12, 12, 12,
], // 纵坐标数据
data: [], // 纵坐标数据
lineStyle: {
color: "#0783FA",
},

66
ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/visibilityTrends/index.vue

@ -1,5 +1,5 @@
<template>
<div class='congestion'>
<div class="congestion">
<WgtTitle :title="'能见度变化趋势'"></WgtTitle>
<div class="board">
<div class="charts" id="VisibilityTrends"></div>
@ -8,51 +8,67 @@
</template>
<script>
import WgtTitle from '../../../../../widgets/title'
import WgtTitle from "../../../../../widgets/title";
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import visibilityCharts from "./assets/charts";
export default {
name: 'VisibilityTrends',
name: "VisibilityTrends",
components: {
WgtTitle
WgtTitle,
},
props: {
data: {
type: Array,
},
},
watch: {
data: {
handler(data) {
let newData = [];
data.forEach((item) => {
newData.push(item.avgTemperature);
});
visibilityCharts.series[0].data = newData;
this.myChart.setOption(visibilityCharts);
},
deep: true,
},
},
data() {
return {
myChart: null,
}
};
},
created() {
},
created() {},
methods: {
reiszeChart() {
this.$nextTick(() => {
if (this.myChart) {
this.myChart.resize();
}
});
}
},
update(){
},
update() {},
mounted() {
setTimeout(() => {
this.$nextTick(() => {
this.myChart = echarts.init(document.getElementById('VisibilityTrends'));
this.myChart.setOption(chartsStatistics);
this.myChart = echarts.init(
document.getElementById("VisibilityTrends")
);
this.myChart.setOption(visibilityCharts);
});
});
},
}
};
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.congestion {
display: flex; flex-direction: column; align-items: stretch;
display: flex;
flex-direction: column;
align-items: stretch;
.board {
flex: 1;
padding: 0px 20px;
@ -60,8 +76,14 @@
border-radius: 5px 5px 5px 5px;
opacity: 1;
border: 1px solid;
border-image: linear-gradient(360deg, rgba(55, 231, 255,0.3), rgba(55, 231, 255, 0)) 1 1;
display: flex; flex-direction: column;
border-image: linear-gradient(
360deg,
rgba(55, 231, 255, 0.3),
rgba(55, 231, 255, 0)
)
1 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: stretch;
}
@ -69,6 +91,4 @@
.charts {
height: 200px;
}
</style>

173
ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/weaterData/index.vue

@ -1,11 +1,67 @@
<template>
<div class='congestion'>
<div class="congestion">
<WgtTitle :title="'气象监测数据'"></WgtTitle>
<div class="board">
<div class="showRoad">
<div :class="it.type?it.type+' item':'item'" v-for="(it,index) in dataList" >
<span class="label" >{{ it.text }}</span>
<span class="text" >{{ it.value }}</span>
<div class="item">
<span class="label">温度</span>
<span class="text">{{
data.temperature ? data.temperature + "℃" : "-"
}}</span>
</div>
<div class="item">
<span class="label">湿度</span>
<span class="text">{{
data.humidity ? data.humidity + "mm" : "-"
}}</span>
</div>
<div class="item">
<span class="label">风向</span>
<span class="text">{{
data.windDirection ? data.windDirection + "°" : "-"
}}</span>
</div>
<div class="item">
<span class="label">风速</span>
<span class="text">{{
data.windSpeed ? data.windSpeed + "级" : "-"
}}</span>
</div>
<div class="item">
<span class="label">能见度</span>
<span class="text">{{
data.visibilityType ? data.visibilityType + "级" : "-"
}}</span>
</div>
<!-- <div class="item">
<span class="label">能见度类型</span>
<span class="text">{{ data.visibilityType }}</span>
</div> -->
<!-- <div class="item">
<span class="label">降雨类型</span>
<span class="text">{{
data.recipitationType ? data.recipitationType : "-"
}}</span>
</div> -->
<div class="item">
<span class="label">降雨量</span>
<span class="text">{{
data.rainfall ? data.rainfall + "mm" : "-"
}}</span>
</div>
<div class="item">
<span class="label">路面温度</span>
<span class="text">{{
data.remoteRoadSurfaceTemperature
? data.remoteRoadSurfaceTemperature + "℃"
: "-"
}}</span>
</div>
<div class="item">
<span class="label"> 气压</span>
<span class="text">{{
data.atmosphericPressure ? data.atmosphericPressure + "Pa" : "-"
}}</span>
</div>
</div>
</div>
@ -13,94 +69,47 @@
</template>
<script>
import WgtTitle from '../../../../../widgets/title'
import WgtTitle from "../../../../../widgets/title";
export default {
name: 'MonthStatistics',
name: "MonthStatistics",
components: {
WgtTitle
WgtTitle,
},
data() {
return {
myChart:null,
dataList:[
{
text:"天气状态:",
value:"无降水",
class:"km"
props: {
data: {
type: Object,
default: () => {},
},
{
text:"风速:",
value:"55m/s",
class:"km"
},
{
text:"天气温度:",
value:"23°C",
class:"km"
watch: {
data: {
handler(newVal) {
console.log(newVal);
},
{
text:"风向:",
value:"东南风",
class:"km"
},
{
text:"路面温度:",
value:"23°C",
class:"km"
}, {
text:"风级:",
value:"2级",
class:"km"
}, {
text:"空气湿度:",
value:"79.40%",
class:"km"
}, {
text:"道路危险等级:",
value:"0级",
class:"km"
}, {
text:"能见度:",
value:"2610.00m",
class:"km"
}, {
text:"能见度:",
value:"0.00m",
class:"km"
}, {
text:"能见度:",
value:"0.00m",
class:"km"
}, {
text:"能见度:",
value:"0.00m",
class:"km"
}
]
}
deep: true,
},
created() {
},
methods: {
data() {
return {
myChart: null,
dataList: [],
};
},
created() {},
methods: {},
mounted() {
setTimeout(() => {
this.$nextTick(() => {
});
this.$nextTick(() => {});
});
},
}
};
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.congestion {
width: 100%; display: flex;
width: 100%;
display: flex;
.board {
flex: 1;
width: 100%;
@ -109,7 +118,12 @@
border-radius: 5px 5px 5px 5px;
opacity: 1;
border: 1px solid;
border-image: linear-gradient(360deg, rgba(55, 231, 255,0.3), rgba(55, 231, 255, 0)) 1 1;
border-image: linear-gradient(
360deg,
rgba(55, 231, 255, 0.3),
rgba(55, 231, 255, 0)
)
1 1;
display: flex;
justify-content: space-between;
align-items: center;
@ -133,24 +147,21 @@
font-size: 12px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #00B3CC;
color: #00b3cc;
}
> span.text {
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #FFFFFF;
color: #ffffff;
}
}
}
}
}
.charts {
height: 180px;
width: 100%;
}
</style>

76
ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/index.vue

@ -8,18 +8,34 @@
:hasBtn="false"
:gap="'10px'"
:key="index"
@click="handleClick(item)"
>
<!-- <template #form-start="{ data }">
<template #form-direction="{ data }">
<div class="endSpecial">
{{ data.start }} <img src="./assets/weater.png" />
{{
data.direction == 1
? "菏泽方向"
: data.direction == 2
? "双向"
: "济南方向"
}}
</div>
</template> -->
</template>
<template #form-deviceState="{ data }">
<div class="endSpecial">
{{ data.deviceState == 1 ? "在线" : "离线" }}
</div>
</template>
</Card>
</div>
<div class="queryCharts">
<WeateData class="charts-l" />
<TemperatureTrend ref="temper" class="charts-ms" />
<VisibilityTrends ref="visibility" class="charts-ms" />
<WeateData class="charts-l" :data="dataItem" />
<TemperatureTrend ref="temper" class="charts-ms" :data="weatherData" />
<VisibilityTrends
ref="visibility"
class="charts-ms"
:data="weatherData"
/>
</div>
</div>
</template>
@ -48,34 +64,37 @@ export default {
keyMap: [
{
label: "设备名称",
key: "name",
key: "deviceName",
},
{
label: "设备位置",
key: "name",
key: "stakeMark",
},
{
label: "所属方向",
key: "rote",
key: "direction",
},
{
label: "采集时间",
key: "time",
key: "createTime",
},
{
label: "气象状态",
key: "start",
label: "设备状态",
key: "deviceState",
},
],
deviceName: "",
selectIndex: 0,
dataList: [],
// data: Array.from({ length: 10 }).map(() => ({
// name: "1",
// rote: "",
// arrdeass: "K59+256",
// time: "2024.01.04 13:00:00",
// start: "",
// })),
dataItem: {},
weatherData: [],
data: Array.from({ length: 10 }).map(() => ({
name: "气象监测器1",
rote: "济南方向",
arrdeass: "K59+256",
time: "2024.01.04 13:00:00",
start: "晴转多云",
})),
};
},
@ -85,15 +104,27 @@ export default {
this.selectIndex = index;
},
resizeChart() {
// console.log(this.$refs.temper);
this.$refs.temper.reiszeChart();
this.$refs.visibility.reiszeChart();
},
getList() {
getListLatest().then((res) => {
console.log("_____________", res);
this.dataList = res.rows;
this.dataItem = res.rows[0];
this.deviceName = res.rows[0].deviceName;
this.getWeather();
});
},
getWeather() {
getDeviceNameListLatest(this.deviceName).then((res) => {
this.weatherData = res.rows;
});
},
handleClick(item) {
this.dataItem = item;
this.deviceName = item.deviceName;
this.getWeather();
},
},
mounted() {
this.getList();
@ -104,7 +135,7 @@ export default {
<style lang="scss" scoped>
.endSpecial {
position: relative;
top: -10px;
// top: -10px;
> img {
display: inline-flex;
@ -147,6 +178,7 @@ export default {
height: 203px;
margin-top: 10px;
margin-left: 20px;
cursor: pointer;
}
> div:nth-child(5n + 1) {

28
ruoyi-ui/src/views/JiHeExpressway/pages/service/board/index.vue

@ -123,9 +123,9 @@
</div>
</div> -->
<div class="partCon">
<!-- {{ selectedBdMsg }} -->
<vuescroll :ops="scrollOptions" class="templateBox" v-if="selectedBdMsg.length > 0"
:class="{ hide: isHideCtt }">
<draggable tag="div" :list="selectedBdMsg" @end="____onDragend" ghostClass="ghost_class" dragClass="drag_class" chosenClass="chosen_class">
<div v-for="(itm, indx) in selectedBdMsg" :key="indx" class="tplItem">
<!-- 模板内容 -->
<BoardPreview class="boardPreview" :boardWH="selectedSize" :tpl="itm"></BoardPreview>
@ -139,6 +139,7 @@
</el-tooltip>
</div>
</div>
</draggable>
</vuescroll>
<Empty v-else text="请从设备回读或从模板添加信息..." style="padding-top: 100px"></Empty>
</div>
@ -216,6 +217,7 @@
</div>
</template>
<script>
import draggable from "vuedraggable";
import Sortable from "sortablejs";
import editInfo from "./editInfo";
import {
@ -247,6 +249,7 @@ export default {
name: "Device",
mixins: [InfoBoard],
components: {
draggable,
WgtTitle,
BoardInfoEditor,
editInfo,
@ -545,6 +548,9 @@ export default {
tpl,
};
},
____onDragend(evt){
// console.log(evt, this.selectedBdMsg , "+++=======")
},
____onEditBoardItem(tpl, index) {
// type : board template
// mode : edit add toDevice toTemplate
@ -1043,7 +1049,7 @@ export default {
padding-bottom: 10px;
.boardPreview {
border: 2px solid #004c64;
border: 2px solid #004c64; background-color: #133242;
// width: 560px;
// height:80px;
flex: 1;
@ -1055,7 +1061,7 @@ export default {
display: flex;
margin-left: 10px;
/* // border: solid 1px #05afe3; */
border: 2px solid #004c64;
border: 2px solid #004c64; background-color: #133242;
display: flex;
justify-content: space-around;
align-items: center;
@ -1100,6 +1106,22 @@ export default {
}
}
.tplItem.ghost_class {
.boardPreview, .infoBtnBox{
border-color:#F00;
}
}
.tplItem.chosen_class {
.boardPreview, .infoBtnBox{
border-color:#0A0;
}
}
.tplItem.drag_class {
.boardPreview, .infoBtnBox{
border-color:#FF0;
}
}
.el-collapse {
max-height: 100% !important;
overflow: auto;

22
ruoyi-ui/src/views/JiHeExpressway/pages/service/boardRecord/images/refresh.svg

@ -0,0 +1,22 @@
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Group 1142814398">
<g id="Group 1142814396">
<path id="Rectangle 1304" d="M1.0437 2.41495L4.5636 2.01738L4.91112 6.00562" stroke="white" stroke-linecap="round"/>
<g id="Ellipse 835">
<mask id="path-2-inside-1_290_77" fill="white">
<path d="M4.29579 2.52494C4.09359 2.27296 3.71712 2.25216 3.51748 2.50144C2.86315 3.31847 2.39514 4.30903 2.15904 5.38649C1.87758 6.67096 1.93836 8.02122 2.3337 9.26652C2.72904 10.5118 3.44118 11.5962 4.38007 12.3826C5.16561 13.0406 6.08036 13.4652 7.0411 13.6229C7.35243 13.674 7.61901 13.4293 7.63212 13.1145C7.64523 12.7997 7.39954 12.5346 7.08935 12.4765C6.32757 12.3339 5.60349 11.9884 4.97813 11.4646C4.19938 10.8124 3.6087 9.91289 3.28078 8.87998C2.95287 7.84706 2.90245 6.72709 3.13591 5.66169C3.33404 4.75752 3.72906 3.92712 4.28182 3.24492C4.4503 3.03698 4.46523 2.7361 4.29579 2.52494Z"/>
</mask>
<path d="M4.29579 2.52494C4.09359 2.27296 3.71712 2.25216 3.51748 2.50144C2.86315 3.31847 2.39514 4.30903 2.15904 5.38649C1.87758 6.67096 1.93836 8.02122 2.3337 9.26652C2.72904 10.5118 3.44118 11.5962 4.38007 12.3826C5.16561 13.0406 6.08036 13.4652 7.0411 13.6229C7.35243 13.674 7.61901 13.4293 7.63212 13.1145C7.64523 12.7997 7.39954 12.5346 7.08935 12.4765C6.32757 12.3339 5.60349 11.9884 4.97813 11.4646C4.19938 10.8124 3.6087 9.91289 3.28078 8.87998C2.95287 7.84706 2.90245 6.72709 3.13591 5.66169C3.33404 4.75752 3.72906 3.92712 4.28182 3.24492C4.4503 3.03698 4.46523 2.7361 4.29579 2.52494Z" stroke="white" stroke-width="2" mask="url(#path-2-inside-1_290_77)"/>
</g>
</g>
<g id="Group 1142814397">
<path id="Rectangle 1304_2" d="M15.0437 11.585L11.5238 11.9826L11.1763 7.99438" stroke="white" stroke-linecap="round"/>
<g id="Ellipse 835_2">
<mask id="path-4-inside-2_290_77" fill="white">
<path d="M11.7916 11.4751C11.9938 11.727 12.3703 11.7478 12.5699 11.4986C13.2242 10.6815 13.6923 9.69097 13.9284 8.61351C14.2098 7.32904 14.149 5.97878 13.7537 4.73348C13.3584 3.48817 12.6462 2.40376 11.7073 1.61737C10.9218 0.95942 10.007 0.534814 9.0463 0.377109C8.73497 0.326006 8.46839 0.570722 8.45528 0.885536C8.44218 1.20035 8.68786 1.46544 8.99805 1.5235C9.75983 1.6661 10.4839 2.01159 11.1093 2.53538C11.888 3.18765 12.4787 4.08711 12.8066 5.12002C13.1345 6.15294 13.1849 7.27291 12.9515 8.33831C12.7534 9.24248 12.3583 10.0729 11.8056 10.7551C11.6371 10.963 11.6222 11.2639 11.7916 11.4751Z"/>
</mask>
<path d="M11.7916 11.4751C11.9938 11.727 12.3703 11.7478 12.5699 11.4986C13.2242 10.6815 13.6923 9.69097 13.9284 8.61351C14.2098 7.32904 14.149 5.97878 13.7537 4.73348C13.3584 3.48817 12.6462 2.40376 11.7073 1.61737C10.9218 0.95942 10.007 0.534814 9.0463 0.377109C8.73497 0.326006 8.46839 0.570722 8.45528 0.885536C8.44218 1.20035 8.68786 1.46544 8.99805 1.5235C9.75983 1.6661 10.4839 2.01159 11.1093 2.53538C11.888 3.18765 12.4787 4.08711 12.8066 5.12002C13.1345 6.15294 13.1849 7.27291 12.9515 8.33831C12.7534 9.24248 12.3583 10.0729 11.8056 10.7551C11.6371 10.963 11.6222 11.2639 11.7916 11.4751Z" stroke="white" stroke-width="2" mask="url(#path-4-inside-2_290_77)"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

186
ruoyi-ui/src/views/JiHeExpressway/pages/service/boardRecord/index.vue

@ -0,0 +1,186 @@
<template>
<div class='board_record'>
<!-- 搜索栏 -->
<div class="filter">
<div>
<ButtonGradient @click="onRefresh" class="refresh-btn">
<template #prefix>
<img src="./images/refresh.svg" />
</template>
刷新
</ButtonGradient>
<!-- <ButtonGradient>
<template #prefix>
<img src="@screen/images/insert.svg" />
</template>
新增
</ButtonGradient> -->
</div>
</div>
<!-- 内容 -->
<div class="body">
<Table :data="tableData">
<ElTableColumn label="序号" width="60" />
<ElTableColumn label="发布设备" width="60" />
<ElTableColumn label="屏幕尺寸" width="60" />
<ElTableColumn label="设备方向" width="60" />
<ElTableColumn label="设备桩号" width="60" />
<ElTableColumn prop="eventName" label="发布内容" width="240" />
<ElTableColumn prop="eventName" label="发布事件" width="240" />
<ElTableColumn prop="eventName" label="发布状态" width="240" />
<ElTableColumn prop="eventName" label="发布用户" width="240" />
<ElTableColumn label="操作" width="210">
<template slot-scope="scope">
<ElButton type="text" style="color: #00D1FF;" @click="showDisposal(scope.row.eventType)">流程配置</ElButton>
<ElButton type="text" style="color: #00EBC1;" @click="showPhrases(scope.row)">常用语</ElButton>
</template>
</ElTableColumn>
</Table>
</div>
<!-- 分页 -->
<div class="footer">
<Pagination @current-change="initData" @size-change="onSizeChange" width="'100%'" :page-sizes="[10, 20, 30, 40, 50]"
:page-size="searchData.pageSize" :current-page.sync="searchData.pageNum" layout="total, sizes, prev, pager, next"
:total="total">
</Pagination>
</div>
</div>
</template>
<script>
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
import Pagination from '@screen/components/Pagination.vue';
import Table from '@screen/components/Table.vue';
import request from "@/utils/request";
export default {
name: 'boardRecord',
components: {
ButtonGradient,
Pagination,
Table
},
data() {
return {
tableData: [],
isShowPhrases: false,
isShowDisposal: false,
total: 20,
eventType: 1,
searchData: {
pageSize: 20,
pageNum: 1,
},
phrasesData: [],
process: []
}
},
created() {
this.initData();
},
methods: {
initData() {
request({
url: `/business/dcEventType/list`,
method: "get",
params: this.searchData,
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
this.tableData = result.rows;
this.total = result.total;
});
},
onRefresh() {
this.tableData = [];
setTimeout(() => {
this.initData();
}, 100);
},
onSizeChange(pageSize) {
this.searchData.pageSize = pageSize;
this.getData();
},
showPhrases(data) {
if (data?.processConfigList.length <= 0) {
Message.warning('请先配置流程!');
return;
}
let process = []
data.processConfigList.forEach(it => {
process.push({
id: it.id,
commonPhrases: it.commonPhrases,
label: it.processNode,
isActive: false,
})
})
this.process = process;
this.isShowPhrases = true;
this.eventType = data.eventType;
},
showDisposal(eventType) {
this.isShowDisposal = true;
this.eventType = eventType;
},
onClosePhrases() {
this.isShowPhrases = false
},
onCloseDisposal() {
this.isShowDisposal = false;
},
onUpdatePhrasesData(phrasesData) {
this.phrasesData = phrasesData;
}
}
}
</script>
<style lang='scss' scoped>
.board_record {
padding: 21px;
height: 100%;
display: flex;
flex-direction: column;
z-index: 6;
width: 100%;
height: 100%;
.filter {
height: 60px;
display: flex;
justify-content: space-between;
align-items: center;
>div {
display: flex;
gap: 6px;
}
}
.body {
flex: 1;
position: relative;
overflow: hidden;
.content {
position: absolute;
width: 100%;
height: 100%;
overflow: auto;
}
}
.footer {
margin-top: 15px;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
}
}
</style>
Loading…
Cancel
Save