Browse Source

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

wangqin
zhoule 11 months ago
parent
commit
6adc4c70b9
  1. 2
      ruoyi-ui/src/assets/styles/JiHeExpressway.scss
  2. 6
      ruoyi-ui/src/common/menuData.js
  3. 56
      ruoyi-ui/src/views/JiHeExpressway/components/Card1/index.vue
  4. 14
      ruoyi-ui/src/views/JiHeExpressway/components/Video/videoStream.js
  5. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Broadcast/components/BroadcastReleases.vue
  6. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Camera/components/CameraControlDialog.vue
  7. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/CongestedRoadSections/index.vue
  8. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue
  9. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/GuardrailCollision/index.vue
  10. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/HighwayDetails/index.vue
  11. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Intermodulation/index.vue
  12. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SmartDevice/components/DeviceControlDialog.vue
  13. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SmartDevice/index.vue
  14. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/WakeUpLightCurtainInfo/index.vue
  15. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/WeatherForecast/index.vue
  16. 10
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue
  17. 19
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js
  18. 25
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
  19. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Thumbnail/index.vue
  20. 34
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/dutyOfficer/components/ModifyDutyInformationTable.vue
  21. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue
  22. 21
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js
  23. 47
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts2.js
  24. 11
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts3.js
  25. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/index.vue
  26. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/chargeableOperations/components/daylyAnalysis/assets/charts.js
  27. 14
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/index.vue
  28. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js
  29. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/TemperatureTrend/assets/charts.js
  30. 157
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/TemperatureTrend/index.vue
  31. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/visibilityTrends/assets/charts.js
  32. 152
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/visibilityTrends/index.vue
  33. 297
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/weaterData/index.vue
  34. 64
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/index.vue
  35. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/service/PublishingChannelManagement/index.vue
  36. 52
      ruoyi-ui/src/views/JiHeExpressway/pages/service/board/index.vue
  37. 22
      ruoyi-ui/src/views/JiHeExpressway/pages/service/boardRecord/images/refresh.svg
  38. 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{ .el-picker-panel{
.today div a,.today div span{ .today div a,.today div span, .today a{
color: #ff0 !important; color: #ff0 !important;
font-weight: bold !important; font-weight: bold !important;
} }

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

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

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

@ -1,32 +1,34 @@
<template> <template>
<BorderRadiusImage <div @click="onClick">
class="Card" <BorderRadiusImage
borderRadius="2px" class="Card"
borderColor="linear-gradient(360deg, rgba(55, 231, 255, 0.3), rgba(55, 231, 255, 0))" borderRadius="2px"
borderWidth="2px" borderColor="linear-gradient(360deg, rgba(55, 231, 255, 0.3), rgba(55, 231, 255, 0))"
> borderWidth="2px"
<div class="info" :style="{ gap }"> >
<p v-for="(item, index) in keyMap" :key="index"> <div class="info" :style="{ gap }">
<span>{{ item.label }}: </span> <p v-for="(item, index) in keyMap" :key="index">
<span> <span>{{ item.label }}: </span>
<slot :name="`form-${item.key}`" :data="cardData"> <span>
{{ getValue(item.key) }}{{ item.suffix }} <slot :name="`form-${item.key}`" :data="cardData">
</slot> {{ getValue(item.key) }}{{ item.suffix }}
</span> </slot>
</p> </span>
</div> </p>
</div>
<div class="bottom" v-if="hasBtn"> <div class="bottom" v-if="hasBtn">
<slot name="button"> <slot name="button">
<Button> <Button>
{{ buttonText }} {{ buttonText }}
</Button> </Button>
</slot> </slot>
</div> </div>
<!-- <div class="status" :style="{ background: 'linear-gradient(123deg, #00B3CC 0%, rgba(0, 179, 204, 0) 100%)' }"> <!-- <div class="status" :style="{ background: 'linear-gradient(123deg, #00B3CC 0%, rgba(0, 179, 204, 0) 100%)' }">
<span class="text">正常</span> <span class="text">正常</span>
</div> --> </div> -->
</BorderRadiusImage> </BorderRadiusImage>
</div>
</template> </template>
<script> <script>
@ -107,6 +109,10 @@ export default {
getValue(key) { getValue(key) {
return pathGet(this.cardData, key) ?? "-"; return pathGet(this.cardData, key) ?? "-";
}, },
onClick() {
this.$emit("click", this.data);
},
}, },
}; };
</script> </script>

