Browse Source

情报板、调整菜单样式

wangqin
hui 11 months ago
parent
commit
37de6494ea
  1. 0
      ruoyi-ui/src/_layout/components/AppMain.vue
  2. 0
      ruoyi-ui/src/_layout/components/InnerLink/index.vue
  3. 0
      ruoyi-ui/src/_layout/components/Navbar.vue
  4. 0
      ruoyi-ui/src/_layout/components/Settings/index.vue
  5. 0
      ruoyi-ui/src/_layout/components/Sidebar/FixiOSBug.js
  6. 0
      ruoyi-ui/src/_layout/components/Sidebar/Item.vue
  7. 0
      ruoyi-ui/src/_layout/components/Sidebar/Link.vue
  8. 0
      ruoyi-ui/src/_layout/components/Sidebar/Logo.vue
  9. 0
      ruoyi-ui/src/_layout/components/Sidebar/SidebarItem.vue
  10. 0
      ruoyi-ui/src/_layout/components/Sidebar/index.vue
  11. 0
      ruoyi-ui/src/_layout/components/Sidebarblue/FixiOSBug.js
  12. 0
      ruoyi-ui/src/_layout/components/Sidebarblue/ItemBlue.vue
  13. 0
      ruoyi-ui/src/_layout/components/Sidebarblue/LinkBlue.vue
  14. 0
      ruoyi-ui/src/_layout/components/Sidebarblue/LogoBlue.vue
  15. 0
      ruoyi-ui/src/_layout/components/Sidebarblue/SidebarItemBlue.vue
  16. 0
      ruoyi-ui/src/_layout/components/Sidebarblue/index.vue
  17. 0
      ruoyi-ui/src/_layout/components/TagsView/ScrollPane.vue
  18. 0
      ruoyi-ui/src/_layout/components/TagsView/index.vue
  19. 0
      ruoyi-ui/src/_layout/components/index.js
  20. 0
      ruoyi-ui/src/_layout/index.vue
  21. 0
      ruoyi-ui/src/_layout/mixin/ResizeHandler.js
  22. 10
      ruoyi-ui/src/assets/styles/JiHeExpressway.scss
  23. 97
      ruoyi-ui/src/common/infoBoardTestData.js
  24. 6
      ruoyi-ui/src/common/menuData.js
  25. 74
      ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/CustomMenu.vue
  26. 21
      ruoyi-ui/src/views/JiHeExpressway/components/RoadStateCard/index.vue
  27. BIN
      ruoyi-ui/src/views/JiHeExpressway/images/active.png
  28. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/InfoBoard/addinfo.vue
  29. 285
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/InfoBoard/index.vue
  30. 1
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue
  31. 14
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue
  32. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/images/export.svg
  33. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/images/insert.svg
  34. 0
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/images/refresh.svg
  35. 36
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue
  36. 142
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/perception/index.vue
  37. 2
      ruoyi-ui/vue.config.js

0
ruoyi-ui/src/layout/components/AppMain.vue → ruoyi-ui/src/_layout/components/AppMain.vue

0
ruoyi-ui/src/layout/components/InnerLink/index.vue → ruoyi-ui/src/_layout/components/InnerLink/index.vue

0
ruoyi-ui/src/layout/components/Navbar.vue → ruoyi-ui/src/_layout/components/Navbar.vue

0
ruoyi-ui/src/layout/components/Settings/index.vue → ruoyi-ui/src/_layout/components/Settings/index.vue

0
ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js → ruoyi-ui/src/_layout/components/Sidebar/FixiOSBug.js

0
ruoyi-ui/src/layout/components/Sidebar/Item.vue → ruoyi-ui/src/_layout/components/Sidebar/Item.vue

0
ruoyi-ui/src/layout/components/Sidebar/Link.vue → ruoyi-ui/src/_layout/components/Sidebar/Link.vue

0
ruoyi-ui/src/layout/components/Sidebar/Logo.vue → ruoyi-ui/src/_layout/components/Sidebar/Logo.vue

0
ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue → ruoyi-ui/src/_layout/components/Sidebar/SidebarItem.vue

0
ruoyi-ui/src/layout/components/Sidebar/index.vue → ruoyi-ui/src/_layout/components/Sidebar/index.vue

0
ruoyi-ui/src/layout/components/Sidebarblue/FixiOSBug.js → ruoyi-ui/src/_layout/components/Sidebarblue/FixiOSBug.js

0
ruoyi-ui/src/layout/components/Sidebarblue/ItemBlue.vue → ruoyi-ui/src/_layout/components/Sidebarblue/ItemBlue.vue

0
ruoyi-ui/src/layout/components/Sidebarblue/LinkBlue.vue → ruoyi-ui/src/_layout/components/Sidebarblue/LinkBlue.vue

0
ruoyi-ui/src/layout/components/Sidebarblue/LogoBlue.vue → ruoyi-ui/src/_layout/components/Sidebarblue/LogoBlue.vue

0
ruoyi-ui/src/layout/components/Sidebarblue/SidebarItemBlue.vue → ruoyi-ui/src/_layout/components/Sidebarblue/SidebarItemBlue.vue

