Browse Source

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

wangqin
qingzhengli 9 months ago
parent
commit
fa7409fd17
  1. 29
      ruoyi-ui/src/assets/iconfont/demo_index.html
  2. 10
      ruoyi-ui/src/assets/iconfont/iconfont.css
  3. 2
      ruoyi-ui/src/assets/iconfont/iconfont.js
  4. 7
      ruoyi-ui/src/assets/iconfont/iconfont.json
  5. BIN
      ruoyi-ui/src/assets/iconfont/iconfont.ttf
  6. BIN
      ruoyi-ui/src/assets/iconfont/iconfont.woff
  7. BIN
      ruoyi-ui/src/assets/iconfont/iconfont.woff2
  8. 8
      ruoyi-ui/src/assets/jihe/images/button/btnClose.svg
  9. 3
      ruoyi-ui/src/store/modules/menu.js
  10. 2
      ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/UserArea.vue
  11. 5
      ruoyi-ui/src/views/JiHeExpressway/components/InputSearch/index.vue
  12. 14
      ruoyi-ui/src/views/JiHeExpressway/components/RecentPages/index.vue
  13. 478
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/eventPlanDialog/index.vue
  14. 42
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue
  15. 554
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/index.vue
  16. 305
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/addAndEditDialog/index.vue
  17. 54
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/formTable/index.vue
  18. 3
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/assets/charts.js
  19. 30
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/index.vue
  20. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/service/board/index.vue
  21. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/index.vue
  22. 13
      ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsMonth/index.vue
  23. 468
      ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/topComponent/index.vue
  24. 9
      ruoyi-ui/src/views/JiHeExpressway/pages/service/sensitive/index.vue

29
ruoyi-ui/src/assets/iconfont/demo_index.html

@ -54,6 +54,12 @@
<div class="content unicode" style="display: block;">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe60d;</span>
<div class="name">关闭</div>
<div class="code-name">&amp;#xe60d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe601;</span>
<div class="name">卡片未激活</div>
@ -102,9 +108,9 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1710497244093') format('woff2'),
url('iconfont.woff?t=1710497244093') format('woff'),
url('iconfont.ttf?t=1710497244093') format('truetype');
src: url('iconfont.woff2?t=1710745723035') format('woff2'),
url('iconfont.woff?t=1710745723035') format('woff'),
url('iconfont.ttf?t=1710745723035') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@ -130,6 +136,15 @@
<div class="content font-class">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-guanbi"></span>
<div class="name">
关闭
</div>
<div class="code-name">.icon-guanbi
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-menu"></span>
<div class="name">
@ -202,6 +217,14 @@
<div class="content symbol">
<ul class="icon_lists dib-box">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-guanbi"></use>
</svg>
<div class="name">关闭</div>
<div class="code-name">#icon-guanbi</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-menu"></use>

