Browse Source

修改禅道BUG

wangqin
王钦 2 years ago
parent
commit
dd3c8c3f7e
  1. 1
      ruoyi-ui/src/api/MonthlyEquipment/index.js
  2. 2
      ruoyi-ui/src/api/menu.js
  3. 8
      ruoyi-ui/src/common/menuData.js
  4. 11
      ruoyi-ui/src/utils/request.js
  5. 2
      ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/WarningList.vue
  6. 2
      ruoyi-ui/src/views/JiHeExpressway/components/RecentPages/index.vue
  7. 1
      ruoyi-ui/src/views/JiHeExpressway/components/Table.vue
  8. 3
      ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine2/index.vue
  9. 10
      ruoyi-ui/src/views/JiHeExpressway/components/Video/videoStream.js
  10. 10
      ruoyi-ui/src/views/JiHeExpressway/components/VideoMulti/videoStream.js
  11. 10
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/index.vue
  12. 75
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/MillimeterWaveRadar/components/DeviceControlDialog.vue
  13. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/MillimeterWaveRadar/index.vue
  14. 12
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/RoadNetworkFacilities/index.vue
  15. 3
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SolarEnergy/index.vue
  16. 9
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/TrafficIncidents/index.vue
  17. 11
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrame/index.vue
  18. 12
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue
  19. 3
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/httpList.js
  20. 14
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/index.vue
  21. 20
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DeviceControl/components/ScopeTable.vue
  22. 281
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DeviceControl/index copy.vue
  23. 36
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DeviceControl/index.vue
  24. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DispatchLiaison/StatsDialogVisible/index.vue
  25. 10
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DispatchLiaison/index.vue
  26. 26
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/index.vue
  27. 63
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/components/EditEventInformationDialog/data.js
  28. 27
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/components/EditEventInformationDialog/index.vue
  29. 12
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/index.vue
  30. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/RealTimeVideo/index.vue
  31. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/ReleaseInformation/index.vue
  32. 644
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/TrafficControl/components/AddControlEventInfoDialog/data.js
  33. 73
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/TrafficControl/components/AddControlEventInfoDialog/index.vue
  34. 1
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/TrafficControl/index.vue
  35. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/index.vue
  36. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/emergencyProcessManagement/disposalProcess/index.vue
  37. 15
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue
  38. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue
  39. 46
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/addAndEditDialog/index.vue
  40. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/assets/charts.js
  41. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/assets/shexiangtou.png
  42. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/deviceSummary/index.vue
  43. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/deviceUptime/assets/charts.js
  44. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/deviceUptime/index.vue
  45. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/monthlyEquipment/EllipseData.vue
  46. 1
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/monthlyEquipment/assets/charts.js
  47. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/monthlyEquipment/index.vue
  48. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/onLineBarCharts/assets/barCharts.js
  49. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/onLineBarCharts/index.vue
  50. 158
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/index.vue
  51. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/data_2024-05-23.js
  52. 538
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/index.vue
  53. 673
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/index_2024-05-23.md
  54. 81
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/query/charts.js
  55. 135
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/query/data.js
  56. 422
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/query/index.vue
  57. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/dailyDisposal/assets/charts.js
  58. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/dailyDisposal/index.vue
  59. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/dayTotal/assets/charts.js
  60. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/dayTotal/index.vue
  61. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/ElQuarterPicker.vue
  62. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/assets/charts.js
  63. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/assets/charts2.js
  64. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/assets/charts3.js
  65. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/index copy.vue
  66. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/index.vue
  67. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/progressBar copy.vue
  68. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/progressBar.vue
  69. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventSource/assets/charts.js
  70. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventSource/index.vue
  71. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/monthStatistics/assets/charts.js
  72. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/monthStatistics/index.vue
  73. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/railway/assets/bg.png
  74. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/railway/assets/charts.js
  75. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/railway/index.vue
  76. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/railwayDay/assets/charts.js
  77. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/railwayDay/index.vue
  78. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/typeAnalysis/assets/charts.js
  79. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/typeAnalysis/index.vue
  80. 94
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/index.vue
  81. 104
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/index.vue
  82. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/EventDetailDialog/Carousel/images/arrow.svg
  83. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/EventDetailDialog/Carousel/index.vue
  84. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/EventDetailDialog/data.js
  85. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/EventDetailDialog/index.vue
  86. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/FormEvent/PresetFormItems.js
  87. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/FormEvent/data.js
  88. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/FormEvent/index.vue
  89. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/data.js
  90. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/images/export.svg
  91. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/images/insert.svg
  92. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/images/refresh.svg
  93. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/index.vue
  94. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/assets/charts3.js
  95. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/record/index.vue
  96. 8
      ruoyi-ui/src/views/JiHeExpressway/utils/enum.js

1
ruoyi-ui/src/api/MonthlyEquipment/index.js

@ -15,7 +15,6 @@ export function getSystemStatusList(query) {
//设备状态列表按时间和类型
export function getSystemStatusTabList(query) {
//system/status/tablist
return request({
url: "/system/status/tablist",
method: "get",

2
ruoyi-ui/src/api/menu.js

@ -3,7 +3,7 @@ import request from '@/utils/request'
// 获取路由
export const getRouters = () => {
return request({
url: '/getRouters',
url: '/getRouters/1',
method: 'get'
})
}

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

@ -36,13 +36,7 @@ export default [
path: "/perception/trafficSituation",
name: "perceptionTrafficSituation",
component: "perception/trafficSituation/index.vue",
},
{
title: "感知事件分析",
path: "/perception/eventAnalysis",
name: "perceptionEventAnalysis",
component: "perception/eventAnalysis/index.vue",
},
}
],
},
{

11
ruoyi-ui/src/utils/request.js

@ -111,10 +111,13 @@ service.interceptors.response.use(res => {
}
return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
} else if (code === 500) {
Message({
message: msg,
type: 'error'
})
if(msg !== 'connect timed out'){
Message({
message: msg,
type: 'error'
})
}
return Promise.reject(new Error(msg))
}
// License 状态码 4011 未授权 4031 访问受限,授权过期

2
ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/WarningList.vue

@ -92,6 +92,8 @@ export default {
},
handleDialogClose() {
this.eventDetailDialogVisible = false;
this.$root.$emit('refresh-event-list');
},
reData() {

2
ruoyi-ui/src/views/JiHeExpressway/components/RecentPages/index.vue

@ -266,7 +266,7 @@ export default{
display: flex; align-items: center; justify-content: center;
i{
display: none;
width:6px; height: 6px; border-radius: 3px;
width:10px; height: 10px; border-radius: 3px;
}
&.active i{ display: block; background-color: #FA0; }
}

1
ruoyi-ui/src/views/JiHeExpressway/components/Table.vue

@ -22,7 +22,6 @@ export default {
}
},
created() {
console.log(this)
},
}
</script>

3
ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine2/index.vue

@ -70,9 +70,6 @@ export default {
let scrollbox = document.getElementById("scrollbox");
scrollbox.scrollTop = scrollbox.scrollHeight;
});
console.log(88, scrollbox.scrollHeight);
console.log(99, scrollbox.scrollTop);
},
},
},

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

