Browse Source

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

wangqin
zhangzhang 9 months ago
parent
commit
cee59c6c9f
  1. 66
      ruoyi-ui/README.md
  2. 29
      ruoyi-ui/src/assets/iconfont/demo_index.html
  3. 10
      ruoyi-ui/src/assets/iconfont/iconfont.css
  4. 2
      ruoyi-ui/src/assets/iconfont/iconfont.js
  5. 7
      ruoyi-ui/src/assets/iconfont/iconfont.json
  6. BIN
      ruoyi-ui/src/assets/iconfont/iconfont.ttf
  7. BIN
      ruoyi-ui/src/assets/iconfont/iconfont.woff
  8. BIN
      ruoyi-ui/src/assets/iconfont/iconfont.woff2
  9. 8
      ruoyi-ui/src/assets/jihe/images/button/btnClose.svg
  10. 3
      ruoyi-ui/src/store/modules/menu.js
  11. 1
      ruoyi-ui/src/views/JiHeExpressway/common/PresetFormItems.js
  12. 32
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
  13. 2
      ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/UserArea.vue
  14. 5
      ruoyi-ui/src/views/JiHeExpressway/components/InputSearch/index.vue
  15. 12
      ruoyi-ui/src/views/JiHeExpressway/components/RecentPages/index.vue
  16. 6
      ruoyi-ui/src/views/JiHeExpressway/images/home-FrameControl/FrameControl.svg
  17. 3
      ruoyi-ui/src/views/JiHeExpressway/images/home-VectorControl/VectorControl.svg
  18. 333
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue
  19. 97
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeVectorControl/index.vue
  20. 7
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue
  21. 478
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/eventPlanDialog/index.vue
  22. 42
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue
  23. 303
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/addAndEditDialog/index.vue
  24. 52
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/formTable/index.vue
  25. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/service/board/index.vue
  26. 9
      ruoyi-ui/src/views/JiHeExpressway/pages/service/sensitive/index.vue

66
ruoyi-ui/README.md