0
ruoyi-ui/src/layout/components/Sidebarblue/index.vue → ruoyi-ui/src/_layout/components/Sidebarblue/index.vue

0
ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue → ruoyi-ui/src/_layout/components/TagsView/ScrollPane.vue

0
ruoyi-ui/src/layout/components/TagsView/index.vue → ruoyi-ui/src/_layout/components/TagsView/index.vue

0
ruoyi-ui/src/layout/components/index.js → ruoyi-ui/src/_layout/components/index.js

0
ruoyi-ui/src/layout/index.vue → ruoyi-ui/src/_layout/index.vue

0
ruoyi-ui/src/layout/mixin/ResizeHandler.js → ruoyi-ui/src/_layout/mixin/ResizeHandler.js

10
ruoyi-ui/src/assets/styles/JiHeExpressway.scss

@ -22,7 +22,7 @@
.el-form-item__content {
color: $textColor;
height: $inputHeight;
// height: $inputHeight;
}
.el-input {
@ -125,9 +125,8 @@
}
}
}
.el-menu--popup-bottom-start{
margin-top: 16px;
}
// 导航菜单
.el-menu--popup {
border-radius: 0;
background: linear-gradient(180deg, rgba(6, 66, 88, 0.5) 0%, #064258 93%);
@ -164,4 +163,7 @@
color: #FFF;
}
}
.el-menu--popup-bottom-start {
margin-top: 16px;
}
}

97
ruoyi-ui/src/common/infoBoardTestData.js

@ -0,0 +1,97 @@
// residenceTime 停留时间
// screenEntryMethod 入屏方式
// screenOutputMethod 出屏方式
// screenEntrySpeed 入屏速度
// flickerSpeed 闪烁速度
// flashingFrequency 闪烁次数
// playbackCount 播放次数
// xCoordinate x
// yCoordinate y
// displayAreaWidth 宽度
// displayAreaHeight 高度
// font 字体
// fontSize 字号
// fontStyle 字体风格
// horizontalAlignment 水平对齐
// verticalAlignment 垂直对齐
// lineSpacing 行距
// fontSpacing 字距
// foregroundColor 前景颜色
// backgroundColor 背景颜色
// playSpecialEffects 播放特效
// specialEffectsSpeed 特效速度
// playbackDuration 播放时长
// playbackCount 播放次数
// textContent 文本内容
// whetherToPlayText 是否播放文字
// whetherToSynchronizePlayback 是否同步播放
// setUpTheSpeaker 设置发声音人
// volume 音量
// speechSpeed 语速
// intonation 语调
export default [
{
"backgroundColor": "00000000",
"displayAreaHeight": "120",
"displayAreaWidth": "768",
"flashingFrequency": "5", //闪烁次数
"flickerSpeed": "0", //闪烁速度
"font": "微软雅黑",
"fontSize": "14",
"fontSpacing": "4",
"fontStyle": "0",
"foregroundColor": "ffff00",
"horizontalAlignment": "2",
"intonation": "0",
"lineSpacing": "0",
"playSpecialEffects": "0",
"playbackCount": "1",
"playbackDuration": "50",
"residenceTime": "18", //停留时间
"screenEntryMethod": "1", //入屏方式
"screenEntrySpeed": "1", //入屏速度
"screenOutputMethod": "1", //出屏方式
"setUpTheSpeaker": "0",
"specialEffectsSpeed": "1",
"speechSpeed": "0",
"textContent": "因改扩建施工最高限速100km/h",
"verticalAlignment": "2",
"volume": "0",
"whetherToPlayText": "0",
"whetherToSynchronizePlayback": "0",
"xCoordinate": "0",
"yCoordinate": "0"
},
{
"backgroundColor": "00000000",
"displayAreaHeight": "180",
"displayAreaWidth": "700",
"flashingFrequency": "5",
"flickerSpeed": "0",
"font": "微软雅黑",
"fontSize": "30",
"fontSpacing": "20",
"fontStyle": "0",
"foregroundColor": "ff0000",
"horizontalAlignment": "1",
"intonation": "0",
"lineSpacing": "10",
"playSpecialEffects": "0",
"playbackCount": "1",
"playbackDuration": "50",
"residenceTime": "50",
"screenEntryMethod": "1",
"screenEntrySpeed": "1",
"screenOutputMethod": "1",
"setUpTheSpeaker": "0",
"specialEffectsSpeed": "1",
"speechSpeed": "0",
"textContent": "因改扩建施工最高限速100km/h",
"verticalAlignment": "2",
"volume": "0",
"whetherToPlayText": "0",
"whetherToSynchronizePlayback": "0",
"xCoordinate": "0",
"yCoordinate": "0"
}
]

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

