Browse Source

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

wangqin
hui 1 year ago
parent
commit
c628ac4334
  1. 39
      ruoyi-ui/src/api/event/perceiveEvent.js
  2. 71
      ruoyi-ui/src/views/JiHeExpressway/components/Descriptions.vue
  3. 2
      ruoyi-ui/src/views/JiHeExpressway/components/Dialog/utils.js
  4. 39
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/Proxy.vue
  5. 14
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/ElCheckboxGroup.vue
  6. 56
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/Text.vue
  7. 49
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
  8. 15
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/utils/defaultValue.js
  9. 15
      ruoyi-ui/src/views/JiHeExpressway/components/InputSearch/index.vue
  10. 4
      ruoyi-ui/src/views/JiHeExpressway/components/Pagination.vue
  11. 4
      ruoyi-ui/src/views/JiHeExpressway/components/Video/index.vue
  12. 14
      ruoyi-ui/src/views/JiHeExpressway/images/deviceType/ball_active.svg
  13. 5
      ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/感知事件.svg
  14. 5
      ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/感知事件_active.svg
  15. 5
      ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/感知事件_fault.svg
  16. 17
      ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/服务区异常.svg
  17. 17
      ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/服务区异常_active.svg
  18. 17
      ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/服务区异常_fault.svg
  19. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/AMapContainer/index.vue
  20. 96
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Broadcast/components/BroadcastReleases.vue
  21. 7
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Broadcast/index.vue
  22. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/index.vue
  23. 166
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/PerceiveEvent/index.vue
  24. 165
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/TrafficIncidents/index.vue
  25. 131
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/ViewDetails/index.vue
  26. 112
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFilter/index.vue
  27. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue
  28. 342
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js
  29. 72
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/httpList.js
  30. 17
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/layerImages.js
  31. 42
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
  32. 25
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue
  33. 8
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/data.js
  34. 36
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue
  35. 7
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/assets/charts.js
  36. 69
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/index.vue
  37. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/assets/charts.js
  38. 21
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/index.vue
  39. 87
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue
  40. 12
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/progressBar.vue
  41. 14
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/assets/charts.js
  42. 82
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/index.vue
  43. 29
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/monthStatistics/index.vue
  44. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/assets/charts.js
  45. 22
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/index.vue
  46. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js
  47. 18
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/index.vue
  48. 22
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/assets/charts.js
  49. 101
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/index.vue
  50. 19
      ruoyi-ui/src/views/JiHeExpressway/scss/el-reset.scss
  51. 110
      ruoyi-ui/src/views/JiHeExpressway/utils/enum.js

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