@ -83,13 +83,13 @@ PresetFormItems.js 里面封装了一些可以复用的表单项
data.js 表单封装,里面会使用PresetFormItems的一些FormItem.
Form表单属性介绍:
<Form labelWidth="90px" column="2" class="form" ref="FormConfigRef" :formList="formList" />
{
key: "ServiceAreaAbnormal", //唯一标识 一般tabs才需要
label: "服务区异常",//表单标题
formConfig: {
formOptions: {//element中表单配置参数
column: 2,
column: 2, //一行放多少元素(基于:style grid布局实现)
},
list: [//FormItem定义
{
@ -166,7 +166,7 @@ FormItem属性介绍:
export const additionalNotes = {
label: "补充说明:", // 标题
key: "eventSourceTips", //数据存储字段
isAlone: true, // 独立
isAlone: true, // 单独一行
required: true, //必填
default: 5, //默认值
type: "input", //组件类型(el-input 去掉el-即可) 不填默认为input
@ -182,4 +182,64 @@ export const additionalNotes = {
return true
}
},
ons: { //on监听 element事件
change(value, ...args) {
const { data, formList } = args.slice(-1)\[0]; //data 为数据 formList为传入的配置项
mileCal(data);
}
},
};
MultipleLabelItem是单独写的组件,事件需按如下配置:
merge({}, PresetFormItems.startStation,
{
options: {
options: [
{
prefix: {
text: "K",
style: {
color: "#3DE8FF",
},
},
key: "startStakeMark[0]",
default: "55",
rules: [
{
message: "请补全桩号",
callback(value, data) {
console.log(value, data.startStakeMark);
if (
!((value + "")?.trim() && (data.startStakeMark[1] + "")?.trim())
)
return false;
else return true;
},
},
],
ons: { //on监听 element事件
change(value, ...args) {
const { data, formList } = args.slice[-1](0); //data 为数据 formList为传入的配置项
data.deviceType && changeHandle(data, formList);
}
},
},
{
prefix: {
text: "+",
style: {
color: "#3DE8FF",
},
},
default: "378",
key: "startStakeMark[1]",
ons: { //on监听 element事件
change(value, ...args) {
const { data, formList } = args.slice[-1](0); //data 为数据 formList为传入的配置项
data.deviceType && changeHandle(data, formList);
}
},
},
],
}
})

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;
}
}

1
ruoyi-ui/src/views/JiHeExpressway/common/PresetFormItems.js

@ -137,7 +137,6 @@ export const startStation = {
{
message: "请补全桩号",
callback(value, data) {
console.log(value, data.startStakeMark);
if (
!((value + "")?.trim() && (data.startStakeMark[1] + "")?.trim())
)

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

@ -1,29 +1,12 @@
<template>
<ElForm
:style="getStyle()"
:model="modelFormData"
:label-width="labelWidth"
class="FormConfig"
ref="ElFormRef"
size="mini"
>
<ElForm :style="getStyle()" :model="modelFormData" :label-width="labelWidth" class="FormConfig" ref="ElFormRef"
size="mini">
<template v-for="(item, index) in formList">
<ElFormItem
class="formItem"
:rules="getRules(item)"
v-if="formItemVisible(item)"
:key="`${item.key}|${index}`"
:label="item.label"
:style="gridStyle(item, index)"
:prop="item.type !== 'MultipleLabelItem' ? item.key : void 0"
:required="item.required"
>
<ElFormItem class="formItem" :rules="getRules(item)" v-if="formItemVisible(item)" :key="`${item.key}|${index}`"
:label="item.label" :style="gridStyle(item, index)"
:prop="item.type !== 'MultipleLabelItem' ? item.key : void 0" :required="item.required">
<slot :name="item.key" :data="item" :formData="modelFormData">
<ProxyCom
:value="getValue(item)"
:item="item"
@update:value="(data) => updateValue(item, data)"
/>
<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>
@ -150,8 +133,7 @@ export default {
gridStyle() {
return (item, index) => ({
gridRow: `span ${item.gridRow || 1}`,
gridColumn: `span ${
item.gridColumn || (item.isAlone && this.column) || 1
gridColumn: `span ${item.gridColumn || (item.isAlone && this.column) || 1
}`,
});
},

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();

12
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(){
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;
}
}
}

6
ruoyi-ui/src/views/JiHeExpressway/images/home-FrameControl/FrameControl.svg

@ -0,0 +1,6 @@
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Frame">
<path id="Vector" d="M3.5 3.49984C3.5 2.881 3.74583 2.28751 4.18342 1.84992C4.621 1.41234 5.21449 1.1665 5.83333 1.1665H22.1667C22.7855 1.1665 23.379 1.41234 23.8166 1.84992C24.2542 2.28751 24.5 2.881 24.5 3.49984V12.4307C23.1037 11.548 21.4852 11.0807 19.8333 11.0832C17.9392 11.0801 16.0958 11.6945 14.5822 12.8332H12.25C11.9406 12.8332 11.6438 12.9561 11.425 13.1749C11.2062 13.3937 11.0833 13.6904 11.0833 13.9998C11.0833 14.3093 11.2062 14.606 11.425 14.8248C11.6438 15.0436 11.9406 15.1665 12.25 15.1665H12.4308C11.5482 16.5628 11.0808 18.1813 11.0833 19.8332C11.0833 22.6956 12.4577 25.2366 14.5822 26.8332H5.83333C5.21449 26.8332 4.621 26.5873 4.18342 26.1498C3.74583 25.7122 3.5 25.1187 3.5 24.4998V3.49984ZM9.91667 19.8332C9.91667 19.68 9.88649 19.5283 9.82786 19.3867C9.76923 19.2452 9.68329 19.1165 9.57496 19.0082C9.46662 18.8999 9.33801 18.8139 9.19646 18.7553C9.05492 18.6967 8.90321 18.6665 8.75 18.6665C8.59679 18.6665 8.44508 18.6967 8.30354 18.7553C8.16199 18.8139 8.03338 18.8999 7.92504 19.0082C7.81671 19.1165 7.73077 19.2452 7.67214 19.3867C7.61351 19.5283 7.58333 19.68 7.58333 19.8332C7.58333 20.1426 7.70625 20.4393 7.92504 20.6581C8.14383 20.8769 8.44058 20.9998 8.75 20.9998C9.05942 20.9998 9.35617 20.8769 9.57496 20.6581C9.79375 20.4393 9.91667 20.1426 9.91667 19.8332ZM9.91667 13.9998C9.91667 13.8466 9.88649 13.6949 9.82786 13.5534C9.76923 13.4118 9.68329 13.2832 9.57496 13.1749C9.46662 13.0665 9.33801 12.9806 9.19646 12.922C9.05492 12.8633 8.90321 12.8332 8.75 12.8332C8.59679 12.8332 8.44508 12.8633 8.30354 12.922C8.16199 12.9806 8.03338 13.0665 7.92504 13.1749C7.81671 13.2832 7.73077 13.4118 7.67214 13.5534C7.61351 13.6949 7.58333 13.8466 7.58333 13.9998C7.58333 14.3093 7.70625 14.606 7.92504 14.8248C8.14383 15.0436 8.44058 15.1665 8.75 15.1665C9.05942 15.1665 9.35617 15.0436 9.57496 14.8248C9.79375 14.606 9.91667 14.3093 9.91667 13.9998ZM11.0833 8.1665C11.0833 8.47592 11.2062 8.77267 11.425 8.99146C11.6438 9.21025 11.9406 9.33317 12.25 9.33317H19.25C19.4032 9.33319 19.555 9.30303 19.6965 9.24441C19.8381 9.18579 19.9667 9.09986 20.0751 8.99152C20.1834 8.88319 20.2694 8.75457 20.328 8.61301C20.3867 8.47145 20.4168 8.31973 20.4168 8.1665C20.4168 8.01328 20.3867 7.86156 20.328 7.72C20.2694 7.57844 20.1834 7.44982 20.0751 7.34148C19.9667 7.23315 19.8381 7.14721 19.6965 7.08859C19.555 7.02997 19.4032 6.99981 19.25 6.99984H12.25C12.0968 6.99984 11.9451 7.03001 11.8035 7.08864C11.662 7.14727 11.5334 7.23321 11.425 7.34155C11.3167 7.44988 11.2308 7.57849 11.1721 7.72004C11.1135 7.86159 11.0833 8.01329 11.0833 8.1665ZM9.91667 8.1665C9.91667 8.01329 9.88649 7.86159 9.82786 7.72004C9.76923 7.57849 9.68329 7.44988 9.57496 7.34155C9.46662 7.23321 9.33801 7.14727 9.19646 7.08864C9.05492 7.03001 8.90321 6.99984 8.75 6.99984C8.59679 6.99984 8.44508 7.03001 8.30354 7.08864C8.16199 7.14727 8.03338 7.23321 7.92504 7.34155C7.81671 7.44988 7.73077 7.57849 7.67214 7.72004C7.61351 7.86159 7.58333 8.01329 7.58333 8.1665C7.58333 8.47592 7.70625 8.77267 7.92504 8.99146C8.14383 9.21025 8.44058 9.33317 8.75 9.33317C9.05942 9.33317 9.35617 9.21025 9.57496 8.99146C9.79375 8.77267 9.91667 8.47592 9.91667 8.1665Z" fill="white"/>
<path id="Vector_2" d="M12.8335 19.8335C12.8335 15.9677 15.9677 12.8335 19.8335 12.8335C23.6992 12.8335 26.8335 15.9677 26.8335 19.8335C26.8335 23.6992 23.6992 26.8335 19.8335 26.8335C15.9677 26.8335 12.8335 23.6992 12.8335 19.8335ZM21.0025 16.3335C21.0025 16.1803 20.9724 16.0285 20.9137 15.887C20.8551 15.7454 20.7692 15.6168 20.6609 15.5084C20.5525 15.4001 20.4239 15.3141 20.2823 15.2555C20.1408 15.1968 19.9891 15.1667 19.8358 15.1667C19.6826 15.1667 19.5309 15.1968 19.3893 15.2555C19.2478 15.3141 19.1191 15.4001 19.0108 15.5084C18.9025 15.6168 18.8165 15.7454 18.7579 15.887C18.6993 16.0285 18.6691 16.1803 18.6692 16.3335V19.8358C18.669 19.9891 18.6991 20.1409 18.7577 20.2825C18.8162 20.4241 18.9021 20.5528 19.0104 20.6612L21.4837 23.1346C21.5921 23.2429 21.7208 23.3288 21.8624 23.3874C22.004 23.446 22.1558 23.4761 22.309 23.4761C22.4622 23.476 22.614 23.4458 22.7555 23.3871C22.8971 23.3284 23.0257 23.2424 23.134 23.134C23.2423 23.0256 23.3282 22.8969 23.3868 22.7553C23.4454 22.6137 23.4755 22.462 23.4755 22.3088C23.4754 22.1555 23.4452 22.0038 23.3865 21.8622C23.3278 21.7207 23.2418 21.5921 23.1334 21.4837L21.0025 19.3528V16.3335Z" fill="white"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

3
ruoyi-ui/src/views/JiHeExpressway/images/home-VectorControl/VectorControl.svg

@ -0,0 +1,3 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path id="Vector" d="M3.99929 3.66667H2.00043V0H4.00086V3.66667H3.99929ZM3.99929 10.0833V22H2.00043V10.0833H4.00086H3.99929ZM12.0002 11.9167H9.99979V0H12.0002V11.9167ZM12.0002 18.3333V22H9.99979V18.3333H12.0002ZM20.0004 5.5H17.9999V0H20.0004V5.5ZM20.0004 11.9167V22H17.9999V11.9167H20.0004ZM1.00021 4.58333H4.9995C5.55264 4.58333 5.99971 4.994 5.99972 5.5V8.25C5.99972 8.756 5.55186 9.16667 5.00029 9.16667H1.00021C0.447857 9.16667 0 8.756 0 8.25V5.5C0 4.994 0.447857 4.58333 1.00021 4.58333ZM9.00036 12.8333H12.9996C13.552 12.8333 13.9999 13.244 13.9999 13.75V16.5C13.9999 17.006 13.552 17.4167 12.9996 17.4167H9.00036C8.448 17.4167 8.00014 17.006 8.00014 16.5V13.75C8.00014 13.244 8.448 12.8333 9.00036 12.8333ZM16.9997 6.41667H20.9998C21.5521 6.41667 22 6.82733 22 7.33333V10.0833C22 10.5893 21.5521 11 20.9998 11H17.0005C16.4474 11 16.0003 10.5893 16.0003 10.0833V7.33333C16.0003 6.82733 16.4481 6.41667 16.9997 6.41667Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

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

@ -0,0 +1,333 @@
<template>
<div class="HomeFrameControl">
<ElPopover trigger="manual" :value="activeIcon === 'FrameControl'" :visibleArrow="false" placement="left"
popper-class="global-input-search-popover">
<Button :class="['btn', { 'btn-active': activeIcon }]" slot="reference"
@click.native="handleClick('FrameControl')">
<img src="@screen/images/home-FrameControl/FrameControl.svg" />
</Button>
<div class="body">
<div class="title">批量控制</div>
<span class="close" @click="() => { this.activeIcon = null; }">
<i class="el-icon-close" />
</span>
<Form labelWidth="90px" column="2" class="form" ref="FormConfigRef" :formList="formList" />
<div class="footer">
<Button @click.native="">
确认
</Button>
<Button style="background-color: rgba(0, 179, 204, 0.3)" @click.native="cancelClick"> 取消 </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/common/PresetFormItems.js";
import { merge, cloneDeep } from "lodash";
import { markerClusterIns } from "@screen/pages/Home/components/RoadAndEvents/utils/map.js"
import { ChildTypes } from "@screen/utils/enum.js"
import { getDeviceList } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js";
import { delay } from "@screen/utils/common";
import { DeviceForMap } from "@screen/pages/Home/components/RoadAndEvents/utils/buttonEvent"
const DeviceTopics = {}
Object.keys(DeviceForMap).forEach(DeviceLabel => {
DeviceTopics[DeviceForMap[DeviceLabel].deviceType] = DeviceLabel;
});
async function setDeviceOptions(config, filterData, formList) {
const data = await getDeviceList(config.deviceType, filterData).then(async (data) => {
await delay(600);
return data;
});
formList[4].options.options = data.map(item => {
return { label: `${item.deviceName}${item.stakeMark}`, value: JSON.stringify({ id: item.id, iotDeviceId: item.iotDeviceId }) }
})
};
function changeHandle(data, formList) {
const filterData = {};
data.direction && (filterData.direction = data.direction);
data.startStakeMark && (filterData.startStakeMark = data.startStakeMark);
data.endStakeMark && (filterData.endStakeMark = data.endStakeMark);
setDeviceOptions({ deviceType: data.deviceType }, filterData, formList);
}
export default {
name: "HomeFrameControl",//
components: {
Button,
Form,
},
data() {
return {
activeIcon: null,
formList: [
{
label: "设备类型:",
key: "deviceType",
type: "select",
options: {
clearable: true,
options: [],
},
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
{
label: "设备方向:",
key: "direction",
type: "select",
options: {
options: [
{ key: "1", label: "济南方向" },
{ key: "3", label: "菏泽方向" },
{ key: "2", label: "双向" },
],
},
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
merge({}, PresetFormItems.startStation,
{
options: {
options: [
{
prefix: {
text: "K",
style: {
color: "#3DE8FF",
},
},
key: "startStakeMark[0]",
default: "55",
rules: [
{
message: "请补全桩号",
callback(value, data) {
console.log(value, data.startStakeMark);
if (
!((value + "")?.trim() && (data.startStakeMark[1] + "")?.trim())
)
return false;
else return true;
},
},
],
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
{
prefix: {
text: "+",
style: {
color: "#3DE8FF",
},
},
default: "378",
key: "startStakeMark[1]",
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
],
}
}),
merge({}, PresetFormItems.endStation, {
options: {
options: [
{
prefix: {
text: "K",
style: {
color: "#3DE8FF",
},
},
key: "endStakeMark[0]",
default: "208",
rules: [
{
message: "请补全桩号",
callback(value, data) {
if (
!((value + "")?.trim() && (data.endStakeMark[1] + "")?.trim())
)
return false;
else return true;
},
},
],
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
{
prefix: {
text: "+",
style: {
color: "#3DE8FF",
},
},
default: "153",
key: "endStakeMark[1]",
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
],
}
}),
{
label: "设备名称:",
key: "childType",
type: "select",
isAlone: true,
options: {
clearable: true,
options: [],
},
visible: data => {
return true;
},
},
{
label: "控制操作:",
key: "controlOp",
type: "select",
default: null,
options: {
clearable: true,
options: [{
label: "在线",
value: "1"
}, {
label: "离线",
value: "0"
}]
},
visible: data => {
// if (find(this.activeDeviceTypes, (type => type.match("_"))))
// return true;
},
},
]
}
},
inject: ["activeDeviceTypes"],
watch: {
activeDeviceTypes: {
handler(val) {
const activeTopicOptions = []
this.activeDeviceTypes.filter(activeDeviceType => {
const match = activeDeviceType.match(/路测设备_(\d+)/);
if (match) {
const deviceType = match[1];
activeTopicOptions.push({ label: DeviceTopics[deviceType], value: deviceType });
}
});
this.formList[0].options.options = activeTopicOptions;
},
immediate: true,
deep: true
}
},
methods: {
cancelClick() {
this.activeIcon = null;
},
handleClick(type) {
console.log("type: ", type);
this.activeIcon = this.activeIcon === type ? null : type;
console.log("this.activeIcon", this.activeIcon);
},
filterEnd(data) {
this.activeIcon = null;
// this.filterData = data;
this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data);
},
},
};
</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);
// margin-top: 6vh;
.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%;
}
.close {
padding: 3px 9px;
cursor: pointer;
position: absolute;
top: 0;
right: 0;
width: fit-content;
}
}
}
</style>
<style lang="scss" scoped>
.image {
width: 50vw;
height: 65vh;
}
.HomeFrameControl {
.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>

97
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeVectorControl/index.vue

@ -0,0 +1,97 @@
<template>
<div class="HomeVectorControl">
<Button :class="['btn', { 'btn-active': activeIcon }]" slot="reference"
@click.native="handleClick('VectorControl')">
<img src="@screen/images/home-VectorControl/VectorControl.svg" />
</Button>
</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";
import { merge, cloneDeep } from "lodash";
import { markerClusterIns } from "@screen/pages/Home/components/RoadAndEvents/utils/map.js"
export default {
name: "HomeVectorControl",
components: {
Button,
Form,
},
data() {
return {
activeIcon: null,
};
},
methods: {
handleClick(type) {
this.activeIcon = this.activeIcon === type ? null : type;
if (this.activeIcon) window.showStakeText = true;
else window.showStakeText = false;
markerClusterIns.setData();
},
filterEnd(data) {
this.activeIcon = null;
// this.filterData = data;
this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data);
},
},
};
</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);
// margin-top: 6vh;
.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%;
}
.close {
padding: 3px 9px;
cursor: pointer;
position: absolute;
top: 0;
right: 0;
width: fit-content;
}
}
}
</style>
<style lang="scss" scoped>
.image {
width: 50vw;
height: 65vh;
}
.HomeVectorControl {
.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>

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

@ -20,6 +20,8 @@
<HomeFilter class="item" />
<HomeFrame class="item" />
<HomeVector class="item" />
<HomeVectorControl class="item" />
<HomeFrameControl class="item" />
</div>
<ConditionStatistics class="right card-menu" />
</div>
@ -46,6 +48,9 @@ import AMapContainer from "./components/AMapContainer/index.vue";
import HomeFilter from "./components/HomeFilter/index.vue";
import HomeFrame from "./components/HomeFrame/index.vue";
import HomeVector from "./components/HomeVector/index.vue";
import HomeFrameControl from "./components/HomeFrameControl/index.vue";
import HomeVectorControl from "./components/HomeVectorControl/index.vue";
import Button from '@screen/components/Buttons/Button.vue';
import Vue from "vue";
// import InfoBoard from "./components/InfoBoard"
@ -62,6 +67,8 @@ export default {
HomeFilter,
HomeFrame,
HomeVector,
HomeFrameControl,
HomeVectorControl,
// InfoBoard
},
data() {

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)
})
}
}
}

303
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: '路障清除'
}
],
mechanismOptions: [{
value: 1,
label: '雨'
},
{
value: 2,
label: '雪'
label: '设施设备隐患'
},
{
value: 3,
label: ''
value: 10,
label: '异常天气'
},
{
value: 4,
label: '大风'
value: 11,
label: '其他事件'
}
],
mechanismOptions: [{
value: "1-1",
label: "追尾",
},
{
value: 5,
label: '低温寒潮'
value: "1-2",
label: "侧翻",
},
{
value: 6,
label: '路面积雪'
value: "1-3",
label: "撞护栏",
},
{
value: 7,
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,

52
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: '最近公里数'
},
],

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>

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