10
ruoyi-ui/src/assets/iconfont/iconfont.css

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 4466169 */
src: url('iconfont.woff2?t=1710497244093') format('woff2'),
url('iconfont.woff?t=1710497244093') format('woff'),
url('iconfont.ttf?t=1710497244093') format('truetype');
src: url('iconfont.woff2?t=1710745723035') format('woff2'),
url('iconfont.woff?t=1710745723035') format('woff'),
url('iconfont.ttf?t=1710745723035') format('truetype');
}
.iconfont {
@ -13,6 +13,10 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-guanbi:before {
content: "\e60d";
}
.icon-menu:before {
content: "\e601";
}

2
ruoyi-ui/src/assets/iconfont/iconfont.js

@ -1 +1 @@
window._iconfont_svg_string_4466169='<svg><symbol id="icon-menu" viewBox="0 0 1024 1024"><path d="M512 747.52c-10.24 0-20.48-5.12-30.72-10.24l-414.72-256C51.2 476.16 40.96 460.8 40.96 445.44s10.24-30.72 25.6-40.96l414.72-256c15.36-10.24 40.96-10.24 56.32 0l414.72 256c15.36 10.24 25.6 25.6 25.6 40.96s-5.12 30.72-20.48 40.96l-414.72 256c-10.24 5.12-20.48 5.12-30.72 5.12zM117.76 445.44l394.24 240.64 394.24-240.64L512 204.8 117.76 445.44z m-20.48-10.24z" ></path><path d="M512 936.96c-15.36 0-30.72-5.12-46.08-15.36l-378.88-230.4c-15.36-10.24-20.48-25.6-10.24-40.96s25.6-20.48 40.96-10.24L496.64 870.4c10.24 5.12 20.48 5.12 30.72 0l378.88-230.4c15.36-10.24 35.84-5.12 40.96 10.24s5.12 35.84-10.24 40.96L558.08 921.6c-15.36 10.24-30.72 15.36-46.08 15.36z" ></path></symbol><symbol id="icon-menuactive" viewBox="0 0 1024 1024"><path d="M51.2 404.48c-10.24-5.12-10.24-15.36 0-25.6L501.76 102.4h20.48L972.8 378.88c10.24 5.12 10.24 20.48 0 25.6l-450.56 276.48c-5.12 5.12-15.36 5.12-20.48 0L51.2 404.48z" fill="#2c2c2c" ></path><path d="M512 906.24c-20.48 0-40.96-5.12-56.32-15.36l-378.88-230.4c-25.6-15.36-30.72-46.08-20.48-71.68 15.36-25.6 46.08-30.72 71.68-15.36l378.88 230.4h10.24l378.88-230.4c25.6-15.36 56.32-5.12 71.68 15.36 15.36 25.6 5.12 56.32-15.36 71.68l-378.88 230.4c-20.48 10.24-40.96 15.36-61.44 15.36z" fill="#2c2c2c" ></path></symbol><symbol id="icon-left" viewBox="0 0 1024 1024"><path d="M268.9 488.3L681.6 75.6C688.2 69 697.3 65 707.4 65c20.2 0 36.5 16.3 36.5 36.5 0 10.1-4.1 19.2-10.7 25.8l-391 391 378.5 378.5c6 6.2 9.7 14.7 9.7 24.1 0 19.2-15.5 34.7-34.7 34.7-9.4 0-17.9-3.7-24.1-9.7L279.2 553.4c-4.7-4.8-8.1-11.1-9.3-18 0.7 4.9-0.3 5.5-1 4.4-6.6-6.6-10.7-15.7-10.7-25.8 0.1-10 4.1-19.1 10.7-25.7z m0 0" ></path></symbol><symbol id="icon-right" viewBox="0 0 1024 1024"><path d="M755.1 535.7L342.4 948.4C335.8 955 326.70000001 959 316.60000001 959c-20.2 0-36.5-16.3-36.50000001-36.5 0-10.1 4.1-19.2 10.7-25.8l391-391-378.49999999-378.5c-6-6.2-9.7-14.7-9.70000001-24.1 0-19.2 15.5-34.7 34.7-34.7 9.4 0 17.9 3.7 24.1 9.7L744.8 470.6c4.7 4.8 8.1 11.1 9.30000001 18-0.7-4.9 0.3-5.5 0.99999999-4.4 6.6 6.6 10.69999999 15.7 10.7 25.8-0.1 10-4.1 19.1-10.7 25.7z m0 0" ></path></symbol><symbol id="icon-recent" viewBox="0 0 1024 1024"><path d="M504 1024C225.6 1024 0 798.4 0 520S225.6 16 504 16s504 225.6 504 504-225.6 504-504 504z m0-939.2C264 84.8 68.8 280 68.8 520c0 240.8 195.2 436 436 436s436-195.2 436-436c-0.8-240-196-435.2-436.8-435.2z" ></path><path d="M452 572.8V221.6h71.2v280h237.6v71.2H452z" ></path></symbol></svg>',function(n){var t=(t=document.getElementsByTagName("script"))[t.length-1],e=t.getAttribute("data-injectcss"),t=t.getAttribute("data-disable-injectsvg");if(!t){var c,o,i,l,d,s=function(t,e){e.parentNode.insertBefore(t,e)};if(e&&!n.__iconfont__svg__cssinject__){n.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(t){console&&console.log(t)}}c=function(){var t,e=document.createElement("div");e.innerHTML=n._iconfont_svg_string_4466169,(e=e.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",e=e,(t=document.body).firstChild?s(e,t.firstChild):t.appendChild(e))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),c()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=c,l=n.document,d=!1,m(),l.onreadystatechange=function(){"complete"==l.readyState&&(l.onreadystatechange=null,a())})}function a(){d||(d=!0,i())}function m(){try{l.documentElement.doScroll("left")}catch(t){return void setTimeout(m,50)}a()}}(window);
window._iconfont_svg_string_4466169='<svg><symbol id="icon-guanbi" viewBox="0 0 1024 1024"><path d="M512 0.006C229.233 0.006 0.006 229.233 0.006 512S229.233 1023.993 512 1023.993 1023.994 794.767 1023.994 512 794.767 0.006 512 0.006z m0 962.549C263.563 962.555 61.445 760.437 61.445 512S263.563 61.445 512 61.445 962.555 263.563 962.555 512 760.437 962.555 512 962.555z" fill="#040000" ></path><path d="M707.498 273.063L512 468.561 316.502 273.063l-43.449 43.439L468.551 512 273.053 707.497l43.449 43.45L512 555.449l195.498 195.498 43.449-43.45L555.449 512l195.498-195.498z" fill="#040000" ></path></symbol><symbol id="icon-menu" viewBox="0 0 1024 1024"><path d="M512 747.52c-10.24 0-20.48-5.12-30.72-10.24l-414.72-256C51.2 476.16 40.96 460.8 40.96 445.44s10.24-30.72 25.6-40.96l414.72-256c15.36-10.24 40.96-10.24 56.32 0l414.72 256c15.36 10.24 25.6 25.6 25.6 40.96s-5.12 30.72-20.48 40.96l-414.72 256c-10.24 5.12-20.48 5.12-30.72 5.12zM117.76 445.44l394.24 240.64 394.24-240.64L512 204.8 117.76 445.44z m-20.48-10.24z" ></path><path d="M512 936.96c-15.36 0-30.72-5.12-46.08-15.36l-378.88-230.4c-15.36-10.24-20.48-25.6-10.24-40.96s25.6-20.48 40.96-10.24L496.64 870.4c10.24 5.12 20.48 5.12 30.72 0l378.88-230.4c15.36-10.24 35.84-5.12 40.96 10.24s5.12 35.84-10.24 40.96L558.08 921.6c-15.36 10.24-30.72 15.36-46.08 15.36z" ></path></symbol><symbol id="icon-menuactive" viewBox="0 0 1024 1024"><path d="M51.2 404.48c-10.24-5.12-10.24-15.36 0-25.6L501.76 102.4h20.48L972.8 378.88c10.24 5.12 10.24 20.48 0 25.6l-450.56 276.48c-5.12 5.12-15.36 5.12-20.48 0L51.2 404.48z" fill="#2c2c2c" ></path><path d="M512 906.24c-20.48 0-40.96-5.12-56.32-15.36l-378.88-230.4c-25.6-15.36-30.72-46.08-20.48-71.68 15.36-25.6 46.08-30.72 71.68-15.36l378.88 230.4h10.24l378.88-230.4c25.6-15.36 56.32-5.12 71.68 15.36 15.36 25.6 5.12 56.32-15.36 71.68l-378.88 230.4c-20.48 10.24-40.96 15.36-61.44 15.36z" fill="#2c2c2c" ></path></symbol><symbol id="icon-left" viewBox="0 0 1024 1024"><path d="M268.9 488.3L681.6 75.6C688.2 69 697.3 65 707.4 65c20.2 0 36.5 16.3 36.5 36.5 0 10.1-4.1 19.2-10.7 25.8l-391 391 378.5 378.5c6 6.2 9.7 14.7 9.7 24.1 0 19.2-15.5 34.7-34.7 34.7-9.4 0-17.9-3.7-24.1-9.7L279.2 553.4c-4.7-4.8-8.1-11.1-9.3-18 0.7 4.9-0.3 5.5-1 4.4-6.6-6.6-10.7-15.7-10.7-25.8 0.1-10 4.1-19.1 10.7-25.7z m0 0" ></path></symbol><symbol id="icon-right" viewBox="0 0 1024 1024"><path d="M755.1 535.7L342.4 948.4C335.8 955 326.70000001 959 316.60000001 959c-20.2 0-36.5-16.3-36.50000001-36.5 0-10.1 4.1-19.2 10.7-25.8l391-391-378.49999999-378.5c-6-6.2-9.7-14.7-9.70000001-24.1 0-19.2 15.5-34.7 34.7-34.7 9.4 0 17.9 3.7 24.1 9.7L744.8 470.6c4.7 4.8 8.1 11.1 9.30000001 18-0.7-4.9 0.3-5.5 0.99999999-4.4 6.6 6.6 10.69999999 15.7 10.7 25.8-0.1 10-4.1 19.1-10.7 25.7z m0 0" ></path></symbol><symbol id="icon-recent" viewBox="0 0 1024 1024"><path d="M504 1024C225.6 1024 0 798.4 0 520S225.6 16 504 16s504 225.6 504 504-225.6 504-504 504z m0-939.2C264 84.8 68.8 280 68.8 520c0 240.8 195.2 436 436 436s436-195.2 436-436c-0.8-240-196-435.2-436.8-435.2z" ></path><path d="M452 572.8V221.6h71.2v280h237.6v71.2H452z" ></path></symbol></svg>',function(n){var t=(t=document.getElementsByTagName("script"))[t.length-1],e=t.getAttribute("data-injectcss"),t=t.getAttribute("data-disable-injectsvg");if(!t){var c,i,o,l,a,d=function(t,e){e.parentNode.insertBefore(t,e)};if(e&&!n.__iconfont__svg__cssinject__){n.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(t){console&&console.log(t)}}c=function(){var t,e=document.createElement("div");e.innerHTML=n._iconfont_svg_string_4466169,(e=e.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",e=e,(t=document.body).firstChild?d(e,t.firstChild):t.appendChild(e))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),c()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(o=c,l=n.document,a=!1,m(),l.onreadystatechange=function(){"complete"==l.readyState&&(l.onreadystatechange=null,s())})}function s(){a||(a=!0,o())}function m(){try{l.documentElement.doScroll("left")}catch(t){return void setTimeout(m,50)}s()}}(window);

7
ruoyi-ui/src/assets/iconfont/iconfont.json

@ -5,6 +5,13 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "2718724",
"name": "关闭",
"font_class": "guanbi",
"unicode": "e60d",
"unicode_decimal": 58893
},
{
"icon_id": "39573034",
"name": "卡片未激活",

BIN
ruoyi-ui/src/assets/iconfont/iconfont.ttf

Binary file not shown.

BIN
ruoyi-ui/src/assets/iconfont/iconfont.woff

Binary file not shown.

BIN
ruoyi-ui/src/assets/iconfont/iconfont.woff2

Binary file not shown.

8
ruoyi-ui/src/assets/jihe/images/button/btnClose.svg

@ -1,8 +0,0 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Group 1142814278">
<g id="Group 1142814279">
<path id="Vector" d="M11 0C4.92105 0 0 4.92105 0 11C0 17.0789 4.92105 22 11 22C17.0789 22 22 17.0789 22 11V10.9889C21.9889 4.90992 17.0678 0 11 0Z" fill="#3DE8FF"/>
<path id="Vector_2" d="M16.1269 14.5627C16.5826 14.968 16.6293 15.6629 16.2204 16.1262C15.8114 16.5895 15.1104 16.6242 14.643 16.2188L14.5962 16.1725L11.0208 12.559L7.45712 16.0799C7.01312 16.52 6.28869 16.52 5.84469 16.0799C5.40068 15.6398 5.40068 14.9217 5.84469 14.4816L9.38504 10.9492L5.833 7.42835C5.389 6.98825 5.389 6.27018 5.833 5.83008C6.27701 5.38997 7.00144 5.38997 7.44544 5.83008L11.0208 9.51305L14.5846 5.98064C15.0403 5.57528 15.753 5.61003 16.1619 6.07329C16.5475 6.5134 16.5358 7.17355 16.1269 7.57891L12.5749 11.0882L16.1269 14.5627Z" fill="white"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 898 B

3
ruoyi-ui/src/store/modules/menu.js

@ -48,9 +48,8 @@ const state = {
const getters = {
isRecentOpen(state){
if (state.isRecentOpen === ""){
state.isRecentOpen = localStorage.getItem("isRecentOpen") || false;
state.isRecentOpen = JSON.parse(localStorage.getItem("isRecentOpen")) || false;
}
console.log(state.isRecentOpen);
return state.isRecentOpen;
}
}

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

@ -153,7 +153,7 @@ export default {
height: 16px;
justify-content: space-between;
align-items: center;
.menu_recent{
.menu_recent{ cursor: pointer;
.iconfont{
font-size: 16px;
}

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

@ -158,6 +158,11 @@ export default {
this.width = this.$refs.ReferenceInputRef.getBoundingClientRect().width;
},
handleResetForm() {
if(this.params && this.types == 'input'){
this.value = "";
return
}
// this.visible = true;
this.$refs.FormConfigRef?.reset();
this.$refs.FormConfigRef.$refs.ElFormRef.resetFields();

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

@ -9,9 +9,7 @@
<p class="btn_main" @click="onClickItem(item)" :key="item.path" :style="{width:item.title.length*14+'px'}">
{{item.title}}
</p>
<p class="btn_close" @click="onRemoveItem(item)">
<img src="@/assets/jihe/images/button/btnClose.svg" alt="">
</p>
<i class="btn_close iconfont icon-guanbi" @click="onRemoveItem(item)"></i>
</div>
</div>
</div>
@ -118,7 +116,9 @@ export default{
this.moveByLeft();
},
onRight(){
this.moveByRight();
if (this.widthTotal > this.widthBox) {
this.moveByRight();
}
},
moveByLeft(targetIndex){
// console.log("", this.startIndex, targetIndex);
@ -205,12 +205,12 @@ export default{
.list_box{ flex: 1; position: relative; width: 0; overflow: hidden; margin:0;
.list{ position: absolute; left: 0; top:0; display: flex; flex-direction: row; transition: all ease-in-out 0.5s;
.unit {
cursor: default;
position: relative;
height: 30px;
padding: 0 3px;
.btn_main {
cursor: pointer;
background-image: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
border:1px solid #009bcc;
border-radius: 4px;
@ -229,8 +229,8 @@ export default{
.btn_close {
position: absolute;
right: 6px;
top: 7px;
img{ width: 14px; height: 14px;}
top:8px;
font-size: 12px; color: #3de8ff;
}
}
}

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

@ -0,0 +1,478 @@
<template>
<Dialog v-model="modelVisible" :title="title">
<div class="EventAddPlanDialog">
<ElForm :model="formData" inline :rules="rules" ref="ruleForm">
<div class="first">
<el-radio-group v-model="planName">
<el-radio-button label="名称1"></el-radio-button>
<el-radio-button label="名称2"></el-radio-button>
</el-radio-group>
</div>
<div class="second">
<el-row>
<el-col :span="2">
<div class="text">联动设备:</div>
</el-col>
<el-col :span="22">
<FormTable ref="secondFormTable" :tableData="secondFormData"></FormTable>
</el-col>
</el-row>
</div>
<div class="third">
<el-row>
<el-col :span="2">
<div class="text">恢复操作:</div>
</el-col>
<el-col :span="22">
<FormTable ref="thirdFormTable" :tableData="thirdFormData"></FormTable>
</el-col>
</el-row>
</div>
</ElForm>
</div>
<template #footer>
<Button style="padding:0 24px;" @click.native="handleSubmit" :loading="submitting">强制恢复</Button>
<Button style="padding:0 24px;" @click.native="handleSubmit" :loading="submitting">确认</Button>
<Button style="background: #C9C9C9;padding:0 24px;"
@click.native="modelVisible = false, submitting = false">取消</Button>
</template>
</Dialog>
</template>
<script>
import Dialog from "@screen/components/Dialog/index";
import FormTable from '../../../plan/formTable/index.vue';
import Button from '@screen/components/Buttons/Button.vue';
import request from '@/utils/request';
import { Message } from "element-ui";
import { throttle } from "lodash"
export default {
name: 'eventPlanDialog',
components: {
Dialog,
Button,
FormTable
},
model: {
prop: 'visible',
event: 'close'
},
provide() {
return {
loadData: throttle(this.loadData, 1000)
}
},
props: {
visible: Boolean,
detail: {
type: Object,
default: () => { }
}
},
data() {
return {
title: '事件确认',
dialogType: 1,
planId: 0,
submitting: false,
formData: {
eventCategory: 1,
eventType: 1,
triggerMechanism: 1
},
secondFormData: [{
deviceType: 1,
searchRule: 1,
qbb: ''
}],
thirdFormData: [{
deviceType: 1,
searchRule: 1,
qbb: ''
}],
planName: '',
deviceData: [],
eventOptions: [
{
value: 1,
label: '异常天气'
},
{
value: 2,
label: '交通事故'
},
{
value: 3,
label: '非法上路'
},
{
value: 4,
label: '车辆故障'
},
{
value: 5,
label: '交通拥堵'
},
{
value: 6,
label: '交通管制'
},
{
value: 7,
label: '服务区异常'
},
{
value: 8,
label: '施工建设'
},
{
value: 9,
label: '路障清除'
}
],
mechanismOptions: [{
value: 1,
label: '雨'
},
{
value: 2,
label: '雪'
},
{
value: 3,
label: '雾'
},
{
value: 4,
label: '大风'
},
{
value: 5,
label: '低温寒潮'
},
{
value: 6,
label: '路面积雪'
},
{
value: 7,
label: '路面结冰'
},
{
value: 8,
label: '路面积水'
},
{
value: 9,
label: '其他'
}],
conditionOptions: [
// {
// value: 1,
// label: '(>)'
// },
{
value: 1,
label: '小于(<)'
},
],
rules: {
planName: [
{ required: true, message: '请输入预案名称', trigger: 'blur' },
],
eventType: [
{ required: true, message: '请选择事件类型', trigger: 'change' }
],
}
}
},
mounted() {
},
computed: {
modelVisible: {
get() {
if (this.visible) {
}
return this.visible;
},
set(val) {
this.$emit('close', val)
}
},
},
methods: {
initData(id = 1) {
request({
url: `/business/plans/list/${id}`,
method: "get",
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
let data = result.data;
let dcExecuteAction = result.data.dcExecuteAction;
this.planId = data.id;
this.formData = {
eventCategory: data.eventCategory,
planName: data.planName,
eventType: data.eventType,
triggerMechanism: data.triggerMechanism,
}
this.secondFormData = [];
this.thirdFormData = [];
dcExecuteAction.forEach(it => {
if (it.deviceList) {
it.deviceList = it.deviceList.split(',');
}
if (it.actionType == 1) {
this.secondFormData.push(it);
} else if (it.actionType == 2) {
this.thirdFormData.push(it);
}
})
}).catch((err) => {
console.log(err)
Message.error("查询事件预案列表失败", err);
})
},
async loadData() {
if (this.deviceData.length <= 0) {
let result = await request({
url: `business/device/query?deviceType=2`,
method: "get",
})
if (result.code != 200) return Message.error(result?.msg);
console.log('123');
this.deviceData = result.data;
// return result.data;
}
return this.deviceData;
},
changeEventType(value = 1) {
this.mechanismOptions = optionsMap[this.formData.eventCategory || 1][value];
},
changeRadio(value = 1) {
const optionsMap = {
1: [{
value: 1,
label: '异常天气'
},
{
value: 2,
label: '交通事故'
},
{
value: 3,
label: '非法上路'
},
{
value: 4,
label: '车辆故障'
},
{
value: 5,
label: '交通拥堵'
},
{
value: 6,
label: '交通管制'
},
{
value: 7,
label: '服务区异常'
},
{
value: 8,
label: '施工建设'
},
{
value: 9,
label: '路障清除'
}],
2: [{
value: 1,
label: '异常天气'
},
{
value: 2,
label: '拥堵'
},
{
value: 3,
label: '非机动车'
},
{
value: 4,
label: '行人'
},
{
value: 5,
label: '烟火'
},
{
value: 6,
label: '抛洒物'
},
{
value: 7,
label: '逆行'
},
]
}
this.eventOptions = optionsMap[value];
this.changeEventType();
},
handleChange() {
},
formatData(it, value = 1) {
let data = { ...it, actionType: value }
if (it.deviceList && typeof it.deviceList !== 'string' && it.deviceList.length > 0) {
data.deviceList = it.deviceList.join(',');
} else {
data.deviceList = '';
}
if (it.content) {
data.otherConfig = JSON.stringify({ content: it.content })
}
if (it.controlModel) {
let other = {
controlModel: it.controlModel,
state: it.state,
}
if (it.time && it?.time[0]) {
other = {
controlModel: it.controlModel,
state: it.state,
startTime: it.time[0],
endTime: it.time[1]
}
}
data.otherConfig = JSON.stringify(other)
}
if (it.gzms) {
data.otherConfig = JSON.stringify({
state: it.gzms,
operationDuration: it.operationDuration,
})
}
return data;
},
handleSubmit() {
this.$refs['ruleForm'].validate((valid) => {
if (valid) {
// this.submitting = false;
let secondFormTable = this.$refs['secondFormTable'].tableData || [];
let thirdFormTable = this.$refs['thirdFormTable'].tableData || [];
let dcArr = [];
secondFormTable.forEach(it => {
dcArr.push(this.formatData(it, 1));
})
thirdFormTable.forEach(it => {
dcArr.push(this.formatData(it, 2));
})
console.log({
...this.formData,
dcExecuteAction: dcArr
})
// return;
if (this.dialogType == 1) {//
request({
url: `/business/plans`,
method: "post",
data: {
...this.formData,
dcExecuteAction: dcArr
}
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
Message.success("提交成功");
this.modelVisible = false;
}).catch(() => {
Message.error("提交失败");
}).finally(() => {
this.submitting = false;
this.$emit('reInitData', true);
})
} else if (this.dialogType == 2) {//
request({
url: `/business/plans`,
method: "put",
data: {
...this.formData,
id: this.planId,
dcExecuteAction: dcArr
}
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
Message.success("提交成功");
this.modelVisible = false;
}).catch(() => {
Message.error("提交失败");
}).finally(() => {
this.submitting = false;
this.$emit('reInitData', true);
})
}
}
})
}
}
}
</script>
<style lang="scss" scoped>
.fade-enter-active,
.fade-leave-active {
transition: opacity .24s;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
}
.EventAddPlanDialog {
gap: 9px;
width: 1080px;
height: 310px;
display: flex;
flex-direction: column;
.first,
.second,
.third {
padding: 5px 10px 8px;
background-color: #296887;
margin-bottom: 15px;
.text {
margin-top: 12px;
}
}
.form {
flex: 1;
overflow-y: auto;
}
.footer {
display: flex;
justify-content: end;
gap: 15px;
}
}
</style>

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

@ -4,8 +4,10 @@
<Form :formList="formList" :dFormData="formData" label-width="100px" />
<div class="video-pic">
<Video style="height: 100%; width: 380px;" :showHeader="activeName != '-1'" :url="formData.videoList[0]" videoType="mp4"/>
<Video v-if="activeName != '-1'" style="height: 100%; width: 380px;" :url="formData.videoList[1]" videoType="mp4"/>
<Video style="height: 100%; width: 380px;" :showHeader="activeName != '-1'" :url="formData.videoList[0]"
videoType="mp4" />
<Video v-if="activeName != '-1'" style="height: 100%; width: 380px;" :url="formData.videoList[1]"
videoType="mp4" />
<Carousel v-else style="flex: 1" :pictures="formData.pictures" />
</div>
@ -14,11 +16,16 @@
<TimeLine2 v-if="activeName == '1' || activeName == '2'" :data="timeLine2List" style="flex: 1;" />
</div>
<!-- 确认弹窗 -->
<EventPlanDialog :visible="isShowDialog" @close="onCloseAddNew" />
<template #footer>
<Button style="padding: 0 24px;" @click.native="onDelete">误报</Button>
<Button :style="{ backgroundColor: '#C9C9C9', padding: '0 24px' }" @click.native="modelVisible = false">取消</Button>
<Button :style="{ backgroundColor: '#C9C9C9', padding: '0 24px' }"
@click.native="modelVisible = false">取消</Button>
<Button v-if="activeName == '-1' || activeName == '0'" style="padding: 0 24px;"
@click.native="modelVisible = false">确认</Button>
@click.native="onSubmit">确认</Button>
</template>
</Dialog>
</template>
@ -32,6 +39,7 @@ import { formList } from "./data"
// import { timeLine2List } from "@screen/pages/control/event/commandDispatch/Cards/DisposalProcess/data.js"
import Video from "@screen/components/Video";
import Carousel from "./Carousel/index.vue"
import EventPlanDialog from "./eventPlanDialog/index.vue"
import Button from '@screen/components/Buttons/Button.vue';
import request from "@/utils/request";
import { Message } from "element-ui";
@ -46,7 +54,8 @@ export default {
TimeLine2,
Video,
Carousel,
Button
Button,
EventPlanDialog
},
model: {
prop: 'visible',
@ -63,6 +72,7 @@ export default {
data() {
return {
formList,
isShowDialog: false,
timeLine1List: [{
time: "",
label: "",
@ -147,6 +157,9 @@ export default {
})
},
onCloseAddNew() {
this.isShowDialog = false;
},
onDelete() {
if (this.formData.id) {
this.$confirm('确定误报吗?', '提示', {
@ -171,6 +184,25 @@ export default {
}
},
onSubmit() {
this.isShowDialog = true;
let url = '/business/plans/list/warning/type'
let data = {}
if (this.activeName == '-1') {
url = '/business/plans/list/warning/type'
} else {
url = '/business/plans/list/event/type'
}
request({
url: url,
method: "post",
data: this.formData
}).then(result => {
if (result.code != 200) return Message.error(result?.msg);
console.log('result', result)
})
}
}
}

554
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/index.vue

@ -1,319 +1,309 @@
<template>
<div class='TrafficFlow'>
<section class="foot">
<div class="item keep-ratio" v-for="(item, index) in topDatas">
<div class="line">
</div>
<div class="item-title">
<span> {{ item.eventName }} <span class="num">{{ item.total }}</span></span>
</div>
<div class="item-body">
<div class="icon-left"
:style="{ backgroundImage: `url(${require(`@screen/images/layer/${active}/${item.eventName}.svg`)})`, '--bgColor': `rgba(0, 209, 255, 10%)` }">
</div>
<div class="text-right">
<div class="text">
已处理 <span class="num">{{ item.finished }}</span>
</div>
<div class="text">
处理中 <span class="num">{{ item.processing }}</span>
</div>
<div class="text">
待处理 <span class="num">{{ item.unconfirmed }}</span>
</div>
</div>
</div>
<div class="TrafficFlow">
<section class="foot">
<div class="item keep-ratio" v-for="(item, index) in topDatas">
<div class="line"></div>
<div class="item-title">
<span>
{{ item.eventName }} <span class="num">{{ item.total }}</span
></span
>
</div>
<div class="item-body">
<div
class="left"
:style="{
backgroundImage: `url(${require(`@screen/images/layer/${active}/${item.eventName}.svg`)})`,
'--bgColor': `rgba(0, 209, 255, 10%)`,
}"
></div>
<div class="text-right">
<div class="text">
已处理 <span class="num">{{ item.finished }}</span>
</div>
<div class="text">
处理中 <span class="num">{{ item.processing }}</span>
</div>
</section>
</div>
<div class="text">
待处理 <span class="num">{{ item.unconfirmed }}</span>
</div>
</div>
</div>
</div>
</section>
</div>
</template>
<script>
import { eventStatusNum } from "@/api/event/governanceAnalysis"
import { eventStatusNum } from "@/api/event/governanceAnalysis";
export default {
name: 'publicService',
components: {
},
data() {
return {
active: "事件专题",
activeName: "first",
topDatas: []
// topDatas: [{
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }
// ]
}
},
methods: {
getEventStatusNum() {
eventStatusNum().then(response => {
this.topDatas = response.data
})
},
changeTabs() {
}
name: "publicService",
components: {},
data() {
return {
active: "事件专题",
activeName: "first",
topDatas: [],
// topDatas: [{
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }, {
// text: "",
// textEnd: "",
// textNum: 9,
// icon: require("./assets/.png"),
// reviewed: 4,
// noReviewed: 5
// }
// ]
};
},
methods: {
getEventStatusNum() {
eventStatusNum().then((response) => {
this.topDatas = response.data;
});
},
mounted() {
this.getEventStatusNum()
},
}
changeTabs() {},
},
mounted() {
this.getEventStatusNum();
},
};
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
::v-deep .el-tabs__item {
display: inline-flex;
justify-content: center;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #FFFFFF;
min-width: 128px;
position: relative;
left: 10px;
display: inline-flex;
justify-content: center;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #ffffff;
min-width: 128px;
position: relative;
left: 10px;
}
::v-deep .el-tabs__active-bar {
min-width: 128px;
min-width: 128px;
}
::v-deep .el-tabs__nav-wrap::after {
background-color: #133242;
opacity: 0.1;
background-color: #133242;
opacity: 0.1;
}
.footTabs {
display: inline;
width: 99%;
display: inline;
width: 99%;
}
.TrafficFlow {
width: 100%;
height: 182px;
width: 100%;
height: 182px;
display: inline-flex;
position: relative;
z-index: 6;
color: white;
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 0%, #06425804 93%);
border-radius: 0px 0px 0px 0px;
.item:nth-child(11) .line {
display: none;
}
.foot {
display: inline-flex;
position: relative;
z-index: 6;
color: white;
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 0%, #06425804 93%);
border-radius: 0px 0px 0px 0px;
.item:nth-child(11) .line {
display: none;
}
.foot {
flex-direction: row;
width: 100%;
height: 100%;
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 40%, #064258 93%);
.item {
position: relative;
display: inline-flex;
width: calc(100% / 9);
height: 100%;
flex-direction: column;
justify-content: center;
align-items: center;
.item-title {
position: relative;
display: inline-flex;
width: 162px;
height: 35px;
flex-direction: row;
width: 100%;
height: 100%;
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 40%, #064258 93%);
.item {
position: relative;
display: inline-flex;
width: calc(100% / 9);
height: 100%;
flex-direction: column;
justify-content: center;
align-items: center;
.item-title {
position: relative;
display: inline-flex;
width: 162px;
height: 35px;
flex-direction: row;
justify-content: center;
align-items: center;
background: linear-gradient(180deg, rgba(3, 60, 82, 0) 0%, #033C52 100%);
border-radius: 4px 4px 4px 4px;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #FFFFFF;
span.num {
font-size: 22px;
font-family: PangMenZhengDao;
font-weight: 400;
color: #E2B066;
position: relative;
display: inline-flex;
top: 2px;
left: -2px;
}
}
.item-body {
position: relative;
display: inline-flex;
width: 162px;
// height: 100%;
flex-direction: row;
justify-content: center;
align-items: center;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #FFFFFF;
margin: 20px 0;
.icon-left {
display: flex;
align-items: center;
justify-content: center;
// position: absolute;
// transition: all .15s linear;
// top: 0;
// width: 100%;
width: 47px;
height: 47px;
margin-left: -8px;
margin-right: 10px;
background-repeat: no-repeat;
background-size: auto;
background-position: center;
transition: all .18s linear;
&::before {
content: "";
position: absolute;
width: 45px;
height: 45px;
border: 1px solid rgba(0, 209, 255, .5);
background-color: var(--bgColor);
border-radius: 50%;
z-index: -1;
}
}
.text-right {
display: inline-flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
.text {
margin-top: 7px;
// margin: 5px;
}
}
span.num {
font-size: 18px;
font-family: PangMenZhengDao;
font-weight: 400;
color: #E2B066;
}
}
justify-content: center;
align-items: center;
background: linear-gradient(
180deg,
rgba(3, 60, 82, 0) 0%,
#033c52 100%
);
border-radius: 4px 4px 4px 4px;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #ffffff;
span.num {
font-size: 22px;
font-family: PangMenZhengDao;
font-weight: 400;
color: #e2b066;
position: relative;
display: inline-flex;
top: 2px;
left: -2px;
}
}
.line {
.item-body {
position: relative;
display: inline-flex;
width: 162px;
// height: 100%;
flex-direction: row;
justify-content: center;
align-items: center;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #ffffff;
margin: 20px 0;
.left {
display: flex;
align-items: center;
justify-content: center;
// position: absolute;
// transition: all .15s linear;
// top: 0;
// width: 100%;
width: 47px;
height: 47px;
margin-left: -8px;
margin-right: 10px;
background-repeat: no-repeat;
background-size: auto;
background-position: center;
transition: all 0.18s linear;
&::before {
content: "";
position: absolute;
width: 2px;
height: 120px;
top: 25px;
left: 180px;
background: url("~@screen/images/divide.svg");
background-repeat: no-repeat;
background-size: 100% 100%;
width: 45px;
height: 45px;
border: 1px solid rgba(0, 209, 255, 0.5);
background-color: var(--bgColor);
border-radius: 50%;
z-index: -1;
}
}
.text-right {
display: inline-flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
.text {
margin-top: 7px;
// margin: 5px;
}
}
// .item::after {
// content: "";
// position: absolute;
// display: inline-flex;
// top: 20px;
// right: 0px;
// width: 1px;
// height: 116px;
// background: linear-gradient(90deg, rgba(8, 135, 182, 0.2), rgba(0, 100, 137, 1), rgba(3, 60, 81, 0.2));
// opacity: 1;
// flex-direction: row;
// justify-content: center;
// align-items: center;
// }
span.num {
font-size: 18px;
font-family: PangMenZhengDao;
font-weight: 400;
color: #e2b066;
}
}
}
.line {
position: absolute;
width: 2px;
height: 120px;
top: 25px;
left: 180px;
background: url("~@screen/images/divide.svg");
background-repeat: no-repeat;
background-size: 100% 100%;
}
// .item::after {
// content: "";
// position: absolute;
// display: inline-flex;
// top: 20px;
// right: 0px;
// width: 1px;
// height: 116px;
// background: linear-gradient(90deg, rgba(8, 135, 182, 0.2), rgba(0, 100, 137, 1), rgba(3, 60, 81, 0.2));
// opacity: 1;
// flex-direction: row;
// justify-content: center;
// align-items: center;
// }
}
}
</style>

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

@ -20,18 +20,14 @@
</el-select>
</el-form-item>
<el-form-item
v-if="(formData.eventCategory == 1 && formData.eventType !== 8) || formData.eventCategory == 2"
label="触发类型:" prop="triggerMechanism">
<el-form-item label="触发类型:" prop="triggerMechanism">
<el-select
v-if="(formData.eventCategory == 1 && formData.eventType !== 6) || formData.eventCategory == 2"
v-model="formData.triggerMechanism" placeholder="请选择触发类型">
<el-select v-model="formData.triggerMechanism" placeholder="请选择触发类型">
<el-option v-for="item in mechanismOptions" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-if="formData.eventCategory == 1 && formData.eventType == 6"
<!-- <el-select v-if="formData.eventCategory == 1 && formData.eventType == 6"
v-model="formData.triggerMechanism" placeholder="请选择触发类型">
<el-option-group label="主线">
<el-option label="主线封闭" value="1"></el-option>
@ -49,7 +45,7 @@
<el-option label="服务区封闭" value="7"></el-option>
<el-option label="服务区限行" value="8"></el-option>
</el-option-group>
</el-select>
</el-select> -->
</el-form-item>
</div>
@ -98,162 +94,253 @@ const optionsMap = {
1: {
1: [
{
value: 1,
label: '雨'
value: "1-1",
label: "追尾",
},
{
value: 2,
label: '雪'
value: "1-2",
label: "侧翻",
},
{
value: 3,
label: '雾'
value: "1-3",
label: "撞护栏",
},
{
value: 4,
label: '大风'
value: "1-4",
label: "自然",
},
{
value: 5,
label: '低温寒潮'
value: "1-5",
label: "其他事故",
},
],
2: [
{
value: 6,
label: '路面积雪'
value: 1,
label: '高速主线'
},
{
value: 7,
label: '路面结冰'
value: 2,
label: '服务区'
},
{
value: 8,
label: '路面积水'
value: 3,
label: '立交桥'
},
{
value: 9,
label: '其他'
value: 4,
label: '收费站'
}
],
2: [
3: [
{
value: 1,
label: '侧翻'
label: '主线关闭'
},
{
value: 2,
label: '撞障碍物'
label: '主线限行'
},
{
value: 3,
label: '货物洒落'
value: 6,
label: '收费站关闭'
},
{
value: 4,
label: '撞护栏'
value: 7,
label: '收费站限行'
},
{
value: 5,
label: '自燃'
value: 10,
label: '匝道立交关闭'
},
{
value: 6,
label: '追尾'
value: 12,
label: '匝道立交限行'
},
{
value: 14,
label: '服务区关闭'
}
],
3: [
4: [
{
value: 1,
value: '4-1',
label: '道路拥堵'
},
{
value: '4-2',
label: '立交拥堵'
},
{
value: '4-3',
label: '收费站拥堵'
},
{
value: '4-4',
label: '收费站服务区拥堵'
}
],
5: [
{
value: '5-1',
label: '行人'
},
{
value: 2,
value: '5-2',
label: '非机动车'
},
{
value: 3,
value: '5-3',
label: '摩托车'
},
{
value: 4,
value: '5-4',
label: '其他'
}
],
4: [
6: [
{
value: 1,
label: '高速主线'
value: '6-1',
label: '烟雾'
},
{
value: 2,
label: '服务区'
value: '6-2',
label: '倒伏树木'
},
{
value: 3,
label: '立交桥'
value: '6-3',
label: '撒落物'
},
{
value: 4,
label: '收费站'
value: '6-4',
label: '动物'
},
{
value: '6-5',
label: '其他'
}
],
5: [
7: [
{
value: 1,
label: '道路拥堵'
label: '道路养护施工'
},
{
value: 2,
label: '立交拥堵'
label: '收费站养护施工'
},
{
value: 3,
label: '收费站拥堵'
label: '服务区养护施工'
},
{
value: 4,
label: '收费站服务区拥堵'
label: '枢纽立交匝道养护施工'
},
{
value: 5,
label: '地方道路养护施工'
},
{
value: 6,
label: '道路工程建设施工'
},
{
value: 7,
label: '收费站工程建设施工'
},
{
value: 8,
label: '服务区工程建设施工'
},
{
value: 9,
label: '枢纽立交匝道工程建设施工'
},
{
value: 10,
label: '地方道路工程建设施工'
}
],
6: [
],
7: [
8: [
{
value: 1,
value: '8-1',
label: '封闭、暂停营业'
},
{
value: 2,
value: '8-2',
label: '重要设施停用'
},
{
value: 3,
label: '其他异常'
}
value: '8-3',
label: '服务区其他异常'
},
],
8: [],
9: [
{
value: 1,
label: '烟雾'
label: '摄像机'
},
{
value: 2,
label: '倒伏树木'
label: '护栏'
},
{
value: 3,
label: '洒落物'
label: '隔离栅'
},
{
value: 4,
label: '动物'
label: '情报板'
},
{
value: 5,
label: '防炫板'
},
{
value: 6,
label: '其他'
}
]
],
10: [{
value: '10-1',
label: '雨'
},
{
value: '10-2',
label: '雪'
},
{
value: '10-3',
label: '雾'
},
{
value: '10-4',
label: '大风'
},
{
value: '10-5',
label: '低温寒潮'
}, {
value: '10-6',
label: '路面积雪'
},
{
value: '10-7',
label: '路面结冰'
},
{
value: '10-8',
label: '路面积水'
},
{
value: '10-9',
label: '其他'
}],
11: [{
value: 1,
label: '其他事件'
}]
},
2: {
1: [{
@ -302,7 +389,7 @@ export default {
formData: {
eventCategory: 1,
eventType: 1,
triggerMechanism: 1
triggerMechanism: '1-1'
},
secondFormData: [{
deviceType: 1,
@ -318,87 +405,69 @@ export default {
eventOptions: [
{
value: 1,
label: '异常天气'
label: '交通事故'
},
{
value: 2,
label: '交通事故'
label: '车辆故障'
},
{
value: 3,
label: '非法上路'
label: '交通管制'
},
{
value: 4,
label: '车辆故障'
label: '交通拥堵'
},
{
value: 5,
label: '交通拥堵'
label: '非法上路'
},
{
value: 6,
label: '交通管制'
label: '路障清除'
},
{
value: 7,
label: '服务区异常'
label: '施工建设'
},
{
value: 8,
label: '施工建设'
label: '服务区异常'
},
{
value: 9,
label: '路障清除'
label: '设施设备隐患'
},
{
value: 10,
label: '异常天气'
},
{
value: 11,
label: '其他事件'
}
],
mechanismOptions: [{
value: 1,
label: '雨'
},
{
value: 2,
label: '雪'
},
{
value: 3,
label: '雾'
},
{
value: 4,
label: '大风'
},
{
value: 5,
label: '低温寒潮'
value: "1-1",
label: "追尾",
},
{
value: 6,
label: '路面积雪'
value: "1-2",
label: "侧翻",
},
{
value: 7,
label: '路面结冰'
value: "1-3",
label: "撞护栏",
},
{
value: 8,
label: '路面积水'
value: "1-4",
label: "自然",
},
{
value: 9,
label: '其他'
value: "1-5",
label: "其他事故",
}],
conditionOptions: [
// {
// value: 1,
// label: '(>)'
// },
{
value: 1,
label: '小于(<)'
},
],
rules: {
planName: [
{ required: true, message: '请输入预案名称', trigger: 'blur' },
@ -428,7 +497,7 @@ export default {
this.formData = {
eventCategory: 1,
eventType: 1,
triggerMechanism: 1
triggerMechanism: '1-1'
}
this.secondFormData = [{
deviceType: 1,

54
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/formTable/index.vue

@ -136,19 +136,59 @@ export default {
deviceOptions: [
{
value: 1,
label: '可变信息标志'
label: '摄像机'
},
{
value: 2,
label: '疲劳唤醒'
label: '可变信息标志'
},
{
value: 3,
label: '行车诱导'
label: '气象监测器'
},
{
value: 4,
label: '路段广播'
label: '出口诱导灯'
},
{
value: 5,
label: '路段语音广播'
},
{
value: 6,
label: '护栏碰撞'
},
{
value: 7,
label: '毫米波雷达'
},
{
value: 8,
label: '合流区预警'
},
{
value: 9,
label: '智慧锥桶'
},
{
value: 10,
label: '激光疲劳唤醒'
},
{
value: 11,
label: '类交通量调查站'
},
{
value: 12,
label: '行车诱导'
},
{
value: 13,
label: '智能设备箱'
},
{
value: 14,
label: '光线在线监测'
}
],
zyOptions: [
@ -162,6 +202,10 @@ export default {
},
{
value: 3,
label: '事发下游最近'
},
{
value: 4,
label: '最近公里数'
},
],
@ -231,7 +275,7 @@ export default {
}
},
async created() {
let loadData = await this.loadData();
let loadData = await this.loadData();
// console.log('aa',loadData)
this.sbOptions = loadData;
},

3
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/assets/charts.js

@ -3,6 +3,9 @@ import * as echarts from "echarts";
let options = {
tooltip: {
trigger: "axis",
valueFormatter: (value) => {
return value + "%";
},
// backgroundColor: "rgba(17,95,182,0.5)",
// textStyle: {
// color: "#fff",

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

@ -65,20 +65,26 @@
prop="deviceName"
label="设备名称"
></el-table-column>
<el-table-column prop="deviceNo" label="设备桩号" width="">
<el-table-column prop="deviceNo" label="设备桩号">
</el-table-column>
<el-table-column
prop="direction"
label="方向"
class-name="showClass"
width=""
>
<template slot-scope="scope">
<span>{{
scope.row.direction == "1"
? "上行"
: scope.row.direction == "2"
? "中间"
: "下行"
}}</span>
</template>
</el-table-column>
<el-table-column prop="deviceIp" label="设备IP" width="">
</el-table-column>
<el-table-column prop="production" label="厂家" width="">
</el-table-column>
<el-table-column prop="type" label="型号" width="">
<el-table-column prop="deviceIp" label="设备IP"> </el-table-column>
<el-table-column prop="production" label="厂家"> </el-table-column>
<el-table-column prop="type" label="型号">
<template slot-scope="scope">
<div v-if="scope.row.type == '1-1'">高清网络枪型固定摄像机</div>
<div v-if="scope.row.type == '1-2'">高清网络球形摄像机</div>
@ -99,11 +105,9 @@
<div v-if="scope.row.type == '13'">智能设备箱</div>
</template>
</el-table-column>
<el-table-column prop="network" label="网段" width="">
</el-table-column>
<el-table-column prop="time" label="监测时间" width="">
</el-table-column>
<el-table-column prop="deviceStatus" label="设备状态" width="">
<!-- <el-table-column prop="network" label="网段"> </el-table-column> -->
<el-table-column prop="time" label="监测时间"> </el-table-column>
<el-table-column prop="deviceStatus" label="设备状态">
<template slot-scope="scope">
<div v-if="scope.row.deviceStatus == 1">在线</div>
<div v-if="scope.row.deviceStatus == 0" style="color: #bbb">
@ -422,7 +426,7 @@ export default {
.floatEmpty {
position: absolute;
z-index: 100;
background: rgba($color: #000000, $alpha: 0.2);
// background: rgba($color: #000000, $alpha: 0.2);
left: 0;
top: 0;
right: 0;

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

@ -139,7 +139,7 @@
class="btnInfoBoard"
type="publish"
@click="____onPublish"
:disabled="selectedBdMsg.length <= 0"
:disabled="selectedBdMsg.length <= 0 || selectedDevices.length <=0"
>发布信息</el-button
>
</div>

6
ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/index.vue

@ -11,14 +11,14 @@
style="width: 140px"
placeholder="请选择"
/>
<el-quarter-picker
<!-- <el-quarter-picker
size="mini"
class="selectRoad"
style="width: 180px"
v-if="year == 'quarter'"
v-model="quarter"
aria-placeholder="请选季度"
/>
/> -->
<el-button
type="primary"
@ -97,7 +97,7 @@ export default {
margin-bottom: 10px;
left: 20px;
top: 2px;
z-index: 0;
z-index: 9;
div {
white-space: nowrap;

13
ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsMonth/index.vue

@ -1,25 +1,16 @@
<template>
<div class="congestion">
<WgtTitle :title="'月发布渠道趋势分析'"></WgtTitle>
<WgtTitle title="月发布渠道趋势分析"></WgtTitle>
<div class="board">
<div class="searchPanel_1">
<el-date-picker
size="mini"
v-if="year != 'quarter'"
class="selectRoad"
v-model="dateTime"
style="width: 140px"
type="month"
placeholder="请选择"
/>
<el-quarter-picker
size="mini"
class="selectRoad"
style="width: 180px"
v-if="year == 'quarter'"
v-model="quarter"
aria-placeholder="请选季度"
/>
<el-button
type="primary"
@ -99,7 +90,7 @@ export default {
margin-bottom: 10px;
left: 20px;
top: 2px;
z-index: 0;
z-index: 9;
div {
white-space: nowrap;

468
ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/topComponent/index.vue

@ -1,246 +1,252 @@
<template>
<div class='TrafficFlow'>
<section class="foot">
<div class="item keep-ratio" v-for="(item,index) in topDatas" >
<div class="item-title" >
<span> {{ item.text }} <span class="num">{{ item.textNum }}</span>{{ item.textEnd }}</span>
<div class="TrafficFlow">
<section class="foot">
<div class="item keep-ratio" v-for="(item, index) in topDatas">
<div class="item-title">
<span>
{{ item.text }} <span class="num">{{ item.textNum }}</span
>{{ item.textEnd }}</span
>
</div>
<div class="item-body">
<div class="">
<img :src="item.icon" />
</div>
<div class="text-right">
<div class="topText">
已审核 <span class="num">{{ item.reviewed }}</span>
</div>
<div class="item-body" >
<div class="icon-left" >
<img :src="item.icon" />
</div>
<div class="text-right" >
<div class="topText" >
已审核 <span class="num">{{ item.reviewed }}</span>
</div>
<div class="bottomText" >
未审核 <span class="num" >{{ item.noReviewed }}</span>
</div>
</div>
<div class="bottomText">
未审核 <span class="num">{{ item.noReviewed }}</span>
</div>
</div>
</div>
</section>
</div>
</template>
<script>
export default {
name: 'publicService',
components: {
},
data(){
return {
activeName:"first",
topDatas:[ {
text:"其他事件",
textEnd:"起",
textNum:9,
icon:require("./assets/其他事件.png"),
reviewed:4,
noReviewed:5
},{
text:"路障清除",
textEnd:"起",
textNum:9,
icon:require("./assets/路障清除.png"),
reviewed:4,
noReviewed:5
},{
text:"车辆故障",
textEnd:"起",
textNum:9,
icon:require("./assets/车辆故障.png"),
reviewed:4,
noReviewed:5
},{
text:"服务区异常",
textEnd:"起",
textNum:9,
icon:require("./assets/服务区异常.png"),
reviewed:4,
noReviewed:5
},{
text:"交通管制",
textEnd:"起",
textNum:9,
icon:require("./assets/交通管制.png"),
reviewed:4,
noReviewed:5
},{
text:"交通拥堵",
textEnd:"起",
textNum:9,
icon:require("./assets/交通拥堵.png"),
reviewed:4,
noReviewed:5
},{
text:"施工建设",
textEnd:"起",
textNum:9,
icon:require("./assets/施工建设.png"),
reviewed:4,
noReviewed:5
},{
text:"异常天气",
textEnd:"起",
textNum:9,
icon:require("./assets/异常天气.png"),
reviewed:4,
noReviewed:5
},{
text:"交通事故",
textEnd:"起",
textNum:9,
icon:require("./assets/交通事故.png"),
reviewed:4,
noReviewed:5
}
]
}
},
methods:{
changeTabs(){
}
}
}
</script>
<style lang='scss' scoped>
::v-deep .el-tabs__item{
</div>
</section>
</div>
</template>
<script>
export default {
name: "publicService",
components: {},
data() {
return {
activeName: "first",
topDatas: [
{
text: "其他事件",
textEnd: "起",
textNum: 9,
icon: require("./assets/其他事件.png"),
reviewed: 4,
noReviewed: 5,
},
{
text: "路障清除",
textEnd: "起",
textNum: 9,
icon: require("./assets/路障清除.png"),
reviewed: 4,
noReviewed: 5,
},
{
text: "车辆故障",
textEnd: "起",
textNum: 9,
icon: require("./assets/车辆故障.png"),
reviewed: 4,
noReviewed: 5,
},
{
text: "服务区异常",
textEnd: "起",
textNum: 9,
icon: require("./assets/服务区异常.png"),
reviewed: 4,
noReviewed: 5,
},
{
text: "交通管制",
textEnd: "起",
textNum: 9,
icon: require("./assets/交通管制.png"),
reviewed: 4,
noReviewed: 5,
},
{
text: "交通拥堵",
textEnd: "起",
textNum: 9,
icon: require("./assets/交通拥堵.png"),
reviewed: 4,
noReviewed: 5,
},
{
text: "施工建设",
textEnd: "起",
textNum: 9,
icon: require("./assets/施工建设.png"),
reviewed: 4,
noReviewed: 5,
},
{
text: "异常天气",
textEnd: "起",
textNum: 9,
icon: require("./assets/异常天气.png"),
reviewed: 4,
noReviewed: 5,
},
{
text: "交通事故",
textEnd: "起",
textNum: 9,
icon: require("./assets/交通事故.png"),
reviewed: 4,
noReviewed: 5,
},
],
};
},
methods: {
changeTabs() {},
},
};
</script>
<style lang="scss" scoped>
::v-deep .el-tabs__item {
display: inline-flex;
justify-content: center;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #ffffff;
min-width: 128px;
position: relative;
left: 10px;
}
::v-deep .el-tabs__active-bar {
min-width: 128px;
}
::v-deep .el-tabs__nav-wrap::after {
background-color: #133242;
opacity: 0.1;
}
.footTabs {
display: inline;
width: 99%;
}
.TrafficFlow {
width: 100%;
height: 182px;
display: inline-flex;
position: relative;
z-index: 6;
color: white;
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 0%, #06425804 93%);
border-radius: 0px 0px 0px 0px;
.foot {
display: inline-flex;
justify-content: center;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #FFFFFF;
min-width:128px;
position: relative;
left:10px;
}
::v-deep .el-tabs__active-bar {
min-width:128px;
}
::v-deep .el-tabs__nav-wrap::after {
background-color: #133242;
opacity: 0.1;
}
.footTabs {
display: inline;
width:99%;
}
.TrafficFlow {
flex-direction: row;
width: 100%;
height: 182px;
display: inline-flex;
position: relative;
z-index: 6;
color: white;
background: linear-gradient(180deg, rgba(6,66,88,0) 0%, #06425804 93%);
border-radius: 0px 0px 0px 0px;
.foot {
height: 100%;
.item {
position: relative;
display: inline-flex;
width: calc(100% / 9);
height: 100%;
flex-direction: column;
justify-content: center;
align-items: center;
.item-title {
position: relative;
display: inline-flex;
width: 162px;
height: 35px;
flex-direction: row;
width:100%;
height:100%;
.item {
position: relative;
display: inline-flex;
width: calc(100% / 9);
height:100%;
flex-direction: column;
justify-content: center;
align-items: center;
.item-title {
position: relative;
display: inline-flex;
width: 162px;
height:35px;
flex-direction: row;
justify-content: center;
align-items: center;
background: linear-gradient(180deg, rgba(3,60,82,0) 0%, #033C52 100%);
border-radius: 4px 4px 4px 4px;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #FFFFFF;
span.num {
font-size: 22px;
font-family: PangMenZhengDao;
font-weight: 400;
color: #E2B066;
display: inline-flex;
position: relative;
left:-2px;
top:1px;
}
}
.item-body {
position: relative;
display: inline-flex;
width: 162px;
height:100%;
flex-direction: row;
justify-content: center;
align-items: center;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #FFFFFF;
margin-top:15px;
img {
width:47px;
height:47px;
margin:0 10px;
margin-right:20px;
}
span.num {
font-size: 18px;
font-family: PangMenZhengDao;
font-weight: 400;
color: #E2B066;
}
}
justify-content: center;
align-items: center;
background: linear-gradient(
180deg,
rgba(3, 60, 82, 0) 0%,
#033c52 100%
);
border-radius: 4px 4px 4px 4px;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #ffffff;
span.num {
font-size: 22px;
font-family: PangMenZhengDao;
font-weight: 400;
color: #e2b066;
display: inline-flex;
position: relative;
left: -2px;
top: 1px;
}
}
.item::after {
content: "";
position: absolute;
display: inline-flex;
top:20px;
right:0px;
width: 1px;
height: 116px;
background: linear-gradient(90deg, rgba(8, 135, 182, 0.2), rgba(0, 100, 137, 1), rgba(3, 60, 81, 0.2));
opacity: 1;
flex-direction: row;
justify-content: center;
align-items: center;
.item-body {
position: relative;
display: inline-flex;
width: 162px;
height: 100%;
flex-direction: row;
justify-content: center;
align-items: center;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #ffffff;
margin-top: 15px;
img {
width: 47px;
height: 47px;
margin: 0 10px;
margin-right: 20px;
}
span.num {
font-size: 18px;
font-family: PangMenZhengDao;
font-weight: 400;
color: #e2b066;
}
}
}
.item::after {
content: "";
position: absolute;
display: inline-flex;
top: 20px;
right: 0px;
width: 1px;
height: 116px;
background: linear-gradient(
90deg,
rgba(8, 135, 182, 0.2),
rgba(0, 100, 137, 1),
rgba(3, 60, 81, 0.2)
);
opacity: 1;
flex-direction: row;
justify-content: center;
align-items: center;
}
}
</style>
}
</style>

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

@ -19,7 +19,7 @@
</template>
导出
</ButtonGradient>
<ButtonGradient @click.native="getData">
<ButtonGradient @click.native="onReset">
<template #prefix>
<img src="@screen/images/refresh.svg" />
</template>
@ -34,6 +34,7 @@
:disable="true"
placeholder="请输入敏感词,回车搜索"
@handleSearch="handleSearch"
ref="form"
/>
</div>
@ -201,6 +202,12 @@ export default {
this.searchData = data;
this.getData();
},
onReset(){
this.searchData.word = undefined;
// console.log(this.$refs["form"] , "__-=========");
this.$refs["form"].handleResetForm();
this.getData();
},
async getData() {
// const closeLoading = setLoading();
this.isLoading = true;

Loading…
Cancel
Save