@ -190,12 +190,10 @@ export class HttpLivePlayer {
// });
this.player.on(flvJs.Events.ERROR, (errorType, errorDetail, errorInfo) => {
console.log("errorType", errorType);
console.log("errorDetail", errorDetail);
console.log("errorInfo", errorInfo);
Message.warning(
`视频流加载失败, ${ErrorTypesCn[errorType] || "其他错误"}`
);
console.log("video errorInfo", errorInfo);
// Message.warning(
// `视频流加载失败, ${ErrorTypesCn[errorType] || "其他错误"}`
// );
this.initLiveVideo();
});

10
ruoyi-ui/src/views/JiHeExpressway/components/VideoMulti/videoStream.js

@ -166,12 +166,10 @@ export class HttpLivePlayer {
// });
this.player.on(flvJs.Events.ERROR, (errorType, errorDetail, errorInfo) => {
console.log("errorType", errorType);
console.log("errorDetail", errorDetail);
console.log("errorInfo", errorInfo);
Message.warning(
`视频流加载失败, ${ErrorTypesCn[errorType] || "其他错误"}`
);
console.log("video errorInfo", errorInfo);
// Message.warning(
// `视频流加载失败, ${ErrorTypesCn[errorType] || "其他错误"}`
// );
let self = this;
setTimeout(() => {
self.initLiveVideo();

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

@ -14,10 +14,9 @@
</ElTabs>
<div class="bottom">
<Button @click.native="deviceControlVisible = true">设备操作</Button>
<Button @click.native="onControlClick" :style="dialogData.useState ? '':'background-color:grey'">设备操作</Button>
</div>
</div>
<!-- <DeviceControlDialog v-model="deviceControlVisible" :deviceId="dialogData.iotDeviceId || '8697-1'" /> -->
<DeviceControlDialog v-model="deviceControlVisible" :deviceId="dialogData.iotDeviceId" :id="dialogData.id"
:deviceType="dialogData.deviceType" />
</Dialog>
@ -114,7 +113,6 @@ export default {
};
},
async created() {
console.log(333, this.dialogData, 444);
this.data = { ...this.dialogData, roadName: null };
getProduct(this.dialogData.productId)
@ -152,6 +150,12 @@ export default {
if (roadInfo) this.data.roadName = roadInfo.roadName;
},
methods: {
onControlClick(){
if(this.dialogData.useState){
this.deviceControlVisible = true
}
},
updateFormData(formData) {
formData.workMode &&
this.$set(this.data, "workMode", inducerModeDic[formData.workMode]); //(this.data.workMode = inducerModeDic[formData.controlType]);

75
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/MillimeterWaveRadar/components/DeviceControlDialog.vue

@ -6,6 +6,7 @@
<el-select
v-model="eventType"
style="width: 180px"
@change="initData"
>
<el-option
v-for="item in eventTypeOption"
@ -36,7 +37,39 @@
重置
</Button>
</div>
<div class="body">
<Table :data="tableData">
<ElTableColumn label="" width="60" />
<ElTableColumn prop="eventName" label="事件类型" width="240" />
<ElTableColumn prop="processConfig" label="处置流程" />
<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>
</Dialog>
</template>
@ -45,14 +78,17 @@
import Button from "@screen/components/Buttons/Button.vue";
import Dialog from "@screen/components/Dialog/index.vue";
import request from "@/utils/request";
import { throttle } from "lodash"
import Pagination from "@screen/components/Pagination.vue";
import Table from "@screen/components/Table.vue";
import { Message } from "element-ui";
export default {
name: "DeviceControlDialog",
components: {
Dialog,
Button
Button,
Pagination,
Table,
},
model: {
prop: "visible",
@ -77,9 +113,10 @@ export default {
dateRange: [],
searchData: {
pageSize: 12,
pageNum: 1
pageSize: 10,
pageIndex: 0
},
tableData:[]
};
},
computed: {
@ -88,7 +125,7 @@ export default {
return this.visible;
},
set(val) {
// this.$emit("update:value", val);
this.$emit("update:value", val);
},
},
},
@ -96,7 +133,9 @@ export default {
visible: {
immediate: true,
handler(bool) {
this.initData();
if(bool){
this.initData();
}
},
},
},
@ -106,21 +145,23 @@ export default {
methods: {
initData(){
this.dateRange = [];
this.eventType = 'all';
this.searchData = {
pageSize: 12,
pageNum: 1
pageSize: 10,
pageIndex: 0
}
this.bindData();
},
async bindData() {
console.log(this.deviceId)
// request({
// url: `business/device/events/history/{deviceId}/type/{type}`,
// method: "get",
// }).then(res=>{
// if (result.code != 200) return Message.error(result?.msg);
// })
request({
url: `business/device/events/history/${this.deviceId}/type/${this.eventType}`,
method: "get",
params:{
...this.searchData
}
}).then(res=>{
if (res.code != 200) return Message.error(res?.msg);
console.log(res)
})
},
},

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

@ -14,7 +14,7 @@
</template>
<!-- 设备操作弹窗 -->
<DeviceControlDialog v-model="deviceControlVisible" :deviceId="dialogData.deviceId" :btnType="btnType" />
<DeviceControlDialog v-model="deviceControlVisible" :deviceId="dialogData.iotDeviceId" :btnType="btnType" />
</Dialog>
</template>

12
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/RoadNetworkFacilities/index.vue

@ -57,12 +57,12 @@ export default {
activeName: "first",
deviceControlVisible: false,
data: {
deviceType: "行车诱导",
deviceStation: "k094+079",
roadName: "G35济泽高速",
direction: "1",
deviceState: "0",
deviceVendors: "XXX厂家",
deviceType: "",
deviceStation: "",
roadName: "",
direction: "",
deviceState: "",
deviceVendors: "",
},
formList: [],
dateRange: [],

3
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SolarEnergy/index.vue

@ -156,11 +156,10 @@ div.switcher {
<style lang="scss" scoped>
.SolarEnergy {
width: 508px;
// height: 248px;
color: #fff;
display: flex;
flex-direction: column;
height: 250px;
::v-deep {
.el-tabs__content {
overflow-y: auto;

9
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/TrafficIncidents/index.vue

@ -160,13 +160,6 @@ export default {
type: "warning",
})
.then(() => {
// let data = new FormData();
// data.append("eventId", this.dialogData.id);
// postCompleteEvent(data).then((result) => {
// if (result.code != 200) return [];
// this.$message.success("");
// this.$emit('traffic-relieve', this.data);
// });
request({
url: `dc/system/event/${this.dialogData.id}`,
method: "delete",
@ -189,7 +182,7 @@ export default {
<style lang="scss" scoped>
.TrafficIncidents {
width: 600px;
overflow:hidden;
color: #fff;
display: flex;
flex-direction: column;

11
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrame/index.vue

@ -11,13 +11,15 @@
</el-tooltip>
</div>
<div class="body">
<div class="body3">
<div class="title">图标含义</div>
<span class="close" @click="() => { this.activeIcon = null; }">
<i class="el-icon-close" />
</span>
<div style="width:800px; ">
<!-- <Form labelWidth="90px" column="1" class="form" ref="FormConfigRef" :formList="formList" /> -->
<img class="image" src="@screen/images/home-Frame/logoMean.png" />
</div>
<!-- <div class="footer">
</div> -->
</div>
@ -64,7 +66,8 @@ div.el-popper.global-input-search-popover {
transform: translateY(24px);
// margin-top: 6vh;
.body {
.body3 {
width: 800px;
.title {
background: linear-gradient(90deg,
#237e9b 0%,
@ -90,8 +93,8 @@ div.el-popper.global-input-search-popover {
</style>
<style lang="scss" scoped>
.image {
width: 50vw;
height: 65vh;
width: 800px;
height: 500px;
}
.HomeFrame {

12
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue

@ -16,7 +16,7 @@
<el-tab-pane label="定时管控" name="2"></el-tab-pane>
<el-tab-pane label="管控记录" name="3"></el-tab-pane>
</el-tabs>
<div class="body">
<div class="body2">
<div class="title">批量控制</div>
<span class="close" @click="() => { this.activeIcon = null; }">
<i class="el-icon-close" />
@ -122,6 +122,7 @@ import Table from '@screen/components/Table.vue';
import moment from "moment";
import _ from "lodash";
import Pagination from '@screen/components/Pagination.vue';
import { deviceType } from "../../../maintenanceOperations/smart/statisticalAnalysis/query/data";
const componentMap = {
"设备箱": "SmartDeviceParams", "语音广播": "BroadcastParam", "疲劳唤醒": "FatigueWakesUpParam",
@ -137,6 +138,7 @@ Object.keys(DeviceForMap).forEach(DeviceLabel => {
});
const deviceTypeDefault = Object.keys(DeviceTopics)[1];
async function setDeviceOptions(config, filterData, formList) {
console.log(config.deviceType, filterData,'33333')
const data = await getDeviceList(config.deviceType, filterData).then(async (data) => {
await delay(600);
return data;
@ -215,7 +217,9 @@ export default {
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
if(data.deviceType){
changeHandle(data, formList);
}
}
},
},
@ -506,7 +510,6 @@ export default {
})
.then((result) => {
if (result.code != 200) return;
console.log('########',result)
result.rows.forEach(e => {
e.operTime = moment(e.operTime).format('YYYY-MM-DD HH:mm:ss')
e.operType = _.find(this.Enum_ControlType,{key:e.operType}).label
@ -539,7 +542,7 @@ div.el-popper.global-input-search-popover {
transform: translateY(24px);
// margin-top: 6vh;
.body {
.body2 {
width: 800px;
.title {
background: linear-gradient(90deg,
@ -549,6 +552,7 @@ div.el-popper.global-input-search-popover {
position: absolute;
top: 0;
left: 0;
width: 100%;
}
.close {

3
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/httpList.js

@ -233,6 +233,9 @@ export function getDeviceList(deviceType, options) {
if (options && options.deviceState && options.deviceState !== "") {
data["deviceState"] = options.deviceState;
}
if (options && options.direction && options.direction !== "") {
data["direction"] = options.direction;
}
request(
Object.keys(options || {}).length
? {

14
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/index.vue

@ -34,6 +34,8 @@
trigger="manual"
:value="isActive(item)"
placement="left"
:popper-class="`popover-0`"
:popper-style="{ zIndex: 999 }"
>
<div v-if="item.key === 'weather'" class="weather">
<span>天气{{ weatherData.text }}</span>
@ -48,8 +50,10 @@
></div>
<div
class="label"
slot="reference"
:style="{
zIndex:999,
backgroundImage: `url(${require(`./images/${item.key}${
isActive(item) ? '-active' : ''
}.svg`)})`,
@ -342,7 +346,14 @@ export default {
},
};
</script>
<style>
::v-deep {
.el-popover {
z-index: 99 !important; /* 请根据你的项目需求设置合适的值 */
}
}
</style>
<style lang="scss" scoped>
.border {
border: 1px solid;
@ -406,9 +417,6 @@ export default {
}
}
}
::v-deep .el-popover {
z-index: 2 !important; /* 请根据你的项目需求设置合适的值 */
}
.weather {
width: 435px;
span {

20
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DeviceControl/components/ScopeTable.vue

@ -204,9 +204,23 @@
</el-row>
<el-row v-if="tableInfo.deviceType == 2 && tableInfo.recoverConfig && tableInfo.recoverConfig.contentList">
<el-col :span="24">
<div class="keep-ratio" origin="top" v-for="(item,index) of tableInfo.recoverConfig.contentList">
<div class="contentLabel" >{{ item.deviceName }}</div>
<div class="contentValue"><div class="contentBoard" >{{ item.content }}</div><el-button icon="el-icon-edit"></el-button></div>
<div class="keep-ratio" origin="top" v-for="(itm,idx) of tableInfo.recoverConfig.contentList">
<div class="contentLabel" >{{ itm.deviceName }}</div>
<div class="contentValue" v-if="itm.isEditor === undefined">
<div class="contentBoard" >{{ itm.content }}</div>
<ButtonGradient class="btn" @click.native="$emit('onContentEdit', {field:'recoverConfig',index,idx,type:'edit'})">
<i class="el-icon-edit"></i>
</ButtonGradient>
</div>
<div class="contentValue" v-else>
<input class="contentBoard" placeholder="请输入文字" v-model="itm.content"></input>
<ButtonGradient class="btn" style="margin-left: 5px;" @click.native="$emit('onContentEdit', {field:'recoverConfig',index,idx,type:'cancel'})">
<i class="el-icon-refresh-left"></i>
</ButtonGradient>
<ButtonGradient class="btn" style="margin-left: 5px;" @click.native="$emit('onContentEdit', {field:'recoverConfig',index,idx,type:'confirm'})">
<i class="el-icon-check"></i>
</ButtonGradient>
</div>
</div>
</el-col>
</el-row>

281
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DeviceControl/index copy.vue

@ -0,0 +1,281 @@
<template>
<Card class="DeviceControl" title="设备管控">
<div class="container">
<el-row v-for="(item, index) in tableData" :key="index" class="rowBlock">
<ScopeTable
:tableInfo="item"
:index="index"
@onAdd="onAdd"
@onDel="onDel"
@onConfirm="onConfirm"
@onContentEdit="onContentEdit"
></ScopeTable>
</el-row>
</div>
<div class="foot">
<ButtonGradient
class="special-button"
style="background: rgb(229, 68, 73)"
@click.native="handleSubmit(1)"
>
一键控制
</ButtonGradient>
<ButtonGradient
class="special-button"
style="background: rgb(250, 152, 56)"
@click.native="handleSubmit(2)"
>
一键恢复
</ButtonGradient>
</div>
</Card>
</template>
<script>
import Card from "@screen/components/Card2/Card.vue";
import ButtonGradient from "@screen/components/Buttons/ButtonGradient.vue";
import ScopeTable from "./components/ScopeTable.vue";
import { provideMixin } from "./../../mixin";
import { defaultTableInfo } from "./data";
import { Message } from "element-ui";
import request from "@/utils/request";
export default {
name: "DeviceControl",
mixins: [provideMixin],
components: {
Card,
ScopeTable,
ButtonGradient,
},
data() {
return {
planId: "",
tableData: [],
};
},
watch: {},
mounted() {},
methods: {
detailChange(eventId) {
this.initData(this.detailData);
},
initData(eventInfo) {
request({
url: `business/plans/list/event/type`,
method: "post",
data: { ...eventInfo },
})
.then((result) => {
if (result.code != 200) return Message.error(result?.msg);
let data = result.data;
if (data.length == 0) {
this.tableData = [{ ...defaultTableInfo }];
return Message.warning("该事件暂无处置预案");
}
let dcExecuteAction = data[0].dcExecuteAction || [];
this.planId = data[0].id;
let dcArr = [];
dcExecuteAction.forEach((it) => {
let action = { ...it };
if (it.executeConfig) {
let executeConfig = JSON.parse(it.executeConfig);
let execute = this.mapKeys(executeConfig, "zx_");
action = { ...action, ...execute };
}
if (it.recoverConfig) {
let recoverConfig = JSON.parse(it.recoverConfig);
let recover = this.mapKeys(recoverConfig, "hf_");
action = { ...action, ...recover };
}
if (it.deviceList) {
action.devList = it.deviceList.split(",").map((str) => str);
}
dcArr.push(action);
});
this.tableData =
dcArr.length == 0 ? [{ ...defaultTableInfo }] : dcArr;
})
.catch((err) => {
console.log(err);
Message.error("查询事件预案列表失败", err);
});
},
mapKeys(obj, prefix) {
return Object.keys(obj).reduce((result, key) => {
result[`${prefix}${key}`] = obj[key];
return result;
}, {});
},
onAdd() {
this.tableData.push({ ...defaultTableInfo });
},
onDel(index) {
if (this.tableData.length <= 1) {
return Message.warning("最后一项不可删除!");
}
this.tableData.splice(index, 1);
},
onConfirm(index){
const param = {
"dcEvent": {
"eventType": this.detailData.eventType,
"direction": this.detailData.direction,
"id": this.detailData.id,
"stakeMark": this.detailData.stakeMark,
"subclass": this.detailData.subclass
},
"dcExecuteAction": {
"id": "",
"emergencyPlansId": "",
"deviceType": this.tableData[index].deviceType,
"searchRule": this.tableData[index].searchRule,
"number": this.tableData[index].number,
"deviceList": this.tableData[index].devList.join(','),
"executeConfig": "{\"operationType\":2}",
"recoverConfig": "{\"operationType\":2}"
}
}
request({
url: `business/plans/list/event/emergencyPlans`,
method: "post",
data: param,
}).then(result=>{
if (result.code != 200) return Message.error(result?.msg);
console.log(param,result,'===============')
let data = result.data;
this.tableData[index].executeConfig = JSON.parse(data.executeConfig)
this.tableData[index].recoverConfig = JSON.parse(data.recoverConfig)
this.tableData[index].zx_operationType = this.tableData[index].executeConfig?.operationType;
this.tableData[index].hf_operationType = this.tableData[index].recoverConfig?.operationType;
this.tableData = _.cloneDeep(this.tableData)
})
},
onContentEdit({field,index,idx,type}){
if(type==='edit'){
this.tableData[index][field]['contentList'][idx]['isEditor'] = this.tableData[index][field]['contentList'][idx].content;
} else if(type === 'cancel'){
this.tableData[index][field]['contentList'][idx]['content'] = this.tableData[index][field]['contentList'][idx].isEditor;
delete this.tableData[index][field]['contentList'][idx].isEditor
} else if(type === 'confirm'){
delete this.tableData[index][field]['contentList'][idx].isEditor
}
this.tableData = _.cloneDeep(this.tableData)
},
handleSubmit(value = 1) {
let dcArr = [];
this.tableData.forEach((item) => {
let dcData = {
deviceType: item.deviceType,
searchRule: item.searchRule,
number: item.number,
};
if (item.devList && item.devList.length > 0) {
dcData.deviceList = item.devList.join(",");
}
let zxData = {},
hfData = {};
if(item.executeConfig){
zxData['executeConfig'] = item.executeConfig
}
if(item.recoverConfig){
zxData['recoverConfig'] = item.recoverConfig
}
Object.keys(item).forEach((key) => {
if (/^zx_/.test(key)) {
let keyName = key.substring(3);
zxData[keyName] = item[key];
}
if (/^hf_/.test(key)) {
let keyName = key.substring(3);
hfData[keyName] = item[key];
}
});
if (item.deviceType == 12) {
zxData = this.formatData(zxData);
hfData = this.formatData(hfData);
}
dcData.executeConfig = JSON.stringify(zxData);
dcData.recoverConfig = JSON.stringify(hfData);
dcArr.push(dcData);
});
let reqData = {
operationType: value, //1- 2-
dcEmergencyPlans: {
id: this.planId,
dcExecuteAction: dcArr,
},
dcEvent: {
id: this.detailData.id,
eventType: this.detailData.eventType,
stakeMark: this.detailData.stakeMark,
subclass: this.detailData.subclass,
direction: this.detailData.direction == "菏泽方向" ? "1" : "3",
},
};
console.log("reqData", reqData);
return;
request({
url: "/business/plans/event/confirm",
method: "post",
data: reqData,
})
.then((result) => {
if (result.code != 200) return Message.error(result?.msg);
Message.success("提交成功");
})
.catch(() => {
Message.error("提交失败");
});
},
},
};
</script>
<style lang="scss" scoped>
.DeviceControl {
::v-deep {
.content {
display: flex;
flex-direction: column;
}
}
.container {
flex: 1;
min-height: 300px;
overflow-y: auto;
.rowBlock {
background-color: #296887;
padding: 5px 10px;
margin-bottom: 10px;
}
}
.foot {
display: flex;
height: "100px";
justify-content: space-evenly;
margin-top: 10px;
.special-button {
width: 100px;
cursor: pointer;
.icon {
background-repeat: no-repeat;
background-size: 100% 100%;
width: 20px;
height: 20px;
transition: all 0.3s linear;
}
}
}
}
</style>

36
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DeviceControl/index.vue

@ -71,7 +71,8 @@ export default {
let data = result.data;
if (data.length == 0) {
this.tableData = [{ ...defaultTableInfo }];
return Message.warning("该事件暂无处置预案");
return;
// return Message.warning("");
}
let dcExecuteAction = data[0].dcExecuteAction || [];
this.planId = data[0].id;
@ -99,7 +100,6 @@ export default {
this.tableData =
dcArr.length == 0 ? [{ ...defaultTableInfo }] : dcArr;
console.log("tableData", this.tableData);
})
.catch((err) => {
console.log(err);
@ -138,8 +138,8 @@ export default {
if(this.tableData[index].isDefault !== true){
param['dcExecuteAction']['executeConfig'] = JSON.stringify(this.tableData[index]['executeConfig'])
param['dcExecuteAction']['recoverConfig'] = JSON.stringify(this.tableData[index]['recoverConfig'])
}
request({
url: `business/plans/list/event/emergencyPlans`,
method: "post",
@ -222,11 +222,34 @@ export default {
if (item.devList && item.devList.length > 0) {
dcData.deviceList = item.devList.join(",");
}
dcData.executeConfig = JSON.stringify(item.executeConfig);
dcData.recoverConfig = JSON.stringify(item.recoverConfig);
if(item.deviceType === 2 || item.deviceType === 5){
dcData.executeConfig = JSON.stringify(item.executeConfig);
dcData.recoverConfig = JSON.stringify(item.recoverConfig);
} else {
let zxData = {},
hfData = {};
Object.keys(item).forEach((key) => {
if (/^zx_/.test(key)) {
let keyName = key.substring(3);
zxData[keyName] = item[key];
}
if (/^hf_/.test(key)) {
let keyName = key.substring(3);
hfData[keyName] = item[key];
}
});
if (item.deviceType == 12) {
zxData = this.formatData(zxData);
hfData = this.formatData(hfData);
}
dcData.executeConfig = JSON.stringify(zxData);
dcData.recoverConfig = JSON.stringify(hfData);
}
dcArr.push(dcData);
});
let reqData = {
operationType: value, //1- 2-
dcEmergencyPlans: {
@ -241,8 +264,6 @@ export default {
direction: this.detailData.direction == "菏泽方向" ? "1" : "3",
},
};
console.log("reqData", reqData);
request({
url: "/business/plans/event/confirm",
method: "post",
@ -287,6 +308,7 @@ export default {
justify-content: space-evenly;
margin-top: 10px;
.special-button {
cursor: pointer;
width: 100px;
.icon {
background-repeat: no-repeat;

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DispatchLiaison/StatsDialogVisible/index.vue

@ -163,7 +163,7 @@ export default {
this.form.vehicle = newVehiclesMap;
postUpdateSource(this.form).then((res) => {
this.$emit("handleRefresh");
this.$emit("handleRefresh",'reload');
});
},
},

10
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DispatchLiaison/index.vue

@ -83,7 +83,7 @@ export default {
Descriptions,
StatsDialogVisible,
},
inject: ["provideData"],
inject: ["provideData","reload"],
data() {
return {
provideDetail: null,
@ -107,12 +107,14 @@ export default {
},
methods: {
handleClick() {
this.$parent.$refs['CrowdnessIndicatorRankings'][0].active = []
this.statsDialogVisible = true;
},
handleClose() {
this.statsDialogVisible = false;
},
getCommandDispatch() {
getCommandDispatch(type='init') {
console.log(type,'---------')
let data = {
stakeMark: this.provideDetail.stakeMark,
id: this.provideDetail.id,
@ -160,6 +162,10 @@ export default {
// this.vehiclesChoice.push(element);
this.vehiclesChoice.push(element.resourceId);
});
this.statsDialogVisible = false;
if(type !== 'init'){
this.reload();
}
});
},
getVehicleTypeList() {

26
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/index.vue

@ -104,7 +104,7 @@
:on-error="handleUploadError"
accept=".jpg,.jpeg,.png,.mp4"
>
<el-button class="input">{{ imageName }}</el-button>
<div class="input">{{ imageName }}</div>
</el-upload>
<ElSelect
:disabled="detailData.eventState == 2"
@ -166,7 +166,7 @@ import { provideMixin } from "./../../mixin";
export default {
name: "DisposalProcess",
mixins: [provideMixin],
inject: ["adpScale", "provideData"],
inject: ["adpScale", "provideData","reload"],
// mixins: [provideMixin],
components: {
Card,
@ -207,6 +207,9 @@ export default {
},
watch: {
processId(newVlaue, oldValue) {
if(newVlaue === ''){
this.processName = ''
}
this.options.forEach((element) => {
if (newVlaue == element.nodeNode) {
if (element.commonPhrases != "undefined") {
@ -241,6 +244,7 @@ export default {
return (1 / this.adpScale.scaleX) * distance;
},
handleFullHeight() {
this.$parent.$refs['CrowdnessIndicatorRankings'][0].active = []
this.isFullHeight = !this.isFullHeight;
this.$emit("fullHeight", "CrowdnessIndicatorRankings");
@ -249,7 +253,6 @@ export default {
//
getProcess() {
getProcessNode(this.eventId).then((result) => {
console.log("处置过程节点", result);
if (result.code != 200) return [];
this.timeLine1List = result.data.map((item) => {
return {
@ -268,9 +271,7 @@ export default {
//
async disposalRecords(id) {
let processIdMap = {};
console.log("canshu ", id);
getProcessList(id).then((result) => {
console.log("处置过程记录", result);
this.timeLine2List = result.map((item) => {
processIdMap[item.processId] = new Date(
item.operationTime
@ -312,6 +313,7 @@ export default {
},
//
onSubmit() {
if (this.context || this.imageUrl) {
let content = "";
if (this.testRadio == "input") {
@ -319,7 +321,9 @@ export default {
} else {
content = this.imageUrl;
}
console.log(this.imageUrl, this.fileType,'------------')
let type = this.containsArrayElement(this.imageUrl, this.fileType);
console.log(type,'$$$')
let data = {
eventId: this.eventId,
processId: this.processId,
@ -340,9 +344,10 @@ export default {
this.context = "";
this.imageUrl = "";
this.imageName = "点击上传";
this.fileType = [];
this.text = "";
this.$message.success("发送成功");
this.reload();
});
} else {
this.$message.warning("调度指令不能为空");
@ -362,6 +367,7 @@ export default {
postCompleteEvent(data).then((result) => {
if (result.code != 200) return [];
this.$message.success("事件解除成功");
this.reload();
});
})
.catch(() => {});
@ -379,6 +385,7 @@ export default {
postNoSkipClear(data).then((result) => {
if (result.code != 200) return [];
this.$message.success("操作成功");
this.reload();
});
})
.catch(() => {});
@ -436,10 +443,15 @@ export default {
background-color: #0d5f79;
color: #f4f4f4;
border-radius: 2px;
line-height: 5px;
line-height: 26px;
height: 26px;
font-size: 14px;
border: 0;
padding: 0px 5px;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
}
</style>

63
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/components/EditEventInformationDialog/data.js

@ -662,7 +662,7 @@ export const configList = {
type: "RadioGroup",
isAlone: true,
required: true,
default: "1",
default: 1,
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
@ -762,12 +762,12 @@ export const configList = {
type: "RadioGroup",
isAlone: true,
required: true,
default: "1",
default: 1,
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "1",
key: 1,
label: "主线关闭",
},
],
@ -779,7 +779,7 @@ export const configList = {
type: "RadioGroup",
isAlone: true,
required: true,
default: "1",
default: 1,
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
@ -885,7 +885,7 @@ export const configList = {
},
freeway,
directionName,
PresetFormItems.emptyLine,
// PresetFormItems.emptyLine,
{
label: "出入口:",
key: "dcEventTrafficControl.exitsInlets",
@ -963,7 +963,6 @@ export const configList = {
// console.log("zd", zd);
formList.forEach((it) => {
if (it.key == "dcEventTrafficControl.rampId") {
console.log("it", it);
it.options.options = zd;
}
});
@ -1168,7 +1167,7 @@ export const configList = {
return false;
},
},
PresetFormItems.startTime,
{...PresetFormItems.startTime,...{key:'startTime'}},
PresetFormItems.expectedEndTime,
PresetFormItems.remark,
PresetFormItems.source,
@ -1246,40 +1245,39 @@ export const configList = {
type: "RadioGroup",
isAlone: true,
required: true,
// default: "1",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "1",
key:1,
label: "收费站广场拥堵导致出口压车",
},
{
key: "2",
key: 2,
label: "收费站设备故障",
},
{
key: "3",
key: 3,
label: "地方道路原因",
},
{
key: "4",
key: 4,
label: "省内非集团所辖高速原因",
},
{
key: "5",
key: 5,
label: "集团所辖道路拥堵",
},
{
key: "6",
key: 6,
label: "集团所辖枢纽立交异常导致主线压车",
},
{
key: "7",
key: 7,
label: "路侧起火",
},
{
key: "8",
key: 8,
label: "备注项添加",
},
],
@ -1446,16 +1444,16 @@ export const configList = {
type: "RadioGroup",
isAlone: true,
required: true,
default: "1",
default: 1,
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "1",
key: 1,
label: "单点",
},
{
key: "2",
key: 2,
label: "多点",
},
],
@ -1723,16 +1721,16 @@ export const configList = {
type: "RadioGroup",
isAlone: true,
required: true,
default: "1",
default: 1,
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "1",
key: 1,
label: "养护施工类施工",
},
{
key: "2",
key: 2,
label: "工程建设类施工",
},
],
@ -1869,16 +1867,16 @@ export const configList = {
key: "dcEventConstruction.controlMode",
type: "RadioGroup",
required: true,
default: "1",
default:1,
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "1",
key:1,
label: "封闭",
},
{
key: "2",
key: 2,
label: "不封闭",
},
],
@ -1902,16 +1900,16 @@ export const configList = {
type: "RadioGroup",
isAlone: false,
required: true,
default: "1",
default: 1,
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "1",
key: 1,
label: "车道",
},
{
key: "2",
key: 2,
label: "其他",
},
],
@ -1929,20 +1927,20 @@ export const configList = {
type: "RadioGroup",
isAlone: true,
required: true,
default: "1",
default: 1,
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "1",
key: 1,
label: "通行受限",
},
{
key: "2",
key: 2,
label: "车辆谨慎慢行",
},
{
key: "3",
key: 3,
label: "车辆正常通行",
},
],
@ -2016,7 +2014,6 @@ export const configList = {
label: "出入口:",
key: "dcEventConstruction.exitsInlets",
type: "RadioGroup",
isAlone: false,
required: true,
default: "2",
options: {

27
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/components/EditEventInformationDialog/index.vue

@ -49,8 +49,7 @@ export default {
formConfigList: [],
submitting: false,
fData: {},
resultEventData: {},
// eventId: "1a91d65cc31f4a9d90122888edb31043",
infoData: {},
roads: [],
direction: [],
lwss: [],
@ -72,16 +71,8 @@ export default {
mounted() {},
methods: {
async initData() {
let infoData = await request({
url: `/dc/system/event/eventSubclass/${this.detailData.id}`, //
method: "get",
});
console.log('-----',infoData)
if (infoData.code != 200) return Message.error(infoData?.msg);
this.resultEventData = { ...infoData.data };
let info = infoData.data;
this.infoData = { ...this.detailData };
let info = { ...this.detailData };
if (typeof info.stakeMark == "string") {
let numbers = info.stakeMark.match(/\d+/g).map(String);
info.stakeMark = numbers;
@ -130,7 +121,7 @@ export default {
this.$refs.FormConfigRef.validate().then((formData) => {
this.submitting = true;
let eventType = this.resultEventData.eventType;
let eventType = this.infoData.eventType;
formData.eventType = eventType;
if (
(eventType == 1 || eventType == 2) &&
@ -141,6 +132,7 @@ export default {
if(formData.direction){
formData.direction = formData.direction == '济南方向' ? '3' : '1'
}
formData.roadId = 1;
if (
eventType == 3 &&
formData.dcEventTrafficControl.facilityId instanceof Array
@ -172,8 +164,8 @@ export default {
// console.log('formData', {
// ...formData,
// id: this.resultEventData.id,
// eventState: this.resultEventData.eventState,
// id: this.infoData.id,
// eventState: this.infoData.eventState,
// stakeMark: (stakeMark && stakeMark[0] != null) ? ((stakeMark && stakeMark.length > 0) ? ('K' + stakeMark[0].padStart(3,'0') + '+' + stakeMark[1]) : '') : '',
// })
// this.submitting = false;
@ -183,8 +175,8 @@ export default {
method: "put",
data: {
...formData,
id: this.resultEventData.id,
eventState: this.resultEventData.eventState,
id: this.infoData.id,
eventState: this.infoData.eventState,
stakeMark:
stakeMark && stakeMark[0] != null
? stakeMark && stakeMark.length > 0
@ -220,6 +212,7 @@ export default {
.form {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
}
.footer {

12
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/index.vue

@ -1,13 +1,13 @@
<template>
<Card class="EventInformation" title="事件信息">
<template #title-suffix>
<ButtonGradient class="title-button" v-if="detailData.eventState != 2">
搜索
</ButtonGradient>
<!-- <ButtonGradient class="title-button" v-if="detailData.eventState != 2">
查看 //
</ButtonGradient> -->
<ButtonGradient
v-if="detailData.eventState != 2"
class="title-button"
@click.native="editEventInformationDialogVisible = true"
@click.native="onEdit"
>
编写
</ButtonGradient>
@ -109,6 +109,10 @@ export default {
};
},
methods: {
onEdit(){
this.$parent.$refs['CrowdnessIndicatorRankings'][0].active = []
this.editEventInformationDialogVisible = true
},
closeDialog() {
this.editEventInformationDialogVisible = false;
},

4
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/RealTimeVideo/index.vue

@ -1,6 +1,6 @@
<template>
<Card class="RealTimeVideo" title="实时视频">
<div class="item">
<!-- <div class="item">
<Video
v-if="detailData.stakeMark"
class="item-video"
@ -19,7 +19,7 @@
:showHeader="false"
/>
<span>菏泽方向</span>
</div>
</div> -->
</Card>
</template>

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

@ -113,7 +113,7 @@ export default {
.then((result) => {
// console.log(result,'eventPublishChannels')
})
}, 500);
}, 1000);
},
async handleSubmit() {

644
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/TrafficControl/components/AddControlEventInfoDialog/data.js

@ -1,644 +0,0 @@
import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js";
import request from "@/utils/request";
import { Message } from "element-ui";
export const tabConfigList = [
{
key: "TrafficControl",
label: "交通管制",
formConfig: {
formOptions: {
column: 2,
},
list: [
{
label: "管制设施:",
key: "eventSubclass",
type: "RadioGroup",
isAlone: true,
required: true,
default: "3-1",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "3-1",
label: "主线",
},
{
key: "3-2",
label: "收费站",
},
{
key: "3-3",
label: "立交",
},
{
key: "3-4",
label: "服务区",
},
{
key: "3-5",
label: "其他",
},
],
},
ons: {
input(value, ...args) {
const { data, formList } = args.slice(-1)[0];
const classify = formList.find(
(it) => it.key == "dcEventTrafficControl.classify"
);
let ss = {
"3-1": "主线",
"3-2": "收费站",
"3-3": "立交",
"3-4": "服务区",
};
let ad = {
1: [
{
key: "1",
label: `${ss[value]}关闭`,
},
],
2: [
{
key: "2",
label: "主线限行",
},
{
key: "3",
label: "主线间隔放行",
},
{
key: "4",
label: "主线并道",
},
{
key: "5",
label: "主线限速",
},
],
};
classify.options.options =
ad[data.dcEventTrafficControl.controlType];
if (data.dcEventTrafficControl) {
data.dcEventTrafficControl.facilityId = null;
}
let facilityType = 1;
if (value == "3-2") {
facilityType = 1;
} else if (value == "3-3") {
facilityType = 4;
} else if (value == "3-4") {
facilityType = 6;
}
if (value && value != "3-1") {
//路网设施 1 收费站 2 桥梁 3 互通立交 4 枢纽立交 5 隧道 6 服务区
request({
url: `/business/facility/query?facilityType=${facilityType}`,
method: "get",
})
.then((result) => {
if (result.code != 200) return Message.error(result?.msg);
let lwss = [];
result.data.forEach((it) =>
lwss.push({ key: it.id, label: it.facilityName })
);
formList.forEach((it) => {
if (it.key == "dcEventTrafficControl.facilityId") {
it.options.options = lwss;
}
});
})
.catch((err) => {
console.log("err", err);
Message.error("查询失败1", err);
});
}
},
},
},
{
label: "管制分类:",
key: "dcEventTrafficControl.controlType",
type: "RadioGroup",
isAlone: true,
required: true,
default: "1",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: 1,
label: "封闭",
},
{
key: 2,
label: "限行",
},
],
},
ons: {
input(value, ...args) {
const { data, formList } = args.slice(-1)[0];
const classify = formList.find(
(it) => it.key == "dcEventTrafficControl.classify"
);
const measure = formList.find(
(it) => it.key == "dcEventTrafficControl.measure"
);
let ss = {
"3-1": "主线",
"3-2": "收费站",
"3-3": "立交",
"3-4": "服务区",
"3-5": "其他",
};
let ad = {
1: [
{
key: "1",
label: `${ss[data.eventSubclass]}关闭`,
},
],
2: [
{
key: "2",
label: "主线限行",
},
{
key: "3",
label: "主线间隔放行",
},
{
key: "4",
label: "主线并道",
},
{
key: "5",
label: "主线限速",
},
],
};
let cs = {
1: [
{
value: "1",
label: "临时关闭",
},
],
2: [
{
value: "2",
label: "限行车辆",
},
{
value: "3",
label: "限行车道",
},
{
value: "4",
label: "限行车道且限行车辆",
},
{
value: "5",
label: "间隔放行",
},
{
value: "6",
label: "并道行驶",
},
{
value: "7",
label: "限速",
},
],
};
measure.options.options = cs[value];
classify.options.options = ad[value];
},
},
},
{
label: "分类:",
key: "dcEventTrafficControl.classify",
type: "RadioGroup",
isAlone: true,
required: true,
default: "1",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "1",
label: "主线关闭",
},
],
},
},
{
label: "分类原因:",
key: "dcEventTrafficControl.controlCause",
type: "RadioGroup",
isAlone: true,
required: true,
default: "1",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "1",
label: "车流量大",
},
{
key: "2",
label: "交通事故",
},
{
key: "3",
label: "恶劣天气",
},
{
key: "4",
label: "施工",
},
{
key: "5",
label: "警备任务",
},
{
key: "6",
label: "其他",
},
],
},
ons: {
input(value, ...args) {
const { formList } = args.slice(-1)[0];
const config = formList.find(
(it) => it.key == "dcEventTrafficControl.causeType"
);
let ad = {
3: [
{
value: "3-1",
label: "雨",
},
{
value: "3-2",
label: "雪",
},
{
value: "3-3",
label: "雾",
},
{
value: "3-4",
label: "道路积水",
},
{
value: "3-5",
label: "道路湿滑",
},
{
value: "3-6",
label: "道路结冰",
},
{
value: "3-7",
label: "沙尘暴",
},
],
4: [
{
value: "4-1",
label: "专项工程施工",
},
{
value: "4-2",
label: "改扩建工程施工",
},
{
value: "4-3",
label: "其他施工",
},
],
};
config.options.options = ad[value];
},
},
},
PresetFormItems.isInTunnel,
{
label: "原因类型:",
key: "dcEventTrafficControl.causeType",
type: "select",
options: {
options: [],
},
visible: (data) => {
if (
data?.dcEventTrafficControl.controlCause == "3" ||
data?.dcEventTrafficControl.controlCause == "4"
) {
return true;
}
return false;
},
},
PresetFormItems.freeway,
PresetFormItems.direction,
PresetFormItems.emptyLine,
{
label: "出入口:",
key: "dcEventTrafficControl.exitsInlets",
type: "RadioGroup",
isAlone: true,
required: true,
default: "2",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "1",
label: "出口",
},
{
key: "2",
label: "入口",
},
],
},
visible: (data) => {
if (data?.eventSubclass == "3-2" || data?.eventSubclass == "3-4") {
return true;
}
return false;
},
},
{
label: "收费站:",
key: "dcEventTrafficControl.facilityId",
type: "select",
isAlone: false,
required: true,
options: {
options: [],
multiple: true,
},
visible: (data) => {
if (data?.eventSubclass == "3-2") {
return true;
}
return false;
},
},
{
label: "立交桥:",
key: "dcEventTrafficControl.facilityId",
type: "select",
isAlone: false,
required: true,
options: {
options: []
},
visible: (data) => {
if (data?.eventSubclass == "3-3") {
return true;
}
return false;
},
ons: {
change(value, ...args) {
const { formList } = args.slice(-1)[0];
//匝道
request({
url: `/system/ramp/listAll?facilityId=${value}`,
method: "get",
})
.then((result) => {
if (result.code != 200) return Message.error(result?.msg);
let zd = [];
result.rows.forEach((it) =>
zd.push({ key: it.id, label: it.rampName })
);
// console.log("zd", zd);
formList.forEach((it) => {
if (it.key == "dcEventTrafficControl.rampId") {
console.log("it", it);
it.options.options = zd;
}
});
})
.catch((err) => {
console.log("err", err);
Message.error("查询失败3", err);
});
},
},
},
{
label: "匝道:",
key: "dcEventTrafficControl.rampId",
type: "select",
isAlone: false,
required: true,
options: {
options: [],
multiple: true,
},
visible: (data) => {
if (data?.eventSubclass == "3-3") {
return true;
}
return false;
},
},
{
label: "服务区:",
key: "dcEventTrafficControl.facilityId",
type: "select",
isAlone: false,
required: true,
options: {
options: [],
},
visible: (data) => {
if (data?.eventSubclass == "3-4") {
return true;
}
return false;
},
},
{
label: "措施:",
required: true,
key: "dcEventTrafficControl.measure",
type: "select",
options: {
options: [
{
value: "1",
label: "临时关闭",
},
],
},
},
{
label: "限制类型:",
key: "dcEventTrafficControl.limitedType",
required: true,
type: "select",
options: {
options: [
{ key: "1", label: "只允许" },
{ key: "2", label: "禁止" },
],
},
visible: (data) => {
if (data?.dcEventTrafficControl.controlType == "2") {
return true;
}
return false;
},
},
{
label: "车辆类型:",
key: "dcEventTrafficControl.vehicleType",
required: true,
type: "select",
options: {
options: [
{ key: "1", label: "10座以下客车" },
{ key: "2", label: "10座以下客车(间隔放行)" },
{ key: "3", label: "19座以上客车" },
{ key: "4", label: "一型客车(不含面包车)" },
{ key: "5", label: "两客一危" },
{ key: "6", label: "三类以上班线客车" },
{
key: "7",
label: "四轴及四轴以上货车(运送生鲜果蔬、抗疫物资车辆除外)",
},
{ key: "8", label: "三轴及以上(含三轴)货车" },
{ key: "9", label: "3轴以上货车(不含危险品运输车)" },
{ key: "10", label: "3轴以上货车" },
{ key: "11", label: "四轴及以上(含四轴)货车" },
{ key: "12", label: "4轴以上货车(不含危险品运输车)" },
{ key: "13", label: "4轴以上货车" },
{ key: "14", label: "4轴以下货车" },
{ key: "15", label: "57座以上客车" },
{ key: "16", label: "五轴及以上货车" },
{ key: "17", label: "5轴以上货车" },
{ key: "18", label: "5轴以上货车(不含危险品运输车)" },
{ key: "19", label: "5轴以下货车" },
{ key: "20", label: "6座以上客车" },
{ key: "21", label: "6座以上面包车" },
{ key: "22", label: "7座以上客车" },
{ key: "23", label: "7座以下客车" },
{ key: "24", label: "8座以上客车" },
// 25- 8座以下客车
// 26- 8座以下客车(间隔放行)
// 27- 9座以上客车
// 28- 半挂货车
// 29- 车辆(不含10座以下客车)
// 30- 车辆(不含8座以下客车)
// 31- 车辆(不含小轿车)
// 32- 不可解体物品超限运输车
// 33- 不可解体物品运输车
// 34- 超长超宽超高车辆
// 35- 车辆运输车
// 36- 超限运输车
// 37- 大型货车(不含危险品运输车)
// 38- 大型货车
// 39- 大型客车
// 40- 大中型货车
// 41- 已安装ETC的客车
// 42- 已安装ETC的小型客车
// 43- 罐车
// 44- 货车
// 45- 黄牌货车
// 46- 黄牌货车(不含危险品运输车)
// 47- 黄牌货车(运送民生物资车辆除外)
// 48- 核载总质量4.5吨以上货车(运送民生物资车辆除外)
// 49- 客车(包括小轿车)
// 50- 客运车辆
// 51- 蓝牌货车
// 52- 旅游包车
// 53- 面包车
// 54- 皮卡
// 55- 全部车型
// 56- (未安装ETC)车辆
// 57- 外埠号牌车辆
// 58- 危化品运输车
// 59- 危险物品运输车
// 60- 武装押运车辆
// 61- 小轿车
// 62- 厢式货车
// 63- 小型车辆
// 64- (已安装ETC)车辆
// 65- 已安装ETC的货车
// 66- 押款车辆
// 67- 疫情防控物资运输车辆
// 68- 运输剧毒、放射性物品车辆
// 69- 运输枪支弹药、爆炸、剧毒、放射性物品车辆
// 70- 营运客车
// 71- 重型货车
// 72- 核载总质量1.8吨以上货车
// 73- 中型货车
// 74- 小型车辆限速80公里/小时、大型车辆限速70
],
},
visible: (data) => {
if (data?.dcEventTrafficControl.controlType == "2") {
return true;
}
return false;
},
},
{
label: "桩号:",
key: "stakeMark",
required: true,
type: "MultipleLabelItem",
options: {
options: [
{
prefix: {
text: "K",
style: {
color: "#3DE8FF",
},
},
key: "stakeMark[0]",
},
{
prefix: {
text: "+",
style: {
color: "#3DE8FF",
},
},
key: "stakeMark[1]",
},
],
},
visible: (data) => {
if (data?.eventSubclass == "3-1") {
return true;
}
return false;
},
},
PresetFormItems.startTime,
PresetFormItems.expectedEndTime,
PresetFormItems.remark,
PresetFormItems.source,
],
},
},
];

73
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/TrafficControl/components/AddControlEventInfoDialog/index.vue

@ -2,7 +2,6 @@
<Dialog v-model="modelVisible" title="新增交通管制事件" width="1100px" top="10%">
<div class="AddControlEventInfoDialog">
<Form class="form" ref="FormConfigRef" :formList="formConfigList" v-model="fData" labelWidth="120px" />
<div class="footer">
<Button style="background: #c9c9c9" @click.native="modelVisible = false">关闭</Button>
<Button :loading="submitting" @click.native="onSubmit">保存</Button>
@ -16,7 +15,9 @@ import Dialog from "@screen/components/Dialog/index";
import Form from "@screen/components/FormConfig";
import Button from "@screen/components/Buttons/Button.vue";
import request from "@/utils/request";
import { tabConfigList } from "./data.js";
import { configList } from "../../../EventInformation/components/EditEventInformationDialog/data.js";
import { Message } from 'element-ui'
export default {
name: "AddControlEventInfoDialog",
@ -38,8 +39,7 @@ export default {
data() {
return {
formConfigList: [],
fData: {},
eventId: '',
fData: {dcEventTrafficControl:{}},
submitting: false,
roads: [],
direction: [],
@ -63,49 +63,8 @@ export default {
},
methods: {
async initData() {
this.formConfigList = tabConfigList[0].formConfig.list
await Promise.all([
//
request({
url: `/business/road/query`,
method: "get",
})
.then((result) => {
if (result.code != 200) return Message.error(result?.msg);
this.roads = []
result.data.forEach((it) => {
this.roads.push({ key: it.id, label: it.roadName });
});
})
.catch((err) => {
Message.error("查询失败4", err);
}),
//
request({
url: `/system/dict/data/type/iot_event_direction`,
method: "get",
})
.then((result) => {
if (result.code != 200) return Message.error(result?.msg);
this.direction = []
result.data.forEach((it) => {
this.direction.push({ key: it.dictValue, label: it.dictLabel });
});
})
.catch((err) => {
Message.error("查询失败5", err);
}),
]);
this.formConfigList.forEach((it) => {
if (it.key == "direction") {
it.options.options = this.direction;
}
if (it.key == "roadId") {
it.options.options = this.roads;
}
});
// console.log('eventSubclass',this.eventSubclass,this.controlType)
this.formConfigList =configList['交通管制'];
this.fData.eventSubclass = this.eventSubclass;
this.fData.dcEventTrafficControl.controlType = this.controlType;
},
@ -118,16 +77,16 @@ export default {
formData.dcEventTrafficControl.facilityIds = ids
formData.dcEventTrafficControl.facilityId = null
}
if (formData.dcEventTrafficControl.rampId instanceof Array) {
formData.dcEventTrafficControl.rampId = formData.dcEventTrafficControl.rampId.join(',')
}
if(formData.direction){
formData.direction = formData.direction == '济南方向' ? '3' : '1'
}
formData.roadId = 1;
let stakeMark = formData.stakeMark;
// console.log('formData', {
// ...formData,
// eventType: 3,
// stakeMark: (stakeMark && stakeMark[0] != null) ? ((stakeMark && stakeMark.length > 0) ? ('K' + stakeMark[0] + '+' + stakeMark[1]) : '') : '',
// })
// this.submitting = false;
// return;
console.log(formData)
request({
url: `/dc/system/event`,
method: "post",
@ -137,7 +96,7 @@ export default {
eventState:1,
eventType: 3,
stakeMark: stakeMark && stakeMark[0] != null
? stakeMark && stakeMark.length > 0 ? "K" + stakeMark[0] + "+" + stakeMark[1] : "" : "",
? stakeMark && stakeMark.length > 0 ? "K" + stakeMark[0].padStart(3,'0') + "+" + stakeMark[1].padStart(3,'0') : "" : "",
},
})
.then((result) => {
@ -160,7 +119,7 @@ export default {
<style lang="scss" scoped>
.AddControlEventInfoDialog {
gap: 9px;
width: 1050px;
width: 100%;
height: 560px;
max-height: 900px;
display: flex;

1
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/TrafficControl/index.vue

@ -64,6 +64,7 @@ export default {
},
methods: {
onSubmit(value) {
this.$parent.$refs['CrowdnessIndicatorRankings'][0].active = []
this.controlType = value;
this.addControlEventInfoDialogVisible = true;
},

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

@ -45,6 +45,7 @@ export default {
provide() {
return {
provideData: this.provideData,
reload:this.test,
};
},
data() {
@ -75,6 +76,9 @@ export default {
this.getDetail();
},
methods: {
test(){
console.log('-------------')
},
getDetail() {
// -
request({
@ -84,7 +88,7 @@ export default {
.then((result) => {
if (result.code != 200) return;
this.provideData.detail = result.data;
console.log("这里是事件详情", this.provideData.detail);
console.log("#############", this.provideData.detail);
if (
["设备设施隐患", "非法上路", "施工建设", "服务区异常"].includes(
result.data.eventName

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

@ -249,8 +249,6 @@ export default {
},
];
}
// console.log('this.tableData', this.tableData)
});
},
onAdd() {

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

@ -1,7 +1,7 @@
<template>
<Dialog v-model="modelVisible" title="事件详情" width="890px" top="11%">
<div class="EventDetail" :style="{
height: activeName == '-1' || activeName == '0' ? '380px' : '698px',
height: activeName == '-1' || activeName == '0' ? '480px' : '698px',
}">
<Form ref="FormConfigRef" :formList="formList" :dFormData="formData" label-width="100px" />
@ -37,12 +37,12 @@
}
" @close="onCloseAddNew" />
<template #footer>
<Button v-if="activeName == '-1' || activeName == '0'" style="padding: 0 24px"
<template #footer >
<Button v-if="activeName == '-1' || activeName == '0'" style="margin-top: 30px;padding: 0 24px"
@click.native="onDelete">误报</Button>
<Button :style="{ backgroundColor: '#C9C9C9', padding: '0 24px' }"
<Button :style="{marginTop: '30px', backgroundColor: '#C9C9C9', padding: '0 24px' }"
@click.native="modelVisible = false">取消</Button>
<Button v-if="activeName == '-1' || activeName == '0'" style="padding: 0 24px"
<Button v-if="activeName == '-1' || activeName == '0'" style="margin-top: 30px;padding: 0 24px"
@click.native="onSubmit">确认</Button>
</template>
</Dialog>
@ -280,6 +280,8 @@ export default {
this.modelVisible = false;
this.$emit("queryData", true);
//
this.$root.$emit('refresh-event');
//
this.$root.$emit('delete-event');
});
})
@ -365,6 +367,7 @@ export default {
this.modelVisible = false;
this.$emit("queryData", true);
this.$root.$emit('refresh-event');
});
} else if (this.activeName == '0') {
request({
@ -377,11 +380,11 @@ export default {
this.modelVisible = false;
this.$emit("queryData", true);
this.$root.$emit('refresh-event');
});
} else {
let eventId = this.formData.id;
this.modelVisible = false;
setTimeout(() => {
this.$router.push(`/control/event/commandDispatch?eventId=${eventId}`);
// this.$router.push(`/control/event/commandDispatch`);

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

@ -134,9 +134,15 @@ export default {
};
},
created() {
//
this.$root.$on('refresh-event-list', this.getData);
this.searchFormList = gjSearchFormList;
this.getData();
},
beforeDestroy() {
//
this.$root.$off('refresh-event-list', this.getData);
},
methods: {
handleSelect(activeName) {
this.activeName = activeName;

46
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/addAndEditDialog/index.vue

@ -12,7 +12,7 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="细分类型:" prop="triggerMechanism">
<el-form-item required label="细分类型:" prop="triggerMechanism">
<el-select v-model="formData.triggerMechanism" placeholder="请选择细分类型">
<el-option v-for="item in mechanismOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
@ -231,9 +231,12 @@ export default {
return this.deviceData;
},
changeEventType(value = 1) {
console.log('changeEventType', value)
this.mechanismOptions = eventSubClassMap[1][value];
this.formData.triggerMechanism = ''
if(this.mechanismOptions.length > 0){
this.formData.triggerMechanism = this.mechanismOptions[0].value
} else {
this.formData.triggerMechanism = ''
}
},
handleChange() { },
onAdd() {
@ -303,6 +306,43 @@ export default {
dcArr.push(dcData);
})
//
let errorNumber = -1;
let errorMessage = '';
for(let i = 0; i < dcArr.length; i++){
if(dcArr[i].searchRule === 1 && ( !dcArr[i].deviceList || dcArr[i].deviceList==='')){
errorNumber = i;
errorMessage = '指定设备资源未选择设备'
break;
}
let zx = JSON.parse(dcArr[i].executeConfig);
if(!zx.operationType){
errorNumber = i;
errorMessage = '未选择执行操作'
break;
}
if(zx.operationType === 1 && !zx.dcInfoBoardTemplate){
errorNumber = i;
errorMessage = '执行操作-自定义发布未选择模版'
break;
}
let hf = JSON.parse(dcArr[i].recoverConfig);
if(!hf.operationType){
errorNumber = i;
errorMessage = '未选择恢复操作'
break;
}
if(hf.operationType === 1 && !hf.dcInfoBoardTemplate){
errorNumber = i;
errorMessage = '恢复操作-自定义发布未选择模版'
break;
}
}
console.log(dcArr)
if(errorNumber !== -1){
this.$message.error(`${errorNumber+1}条事件异常:${errorMessage}`)
return;
}
if (this.dialogType == 1) {
//
request({

0
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/assets/charts.js → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/assets/charts.js

0
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/assets/shexiangtou.png → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/assets/shexiangtou.png

Before

Width:  |  Height:  |  Size: 678 B

After

Width:  |  Height:  |  Size: 678 B

0
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/components/deviceSummary/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/deviceSummary/index.vue

0
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/components/deviceUptime/assets/charts.js → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/deviceUptime/assets/charts.js

2
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/components/deviceUptime/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/deviceUptime/index.vue

@ -9,7 +9,7 @@
</template>
<script>
import WgtTitle from "../../../../../perception/widgets/title";
import WgtTitle from "../../../../../../perception/widgets/title";
import * as echarts from "echarts";
import chartOptions from "./assets/charts";
let chartsStatistics = chartOptions.options;

0
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/components/monthlyEquipment/EllipseData.vue → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/monthlyEquipment/EllipseData.vue

1
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/components/monthlyEquipment/assets/charts.js → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/monthlyEquipment/assets/charts.js

@ -54,7 +54,6 @@ let options = {
label: {
show: true,
formatter: function (params) {
console.log(params)
return params.value;
},
color: '#fff',

2
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/components/monthlyEquipment/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/monthlyEquipment/index.vue

@ -13,7 +13,7 @@
</template>
<script>
import WgtTitle from "../../../../../perception/widgets/title";
import WgtTitle from "../../../../../../perception/widgets/title";
import EllipseData from "./EllipseData.vue"
export default {
name: 'MonthlyEquipment',

0
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/components/onLineBarCharts/assets/barCharts.js → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/onLineBarCharts/assets/barCharts.js

2
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/components/onLineBarCharts/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/components/onLineBarCharts/index.vue

@ -9,7 +9,7 @@
</template>
<script>
import WgtTitle from "../../../../../perception/widgets/title";
import WgtTitle from "../../../../../../perception/widgets/title";
import * as echarts from "echarts";
import chartOptions from "./assets/barCharts";

158
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/analysis/index.vue

@ -0,0 +1,158 @@
<template>
<div class="statisticAna">
<DeviceSummary
class="deviceSummary"
:dataList="equipments"
></DeviceSummary>
<div class="bottomTabs">
<DeviceUptime :dataList="equipments" class="tabs-lo" />
<OnLineBarCharts :dataList="sectionData" class="tabs-mo" />
</div>
</div>
</template>
<script>
// import barCharts from "./assets/barCharts";
import DeviceUptime from "./components/deviceUptime";
import OnLineBarCharts from "./components/onLineBarCharts";
import DeviceSummary from "./components/deviceSummary";
import {
getSystemStatusType,
getStatusSection,
} from "@/api/MonthlyEquipment";
export default {
name: "statisticAna",
components: {
DeviceUptime,
DeviceSummary,
OnLineBarCharts,
},
data() {
return {
equipSeries: [
"高清网络球形摄像机",
"360°全景摄像机",
"门架式可变信息标志",
"站前悬臂式可变信息标志",
"气象检测器",
"合流区预警系统",
"高清网络枪型固定摄像机",
"智能设备箱",
"毫米波雷达",
"路段语音广播系统",
"护碰撞预警系统",
"激光疲劳唤醒系统",
"180°全景摄像机",
"一类交通量调音站",
"雨棚可变信息标志",
"智能行车诱导系统",
],
equipments: [],
activeName: "first",
interval: null,
sectionData: [],
};
},
provide() {
return {
initDataList: this.initDevice,
};
},
destroyed() {
clearInterval(this.interval);
},
methods: {
getSection() {
getStatusSection().then((res) => {
this.sectionData = res.data;
});
},
initData() {
clearInterval(this.interval);
this.initDevice();
this.interval = setInterval(() => {
if (this.activeName == "first") {
this.initDevice();
}
}, 30000);
},
initDevice() {
getSystemStatusType().then((res) => {
let allList = [];
if(res.data){
let sort = res.data["排序规则"].rule.split(",");
sort.forEach((i) => {
for (let key in res.data) {
let val = res.data[key];
let item = {
title: key,
total: val.sum,
pctOnl: val.sucessRate,
pctOffl: val.failRate,
pctLose: val.lostRate,
sumUseState: val.sumUseState,
};
if (i === key) {
allList.push(item);
}
}
});
}
this.equipments = allList;
});
},
},
async mounted() {
this.getSection();
await this.initData();
},
};
</script>
<style lang="scss" scoped>
.floatEmpty {
position: absolute;
z-index: 100;
// background: rgba($color: #000000, $alpha: 0.2);
left: 0;
top: 0;
right: 0;
bottom: 0;
}
.bottomTabs {
position: relative;
display: inline-flex;
width: 100%;
flex-direction: row;
flex: 1;
.tabs-lo {
display: inline-flex;
width: 670px;
height: 100%;
margin-right: 15px;
}
.tabs-mo {
display: inline-flex;
flex: 1;
}
}
.deviceSummary {
height: 390px;
margin-bottom: 6px;
overflow: hidden;
}
.statisticAna {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
</style>

0
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/data.js → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/data_2024-05-23.js

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

@ -1,436 +1,47 @@
<template>
<div class="statisticAnalysis">
<el-tabs class="full_tab" v-model="activeName" @tab-click="changeTabs">
<el-tabs class="full_tab" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="设备分析" name="first" class="tab_con">
<DeviceSummary
class="deviceSummary"
:dataList="equipments"
></DeviceSummary>
<div class="bottomTabs">
<DeviceUptime :dataList="equipments" class="tabs-lo" />
<OnLineBarCharts :dataList="sectionData" class="tabs-mo" />
<!-- <MonthlyEquipment class="tabs-mo" :dataList="equipments" /> -->
</div>
<StatisticAna />
</el-tab-pane>
<el-tab-pane label="设备查询" name="second" class="tab_con">
<div class="topdiv">
<div class="left-div">
<el-button
size="mini"
icon="el-icon-refresh-left"
class="btnSearch"
@click="onRefreshData"
>刷新</el-button
>
<el-button
size="mini"
icon="el-icon-download"
class="btnSearch"
@click="SystemStatusExport"
>导出Excel</el-button
>
</div>
<div class="right-div">
<InputSearch
:formList="searchFormList"
@handleSearch="handleSearch"
/>
<!-- :placeholder="searchText" -->
</div>
</div>
<div class="queryChart">
<!-- v-if="isEmpty01" -->
<Empty
v-if="isEmpty01"
class="floatEmpty"
:text="emptyText01"
></Empty>
<div ref="queryChart" class="keep-ratio"></div>
</div>
<div style="position: relative; bottom: 15px">
<Empty
v-if="isEmpty02"
class="floatEmpty"
:text="emptyText02"
></Empty>
<el-table
:border="false"
:data="tableData"
height="420"
header-align="left"
empty-text=" "
>
<el-table-column prop="order" label="序号" width="80">
</el-table-column>
<el-table-column
prop="deviceName"
label="设备名称"
></el-table-column>
<el-table-column prop="deviceNo" label="设备桩号">
</el-table-column>
<el-table-column
prop="direction"
label="方向"
class-name="showClass"
>
<template slot-scope="scope">
<span>{{
scope.row.direction == "1"
? "菏泽"
: scope.row.direction == "2"
? "双向"
: "济南"
}}</span>
</template>
</el-table-column>
<el-table-column prop="deviceIp" label="设备IP"> </el-table-column>
<el-table-column prop="production" label="厂家"> </el-table-column>
<!-- <el-table-column prop="model" label="型号"> </el-table-column> -->
<!-- <el-table-column prop="network" label="网段"> </el-table-column> -->
<el-table-column prop="time" label="监测时间"> </el-table-column>
<el-table-column prop="deviceStatus" label="设备状态">
<template slot-scope="scope">
<div v-if="scope.row.deviceStatus == 1">在线</div>
<div v-if="scope.row.deviceStatus == 0" style="color: #bbb">
离线
</div>
</template>
</el-table-column>
</el-table>
<div class="footer">
<Pagination
@current-change="changePage"
width="'100%'"
:page-size="pageSize"
:current-page.sync="pageIndex"
layout="total, sizes, prev, pager, next"
:total="pageTotal"
@size-change="handleSizeChange"
>
</Pagination>
</div>
</div>
<template v-if="sec !== null">
<StatisticQuy />
</template>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import * as echarts from "echarts";
import onlineCharts from "./assets/charts";
// import barCharts from "./assets/barCharts";
import DeviceUptime from "./components/deviceUptime";
import OnLineBarCharts from "./components/onLineBarCharts";
import MonthlyEquipment from "./components/monthlyEquipment";
import DeviceSummary from "./components/deviceSummary";
import {
getSystemStatusList,
getSystemStatusTabList,
getSystemStatusType,
getSystemStatusExport,
getStatusSection,
} from "@/api/MonthlyEquipment";
// import { download } from "../../../../../utils/request.js";
import Pagination from "@screen/components/Pagination.vue";
import InputSearch from "@screen/components/InputSearch/index.vue";
import { searchFormList } from "./data";
import { Loading } from "element-ui";
import { first } from "lodash";
import StatisticAna from "./analysis/index";
import StatisticQuy from "./query/index";
export default {
name: "publicService",
components: {
DeviceUptime,
MonthlyEquipment,
Pagination,
InputSearch,
DeviceSummary,
OnLineBarCharts,
StatisticAna,
StatisticQuy
},
data() {
return {
searchText: "请设置查询条件",
isEmpty01: true,
emptyText01: "请输入参数查询...",
isEmpty02: true,
emptyText02: "请输入参数查询...",
startTime: "",
time: "",
typeQuery: "", //
pageTotal: 0,
pageIndex: 1,
pageSize: 30,
searchFormList,
equipSeries: [
"高清网络球形摄像机",
"360°全景摄像机",
"门架式可变信息标志",
"站前悬臂式可变信息标志",
"气象检测器",
"合流区预警系统",
"高清网络枪型固定摄像机",
"智能设备箱",
"毫米波雷达",
"路段语音广播系统",
"护碰撞预警系统",
"激光疲劳唤醒系统",
"180°全景摄像机",
"一类交通量调音站",
"雨棚可变信息标志",
"智能行车诱导系统",
],
equipments: [],
activeName: "first",
tableData: [],
interval: null,
sectionData: [],
};
},
provide() {
return {
initDataList: this.initDevice,
activeName:'first',
sec:null
};
},
destroyed() {
clearInterval(this.interval);
},
methods: {
getSection() {
getStatusSection().then((res) => {
this.sectionData = res.data;
});
},
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");
this.typeQuery = this.searchFormList[1].options.options[0].value;
clearInterval(this.interval);
if (this.activeName == "first") {
this.initDevice();
} else if (this.activeName == "second") {
this.queryChart = echarts.init(this.$refs["queryChart"]);
this.queryChart.setOption(onlineCharts);
this.initQueryChart();
this.initQueryTable(1);
}
this.interval = setInterval(() => {
if (this.activeName == "first") {
this.initDevice();
}
}, 30000);
},
changePage(page) {
this.initQueryTable(page);
},
formatDate(val) {
let year = val.getFullYear();
var m = val.getMonth() + 1;
var day = val.getDate();
m = m < 10 ? "0" + m : "" + m;
day = day < 10 ? "0" + day : "" + day;
return year + "-" + m + "-" + day + " 00:00:00";
},
onRefreshData() {
if (!this.typeQuery || !this.startTime) {
this.$message({
message: "请先设置查询条件!",
type: "warning",
});
return;
handleClick(e){
if(this.activeName === 'second'){
this.sec='second'
}
this.initQueryChart();
this.initQueryTable(1);
},
handleSearch(data) {
this.typeQuery = data.type;
this.startTime = moment(data.time[0]).format("YYYY-MM-DD HH:mm:ss");
this.time = moment(data.time[1]).format("YYYY-MM-DD HH:mm:ss");
let typeText =
this.searchFormList[1].options.options[this.typeQuery - 1]?.label;
this.searchText = `${moment(this.startTime).format(
"YYYY年MM月DD日"
)}-${moment(this.time).format("YYYY年MM月DD日")},${typeText}`;
this.initQueryChart();
this.initQueryTable(1);
},
changeTabs() {
this.initData();
this.$nextTick(() => {
this.queryChart.resize();
});
},
//
SystemStatusExport() {
let loadingInstance = Loading.service({
fullscreen: true,
background: "#00000052",
text: "文件正在下载...",
});
getSystemStatusExport({
startTime: this.startTime,
time: this.time,
type: this.typeQuery,
})
.then((res) => {
const url = window.URL.createObjectURL(new Blob([res]));
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", "设备统计信息.xlsx");
document.body.appendChild(link);
link.click();
URL.revokeObjectURL(link.href); // URL
document.body.removeChild(link);
link = null;
loadingInstance.close();
})
.catch((err) => {
Message.error(err);
loadingInstance.close();
});
},
initDevice() {
//线线
// if (process.env.NODE_ENV == "development") {
// this.equipments = [];
// this.equipSeries.forEach((item) => {
// this.equipments.push({
// title: item,
// total: Math.floor(Math.random() * 600) + 800,
// pctOnl: Math.floor(100 * Math.random()) + "%",
// pctOffl: "25%",
// pctLose: "15%",
// sumUseState: "90%",
// });
// });
// return;
// }
getSystemStatusType().then((res) => {
let allList = [];
let sort = res.data["排序规则"].rule.split(",");
sort.forEach((i) => {
for (let key in res.data) {
let val = res.data[key];
let item = {
title: key,
total: val.sum,
pctOnl: val.sucessRate,
pctOffl: val.failRate,
pctLose: val.lostRate,
sumUseState: val.sumUseState,
};
if (i === key) {
allList.push(item);
}
// if (key.includes("")) {
// allList.unshift(item);
// } else {
// allList.push(item);
// }
}
});
this.equipments = allList;
});
},
setStatus(id, status) {
if (status == "doing") {
this["isEmpty" + id] = true;
this["emptyText" + id] = "数据查询中...";
} else if (status == "empty") {
this["isEmpty" + id] = true;
this["emptyText" + id] = "暂无数据...";
} else if (status == "finish") {
this["isEmpty" + id] = false;
this["emptyText" + id] = "";
}
},
initQueryChart() {
this.setStatus("01", "doing");
let data = this.searchFormList[1].options.options;
let typeLabel = "";
data.forEach((item) => {
if (item.value == this.typeQuery) {
typeLabel = item.label;
}
});
getSystemStatusList({
startTime: this.startTime,
time: this.time,
type: this.typeQuery,
}).then((res) => {
if (res.code == 200) {
this.setStatus("01", "finish");
let origin = res.data;
let startStamp = +moment(this.startTime).startOf("day").format("x");
let endStamp = +moment(this.time).endOf("day").format("x");
let oneDay = 86400000;
let daysTotal = Math.ceil((endStamp - startStamp) / oneDay);
let queryChartData = [];
let dataX = [];
let data0 = [];
let data1 = [];
for (let i = 0; i < daysTotal; i++) {
let ts = startStamp + i * oneDay;
let date = moment(ts).format("YYYY-M-D");
let val = origin[date] ? +origin[date].replace("%", "") : 0;
dataX.push(moment(ts).format("MM-DD"));
data0.push(val);
data1.push(100);
}
onlineCharts.xAxis.data = dataX;
onlineCharts.series[0].data = data0;
onlineCharts.series[0].name = typeLabel;
onlineCharts.series[1].data = data1;
onlineCharts.yAxis[0].name = "在线率(%)";
this.$nextTick(() => {
this.queryChart.setOption(onlineCharts);
});
// } else {
// this.setStatus("01", "empty");
// }
}
});
},
//
initQueryTable(pageIndex) {
this.setStatus("02", "doing");
getSystemStatusTabList({
startTime: this.startTime,
time: this.time,
type: this.typeQuery,
pageNum: pageIndex,
pageSize: this.pageSize,
}).then((res) => {
if (res.code == 200) {
// if (res.rows && res.rows.length > 0) {
this.setStatus("02", "finish");
this.pageIndex = pageIndex;
this.pageTotal = res.total;
this.tableData = res.rows;
this.tableData.forEach((it, index) => {
it.order = (pageIndex - 1) * this.pageSize + index + 1;
});
// } else {
// this.setStatus("02", "empty");
// }
}
});
},
}
},
async mounted() {
await this.initData();
this.getSection();
},
};
</script>
@ -446,38 +57,11 @@ export default {
bottom: 0;
}
.bottomTabs {
position: relative;
display: inline-flex;
width: 100%;
flex-direction: row;
flex: 1;
height: 0;
.tabs-lo {
display: inline-flex;
width: 670px;
margin-right: 15px;
}
.tabs-mo {
display: inline-flex;
flex: 1;
}
}
.deviceSummary {
height: 390px;
margin-bottom: 6px;
}
.btnSearch {
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
margin-left: 10px;
border-color: transparent;
color: #fff;
}
::v-deep .el-table .cell {
padding-left: 0px !important;
}
@ -577,97 +161,11 @@ export default {
flex-direction: column;
}
.topdiv {
display: inline-flex;
position: relative;
width: 100%;
height: 40px;
justify-content: space-between;
align-items: center;
.right-div {
display: inline;
width: 450px;
}
}
.statisticAnalysis {
width: 100%;
height: 100%;
padding: 8px 20px 20px;
.header-shot {
width: 98%;
margin: auto;
margin-top: 15px;
height: 160px;
}
.queryChart {
position: relative;
display: inline-flex;
width: 100%;
height: 343px;
margin-top: 20px;
padding: 0 20px;
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 0%, #06425860 100%);
margin-bottom: 30px;
--keep-ratio: scaleX(1);
> div {
display: inline-flex;
width: 100%;
height: 100%;
}
}
.content {
width: 100%;
margin: auto;
display: flex;
flex: 1;
pointer-events: none;
margin-top: 19px;
> div {
pointer-events: auto;
}
.content-l {
width: calc(25%);
margin-right: 20px;
}
.content-mi {
width: calc(50%);
margin-right: 20px;
}
.content-m {
display: inline-flex;
flex-direction: column;
width: calc(100% / 4);
margin-right: 20px;
.content-m-t {
width: 100%;
height: 240px;
margin-bottom: 20px;
}
}
.content-r {
width: 49.4%;
}
}
}
.footer {
margin: 15px 0;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
}
</style>

673
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/index_2024-05-23.md

@ -0,0 +1,673 @@
<template>
<div class="statisticAnalysis">
<el-tabs class="full_tab" v-model="activeName" @tab-click="changeTabs">
<el-tab-pane label="设备分析" name="first" class="tab_con">
<DeviceSummary
class="deviceSummary"
:dataList="equipments"
></DeviceSummary>
<div class="bottomTabs">
<DeviceUptime :dataList="equipments" class="tabs-lo" />
<OnLineBarCharts :dataList="sectionData" class="tabs-mo" />
<!-- <MonthlyEquipment class="tabs-mo" :dataList="equipments" /> -->
</div>
</el-tab-pane>
<el-tab-pane label="设备查询" name="second" class="tab_con">
<div class="topdiv">
<div class="left-div">
<el-button
size="mini"
icon="el-icon-refresh-left"
class="btnSearch"
@click="onRefreshData"
>刷新</el-button
>
<el-button
size="mini"
icon="el-icon-download"
class="btnSearch"
@click="SystemStatusExport"
>导出Excel</el-button
>
</div>
<div class="right-div">
<InputSearch
:formList="searchFormList"
@handleSearch="handleSearch"
/>
<!-- :placeholder="searchText" -->
</div>
</div>
<div class="queryChart">
<!-- v-if="isEmpty01" -->
<Empty
v-if="isEmpty01"
class="floatEmpty"
:text="emptyText01"
></Empty>
<div ref="queryChart" class="keep-ratio"></div>
</div>
<div style="position: relative; bottom: 15px">
<Empty
v-if="isEmpty02"
class="floatEmpty"
:text="emptyText02"
></Empty>
<el-table
:border="false"
:data="tableData"
height="420"
header-align="left"
empty-text=" "
>
<el-table-column prop="order" label="序号" width="80">
</el-table-column>
<el-table-column
prop="deviceName"
label="设备名称"
></el-table-column>
<el-table-column prop="deviceNo" label="设备桩号">
</el-table-column>
<el-table-column
prop="direction"
label="方向"
class-name="showClass"
>
<template slot-scope="scope">
<span>{{
scope.row.direction == "1"
? "菏泽"
: scope.row.direction == "2"
? "双向"
: "济南"
}}</span>
</template>
</el-table-column>
<el-table-column prop="deviceIp" label="设备IP"> </el-table-column>
<el-table-column prop="production" label="厂家"> </el-table-column>
<!-- <el-table-column prop="model" label="型号"> </el-table-column> -->
<!-- <el-table-column prop="network" label="网段"> </el-table-column> -->
<el-table-column prop="time" label="监测时间"> </el-table-column>
<el-table-column prop="deviceStatus" label="设备状态">
<template slot-scope="scope">
<div v-if="scope.row.deviceStatus == 1">在线</div>
<div v-if="scope.row.deviceStatus == 0" style="color: #bbb">
离线
</div>
</template>
</el-table-column>
</el-table>
<div class="footer">
<Pagination
@current-change="changePage"
width="'100%'"
:page-size="pageSize"
:current-page.sync="pageIndex"
layout="total, sizes, prev, pager, next"
:total="pageTotal"
@size-change="handleSizeChange"
>
</Pagination>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import * as echarts from "echarts";
import onlineCharts from "./assets/charts";
// import barCharts from "./assets/barCharts";
import DeviceUptime from "./components/deviceUptime";
import OnLineBarCharts from "./components/onLineBarCharts";
import MonthlyEquipment from "./components/monthlyEquipment";
import DeviceSummary from "./components/deviceSummary";
import {
getSystemStatusList,
getSystemStatusTabList,
getSystemStatusType,
getSystemStatusExport,
getStatusSection,
} from "@/api/MonthlyEquipment";
// import { download } from "../../../../../utils/request.js";
import Pagination from "@screen/components/Pagination.vue";
import InputSearch from "@screen/components/InputSearch/index.vue";
import { searchFormList } from "./data";
import { Loading } from "element-ui";
import { first } from "lodash";
export default {
name: "publicService",
components: {
DeviceUptime,
MonthlyEquipment,
Pagination,
InputSearch,
DeviceSummary,
OnLineBarCharts,
},
data() {
return {
searchText: "请设置查询条件",
isEmpty01: true,
emptyText01: "请输入参数查询...",
isEmpty02: true,
emptyText02: "请输入参数查询...",
startTime: "",
time: "",
typeQuery: "", //高清网络枪型固定摄像机
pageTotal: 0,
pageIndex: 1,
pageSize: 30,
searchFormList,
equipSeries: [
"高清网络球形摄像机",
"360°全景摄像机",
"门架式可变信息标志",
"站前悬臂式可变信息标志",
"气象检测器",
"合流区预警系统",
"高清网络枪型固定摄像机",
"智能设备箱",
"毫米波雷达",
"路段语音广播系统",
"护碰撞预警系统",
"激光疲劳唤醒系统",
"180°全景摄像机",
"一类交通量调音站",
"雨棚可变信息标志",
"智能行车诱导系统",
],
equipments: [],
activeName: "first",
tableData: [],
interval: null,
sectionData: [],
};
},
provide() {
return {
initDataList: this.initDevice,
};
},
destroyed() {
clearInterval(this.interval);
},
methods: {
getSection() {
getStatusSection().then((res) => {
this.sectionData = res.data;
});
},
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");
this.typeQuery = this.searchFormList[1].options.options[0].value;
clearInterval(this.interval);
if (this.activeName == "first") {
this.initDevice();
} else if (this.activeName == "second") {
this.queryChart = echarts.init(this.$refs["queryChart"]);
this.queryChart.setOption(onlineCharts);
this.initQueryChart();
this.initQueryTable(1);
}
this.interval = setInterval(() => {
if (this.activeName == "first") {
this.initDevice();
}
}, 30000);
},
changePage(page) {
this.initQueryTable(page);
},
formatDate(val) {
let year = val.getFullYear();
var m = val.getMonth() + 1;
var day = val.getDate();
m = m < 10 ? "0" + m : "" + m;
day = day < 10 ? "0" + day : "" + day;
return year + "-" + m + "-" + day + " 00:00:00";
},
onRefreshData() {
if (!this.typeQuery || !this.startTime) {
this.$message({
message: "请先设置查询条件!",
type: "warning",
});
return;
}
this.initQueryChart();
this.initQueryTable(1);
},
handleSearch(data) {
this.typeQuery = data.type;
this.startTime = moment(data.time[0]).format("YYYY-MM-DD HH:mm:ss");
this.time = moment(data.time[1]).format("YYYY-MM-DD HH:mm:ss");
let typeText =
this.searchFormList[1].options.options[this.typeQuery - 1]?.label;
this.searchText = `${moment(this.startTime).format(
"YYYY年MM月DD日"
)}-${moment(this.time).format("YYYY年MM月DD日")},${typeText}`;
this.initQueryChart();
this.initQueryTable(1);
},
changeTabs() {
this.initData();
this.$nextTick(() => {
this.queryChart.resize();
});
},
//导出
SystemStatusExport() {
let loadingInstance = Loading.service({
fullscreen: true,
background: "#00000052",
text: "文件正在下载...",
});
getSystemStatusExport({
startTime: this.startTime,
time: this.time,
type: this.typeQuery,
})
.then((res) => {
const url = window.URL.createObjectURL(new Blob([res]));
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", "设备统计信息.xlsx");
document.body.appendChild(link);
link.click();
URL.revokeObjectURL(link.href); // 释放URL 对象
document.body.removeChild(link);
link = null;
loadingInstance.close();
})
.catch((err) => {
Message.error(err);
loadingInstance.close();
});
},
initDevice() {
//设备在线离线率接口
// if (process.env.NODE_ENV == "development") {
// this.equipments = [];
// this.equipSeries.forEach((item) => {
// this.equipments.push({
// title: item,
// total: Math.floor(Math.random() * 600) + 800,
// pctOnl: Math.floor(100 * Math.random()) + "%",
// pctOffl: "25%",
// pctLose: "15%",
// sumUseState: "90%",
// });
// });
// return;
// }
getSystemStatusType().then((res) => {
let allList = [];
let sort = res.data["排序规则"].rule.split(",");
sort.forEach((i) => {
for (let key in res.data) {
let val = res.data[key];
let item = {
title: key,
total: val.sum,
pctOnl: val.sucessRate,
pctOffl: val.failRate,
pctLose: val.lostRate,
sumUseState: val.sumUseState,
};
if (i === key) {
allList.push(item);
}
// if (key.includes("全部设备")) {
// allList.unshift(item);
// } else {
// allList.push(item);
// }
}
});
this.equipments = allList;
});
},
setStatus(id, status) {
if (status == "doing") {
this["isEmpty" + id] = true;
this["emptyText" + id] = "数据查询中...";
} else if (status == "empty") {
this["isEmpty" + id] = true;
this["emptyText" + id] = "暂无数据...";
} else if (status == "finish") {
this["isEmpty" + id] = false;
this["emptyText" + id] = "";
}
},
initQueryChart() {
this.setStatus("01", "doing");
let data = this.searchFormList[1].options.options;
let typeLabel = "";
data.forEach((item) => {
if (item.value == this.typeQuery) {
typeLabel = item.label;
}
});
getSystemStatusList({
startTime: this.startTime,
time: this.time,
type: this.typeQuery,
}).then((res) => {
if (res.code == 200) {
this.setStatus("01", "finish");
let origin = res.data;
let startStamp = +moment(this.startTime).startOf("day").format("x");
let endStamp = +moment(this.time).endOf("day").format("x");
let oneDay = 86400000;
let daysTotal = Math.ceil((endStamp - startStamp) / oneDay);
let queryChartData = [];
let dataX = [];
let data0 = [];
let data1 = [];
for (let i = 0; i < daysTotal; i++) {
let ts = startStamp + i * oneDay;
let date = moment(ts).format("YYYY-M-D");
let val = origin[date] ? +origin[date].replace("%", "") : 0;
dataX.push(moment(ts).format("MM-DD"));
data0.push(val);
data1.push(100);
}
onlineCharts.xAxis.data = dataX;
onlineCharts.series[0].data = data0;
onlineCharts.series[0].name = typeLabel;
onlineCharts.series[1].data = data1;
onlineCharts.yAxis[0].name = "在线率(%)";
this.$nextTick(() => {
this.queryChart.setOption(onlineCharts);
});
// } else {
// this.setStatus("01", "empty");
// }
}
});
},
//查询列表
initQueryTable(pageIndex) {
this.setStatus("02", "doing");
getSystemStatusTabList({
startTime: this.startTime,
time: this.time,
type: this.typeQuery,
pageNum: pageIndex,
pageSize: this.pageSize,
}).then((res) => {
if (res.code == 200) {
// if (res.rows && res.rows.length > 0) {
this.setStatus("02", "finish");
this.pageIndex = pageIndex;
this.pageTotal = res.total;
this.tableData = res.rows;
this.tableData.forEach((it, index) => {
it.order = (pageIndex - 1) * this.pageSize + index + 1;
});
// } else {
// this.setStatus("02", "empty");
// }
}
});
},
},
async mounted() {
await this.initData();
this.getSection();
},
};
</script>
<style lang="scss" scoped>
.floatEmpty {
position: absolute;
z-index: 100;
// background: rgba($color: #000000, $alpha: 0.2);
left: 0;
top: 0;
right: 0;
bottom: 0;
}
.bottomTabs {
position: relative;
display: inline-flex;
width: 100%;
flex-direction: row;
flex: 1;
height: 0;
.tabs-lo {
display: inline-flex;
width: 670px;
margin-right: 15px;
}
.tabs-mo {
display: inline-flex;
flex: 1;
}
}
.deviceSummary {
height: 390px;
margin-bottom: 6px;
}
.btnSearch {
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
margin-left: 10px;
border-color: transparent;
color: #fff;
}
::v-deep .el-table .cell {
padding-left: 0px !important;
}
::v-deep .el-table .el-table__header-wrapper th {
background-color: #064258 !important;
color: #00d1ff;
border-color: #064258 !important;
border: 0px !important;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
}
::v-deep .el-table {
border: 0px !important;
background-color: transparent;
font-size: 12px !important;
}
::v-deep .el-table__body-wrapper {
background-color: #064258;
color: #fff;
}
::v-deep .el-table .el-table__cell {
height: 47px;
padding-left: 15px;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #ffffff;
}
::v-deep .el-table tr:hover td {
background: #1b2528 !important;
color: #00d1ff;
height: 47px;
}
::v-deep .el-table tr:nth-child(odd) td {
background-color: #13272f;
border: 0px !important;
}
::v-deep .el-table tr:nth-child(even) td {
border: 0px !important;
}
::v-deep .el-table tr {
background-color: #133242 !important;
border-collapse: 0;
border: 0px !important;
background-color: transparent !important;
}
::v-deep .el-tabs__item {
display: inline-flex;
justify-content: center;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #ffffff;
min-width: 128px;
position: relative;
left: 10px;
}
::v-deep .el-tabs__active-bar {
min-width: 128px;
}
::v-deep .el-tabs__nav-wrap::after {
background-color: #133242;
opacity: 0.1;
}
.full_tab {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
flex: 1;
::v-deep .el-tabs__header {
}
::v-deep .el-tabs__content {
flex: 1;
.el-tab-pane {
width: 100%;
height: 100%;
}
}
}
.tab_con {
display: flex;
flex-direction: column;
}
.topdiv {
display: inline-flex;
position: relative;
width: 100%;
height: 40px;
justify-content: space-between;
align-items: center;
.right-div {
display: inline;
width: 450px;
}
}
.statisticAnalysis {
width: 100%;
height: 100%;
padding: 8px 20px 20px;
.header-shot {
width: 98%;
margin: auto;
margin-top: 15px;
height: 160px;
}
.queryChart {
position: relative;
display: inline-flex;
width: 100%;
height: 343px;
margin-top: 20px;
padding: 0 20px;
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 0%, #06425860 100%);
margin-bottom: 30px;
--keep-ratio: scaleX(1);
> div {
display: inline-flex;
width: 100%;
height: 100%;
}
}
.content {
width: 100%;
margin: auto;
display: flex;
flex: 1;
pointer-events: none;
margin-top: 19px;
> div {
pointer-events: auto;
}
.content-l {
width: calc(25%);
margin-right: 20px;
}
.content-mi {
width: calc(50%);
margin-right: 20px;
}
.content-m {
display: inline-flex;
flex-direction: column;
width: calc(100% / 4);
margin-right: 20px;
.content-m-t {
width: 100%;
height: 240px;
margin-bottom: 20px;
}
}
.content-r {
width: 49.4%;
}
}
}
.footer {
margin: 15px 0;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
}
</style>

81
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/query/charts.js

@ -0,0 +1,81 @@
var options = {
tooltip: {
show: true,
trigger: "axis",
valueFormatter: function (value) {
return value + " %";
},
},
legend: {
icon: "circle",
itemHeight: 8,
itemWidth: 8,
top: "5%",
x: "right",
textStyle: {
color: "#fff",
},
},
grid: {
top: "25%", //上边距
right: "0%", //右边距
left: "0%", //左边距
bottom: "10%", //下边距
containLabel: true,
},
xAxis: {
data: [],
axisTick: {
show: false, //隐藏X轴刻度
},
axisLine: {
lineStyle: {
color: "rgba(49, 217, 255, 0.8)",
},
},
axisLabel: {
show: true,
color: "#fff",
fontFamily: "Source Han Sans CN-Regular",
},
},
yAxis: [
{
type: "value",
name: "%",
nameTextStyle: {
color: "#fff",
fontFamily: "Source Han Sans CN-Regular",
align: "right",
verticalAlign: "center",
},
axisLabel: {
color: "#fff",
fontFamily: "HarmonyOS Sans-Regular",
},
splitLine: {
lineStyle: {
color: "rgba(49, 217, 255, 0.5)",
},
},
},
],
series: [
{
name: "",
type: "line",
symbol: "circle",
// yAxisIndex: 1, // 与第二个 y 轴关联
itemStyle: {
color: "#32BB8A",
},
lineStyle: {
width: 2,
},
data: []
}
],
};
export default options;

135
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/testDeviceData.js → ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/query/data.js

@ -1,4 +1,137 @@
export default {
import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js";
export const deviceType = [
{
value: "all",
label: "全选",
},
{
value: "1-1",
label: "高清网络枪型固定摄像机",
color: "#009A29",
},
{
value: "1-2",
label: "高清网络球形摄像机",
color: "#0DA5AA",
},
{
value: "1-3",
label: "桥下高清网络球形摄像机",
color: "#206CCF",
},
{
value: "1-4",
label: "360°全景摄像机",
color: "#CB272D",
},
{
value: "1-5",
label: "180°全景摄像机",
color: "#CC5120",
},
{
value: "2-1",
label: "门架式可变信息标志",
color: "#D25F00",
},
{
value: "2-3",
label: "雨棚可变信息标志",
color: "#CC9213",
},
{
value: "2-4",
label: "站前悬臂式可变信息标志",
color: "#CFAF0F",
},
{
value: "3",
label: "气象检测器",
color: "#7EB712",
},
{
value: "5",
label: "路段语音广播系统",
color: "#0E42D2",
},
{
value: "6",
label: "护栏碰撞预警系统",
color: "#551DB0",
},
{
value: "7",
label: "毫米波雷达",
color: "#CB1E83",
},
{
value: "8",
label: "合流区预警系统",
color: "#072CA6",
},
{
value: "10",
label: "激光疲劳唤醒",
color: "#114BA3",
},
{
value: "11",
label: "一类交通量调查站",
color: "#008026",
},
{
value: "12",
label: "智能行车诱导系统",
color: "#A38408",
},
{
value: "13",
label: "智能设备箱",
color: "#A64500",
},
]
export const tabMap = {
AlarmEvents: {
state: 5,
textColor: "#007FF4",
text: "去确认",
},
EventsConfirmed: {
state: 5,
textColor: "#007FF4",
text: "去确认",
},
DisposingEvents: {
state: 4,
textColor: "#007FF4",
text: "去处置",
},
IncidentDisposed: {
state: 3,
textColor: "#007FF4",
text: "处置记录",
},
};
export const searchFormList = [
{
label: "时间范围:",
key: "time",
required: true,
type: "datePicker",
default: [
moment().startOf("month").format("YYYY-MM-DD HH:mm:ss"),
moment().format("YYYY-MM-DD HH:mm:ss"),
],
options: {
format: "yyyy-MM-dd",
type: "daterange",
},
}
];
export const testDeviceData = {
"msg": "操作成功",
"code": 200,
"data": {

422
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/smart/statisticalAnalysis/query/index.vue

@ -0,0 +1,422 @@
<template>
<div class="statisticAnalysisQuery">
<div class="topdiv">
<div class="left-div">
<el-button size="mini" icon="el-icon-refresh-left" class="btnSearch" @click="onRefreshData">刷新</el-button>
<el-button size="mini" icon="el-icon-download" class="btnSearch" @click="SystemStatusExport">导出Excel</el-button>
</div>
<div class="right-div">
<InputSearch :formList="searchFormList" @handleSearch="handleSearch" :placeholder="searchText" />
</div>
</div>
<div class="anacontent">
<div class="cleft">
<el-checkbox-group class="device keep-ratio" origin="top" v-model="devices" @change="onDeviceChange">
<el-checkbox v-for="(item,index) in deviceTypeList" :label="item.value" >{{ item.label }}</el-checkbox>
</el-checkbox-group>
</div>
<div class="cright">
<div class="queryChart">
<Empty
v-if="isEmpty01"
class="floatEmpty"
:text="emptyText01"
></Empty>
<div ref="queryChart" class="keep-ratio"></div>
</div>
<div class="bodyTable">
<Table :data="tableData" @sort-change="onSort" v-loading="loading">
<el-table-column label="序号" type="index" :index="indexMethod" width="100" align="center"
header-align="center" />
<ElTableColumn prop="deviceName" label="设备名称"></ElTableColumn>
<ElTableColumn prop="deviceNo" label="设备桩号">
</ElTableColumn>
<ElTableColumn prop="direction" label="方向" class-name="showClass">
<template slot-scope="scope">
<span>{{ scope.row.direction == "1" ? "菏泽" : scope.row.direction == "2" ? "双向": "济南"}}</span>
</template>
</ElTableColumn>
<ElTableColumn prop="deviceIp" label="设备IP"> </ElTableColumn>
<ElTableColumn prop="production" label="厂家"> </ElTableColumn>
<ElTableColumn prop="time" label="监测时间"> </ElTableColumn>
<ElTableColumn prop="deviceStatus" label="设备状态" sortable>
<template slot-scope="scope">
<div v-if="scope.row.deviceStatus == '1'">在线</div>
<div v-if="scope.row.deviceStatus == '0'" style="color: #bbb">
离线
</div>
</template>
</ElTableColumn>
</Table>
</div>
<div class="footer">
<Pagination @current-change="initQueryTable" @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>
</div>
</div>
</template>
<script>
import * as echarts from "echarts";
import { searchFormList,deviceType } from "./data";
import { Loading } from "element-ui";
import Table from '@screen/components/Table.vue';
import Pagination from "@screen/components/Pagination.vue";
import InputSearch from "@screen/components/InputSearch/index.vue";
import chartsOption from "./charts";
import {
getSystemStatusList,
getSystemStatusTabList,
getSystemStatusExport,
} from "@/api/MonthlyEquipment";
import { takeRightWhile } from "lodash";
export default {
name: "StatisticQuy",
components: {
Table,
Pagination,
InputSearch,
searchFormList
},
data() {
return {
loading:false,
searchText: "请设置查询条件",
isEmpty01: true,
emptyText01: "请输入参数查询...",
isEmpty02: true,
emptyText02: "请输入参数查询...",
devices:['1-1'],
devicesSource:['1-1'],
deviceTypeList: deviceType,
tableData: [],
interval: null,
sectionData: [],
searchFormList,
startTime: "",
time: "",
total:0,
searchData: {
pageSize: 10,
pageNum: 1
},
order:'asc',
};
},
destroyed() {
},
methods: {
indexMethod(index) {
return this.searchData.pageSize*(this.searchData.pageNum-1) + index + 1;
},
onSizeChange(pageSize) {
this.tableData = [];
this.searchData.pageSize = pageSize;
this.searchData.pageNum = 1;
this.initQueryTable();
},
setStatus(id, status) {
if (status == "doing") {
this["isEmpty" + id] = true;
this["emptyText" + id] = "数据查询中...";
} else if (status == "empty") {
this["isEmpty" + id] = true;
this["emptyText" + id] = "暂无数据...";
} else if (status == "finish") {
this["isEmpty" + id] = false;
this["emptyText" + id] = "";
}
},
onSort(e){
if(e.order === 'ascending'){
this.order = 'asc'
} else {
this.order = 'desc'
}
this.initQueryTable();
},
initQueryChart() {
if(this.devices.length === 0){
return;
}
this.setStatus("01", "doing");
getSystemStatusList({
startTime: this.startTime,
time: this.time,
type: this.devices.join(','),
}).then((res) => {
if (res.code == 200) {
this.setStatus("01", "finish");
let x = [];
let serie = [];
for(let i in res.data){
const s = _.cloneDeep(chartsOption.series[0]);
if(x.length === 0){
for(let j in res.data[i]){
x.push(j)
}
}
const _deviceType = _.find(deviceType,{value:i})
s.name = _deviceType.label
s.itemStyle.color = _deviceType.color
s.data = [];
for(let j in res.data[i]){
const p = res.data[i][j];
s.data.push(parseFloat(p.substr(0,p.length-1)));
}
serie.push(s);
}
chartsOption.xAxis.data = x;
chartsOption.series= serie;
this.queryChart = echarts.init(this.$refs["queryChart"]);
this.queryChart.setOption(chartsOption);
}
});
},
//
initQueryTable() {
this.loading = true;
getSystemStatusTabList({
startTime: this.startTime,
time: this.time,
type: this.devices.join(','),
pageNum: this.searchData.pageNum,
pageSize: this.searchData.pageSize,
orderByField:'device_status',
orderDirection:this.order
}).then((res) => {
if (res.code == 200) {
this.loading = false;
this.total = res.total;
this.tableData = res.rows;
}
});
},
onDeviceChange(){
//
if(this.devices.indexOf('all') !== -1 && this.devicesSource.indexOf('all') === -1){
this.devices = deviceType.map(x=>x.value);
} else if(this.devices.indexOf('all') === -1 && this.devicesSource.indexOf('all') !== -1){
this.devices = [];
} else if(this.devicesSource.indexOf('all') !== -1 && this.devices.length !== deviceType.length){
this.devices.splice(this.devices.indexOf('all'),1)
}
this.devicesSource = this.devices
this.initQueryChart();
this.initQueryTable();
},
onRefreshData() {
this.initQueryChart();
this.searchData.pageNum = 1;
this.initQueryTable();
},
handleSearch(data) {
this.startTime = moment(data.time[0]).format("YYYY-MM-DD HH:mm:ss");
this.time = moment(data.time[1]).format("YYYY-MM-DD HH:mm:ss");
this.searchText = `${moment(this.startTime).format(
"YYYY年MM月DD日"
)}-${moment(this.time).format("YYYY年MM月DD日")}`;
this.initQueryChart();
this.initQueryTable();
},
//
SystemStatusExport() {
let loadingInstance = Loading.service({
fullscreen: true,
background: "#00000052",
text: "文件正在下载...",
});
getSystemStatusExport({
startTime: this.startTime,
time: this.time,
type: this.devices.join(','),
})
.then((res) => {
const url = window.URL.createObjectURL(new Blob([res]));
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", "设备统计信息.xlsx");
document.body.appendChild(link);
link.click();
URL.revokeObjectURL(link.href); // URL
document.body.removeChild(link);
link = null;
loadingInstance.close();
})
.catch((err) => {
Message.error(err);
loadingInstance.close();
});
},
},
async mounted() {
this.startTime = moment().startOf("month").format("YYYY-MM-DD HH:mm:ss");
this.time = moment().format("YYYY-MM-DD HH:mm:ss");
this.initQueryChart();
this.initQueryTable();
},
};
</script>
<style lang="scss" scoped>
.statisticAnalysisQuery {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.topdiv {
display: inline-flex;
position: relative;
width: 100%;
height: 40px;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
.right-div {
display: inline;
width: 450px;
}
}
.anacontent {
flex: 1;
display: flex;
flex-direction: row;
width: 100%;
.cleft{
background-color: #101e25;
width: 300px;
height: 100%;
.device{
padding: 10px 15px;
display: flex;
flex-direction: column;
line-height: 45px;
}
}
.cright{
flex: 1;
height: 100%;
margin-left: 15px;
display: flex;
flex-direction: column;
}
}
.bodyTable{
width: 100%;
height: 450px;
overflow-y: auto;
margin-bottom: 20px;
}
.queryChart {
position: relative;
display: inline-flex;
width: 100%;
height: 343px;
padding: 0 20px;
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 0%, #101e25 100%);
// background-color: #101e25;
margin-bottom: 20px;
--keep-ratio: scaleX(1);
>div {
display: inline-flex;
width: 100%;
height: 100%;
}
}
}
.floatEmpty {
position: absolute;
z-index: 100;
// background: rgba($color: #000000, $alpha: 0.2);
left: 0;
top: 0;
right: 0;
bottom: 0;
}
.btnSearch {
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
margin-left: 10px;
border-color: transparent;
color: #fff;
}
::v-deep .el-table .cell {
padding-left: 0px !important;
}
::v-deep .el-table .el-table__header-wrapper th {
background-color: #064258 !important;
color: #00d1ff;
border-color: #064258 !important;
border: 0px !important;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
}
::v-deep .el-table {
border: 0px !important;
background-color: transparent;
font-size: 12px !important;
}
::v-deep .el-table__body-wrapper {
background-color: #064258;
color: #fff;
}
::v-deep .el-table .el-table__cell {
height: 47px;
padding-left: 15px;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #ffffff;
}
::v-deep .el-table tr:hover td {
background: #1b2528 !important;
color: #00d1ff;
height: 47px;
}
::v-deep .el-table tr:nth-child(odd) td {
background-color: #13272f;
border: 0px !important;
}
::v-deep .el-table tr:nth-child(even) td {
border: 0px !important;
}
::v-deep .el-table tr {
background-color: #133242 !important;
border-collapse: 0;
border: 0px !important;
background-color: transparent !important;
}
</style>

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/assets/charts.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/dailyDisposal/assets/charts.js

4
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/dailyDisposal/index.vue

@ -8,10 +8,10 @@
</template>
<script>
import WgtTitle from "../../../widgets/title";
import WgtTitle from "../../../../widgets/title";
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getWarningStateDay } from "../../../../../../../api/event/perceiveEvent";
import { getWarningStateDay } from "@/api/event/perceiveEvent";
const drawRoundRect = (ctx, x, y, width, height, radius, gr) => {
// ctx, x, y, , ,

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/assets/charts.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/dayTotal/assets/charts.js

4
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/dayTotal/index.vue

@ -17,10 +17,10 @@
</template>
<script>
import WgtTitle from "../../../widgets/title";
import WgtTitle from "../../../../widgets/title";
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getDailyCumulative } from "../../../../../../../api/event/perceiveEvent";
import { getDailyCumulative } from "@/api/event/perceiveEvent";
import moment from "moment";
export default {

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/ElQuarterPicker.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/ElQuarterPicker.vue

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/assets/charts.js

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts2.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/assets/charts2.js

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts3.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/assets/charts3.js

4
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index copy.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/index copy.vue

@ -43,14 +43,14 @@
<script>
import WgtTitle from '../../../widgets/title'
import WgtTitle from '../../../../widgets/title'
import ProgressBar from './progressBar';
import * as echarts from "echarts";
import chart1 from "./assets/charts";
import chart2 from "./assets/charts2";
import chart3 from "./assets/charts3";
import ElQuarterPicker from './ElQuarterPicker'
import { getWarningTrend, getWarningSectionType, getSectionMarkNumber, getRoadSectionList } from '../../../../../../../api/event/perceiveEvent';
import { getWarningTrend, getWarningSectionType, getSectionMarkNumber, getRoadSectionList } from '@/api/event/perceiveEvent';
const drawRoundRect = (ctx, x, y, width, height, radius, gr) => {
// ctx, x, y, , ,

4
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/index.vue

@ -127,7 +127,7 @@
</template>
<script>
import WgtTitle from "../../../widgets/title";
import WgtTitle from "../../../../widgets/title";
import RadioGroup from "@screen/components/FormConfig/components/RadioGroup/index.vue";
import ProgressBar from "@screen/components/ProgressBar.vue";
import * as echarts from "echarts";
@ -293,7 +293,7 @@ export default {
onReset() {
this.direction = "1";
this.type = "day";
this.dateTime = moment(this.dateTime).format("YYYY-MM-DD HH:mm:ss");
this.dateTime = moment().format("YYYY-MM-DD HH:mm:ss");
this.selectId = 1;
this.selectIndex = 1;
this.reset = true;

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/progressBar copy.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/progressBar copy.vue

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/progressBar.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventQuery/progressBar.vue

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/assets/charts.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventSource/assets/charts.js

4
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/eventSource/index.vue

@ -8,10 +8,10 @@
</template>
<script>
import WgtTitle from "../../../widgets/title";
import WgtTitle from "../../../../widgets/title";
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getWarningSourceGroup } from "../../../../../../../api/event/perceiveEvent";
import { getWarningSourceGroup } from "@/api/event/perceiveEvent";
const drawRoundRect = (ctx, x, y, width, height, radius, gr) => {
// ctx, x, y, , ,

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/monthStatistics/assets/charts.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/monthStatistics/assets/charts.js

4
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/monthStatistics/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/monthStatistics/index.vue

@ -17,10 +17,10 @@
</template>
<script>
import WgtTitle from "../../../widgets/title";
import WgtTitle from "../../../../widgets/title";
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getDailyCumulativeMonth } from "../../../../../../../api/event/perceiveEvent";
import { getDailyCumulativeMonth } from "@/api/event/perceiveEvent";
export default {
name: "MonthStatistics",

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/assets/bg.png → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/railway/assets/bg.png

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/assets/charts.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/railway/assets/charts.js

4
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/railway/index.vue

@ -21,10 +21,10 @@
</template>
<script>
import WgtTitle from "../../../widgets/title";
import WgtTitle from "../../../../widgets/title";
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getSectionPerceivedList } from "../../../../../../../api/event/perceiveEvent";
import { getSectionPerceivedList } from "@/api/event/perceiveEvent";
export default {
name: "Situation",

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

4
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/railwayDay/index.vue

@ -17,10 +17,10 @@
</template>
<script>
import WgtTitle from "../../../widgets/title";
import WgtTitle from "../../../../widgets/title";
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getSectionPerceivedNumber } from "../../../../../../../api/event/perceiveEvent";
import { getSectionPerceivedNumber } from "@/api/event/perceiveEvent";
export default {
name: "RailWayDay",

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/assets/charts.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/typeAnalysis/assets/charts.js

4
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/components/typeAnalysis/index.vue

@ -23,10 +23,10 @@
</template>
<script>
import WgtTitle from "../../../widgets/title";
import WgtTitle from "../../../../widgets/title";
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getWarningTypeDay } from "../../../../../../../api/event/perceiveEvent";
import { getWarningTypeDay } from "@/api/event/perceiveEvent";
// const drawRoundRect = (ctx, x, y, width, height, radius, gr) => {
// // ctx, x, y, , ,

94
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/analysis/index.vue

@ -0,0 +1,94 @@
<template>
<div class="EventDetectionAnalysis">
<section class="row_01">
<Railway class="content-l" />
<div class="content_r_g">
<RailWayDay class="content_r_unit" />
<DayTotal class="content_r_unit" />
</div>
<div class="content_r_g">
<EventSource class="content_r_unit" />
<DailyDisposal class="content_r_unit" />
</div>
<div class="content_r_g" style="margin-right: 0">
<MonthStatistice class="content_r_unit" />
<TypeAnalysis class="content_r_unit" />
</div>
</section>
<EventQuery class="row_02" />
</div>
</template>
<script>
import Railway from "./components/railway/index.vue";
import RailWayDay from "./components/railwayDay/index.vue";
import DayTotal from "./components/dayTotal/index.vue";
import EventSource from "./components/eventSource/index.vue";
import DailyDisposal from "./components/dailyDisposal/index.vue";
import TypeAnalysis from "./components/typeAnalysis/index.vue";
import MonthStatistice from "./components/monthStatistics/index.vue";
import EventQuery from "./components/eventQuery/index.vue";
export default {
name: "EventDetectionAnalysis",
components: {
Railway,
RailWayDay,
DayTotal,
EventSource,
DailyDisposal,
TypeAnalysis,
MonthStatistice,
EventQuery,
},
};
</script>
<style lang="scss" scoped>
.EventDetectionAnalysis {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: stretch;
.row_01 {
flex-basis: 55%;
margin-bottom: 15px;
display: flex;
align-items: stretch;
pointer-events: none;
> div {
pointer-events: auto;
}
.content-l {
flex-basis: 25%;
margin-right: 15px;
}
.content_r_g {
display: flex;
flex-direction: column;
flex-basis: 25%;
margin-right: 15px;
.content_r_unit {
width: 100%;
flex-basis: 50%;
margin-bottom: 15px;
&:last-child {
margin-bottom: 0;
}
}
}
}
.row_02 {
flex: 1;
height: 0;
// pointer-events: none;
}
}
</style>

104
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/index.vue

@ -1,46 +1,31 @@
<template>
<div class="TrafficFlow">
<section class="row_01">
<Railway class="content-l" />
<div class="content_r_g">
<RailWayDay class="content_r_unit" />
<DayTotal class="content_r_unit" />
</div>
<div class="content_r_g">
<EventSource class="content_r_unit" />
<DailyDisposal class="content_r_unit" />
</div>
<div class="content_r_g" style="margin-right: 0">
<MonthStatistice class="content_r_unit" />
<TypeAnalysis class="content_r_unit" />
</div>
</section>
<EventQuery class="row_02" />
<el-tabs class="full_tab" v-model="activeName">
<el-tab-pane label="感知事件分析" name="first" class="tab_con">
<EventDetectionAnalysis />
</el-tab-pane>
<el-tab-pane label="感知事件统计" name="second" class="tab_con">
<EventDetectionStatistics />
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import Railway from "./components/railway/index.vue";
import RailWayDay from "./components/railwayDay/index.vue";
import DayTotal from "./components/dayTotal/index.vue";
import EventSource from "./components/eventSource/index.vue";
import DailyDisposal from "./components/dailyDisposal/index.vue";
import TypeAnalysis from "./components/typeAnalysis/index.vue";
import MonthStatistice from "./components/monthStatistics/index.vue";
import EventQuery from "./components/eventQuery/index.vue";
import EventDetectionAnalysis from "./analysis/index.vue";
import EventDetectionStatistics from "./statistics/index.vue";
export default {
name: "EventDetection",
components: {
Railway,
RailWayDay,
DayTotal,
EventSource,
DailyDisposal,
TypeAnalysis,
MonthStatistice,
EventQuery,
EventDetectionAnalysis,
EventDetectionStatistics
},
data() {
return {
activeName:'first'
}
}
};
</script>
@ -50,46 +35,27 @@ export default {
height: 100%;
display: flex;
flex-direction: column;
align-items: stretch;
padding: 8px 16px 16px;
.row_01 {
flex-basis: 55%;
margin-bottom: 15px;
display: flex;
align-items: stretch;
pointer-events: none;
> div {
pointer-events: auto;
}
padding: 8px 20px 20px;
.content-l {
flex-basis: 25%;
margin-right: 15px;
}
.content_r_g {
display: flex;
flex-direction: column;
flex-basis: 25%;
margin-right: 15px;
.content_r_unit {
width: 100%;
flex-basis: 50%;
margin-bottom: 15px;
&:last-child {
margin-bottom: 0;
}
}
}
}
.full_tab {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
flex: 1;
::v-deep .el-tabs__header {
}
.row_02 {
::v-deep .el-tabs__content {
flex: 1;
height: 0;
// pointer-events: none;
.el-tab-pane {
width: 100%;
height: 100%;
}
}
}
.tab_con {
display: flex;
flex-direction: column;
}
</style>

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/EventDetailDialog/Carousel/images/arrow.svg → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/EventDetailDialog/Carousel/images/arrow.svg

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/EventDetailDialog/Carousel/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/EventDetailDialog/Carousel/index.vue

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/EventDetailDialog/data.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/EventDetailDialog/data.js

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/EventDetailDialog/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/EventDetailDialog/index.vue

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/FormEvent/PresetFormItems.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/FormEvent/PresetFormItems.js

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/FormEvent/data.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/FormEvent/data.js

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/FormEvent/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/FormEvent/index.vue

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/data.js → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/data.js

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/images/export.svg → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/images/export.svg

Before

Width:  |  Height:  |  Size: 624 B

After

Width:  |  Height:  |  Size: 624 B

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/images/insert.svg → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/images/insert.svg

Before

Width:  |  Height:  |  Size: 385 B

After

Width:  |  Height:  |  Size: 385 B

0
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/images/refresh.svg → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/images/refresh.svg

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

6
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventAnalysis/index.vue → ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/statistics/index.vue

@ -244,17 +244,13 @@ export default {
<style lang="scss" scoped>
.RoadNetworkMonitoring2 {
padding: 0px 21px 21px 21px;
height: 100%;
display: flex;
flex-direction: column;
z-index: 6;
width: 100%;
height: 100%;
.filter {
height: 60px;
margin-bottom: 20px;
display: flex;
justify-content: space-between;
align-items: center;

4
ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/assets/charts3.js

@ -72,7 +72,11 @@ var options = {
axisLabel: {
fontSize: 10,
color: "#fff",
formatter: function (value) {
return Math.round(value * 1000) / 10 + "%";
},
},
},

2
ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/record/index.vue

@ -43,7 +43,7 @@
</ElTableColumn>
<ElTableColumn label="操作" prop="status" width="100" align="center" header-align="center">
<template slot-scope="scope">
<i class="el-icon-delete" style="font-size: 12px; color:#ff0000;" @click="onDelete(scope.row.id)"></i>
<el-button type="danger" icon="el-icon-delete" size="mini" @click="onDelete(scope.row.id)">删除</el-button>
</template>
</ElTableColumn>
</Table>

8
ruoyi-ui/src/views/JiHeExpressway/utils/enum.js

@ -994,10 +994,10 @@ export const planDeviceOptions = [
value: 12,
label: "行车诱导",
},
{
value: 13,
label: "设备箱",
},
// {
// value: 13,
// label: "设备箱",
// },
// {
// value: 14,
// label: "光线在线监测",

Loading…
Cancel
Save