@ -19,7 +19,7 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/system/status/tablist',
method: 'get',
method: 'post',
params: {
...query,
}
@ -31,7 +31,7 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/perceivedEventsList',
method: 'get',
method: 'post',
params: {
...query,
}
@ -43,7 +43,7 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/sectionPerceivedList',
method: 'get',
method: 'post',
params: {
...query,
}
@ -56,7 +56,7 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/sectionPerceivedNumber',
method: 'get',
method: 'post',
params: {
...query,
}
@ -68,7 +68,7 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/dailyCumulative',
method: 'get',
method: 'post',
params: {
...query,
}
@ -80,7 +80,7 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/warningSourceGroup',
method: 'get',
method: 'post',
params: {
...query,
}
@ -92,7 +92,7 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/warningStateDay',
method: 'get',
method: 'post',
params: {
...query,
}
@ -104,7 +104,7 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/dailyCumulativeMonth',
method: 'get',
method: 'post',
params: {
...query,
}
@ -116,7 +116,7 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/warningTypeDay',
method: 'get',
method: 'post',
params: {
...query,
}
@ -128,8 +128,8 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/warningTrend',
method: 'get',
params: {
method: 'post',
data: {
...query,
}
})
@ -140,8 +140,8 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/warningSectionType',
method: 'get',
params: {
method: 'post',
data: {
...query,
}
})
@ -152,6 +152,19 @@ export function geTwarningTotal(query) {
//system/status/tablist
return request({
url: '/perceivedEvents/warning/sectionMarkNumber',
method: 'post',
data: {
...query,
}
})
}
///
//查询辖区路段列表
export function getRoadSectionList(query) {
//system/status/tablist
return request({
url: '/business/roadSection/list',
method: 'get',
params: {
...query,

71
ruoyi-ui/src/views/JiHeExpressway/components/Descriptions.vue

@ -1,29 +1,37 @@
<template>
<div class='Descriptions keep-ratio' origin="left" :style="getStyle()">
<div class="item" v-for="(item, index) in list" :key="`${item.key || item.label}${index}`"
<div class="item" v-for="(item, index) in getResolveList" :key="`${item.key || item.label}${index}`"
:style="[gridStyle(item, index), transformStyle(itemStyle)]">
<div class="title text" :style="transformStyle(titleStyle)">
<slot :name="`title-${item.key || item.label}`" :data="item">
{{ item.label || '-' }}:
</slot>
</div>
<div class="content text" :style="{
<div class="text title" :style="{
...transformStyle(titleStyle),
...getDisplayColor(item)
width: labelWidth
}">
<slot :name="`content-${item.key || item.label}`" :data="item">
{{ getText(item) || '-' }}
<p>
<slot :name="`title-${item.key || item.label}`" :data="item">
{{ item.label || '-' }}
</slot>
</p>:
</div>
<ContentText :style="transformStyle(titleStyle)" class="content text" :data="data" :_config="item">
<template #default="{ value }">
<slot :name="`content-${item.key || item.label}`" :value="value" :data="item">
{{ value }}
</slot>
</template>
</ContentText>
</div>
</div>
</template>
<script>
import * as EnumMap from "@screen/utils/enum.js"
import { getContent } from "@screen/components/FormConfig/utils/index.js"
import ContentText from "@screen/components/FormConfig/components/Text.vue"
export default {
name: 'Descriptions',
components: {
ContentText
},
props: {
data: {
type: Object,
@ -45,6 +53,7 @@ export default {
type: String,
default: "2"
},
labelWidth: String,
titleStyle: {
type: [String, Object],
default: null
@ -66,17 +75,19 @@ export default {
})
},
getText() {
return (item) => {
const result = this.data[item.key];
if (item.enum) return EnumMap[item.enum][result]?.text;
return (item) => getContent(this.data, item)
},
getResolveList() {
return this.list.reduce((prev, data) => {
const templateResult = item.key?.replace(/\$\{[^}]+\}/g, (key) => this.data[key.slice(2, -1)] || "-");
if (typeof data.visible === 'function') {
if (!data.visible(data)) return prev;
}
if (templateResult && templateResult != item.key) return templateResult
prev.push(data);
return result || item.text;
}
return prev
}, [])
}
},
methods: {
@ -98,19 +109,7 @@ export default {
return prev;
}, {});
},
getDisplayColor(item) {
const style = {};
if (item.enum) {
const config = EnumMap[item.enum][this.data[item.key]];
if (config?.color) style.color = config.color;
}
return style;
},
}
}
</script>
@ -126,17 +125,23 @@ export default {
font-weight: 400;
color: #FFF;
line-height: 18px;
display: flex;
align-items: center;
gap: 3px;
display: flex;
}
.item {
display: flex;
align-items: center;
gap: 6px;
.title {
color: #3DE8FF;
p {
width: 100%;
text-align: justify;
text-align-last: justify;
}
}
.content {

2
ruoyi-ui/src/views/JiHeExpressway/components/Dialog/utils.js

@ -19,8 +19,6 @@ export function moveable(container, { target } = {}) {
const move = (e) => {
const { clientX, clientY } = e;
console.log(clientX, clientY, "move");
container.style.transform = `translate3d(${
clientX - x + lastPosition.clientX
}px, ${clientY - y + lastPosition.clientY}px, 0)`;

39
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/Proxy.vue

@ -0,0 +1,39 @@
<template>
<component :is="getComponent(item.type)" v-bind="getBindData(item)" v-model="obverseValue"
v-on="resolveListeners(item.ons)" :_config="item" />
</template>
<script>
export default {
name: 'Proxy',
inject: ['getComponent', 'getBindData', "getFormData"],
props: {
value: {},
item: Object
},
computed: {
obverseValue: {
get() {
return this.value
},
set(value) {
this.$emit("update:value", value)
}
}
},
methods: {
resolveListeners(callbacks) {
if (!callbacks) return;
const result = {};
for (const key in callbacks) {
result[key] = (...args) => callbacks[key](...args, this.getFormData(), this)
}
return result
},
}
}
</script>

14
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/ElCheckboxGroup.vue

@ -1,7 +1,7 @@
<template>
<ElCheckboxGroup v-bind="$attrs" v-on="$listeners" class='ElCheckboxGroup'>
<ElCheckbox v-for="item in options" :label="item.key || item.label" :key="item.key || item.label">
<slot :name="item.key || item.label" :data="item">{{ item.label }}</slot>
<ElCheckbox v-for="item in options" :label="item[id] || item[label]" :key="item[id] || item[label]">
<slot :name="item[id] || item[label]" :data="item">{{ item[label] }}</slot>
</ElCheckbox>
</ElCheckboxGroup>
</template>
@ -19,7 +19,15 @@ export default {
options: {
type: Array,
default: () => []
}
},
id: {
type: String,
default: 'key'
},
label: {
type: String,
default: 'label'
},
}
}
</script>

56
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/Text.vue

@ -0,0 +1,56 @@
<template>
<div class='TextData'>
<slot :value="getValue">
{{ getValue || '-' }}
</slot>
</div>
</template>
<script>
import * as EnumMap from "@screen/utils/enum.js";
import { get as pathGet } from "lodash";
export default {
name: 'TextData',
props: {
value: [String, Number],
data: Object,
_config: Object
},
computed: {
getValue() {
const item = this._config;
const result = this.data ? pathGet(this.data, item.key) : this.value;
if (item.enum) return EnumMap[item.enum][result]?.text || "-";
if (!this.data) return result;
const templateResult = item.key?.replace(
/\$\{[^}]+\}/g,
(key) => pathGet(this.data, key.slice(2, -1)) || "-"
);
if (templateResult && templateResult != item.key) return templateResult;
return result || item.text || "-";
},
getDisplayColor() {
const style = {};
if (this._config.enum) {
const config = EnumMap[this._config.enum][this.value];
if (config?.color) style.color = config.color;
}
return style;
},
},
}
</script>
<style lang='scss' scoped>
.TextData {}
</style>

49
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue

@ -4,8 +4,9 @@
<ElFormItem class="formItem" :rules="getRules(item)" v-if="formItemVisible(item)" :key="item.key"
:label="item.label" :style="gridStyle(item, index)">
<slot :name="item.key" :data="item" :formData="modelFormData">
<component :is="getComponent(item.type)" v-bind="getBindData(item)" v-model="modelFormData[item.key]"
v-on="resolveListeners(item.ons)" />
<ProxyCom :value="getValue(item)" :item="item" @update:value="data => updateValue(item, data)" />
<!-- <component :is="getComponent(item.type)" v-bind="getBindData(item)" v-model="modelFormData[item.key]"
v-on="resolveListeners(item.ons)" /> -->
</slot>
</ElFormItem>
</template>
@ -13,8 +14,11 @@
</template>
<script>
import { resolveName } from "./utils/index"
import { reduceDefaultValue } from "./utils/defaultValue"
import { resolveName } from "./utils/index";
import { reduceDefaultValue } from "./utils/defaultValue";
import { set as pathSet, get as pathGet } from "lodash";
import ProxyCom from "./Proxy.vue";
const files = require.context('./components', true, /^.\/[^/]+\/index\.vue$|^.\/[^/]+.vue$/);
@ -29,13 +33,13 @@ const components = files.keys().reduce((prev, key) => {
export default {
name: 'FormConfig',
components: {
// FormInput,
// FormTimePicker
ProxyCom
},
provide() {
return {
getComponent: this.getComponent,
getBindData: this.getBindData
getBindData: this.getBindData,
getFormData: () => this.modelFormData
}
},
props: {
@ -65,7 +69,8 @@ export default {
column: {
type: [String, Number],
default: "3"
}
},
value: Object
},
model: {
prop: 'value',
@ -73,11 +78,12 @@ export default {
},
data() {
return {
formData: this.value || {}
formData: {}
}
},
created() {
this.reset();
this.reset(true);
console.log("%c [ this.formData ]-82-「index.vue」", "font-size:15px; background:#9c7eed; color:#e0c2ff;", this.formData);
},
computed: {
modelFormData: {
@ -86,6 +92,7 @@ export default {
},
set(data) {
this.formData = data;
this.$emit('update:value', this.formData);
}
},
@ -108,20 +115,14 @@ export default {
}
},
methods: {
resolveListeners(callbacks) {
if (!callbacks) return;
const result = {};
for (const key in callbacks) {
result[key] = (...args) => callbacks[key](...args, this.modelFormData, this)
}
return result
getValue(item) {
return pathGet(this.formData, item.key)
},
updateValue(item, data) {
pathSet(this.modelFormData, item.key, data);
},
reset() {
return this.modelFormData = reduceDefaultValue(this.formList);
reset(isFirst) {
return this.modelFormData = reduceDefaultValue(this.formList, isFirst ? this.value : {});
},
getStyle() {
return {
@ -215,7 +216,7 @@ export default {
// font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #3DE8FF;
line-height: 19px;
line-height: unset;
// -webkit-background-clip: text;
// -webkit-text-fill-color: transparent;
}

15
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/utils/defaultValue.js

@ -1,4 +1,5 @@
import { resolveName } from "./index";
import { set as pathSet, get as pathGet } from "lodash";
export const presetDefaultValue = {
Select(item) {
@ -19,7 +20,9 @@ export const presetDefaultValue = {
},
};
export function getDefaultValue(item) {
export function getDefaultValue(item, data) {
if (data && typeof data !== "object") return data;
if (item.hasOwnProperty("default")) return item.default;
const getValue = presetDefaultValue[resolveName(item.type)];
@ -27,11 +30,17 @@ export function getDefaultValue(item) {
return typeof getValue === "function" ? getValue(item) : null;
}
export function reduceDefaultValue(formList) {
export function reduceDefaultValue(formList, data) {
if (!Array.isArray(formList)) return null;
return formList.reduce((prev, cur) => {
if (cur.key) prev[cur.key] = getDefaultValue(cur);
if (cur.key)
pathSet(
prev,
cur.key,
getDefaultValue(cur, pathGet(data || {}, cur.key))
);
// prev[cur.key] = getDefaultValue(cur, pathGet(data || {}, cur.key));
return prev;
}, {});

15
ruoyi-ui/src/views/JiHeExpressway/components/InputSearch/index.vue

@ -8,7 +8,7 @@
<div style="width: 100%">
<slot>
<Form v-if="formList && formList.length" labelWidth="120px" class="form" ref="FormConfigRef" :formList="formList"
<Form v-if="formList && formList.length" class="form" ref="FormConfigRef" :formList="formList"
v-bind="getFormConfigOptions" />
<ElEmpty v-else description="暂无搜索内容"></ElEmpty>
</slot>
@ -86,19 +86,6 @@ export default {
}
</script>
<style lang='scss'>
div.el-popper.global-input-search-popover {
background: #064258;
.footer {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 9px;
margin-top: 15px;
}
}
</style>
<style lang='scss' scoped>
.InputSearch {
height: 26px;

4
ruoyi-ui/src/views/JiHeExpressway/components/Pagination.vue

@ -53,6 +53,10 @@ export default {
}
}
.el-pagination__total {
color: #FFF;
}
.el-pagination__sizes {
.el-select {
.el-input {

4
ruoyi-ui/src/views/JiHeExpressway/components/Video/index.vue

@ -114,8 +114,8 @@ export default {
.video-stream {
width: 100%;
// height: 100%;
height: 240px;
height: 100%;
// height: 240px;
}
}
</style>

14
ruoyi-ui/src/views/JiHeExpressway/images/deviceType/ball_active.svg

@ -0,0 +1,14 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Frame 10232">
<g id="Frame" clip-path="url(#clip0_507_49)">
<path id="Vector" d="M16.0002 13.451C16.3331 13.4513 16.6584 13.5502 16.9351 13.7353C17.2118 13.9204 17.4274 14.1834 17.5546 14.4911C17.6819 14.7987 17.715 15.1372 17.6499 15.4636C17.5848 15.7901 17.4244 16.09 17.1889 16.3253C16.9534 16.5606 16.6535 16.7208 16.3269 16.7857C16.0004 16.8505 15.662 16.8171 15.3545 16.6897C15.0469 16.5622 14.7841 16.3464 14.5991 16.0696C14.4142 15.7928 14.3155 15.4674 14.3155 15.1345C14.3158 14.6879 14.4935 14.2597 14.8094 13.944C15.1253 13.6283 15.5536 13.451 16.0002 13.451ZM16.0002 12.1082C15.4014 12.1082 14.8161 12.2857 14.3182 12.6184C13.8203 12.9511 13.4323 13.4239 13.2031 13.9771C12.974 14.5303 12.914 15.139 13.0308 15.7263C13.1476 16.3136 13.436 16.8531 13.8594 17.2765C14.2828 17.6999 14.8223 17.9882 15.4095 18.105C15.9968 18.2219 16.6056 18.1619 17.1588 17.9328C17.712 17.7036 18.1848 17.3156 18.5175 16.8177C18.8502 16.3198 19.0277 15.7345 19.0277 15.1357C19.0277 14.3327 18.7087 13.5627 18.141 12.9949C17.5732 12.4271 16.8031 12.1082 16.0002 12.1082Z" fill="#FFDB82"/>
<path id="Vector_2" d="M16.0006 6C10.9558 6 6.86621 10.0896 6.86621 15.1343C6.86621 20.1791 10.9563 24.2684 16.0006 24.2684C21.0448 24.2684 25.1347 20.1791 25.1347 15.1343C25.1347 10.0896 21.0453 6 16.0006 6ZM16.0006 7.51694C16.1633 7.51694 16.3225 7.56521 16.4578 7.65565C16.5932 7.74608 16.6987 7.87463 16.761 8.02502C16.8232 8.17541 16.8395 8.3409 16.8078 8.50056C16.776 8.66021 16.6976 8.80686 16.5825 8.92197C16.4674 9.03708 16.3208 9.11546 16.1611 9.14722C16.0015 9.17898 15.836 9.16268 15.6856 9.10038C15.5352 9.03809 15.4067 8.9326 15.3162 8.79725C15.2258 8.6619 15.1775 8.50277 15.1775 8.33999C15.1775 8.23189 15.1987 8.12485 15.2401 8.02498C15.2814 7.92511 15.3421 7.83437 15.4185 7.75793C15.4949 7.6815 15.5857 7.62087 15.6856 7.57952C15.7854 7.53817 15.8925 7.51691 16.0006 7.51694ZM16.0006 19.5655C15.1241 19.5656 14.2673 19.3057 13.5385 18.8188C12.8097 18.3319 12.2417 17.6398 11.9063 16.83C11.5708 16.0203 11.483 15.1293 11.654 14.2696C11.825 13.41 12.2471 12.6204 12.8668 12.0006C13.4866 11.3809 14.2762 10.9588 15.1358 10.7878C15.9955 10.6168 16.8865 10.7046 17.6963 11.04C18.506 11.3755 19.1981 11.9435 19.685 12.6723C20.1719 13.4011 20.4318 14.2579 20.4317 15.1343C20.4317 15.7163 20.3171 16.2925 20.0944 16.8301C19.8717 17.3677 19.5453 17.8562 19.1339 18.2677C18.7224 18.6791 18.2339 19.0055 17.6963 19.2282C17.1587 19.4509 16.5825 19.5655 16.0006 19.5655Z" fill="#FFDB82"/>
<path id="Vector_3" d="M15.9997 25.4203C14.1167 25.4232 12.2693 24.9068 10.6608 23.9277L8.58887 25.9999H23.4106L21.3384 23.9277C19.73 24.9068 17.8827 25.4233 15.9997 25.4203Z" fill="#FFDB82"/>
</g>
</g>
<defs>
<clipPath id="clip0_507_49">
<rect width="20" height="20" fill="white" transform="translate(6 6)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

5
ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/感知事件.svg

@ -0,0 +1,5 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Frame 427319027">
<path id="Vector" d="M15.8568 13.2606C13.9313 13.2606 12.3697 14.8426 12.3697 16.794C12.3697 18.7462 13.9321 20.3283 15.8568 20.3283C17.7815 20.3283 19.3438 18.7462 19.3438 16.794C19.3438 14.8426 17.7815 13.2606 15.8568 13.2606ZM10.548 11.2377C7.83975 14.386 7.84446 19.1125 10.548 22.2867L11.6247 21.1959C9.51609 18.6339 9.51609 14.8804 11.6333 12.3403L10.5488 11.2377H10.548ZM9.14514 9.81441L8.0936 8.74951C4.0509 12.9698 4.04382 20.5656 8.06766 24.7977L9.14435 23.7069C5.66986 19.7459 5.66593 13.751 9.14435 9.81441H9.14514ZM21.1774 11.2369L20.0928 12.3356C22.21 14.8804 22.214 18.6291 20.1038 21.1928L21.1805 22.2836C23.8809 19.1125 23.8809 14.3852 21.1774 11.2377V11.2369ZM23.6357 8.7503L22.5833 9.8152C26.0594 13.7487 26.0555 19.7467 22.5833 23.71L23.6577 24.8024C27.6847 20.5664 27.6737 12.9706 23.6357 8.7503Z" fill="#0FD4FF"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 969 B

5
ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/感知事件_active.svg

@ -0,0 +1,5 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Frame 427319028">
<path id="Vector" d="M15.8568 13.2606C13.9313 13.2606 12.3697 14.8426 12.3697 16.794C12.3697 18.7462 13.9321 20.3283 15.8568 20.3283C17.7815 20.3283 19.3438 18.7462 19.3438 16.794C19.3438 14.8426 17.7815 13.2606 15.8568 13.2606ZM10.548 11.2377C7.83975 14.386 7.84446 19.1125 10.548 22.2867L11.6247 21.1959C9.51609 18.6339 9.51609 14.8804 11.6333 12.3403L10.5488 11.2377H10.548ZM9.14514 9.81441L8.0936 8.74951C4.0509 12.9698 4.04382 20.5656 8.06766 24.7977L9.14435 23.7069C5.66986 19.7459 5.66593 13.751 9.14435 9.81441H9.14514ZM21.1774 11.2369L20.0928 12.3356C22.21 14.8804 22.214 18.6291 20.1038 21.1928L21.1805 22.2836C23.8809 19.1125 23.8809 14.3852 21.1774 11.2377V11.2369ZM23.6357 8.7503L22.5833 9.8152C26.0594 13.7487 26.0555 19.7467 22.5833 23.71L23.6577 24.8024C27.6847 20.5664 27.6737 12.9706 23.6357 8.7503Z" fill="#FFDB82"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 969 B

5
ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/感知事件_fault.svg

@ -0,0 +1,5 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Frame 427319029">
<path id="Vector" d="M15.8568 13.2606C13.9313 13.2606 12.3697 14.8426 12.3697 16.794C12.3697 18.7462 13.9321 20.3283 15.8568 20.3283C17.7815 20.3283 19.3438 18.7462 19.3438 16.794C19.3438 14.8426 17.7815 13.2606 15.8568 13.2606ZM10.548 11.2377C7.83975 14.386 7.84446 19.1125 10.548 22.2867L11.6247 21.1959C9.51609 18.6339 9.51609 14.8804 11.6333 12.3403L10.5488 11.2377H10.548ZM9.14514 9.81441L8.0936 8.74951C4.0509 12.9698 4.04382 20.5656 8.06766 24.7977L9.14435 23.7069C5.66986 19.7459 5.66593 13.751 9.14435 9.81441H9.14514ZM21.1774 11.2369L20.0928 12.3356C22.21 14.8804 22.214 18.6291 20.1038 21.1928L21.1805 22.2836C23.8809 19.1125 23.8809 14.3852 21.1774 11.2377V11.2369ZM23.6357 8.7503L22.5833 9.8152C26.0594 13.7487 26.0555 19.7467 22.5833 23.71L23.6577 24.8024C27.6847 20.5664 27.6737 12.9706 23.6357 8.7503Z" fill="#FF5F5F"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 969 B

17
ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/服务区异常.svg

@ -0,0 +1,17 @@
<svg width="28" height="29" viewBox="0 0 28 29" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#233;&#161;&#181;&#233;&#157;&#162;-1">
<g id="&#233;&#166;&#150;&#233;&#161;&#181;-&#229;&#185;&#179;&#233;&#157;&#162;3">
<g id="&#231;&#188;&#150;&#231;&#187;&#132;-16&#229;&#164;&#135;&#228;&#187;&#189;">
<g id="1">
<g id="&#232;&#183;&#175;&#233;&#157;&#162;&#231;&#138;&#182;&#230;&#128;&#129;">
<path id="Vector" d="M19.985 12.2515C20.2268 11.8753 20.4082 11.5742 20.65 11.198C20.9522 10.6712 21.3754 10.3702 21.8591 10.2949C22.1009 10.2197 22.4031 10.1444 22.5845 9.91863C22.7054 9.84338 22.7659 9.69287 22.8263 9.54236C22.8868 9.39185 22.9472 9.16609 23.0681 9.01558C23.3704 8.33829 23.6727 7.661 23.975 7.05896C24.0354 6.9837 23.975 6.83319 23.9145 6.75794C23.8541 6.68269 23.7936 6.75794 23.7331 6.83319L23.6727 6.90845C23.31 7.43523 22.8868 8.03727 22.5241 8.56405C22.4636 8.63931 22.4031 8.71456 22.2822 8.63931C22.1613 8.63931 22.1613 8.56405 22.2218 8.41354C22.2822 8.33829 22.2822 8.26303 22.3427 8.18778C22.7054 7.661 23.0681 7.13421 23.4309 6.68269C23.4913 6.60743 23.4913 6.53218 23.4309 6.38167C23.3704 6.30641 23.31 6.30641 23.2495 6.38167C23.1286 6.53218 23.0681 6.68269 22.9472 6.83319C22.645 7.28472 22.3427 7.661 22.1009 8.11252C22.0404 8.18778 21.8591 8.26303 21.7986 8.18778C21.7382 8.03727 21.7986 8.03727 21.8591 7.88676C21.8591 7.88676 21.8591 7.8115 21.9195 7.8115C22.2218 7.35998 22.5845 6.90845 22.8868 6.38167C22.9472 6.30641 23.0077 6.23116 23.0681 6.08065C23.0681 6.00539 23.0077 6.00539 23.0077 5.93014C22.9472 5.85488 22.8868 5.85488 22.8263 5.93014C22.4636 6.45692 22.1009 6.9837 21.7986 7.58574C21.5568 7.96201 21.4359 8.03727 21.315 7.96201C21.1941 7.96201 21.1941 7.88676 21.2545 7.73625C21.315 7.661 21.3754 7.58574 21.3754 7.51049L22.4636 6.1559C22.5845 6.00539 22.5845 6.00539 22.4636 5.85488C22.4636 5.85488 22.4636 5.77963 22.4031 5.77963C22.3427 5.62912 22.2822 5.62912 22.1613 5.77963C22.1613 5.85488 22.1613 5.93014 22.1009 5.93014C21.4359 6.60743 20.7709 7.20947 20.1059 7.88676C20.0454 7.88676 20.0454 7.96201 20.0454 8.03727C20.0454 8.4888 19.985 8.86507 19.985 9.3166C19.985 9.61762 19.9245 9.84338 19.8036 9.99389C19.5618 10.2949 19.3804 10.6712 19.1386 11.0475C19.3804 11.499 19.6827 11.8753 19.985 12.2515C19.985 12.3268 19.985 12.3268 19.985 12.2515ZM21.1924 15.3334C18.351 11.0439 17.5047 10.2197 14.6633 5.85488C14.6029 5.85488 14.6029 5.77963 14.5424 5.77963H14.3023C14.1209 5.77963 14 5.93014 14 6.1559V7.88676C14 7.96201 14 8.03727 14.0605 8.11252C14.8464 9.24134 15.6323 10.4454 16.4182 11.5742C16.5995 11.8753 16.8414 12.1763 17.0227 12.4773C17.1436 12.402 17.2041 12.3268 17.325 12.3268C17.4459 12.2515 17.5668 12.2515 17.6877 12.2515C17.8691 12.2515 17.9295 12.3268 17.99 12.4773C17.99 12.5525 18.0504 12.5525 18.0504 12.6278C19.5013 15.0359 18.8968 13.9036 20.3477 16.3117C20.4686 16.5375 20.65 16.688 20.8313 16.7633C21.1336 16.9138 21.0311 16.5592 21.3333 16.3334C21.5147 15.9571 21.4342 15.6344 21.1924 15.3334Z" fill="#0FD4FF"/>
<path id="Vector_2" d="M18.203 13.6112C18.0655 13.382 17.928 13.2292 17.7218 13.0001L17.653 13.0765C16.2094 15.0626 14.7658 17.1251 13.3222 19.1112C13.2535 19.1876 13.2535 19.264 13.1847 19.3404V19.5695C13.3222 20.1042 13.6659 20.257 14.0784 20.3334H14.3534C14.5596 20.3334 14.6971 20.1806 14.7658 19.9515C15.3158 19.1112 15.9344 18.2709 16.4844 17.4306C17.1718 16.4376 17.8593 15.3681 18.6154 14.3751C18.6842 14.2987 18.6842 14.2223 18.6154 14.1459C18.5467 13.9931 18.4092 13.8404 18.203 13.6112ZM10.9849 6.6598C10.2288 5.9723 9.1976 5.66675 7.20405 5.66675H2.66699V6.27786C3.97311 6.27786 4.1106 6.43064 4.1106 7.80564V18.1945C4.1106 19.6459 3.97311 19.7223 2.66699 19.7223V20.3334H7.27279V19.7223C5.6917 19.7223 5.62295 19.5695 5.62295 18.1945V13.764H7.06656C8.92263 13.764 12.2223 13.5348 12.2223 9.63897C12.1536 8.34036 11.7411 7.3473 10.9849 6.6598ZM7.06656 13.0001H5.62295V7.65286C5.62295 6.6598 5.6917 6.43064 6.03541 6.43064H6.99782C8.30394 6.43064 9.1976 6.6598 9.74755 7.19453C10.2975 7.72925 10.5725 8.56953 10.5725 9.56258C10.6412 12.4654 8.85389 13.0001 7.06656 13.0001Z" fill="#0FD4FF"/>
<g id="Frame">
<path id="Vector_3" d="M21.9795 14.7578C22.0872 14.5658 22.4005 14.5658 22.5082 14.7578L25.5389 20.1615C25.5649 20.2079 25.5783 20.2599 25.5778 20.3127C25.5773 20.3656 25.5629 20.4174 25.536 20.4633C25.5102 20.5086 25.4724 20.5463 25.4266 20.5728C25.3807 20.5992 25.3284 20.6134 25.2751 20.6138H19.2136C19.1602 20.6134 19.1079 20.5992 19.0621 20.5728C19.0162 20.5463 18.9784 20.5086 18.9526 20.4633C18.9259 20.4173 18.9116 20.3655 18.9111 20.3127C18.9106 20.26 18.9239 20.2079 18.9498 20.1615L21.9795 14.7578ZM22.2443 18.7676C22.118 18.7676 21.9969 18.8162 21.9076 18.9028C21.8183 18.9894 21.7681 19.1067 21.7681 19.2292C21.7681 19.3516 21.8183 19.469 21.9076 19.5555C21.9969 19.6421 22.118 19.6907 22.2443 19.6907C22.3706 19.6907 22.4918 19.6421 22.5811 19.5555C22.6704 19.469 22.7206 19.3516 22.7206 19.2292C22.7206 19.1067 22.6704 18.9894 22.5811 18.9028C22.4918 18.8162 22.3706 18.7676 22.2443 18.7676ZM22.2443 16.4599C22.1818 16.4599 22.1199 16.4719 22.0621 16.4951C22.0043 16.5183 21.9518 16.5522 21.9076 16.5951C21.8634 16.638 21.8283 16.6888 21.8043 16.7448C21.7804 16.8008 21.7681 16.8609 21.7681 16.9215V17.8445C21.7681 17.9669 21.8183 18.0843 21.9076 18.1709C21.9969 18.2575 22.118 18.3061 22.2443 18.3061C22.3706 18.3061 22.4918 18.2575 22.5811 18.1709C22.6704 18.0843 22.7206 17.9669 22.7206 17.8445V16.9215C22.7206 16.8609 22.7082 16.8008 22.6843 16.7448C22.6604 16.6888 22.6253 16.638 22.5811 16.5951C22.5369 16.5522 22.4844 16.5183 22.4266 16.4951C22.3688 16.4719 22.3069 16.4599 22.2443 16.4599Z" fill="#0FD4FF"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

17
ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/服务区异常_active.svg

@ -0,0 +1,17 @@
<svg width="28" height="29" viewBox="0 0 28 29" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#233;&#161;&#181;&#233;&#157;&#162;-1">
<g id="&#233;&#166;&#150;&#233;&#161;&#181;-&#229;&#185;&#179;&#233;&#157;&#162;3">
<g id="&#231;&#188;&#150;&#231;&#187;&#132;-16&#229;&#164;&#135;&#228;&#187;&#189;">
<g id="1">
<g id="&#232;&#183;&#175;&#233;&#157;&#162;&#231;&#138;&#182;&#230;&#128;&#129;">
<path id="Vector" d="M19.985 12.2515C20.2268 11.8753 20.4082 11.5742 20.65 11.198C20.9522 10.6712 21.3754 10.3702 21.8591 10.2949C22.1009 10.2197 22.4031 10.1444 22.5845 9.91863C22.7054 9.84338 22.7659 9.69287 22.8263 9.54236C22.8868 9.39185 22.9472 9.16609 23.0681 9.01558C23.3704 8.33829 23.6727 7.661 23.975 7.05896C24.0354 6.9837 23.975 6.83319 23.9145 6.75794C23.8541 6.68269 23.7936 6.75794 23.7331 6.83319L23.6727 6.90845C23.31 7.43523 22.8868 8.03727 22.5241 8.56405C22.4636 8.63931 22.4031 8.71456 22.2822 8.63931C22.1613 8.63931 22.1613 8.56405 22.2218 8.41354C22.2822 8.33829 22.2822 8.26303 22.3427 8.18778C22.7054 7.661 23.0681 7.13421 23.4309 6.68269C23.4913 6.60743 23.4913 6.53218 23.4309 6.38167C23.3704 6.30641 23.31 6.30641 23.2495 6.38167C23.1286 6.53218 23.0681 6.68269 22.9472 6.83319C22.645 7.28472 22.3427 7.661 22.1009 8.11252C22.0404 8.18778 21.8591 8.26303 21.7986 8.18778C21.7382 8.03727 21.7986 8.03727 21.8591 7.88676C21.8591 7.88676 21.8591 7.8115 21.9195 7.8115C22.2218 7.35998 22.5845 6.90845 22.8868 6.38167C22.9472 6.30641 23.0077 6.23116 23.0681 6.08065C23.0681 6.00539 23.0077 6.00539 23.0077 5.93014C22.9472 5.85488 22.8868 5.85488 22.8263 5.93014C22.4636 6.45692 22.1009 6.9837 21.7986 7.58574C21.5568 7.96201 21.4359 8.03727 21.315 7.96201C21.1941 7.96201 21.1941 7.88676 21.2545 7.73625C21.315 7.661 21.3754 7.58574 21.3754 7.51049L22.4636 6.1559C22.5845 6.00539 22.5845 6.00539 22.4636 5.85488C22.4636 5.85488 22.4636 5.77963 22.4031 5.77963C22.3427 5.62912 22.2822 5.62912 22.1613 5.77963C22.1613 5.85488 22.1613 5.93014 22.1009 5.93014C21.4359 6.60743 20.7709 7.20947 20.1059 7.88676C20.0454 7.88676 20.0454 7.96201 20.0454 8.03727C20.0454 8.4888 19.985 8.86507 19.985 9.3166C19.985 9.61762 19.9245 9.84338 19.8036 9.99389C19.5618 10.2949 19.3804 10.6712 19.1386 11.0475C19.3804 11.499 19.6827 11.8753 19.985 12.2515C19.985 12.3268 19.985 12.3268 19.985 12.2515ZM21.1924 15.3334C18.351 11.0439 17.5047 10.2197 14.6633 5.85488C14.6029 5.85488 14.6029 5.77963 14.5424 5.77963H14.3023C14.1209 5.77963 14 5.93014 14 6.1559V7.88676C14 7.96201 14 8.03727 14.0605 8.11252C14.8464 9.24134 15.6323 10.4454 16.4182 11.5742C16.5995 11.8753 16.8414 12.1763 17.0227 12.4773C17.1436 12.402 17.2041 12.3268 17.325 12.3268C17.4459 12.2515 17.5668 12.2515 17.6877 12.2515C17.8691 12.2515 17.9295 12.3268 17.99 12.4773C17.99 12.5525 18.0504 12.5525 18.0504 12.6278C19.5013 15.0359 18.8968 13.9036 20.3477 16.3117C20.4686 16.5375 20.65 16.688 20.8313 16.7633C21.1336 16.9138 21.0311 16.5592 21.3333 16.3334C21.5147 15.9571 21.4342 15.6344 21.1924 15.3334Z" fill="#FFDB82"/>
<path id="Vector_2" d="M18.203 13.6112C18.0655 13.382 17.928 13.2292 17.7218 13.0001L17.653 13.0765C16.2094 15.0626 14.7658 17.1251 13.3222 19.1112C13.2535 19.1876 13.2535 19.264 13.1847 19.3404V19.5695C13.3222 20.1042 13.6659 20.257 14.0784 20.3334H14.3534C14.5596 20.3334 14.6971 20.1806 14.7658 19.9515C15.3158 19.1112 15.9344 18.2709 16.4844 17.4306C17.1718 16.4376 17.8593 15.3681 18.6154 14.3751C18.6842 14.2987 18.6842 14.2223 18.6154 14.1459C18.5467 13.9931 18.4092 13.8404 18.203 13.6112ZM10.9849 6.6598C10.2288 5.9723 9.1976 5.66675 7.20405 5.66675H2.66699V6.27786C3.97311 6.27786 4.1106 6.43064 4.1106 7.80564V18.1945C4.1106 19.6459 3.97311 19.7223 2.66699 19.7223V20.3334H7.27279V19.7223C5.6917 19.7223 5.62295 19.5695 5.62295 18.1945V13.764H7.06656C8.92263 13.764 12.2223 13.5348 12.2223 9.63897C12.1536 8.34036 11.7411 7.3473 10.9849 6.6598ZM7.06656 13.0001H5.62295V7.65286C5.62295 6.6598 5.6917 6.43064 6.03541 6.43064H6.99782C8.30394 6.43064 9.1976 6.6598 9.74755 7.19453C10.2975 7.72925 10.5725 8.56953 10.5725 9.56258C10.6412 12.4654 8.85389 13.0001 7.06656 13.0001Z" fill="#FFDB82"/>
<g id="Frame">
<path id="Vector_3" d="M21.9795 14.7578C22.0872 14.5658 22.4005 14.5658 22.5082 14.7578L25.5389 20.1615C25.5649 20.2079 25.5783 20.2599 25.5778 20.3127C25.5773 20.3656 25.5629 20.4174 25.536 20.4633C25.5102 20.5086 25.4724 20.5463 25.4266 20.5728C25.3807 20.5992 25.3284 20.6134 25.2751 20.6138H19.2136C19.1602 20.6134 19.1079 20.5992 19.0621 20.5728C19.0162 20.5463 18.9784 20.5086 18.9526 20.4633C18.9259 20.4173 18.9116 20.3655 18.9111 20.3127C18.9106 20.26 18.9239 20.2079 18.9498 20.1615L21.9795 14.7578ZM22.2443 18.7676C22.118 18.7676 21.9969 18.8162 21.9076 18.9028C21.8183 18.9894 21.7681 19.1067 21.7681 19.2292C21.7681 19.3516 21.8183 19.469 21.9076 19.5555C21.9969 19.6421 22.118 19.6907 22.2443 19.6907C22.3706 19.6907 22.4918 19.6421 22.5811 19.5555C22.6704 19.469 22.7206 19.3516 22.7206 19.2292C22.7206 19.1067 22.6704 18.9894 22.5811 18.9028C22.4918 18.8162 22.3706 18.7676 22.2443 18.7676ZM22.2443 16.4599C22.1818 16.4599 22.1199 16.4719 22.0621 16.4951C22.0043 16.5183 21.9518 16.5522 21.9076 16.5951C21.8634 16.638 21.8283 16.6888 21.8043 16.7448C21.7804 16.8008 21.7681 16.8609 21.7681 16.9215V17.8445C21.7681 17.9669 21.8183 18.0843 21.9076 18.1709C21.9969 18.2575 22.118 18.3061 22.2443 18.3061C22.3706 18.3061 22.4918 18.2575 22.5811 18.1709C22.6704 18.0843 22.7206 17.9669 22.7206 17.8445V16.9215C22.7206 16.8609 22.7082 16.8008 22.6843 16.7448C22.6604 16.6888 22.6253 16.638 22.5811 16.5951C22.5369 16.5522 22.4844 16.5183 22.4266 16.4951C22.3688 16.4719 22.3069 16.4599 22.2443 16.4599Z" fill="#FFDB82"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

17
ruoyi-ui/src/views/JiHeExpressway/images/layer/事件专题/服务区异常_fault.svg

@ -0,0 +1,17 @@
<svg width="28" height="29" viewBox="0 0 28 29" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#233;&#161;&#181;&#233;&#157;&#162;-1">
<g id="&#233;&#166;&#150;&#233;&#161;&#181;-&#229;&#185;&#179;&#233;&#157;&#162;3">
<g id="&#231;&#188;&#150;&#231;&#187;&#132;-16&#229;&#164;&#135;&#228;&#187;&#189;">
<g id="1">
<g id="&#232;&#183;&#175;&#233;&#157;&#162;&#231;&#138;&#182;&#230;&#128;&#129;">
<path id="Vector" d="M19.985 12.2515C20.2268 11.8753 20.4082 11.5742 20.65 11.198C20.9522 10.6712 21.3754 10.3702 21.8591 10.2949C22.1009 10.2197 22.4031 10.1444 22.5845 9.91863C22.7054 9.84338 22.7659 9.69287 22.8263 9.54236C22.8868 9.39185 22.9472 9.16609 23.0681 9.01558C23.3704 8.33829 23.6727 7.661 23.975 7.05896C24.0354 6.9837 23.975 6.83319 23.9145 6.75794C23.8541 6.68269 23.7936 6.75794 23.7331 6.83319L23.6727 6.90845C23.31 7.43523 22.8868 8.03727 22.5241 8.56405C22.4636 8.63931 22.4031 8.71456 22.2822 8.63931C22.1613 8.63931 22.1613 8.56405 22.2218 8.41354C22.2822 8.33829 22.2822 8.26303 22.3427 8.18778C22.7054 7.661 23.0681 7.13421 23.4309 6.68269C23.4913 6.60743 23.4913 6.53218 23.4309 6.38167C23.3704 6.30641 23.31 6.30641 23.2495 6.38167C23.1286 6.53218 23.0681 6.68269 22.9472 6.83319C22.645 7.28472 22.3427 7.661 22.1009 8.11252C22.0404 8.18778 21.8591 8.26303 21.7986 8.18778C21.7382 8.03727 21.7986 8.03727 21.8591 7.88676C21.8591 7.88676 21.8591 7.8115 21.9195 7.8115C22.2218 7.35998 22.5845 6.90845 22.8868 6.38167C22.9472 6.30641 23.0077 6.23116 23.0681 6.08065C23.0681 6.00539 23.0077 6.00539 23.0077 5.93014C22.9472 5.85488 22.8868 5.85488 22.8263 5.93014C22.4636 6.45692 22.1009 6.9837 21.7986 7.58574C21.5568 7.96201 21.4359 8.03727 21.315 7.96201C21.1941 7.96201 21.1941 7.88676 21.2545 7.73625C21.315 7.661 21.3754 7.58574 21.3754 7.51049L22.4636 6.1559C22.5845 6.00539 22.5845 6.00539 22.4636 5.85488C22.4636 5.85488 22.4636 5.77963 22.4031 5.77963C22.3427 5.62912 22.2822 5.62912 22.1613 5.77963C22.1613 5.85488 22.1613 5.93014 22.1009 5.93014C21.4359 6.60743 20.7709 7.20947 20.1059 7.88676C20.0454 7.88676 20.0454 7.96201 20.0454 8.03727C20.0454 8.4888 19.985 8.86507 19.985 9.3166C19.985 9.61762 19.9245 9.84338 19.8036 9.99389C19.5618 10.2949 19.3804 10.6712 19.1386 11.0475C19.3804 11.499 19.6827 11.8753 19.985 12.2515C19.985 12.3268 19.985 12.3268 19.985 12.2515ZM21.1924 15.3334C18.351 11.0439 17.5047 10.2197 14.6633 5.85488C14.6029 5.85488 14.6029 5.77963 14.5424 5.77963H14.3023C14.1209 5.77963 14 5.93014 14 6.1559V7.88676C14 7.96201 14 8.03727 14.0605 8.11252C14.8464 9.24134 15.6323 10.4454 16.4182 11.5742C16.5995 11.8753 16.8414 12.1763 17.0227 12.4773C17.1436 12.402 17.2041 12.3268 17.325 12.3268C17.4459 12.2515 17.5668 12.2515 17.6877 12.2515C17.8691 12.2515 17.9295 12.3268 17.99 12.4773C17.99 12.5525 18.0504 12.5525 18.0504 12.6278C19.5013 15.0359 18.8968 13.9036 20.3477 16.3117C20.4686 16.5375 20.65 16.688 20.8313 16.7633C21.1336 16.9138 21.0311 16.5592 21.3333 16.3334C21.5147 15.9571 21.4342 15.6344 21.1924 15.3334Z" fill="#FF5F5F"/>
<path id="Vector_2" d="M18.203 13.6112C18.0655 13.382 17.928 13.2292 17.7218 13.0001L17.653 13.0765C16.2094 15.0626 14.7658 17.1251 13.3222 19.1112C13.2535 19.1876 13.2535 19.264 13.1847 19.3404V19.5695C13.3222 20.1042 13.6659 20.257 14.0784 20.3334H14.3534C14.5596 20.3334 14.6971 20.1806 14.7658 19.9515C15.3158 19.1112 15.9344 18.2709 16.4844 17.4306C17.1718 16.4376 17.8593 15.3681 18.6154 14.3751C18.6842 14.2987 18.6842 14.2223 18.6154 14.1459C18.5467 13.9931 18.4092 13.8404 18.203 13.6112ZM10.9849 6.6598C10.2288 5.9723 9.1976 5.66675 7.20405 5.66675H2.66699V6.27786C3.97311 6.27786 4.1106 6.43064 4.1106 7.80564V18.1945C4.1106 19.6459 3.97311 19.7223 2.66699 19.7223V20.3334H7.27279V19.7223C5.6917 19.7223 5.62295 19.5695 5.62295 18.1945V13.764H7.06656C8.92263 13.764 12.2223 13.5348 12.2223 9.63897C12.1536 8.34036 11.7411 7.3473 10.9849 6.6598ZM7.06656 13.0001H5.62295V7.65286C5.62295 6.6598 5.6917 6.43064 6.03541 6.43064H6.99782C8.30394 6.43064 9.1976 6.6598 9.74755 7.19453C10.2975 7.72925 10.5725 8.56953 10.5725 9.56258C10.6412 12.4654 8.85389 13.0001 7.06656 13.0001Z" fill="#FF5F5F"/>
<g id="Frame">
<path id="Vector_3" d="M21.9795 14.7578C22.0872 14.5658 22.4005 14.5658 22.5082 14.7578L25.5389 20.1615C25.5649 20.2079 25.5783 20.2599 25.5778 20.3127C25.5773 20.3656 25.5629 20.4174 25.536 20.4633C25.5102 20.5086 25.4724 20.5463 25.4266 20.5728C25.3807 20.5992 25.3284 20.6134 25.2751 20.6138H19.2136C19.1602 20.6134 19.1079 20.5992 19.0621 20.5728C19.0162 20.5463 18.9784 20.5086 18.9526 20.4633C18.9259 20.4173 18.9116 20.3655 18.9111 20.3127C18.9106 20.26 18.9239 20.2079 18.9498 20.1615L21.9795 14.7578ZM22.2443 18.7676C22.118 18.7676 21.9969 18.8162 21.9076 18.9028C21.8183 18.9894 21.7681 19.1067 21.7681 19.2292C21.7681 19.3516 21.8183 19.469 21.9076 19.5555C21.9969 19.6421 22.118 19.6907 22.2443 19.6907C22.3706 19.6907 22.4918 19.6421 22.5811 19.5555C22.6704 19.469 22.7206 19.3516 22.7206 19.2292C22.7206 19.1067 22.6704 18.9894 22.5811 18.9028C22.4918 18.8162 22.3706 18.7676 22.2443 18.7676ZM22.2443 16.4599C22.1818 16.4599 22.1199 16.4719 22.0621 16.4951C22.0043 16.5183 21.9518 16.5522 21.9076 16.5951C21.8634 16.638 21.8283 16.6888 21.8043 16.7448C21.7804 16.8008 21.7681 16.8609 21.7681 16.9215V17.8445C21.7681 17.9669 21.8183 18.0843 21.9076 18.1709C21.9969 18.2575 22.118 18.3061 22.2443 18.3061C22.3706 18.3061 22.4918 18.2575 22.5811 18.1709C22.6704 18.0843 22.7206 17.9669 22.7206 17.8445V16.9215C22.7206 16.8609 22.7082 16.8008 22.6843 16.7448C22.6604 16.6888 22.6253 16.638 22.5811 16.5951C22.5369 16.5522 22.4844 16.5183 22.4266 16.4951C22.3688 16.4719 22.3069 16.4599 22.2443 16.4599Z" fill="#FF5F5F"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

4
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/AMapContainer/index.vue

@ -199,8 +199,8 @@ export default {
},
},
// unmounted() {
destroyed(){
if (!this.aMapIns) return;
beforeDestroy() {
if (!this.aMapIns || !this.aMapIns.destroyed) return;
this.aMapIns.destroyed();
},
};

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

@ -4,14 +4,22 @@
<div class="body">
<div class="left">
<div class="title">路测广播列表</div>
<CheckboxGroup class="checkbox-group" :value="[]" :options="options" />
<CheckboxGroup class="checkbox-group" v-model="checkList" :options="musicList" id="otherConfig"
label="deviceName">
<template #[otherConfig]="{ data }">
<span style="color: #6EE5FE;">
{{ data.deviceName }}(当前设备)
</span>
</template>
</CheckboxGroup>
</div>
<div class="right">
<div class="top-content">
<Video class="item-video" />
<Video class="item-video" :pileNum="pileNum" />
<label>发布内容: </label>
<ElInput type="textarea" :autosize="{ minRows: 3, maxRows: 3 }" :maxlength="150" showWordLimit />
<ElInput type="textarea" v-model="releaseMessage" :autosize="{ minRows: 3, maxRows: 3 }" :maxlength="150"
showWordLimit placeholder="请输入发布内容" />
</div>
<div class="footer">
@ -25,8 +33,6 @@
</div>
</div>
</div>
<!-- <Form class="form" ref="FormConfigRef" :formList="formList" column="1" style="flex: 1;" labelWidth="120px" /> -->
</div>
</Dialog>
</template>
@ -38,11 +44,10 @@ import Form from '@screen/components/FormConfig';
import Video from "@screen/components/Video"
import CheckboxGroup from "@screen/components/FormConfig/components/ElCheckboxGroup.vue"
import { delay } from "@screen/utils/common.js"
import request from "@/utils/request";
import { getDeviceList } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js";
import { Message } from "element-ui";
// import { axiosIns } from "@screen/utils/axios/auth.js";
export default {
name: 'BroadcastReleases',
@ -59,15 +64,17 @@ export default {
},
props: {
visible: Boolean,
deviceId: String
deviceId: String,
pileNum: String,
currentId: [String, Number],
otherConfig: Object
},
data() {
return {
submitting: false,
options: Array.from({ length: 24 }).map((_, index) => ({
key: index,
label: "阿发"
}))
checkList: [],
releaseMessage: null,
musicList: []
}
},
computed: {
@ -80,44 +87,44 @@ export default {
}
}
},
watch: {
modelVisible: {
immediate: true,
handler(bool) {
if (!bool) return;
this.reDisplay();
}
}
created() {
getDeviceList(5)
.then(data => {
if (Array.isArray(data)) this.musicList = data;
})
},
methods: {
reDisplay() {
},
handleSubmit() {
const result = {}, formData = this.$refs.FormConfigRef?.formData;
if (!this.releaseMessage?.trim()) return Message.error("发布内容不能为空!");
if (!this.checkList.length) return Message.error("请至少选择一个广播设备!");
let functionId = 51;
result.mode = formData.controlType === 'manual' ? "00" : "01";
delete result.controlType;
this.submitting = true;
if (result.mode === '01') {
if (!formData.displayTime?.length) return Message.error(`时间不能为空!`);
result.startDisplayTime = formData.displayTime[0];
result.endDisplayTime = formData.displayTime[1];
delete result.displayTime;
request({
url: `/broadcast/broadcastFunctionCall`,
method: "post",
data: {
"name": "task-3",
"outVol": "6",
"priority": "1",
"text": this.releaseMessage.trim(),
"repeatTimes": "3",
"termList": this.checkList.map(str => JSON.parse(str)),
"functionType": "startPaTts"
}
})
.then(data => {
console.log(data);
if (data.code == '200') {
Message.success("广播设置成功!");
this.modelVisible = false;
} else {
if (!formData.onWorkStatus || !formData.inWorkStatus) return Message.error(`工作状态不能为空!`);
result.onWorkStatus = formData.onWorkStatus
result.inWorkStatus = formData.inWorkStatus
Message.error("广播设置失败!");
}
this.submitting = true;
// this.submitting = false;
// return;
})
.finally(() => {
this.submitting = false;
})
}
},
}
@ -126,7 +133,7 @@ export default {
<style lang='scss' scoped>
.BroadcastReleases {
// width: 450px;
height: 397px;
height: 420px;
display: flex;
flex-direction: column;
gap: 15px;
@ -168,7 +175,6 @@ export default {
.item-video {
width: 545px;
height: 216px;
}
label {

7
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Broadcast/index.vue

@ -1,6 +1,6 @@
<template>
<Dialog v-model="obverseVisible" title="行车诱导">
<Video class="item-video" />
<Dialog v-model="obverseVisible" title="语音广播">
<Video class="video-stream" :pileNum="dialogData.stakeMarkId" />
<div class="Broadcast">
<ElTabs v-model="activeName" @tab-click="handleClickTabs" class="tabs">
@ -15,7 +15,8 @@
</div>
</div>
<BroadcastReleases v-model="releaseVisible" :deviceId="dialogData.iotDeviceId || '8697-1'" />
<BroadcastReleases v-model="releaseVisible" :deviceId="dialogData.iotDeviceId" :pileNum="dialogData.stakeMarkId"
:otherConfig="dialogData.otherConfig" :currentId="dialogData.id" />
</Dialog>
</template>

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

@ -23,14 +23,13 @@
import Dialog from "@screen/components/Dialog/index.vue";
import Button from "@screen/components/Buttons/Button.vue"
import Descriptions from '@screen/components/Descriptions.vue';
import CustomControlVideo from '@screen/components/CustomControlVideo/index.vue';
import DeviceControlDialog from "./components/DeviceControlDialog.vue"
import { getRoadInfoByStakeMark, getProduct } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"
import Video from "@screen/components/Video"
import { dialogDelayVisible } from "./../mixin"
// G35 K094+079
//
export default {
name: 'DrivingGuidance',
mixins: [dialogDelayVisible],
@ -38,7 +37,6 @@ export default {
Dialog,
Button,
Descriptions,
CustomControlVideo,
DeviceControlDialog,
Video
},

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

@ -0,0 +1,166 @@
<template>
<Dialog v-model="obverseVisible" title="感知事件">
<div class="PerceiveEvent">
<Video class="item-video" />
<div class="chart"></div>
<Form class="form" :value="data" ref="FormConfigRef" :formList="formList" column="1" />
</div>
<template #footer>
<Button>误操作</Button>
<Button style="background-color: rgba(0, 179, 204, 0.3);">取消</Button>
<Button>确定</Button>
</template>
</Dialog>
</template>
<script>
import Dialog from "@screen/components/Dialog/index.vue";
import Button from "@screen/components/Buttons/Button.vue"
import Descriptions from '@screen/components/Descriptions.vue';
import Video from "@screen/components/Video";
import Form from '@screen/components/FormConfig';
// import { getRoadInfoByStakeMark, getProduct } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"
import { dialogDelayVisible } from "./../mixin"
//
export default {
name: 'PerceiveEvent',
mixins: [dialogDelayVisible],
components: {
Dialog,
Button,
Descriptions,
Video,
Form
},
data() {
return {
activeName: 'first',
deviceControlVisible: false,
data: {
deviceType: "行车诱导",
deviceStation: "k094+079",
roadName: "G35济泽高速",
direction: "1",
deviceState: "0",
deviceVendors: "XXX厂家",
time: "2023/01/02 09:09:09"
},
formList: [
{
label: "报警时间:",
key: "warningTime",
type: "text",
},
{
label: "事件地点:",
key: "stakeMarkId",
type: "text",
},
{
label: "事件来源:",
key: "warningSource",
type: "text",
enum: "InfoWarningSource"
},
{
label: "事件类型:",
key: "warningType",
type: "select",
options: {
options: []
}
},
{
label: "细分类型:",
key: "warningSubclass",
type: "select",
},
{
label: "事件描述:",
key: "desc.duration",
options: {
type: "textarea",
maxlength: 100,
autosize: { minRows: 6, maxRows: 6 },
showWordLimit: true,
}
},
{
label: "影响车道:",
key: "lane",
type: "RadioGroup",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "0",
label: "应急",
},
{
key: "1",
label: "行",
},
{
key: "2",
label: "行2",
},
{
key: "3",
label: "行3",
},
{
key: "4",
label: "行4",
},
],
},
},
{
label: "持续时长:",
key: "parseOtherConfig.duration",
type: "text",
},
{
label: "天气情况:",
key: "createTime8",
type: "text",
},
]
}
},
async created() {
this.data = { ...this.dialogData, roadName: null }
console.log("%c [ this.data ]-108-「index.vue」", "font-size:15px; background:#1be811; color:#5fff55;", this.data);
},
methods: {
}
}
</script>
<style lang='scss' scoped>
.PerceiveEvent {
width: 870px;
color: #fff;
display: grid;
grid-template-columns: 1.2fr 1fr;
grid-template-rows: repeat(2, 1fr);
gap: 9px;
.item-video {
grid-area: 1/1/1/1;
}
.chart {
grid-area: 2/1/2/1;
background-color: #fff;
}
.form {
grid-area: 1/2/3/3;
}
}
</style>

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

@ -0,0 +1,165 @@
<template>
<Dialog v-model="obverseVisible" :title="dialogData._itemData && dialogData._itemData.title">
<div class="TrafficIncidents">
<Descriptions labelWidth="72px" :list="list" :data="data" style="gap: 18px" column="7" />
</div>
</Dialog>
</template>
<script>
import Dialog from "@screen/components/Dialog/index.vue";
import Descriptions from '@screen/components/Descriptions.vue';
// import { getRoadInfoByStakeMark, getProduct } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"
import request from "@/utils/request";
import { dialogDelayVisible } from "./../mixin"
//
export default {
name: 'TrafficIncidents',
mixins: [dialogDelayVisible],
components: {
Dialog,
Descriptions,
},
data() {
return {
activeName: 'first',
deviceControlVisible: false,
data: {
deviceType: "行车诱导",
deviceStation: "k094+079",
roadName: "G35济泽高速",
direction: "1",
deviceState: "0",
deviceVendors: "XXX厂家",
},
list: [
{
label: '机构',
key: "origin",
gridColumn: '3'
},
{
label: '高速名称',
key: "roadName",
gridColumn: '3'
},
{
label: '感知时间',
key: "occurrenceTime",
gridColumn: '3',
visible: () => this.isPerceived
},
{
label: '桩号',
key: "stakeMark",
gridColumn: '3'
},
{
label: '事件源',
key: "stringEventSource",
gridColumn: '3'
},
{
label: '车道列表',
key: "roadName23",
gridColumn: '2'
},
{
label: '事件状态',
key: "eventState",
enum: "EventType",
gridColumn: '2'
},
{
label: '经/纬度',
key: "${longitude} / ${latitude}",
gridColumn: '3'
},
{
label: '发生时间',
key: "occurrenceTime",
gridColumn: '3'
},
{
label: '行驶方向',
key: "direction",
enum: "CameraDirectionEnum",
gridColumn: '3'
},
{
label: '完结时间',
key: "endTime",
gridColumn: '3'
},
{
label: '事件描述',
key: "description",
gridColumn: '5'
},
]
}
},
async created() {
this.data = { ...this.dialogData };
request({
url: `/business/trafficIncidents/getEventInfo/${this.dialogData.id}`,
method: "get"
})
.then(({ code, data }) => {
if (code != 200) return;
this.data = { ...data, ...this.data };
console.log(data)
}).catch((err) => {
});
},
methods: {
handleClickTabs() { }
}
}
</script>
<style lang='scss' scoped>
.TrafficIncidents {
width: 600px;
color: #fff;
display: flex;
flex-direction: column;
.camera-video {
flex: 1.5;
}
.tabs {
flex: 1;
display: flex;
flex-direction: column;
::v-deep {
.el-tabs__content {
flex: 1;
.el-tab-pane {
height: 100%;
}
}
}
}
.bottom {
margin-top: 12px;
display: flex;
gap: 9px;
align-items: center;
justify-content: end;
>div {
font-size: 16px;
padding: 6px 12px;
}
}
}
</style>

131
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/ViewDetails/index.vue

@ -1,131 +0,0 @@
<template>
<Dialog class="ViewDetails">
<div class="list-content">
<div class="list-item">
<span class="label">&nbsp;&nbsp;</span>
<span class="value">XX运管中心</span>
</div>
<div class="list-item">
<span class="label">高速名称</span>
<span class="value">G35济菏高速</span>
</div>
<div class="list-item">
<span class="label">感知时间</span>
<span class="value">2023-11-30 17:32:18</span>
</div>
<div class="list-item">
<span class="label"> &emsp;&emsp; </span>
<span class="value">K081+411</span>
</div>
<div class="list-item">
<span class="label"> </span>
<span class="value">视频AI</span>
</div>
<div class="list-item">
<span class="label">车道列表</span>
<span class="value">3</span>
<span class="event">事件状态</span>
<span class="event-value">上报</span>
</div>
<div class="list-item">
<span class="label"> / 纬度</span>
<span class="value">117.253,34.867</span>
</div>
<div class="list-item">
<span class="label">发生时间</span>
<span class="value">2023-11-06 17:09:55</span>
</div>
<div class="list-item">
<span class="label">行驶方向</span>
<span class="value">济南方向</span>
</div>
<div class="list-item">
<span class="label">完结时间</span>
<span class="value">2023-11-06 17:09:55</span>
</div>
<div class="list-item-describe">
<span class="label">事件描述</span>
<span class="value">2023-11-30 17:32:18 G35 K081+411 下行方向发生
撒撤落物(撒落物)事件</span>
</div>
</div>
<div class="video-presentation"></div>
</Dialog>
</template>
<script>
import Dialog from "@screen/components/Dialog/index.vue";
//
export default {
name: 'ViewDetails',
}
</script>
<style lang='scss' scoped>
.ViewDetails {
.video-presentation {
width: 100%;
height: 216px;
margin-top: 10px;
background: #00ebc1;
img {
width: 100%;
height: 100%;
}
}
.list-content {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.list-item {
width: 230px;
height: 35px;
display: flex;
align-items: center;
.label {
width: 90px;
display: inline-block;
font-size: 14px;
color: #3de8ff;
}
.labels {
width: 120px;
display: inline-block;
font-size: 14px;
color: #3de8ff;
}
.value {
font-size: 14px;
color: #ffffff;
display: flex;
align-items: center;
img {
display: inline-block;
// width: 20px;
// height: 20px;
margin-left: 10px;
}
}
.event {
font-size: 14px;
color: #3de8ff;
margin-left: 20px;
}
.event-value {
color: #19e1b1;
}
}
}
}
</style>

112
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFilter/index.vue

@ -0,0 +1,112 @@
<template>
<div class='HomeFilter'>
<ElPopover trigger="click" :visibleArrow="false" placement="left" popper-class="global-input-search-popover">
<Button :class="['btn', { 'btn-active': true }]" slot="reference">
<img src="@screen/images/home-filter/filter.svg">
</Button>
<div class="body">
<div class="title">
设备筛选
</div>
<Form labelWidth="72px" column="1" class="form" ref="FormConfigRef" :formList="formList" />
<div class="footer">
<Button style="background-color: rgba(0, 179, 204, .3);" @click.native="handleResetForm">
重置
</Button>
<Button @click.native="handleSearch">
搜索
</Button>
</div>
</div>
</ElPopover>
</div>
</template>
<script>
import Button from '@screen/components/Buttons/Button.vue';
import Form from '@screen/components/FormConfig';
import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js";
export default {
name: 'HomeFilter',
components: {
Button,
Form
},
data() {
return {
formList: [
{
...PresetFormItems.station,
key: "23",
required: false,
label: "起始桩号"
},
{
...PresetFormItems.station,
key: "s",
required: false,
label: "结束桩号"
},
{
label: "车道占用:",
key: "key027",
type: "CheckboxGroup",
isAlone: true,
default: [],
options: {
options: [
{ key: "weChat", label: "行1" },
{ key: "message", label: "行2" },
{ key: "website", label: "行3" },
{ key: "weibo", label: "行4" },
{ key: "weibo2", label: "应急车道" },
],
},
}
]
}
}
}
</script>
<style lang='scss'>
div.el-popper.global-input-search-popover {
background: rgba(6, 66, 88, 0.8);
border: 1px solid rgba(42, 217, 253, 0.6);
position: relative;
padding-top: 36px;
transform: translateY(24px);
.body {
.title {
background: linear-gradient(90deg, #237E9B 0%, rgba(23, 145, 184, 0) 100%);
padding: 3px 9px;
position: absolute;
top: 0;
left: 0;
width: 100%;
}
}
}
</style>
<style lang='scss' scoped>
.HomeFilter {
.btn {
padding: 9px;
background: linear-gradient(180deg, #152E3C 0%, #163A45 100%);
border-radius: 4px;
overflow: hidden;
height: unset;
border: 1px solid rgba(40, 144, 167, 1);
}
.btn-active {
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);
}
}
</style>

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

@ -43,6 +43,8 @@ import Bg1 from "@screen/components/Decorations/bg-1.vue"
import DrivingGuidance from "./../Dialogs/DrivingGuidance/index.vue"
import Camera from "./../Dialogs/Camera/index.vue";
import Broadcast from "./../Dialogs/Broadcast/index.vue";
import TrafficIncidents from "./../Dialogs/TrafficIncidents/index.vue";
import PerceiveEvent from "./../Dialogs/PerceiveEvent/index.vue";
import InfoBoard from "./../InfoBoard"
export default {
@ -53,6 +55,8 @@ export default {
DrivingGuidance,
InfoBoard,
Broadcast,
TrafficIncidents,
PerceiveEvent,
Bg1
},
data() {
@ -214,7 +218,7 @@ export default {
margin-bottom: 6px;
display: grid;
grid-template-columns: repeat(5, 1fr);
// grid-template-rows: repeat(3, 1fr);
grid-auto-rows: 78px;
flex: 1;
max-height: 100%;
overflow: auto;

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

@ -1,10 +1,17 @@
import { getDeviceList } from "./httpList";
import {
getDeviceList,
getEventTopicList,
getPerceiveEventList,
} from "./httpList";
import { delay } from "@screen/utils/common";
import { Message } from "element-ui";
import { EventTopics } from "@screen/utils/enum.js";
import { setMarkToMap } from "./map";
const cameraIcon = {
// 球机
"00": require("@screen/images/deviceType/ball.svg"),
"00": require("@screen/images/deviceType/ball_active.svg"),
"01": require("@screen/images/deviceType/ball_fault.svg"),
};
@ -41,21 +48,36 @@ export const DeviceForMap = {
};
export function getHandleDeviceType(item) {
if (DeviceForMap[item.title]) return "地图设备/map";
if (DeviceForMap[item.title]) return "地图路测设备/map";
if (EventTopics[item.title]) return "地图事件专题/map";
}
export const eventMap = {
// 需要在地图显示的
async "地图设备/map"(item) {
// 设备 需要在地图显示的
async "地图路测设备/map"(item) {
const config = DeviceForMap[item.title];
const data = await getDeviceList(config.deviceType);
const loadingMessage = Message.info({
message: `${item.title}设备加载中...`,
duration: 0,
customClass: "loading-message",
iconClass: "el-icon-loading",
});
const data = await getDeviceList(config.deviceType)
.then(async (data) => {
await delay(600);
return data;
})
.catch(() => {})
.finally(() => loadingMessage.close());
if (!data) return;
if (!data.length) return Message.warning(`没有${item.title}事件数据!`);
eventMap[`地图设备/map_close`](item);
eventMap[`地图路测设备/map_close`](item);
cacheRemoveFunc[`地图设备/${item.title}`] = await setMarkToMap.call(
cacheRemoveFunc[`地图路测设备/${item.title}`] = await setMarkToMap.call(
this,
item,
data,
@ -71,234 +93,100 @@ export const eventMap = {
config.options
);
},
"地图设备/map_close"(item) {
cacheRemoveFunc[`地图设备/${item.title}`]?.();
"地图路测设备/map_close"(item) {
cacheRemoveFunc[`地图路测设备/${item.title}`]?.();
},
// async "路测设备/摄像机"(item) {
// // https://lbs.amap.com/demo/javascript-api-v2/example/mass-markers/labelmarker-mass
// 事件 需要在地图显示的
async "地图事件专题/map"(item) {
const loadingMessage = Message.info({
message: `${item.title}事件位置加载中...`,
duration: 0,
customClass: "loading-message",
iconClass: "el-icon-loading",
});
const data = await getEventTopicList(EventTopics[item.title])
.then(async (data) => {
await delay(600);
return data;
})
.catch(() => {})
.finally(() => loadingMessage.close());
// // {
// // camId: "57937",
// // camLat: "0",
// // camLong: "0",
// // camName: "G35 K055+565 (可控)",
// // camOrientation: "2",
// // camStatus: "0",
// // camType: "1",
// // deptId: "1751",
// // deptName: "G35济菏改扩建",
// // firmType: "2",
// // pileNum: "K055+565",
// // ptzCtrl: "0",
// // road: "G35",
// // status: "0",
// // };
// const ballFault = require("@screen/images/deviceType/ball_fault.svg");
// const ball = require("@screen/images/deviceType/ball.svg");
// const data = await getDeviceList(1);
// // const data = [
// // {
// // longitude: 116.268564,
// // latitude: 35.73115,
// // otherConfig: '{"ptzCtrl":0}',
// // },
// // {
// // longitude: 116.258178,
// // latitude: 35.720996,
// // },
// // {
// // longitude: 116.255542,
// // latitude: 35.717335,
// // },
// // {
// // longitude: 116.252883,
// // latitude: 35.713114,
// // },
// // {
// // longitude: 116.249416,
// // latitude: 35.707627,
// // },
// // ];
// if (!data) return;
// cacheRemoveFunc.DriveTestEquipment_Camera_Remove?.();
// cacheRemoveFunc.DriveTestEquipment_Camera_Remove = await setMarkToMap.call(
// this,
// item,
// data,
// (extData) => {
// try {
// this.dialogConfig = {
// // 0 有(球机) 1 ⽆(枪机)
// component: cameraCtrlMap[JSON.parse(extData.otherConfig)?.ptzCtrl],
// data: extData,
// };
// } catch (error) {}
// },
// null,
// {
// iconCallback(bool, item) {
// const type = JSON.parse(item.otherConfig)?.ptzCtrl;
// switch (type) {
// case "0":
// case 0:
// return bool ? ball : ballFault;
// }
// },
// }
// );
// },
// async "路测设备/摄像机_close"() {
// cacheRemoveFunc.DriveTestEquipment_Camera_Remove?.();
// },
// async "路测设备/行车诱导_close"() {
// cacheRemoveFunc.Driving_Guidance_Remove?.();
// },
// async "路测设备/行车诱导"(item) {
// const data = await getDeviceList(12);
// // const data = [
// // {
// // longitude: 116.268564,
// // latitude: 35.73115,
// // otherConfig: '{"ptzCtrl":0}',
// // },
// // {
// // longitude: 116.258178,
// // latitude: 35.720996,
// // },
// // {
// // longitude: 116.255542,
// // latitude: 35.717335,
// // },
// // {
// // longitude: 116.252883,
// // latitude: 35.713114,
// // },
// // {
// // longitude: 116.249416,
// // latitude: 35.707627,
// // },
// // ];
// if (!data) return;
// cacheRemoveFunc.Driving_Guidance_Remove?.();
// cacheRemoveFunc.Driving_Guidance_Remove = await setMarkToMap.call(
// this,
// item,
// data,
// (extData) => {
// this.dialogConfig = {
// component: "DrivingGuidance",
// data: extData,
// };
// }
// );
// },
// async "路测设备/情报板_close"() {
// cacheRemoveFunc.Info_Board_Remove?.();
// },
// async "路测设备/情报板"(item) {
// const data = await getDeviceList(2);
if (!data) return;
// // const data = [
// // {
// // longitude: 116.268564,
// // latitude: 35.73115,
// // otherConfig: '{"ptzCtrl":0}',
// // },
// // {
// // longitude: 116.258178,
// // latitude: 35.720996,
// // },
// // {
// // longitude: 116.255542,
// // latitude: 35.717335,
// // },
// // {
// // longitude: 116.252883,
// // latitude: 35.713114,
// // },
// // {
// // longitude: 116.249416,
// // latitude: 35.707627,
// // },
// // ];
if (!data.length) return Message.warning(`没有${item.title}事件数据!`);
// if (!data) return;
eventMap[`地图事件专题/map_close`](item);
// cacheRemoveFunc.Info_Board_Remove?.();
cacheRemoveFunc[`地图事件专题/${item.title}`] = await setMarkToMap.call(
this,
item,
data,
(extData) => {
this.dialogConfig = {
component: "TrafficIncidents",
data: {
...extData,
parseOtherConfig: JSON.parse(extData.otherConfig || "{}"),
_itemData: item,
},
};
},
{
stateCallback: () => true,
}
// config.options
);
},
"地图事件专题/map_close"(item) {
cacheRemoveFunc[`地图事件专题/${item.title}`]?.();
},
// cacheRemoveFunc.Info_Board_Remove = await setMarkToMap.call(
// this,
// item,
// data,
// (extData) => {
// this.dialogConfig = {
// component: "InfoBoard",
// data: extData,
// };
// }
// );
// },
// async "路测设备/语音广播_close"() {
// // cacheRemoveFunc.Info_Board_Remove?.();
// },
// async "路测设备/语音广播"(item) {
// console.log(
// "%c [ item ]-194-「buttonEvent.js」",
// "font-size:15px; background:#31100b; color:#75544f;",
// item
// );
// return;
// const data = await getDeviceList(2);
// 感知事件
async "事件专题/感知事件"(item) {
const loadingMessage = Message.info({
message: `${item.title}位置加载中...`,
duration: 0,
customClass: "loading-message",
iconClass: "el-icon-loading",
});
const data = await getPerceiveEventList()
.then(async (data) => {
await delay(600);
return data;
})
.catch(() => {})
.finally(() => loadingMessage.close());
// // const data = [
// // {
// // longitude: 116.268564,
// // latitude: 35.73115,
// // otherConfig: '{"ptzCtrl":0}',
// // },
// // {
// // longitude: 116.258178,
// // latitude: 35.720996,
// // },
// // {
// // longitude: 116.255542,
// // latitude: 35.717335,
// // },
// // {
// // longitude: 116.252883,
// // latitude: 35.713114,
// // },
// // {
// // longitude: 116.249416,
// // latitude: 35.707627,
// // },
// // ];
if (!data) return;
// if (!data) return;
if (!data?.length) return Message.warning(`没有${item.title}数据!`);
// // cacheRemoveFunc.Info_Board_Remove?.();
eventMap[`事件专题/感知事件_close`](item);
// // cacheRemoveFunc.Info_Board_Remove = await setMarkToMap.call(
// // this,
// // item,
// // data,
// // (extData) => {
// // this.dialogConfig = {
// // component: "InfoBoard",
// // data: extData,
// // };
// // }
// // );
// },
cacheRemoveFunc[`事件专题/${item.title}`] = await setMarkToMap.call(
this,
item,
data,
(extData) => {
this.dialogConfig = {
component: "PerceiveEvent",
data: {
...extData,
parseOtherConfig: JSON.parse(extData.otherConfig || "{}"),
},
};
},
{
stateCallback: () => true,
}
// config.options
);
},
"事件专题/感知事件_close"(item) {
cacheRemoveFunc[`事件专题/${item.title}`]?.();
},
};

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

@ -174,7 +174,13 @@ const DeviceTypeMap = {
14: "光线在线监测",
*/
export function getDeviceList(deviceType) {
return request({
return new Promise((resolve, reject) => {
if (!deviceType) {
Message.error(`${DeviceTypeMap[deviceType]}设备加载失败!`);
return reject();
}
request({
url: "/business/device/query",
method: "get",
params: {
@ -182,13 +188,17 @@ export function getDeviceList(deviceType) {
},
})
.then(({ code, data }) => {
if (code != 200)
if (code != 200) {
reject();
return Message.error(`${DeviceTypeMap[deviceType]}设备加载失败!`);
}
return data;
resolve(data);
})
.catch(() => {
Message.error(`${DeviceTypeMap[deviceType]}设备加载失败!`);
reject();
});
});
}
@ -241,3 +251,59 @@ export function getProduct(productId) {
});
});
}
/**
* 交通事件 列表 根据类型获取
* @param {number} eventType
*/
export function getEventTopicList(eventType) {
return new Promise((resolve, reject) => {
if (!eventType) {
Message.error(`事件加载失败!`);
return reject();
}
request({
url: `/business/trafficIncidents/getEventList/${eventType}`,
method: "get",
})
.then(({ code, data }) => {
if (code != 200) {
reject();
return Message.error(`事件加载失败!`);
}
resolve(data);
})
.catch(() => {
Message.error(`事件加载失败!`);
reject();
});
});
}
/**
* 感知事件根据类型获取
* @param {number} eventType
*/
export function getPerceiveEventList() {
return new Promise((resolve, reject) => {
request({
url: `/perceivedEvents/warning/perceivedEventsList`,
method: "POST",
data: {},
})
.then(({ code, rows }) => {
if (code != 200) {
reject();
return Message.error(`事件加载失败!`);
}
resolve(rows);
})
.catch(() => {
Message.error(`事件加载失败!`);
reject();
});
});
}

17
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/layerImages.js

@ -1,3 +1,5 @@
import { EventTopics } from "@screen/utils/enum.js";
export function getLayerData() {
const layerData = require.context(
"@screen/images/layer",
@ -9,7 +11,17 @@ export function getLayerData() {
const resultData = [];
layerData.keys().forEach((item) => {
const [_, topic, title] = item.match(/[^/]+/g);
const [_, topic, file] = item.match(/[^/]+/g);
const fileName = file.match(/[^._]+/)[0];
switch (topic) {
case "事件专题":
if (
!EventTopics[fileName.match(/[^._]+/)[0]] &&
!["感知事件"].includes(fileName)
)
return;
break;
}
if (!layerDatas[topic]) {
resultData.push(
(layerDatas[topic] = {
@ -19,9 +31,10 @@ export function getLayerData() {
})
);
}
layerDatas[topic].children.push({
id: item,
title: title.replace(".svg", ""),
title: fileName,
status: "",
});
});

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

@ -25,7 +25,8 @@ export async function setMarkerCluster(map, points, markerFun) {
let hasClick = false;
if (!points.length) Message.warning("未能匹配到对应坐标点");
// if (!points.length) return Message.warning("未能匹配到对应坐标点");
if (!points.length) return [];
const markerCluster = new AMap.MarkerCluster(map, points, {
// gridSize: 15,
@ -101,7 +102,7 @@ export async function setMarkToMap(
item,
data,
_markerClick,
{ iconCallback, content } = {}
{ iconCallback, content, stateCallback } = {}
) {
const { mapIns } = this.getMap();
@ -111,18 +112,18 @@ export async function setMarkToMap(
normal ||
require(`@screen/images/layer${item.id.replace(
/^\.|[^/]+(?=.svg$)/g,
(data) => (data === "." ? "" : `${data}`)
(data) => (data === "." ? "" : `${data}_active`)
)}`);
const fault =
fault ||
require(`@screen/images/layer${item.id.replace(
/^\.|[^/]+(?=.svg$)/g,
(data) => (data === "." ? "" : `${data}_fault`)
(data) => (data === "." ? `` : `${data}_fault`)
)}`);
const faultBg = require(`@screen/images/mapBg/fault.svg`);
const normalBg = require(`@screen/images/mapBg/normal.svg`);
const normalBg = require(`@screen/images/mapBg/active.svg`);
const markerClick = (e) => {
const extData = e.target.getExtData();
@ -133,9 +134,13 @@ export async function setMarkToMap(
const markerCluster = await setMarkerCluster(
mapIns,
data.map((item) => {
const currentState =
typeof stateCallback === "function"
? stateCallback(item)
: item.deviceState == 1;
const deviceIcon =
typeof iconCallback === "function" &&
iconCallback(item.deviceState == 1, item);
typeof iconCallback === "function" && iconCallback(currentState, item);
return {
weight: 1,
@ -145,26 +150,21 @@ export async function setMarkToMap(
content:
content ||
`<div style="
background-image: url(${
item.deviceState == 1 ? normalBg : faultBg
});
background-image: url(${currentState ? normalBg : faultBg});
background-size: 100% 100%;
background-repeat: no-repeat;
width: 51px;
height: 51px;
display: flex;
align-items: center;
justify-content: center;
">
<img style="
min-width: 18px;
min-height: 18px;
max-width: 18px;
max-height: 18px;
margin-bottom: 12px;
" src='${
deviceIcon ? deviceIcon : item.deviceState == 1 ? normal : fault
}'
min-width: 24px;
min-height: 24px;
width: 24px;
height: 24px;
margin-top: 8.1px;
" src='${deviceIcon ? deviceIcon : currentState ? normal : fault}'
>
</div>`,
};
@ -172,7 +172,11 @@ export async function setMarkToMap(
markerClick
);
mapIns.setZoom(10);
setTimeout(() => {
mapIns.setFitView([...markerCluster.U], false, [0, 0, 0, 0], 10);
}, 150);
return () => markerCluster.setMap(null);
}

25
ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue

@ -13,13 +13,7 @@
<!-- 右侧 -->
<div class="content-r">
<div class="filter">
<ElPopover trigger="click" disabled placement="left">
<Button class="btn" slot="reference">
<img src="@screen/images/home-filter/filter.svg">
</Button>
</ElPopover>
</div>
<HomeFilter class="filter" />
<ConditionStatistics class="right card-menu" />
</div>
</section>
@ -42,6 +36,7 @@ import Thumbnail from "./components/Thumbnail/index.vue";
import ConditionStatistics from "./components/ConditionStatistics/index.vue";
import RoadAndEvents from "./components/RoadAndEvents/index.vue";
import AMapContainer from "./components/AMapContainer/index.vue";
import HomeFilter from "./components/HomeFilter/index.vue";
import Button from '@screen/components/Buttons/Button.vue';
// import InfoBoard from "./components/InfoBoard"
@ -54,7 +49,8 @@ export default {
Thumbnail,
RoadAndEvents,
AMapContainer,
Button
Button,
HomeFilter
// InfoBoard
},
data() {
@ -142,19 +138,6 @@ export default {
display: flex;
gap: 9px;
.btn {
padding: 9px;
background: linear-gradient(180deg, #152E3C 0%, #163A45 100%);
border-radius: 4px;
overflow: hidden;
height: unset;
border: 1px solid rgba(40, 144, 167, 1);
}
.btn-active {
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);
}
.filter {
display: flex;
flex-direction: column;

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

@ -1,22 +1,22 @@
import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js";
export const tabMap = {
AlarmEvents: {
"-1": {
state: 5,
textColor: "#007FF4",
text: "去确认",
},
EventsConfirmed: {
0: {
state: 5,
textColor: "#007FF4",
text: "去确认",
},
DisposingEvents: {
1: {
state: 4,
textColor: "#007FF4",
text: "去处置",
},
IncidentDisposed: {
2: {
state: 3,
textColor: "#007FF4",
text: "处置记录",

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

@ -29,7 +29,7 @@
</div>
<!-- 内容 -->
<div class="body">
<div class="body" v-loading>
<RoadStateCard v-for="(item, index) in data" :key="index" v-bind="getStateCardBind(item)"
@firstBtnClick="firstBtnClick" />
</div>
@ -56,6 +56,7 @@ import InputSearch from '@screen/components/InputSearch/index.vue';
import EventDetailDialog from "./EventDetailDialog/index";
import FormEvent from "./FormEvent/index";
import { tabMap, searchFormList } from "./data";
import request from "@/utils/request";
function getRandomData(min = 1, max = 15) {
return Math.floor(Math.random() * (max - min + 1)) + min
@ -83,45 +84,60 @@ export default {
},
data() {
return {
data: getMockData(),
data: [],
searchFormList,
activeName: "AlarmEvents",
activeName: "-1",
panels: [
{
label: "告警事件(20)",
key: "AlarmEvents"
key: "-1"
},
{
label: "待确认事件(125)",
key: "EventsConfirmed"
key: "0"
},
{
label: "处置中事件(230)",
key: "DisposingEvents"
key: "1"
},
{
label: "已处置事件(76)",
key: "IncidentDisposed"
key: "2"
},
],
eventDetailDialogVisible: false,
isShowAddNew: false
isShowAddNew: false,
searchData: {
pageSize: 15,
pageNo: 1,
eventState: null
}
}
},
methods: {
handleSelect(activeName) {
this.activeName = activeName;
this.data = getMockData();
this.searchData.eventState = activeName == '-1' ? null : activeName;
// this.data = getMockData();
},
getStateCardBind(item) {
const { state, textColor, text } = tabMap[this.activeName]
return {
cardData: { ...item, state },
lastBtnColor: textColor,
lastBtnText: text
}
},
getData() {
request({
url: `/dc/system/event/list`,
method: "get",
// params: this.searchData
})
},
onAddNew() {
this.isShowAddNew = true;
},

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

@ -1,15 +1,15 @@
const echartsData = [
window.echartsData = [
{ value: 25, name: '处理中' },
{ value: 32, name: '待处理' },
{ value: 30, name: '已处理' },]
const colorList = [
window.colorList = [
"#FFee0B",
"#61D8FF",
"#6AE0BC",
]
let count = 0;
window.count = 0;
echartsData.forEach((it)=>{
count += it.value;
@ -33,6 +33,7 @@ let count = 0;
ast: {
align: "left",
fontSize: 12,
width:35,
},
bst: {
align: "left",

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

@ -12,6 +12,7 @@
import WgtTitle from '../../../widgets/title'
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getWarningStateDay } from '../../../../../../../api/event/perceiveEvent';
const drawRoundRect = ( ctx, x, y, width, height, radius ,gr) => {
// ctx, x, y, , ,
@ -50,7 +51,75 @@
setTimeout(() => {
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById('dailyDisposal'));
getWarningStateDay().then(res=>{
if ( res.code == 200 ) {
let data = res.data;
console.log(data);
window.echartsData = [];
for (let i = 0;i < data.length;i++){
let it = data[i];
if ( it.warningState == 1 ) {
echartsData.push({
name:"上报",
value: it.number
});
}
if (it.warningState == 2 ) {
echartsData.push({
name:"已完成",
value: it.number
});
}
if (it.warningState == 3 ) {
echartsData.push({
name:"已终止",
value: it.number
});
}
if (it.warningState == 4 ) {
echartsData.push({
name:"自动结束",
value: it.number
});
}
}
count = 0;
echartsData.forEach((it)=>{
count += it.value;
})
console.log(echartsData);
chartsStatistics.legend.data = window.echartsData?.map(x => x);
chartsStatistics.series[0].data = echartsData.map((item, index) => {
return {
...item,
label: {
color: colorList[index]
}
}
})
chartsStatistics.series[1].data = echartsData.map((item, index) => {
return {
...item,
label: {
color: colorList[index]
}
}
})
}
myChart.setOption(chartsStatistics);
});
const domMap = document.getElementById("dailyDisposal");

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

@ -70,8 +70,6 @@ const sxnja = [
// return value.min*0.9;
// },
type: 'value',
min: 0,
max:1000,
// max: yAxisMax,
axisLine: {
show: false,

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

@ -12,6 +12,8 @@
import WgtTitle from '../../../widgets/title'
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getDailyCumulative } from '../../../../../../../api/event/perceiveEvent';
export default {
name: 'RailWayDay',
components: {
@ -33,7 +35,26 @@
setTimeout(() => {
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById('daytotal'));
getDailyCumulative().then(res=>{
if ( res.code == 200) {
let data = res.data;
let timer = [];
let number = [];
data.forEach((it)=>{
timer.push(it.time);
number.push(it.number);
});
chartsStatistics.xAxis.data = timer;
chartsStatistics.series[0].data = number;
myChart.setOption(chartsStatistics);
}
});
});
});
},

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

@ -2,6 +2,7 @@
<div class='congestion'>
<WgtTitle :title="'感知事件查询'" ></WgtTitle>
<div class="board">
<ProgressBar class="keep-ratio" @selectItem="selectProgress" :dataList="dataList" :selectIndex="7" />
<div class="searchPanel">
<el-select v-model="area" size="mini" class="selectRoad" placeholder="请选择">
<el-option
@ -28,12 +29,11 @@
:type="year"
placeholder="请选择"
/>
<el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="year == 'quarter'" v-model="quarter" aria-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" icon="el-icon-search">查询</el-button>
<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" >重置</el-button>
</div>
<ProgressBar class="keep-ratio" :dataList="dataList" :selectIndex="7" />
</div>
<div class="body" >
<div id="chart1" class="keep-ratio" >
@ -58,6 +58,7 @@
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, , ,
@ -93,7 +94,7 @@
label: '月'
},
{
value: 'date',
value: 'day',
label: '日'
},
{
@ -101,14 +102,14 @@
label: '季'
},],
areaOptions: [{
value: '济南',
value: '0531',
label: '济南'
}, {
value: '菏泽',
label: '菏泽'
}],
dateTime:"",
area: '济南',
area: '0531',
dataList:[
{
title:"殷家林枢纽"
@ -160,6 +161,7 @@
}
],
quarter:"",
selectId:1,
year:"year",
list:[
{name:'大学城-长清', direction:'济南方向', state:"正常",speed:'108.14km/h', follow:'161'},
@ -176,11 +178,77 @@
},
methods: {
selectProgress(item){
this.selectId = item.id;
},
searchQuery(){
let dateTime = this.dateTime;
if ( this.year == "year") {
dateTime = new Date(dateTime);
dateTime = dateTime.getFullYear();
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 +"-00 00:00:00";
console.log(dateTime);
}
//
getWarningTrend({
"type": this.year,
"sectionId": this.selectId,
"createTime": dateTime,
}).then(res=>{
console.log(res);
chart1.series[0].data = [];
this.myChart1.setOption(chart1);
});
//
getWarningSectionType({
"type": this.year,
"sectionId": this.selectId,
"createTime": dateTime,
}).then(res=>{
console.log(res);
chart2.series[0].data = [];
this.myChart2.setOption(chart2);
})
//
getSectionMarkNumber({
"type": this.year,
"sectionId": this.selectId,
"createTime": dateTime,
}).then(res=>{
console.log(res);
chart3.series[0].data = [];
chart3.series[1].data = [];
this.myChart3.setOption(chart3);
})
},
},
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,
});
})
}
})
var myChart1 = echarts.init(document.getElementById('chart1'));
myChart1.setOption(chart1);
var myChart2 = echarts.init(document.getElementById('chart2'));
@ -188,6 +256,9 @@
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;
@ -288,7 +359,7 @@
height: 40px;
width:100%;
font-size: 14px;
margin-bottom: 10px;
margin-top: 10px;
div{
white-space: nowrap;
margin-right: 4px;

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

@ -2,8 +2,8 @@
<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)"></i>
<i class="before" @click="selectItem(index,+1)" ></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>
</div>
@ -38,9 +38,11 @@ import { number } from 'echarts';
},
methods: {
selectItem(index,num){
selectItem(index,num,item){
this.selectIndex = index;
this.selectLine = num
this.selectLine = num;
if ( item )
this.$emit("selectItem",item);
}
},
mounted() {
@ -147,7 +149,7 @@ import { number } from 'echarts';
>.item {
position: relative;
width: 180px;
width: 113px;
height:35px;
display: inline-flex;
flex-direction: column;

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

@ -15,6 +15,9 @@ let data = [{
typeName:'护栏碰撞',
percent:0.14
}]
window.mainData = data;
let chartData = [],lengData=[], colorList = ['#006EDF', '#00FF00', '#FFC30D', '#FF8400', '#1DA7FF','#2967EA'];
for (let i = 0; i < data.length; i++) {
chartData.push({
@ -55,6 +58,8 @@ for (let i = 0; i < chartData.length; i++) {
});
pieData1.push(gapData);
}
console.log(pieData1);
var options = {
tooltip: {
confine: true,
@ -115,10 +120,13 @@ var options = {
formatter: function(name){
let total = 0
let target
if ( !mainData ) return "";
for (let i = 0; i < data.length; i++) {
total += data[i].average
if (data[i].typeName === name) {
target = data[i].average
if ( window.mainData[i] ) {
total += window.mainData[i].value
if ( window.mainData[i].name === name) {
target = window.mainData[i].value
}
}
}
var arr = [

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

@ -12,6 +12,8 @@
import WgtTitle from '../../../widgets/title'
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getWarningSourceGroup } from '../../../../../../../api/event/perceiveEvent';
export default {
name: 'EventSource',
components: {
@ -36,30 +38,74 @@
let currentIndex = -1;
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById('eventSource'));
myChart.setOption(chartsStatistics);
this.myChart = myChart;
myChart.on('mouseover', (params) => {
// oldIndex = currentIndex;
currentIndex = params.dataIndex;
highlightPie(currentIndex,oldIndex);
})
getWarningSourceGroup().then((res)=>{
if ( res.code == 200 ) {
let data = res.data;
let warningTypes = [];
let number = [];
data.forEach(it=>{
if ( it.warningSource == 1) {
warningTypes.push('交通拥堵');
}
if ( it.warningSource == 2) {
warningTypes.push('行人');
}
if ( it.warningSource == 3) {
warningTypes.push('非机动车');
}
if ( it.warningSource == 4) {
warningTypes.push('停车');
}
if ( it.warningSource == 5) {
warningTypes.push('倒车/逆行');
}
if ( it.warningSource == 6) {
warningTypes.push('烟火');
}
if ( it.warningSource == 7) {
warningTypes.push('撒落物');
}
if ( it.warningSource == 8) {
warningTypes.push('异常天气');
}
if ( it.warningSource == 9) {
warningTypes.push('护栏碰撞');
}
function highlightPie(currentIndex,oldIndex) {
myChart.dispatchAction({
type: 'downplay',
seriesIndex: 1,
dataIndex: oldIndex
number.push(it.number);
})
myChart.dispatchAction({
type: 'highlight',
seriesIndex: 1,
dataIndex: currentIndex
let colorList = ['#006EDF', '#00FF00', '#FFC30D', '#FF8400', '#1DA7FF','#2967EA'];
let lengData = [];
let mainData = [];
let mainCount = 0;
for (let j =0;j < number.length;j++){
mainCount+= number[j];
}
for (let i = 0;i < warningTypes.length;i++){
let it = warningTypes[i];
lengData.push({
name:it,
color:colorList[i],
value:number[i],
});
mainData.push({
name:it,
color:colorList[i],
value:number[i],
percent: number[i]/mainCount
})
}
setTimeout(()=>{
window.mainData = mainData;
console.log("--------------",mainData);
chartsStatistics.legend.data = lengData;
chartsStatistics.series[0].data = mainData;
}
myChart.setOption(chartsStatistics);
})
this.myChart = myChart;
},50)
});
});
},

29
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/monthStatistics/index.vue

@ -12,6 +12,8 @@
import WgtTitle from '../../../widgets/title'
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getDailyCumulativeMonth } from '../../../../../../../api/event/perceiveEvent';
export default {
name: 'MonthStatistics',
components: {
@ -33,7 +35,34 @@
setTimeout(() => {
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById('monthStatistics'));
getDailyCumulativeMonth().then((res)=>{
console.log(res);
if ( res.code == 200 ) {
let data = res.data;
let timeData = [];
let datasN = [];
for (var i = 0; i < 24;i++){
let k = 0;
for (var j = 0;j < data.length;j++){
let it = data[j];
if ( it.time == i ) {
timeData.push( i +"点至"+ (i +1)+"点");
datasN.push(it.number);
k++;
}
}
if ( k == 0 ) {
timeData.push( i +"点至"+ (i +1)+"点");
datasN.push(0);
}
}
chartsStatistics.xAxis.data = timeData;
chartsStatistics.series[0].data = datasN;
myChart.setOption(chartsStatistics);
}
});
});
});
},

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

@ -1,9 +1,9 @@
let chartIcon = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAC4jAAAuIwF4pT92AAAFw2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuMTcxYzI3ZmFiLCAyMDIyLzA4LzE2LTIyOjM1OjQxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjQuMCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMTItMjlUMTA6MTM6MTQrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTEyLTI5VDEwOjQ2OjE3KzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTEyLTI5VDEwOjQ2OjE3KzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplYzhkN2NkNS01ZjdjLTQ5Y2ItOTgyMy1lOTM4ODViNjRjMmIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ZjE1ZWVkNDgtNDA3ZS00MDU0LTliNTMtYTllZmQ1ODE5YjVmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZjE1ZWVkNDgtNDA3ZS00MDU0LTliNTMtYTllZmQ1ODE5YjVmIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMTVlZWQ0OC00MDdlLTQwNTQtOWI1My1hOWVmZDU4MTliNWYiIHN0RXZ0OndoZW49IjIwMjMtMTItMjlUMTA6MTM6MTQrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC4wIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplYzhkN2NkNS01ZjdjLTQ5Y2ItOTgyMy1lOTM4ODViNjRjMmIiIHN0RXZ0OndoZW49IjIwMjMtMTItMjlUMTA6NDY6MTcrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC4wIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PibZhN0AAAHBSURBVDiNfdTtThNREAbgZ5sCrRTaRaBqQDTR6AXaq9grJEaiKCJWaAv9ENDUH2fWLkU8yeTkZGbe885nNp/PVU9vIMMGNtHGo1BNMQoZF7k7jlkVqDewji72sI5VrIT6F64xwRecFbnJPaDeQBsv8RSdCpsS6BYzDENOcVTkLv8CBZPX2McOdrEVITYC6BpjnKOP7zjG+yI3yd5dzLNg8jbY7MW9g+2lHJUgpzgJOcRRPX7dj3C6eIaDAO+iGUCzYPERWSXU5+jXIxct5MFgN0AOsLaoi9Ul0HHkaoBOLZg0IoQNPMaTJZAqWDfytylVtol2LdishNFaKBv/AClPI3waISto1UKZoRZ39h8QFZus8laTqvEbNyEzqdQPnZ/hcyMl/BbTmpSsacg43v0wXD43+BE2V+FzjWFdmp1ZKAZheByUt91tyD4+S/00wGWAjerxOJYS2JSSngX4lrsNeREfnUg9dRG+o3JEWniDF1Lpd6U2KEdkHoyuwvkM36TmPCxy4+rQdvDKoss7FhugzM8kIjiPED8UuSH310jLYkRaUl9V18gswD7ha5Ebl77ZA4utLY1MOT4sRmKI0fJi+wM9v6Q1QC+Y6wAAAABJRU5ErkJggg==`;
let xdata = {
value: ['平阴停车区', '孔村枢纽', '平阴南收费站', '东平湖枢纽', '沙河停车区', '梁山东收费站', '王官屯枢纽']
value: ['平阴停车区']
};
let sdata = {
value: [32774, 30067, 28774, 30067, 30021, 30067, 32774]
value: [32774]
}
let dataZoomMove = {
@ -49,7 +49,7 @@ var options = {
margin:-5,
formatter: function (value) {
let index = xdata.value.indexOf(value);
return `{a|Top${index+1}} {b|${value}}`
return `{a|Top${index + 2}} {b|${value}}`
},
rich: {
a: {

22
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/index.vue

@ -16,6 +16,8 @@
import WgtTitle from '../../../widgets/title'
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getSectionPerceivedList } from '../../../../../../../api/event/perceiveEvent';
export default {
name: 'Situation',
components: {
@ -31,7 +33,27 @@
setTimeout(() => {
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById('situationEchartBox'));
getSectionPerceivedList({}).then((res)=>{
console.log(res);
if ( res.code == 200 ) {
let data = res.data;
let texts = [];
let datas = [];
data.forEach(it => {
texts.push(it.sectionName);
datas.push(it.number);
});
chartsStatistics.yAxis[0].data = texts;
chartsStatistics.series[0].data = datas;
myChart.setOption(chartsStatistics);
}
});
});
});
},

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

@ -68,9 +68,7 @@ var options = {
yAxis: [{
type: 'value',
name: "",
max: 1000,
min:0,
splitNumber:5,
nameTextStyle: {
color: '#B6E6FF',
fontSize: 13,

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

@ -12,6 +12,8 @@
import WgtTitle from '../../../widgets/title'
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getSectionPerceivedNumber } from '../../../../../../../api/event/perceiveEvent';
export default {
name: 'RailWayDay',
components: {
@ -33,7 +35,23 @@ export default {
setTimeout(() => {
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById('railwayDay'));
getSectionPerceivedNumber().then((res)=>{
if ( res.code == 200 ) {
let data = res.data;
let texts = [];
let datas = [];
data.forEach(it => {
texts.push(it.sectionName);
datas.push(it.number);
});
chartsStatistics.xAxis.data = texts;
chartsStatistics.series[0].data = datas;
myChart.setOption(chartsStatistics);
}
})
});
});
},

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

@ -1,4 +1,4 @@
const echartsData = [
window.typeAnalysisData = [
{ value: 100, name: '行人' },
{ value: 90, name: '非机动车' },
{ value: 80, name: '拥堵' },
@ -6,7 +6,7 @@ const echartsData = [
{ value: 50, name: '抛洒物' },
{ value: 45, name: '烟火' }]
const colorList = [
window.colorList = [
"#019AFF",
"#3CC3F0",
"#51D5AD",
@ -14,14 +14,14 @@ const colorList = [
"#F6A73C",
"#7390FD",]
const colorList1 = [
window.colorList1 = [
"#61D8FF",
"#FFB905",
"#6AE0BC",]
let count = 0;
window.count = 0;
echartsData.forEach((it)=>{
typeAnalysisData.forEach((it)=>{
count += it.value;
})
@ -30,9 +30,9 @@ var options = {
color: colorList,
legend: {
orient: 'vertical',
top: "center",
top: "10",
icon: "circle",
right: 30,
right: 40,
itemGap: 16,
itemWidth: 8,
itemHeight: 8,
@ -54,11 +54,11 @@ var options = {
}
},
formatter: (params) => {
let obj = echartsData.filter(it=>{ return it.name == params})
let obj = typeAnalysisData.filter(it=>{ return it.name == params})
console.log(obj);
return `{ast|${obj[0].name}} {bst|${Math.round(obj[0].value/count* 100) }%}`
},
data: echartsData?.map(x => x.name),
data: typeAnalysisData?.map(x => x.name),
},
tooltip: {
trigger: 'item',
@ -96,7 +96,7 @@ var options = {
length: 10,
length2: 30,
},
data: echartsData.map((item, index) => {
data: typeAnalysisData.map((item, index) => {
return {
...item,
label: {
@ -139,7 +139,7 @@ var options = {
length: 10,
length2: 30,
},
data: echartsData.map((item, index) => {
data: typeAnalysisData.map((item, index) => {
return {
...item,
label: {

101
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/index.vue

@ -12,6 +12,7 @@
import WgtTitle from '../../../widgets/title'
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import { getWarningTypeDay } from '../../../../../../../api/event/perceiveEvent';
const drawRoundRect = ( ctx, x, y, width, height, radius ,gr) => {
@ -52,9 +53,95 @@
setTimeout(() => {
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById('typeAnalysis'));
myChart.setOption(chartsStatistics);
getWarningTypeDay().then(res=>{
console.log(res);
if ( res.code == 200 ) {
let data = res.data;
console.log("===================",data);
typeAnalysisData = [];
for (var i = 0;i < data.length;i++){
var it = data[i];
if ( it.warningType == 1) {
typeAnalysisData.push({
name:'交通拥堵',
value:it.number
});
}
if ( it.warningType == 2) {
typeAnalysisData.push({
name:'行人',
value:it.number
});
}
if ( it.warningType == 3) {
typeAnalysisData.push({
name:'非机动车',
value:it.number
});
}
if ( it.warningType == 4) {
typeAnalysisData.push({
name:'停车',
value:it.number
});
}
if ( it.warningType == 5) {
typeAnalysisData.push({
name:'倒车/逆行',
value:it.number
});
}
if ( it.warningType == 6) {
typeAnalysisData.push({
name:'烟火',
value:it.number
});
}
if ( it.warningType == 7) {
typeAnalysisData.push({
name:'撒落物',
value:it.number
});
}
if ( it.warningType == 8) {
typeAnalysisData.push({
name:'异常天气',
value:it.number
});
}
if ( it.warningType == 9) {
typeAnalysisData.push({
name:'护栏碰撞',
value:it.number
});
}
drawRoundRect(context, 260, 8 + i * 28, 120, 24, 12,gr)
}
chartsStatistics.legend.data = typeAnalysisData?.map(x => x.name);
chartsStatistics.series[0].data = typeAnalysisData.map((item, index) => {
return {
...item,
label: {
color: colorList[index]
}
}
})
chartsStatistics.series[1].data = typeAnalysisData.map((item, index) => {
return {
...item,
label: {
color: colorList[index]
}
}
})
}
myChart.setOption(chartsStatistics);
})
const domMap = document.getElementById("typeAnalysis");
let parentDiv = domMap.firstChild;
@ -75,12 +162,12 @@
context.lineWidth = 1; // 线
//
drawRoundRect(context, 260, 8, 120, 24, 12,gr)
drawRoundRect(context, 260, 36, 120, 24, 12,gr)
drawRoundRect(context, 260, 64, 120, 24, 12,gr)
drawRoundRect(context, 260, 92, 120, 24, 12,gr)
drawRoundRect(context, 260, 120, 120, 24, 12,gr)
drawRoundRect(context, 260, 148, 120, 24, 12,gr)
// drawRoundRect(context, 260, 36, 120, 24, 12,gr)
// drawRoundRect(context, 260, 64, 120, 24, 12,gr)
// drawRoundRect(context, 260, 92, 120, 24, 12,gr)
// drawRoundRect(context, 260, 120, 120, 24, 12,gr)
// drawRoundRect(context, 260, 148, 120, 24, 12,gr)
});
});
},

19
ruoyi-ui/src/views/JiHeExpressway/scss/el-reset.scss

@ -1,3 +1,10 @@
.loading-message {
background-color: #265a70;
border: 0;
> i {
margin-right: 9px;
}
}
div.el-popper {
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
color: #fff;
@ -475,3 +482,15 @@ body {
}
}
}
div.el-popper.global-input-search-popover {
background: #064258;
.footer {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 9px;
margin-top: 15px;
}
}

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

@ -71,3 +71,113 @@ export const CameraControlTypeEnum = {
text: "枪机",
},
};
export const EventTopics = {
交通事故: 1,
车辆故障: 2,
交通管制: 3,
交通拥堵: 4,
非法上路: 5,
路障清除: 6,
施工建设: 7,
服务区异常: 8,
设施设备隐患: 9,
异常天气: 10,
其他事件: 11,
};
// 事件类型 eventType
export const EventType = {
0: "待确认",
1: "处理中",
2: "已完成",
};
// 信息来源 warningSource
export const InfoWarningSource = {
1: {
text: "视频AI",
},
2: {
text: "雷达识别",
},
3: {
text: "锥桶",
},
4: {
text: "护栏碰撞",
},
5: {
text: "扫码报警",
},
6: {
text: "非机预警",
},
};
// 事件主类 warningType
export const WarningType = {
1: "交通拥堵",
2: "行人",
3: "非机动车",
4: "停车",
5: "倒车/逆行",
6: "烟火",
7: "撒落物",
8: "异常天气",
9: "护栏碰撞",
};
// 事件主类的子类(上方) warningSubclass
export const WarningSubclass = {
1: {
"1-1": "拥堵",
"1-2": "缓行",
},
2: {
"2-1": "普通行人",
"2-2": "工作人员",
},
3: {
"3-1": "摩托车",
"3-2": "自行车",
"3-3": "三轮车",
},
4: {
"4-1": "非工程车",
"4-2": "工程车",
"4-3": "主路有车",
"4-4": "匝道有车",
"4-5": "车辆故障",
"4-6": "交通事故",
"4-7": "应急车道被占用",
"4-8": "车离开应急车道",
"4-9": "其他",
},
5: {
"5-1": "倒车_逆行",
},
6: {
"6-1": "烟火",
},
7: {
"7-1": "撒落物",
},
8: {
"8-1": "雨",
"8-2": "冰雹",
"8-3": "风",
"8-4": "雾",
"8-5": "高温",
"8-6": "积水",
"8-7": "路面湿滑",
"8-8": "路面结冰",
"8-9": "道路能见度低",
"8-10": "道路团雾",
},
9: {
"9-1": "只碰撞不倾斜",
"9-2": "只倾斜无碰撞",
"9-3": "碰撞后倾斜",
},
};

Loading…
Cancel
Save