Browse Source

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

wangqin
qingzhengli 1 year ago
parent
commit
846c56e094
  1. 14
      ruoyi-ui/src/api/event/perceiveEvent.js
  2. 26
      ruoyi-ui/src/views/JiHeExpressway/components/RoadStateCard/index.vue
  3. 12
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/index.vue
  4. 19
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/PerceiveEvent/index.vue
  5. 12
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SmartDevice/components/DeviceParams.vue
  6. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/data.js
  7. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js
  8. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/data.js
  9. 11
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/index.vue
  10. 91
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/data.js
  11. 133
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue
  12. 22
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/index.vue
  13. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/assets/charts.js
  14. 21
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/index.vue
  15. 679
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index copy.vue
  16. 233
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue
  17. 205
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/progressBar copy.vue
  18. 15
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/progressBar.vue
  19. 18
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/index.vue
  20. 19
      ruoyi-ui/src/views/JiHeExpressway/pages/service/sensitive/components/AddNEditDialog.vue
  21. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/service/sensitive/index.vue
  22. 4
      ruoyi-ui/vue.config.js

14
ruoyi-ui/src/api/event/perceiveEvent.js

@ -78,13 +78,13 @@ export function geTwarningTotal(query) {
//感知事件源分析
export function getWarningSourceGroup(query) {
return request({
// url: '/perceivedEvents/warning/warningSourceGroup',
// method: 'post',
url: '/business/warning/list',
method: 'get',
// params: {
// ...query,
// }
url: '/perceivedEvents/warning/warningSourceGroup',
method: 'post',
// url: '/business/warning/list',
// method: 'get',
params: {
...query,
}
})
}

26
ruoyi-ui/src/views/JiHeExpressway/components/RoadStateCard/index.vue

@ -2,7 +2,8 @@
<BorderRadiusImage class='RoadStateCard' borderRadius="2px"
borderColor="linear-gradient(360deg, rgba(55, 231, 255, 0.3), rgba(55, 231, 255, 0))" borderWidth="2px">
<div class="left">
<img src="./test.png">
<img :src="(cardData.pictures ? cardData.pictures[0] : null) || require(`./test.png` )">
<!-- <img :src="require(`./test.png`)"> -->
</div>
<div class="right">
<div class="info">
@ -12,11 +13,13 @@
</p>
</div>
<div class="controls">
<Button :style="{ background: firstBtnColor,width: '50%' }" @click.native="$emit('firstBtnClick', cardData.id)">{{
firstBtnText
}}</Button>
<Button v-if="cardData.state != 3" :style="{ background: lastBtnColor,width: '50%' }" @click.native="$emit('lastBtnClick', cardData.id)">{{ lastBtnText
}}</Button>
<Button :style="{ background: firstBtnColor, width: '50%' }"
@click.native="$emit('firstBtnClick', cardData.id)">{{
firstBtnText
}}</Button>
<Button v-if="cardData.state != 3" :style="{ background: lastBtnColor, width: '50%' }"
@click.native="$emit('lastBtnClick', cardData.id)">{{ lastBtnText
}}</Button>
</div>
</div>
@ -69,7 +72,7 @@ export default {
label: "位置"
},
{
key: "direction",
key: "stringDirection",
label: "方向"
},
{
@ -79,6 +82,11 @@ export default {
])
}
},
data(){
return {
picUrl: './test.png'
}
},
emit: ['firstBtnClick', "lastBtnClick"],
components: {
Button,
@ -123,11 +131,13 @@ export default {
flex: 1;
display: flex;
flex-direction: column;
>p {
font-size: 14px;
color: #f4f4f4;
line-height: 24px;
&:first-child{
&:first-child {
color: #37E7FF;
font-size: 18px;
font-weight: bold;

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

@ -90,10 +90,19 @@ export default {
label: '工作模式',
key: "workMode",
},
{
label: '上行工作状态',
key: "onWorkStatus",
},
{
label: '下行工作状态',
key: "inWorkStatus",
},
]
}
},
async created() {
console.log(333,this.dialogData,444)
this.data = { ...this.dialogData, roadName: null }
getProduct(this.dialogData.productId)
@ -107,6 +116,8 @@ export default {
this.requestURL(52)
.then((result) => {
this.data.workMode = { "00": "手动控制", "01": "自动控制", "02": "万年历" }[result.mode];
this.data.onWorkStatus = result.onWorkStatus
this.data.inWorkStatus = result.inWorkStatus
})
.catch((err) => {
@ -123,7 +134,6 @@ export default {
request.post(`business/device/functions/${this.dialogData.iotDeviceId}/${functionId}`, options)
.then((result) => {
if (result.code != 200) return reject();
resolve(result.data[0]);
})
.catch((err) => {

19
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/PerceiveEvent/index.vue

@ -23,6 +23,7 @@ import Video from "@screen/components/Video";
import Form from '@screen/components/FormConfig';
import request from "@/utils/request";
import { Message } from "element-ui";
import moment from "moment";
import { WarningTypeList, WarningSubclassList } from "@screen/utils/enum.js"
// import { getRoadInfoByStakeMark, getProduct } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"
@ -128,7 +129,7 @@ export default {
},
{
label: "持续时长:",
key: "parseOtherConfig.duration",
key: "duration",
type: "text",
},
{
@ -164,6 +165,14 @@ export default {
});
},
convertSecToHHmmss(sec) {
let currentTime = moment.duration(sec, "seconds");
return moment({
h: currentTime.hours(),
m: currentTime.minutes(),
s: currentTime.seconds(),
}).format("HH:mm:ss");
},
getDetails() {
request({
url: `/perceivedEvents/warning/getWarningById`,
@ -204,17 +213,17 @@ export default {
// "longitude": "116.493888",
// "latitude": "36.291145"
// };
data.duration = this.convertSecToHHmmss(data.duration);
this.data = { ...data, roadName: null, lane: data.lane?.split(",") || [] };
this.formList[4].options.options = WarningSubclassList[data.warningType] || [];
setTimeout(() => {
this.$refs.FormConfigRef.reset(true);
});
})
.catch(() => {
Message.error("详情获取失败");
.catch((e) => {
Message.error("详情获取失败"+e);
})
.finally(() => {
this.loading = false;

12
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SmartDevice/components/DeviceParams.vue

@ -50,14 +50,10 @@ export default {
created() {
// https://www.yuque.com/dayuanzhong-ovjwn/gkht0m/ww776d5kzs72ilzh?singleDoc=
//
// request({
// url: `/business/device/properties/latest/${this.dialogData.iotDeviceId || '10.0.36.143-1883'}`,
// method: "get",
// params: {}
// })
Promise.resolve({
code: 200,
data: [{ "id": "ab58aab1e4c5fcf0457b3f1d808be44e", "deviceId": "10.0.36.143-1883", "property": "1", "propertyName": "状态包", "type": "object", "numberValue": null, "objectValue": { "dc_out_electricity_2": 0, "dc_out_electricity_1": 0, "power_status": "1", "dc_out_voltage_2": 11.3238, "fan_status": "0", "dc_out_voltage_1": 11.3125, "ac_out_voltage_2": 232.5156, "ac_out_voltage_1": 231.1293, "ac_out_electricity_1": 0, "temperature": "7.9", "humidity": "40.6", "ac_out_electricity_2": 0.1964, "door_status": "1" }, "geoValue": null, "value": { "dc_out_electricity_2": 0, "dc_out_electricity_1": 0, "power_status": "1", "dc_out_voltage_2": 11.3238, "fan_status": "0", "dc_out_voltage_1": 11.3125, "ac_out_voltage_2": 232.5156, "ac_out_voltage_1": 231.1293, "ac_out_electricity_1": 0, "temperature": "7.9", "humidity": "40.6", "ac_out_electricity_2": 0.1964, "door_status": "1" }, "formatValue": { "dc_out_electricity_2": "0.00A", "dc_out_electricity_1": "0.00A", "power_status": "1", "dc_out_voltage_2": "11.32V", "fan_status": "0", "dc_out_voltage_1": "11.31V", "ac_out_voltage_2": "232.52V", "ac_out_voltage_1": "231.13V", "ac_out_electricity_1": "0.00A", "temperature": "7.9", "humidity": "40.6", "ac_out_electricity_2": "0.20A", "door_status": "1" }, "createTime": 1707187234249, "timestamp": 1707187234249, "formatTime": null, "state": null }]
request({
url: `/business/device/properties/latest/${this.dialogData.iotDeviceId || '10.0.36.143-1883'}`,
method: "get",
params: {}
}).then(result => {
if (result.code != 200) return;
const [deviceInfo] = result.data;

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/data.js

@ -82,7 +82,7 @@ export const formList = [
},
{
label: "事件描述:",
key: "direction",
key: "remark",
type: "input",
gridColumn: 3,
options: {

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js

@ -714,7 +714,7 @@ export const route = {
export const eventHappenTime = {
label: "事件发生时间:",
key: "startTime",
key: "occurrenceTime",
required: true,
type: "datePicker",
options:{

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/data.js

@ -8,7 +8,7 @@ export const tabConfigList = [
list: [
{ ...PresetFormItems.callPolicePersonName, key: 'dcEventAccident.reporterName' },
{ ...PresetFormItems.callPolicePersonPhone, key: 'dcEventAccident.reporterPhoneNumber' },
PresetFormItems.trafficAccidentType,
{ ...PresetFormItems.trafficAccidentType, key: 'dcEventAccident.accidentType' },
PresetFormItems.eventLevel,
{ ...PresetFormItems.locationMode, key: 'dcEventAccident.locationType' },
PresetFormItems.freeway,

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

@ -154,10 +154,14 @@ export default {
if (this.index == 1) {
formData.dcEventVehicleAccident.laneOccupancy = formData.dcEventVehicleAccident.laneOccupancy.join(',')
}
// console.log('formData',formData)
// return;
if (this.index == 8) {
let endStakeMark = formData.endStakeMark;
formData.dcEventAbnormalWeather.endStakeMark = (endStakeMark && endStakeMark.length > 0) ? ('K' + endStakeMark[0] + '+' + endStakeMark[1]) : '';
}
console.log('formData',formData)
return;
let stakeMark = formData.stakeMark;
let endStakeMark = formData.endStakeMark;
request({
url: `/dc/system/event`,
method: "post",
@ -165,7 +169,6 @@ export default {
...formData,
eventType: Number(this.index) + 1,
stakeMark: (stakeMark && stakeMark.length > 0) ? ('K' + stakeMark[0] + '+' + stakeMark[1]) : '',
endStakeMark: (endStakeMark && endStakeMark.length > 0) ? ('K' + endStakeMark[0] + '+' + endStakeMark[1]) : '',
}
})
.then((result) => {

91
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/data.js

@ -23,8 +23,90 @@ export const tabMap = {
text: "处置记录",
},
};
export const gjSearchFormList = [
{
label: "事件来源:",
key: "warningSource",
type: "select",
options: {
options: [
{
key: "1",
label: "视频AI",
},
{
key: "2",
label: "雷达识别",
},
{
key: "3",
label: "锥桶",
},
{
key: "4",
label: "护栏碰撞",
},
{
key: "5",
label: "扫码报警",
},
{
key: "6",
label: "非机预警",
},
],
},
},
{
label: "方向:",
key: "direction",
type: "RadioGroup",
options: {
options: [
{
key: "1",
label: "上行",
},
{
key: "3",
label: "下行",
},
],
},
},
{
label: "时间范围:",
key: "daterange",
required: false,
type: "datePicker",
options: {
type: "daterange",
format: "yyyy-MM-dd HH:mm:ss",
valueFormat: "yyyy-MM-dd HH:mm:ss",
},
},
{
...PresetFormItems.station,
label: "开始桩号:",
required: false,
},
merge(cloneDeep(PresetFormItems.station), {
options: {
options: [
{
key: "endStakeMark[0]",
},
{
key: "endStakeMark[1]",
},
],
},
label: "结束桩号:",
required: false,
}),
];
export const searchFormList = [
export const gzSearchFormList = [
PresetFormItems.eventSources,
PresetFormItems.eventType,
{
@ -55,8 +137,8 @@ export const searchFormList = [
type: "datePicker",
options: {
type: "daterange",
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss'
format: "yyyy-MM-dd HH:mm:ss",
valueFormat: "yyyy-MM-dd HH:mm:ss",
},
},
{
@ -77,6 +159,5 @@ export const searchFormList = [
},
label: "结束桩号:",
required: false,
}
)
}),
];

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

@ -57,7 +57,7 @@ import Pagination from "@screen/components/Pagination.vue";
import InputSearch from "@screen/components/InputSearch/index.vue";
import EventDetailDialog from "./EventDetailDialog/index";
import FormEvent from "./FormEvent/index";
import { tabMap, searchFormList } from "./data";
import { tabMap, gjSearchFormList, gzSearchFormList } from "./data";
import request from "@/utils/request";
import { Loading } from 'element-ui';
@ -74,6 +74,39 @@ function getMockData() {
}));
}
const warningSourceMapping = {
1: '视频AI',
2: '雷达识别',
3: '锥桶',
4: '护栏碰撞',
5: '扫码报警',
6: '非机预警',
}
const directionMapping = {
'1': '上行',
'2': '中',
'3': '下行'
}
const warningStateMapping = {
1: '上报',
2: '已完成',
3: '已终止',
4: '自动结束'
}
const warningTypeMapping = {
1: '交通拥堵',
2: '行人',
3: '非机动车',
4: '停车',
5: '倒车/逆行',
6: '烟火',
7: '撒落物8异常天气',
9: '护栏碰撞',
10: '交通事故',
11: '车辆故障',
99: '其它',
}
export default {
name: "RoadNetworkMonitoring2",
components: {
@ -89,7 +122,7 @@ export default {
return {
data: [],
total: 0,
searchFormList,
searchFormList: [],
activeName: "-1",
panels: [
{
@ -120,6 +153,7 @@ export default {
};
},
created() {
this.searchFormList = gjSearchFormList;
this.getData();
},
methods: {
@ -127,8 +161,9 @@ export default {
this.activeName = activeName;
this.searchData.eventState = activeName == "-1" ? null : activeName;
this.searchFormList = activeName == "-1" ? gjSearchFormList : gzSearchFormList;
this.getData();
this.getData(activeName);
},
getStateCardBind(item) {
const { state, textColor, text } = tabMap[this.activeName];
@ -140,15 +175,43 @@ export default {
};
},
getData() {
request({
url: `/dc/system/event/list`,
method: "get",
params: this.searchData,
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
this.data = result.rows;
this.total = result.total;
});
console.log('activeName', this.activeName)
if (this.activeName === '-1') {
console.log('activeName22', this.activeName)
request({
url: `/perceivedEvents/warning/perceivedEventsList`,
method: "post",
params: this.searchData,
data: {}
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
result.rows.forEach(it => {
it.stringEventSource = warningSourceMapping[it.warningSource];
it.stringDirection = directionMapping[it.direction] || it.direction;
it.startTime = it.warningTime;
if (it.otherConfig) {
let otherConfig = JSON.parse(it.otherConfig);
it.pictures = otherConfig.pictures || [];
}
})
this.data = result.rows;
this.total = result.total;
});
} else {
request({
url: `/dc/system/event/list`,
method: "get",
params: this.searchData,
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
this.data = result.rows;
this.total = result.total;
});
}
// request({
// url: `/dc/system/event/count`,
@ -220,15 +283,41 @@ export default {
},
firstBtnClick(id) {
console.log("id", id);
request({
url: `/dc/system/event/${id}`,
method: "get",
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
this.detailDialogFormData = result.data;
this.eventDetailDialogVisible = true;
});
if (this.activeName == '-1') {
request({
url: `/perceivedEvents/warning/getWarningById`,
method: "post",
data: { id }
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
let data = result.data;
data.stringEventSource = warningSourceMapping[data.warningSource];
data.direction = directionMapping[data.direction] || data.direction;
data.startTime = data.warningTime;
data.stringEventState = warningStateMapping[data.warningState];
data.stringEventType = warningTypeMapping[data.warningType];
this.detailDialogFormData = data;
// console.log('data', this.detailDialogFormData)
this.eventDetailDialogVisible = true;
});
} else {
request({
url: `/dc/system/event/${id}`,
method: "get",
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
let data = result.data;
data.stringDirection = directionMapping[data.direction] || data.direction;
this.detailDialogFormData = data;
this.eventDetailDialogVisible = true;
});
}
},
handleClose() {
this.eventDetailDialogVisible = false;
@ -247,6 +336,8 @@ export default {
...this.searchData,
eventType: data.eventType,
eventSources: data.eventSources,
warningSource: data.warningSource,
direction: data.direction,
startTime: daterange && daterange.length > 0 ? daterange[0] : "",
endTime: daterange && daterange.length > 0 ? daterange[1] : "",
stakeMark: stakeMark,

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

@ -113,16 +113,16 @@ export default {
let numData = []
let mileageData = []
res.data.forEach(item => {
sectionNameData.push(item.section_name)
avgNumData.push(item.avgNum)
lastNumData.push(item.lastNum)
numData.push(item.num)
mileageData.push(item.mileage)
sectionNameData.push(item.section_name)
});
chartsStatistics.series[0].data = avgNumData
chartsStatistics.series[1].data = lastNumData
chartsStatistics.series[2].data = numData
chartsStatistics.series[3].data = mileageData
chartsStatistics.series[0].data = numData //
chartsStatistics.series[1].data = avgNumData //
chartsStatistics.series[2].data = lastNumData //
chartsStatistics.series[3].data = mileageData //
chartsStatistics.xAxis.data = sectionNameData
})
},
@ -140,10 +140,10 @@ export default {
avgTimeData.push(item.avgTime)
lastNumData.push(item.lastNum)
eventSubclassData.push(item.eventSubclassName)
chartsStatistics2.series[0].data = numData
chartsStatistics2.series[1].data = lastNumData
chartsStatistics2.series[2].data = avgTimeData
chartsStatistics2.series[3].data = lastAvgTimeData
chartsStatistics2.series[0].data = numData //
chartsStatistics2.series[1].data = lastNumData //
chartsStatistics2.series[2].data = avgTimeData //
chartsStatistics2.series[3].data = lastAvgTimeData //
chartsStatistics2.xAxis.data = eventSubclassData
})
@ -160,8 +160,8 @@ export default {
numData.push(item.num)
avgTimeData.push(item.avgTime)
})
chartsStatistics3.series[0].data = numData
chartsStatistics3.series[1].data = avgTimeData
chartsStatistics3.series[0].data = numData //
chartsStatistics3.series[1].data = avgTimeData //
chartsStatistics3.xAxis.data = typeNameData
})
},

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

@ -44,8 +44,12 @@ var options = {
}
},
formatter: (params) => {
let count = 0;
echartsData.forEach((it) => {
count += it.value;
})
let obj = echartsData.filter(it => { return it.name == params })
return `{ast|${obj[0].name}} {bst|${Math.round(obj[0].value)}%}`
return `{ast|${obj[0].name}} {bst|${Math.round(obj[0].value / count * 100)}%}`
},
data: echartsData?.map(x => x),
},

21
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/index.vue

@ -55,8 +55,14 @@ export default {
getWarningStateDay().then(res => {
if (res.code == 200) {
let data = res.data;
if (data.lemgth > 0) {
if (data.length > 0) {
window.echartsData = [];
// let count = 0;
// data.forEach((it) => {
// count += it.number;
// })
for (let i = 0; i < data.length; i++) {
let it = data[i];
if (it.warningState == 1) {
@ -89,11 +95,6 @@ export default {
}
let count = 0;
echartsData.forEach((it) => {
count += it.value;
})
chartsStatistics.legend.data = window.echartsData?.map(x => x);
chartsStatistics.series[0].data = echartsData.map((item, index) => {
@ -140,10 +141,10 @@ export default {
context.lineWidth = 1; // 线
//
drawRoundRect(context, 272, 50, 120, 24, 12, gr)
drawRoundRect(context, 272, 78, 120, 24, 12, gr)
drawRoundRect(context, 272, 106, 120, 24, 12, gr)
drawRoundRect(context, 270, 36, 120, 24, 12, gr)
drawRoundRect(context, 270, 63, 120, 24, 12, gr)
drawRoundRect(context, 270, 90, 120, 24, 12, gr)
drawRoundRect(context, 270, 117, 120, 24, 12, gr)
});
});
},

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

@ -0,0 +1,679 @@
<template>
<div class='congestion'>
<div class="board">
<ProgressBar class="keep-ratio" @selectItem="selectProgress" :dataList="dataList" :selectIndex="selectIndex" />
<div class="searchPanel">
<el-select v-model="area" size="mini" class="selectRoad" placeholder="请选择" default-first-option>
<el-option v-for="item in areaOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-select v-model="year" size="mini" class="selectRoad" placeholder="请选择">
<el-option v-for="item in yearOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-date-picker size="mini" v-if="year != 'quarter'" class="selectRoad" v-model="dateTime" style="width:140px;"
:type="year" placeholder="请选择" />
<el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="year == 'quarter'" v-model="dateTime"
aria-placeholder="请选季度" />
<el-button type="primary" size="mini" class="btnSearch" @click="searchQuery" icon="el-icon-search">查询</el-button>
<el-button class="btnReset" size="mini" icon="el-icon-refresh-left" @click="onReset">重置</el-button>
</div>
</div>
<div class="body">
<div>
<WgtTitle :title="'感知事件趋势分析'"></WgtTitle>
<div id="chart1" class="btnChart" />
</div>
<div>
<WgtTitle :title="'感知事件类型分析'"></WgtTitle>
<div id="chart2" class="btnChart" />
</div>
<div>
<WgtTitle :title="'桩号范围内事件分析趋势'"></WgtTitle>
<div id="chart3" class="btnChart" />
</div>
</div>
</div>
</template>
<script>
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';
const drawRoundRect = (ctx, x, y, width, height, radius, gr) => {
// ctx, x, y, , ,
ctx.beginPath();
ctx.fillStyle = gr;
ctx.arc(x + radius, y + radius, radius, Math.PI, Math.PI * 3 / 2);
ctx.lineTo(width - radius + x, y);
ctx.arc(width - radius + x, radius + y, radius, Math.PI * 3 / 2, Math.PI * 2);
ctx.lineTo(width + x, height + y - radius);
ctx.arc(width - radius + x, height - radius + y, radius, 0, Math.PI * 1 / 2);
ctx.lineTo(radius + x, height + y);
ctx.arc(radius + x, height - radius + y, radius, Math.PI * 1 / 2, Math.PI);
ctx.closePath();
//ctx.stroke();
ctx.fill()
}
export default {
name: 'EventQuery',
components: {
WgtTitle,
ProgressBar,
ElQuarterPicker
},
data() {
return {
yearOptions: [
{
value: 'year',
label: '年度'
}, {
value: 'month',
label: '月'
},
{
value: 'date',
label: '日'
},
{
value: 'quarter',
label: '季'
},],
areaOptions: [{
value: '1',
label: '济南方向'
}, {
value: '2',
label: '菏泽方向'
}],
dateTime: "2024",
area: '1',
dataList: [],
quarter: "",
selectIndex: 3,
selectId: 3,
year: "year",
list: [
{ name: '大学城-长清', direction: '济南方向', state: "正常", speed: '108.14km/h', follow: '161' },
{ name: '大学城-长清', direction: '济南方向', state: "正常", speed: '108.14km/h', follow: '161' },
{ name: '大学城-长清', direction: '济南方向', state: "正常", speed: '108.14km/h', follow: '161' },
{ name: '大学城-长清', direction: '济南方向', state: "正常", speed: '108.14km/h', follow: '161' },
{ name: '大学城-长清', direction: '济南方向', state: "正常", speed: '108.14km/h', follow: '161' },
{ name: '大学城-长清', direction: '济南方向', state: "正常", speed: '108.14km/h', follow: '161' }
]
}
},
created() {
},
methods: {
selectProgress(item, index,) {
console.log("))))))))))))", item.id, item, index)
this.selectIndex = index
this.selectId = item.id;
this.searchQuery()
},
onReset() {
this.area = '1';
this.year = "year";
this.dateTime = '2024';
this.selectId = 0;
},
searchQuery() {
let dateTime = this.dateTime;
if (dateTime == "") {
this.$message.error('没有选日期参数!');
return
}
var quarter = 0;
if (this.year == "year") {
dateTime = new Date(dateTime);
dateTime = dateTime.getFullYear() + "-01-01 00:00:00";
console.log(dateTime);
}
if (this.year == "month") {
dateTime = new Date(dateTime);
let m = dateTime.getMonth() + 1;
m = m < 10 ? "0" + m : m;
dateTime = dateTime.getFullYear() + "-" + m + "-01 00:00:00";
console.log(dateTime);
}
if (this.year == "quarter") {
console.log(dateTime);
dateTime = new Date(dateTime);
let m = dateTime.getMonth() + 1;
if (m == 1) m = 1;
if (m == 2) m = 4;
if (m == 3) m = 7;
if (m == 4) m = 10;
quarter = m;
m = m < 10 ? "0" + m : m;
dateTime = dateTime.getFullYear() + "-" + m + "-01 00:00:00";
console.log(dateTime);
}
if (this.year == "date") {
this.year = "day";
dateTime = new Date(dateTime);
let m = dateTime.getMonth() + 1;
m = m < 10 ? "0" + m : m;
let d = dateTime.getDate();
d = d < 10 ? "0" + d : d;
dateTime = dateTime.getFullYear() + "-" + m + "-" + d + " 00:00:00";
}
//
getWarningTrend({
"type": this.year,
"sectionId": this.selectId,
"createTime": dateTime,
"direction": this.area,
}).then(res => {
if (res.code == 200) {
let data = res.data;
chart1.series[0].data = [];
if (data.length > 0) {
const maxObject = data.reduce((prev, current) => (current.number > prev.number ? current : prev));
let xData = [];
let numbers = [];
data.forEach(it => {
if (this.year == "year") {
xData.push(it.month + "月");
}
if (this.year == "month") {
xData.push(it.day.split("-")[2] + "日");
}
if (this.year == "day") {
xData.push(it.time.split(" ")[1] + "小时");
}
if (this.year == "quarter") {
xData.push(it.QUARTER);
}
if (it.number == maxObject.number) {
numbers.push({
value: it.number,
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: '#FFB904' // 0%
}, {
offset: 1, color: '#FF6969' // 100%
}],
global: false // false
},
borderRadius: 6
}
});
} else {
numbers.push({
value: it.number,
itemStyle: {
borderRadius: 6
}
});
}
})
chart1.xAxis.data = xData;
chart1.series[0].data = numbers;
}
}
this.myChart1.setOption(chart1);
});
//
getWarningSectionType({
"type": this.year,
"sectionId": this.selectId,
"createTime": dateTime,
"direction": this.area,
}).then(res => {
chart2.series[0].data = [];
if (res.code == 200) {
let types = [];
let numbers = [];
let data = res.data.warningTypeList;
let total = res.data.total;
data.forEach((it) => {
if (it.warningType == 1) {
types.push("交通拥堵");
}
if (it.warningType == 2) {
types.push("行人");
}
if (it.warningType == 3) {
types.push("非机动车");
}
if (it.warningType == 4) {
types.push("停车");
}
if (it.warningType == 5) {
types.push("倒车/逆行");
}
if (it.warningType == 6) {
types.push("烟火");
}
if (it.warningType == 7) {
types.push("撒落物");
}
if (it.warningType == 8) {
types.push("异常天气");
}
if (it.warningType == 9) {
types.push("护栏碰撞");
}
numbers.push({
name: types[types.length - 1],
value: it.number
});
})
chart2.legend.data = types;
chart2.legend.formatter = function (name) {
let total = 0
let target
for (let i = 0; i < numbers.length; i++) {
total += numbers[i].value;
if (types[i] == name) {
target = numbers[i].value;
}
}
var arr = [
'{a|' + name + '}',
'{b|' + ((target / total) * 100).toFixed(2) + '%}',
]
return arr.join(' ')
};
chart2.title.text = `{zb|${total}}`;
chart2.title.subtext = "类型分析";
chart2.series[0].data = numbers;
//
this.myChart2.on('mouseover', (params) => {
if (params.componentType == 'graphic') {
return
}
// console.log(params);
chart2.title.text = `{zb|${Math.round(params.data.value / total * 100)}%}`;
chart2.title.subtext = params.data.name;
this.myChart2.setOption(chart2);
})
//
this.myChart2.on('mouseout', (params) => {
chart2.title.text = `{zb|${total}}`;
chart2.title.subtext = "类型分析";
this.myChart2.setOption(chart2);
})
}
this.myChart2.setOption(chart2);
})
//
getSectionMarkNumber({
"type": this.year,
"sectionId": this.selectId,
"createTime": dateTime,
"direction": this.area,
}).then(res => {
chart3.series[0].data = [];
chart3.series[1].data = [];
if (res.code == 200) {
let data = res.data;
if (this.year != "quarter") {
const maxObject = data.filter(it => it.sectionNumber > 0).reduce((prev, current) => (current.sectionNumber > prev.sectionNumber ? current : prev));
let zhs = [];
let values1 = [];
let values2 = [];
data.forEach((it) => {
if (it.sectionNumber > 0) {
values2.push(it.sectionNumber);
zhs.push(it.stakeMarkId);
if (maxObject && maxObject.sectionNumber == it.sectionNumber) {
values1.push({
value: it.sectionNumber,
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: '#01D5BC' // 0%
}, {
offset: 1, color: '#003B4E' // 100%
}],
global: false // false
},
borderRadius: 6
},
})
} else {
values1.push({
value: it.sectionNumber,
itemStyle: {
borderRadius: 6
},
})
}
}
})
chart3.xAxis.data = zhs;
chart3.series[0].data = values1;
chart3.series[1].data = values2;
} else {
let zhs = [];
let values = [];
data.forEach((dt, i) => {
dt.forEach((it) => {
if (it.number > 0) {
if (quarter == 1 && it.QUARTER == "第一季度") {
values[i] = it.number;
zhs[i] = it.stakeMark;
}
if (quarter == 4 && it.QUARTER == "第二季度") {
values[i] = it.number;
zhs[i] = it.stakeMark;
}
if (quarter == 7 && it.QUARTER == "第三季度") {
values[i] = it.number;
zhs[i] = it.stakeMark;
}
if (quarter == 10 && it.QUARTER == "第四季度") {
values[i] = it.number;
zhs[i] = it.stakeMark;
}
}
})
})
chart3.xAxis.data = zhs;
chart3.series[0].data = values;
chart3.series[1].data = values;
}
}
this.myChart3.setOption(chart3);
})
if (this.year == "day")
this.year = "date";
},
},
mounted() {
setTimeout(() => {
this.$nextTick(() => {
getRoadSectionList().then(res => {
console.log(res);
if (res.code == 200) {
let rows = res.rows;
this.dataList = [];
rows.forEach(it => {
this.dataList.push({
title: it.sectionName.split("-")[0],
id: it.id,
});
})
console.log("dataList", this.dataList)
// if (rows.length > 0) {
// let lastRoad = rows[rows.length - 1].sectionName.split("-")[1];
// this.dataList.push({
// title: lastRoad,
// id: rows[rows.length - 1].id,
// });
// }
}
this.searchQuery();
})
var myChart1 = echarts.init(document.getElementById('chart1'));
myChart1.setOption(chart1);
var myChart2 = echarts.init(document.getElementById('chart2'));
myChart2.setOption(chart2);
var myChart3 = echarts.init(document.getElementById('chart3'));
myChart3.setOption(chart3);
this.myChart1 = myChart1;
this.myChart2 = myChart2;
this.myChart3 = myChart3;
const domMap = document.getElementById("chart2");
let parentDiv = domMap.firstChild;
// canvas
let canvas = document.createElement('canvas');
canvas.width = parentDiv.offsetWidth;
canvas.height = parentDiv.offsetHeight;
parentDiv.appendChild(canvas);
const context = canvas.getContext('2d');
context.lineWidth = 1; // 线
//
//
// var gr = context.createLinearGradient(247, 63, 450, 0);
// gr.addColorStop(1, 'rgba(92,197,255,0)');
// gr.addColorStop(0, 'rgba(92,197,255,0.5)');
// drawRoundRect(context, 267, 57, 140, 24, 12, gr)
// //
// var gr = context.createLinearGradient(247, 63, 450, 0);
// gr.addColorStop(1, 'rgba(92,197,255,0)');
// gr.addColorStop(0, 'rgba(92,197,255,0.5)');
// drawRoundRect(context, 267, 108, 140, 24, 12, gr)
// //
// var gr = context.createLinearGradient(240, 63, 450, 0);
// gr.addColorStop(1, 'rgba(92,197,255,0)');
// gr.addColorStop(0, 'rgba(92,197,255,0.5)');
// drawRoundRect(context, 267, 157, 140, 24, 12, gr)
// //
// var gr = context.createLinearGradient(240, 63, 450, 0);
// gr.addColorStop(1, 'rgba(92,197,255,0)');
// gr.addColorStop(0, 'rgba(92,197,255,0.5)');
// drawRoundRect(context, 267, 208, 140, 24, 12, gr)
// //
// var gr = context.createLinearGradient(240, 63, 450, 0);
// gr.addColorStop(1, 'rgba(92,197,255,0)');
// gr.addColorStop(0, 'rgba(92,197,255,0.5)');
// drawRoundRect(context, 267, 258, 140, 24, 12, gr)
// //
// var gr = context.createLinearGradient(400, 63, 450, 0);
// gr.addColorStop(1, 'rgba(92,197,255,0)');
// gr.addColorStop(0, 'rgba(92,197,255,0.5)');
// drawRoundRect(context, 416, 57, 140, 24, 12, gr)
// //
// var gr = context.createLinearGradient(350, 63, 450, 0);
// gr.addColorStop(1, 'rgba(92,197,255,0)');
// gr.addColorStop(0, 'rgba(92,197,255,0.5)');
// drawRoundRect(context, 416, 108, 140, 24, 12, gr)
// //
// var gr = context.createLinearGradient(300, 63, 450, 0);
// gr.addColorStop(1, 'rgba(92,197,255,0)');
// gr.addColorStop(0, 'rgba(92,197,255,0.5)');
// drawRoundRect(context, 416, 157, 140, 24, 12, gr)
// //
// var gr = context.createLinearGradient(300, 63, 450, 0);
// gr.addColorStop(1, 'rgba(92,197,255,0)');
// gr.addColorStop(0, 'rgba(92,197,255,0.5)');
// drawRoundRect(context, 416, 208, 140, 24, 12, gr);
});
});
},
}
</script>
<style lang='scss' scoped>
.congestion {
width: 100%;
position: relative;
.body {
display: flex;
align-items: center;
justify-content: space-evenly;
font-size: 14px;
>div {
width: 33%;
height: 470px;
background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #064258 100%);
border: 1px solid;
border-image: linear-gradient(360deg, rgba(55, 231, 255, 0.3), rgba(55, 231, 255, 0)) 1 1;
}
:nth-child(1) {
margin-right: 6px;
}
:nth-child(2) {
margin-left: 6px;
margin-right: 6px;
}
:nth-child(3) {
margin-left: 6px;
}
.btnChart {
height: 330px;
width: 90%;
margin: 95px auto 0;
}
}
.board {
height: 100px;
width: 100%;
position: absolute;
top: 30px;
padding: 18px 20px;
// background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #064258 100%);
border-radius: 5px 5px 5px 5px;
opacity: 1;
// border: 1px solid;
// border-image: linear-gradient(360deg, rgba(55, 231, 255, 0.3), rgba(55, 231, 255, 0)) 1 1;
display: flex;
justify-content: space-between;
align-items: center;
flex-direction: column;
.searchPanel {
display: flex;
align-items: center;
height: 40px;
width: 100%;
font-size: 14px;
margin-top: 10px;
div {
white-space: nowrap;
margin-right: 4px;
}
.inputZh {
width: 47px;
::v-deep {
.el-input__inner {
background-color: #064258 !important;
border-width: 0px !important;
}
}
}
.inputJl {
margin-left: 5px;
margin-right: 10px;
}
.selectRoad {
width: 100px;
border: 1px solid #00B3CC;
::v-deep {
.el-input__inner {
background-color: #064258 !important;
border-width: 0px !important;
}
}
}
.btnSearch {
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);
margin-left: 10px;
border-color: transparent;
}
.btnReset {
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);
;
border-color: transparent;
color: white;
}
}
}
}
.charts {
height: 100px;
width: 100%;
}
</style>
<style lang="scss">
div.el-popover:has(> .el-date-picker) div .el-picker-panel__body .el-picker-panel__content table tr td.today span,
div.el-popover:has(> .el-date-picker) div .el-picker-panel__body .el-picker-panel__content table tr td.today .cell,
div.el-picker-panel.el-date-picker.el-popper div .el-picker-panel__body .el-picker-panel__content table tr td.today span,
div.el-picker-panel.el-date-picker.el-popper div .el-picker-panel__body .el-picker-panel__content table tr td.today .cell,
div.el-picker-panel.el-date-range-picker.el-popper div .el-picker-panel__body .el-picker-panel__content table tr td.today span,
div.el-picker-panel.el-date-range-picker.el-popper div .el-picker-panel__body .el-picker-panel__content table tr td.today .cell {
color: #fff
}
</style>

233
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue

@ -1,20 +1,19 @@
<template>
<div class='congestion'>
<div class="board">
<ProgressBar class="keep-ratio" @selectItem="selectProgress" :dataList="dataList" :selectIndex="selectId" />
<ProgressBar class="keep-ratio" @selectItem="selectProgress" :dataList="dataList" :selectIndex="selectIndex" />
<div class="searchPanel">
<el-select v-model="area" size="mini" class="selectRoad" placeholder="请选择" default-first-option>
<el-option v-for="item in areaOptions" :key="item.value" :label="item.label" :value="item.value">
<RadioGroup :options="[{ key: '1', label: '菏泽' }, { key: '3', label: '济南' }]" v-model="direction" type="button" />
<el-select v-model="type" size="mini" class="selectRoad" placeholder="请选择">
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-select v-model="year" size="mini" class="selectRoad" placeholder="请选择">
<el-option v-for="item in yearOptions" :key="item.value" :label="item.label" :value="item.value">
<el-select v-model="quarter" size="medium" v-if="type == 'quarter'" class="selectRoad-medium" placeholder="请选择">
<el-option v-for="item in quarterOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-date-picker size="mini" v-if="year != 'quarter'" class="selectRoad" v-model="dateTime" style="width:140px;"
:type="year" placeholder="请选择" />
<el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="year == 'quarter'" v-model="dateTime"
aria-placeholder="请选季度" />
<el-date-picker size="mini" v-if="type != 'quarter'" class="selectRoad" v-model="dateTime" style="width:140px;"
:type="type == 'date' ? 'date' : type == 'month' ? 'month' : type == 'year' ? 'year' : ''" placeholder="请选择" />
<el-button type="primary" size="mini" class="btnSearch" @click="searchQuery" icon="el-icon-search">查询</el-button>
<el-button class="btnReset" size="mini" icon="el-icon-refresh-left" @click="onReset">重置</el-button>
@ -44,6 +43,7 @@
<script>
import WgtTitle from '../../../widgets/title'
import RadioGroup from '@screen/components/FormConfig/components/RadioGroup/index.vue';
import ProgressBar from './progressBar';
import * as echarts from "echarts";
import chart1 from "./assets/charts";
@ -73,14 +73,15 @@ export default {
components: {
WgtTitle,
ProgressBar,
ElQuarterPicker
ElQuarterPicker,
RadioGroup
},
data() {
return {
yearOptions: [
typeOptions: [
{
value: 'year',
label: '年'
label: '年'
}, {
value: 'month',
label: '月'
@ -92,69 +93,32 @@ export default {
{
value: 'quarter',
label: '季'
},],
areaOptions: [{
value: '1',
label: '济南方向'
}, {
value: '2',
label: '菏泽方向'
}],
dateTime: "2024",
area: '1',
dataList: [
{
title: "殷家林枢纽"
},
{
title: "大学城立交"
},
{
title: "长清立交"
},
{
title: "松竹枢纽"
},
{
title: "孝里立交"
},
{
title: "平阴立交"
},
{
title: "孔村枢纽"
},
{
title: "平阴南立交"
},
{
title: "魏雪枢纽"
},
{
title: "东平立交"
},
{
title: "东平湖枢纽"
},
}],
quarter: '1',
quarterOptions: [
{
title: "韩岗立交"
label: "第一季度",
value: "1"
},
{
title: "梁山立交"
label: "第二季度",
value: "2"
},
{
title: "鄄郓枢纽"
label: "第三季度",
value: "3"
},
{
title: "嘉祥西立交"
},
{
title: "王官屯枢纽"
label: "第四季度",
value: "4"
}
],
quarter: "",
dateTime: "2024",
direction: '1',
dataList: [],
selectIndex: 3,
selectId: 3,
year: "year",
type: "year",
list: [
{ name: '大学城-长清', direction: '济南方向', state: "正常", speed: '108.14km/h', follow: '161' },
{ name: '大学城-长清', direction: '济南方向', state: "正常", speed: '108.14km/h', follow: '161' },
@ -169,66 +133,43 @@ export default {
},
methods: {
selectProgress(item, index) {
this.selectId = index;
selectProgress(item, index,) {
this.selectIndex = index
this.selectId = item.id;
this.searchQuery()
},
onReset() {
this.area = '1';
this.year = "year";
this.direction = '1';
this.type = "year";
this.dateTime = '2024';
this.selectId = 0;
this.selectId = this.dataList[0].id;
this.selectIndex = 1
},
searchQuery() {
let dateTime = this.dateTime;
if (dateTime == "") {
this.$message.error('没有选日期参数!');
return
}
var quarter = 0;
if (this.year == "year") {
dateTime = new Date(dateTime);
dateTime = dateTime.getFullYear() + "-01-01 00:00:00";
console.log(dateTime);
}
if (this.year == "month") {
dateTime = new Date(dateTime);
let m = dateTime.getMonth() + 1;
m = m < 10 ? "0" + m : m;
dateTime = dateTime.getFullYear() + "-" + m + "-01 00:00:00";
console.log(dateTime);
}
if (this.year == "quarter") {
console.log(dateTime);
dateTime = new Date(dateTime);
let m = dateTime.getMonth() + 1;
if (m == 1) m = 1;
if (m == 2) m = 4;
if (m == 3) m = 7;
if (m == 4) m = 10;
quarter = m;
m = m < 10 ? "0" + m : m;
dateTime = dateTime.getFullYear() + "-" + m + "-01 00:00:00";
console.log(dateTime);
let startTime = "";
if (this.type == "quarter") {
let year = moment().year();
if (this.quarter == 1) {
startTime = `${year}-01-01 00:00:00`
} else if (this.quarter == 2) {
startTime = `${year}-04-01 00:00:00`
} else if (this.quarter == 3) {
startTime = `${year}-07-01 00:00:00`
} else {
startTime = `${year}-10-01 00:00:00`
}
} else {
startTime = moment(this.dateTime).format('YYYY-MM-DD HH:mm:ss')
}
console.log("startTime", startTime)
if (this.year == "date") {
this.year = "day";
dateTime = new Date(dateTime);
let m = dateTime.getMonth() + 1;
m = m < 10 ? "0" + m : m;
let d = dateTime.getDate();
d = d < 10 ? "0" + d : d;
dateTime = dateTime.getFullYear() + "-" + m + "-" + d + " 00:00:00";
}
//
getWarningTrend({
"type": this.year,
"type": this.type,
"sectionId": this.selectId,
"createTime": dateTime,
"direction": this.area,
"createTime": startTime,
"direction": this.direction,
}).then(res => {
if (res.code == 200) {
let data = res.data;
@ -239,16 +180,16 @@ export default {
let numbers = [];
data.forEach(it => {
if (this.year == "year") {
if (this.type == "year") {
xData.push(it.month + "月");
}
if (this.year == "month") {
if (this.type == "month") {
xData.push(it.day.split("-")[2] + "日");
}
if (this.year == "day") {
if (this.type == "day") {
xData.push(it.time.split(" ")[1] + "小时");
}
if (this.year == "quarter") {
if (this.type == "quarter") {
xData.push(it.QUARTER);
}
if (it.number == maxObject.number) {
@ -292,10 +233,10 @@ export default {
//
getWarningSectionType({
"type": this.year,
"type": this.type,
"sectionId": this.selectId,
"createTime": dateTime,
"direction": this.area,
"createTime": startTime,
"direction": this.direction,
}).then(res => {
chart2.series[0].data = [];
if (res.code == 200) {
@ -383,16 +324,16 @@ export default {
})
//
getSectionMarkNumber({
"type": this.year,
"type": this.type,
"sectionId": this.selectId,
"createTime": dateTime,
"direction": this.area,
"createTime": startTime,
"direction": this.direction,
}).then(res => {
chart3.series[0].data = [];
chart3.series[1].data = [];
if (res.code == 200) {
let data = res.data;
if (this.year != "quarter") {
if (this.type != "quarter") {
const maxObject = data.filter(it => it.sectionNumber > 0).reduce((prev, current) => (current.sectionNumber > prev.sectionNumber ? current : prev));
let zhs = [];
let values1 = [];
@ -444,19 +385,19 @@ export default {
data.forEach((dt, i) => {
dt.forEach((it) => {
if (it.number > 0) {
if (quarter == 1 && it.QUARTER == "第一季度") {
if (it.QUARTER == "第一季度") {
values[i] = it.number;
zhs[i] = it.stakeMark;
}
if (quarter == 4 && it.QUARTER == "第二季度") {
if (it.QUARTER == "第二季度") {
values[i] = it.number;
zhs[i] = it.stakeMark;
}
if (quarter == 7 && it.QUARTER == "第三季度") {
if (it.QUARTER == "第三季度") {
values[i] = it.number;
zhs[i] = it.stakeMark;
}
if (quarter == 10 && it.QUARTER == "第四季度") {
if (it.QUARTER == "第四季度") {
values[i] = it.number;
zhs[i] = it.stakeMark;
}
@ -472,8 +413,8 @@ export default {
this.myChart3.setOption(chart3);
})
if (this.year == "day")
this.year = "date";
if (this.type == "day")
this.type = "date";
},
},
mounted() {
@ -489,16 +430,16 @@ export default {
this.dataList.push({
title: it.sectionName.split("-")[0],
id: it.id,
});
})
if (rows.length > 0) {
let lastRoad = rows[rows.length - 1].sectionName.split("-")[1];
this.dataList.push({
title: lastRoad,
id: rows[rows.length - 1].id,
});
}
console.log("dataList", this.dataList)
// if (rows.length > 0) {
// let lastRoad = rows[rows.length - 1].sectionName.split("-")[1];
// this.dataList.push({
// title: lastRoad,
// id: rows[rows.length - 1].id,
// });
// }
}
this.searchQuery();
@ -634,7 +575,7 @@ export default {
height: 100px;
width: 100%;
position: absolute;
top: 30px;
top: 40px;
padding: 18px 20px;
// background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #064258 100%);
border-radius: 5px 5px 5px 5px;
@ -654,7 +595,7 @@ export default {
height: 40px;
width: 100%;
font-size: 14px;
margin-top: 10px;
margin-top: 15px;
div {
white-space: nowrap;
@ -689,6 +630,18 @@ export default {
}
}
.selectRoad-medium {
width: 120px;
border: 1px solid #00B3CC;
::v-deep {
.el-input__inner {
background-color: #064258 !important;
border-width: 0px !important;
}
}
}
.btnSearch {
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);
margin-left: 10px;

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

@ -0,0 +1,205 @@
<template>
<div class='congestion'>
<div :style="{ width: dataList.length * 300 }">
<div :class="selectIndex == index ?
(selectLine < 1 ? 'item action Abefore' : 'item action Aafter') :
(selectIndex + selectLine == index ?
(selectLine < 1 ? 'item action Aafter' : 'item action Abefore') : 'item')"
v-for="(item, index) in dataList" :key="index">
<i class="after" @click="selectItem(index, -1, dataList[index - 1])"></i>
<i class="before" @click="selectItem(index, +1, item)"></i>
<span></span>
<div>{{ item.title }}</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'ProgressBar',
components: {
},
props: {
dataList: {
type: Array,
default: () => {
return []
}
},
selectIndex: {
type: Number,
default: 1
}
},
data() {
return {
// selectIndex: 0,
selectLine: -1,
}
},
created() {
},
methods: {
selectItem(index, num, item) {
this.selectIndex = index;
this.selectLine = num;
if (item)
this.$emit("selectItem", item, index);
}
},
mounted() {
},
}
</script>
<style lang='scss' scoped>
.congestion {
width: 100%;
height: 35px;
display: inline-flex;
flex-direction: row;
>div {
position: relative;
width: 100%;
height: 35px;
display: inline-flex;
flex-direction: row;
>.item .after {
position: absolute;
display: inline-flex;
left: 0px;
top: -5px;
width: 45px !important;
height: 35px !important;
background-color: transparent;
cursor: pointer;
}
>.item .after::after {
content: "";
position: absolute;
display: inline-flex;
left: 0px;
top: 8px;
width: 45px !important;
height: 3px !important;
background-color: #C7C7C7;
}
>.item .before {
position: absolute;
display: inline-flex;
right: 0px;
top: -5px;
width: 45px;
height: 35px;
background-color: transparent;
cursor: pointer;
}
>.item .before::after {
content: "";
position: absolute;
display: inline-flex;
left: 0px;
top: 8px;
width: 45px !important;
height: 3px !important;
background-color: #C7C7C7;
}
.item.action .after::after {
background-color: #72FDC9;
}
.item.action.Aafter .after::after {
background-color: #C7C7C7 !important;
}
>.item.action.Aafter .before::after {
background-color: #72FDC9;
}
>.item.action.Abefore .after::after {
background-color: #72FDC9;
}
>.bef::before {
background-color: #72FDC9 !important;
}
>.aft::after {
background-color: #72FDC9 !important;
}
>.item.action span {
background-color: #72FDC9;
cursor: pointer;
}
>.item.action span::after {
border-color: #72FDC9;
}
>.action div {
color: #72FDC9 !important;
}
>.item {
position: relative;
width: 113px;
height: 35px;
display: inline-flex;
flex-direction: column;
justify-items: center;
>span {
position: absolute;
display: inline-flex;
width: 9px;
height: 9px;
background: #C7C7C7;
border-radius: 50%;
opacity: 1;
left: 53px;
}
>div {
position: relative;
display: inline-flex;
width: 100%;
align-items: center;
justify-content: center;
top: 5px;
margin-top: 10px;
color: #C7C7C7;
}
>span::after {
content: "";
position: absolute;
display: inline-flex;
width: 15px;
height: 15px;
border: 1px solid #C7C7C7;
border-radius: 50%;
opacity: 1;
top: -3.5px;
left: -3px;
}
}
}
}
</style>

15
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/progressBar.vue

@ -1,15 +1,17 @@
<template>
<div class='congestion'>
<div :style="{ width: dataList.length * 300 }">
<div>
<!-- :style="{ width: dataList.length * 300 }" -->
<div :class="selectIndex == index ?
(selectLine < 1 ? 'item action Abefore' : 'item action Aafter') :
(selectIndex + selectLine == index ?
(selectLine < 1 ? 'item action Aafter' : 'item action Abefore') : 'item')"
v-for="(item, index) in dataList" :key="index">
<i class="after" v-if="index === 0"></i>
<i class="after" v-else @click="selectItem(index, -1, dataList[index - 1])"></i>
<i class="before" v-if="index === dataList.length - 1"></i>
<i class="before" v-else @click="selectItem(index, +1, item)"></i>
<i class="after" @click="selectItem(index, -1, dataList[index - 1])"></i>
<i class="before" @click="selectItem(index, +1, item)"></i>
<span></span>
<div>{{ item.title }}</div>
@ -47,10 +49,10 @@ export default {
},
methods: {
selectItem(index, num, item) {
this.selectIndex = index;
// this.selectIndex = index;
this.selectLine = num;
if (item)
this.$emit("selectItem", item, index);
this.$emit("selectItem", item, index,);
}
},
mounted() {
@ -176,6 +178,7 @@ export default {
}
>div {
font-size: 14px;
position: relative;
display: inline-flex;
width: 100%;

18
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/index.vue

@ -56,8 +56,8 @@ export default {
getWarningSourceGroup().then((res) => {
if (res.code == 200) {
let data = res.rows;
let total = 0;
let data = res.data.warningSourceList;
let total = res.data.total;
if (data.length > 0) {
let chartData = [
@ -90,24 +90,24 @@ export default {
]
data.forEach(it => {
if (it.warningSource == 1) {
chartData[0].average++;
chartData[0].average += it.number;
}
if (it.warningSource == 2) {
chartData[1].average++;
chartData[1].average += it.number;
}
if (it.warningSource == 3) {
chartData[2].average++;
chartData[2].average += it.number;
}
if (it.warningSource == 4) {
chartData[3].average++;
chartData[3].average += it.number;
}
if (it.warningSource == 5) {
chartData[4].average++;
chartData[4].average += it.number;
}
if (it.warningSource == 6) {
chartData[5].average ++;
chartData[5].average += it.number;
}
total ++;
// total ++;
// drawRoundRect(context, 231, 37 + (index * 27), 138, 20, 12, gr);
})
// console.log('data',chartData)

19
ruoyi-ui/src/views/JiHeExpressway/pages/service/sensitive/components/AddNEditDialog.vue

@ -38,7 +38,8 @@ export default {
},
props: {
visible: Boolean,
data: Object
data: Object,
dataAll: Array
},
data() {
return {
@ -70,11 +71,25 @@ export default {
}
},
methods: {
checkRepeat(word){
let temp = _.find(this.dataAll, { word: word });
if (temp && Object.keys(temp).length>0) {
this.$message.error("该关键词已存在。");
return false
} else {
return true;
}
},
handleSubmit() {
this.$refs.FormConfigRef.validate()
.then((data) => {
this.submitting = true;
data.word = data.word.trim();
if(!this.checkRepeat(data.word)){
return ;
}
this.submitting = true;
if (this.data) data.id = this.data.id;
request({

4
ruoyi-ui/src/views/JiHeExpressway/pages/service/sensitive/index.vue

@ -50,7 +50,7 @@
</div>
</template>
</div>
<AddNEditDialog v-model="isShowDialog" :data="dialogData" @afterSubmit = "getData" />;
<AddNEditDialog v-model="isShowDialog" :data="dialogData" @onSuccess = "getData" :dataAll="data"/>;
</div>
</template>
@ -138,7 +138,7 @@ export default {
handleExport() {
exportFile({
url: "/business/dcInfoBoardVocabulary/export",
filename: "管辖路段",
filename: "情报板敏感词",
data: this.getSearchData()
});
},

4
ruoyi-ui/vue.config.js

@ -49,9 +49,9 @@ module.exports = {
// target: `http://10.0.81.202:8087`, //现场后台
// target: `http://10.0.81.204:8087`, //现场后台 刘文阁
// target: `http://10.168.69.255:8087`, //正晨后台 连现场物联 刘文阁
// target: `http://10.168.78.135:8087`, //王钦
target: `http://10.168.78.135:8087`, //王钦
// target: `http://10.168.66.196:8087`, //正晨后台 连现场物联 刘文阁2
target: `http://10.168.68.42:8087`, //王思祥
// target: `http://10.168.68.42:8087`, //王思祥
changeOrigin: true,
pathRewrite: {
["^" + process.env.VUE_APP_BASE_API]: "",

Loading…
Cancel
Save