@ -58,12 +58,6 @@ export default [
name: "controlEventEvent",
component: "control/event/event/index.vue",
},
{
title: "感知事件2",
path: "/control/event/perception",
name: "perception",
component: "control/event/perception/index.vue",
},
{
title: "协调调度记录",
path: "/control/event/coordinateSchedulingRecords",

74
ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/CustomMenu.vue

@ -1,11 +1,8 @@
<template>
<el-menu :default-active="activeIndex" mode="horizontal" @select="handleSelect" class="menuBox">
<template v-for="(item, index) in menuData">
<component :index="prefix + '_' + index" v-if="item.children" is="el-submenu" class="subMenu">
<template slot="title">
<p class="menuItem" :class="{ 'menuActive': activeIndex.includes(prefix + '_' + index) }" index="1">{{
item.title }}</p>
</template>
<component :index="prefix + '_' + index" v-if="item.children" is="el-submenu" class="menuItem" :class="{ 'menuActive': activeIndex.includes(prefix + '_' + index) }">
<template slot="title">{{ item.title }}</template>
<!-- 第二层菜单 -->
<template v-for="(item1, index1) in item.children">
@ -86,7 +83,21 @@ export default {
}
};
</script>
<style lang="less" scoped>
<style lang="scss" scoped>
@mixin btnClass{
transition: none;
width: 110px;
height: 34px;
line-height: 32px;
font-size: 18px;
text-align: center;
color: #fff;
padding: 0 !important;
}
@mixin activeBtnBg{
background: url("../../images/active.png") no-repeat 0 0 !important;
background-size: 100% 100% !important;
}
.menuBox {
border: none;
border-radius: 0;
@ -94,54 +105,51 @@ export default {
width: 25%;
display: flex;
justify-content: space-around;
text-align: center;
}
.menuItem {
color: #fff;
@include btnClass;
text-align: center;
width: 96px;
height: 34px;
line-height: 32px;
font-size: 18px;
background-size: 100% 100%;
/deep/ &.is-active {
::v-deep &.is-active {
border: none !important;
color: #fff !important;
}
/deep/ &:focus {
::v-deep &:focus {
border: none !important;
color: #fff !important;
}
&:hover {
background: url("../../images/active.png") no-repeat center center !important;
color: #fff !important;
}
}
.subMenu {
height: 34px;
width: 96px;
text-align: center;
/deep/ .el-icon-arrow-down {
::v-deep .el-icon-arrow-down {
display: none !important;
}
/deep/ .el-submenu__title:hover {
::v-deep .el-submenu__title{
@include btnClass;
}
::v-deep .el-submenu__title:hover {
background: none !important;
}
}
.menuActive {
background: url("../../images/active.png") no-repeat center center !important;
&:hover {
@include activeBtnBg;
color: #fff !important;
::v-deep .el-submenu__title{
color: #fff;
}
}
/deep/ &:focus {
border: none !important;
&.menuActive {
@include activeBtnBg;
::v-deep .el-submenu__title{
color: #fff !important;
background: url("../../images/active.png") no-repeat center center !important;
}
}
::v-deep &:focus .el-submenu__title{
color: #fff !important;
}
}
</style>

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

@ -107,7 +107,8 @@ export default {
.left {
img {
width: 180px;
width: 212px;
height: 159;
}
}
@ -115,23 +116,23 @@ export default {
display: flex;
flex-direction: column;
flex: 1;
gap: 12px;
height: 159px;
.info {
flex: 1;
display: flex;
flex-direction: column;
// align-items: center;
justify-content: space-between;
>p {
height: 21px;
font-size: 14px;
// font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #FFFFFF;
line-height: 16px;
color: #f4f4f4;
line-height: 24px;
&:first-child{
color: #37E7FF;
font-size: 18px;
font-weight: bold;
margin-bottom: 16px;
}
}
}

BIN
ruoyi-ui/src/views/JiHeExpressway/images/active.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 14 KiB

4
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/InfoBoard/addinfo.vue

@ -1,7 +1,7 @@
<template>
<div class="container infoBoardDialog">
<!-- 添加信息弹窗 -->
<el-dialog title="新增" :visible.sync="dialogVisible" width="50%" :before-close="handleClose" :close-on-click-modal="false">
<el-dialog title="新增" :visible.sync="dialogVisible" width="50%" :before-close="handleClose" :close-on-click-modal="false" append-to-body>
<div class="dialogStyleBox">
<div class="dialogLine"></div>
<div class="dialogCloseButton"></div>
@ -37,7 +37,7 @@
</div>
</el-card>
<el-card>
<el-form :model="dataForm" :rules="dataRule" label-width="90px" ref="dataForm" size="mini">
<el-form :model="dataForm" :rules="dataRule" label-width="120px" ref="dataForm" size="mini">
<el-row :gutter="24" style="height: 45px;">
<el-col :span="8">
<el-form-item prop="category" label="所属类别" :rules="[

285
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/InfoBoard/index.vue

@ -1,22 +1,22 @@
<template>
<div>
<transition>
<div v-if="dialogInfoLeft" class="dialog_info">
<div v-if="visible" class="dialog_info">
<div class="dialog_info_left">
<div class="dialog_head">
<div class="tit">{{ dialogTit }}</div>
<img class="btnCls" src="@/assets/jihe/images/dialog/ibCls.png" alt="" @click="closeDialogBtnFn">
<img class="btnCls" src="@/assets/jihe/images/dialog/ibCls.png" alt="" @click="onClose">
<img class="deco" src="@/assets/jihe/images/dialog/ibHeadDeco.png" alt="">
</div>
<div class="dialogContent">
<div v-if="dialogInfoList.length > 0" class="dialogContent_box" style="height: 100%;">
<div class="dialogContent_box_item" v-for="(item, i) in dialogInfoList" :key="i.id">
<div class="dialogContent_box_item" v-for="(item, i) in dialogInfoList" :key="i">
<div class="dialogContent_l">
<div class="dialogContent_l_xsq"
:style="{ 'width': processString(i.screenSize, 'w') / getScrollSz(processString(i.screenSize, 'w')) + 'px', 'height': processString(i.screenSize, 'h') / getScrollSz(processString(i.screenSize, 'w')) + 'px', 'justify-content': getTextAlign(i.tcontents[0].formatStyle) }">
<div class="dialogContent_l_xsq_txt"
:style="{ 'font-size': i.tcontents[0].fontSize / getScrollSz(processString(i.screenSize, 'w')) + 'px', 'color': '#' + i.tcontents[0].fontColor, 'font-family': i.tcontents[0].fontType, }"
v-html="i.tcontents[0].content.replace(/\n|\r\n/g, '<br>').replace(
:style="boardBoxStyle(item)">
<div
:style="boardConStyle(item)"
v-html="item.tcontents[0].content.replace(/\n|\r\n/g, '<br>').replace(
/ /g,
'&nbsp')"></div>
</div>
@ -31,7 +31,7 @@
<div class="dialogContent_box_empty">暂无数据</div>
</div>
<div class="dialogContent_bottom">
<el-tabs v-model="activeName" @tab-click="tabClickFn">
<el-tabs v-model="activeTab" @tab-click="tabClickFn">
<el-tab-pane label="详情信息" name="first">
<div class="show_bottom_tab_box">
<div class="show_bottom_tab_item" v-for="item in tabDataInfoList" :key="item.id">
@ -47,40 +47,39 @@
<div class="show_bottom_btn_add" @click="addMoDataInfoFn(2, 2)">添加信息</div>
<div class="show_bottom_btn_del" @click="InformationReleaseFn">信息发布</div>
</div>
<div class="dialogContent_ce" @click="showCeInfoFn">
<img class="show_ce_img" src="@/assets/screen/xtb/leftd.png" alt=""
:style="{ 'transform': dialogInfoRight ? 'rotate(0deg)' : 'rotate(180deg)' }">
<div class="show_ce_txt">信息模板</div>
<div class="sideSwitch" @click="showSidePanel">
<img class="img" src="@/assets/screen/xtb/leftd.png" alt=""
:style="{ 'transform': isShowTemplate ? 'rotate(0deg)' : 'rotate(180deg)' }">
<div class="txt">信息模板</div>
</div>
<!-- 原型图上没有附近相机代码里暂时关闭
<div class="dialogContent_ce" style="top:36%;" @click="showCameraInfoFn">
<img class="show_ce_img" src="@/assets/screen/xtb/leftd.png" alt=""
<div class="sideSwitch" style="top:36%;" @click="showCameraInfoFn">
<img class="img" src="@/assets/screen/xtb/leftd.png" alt=""
:style="{ 'transform': dialogInfoCamera ? 'rotate(0deg)' : 'rotate(180deg)' }">
<div class="show_ce_txt">附近像机</div>
<div class="txt">附近像机</div>
</div> -->
</div>
</div>
<!-- 信息模板 -->
<div v-if="dialogInfoRight" class="dialog_info_right">
<div v-if="isShowTemplate" class="dialog_info_right">
<el-collapse v-model="activeNames" @change="panelChangeFn">
<el-collapse-item v-for="item in moBanList" :key="item.dictCode" :title="item.dictLabel"
<el-collapse-item v-for="item in templateList" :key="item.dictCode" :title="item.dictLabel"
:name="item.dictCode">
<div class="dialog_info_right_show">
<div class="dialogContent_box" style="overflow-y: visible;">
<div class="dialogContent_box_item" v-for="i in item.mbList" :key="i.id">
<div class="dialogContent_box_item" v-for="item1 in item.mbList" :key="item1.id">
<div class="dialogContent_l" style="width:16vw;">
<div class="dialogContent_l_xsq"
:style="{ 'width': processString(i.screenSize, 'w') / getScrollSz(processString(i.screenSize, 'w')) + 'px', 'height': processString(i.screenSize, 'h') / getScrollSz(processString(i.screenSize, 'w')) + 'px', 'justify-content': getTextAlign(i.tcontents[0].formatStyle) }">
<div class="dialogContent_l_xsq_txt"
:style="{ 'font-size': i.tcontents[0].fontSize / getScrollSz(processString(i.screenSize, 'w')) + 'px', 'color': '#' + i.tcontents[0].fontColor, 'font-family': i.tcontents[0].fontType }"
v-html="i.tcontents[0].content.replace(/\n|\r\n/g, '<br>').replace(
/ /g,
'&nbsp')"></div>
:style="boardBoxStyle(item1)">
<div
:style="boardConStyle(item1)"
v-html="item1.tcontents[0].content.replace(/\n|\r\n/g, '<br>').replace(/ /g, '&nbsp')"></div>
</div>
</div>
<div class="dialogContent_r" style="width: 3.5vw;">
<div @click="putLeftFn(i)" class="show_r_btn dialogContent_r_btn3"></div>
<div @click="putLeftFn(item1)" class="show_r_btn dialogContent_r_btn3"></div>
</div>
</div>
</div>
@ -88,6 +87,8 @@
</el-collapse-item>
</el-collapse>
</div>
<!-- 附近相机 -->
<div v-if="dialogInfoCamera" class="dialog_info_right" style="padding:0;">
<div class="dialog_head" style="height:4vh;">
@ -149,27 +150,182 @@
import addBoard from './addinfo.vue'
import editBoard from './editInfo.vue'
import { listDevice, invokedFunction, getDeviceRealtimeProperty } from '@/api/device/device.js'
import infoBoardTestData from "@/common/infoBoardTestData.js"
export default {
name: 'InfoBoard',
data(){
return {
dialogTit: '门架式可变信息标志YK16+270',
dialogInfoLeft: true,
dialogInfoRight: false,
isShowTemplate: false,
dialogInfoCamera: false,
dialogInfoList:[]
dialogInfoList: [],
moBanList: [],
moBanDataHandList: [],
_moBanDataList: [
{
id: 1001,
bt: '日常通用',
mbList: [
{ id: 305, txt: '谨慎驾驶', w: 768, h: 64, col: '#FFFF00', fz: 48, pdl: 288, pdt: 8, fm: '黑体' },
{ id: 306, txt: '谨慎驾驶 注意安全', w: 768, h: 160, col: '#03FF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' },
{ id: 307, txt: '谨慎驾驶 注意安全', w: 768, h: 160, col: '#FF0000', fz: 60, pdl: 0, pdt: 0, fm: '黑体' },
{ id: 308, txt: '谨慎驾驶, <br/> 注意安全', w: 768, h: 160, col: '#03FF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }
]
},
{ id: 1002, bt: '施工管控', mbList: [{ id: 309, txt: '道路施工, <br/> 谨慎驾驶', w: 768, h: 160, col: '#FFFF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }] },
{ id: 1003, bt: '恶劣天气', mbList: [{ id: 309, txt: '救援 拨打96659', w: 768, h: 160, col: '#FFFF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }] },
{ id: 1004, bt: '交通拥堵', mbList: [{ id: 309, txt: '救援 拨打96659', w: 768, h: 160, col: '#FFFF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }] },
{ id: 1005, bt: '突发事件', mbList: [{ id: 309, txt: '救援 拨打96659', w: 768, h: 160, col: '#FFFF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }] },
{ id: 1006, bt: '警情播报', mbList: [{ id: 309, txt: '救援 拨打96659', w: 768, h: 160, col: '#FFFF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }] }
],
activeNames:[1001 , 1002],
activeTab:"first",
moBanDataList: [{
dictCode: 1001,
dictLabel: "日常通用",
mbList: [
{
id: 3001,
screenSize: "200*80",
tcontents: [
{
content: "谨慎驾驶 注意安全",
formatStyle: 0,
fontSize:"24",
fontType:"微软雅黑",
fontColor:"0000FF"
}
]
}
]
}, {
dictCode: 1002,
dictLabel: "施工管理",
mbList: [
{
id: 3002,
screenSize: "800*90",
tcontents: [
{
content: "道路施工<br>缓慢驾驶",
formatStyle: 0,
fontSize: "18",
fontType: "微软雅黑",
fontColor: "FFFF00"
}
]
}
]
}],
tabDataInfoList: [],
tabInfoList: [
{ id: 401, tit: '设备名称', txt: '门架式可变信息标志', col: '#fff' },
{ id: 402, tit: '道路名称', txt: 'G35济菏高速', col: '#fff' },
{ id: 403, tit: '所属机构', txt: '山东高速济南发展公司', col: '#fff' },
{ id: 404, tit: '设备桩号', txt: 'K094+079', col: '#fff' },
{ id: 405, tit: '设备厂商', txt: '光电比特', col: '#fff' },
{ id: 406, tit: '设备状态', txt: '离线', col: '#888' }
],
cameraDataVideoList: [],
cameraDataList: [
{ id: 3001, txt: '设备名称', val: '疲劳唤醒设备1' },
{ id: 3002, txt: '设备编号', val: 'G00030497B0180001' },
{ id: 3003, txt: '设备桩号', val: 'K097+900' },
{ id: 3004, txt: '经/纬度', val: '117.071152/35.910659' },
{ id: 3005, txt: '道路名称', val: 'G35济菏高速' },
{ id: 3006, txt: '道路状况', val: '正常' },
{ id: 3007, txt: '方向', val: '菏泽' }
],
cameraBtnList: [
{ id: 4001, cmd: 23, dir: 'left', le: '26%', to: '33%', ro: 0 },
{ id: 4002, cmd: 21, dir: 'up', le: '46%', to: '4%', ro: 90 },
{ id: 4003, cmd: 24, dir: 'right', le: '65%', to: '33%', ro: 180 },
{ id: 4004, cmd: 22, dir: 'downward', le: '46%', to: '62%', ro: 267 }
],
cameraControlList: [
{ id: 5001, txt: '变倍', numL: 11, numR: 12 },
{ id: 5002, txt: '光圈', numL: 16, numR: 15 },
{ id: 5003, txt: '聚焦', numL: 14, numR: 13 }
]
}
},
props:{
visible:{
type:Boolean,
default:false
}
},
components: { addBoard, editBoard },
created() {
// this.getTemplateSeries();
},
computed:{
},
mounted() {
//
this.dialogInfoList = this.boardDataConvert(infoBoardTestData);
this.templateList = this.moBanDataList;
let deviceState = "online";
this.tabDataInfoList = [
{ id: 401, tit: '设备名称', txt: "门架式可变信息标志", col: '#fff' },
{ id: 402, tit: '道路名称', txt: "G35济菏高速", col: '#fff' },
{ id: 403, tit: '所属机构', txt: "山东高速济南发展公司", col: '#fff' },
{ id: 404, tit: '设备桩号', txt: "K094+079", col: '#fff' },
{ id: 405, tit: '设备厂商', txt: "光电比特", col: '#fff' },
{ id: 406, tit: '设备状态', txt: deviceState == 'online' ? '在线' : '离线', col: deviceState == 'online' ? '#10d269' : '#888' }
]
},
methods: {
boardBoxStyle(node) {
let arr = node.screenSize.split("*");
let scale = this.getScrollSz(+arr[0]);
let obj = {
'width':`${+arr[0] / scale}px`,
'height':`${+arr[1] / scale}px`,
'justify-content': this.getTextAlign(node.tcontents[0].formatStyle)
}
return obj;
},
boardConStyle(node) {
let fSize = +node.tcontents[0].fontSize;
let scale = this.getScrollSz(fSize);
let obj = {
'font-size': `${fSize/scale}px`,
'color': '#' + node.tcontents[0].fontColor,
'font-family': node.tcontents[0].fontType
}
return obj;
},
//
boardDataConvert(origin){
let rst = origin.map(item => {
return {
...item,
STAY: item.playbackDuration,
inScreenMode: item.screenEntryMethod,
screenSize: item.displayAreaWidth + '*' + item.displayAreaHeight,
tcontents: [
{
...item,
fontSpacing: item.fontSpacing,
fontSize: parseInt(item.fontSize.replace(/\D/g, '')),
fontType: item.font,
fontColor: item.foregroundColor.toUpperCase(),
formatStyle: item.horizontalAlignment,
STAY: item.playbackDuration / 10,
content: item.textContent.replaceAll('\\,', ',').replaceAll('\\=', '=').replaceAll('\\\\n', '\n')
}
]
}
});
return rst;
},
//
mapClickEvent(e) {
this.dialogInfoList = []
console.log('父组件地图点位', e)
this.videoUrl = ''
this.cameraOptList = []
this.dialogInfoLeft = true
this.mapIds = e.target._opts.extData.deviceId
this.screenDataSize = e.target._opts.extData.sceenSize
this.dialogTit = e.target._opts.extData.deviceName
@ -182,8 +338,8 @@ export default {
{ id: 405, tit: '设备厂商', txt: e.target._opts.extData.brind, col: '#fff' },
{ id: 406, tit: '设备状态', txt: e.target._opts.extData.deviceState == 'online' ? '在线' : '离线', col: e.target._opts.extData.deviceState == 'online' ? '#10d269' : '#888' }
]
this.getTemplateHeaderFn()
this.onSubmit(this.mapIds)
this.getTemplateSeries()
this.updateList(this.mapIds)
this.getEnergyCameraBoardFn(e.target._opts.extData.pileNumber)
// this.mapDialogTop = e.pixel.y + 'px'
// this.mapDialogLeft = e.pixel.x + 'px'
@ -328,36 +484,16 @@ export default {
})
loading.close()
})
this.onSubmit()
this.updateList()
},
//
onSubmit(deviceId) {
updateList(deviceId) {
getDeviceRealtimeProperty(deviceId, '3A', { async: false })
.then(res => {
var contentsA = res.data['3A'].content
console.log('回读消息--1111111111---', contentsA)
this.dialogInfoList = contentsA.map(item => {
return {
...item,
STAY: item.playbackDuration,
inScreenMode: item.screenEntryMethod,
screenSize: item.displayAreaWidth + '*' + item.displayAreaHeight,
tcontents: [
{
...item,
fontSpacing: item.fontSpacing,
fontSize: parseInt(item.fontSize.replace(/\D/g, '')),
fontType: item.font,
fontColor: item.foregroundColor.toUpperCase(),
formatStyle: item.horizontalAlignment,
STAY: item.playbackDuration / 10,
content: item.textContent.replaceAll('\\,', ',').replaceAll('\\=', '=').replaceAll('\\\\n', '\n')
}
]
}
})
this.dialogInfoList = this.boardDataConvert(contentsA);
console.log('hui1111111111111', this.dialogInfoList)
})
@ -377,21 +513,21 @@ export default {
}
})*/
},
//
getTemplateHeaderFn() {
this.moBanList = []
//
getTemplateSeries() {
this.templateList = []
getDicts('iot_template_category').then(res => {
this.moBanDataHandList = res.data
this.activeNames = res.data.map(item => {
return item.dictCode
})
this.getTemplateFn()
this.getBoardTemplate()
})
},
//
getTemplateFn() {
getBoardTemplate() {
getAllVmsTemplate({ devicePixel: this.screenDataSize }).then(res => {
this.moBanList = this.moBanDataHandList.map((item, index) => {
this.templateList = this.moBanDataHandList.map((item, index) => {
if (item.dictSort === index) {
return {
...item,
@ -463,7 +599,7 @@ export default {
return item
})
console.log('修改后的数据', this.dialogInfoList)
// this.getTemplateHeaderFn()
// this.getTemplateSeries()
this.$forceUpdate()
},
@ -481,19 +617,19 @@ export default {
tabClickFn(tab, event) {
console.log(tab, event)
},
closeDialogBtnFn() {
this.dialogInfoLeft = false
this.dialogInfoRight = false
onClose() {
this.$emit("update:visible", false);
this.isShowTemplate = false
},
showCeInfoFn() {
showSidePanel() {
if (this.dialogInfoCamera) {
this.dialogInfoCamera = false
}
this.dialogInfoRight = !this.dialogInfoRight
this.isShowTemplate = !this.isShowTemplate
},
showCameraInfoFn() {
if (this.dialogInfoRight) {
this.dialogInfoRight = false
if (this.isShowTemplate) {
this.isShowTemplate = false
}
this.dialogInfoCamera = !this.dialogInfoCamera
},
@ -750,27 +886,28 @@ export default {
font-size: 14px;
margin-left: 0.5vw;
}
.dialogContent_ce {
.sideSwitch {
position: absolute;
right: 0%;
top: 0%;
width: 24px;
height: 95px;
line-height: 1.2;
padding: 0.5vh 0;
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
border-radius: 0px 0px 0px 0px;
opacity: 1;
text-align: center;
cursor: pointer;
}
.show_ce_img {
.img {
width: 15px;
height: 10px;
border: none;
transition: transform 0.3s ease; /* 过渡效果 */
}
.show_ce_txt {
}
.txt {
color: #fff;
font-size: 13px;
}
}
.dialogContent_box_empty {
font-size: 14px;

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

@ -79,6 +79,7 @@ export default {
this.tabContentData = item.children;
},
handleDevice: debounce(function (item) {
this.$emit("onClickItem", item);
const key = `${this.active}/${item.title}`;
eventMap[`${key}${item.status ? "_close" : ""}`]?.call(this, item);

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

@ -8,14 +8,14 @@
<FocusedMonitoring class="card-menu" />
<!-- -->
<RoadAndEvents class="content-l-b card-menu" />
<RoadAndEvents class="content-l-b card-menu" @onClickItem="onClickItem"/>
</div>
<!-- 右侧 -->
<ConditionStatistics class="content-r card-menu" />
</section>
<InfoBoard></InfoBoard>
<InfoBoard :visible.sync="isShowInfoBoard"></InfoBoard>
<footer class="footer card-menu">
<div class="footer-title">
@ -49,6 +49,11 @@ export default {
AMapContainer,
InfoBoard
},
data(){
return{
isShowInfoBoard:false
}
},
provide() {
return {
getMap: () => this.$refs.AMapContainerRef.getMapInstance()
@ -64,6 +69,11 @@ export default {
// translateXElement.style.transform = translateXElement.style.transform ? "" : `translateY(calc(100% - 36px))`
translateXElement.style.height = translateXElement.style.height != "36px" ? "36px" : `100%`
},
onClickItem(item){
if(item.title.includes("情报板")){
this.isShowInfoBoard = true;
}
}
}
}

0
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/perception/images/export.svg → ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/images/export.svg

Before

Width:  |  Height:  |  Size: 624 B

After

Width:  |  Height:  |  Size: 624 B

0
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/perception/images/insert.svg → ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/images/insert.svg

Before

Width:  |  Height:  |  Size: 385 B

After

Width:  |  Height:  |  Size: 385 B

0
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/perception/images/refresh.svg → ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/images/refresh.svg

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

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

@ -1,25 +1,25 @@
<template>
<div class='RoadNetworkMonitoring2'>
<Tabs :panels="panels" :value="activeName" type="card" />
<Tabs :panels="panels" :default-active="activeName" />
<!-- 搜索栏 -->
<div class="filter">
<div>
<ButtonGradient @click="onAddNew">
<template #prefix>
<img src="@screen/images/insert.svg" />
<img src="./images/insert.svg" />
</template>
新增
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/export.svg" />
<img src="./images/export.svg" />
</template>
导出
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/refresh.svg" />
<img src="./images/refresh.svg" />
</template>
刷新
</ButtonGradient>
@ -31,7 +31,7 @@
<!-- 内容 -->
<div class="body">
<RoadStateCard v-for="(item, index) in data" :cardData="item" :key="index"
:lastBtnText="item.state === 3 ? '总结' : '处置'" firstBtnText="详情" @firstBtnClick="firstBtnClick" />
:lastBtnColor="item.state === 5 ? '#007FF4' : void 0" :lastBtnText="item.state === 5 ? '去确认' : void 0" @firstBtnClick="firstBtnClick"/>
</div>
<!-- 分页 -->
@ -39,8 +39,11 @@
<Pagination :total="90" />
</div>
<!-- "详情"弹出框 -->
<EventDetailDialog :visible="eventDetailDialogVisible" @update:value="handleClose" />
<!-- "新增"弹出框 -->
<FormEvent :visible="isShowAddNew" @close="onCloseAddNew" />
</div>
</template>
@ -52,7 +55,6 @@ import Pagination from '@screen/components/Pagination.vue';
import InputSearch from '@screen/components/InputSearch/index.vue';
import EventDetailDialog from "./EventDetailDialog/index";
import FormEvent from "./FormEvent/index";
export default {
name: 'RoadNetworkMonitoring2',
components: {
@ -78,18 +80,26 @@ export default {
})()
})),
activeName: "感知事件",
activeName: "告警事件(20)",
panels: [
{
label: "感知事件",
key: "感知事件"
label: "告警事件(20)",
key: "告警事件(20)"
},
{
label: "交通事件",
key: "交通事件"
}
label: "待确认事件(125)",
key: "待确认事件(125)"
},
{
label: "处置中事件(230)",
key: "处置中事件(230)"
},
{
label: "已处置事件(76)",
key: "已处置事件(76)"
},
],
eventDetailDialogVisible: false,
eventDetailDialogVisible:false,
isShowAddNew: false
}
},

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

@ -1,142 +0,0 @@
<template>
<div class='RoadNetworkMonitoring2'>
<Tabs :panels="panels" :default-active="activeName" />
<!-- 搜索栏 -->
<div class="filter">
<div>
<ButtonGradient>
<template #prefix>
<img src="./images/insert.svg" />
</template>
新增
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="./images/export.svg" />
</template>
导出
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="./images/refresh.svg" />
</template>
刷新
</ButtonGradient>
</div>
<InputSearch style="width: 402px;" />
</div>
<!-- 内容 -->
<div class="body">
<RoadStateCard v-for="(item, index) in data" :cardData="item" :key="index"
:lastBtnColor="item.state === 5 ? '#007FF4' : void 0" :lastBtnText="item.state === 5 ? '去确认' : void 0" />
</div>
<!-- 分页 -->
<div class="footer">
<Pagination :total="90" />
</div>
</div>
</template>
<script>
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
import Tabs from '@screen/components/Tabs/index.vue';
import RoadStateCard from '@screen/components/RoadStateCard/index.vue';
import Pagination from '@screen/components/Pagination.vue';
import InputSearch from '@screen/components/InputSearch/index.vue';
export default {
name: 'RoadNetworkMonitoring2',
components: {
ButtonGradient,
Tabs,
Pagination,
RoadStateCard,
InputSearch
},
data() {
return {
data: Array.from({ length: 15 }).map(() => ({
time: "2023.12.22 13:00:00",
source: "视频智能识别",
location: "k100+000",
direction: "济南方向",
state: (() => {
const min = 1;
const max = 5;
return Math.floor(Math.random() * (max - min + 1)) + min;
})()
})),
activeName: "告警事件(20)",
panels: [
{
label: "告警事件(20)",
key: "告警事件(20)"
},
{
label: "待确认事件(125)",
key: "待确认事件(125)"
},
{
label: "处置中事件(230)",
key: "处置中事件(230)"
},
{
label: "已处置事件(76)",
key: "已处置事件(76)"
},
]
}
},
methods: {
}
}
</script>
<style lang='scss' scoped>
.RoadNetworkMonitoring2 {
padding: 21px;
height: 100%;
display: flex;
flex-direction: column;
z-index: 6;
width: 100%;
height: 100%;
.filter {
height: 60px;
display: flex;
justify-content: space-between;
align-items: center;
>div {
display: flex;
gap: 6px;
}
}
.body {
flex: 1;
overflow: hidden;
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 24px;
// grid-row-gap: 9px;
// grid-column-gap: 9px;
grid-auto-rows: min-content;
}
.footer {
margin-top: 15px;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
}
}
</style>

2
ruoyi-ui/vue.config.js

@ -7,7 +7,7 @@ function resolve(dir) {
const name = process.env.VUE_APP_TITLE || "雅典娜"; // 网页标题
const port = process.env.port || process.env.npm_config_port || 1024; // 端口
const port = process.env.port || process.env.npm_config_port || 7081; // 端口
// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions

Loading…
Cancel
Save