14
ruoyi-ui/src/views/JiHeExpressway/components/Video/videoStream.js

@ -8,6 +8,11 @@ import {
getNearCameraNew, getNearCameraNew,
} from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"; } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js";
const ErrorTypesCn = {
NetworkError: "网络错误",
MediaError: "媒体错误",
OtherError: "其他错误",
};
/** /**
* flv 视频测试 * flv 视频测试
* https://bilibili.github.io/flv.js/demo/ * https://bilibili.github.io/flv.js/demo/
@ -96,7 +101,10 @@ async function getUrl({ camId, url, pileNum, rangeIndex } = {}) {
url = data.liveUrl; url = data.liveUrl;
} }
if (!url) return Promise.reject("获取 url 失败!"); if (!url) {
Message.warning("未获取到当前相机的播放地址");
return Promise.reject("获取 url 失败!");
}
return url; return url;
} }
@ -187,7 +195,9 @@ export class HttpLivePlayer {
console.log("errorType", errorType); console.log("errorType", errorType);
console.log("errorDetail", errorDetail); console.log("errorDetail", errorDetail);
console.log("errorInfo", errorInfo); console.log("errorInfo", errorInfo);
Message.warning(
`视频流加载失败, ${ErrorTypesCn[errorType] || "其他错误"}`
);
this.initLiveVideo(); this.initLiveVideo();
}); });

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

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

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

@ -1,5 +1,5 @@
<template> <template>
<Dialog v-model="modelVisible" title="相机控制" noneMask width="550px"> <Dialog v-model="modelVisible" title="相机控制" noneMask width="600px">
<div class="CameraControlDialog"> <div class="CameraControlDialog">
<div class="direction"> <div class="direction">
<div class="control-container top" @click="controlClick(21)"> <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> <template>
<Dialog class="CongestedRoadSections" width="550px"> <Dialog class="CongestedRoadSections" width="600px">
<div class="video-presentations"> <div class="video-presentations">
<div class="video-item"></div> <div class="video-item"></div>
<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> <template>
<Dialog v-model="modelVisible" title="设备操作" width="550px"> <Dialog v-model="modelVisible" title="设备操作" width="600px">
<div class="DeviceControlDialog"> <div class="DeviceControlDialog">
<Form <Form
v-model="formData" v-model="formData"

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

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

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

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

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

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

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

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

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

@ -1,5 +1,5 @@
<template> <template>
<Dialog class="WakeUpLightCurtainInfo" width="550px"> <Dialog class="WakeUpLightCurtainInfo" width="600px">
<div class="operation-btn"> <div class="operation-btn">
<div class="photo-btn">图像</div> <div class="photo-btn">图像</div>
<div class="video-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> <template>
<Dialog class="WeatherForecast" width="550px"> s </Dialog> <Dialog class="WeatherForecast" width="600px"> s </Dialog>
</template> </template>
<script> <script>

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

@ -229,14 +229,20 @@ export default {
const status = item.status; const status = item.status;
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; else if (this.nowSelected === item.title && this.nowSelectedCompleted === false) return;
item.status = item.status ? "" : "_active"; item.status = item.status ? "" : "_active";
console.log("%c [ key ]-102-「index.vue」", "font-size:15px; background:#9d63e9; color:#e1a7ff;", key); 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) console.log(`${key}${status ? "_close" : ""}`, this.filterData, isDefault)
await eventMap[`${key}${status ? "_close" : ""}`]?.call(this, item, this.filterData, isDefault, this.cb); 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

@ -148,9 +148,11 @@ export const eventMap = {
loadingMessage?.close(); 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}设备!`); return Message.warning(`未查询到${item.title}设备!`);
}
eventMap[`地图路测设备/map_close`](item); eventMap[`地图路测设备/map_close`](item);
const cbCall = () => const cbCall = () =>
@ -204,10 +206,12 @@ export const eventMap = {
loadingMessage?.close(); 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}事件数据!`); return Message.warning(`没有${item.title}事件数据!`);
}
eventMap[`地图事件专题/map_close`](item); eventMap[`地图事件专题/map_close`](item);
const cbCall = () => cb?.(item, { deviceType: `事件专题_${deviceType}` }); const cbCall = () => cb?.(item, { deviceType: `事件专题_${deviceType}` });
@ -261,10 +265,12 @@ export const eventMap = {
.catch(() => {}); .catch(() => {});
loadingMessage?.close(); 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}数据!`); return Message.warning(`没有${item.title}数据!`);
}
eventMap[`事件专题/感知事件_close`](item); eventMap[`事件专题/感知事件_close`](item);
const cbCall = () => cb?.(item, { deviceType: `感知事件_${warningState}` }); const cbCall = () => cb?.(item, { deviceType: `感知事件_${warningState}` });
@ -342,4 +348,5 @@ function removeDataPreHandle(markers) {
} }
}; };
lngLatMapHandle(markers, cb); lngLatMapHandle(markers, cb);
window.renderData?.(window.page); //移除后,重新渲染弹出框更新数据
} }

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

@ -127,6 +127,12 @@ export class MarkerCluster {
const startIndex = (page - 1) * pageSize; const startIndex = (page - 1) * pageSize;
const endIndex = startIndex + pageSize; const endIndex = startIndex + pageSize;
let num = (page - 1) * 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); const currentPageData = data.slice(startIndex, endIndex);
window.currentPageData = currentPageData; window.currentPageData = currentPageData;
@ -146,7 +152,7 @@ export class MarkerCluster {
.join(""); .join("");
// 渲染当前页数据 // 渲染当前页数据
dataContainer.innerHTML = itemsTpl; dataContainer.innerHTML = itemsTpl;
dataPage.innerHTML = `${page}`; dataPage && (dataPage.innerHTML = `${page}`);
bindItemClick(); bindItemClick();
} }
@ -196,7 +202,7 @@ export class MarkerCluster {
</div>`); </div>`);
window.infoWindow = this.infoWindow; window.infoWindow = this.infoWindow;
this.infoWindow.open(map, currentPageData[0].lnglat); this.infoWindow.open(map, currentPageData[0].lnglat);
window.openInfoWindow = true;
this.infoWindow.dom.querySelector(".info-close").onclick = () => this.infoWindow.dom.querySelector(".info-close").onclick = () =>
this.infoWindow.close(); this.infoWindow.close();
@ -231,11 +237,22 @@ export class MarkerCluster {
let hasClick = false; let hasClick = false;
const reset = () => { const reset = () => {
this.infoWindow?.close?.(); if (!window.openInfoWindow) {
// console.log("窗口movestart中", new Date());
this.infoWindow?.close?.();
}
}; };
map.on("zoomstart", reset); map.on("zoomstart", reset);
map.on("mapmove", reset); map.on("zoomend", reset);
map.on("movestart", reset);
map.on("moveend", async () => {
if (window.openInfoWindow) {
// console.log("窗口位移结束", new Date());
window.openInfoWindow = false;
// window.infoWindow?.open?.();
}
});
const markerCluster = new AMap.MarkerCluster(map, [], { const markerCluster = new AMap.MarkerCluster(map, [], {
// gridSize: 15, // gridSize: 15,

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 }) => { const mouseenterDebounceFunc = debounce(({ node }) => {
if (["custom-html"].indexOf(node.shape) >= 0) { if (["custom-html"].indexOf(node.shape) >= 0) {
node.setZIndex(100); node.setZIndex(100);
console.log(node); // console.log(node);
} }
}, 0); }, 0);
const mouseleaveDebounceFunc = debounce(({ node }) => { const mouseleaveDebounceFunc = debounce(({ node }) => {

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

@ -32,7 +32,7 @@
<p <p
v-for="(item, index) in dayShift" v-for="(item, index) in dayShift"
:key="`${item.id}_${index}`" :key="`${item.id}_${index}`"
@click="removeDutyPerson(item,'dayShift')" @click="removeDutyPerson(item, 'dayShift')"
> >
{{ item.name }} {{ item.name }}
</p> </p>
@ -46,7 +46,7 @@
<p <p
v-for="(item, index) in graveyardShift" v-for="(item, index) in graveyardShift"
:key="`${index}_${item.id}`" :key="`${index}_${item.id}`"
@click="removeDutyPerson(item,'graveyardShift')" @click="removeDutyPerson(item, 'graveyardShift')"
> >
{{ item.name }} {{ item.name }}
</p> </p>
@ -61,7 +61,7 @@
<template #footer> <template #footer>
<Button <Button
:style="{ backgroundColor: '#0E708B' }" :style="{ backgroundColor: '#0E708B' }"
@click.native="$emit('close')" @click.native="closeWindow()"
> >
取消</Button 取消</Button
> >
@ -138,14 +138,7 @@ export default {
return this.visible; return this.visible;
}, },
set(bool) { set(bool) {
//, this.closeWindow();
if(!bool) {
this.dayShift = [];
this.graveyardShift = [];
this.peopleList = [];
}
this.$emit("close", bool);
}, },
}, },
getActive() { getActive() {
@ -157,6 +150,7 @@ export default {
visible: { visible: {
immediate: true, immediate: true,
async handler(bool) { async handler(bool) {
this.clearData();
if (!bool) return; if (!bool) return;
this.dayShift = [...(this.data?.dayShift || [])]; this.dayShift = [...(this.data?.dayShift || [])];
@ -184,7 +178,7 @@ export default {
this[this.active].push(item); this[this.active].push(item);
}, },
removeDutyPerson(item, activeCheck) { removeDutyPerson(item, activeCheck) {
if(activeCheck != this.active) return; if (activeCheck != this.active) return;
const index = this[this.active].findIndex( const index = this[this.active].findIndex(
(_item) => _item.id === item.id (_item) => _item.id === item.id
@ -235,11 +229,9 @@ export default {
}, },
}) })
.then((result) => { .then((result) => {
console.log("result.data:", result.data);
this.dayShift = result.data.filter( this.dayShift = result.data.filter(
(item) => item.scheduling === "1" (item) => item.scheduling === "1"
); );
console.log("this.dayShift11:", this.dayShift);
this.graveyardShift = result.data.filter( this.graveyardShift = result.data.filter(
(item) => item.scheduling === "2" (item) => item.scheduling === "2"
); );
@ -386,14 +378,24 @@ export default {
} }
} }
}, },
}, closeWindow(bool){
this.$emit("close", false);
},
clearData(){
//,
this.dayShift = [];
this.graveyardShift = [];
this.peopleList = [];
}
}
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.ModifyDutyInformationTable { .ModifyDutyInformationTable {
width: 947px; width: 947px;
height: 658px; // height: 658px;
height: 570px;
color: #fff; color: #fff;
display: flex; display: flex;
flex-direction: column; flex-direction: column;

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

@ -1,9 +1,9 @@
<template> <template>
<Dialog v-model="modelVisible" title="事件详情" width="880px" top="15%"> <Dialog v-model="modelVisible" title="事件详情" width="890px" top="11%">
<div <div
class="EventDetail" class="EventDetail"
:style="{ :style="{
height: activeName == '-1' || activeName == '0' ? '380px' : '768px', height: activeName == '-1' || activeName == '0' ? '380px' : '598px',
}" }"
> >
<Form :formList="formList" :dFormData="formData" label-width="100px" /> <Form :formList="formList" :dFormData="formData" label-width="100px" />

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

@ -18,20 +18,24 @@ let data3 = [200, 530, 920, 400, 600, 700, 300, 800];
let options = { let options = {
tooltip: { tooltip: {
show: true, show: true,
trigger: "axis", // trigger: "axis",
axisPointer: { axisPointer: {
// 坐标轴指示器,坐标轴触发有效 // 坐标轴指示器,坐标轴触发有效
type: "shadow", // 默认为直线,可选为:'line' | 'shadow' type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
}, },
valueFormatter: function (value) { formatter: function (params) {
return value + " 起"; if (params.seriesName == "路段里程数") {
return `<div>${params.marker} ${params.name} <span style="font-weight: bold;">${params.value} 公里</span></div>`;
} else {
return `<div>${params.marker} ${params.name} <span style="font-weight: bold;">${params.value} 起</span></div>`;
}
}, },
}, },
grid: { grid: {
left: "0", left: "0",
right: "0", right: "0",
top: "90px", top: "90px",
bottom: "20px", bottom: "-10px",
containLabel: true, containLabel: true,
}, },
xAxis: { xAxis: {
@ -49,14 +53,17 @@ let options = {
}, },
}, },
axisLabel: { axisLabel: {
interval: 0, interval: 1,
align: "center", align: "center",
rotate: "1", rotate: "1",
margin: "20", margin: 30,
textStyle: { textStyle: {
fontSize: 10, fontSize: 10,
color: "#E5E7E8", color: "#E5E7E8",
}, },
formatter: (value) => {
return value.split("-").join("\n\n");
},
}, },
}, },
yAxis: [ yAxis: [
@ -262,7 +269,6 @@ let options = {
opacity: 1, opacity: 1,
color: function (params) { color: function (params) {
var a = params.name; var a = params.name;
// console.log("==========a=============", a);
return new echarts.graphic.LinearGradient( return new echarts.graphic.LinearGradient(
0, 0,
0, 0,
@ -322,7 +328,6 @@ let options = {
opacity: 1, opacity: 1,
color: function (params) { color: function (params) {
var a = params.name; var a = params.name;
// console.log("==========a=============", a);
return new echarts.graphic.LinearGradient( return new echarts.graphic.LinearGradient(
0, 0,
0, 0,

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

@ -4,15 +4,30 @@ let lc2 = [400, 550, 200, 140, 400, 550];
let options = { let options = {
tooltip: { tooltip: {
show: true, show: true,
trigger: "axis", trigger: "item",
valueFormatter: function (value) { formatter: function (params) {
return value + " 起"; console.log(77, params.seriesName);
// params.forEach((item) => {
// console.log(item);
// if (item.seriesName == "平均处置时长") {
// console.log(77, item.seriesName);
// return `<div>${item.marker} ${item.name} <span style="font-weight: bold;">${item.value} 分钟</span></div>`;
// }
// });
if (params.seriesName == "平均处置时长") {
console.log(77, params.seriesName);
return `<div>${params.marker} ${params.name} <span style="font-weight: bold;">${params.value} 分钟</span></div>`;
} else if (params.seriesName == "去年同期平均处置时长") {
return `<div>${params.marker} ${params.name} <span style="font-weight: bold;">${params.value} 分钟</span></div>`;
} else {
return `<div>${params.marker} ${params.name} <span style="font-weight: bold;">${params.value} 起</span></div>`;
}
}, },
}, },
grid: { grid: {
right: "4%", right: "4%",
top: "90px", top: "90px",
left: "2%", left: "30px",
bottom: "0%", bottom: "0%",
containLabel: true, containLabel: true,
}, },
@ -86,12 +101,12 @@ let options = {
// formatter: "{value} °C", // formatter: "{value} °C",
}, },
}, },
// axisLine: { axisLine: {
// show: false, show: false,
// }, },
// axisTick: { axisTick: {
// show: false, show: false,
// }, },
splitLine: { splitLine: {
show: false, show: false,
lineStyle: { lineStyle: {
@ -227,14 +242,14 @@ let options = {
yAxisIndex: 1, yAxisIndex: 1,
data: lc2, data: lc2,
type: "line", type: "line",
symbol: "none", // symbol: "none",
symbolSize: 20, symbolSize: 5,
smooth: true, smooth: true,
color: "#E2BA74", color: "#E2BA74",
lineStyle: { lineStyle: {
color: "#E2BA74", color: "#E2BA74",
width: 1, width: 1,
type: "dashed", // type: "dashed",
// dashOffset:50 // dashOffset:50
}, },
}, },
@ -243,14 +258,14 @@ let options = {
yAxisIndex: 1, yAxisIndex: 1,
data: lc, data: lc,
type: "line", type: "line",
symbol: "none", // symbol: "none",
symbolSize: 20, symbolSize: 5,
smooth: true, smooth: true,
color: "#FB6D07", color: "#FB6D07",
lineStyle: { lineStyle: {
color: "#FB6D07", color: "#FB6D07",
width: 1, width: 1,
type: "dashed", // type: "dashed",
// dashOffset:50 // dashOffset:50
}, },
}, },

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

@ -23,8 +23,14 @@ var options = {
}, },
tooltip: { tooltip: {
show: true, show: true,
valueFormatter: function (value) { trigger: "item",
return value + " 起"; formatter: function (params) {
if (params.seriesName == "事件数量(起)") {
console.log(77, params.seriesName);
return `<div>${params.marker} ${params.name} <span style="font-weight: bold;">${params.value} 起</span></div>`;
} else {
return `<div>${params.marker} ${params.name} <span style="font-weight: bold;">${params.value} 分钟</span></div>`;
}
}, },
}, },
legend: { legend: {
@ -33,6 +39,7 @@ var options = {
itemHeight: 8, itemHeight: 8,
itemWidth: 8, itemWidth: 8,
top: "5%", top: "5%",
right: "0%", right: "0%",
textStyle: { textStyle: {
// fontSize: 12, // fontSize: 12,

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

@ -324,7 +324,7 @@ export default {
margin-bottom: 10px; margin-bottom: 10px;
left: 20px; left: 20px;
top: 10px; top: 10px;
z-index: 0; z-index: 1;
div { div {
white-space: nowrap; white-space: nowrap;

2
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/chargeableOperations/components/daylyAnalysis/assets/charts.js

@ -5,7 +5,7 @@ var data2 = [5, 12, 4, 6, 7, 9, 10, 15, 3, 5, 6, 15];
var options = { var options = {
tooltip: { tooltip: {
formatter: function (params) { formatter: function (params) {
console.log("params", params); // console.log("params", params);
if (params.seriesName == "增收金额") { if (params.seriesName == "增收金额") {
return `<div>${params.marker} ${params.name} <span style="font-weight: bold;">${params.value} 万元</span></div>`; return `<div>${params.marker} ${params.name} <span style="font-weight: bold;">${params.value} 万元</span></div>`;
} else { } else {

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

@ -104,6 +104,7 @@
:current-page.sync="pageIndex" :current-page.sync="pageIndex"
layout="total, sizes, prev, pager, next" layout="total, sizes, prev, pager, next"
:total="pageTotal" :total="pageTotal"
@size-change="handleSizeChange"
> >
</Pagination> </Pagination>
</div> </div>
@ -153,7 +154,7 @@ export default {
typeQuery: "", // typeQuery: "", //
pageTotal: 0, pageTotal: 0,
pageIndex: 1, pageIndex: 1,
pageSize: 10, pageSize: 30,
searchFormList, searchFormList,
equipSeries: [ equipSeries: [
"高清网络球形摄像机", "高清网络球形摄像机",
@ -183,6 +184,10 @@ export default {
clearInterval(this.interval); clearInterval(this.interval);
}, },
methods: { methods: {
handleSizeChange(size){
this.pageSize = size;
this.initData();
},
initData() { initData() {
this.startTime = moment().startOf("month").format("YYYY-MM-DD HH:mm:ss"); this.startTime = moment().startOf("month").format("YYYY-MM-DD HH:mm:ss");
this.time = moment().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"); this.setStatus("02", "doing");
getSystemStatusTabList({ getSystemStatusTabList({
startTime: this.startTime, startTime: this.startTime,
time: this.time, time: this.time,
type: this.typeQuery, type: this.typeQuery,
pageNum: pageIndex, pageNum: pageIndex,
pageSize: pageSize, pageSize: this.pageSize,
}).then((res) => { }).then((res) => {
if (res.code == 200) { if (res.code == 200) {
// if (res.rows && res.rows.length > 0) { // if (res.rows && res.rows.length > 0) {
this.setStatus("02", "finish"); this.setStatus("02", "finish");
this.pageIndex = pageIndex; this.pageIndex = pageIndex;
this.pageSize = pageSize;
this.pageTotal = res.total; this.pageTotal = res.total;
this.tableData = res.rows; this.tableData = res.rows;
this.tableData.forEach((it, index) => { this.tableData.forEach((it, index) => {
it.order = (pageIndex - 1) * pageSize + index + 1; it.order = (pageIndex - 1) * this.pageSize + index + 1;
}); });
// } else { // } else {
// this.setStatus("02", "empty"); // 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: { grid: {
top: "15%", //上边距 top: "15%", //上边距
right: "0", //右边距 right: "0", //右边距
left: "15px", //左边距 left: "30px", //左边距
bottom: "0%", //下边距 bottom: "0%", //下边距
containLabel: true, 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, showSymbol: false,
smooth: true, // 是否曲线 smooth: true, // 是否曲线
name: "实时数据", // 图例对应类别 name: "实时数据", // 图例对应类别
data: [ 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,
], // 纵坐标数据
lineStyle: { lineStyle: {
color: "#FFD15C", color: "#FFD15C",
}, },

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

@ -1,75 +1,98 @@
<template> <template>
<div class='congestion'> <div class="congestion">
<WgtTitle :title="'气温变化趋势'"></WgtTitle> <WgtTitle :title="'气温变化趋势'"></WgtTitle>
<div class="board"> <div class="board">
<div class="charts" id="temperatureTrend"></div> <div class="charts" id="temperatureTrend"></div>
</div>
</div> </div>
</template> </div>
</template>
<script>
<script>
import WgtTitle from '../../../../../widgets/title' import WgtTitle from "../../../../../widgets/title";
import * as echarts from "echarts"; import * as echarts from "echarts";
import chartsStatistics from "./assets/charts"; import temperatureCharts from "./assets/charts";
export default { import {
name: 'temperatureTrend', getListLatest,
components: { getDeviceNameListLatest,
WgtTitle getIdDevices,
} from "@/api/perception/meteorologyCheck";
export default {
name: "temperatureTrend",
components: {
WgtTitle,
},
props: {
data: {
type: Array,
}, },
data() { },
return { watch: {
myChart:null, data: {
} handler(data) {
}, let newData = [];
data.forEach((item) => {
created() { newData.push(item.avgVisibility);
},
methods: {
reiszeChart(){
this.$nextTick(() => {
if ( this.myChart ) {
this.myChart.resize();
}
}); });
} temperatureCharts.series[0].data = newData;
}, this.myChart.setOption(temperatureCharts);
update(){ },
deep: true,
}, },
mounted() { },
setTimeout(() => { data() {
this.$nextTick(() => { return {
this.myChart = echarts.init(document.getElementById('temperatureTrend')); myChart: null,
this.myChart.setOption(chartsStatistics); };
}); },
created() {},
methods: {
reiszeChart() {
this.$nextTick(() => {
if (this.myChart) {
this.myChart.resize();
}
}); });
}, },
},
update() {},
mounted() {
setTimeout(() => {
this.$nextTick(() => {
this.myChart = echarts.init(
document.getElementById("temperatureTrend")
);
this.myChart.setOption(temperatureCharts);
});
});
},
};
</script>
<style lang="scss" scoped>
.congestion {
display: flex;
flex-direction: column;
.board {
flex: 1;
padding: 0px 20px;
background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #064258 100%);
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;
justify-content: space-between;
align-items: center;
} }
</script> }
.charts {
<style lang='scss' scoped> height: 200px;
.congestion { width: 100%;
display: flex; flex-direction: column; }
.board{ </style>
flex: 1;
padding: 0px 20px;
background: linear-gradient(180deg, rgba(6,66,88,0.2) 0%, #064258 100%);
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;
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, showSymbol: false,
smooth: true, // 是否曲线 smooth: true, // 是否曲线
name: "实时数据", // 图例对应类别 name: "实时数据", // 图例对应类别
data: [ 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,
], // 纵坐标数据
lineStyle: { lineStyle: {
color: "#0783FA", color: "#0783FA",
}, },

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

@ -1,74 +1,94 @@
<template> <template>
<div class='congestion'> <div class="congestion">
<WgtTitle :title="'能见度变化趋势'"></WgtTitle> <WgtTitle :title="'能见度变化趋势'"></WgtTitle>
<div class="board"> <div class="board">
<div class="charts" id="VisibilityTrends"></div> <div class="charts" id="VisibilityTrends"></div>
</div>
</div> </div>
</template> </div>
</template>
<script>
<script>
import WgtTitle from '../../../../../widgets/title' import WgtTitle from "../../../../../widgets/title";
import * as echarts from "echarts"; import * as echarts from "echarts";
import chartsStatistics from "./assets/charts"; import visibilityCharts from "./assets/charts";
export default { export default {
name: 'VisibilityTrends', name: "VisibilityTrends",
components: { components: {
WgtTitle WgtTitle,
},
props: {
data: {
type: Array,
}, },
data() { },
return { watch: {
myChart:null, data: {
} handler(data) {
}, let newData = [];
data.forEach((item) => {
created() { newData.push(item.avgTemperature);
},
methods: {
reiszeChart(){
this.$nextTick(() => {
if ( this.myChart ) {
this.myChart.resize();
}
}); });
} visibilityCharts.series[0].data = newData;
}, this.myChart.setOption(visibilityCharts);
update(){ },
deep: true,
}, },
mounted() { },
setTimeout(() => { data() {
this.$nextTick(() => { return {
this.myChart = echarts.init(document.getElementById('VisibilityTrends')); myChart: null,
this.myChart.setOption(chartsStatistics); };
}); },
created() {},
methods: {
reiszeChart() {
this.$nextTick(() => {
if (this.myChart) {
this.myChart.resize();
}
}); });
}, },
},
update() {},
mounted() {
setTimeout(() => {
this.$nextTick(() => {
this.myChart = echarts.init(
document.getElementById("VisibilityTrends")
);
this.myChart.setOption(visibilityCharts);
});
});
},
};
</script>
<style lang="scss" scoped>
.congestion {
display: flex;
flex-direction: column;
align-items: stretch;
.board {
flex: 1;
padding: 0px 20px;
background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #064258 100%);
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;
justify-content: center;
align-items: stretch;
} }
</script> }
.charts {
<style lang='scss' scoped> height: 200px;
.congestion { }
display: flex; flex-direction: column; align-items: stretch; </style>
.board{
flex: 1;
padding: 0px 20px;
background: linear-gradient(180deg, rgba(6,66,88,0.2) 0%, #064258 100%);
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;
justify-content: center;
align-items: stretch;
}
}
.charts {
height:200px;
}
</style>

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

@ -1,156 +1,167 @@
<template> <template>
<div class='congestion'> <div class="congestion">
<WgtTitle :title="'气象监测数据'"></WgtTitle> <WgtTitle :title="'气象监测数据'"></WgtTitle>
<div class="board"> <div class="board">
<div class="showRoad"> <div class="showRoad">
<div :class="it.type?it.type+' item':'item'" v-for="(it,index) in dataList" > <div class="item">
<span class="label" >{{ it.text }}</span> <span class="label">温度</span>
<span class="text" >{{ it.value }}</span> <span class="text">{{
</div> data.temperature ? data.temperature + "℃" : "-"
}}</span>
</div> </div>
</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> </div>
</template> </div>
</template>
<script>
<script>
import WgtTitle from '../../../../../widgets/title' import WgtTitle from "../../../../../widgets/title";
export default { export default {
name: 'MonthStatistics', name: "MonthStatistics",
components: { components: {
WgtTitle WgtTitle,
}, },
data() { props: {
return { data: {
myChart:null, type: Object,
dataList:[ default: () => {},
{
text:"天气状态:",
value:"无降水",
class:"km"
},
{
text:"风速:",
value:"55m/s",
class:"km"
},
{
text:"天气温度:",
value:"23°C",
class:"km"
},
{
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"
}
]
}
},
created() {
},
methods: {
}, },
mounted() { },
setTimeout(() => { watch: {
this.$nextTick(() => { data: {
handler(newVal) {
}); console.log(newVal);
}); },
deep: true,
}, },
} },
</script> data() {
return {
<style lang='scss' scoped> myChart: null,
.congestion { dataList: [],
width: 100%; display: flex; };
.board{ },
flex: 1; created() {},
width: 100%; methods: {},
padding: 0px 20px; mounted() {
background: linear-gradient(180deg, rgba(6,66,88,0.2) 0%, #064258 100%); setTimeout(() => {
border-radius: 5px 5px 5px 5px; this.$nextTick(() => {});
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; </script>
justify-content: space-between;
align-items: center;
flex-direction: row;
overflow: auto;
.showRoad { <style lang="scss" scoped>
display: flex; .congestion {
flex-wrap: wrap; width: 100%;
display: flex;
.board {
flex: 1;
width: 100%;
padding: 0px 20px;
background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #064258 100%);
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;
justify-content: space-between;
align-items: center;
flex-direction: row;
overflow: auto;
> .item { .showRoad {
display: inline-flex; display: flex;
width:50%; flex-wrap: wrap;
height:23px;
margin-top:12px;
flex-direction: row;
> span.label { > .item {
width:50%; display: inline-flex;
height:25px; width: 50%;
font-size: 12px; height: 23px;
font-family: PingFang SC, PingFang SC; margin-top: 12px;
font-weight: 400; flex-direction: row;
color: #00B3CC;
}
>span.text { > span.label {
font-size: 14px; width: 50%;
font-family: PingFang SC, PingFang SC; height: 25px;
font-weight: 400; font-size: 12px;
color: #FFFFFF; font-family: PingFang SC, PingFang SC;
} font-weight: 400;
color: #00b3cc;
} }
}
> span.text {
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #ffffff;
}
}
} }
} }
.charts { }
height:180px; .charts {
width: 100%; height: 180px;
} width: 100%;
}
</style> </style>

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

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

2
ruoyi-ui/src/views/JiHeExpressway/pages/service/PublishingChannelManagement/index.vue

@ -18,7 +18,7 @@
</div> </div>
<InputSearch <InputSearch
style="width: 402px" style="width: 480px"
:formList="searchFormList" :formList="searchFormList"
@handleSearch="handleSearch" @handleSearch="handleSearch"
/> />

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

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