Browse Source

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

wangqin
zhangzhang 7 months ago
parent
commit
a72d01dbe2
  1. 2
      ruoyi-ui/src/App.vue
  2. 6
      ruoyi-ui/src/common/menuData.js
  3. 2
      ruoyi-ui/src/plugins/modal.js
  4. 32
      ruoyi-ui/src/views/JiHeExpressway/components/Decorations/BackgroundClip.vue
  5. 8
      ruoyi-ui/src/views/JiHeExpressway/components/Dialog/index.vue
  6. 39
      ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/EarlyWarning.vue
  7. 2
      ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/UserArea.vue
  8. 91
      ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/WarningList.vue
  9. 56
      ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/index.vue
  10. 4
      ruoyi-ui/src/views/JiHeExpressway/components/Video/videoStream.js
  11. 9
      ruoyi-ui/src/views/JiHeExpressway/components/VideoMulti/videoStream.js
  12. 1
      ruoyi-ui/src/views/JiHeExpressway/components/infoBoard/BoardInfoEditor.vue
  13. 3
      ruoyi-ui/src/views/JiHeExpressway/components/infoBoard/BoardRecordPreview.vue
  14. 7
      ruoyi-ui/src/views/JiHeExpressway/images/home-FrameControl/FrameControl.svg
  15. 6
      ruoyi-ui/src/views/JiHeExpressway/images/home-FrameControl/FrameControl1.svg
  16. 53
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/TrafficIncidents/index.vue
  17. 320
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue
  18. 15
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue
  19. 1
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/httpList.js
  20. 3
      ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/AddNEditDialog.vue
  21. 58
      ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/TaskItem.vue
  22. 12
      ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/taskEditDialog.vue
  23. 85
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/topology/index.vue
  24. BIN
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/topology/left-bg.png
  25. 48
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/index.vue
  26. 4
      ruoyi-ui/src/views/JiHeExpressway/utils/api/batch.js
  27. 6
      ruoyi-ui/vue.config.js

2
ruoyi-ui/src/App.vue

@ -9,7 +9,7 @@
<template> <template>
<div id="app"> <div id="app">
<router-view /> <router-view />
<websocket /> <!-- <websocket /> -->
<!-- <websocket_phone /> --> <!-- <websocket_phone /> -->
</div> </div>
</template> </template>

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

@ -37,6 +37,12 @@ export default [
name: "perceptionTrafficSituation", name: "perceptionTrafficSituation",
component: "perception/trafficSituation/index.vue", component: "perception/trafficSituation/index.vue",
}, },
{
title: "网络拓扑",
name: "perceptionTopology",
path: "/perception/topology",
component: "perception/topology/index.vue"
}
], ],
}, },
{ {

2
ruoyi-ui/src/plugins/modal.js

@ -9,7 +9,7 @@ export default {
}, },
// 错误消息 // 错误消息
msgError(content) { msgError(content) {
Message.error(content) Message.error('commerror:'+content)
}, },
// 成功消息 // 成功消息
msgSuccess(content) { msgSuccess(content) {

32
ruoyi-ui/src/views/JiHeExpressway/components/Decorations/BackgroundClip.vue

@ -1,14 +1,7 @@
<template> <template>
<div <div
class="BackgroundClip" class="BackgroundClip"
:style="{ :style="compStyle"
'--clip-path': clipPath,
'--border-path': borderPath,
'--border-color': borderColor,
'--bg-color': bgColor,
width: width,
top: top,
}"
:class="borderPath ? 'hasBorder' : 'noBoarder'" :class="borderPath ? 'hasBorder' : 'noBoarder'"
> >
<slot /> <slot />
@ -27,6 +20,10 @@ export default {
type: String, type: String,
default: null, default: null,
}, },
right: {
type: String,
default: null,
},
clipPath: { clipPath: {
type: String, type: String,
default: null, default: null,
@ -44,6 +41,25 @@ export default {
default: null, default: null,
}, },
}, },
computed:{
compStyle(){
let obj = {
'--clip-path': this.clipPath,
'--border-path': this.borderPath,
'--border-color': this.borderColor,
'--bg-color': this.bgColor,
width: this.width,
top: this.top,
}
if(this.right){
obj["margin-left"] = "auto";
obj["margin-right"] = this.right;
}else{
obj["margin"] = "auto";
}
return obj;
}
}
}; };
</script> </script>

8
ruoyi-ui/src/views/JiHeExpressway/components/Dialog/index.vue

@ -6,7 +6,7 @@
clipPath="polygon(calc(100% - var(--clip-width)) 0, 100% var(--clip-width), 100% 100%, var(--clip-width) 100%, 0 calc(100% - var(--clip-width)), 0 0)" clipPath="polygon(calc(100% - var(--clip-width)) 0, 100% var(--clip-width), 100% 100%, var(--clip-width) 100%, 0 calc(100% - var(--clip-width)), 0 0)"
borderColor="linear-gradient(180deg, rgba(78, 174, 204, .9), rgba(78, 174, 204, 0))" borderColor="linear-gradient(180deg, rgba(78, 174, 204, .9), rgba(78, 174, 204, 0))"
bgColor="linear-gradient(180deg, rgba(14, 69, 92, 0.9) 0%, rgba(20, 89, 119, 0.9) 100%)" bgColor="linear-gradient(180deg, rgba(14, 69, 92, 0.9) 0%, rgba(20, 89, 119, 0.9) 100%)"
ref="DialogContentRef" :width="width" :top="top"> ref="DialogContentRef" :width="width" :top="top" :right="right">
<div class="dialog-title"> <div class="dialog-title">
<img class="title-icon" src="@screen/images/dialog/title-icon.svg" /> <img class="title-icon" src="@screen/images/dialog/title-icon.svg" />
<span>{{ title }}</span> <span>{{ title }}</span>
@ -52,6 +52,10 @@ export default {
type: String, type: String,
default: null, default: null,
}, },
right: {
type: String,
default: null,
},
title: { title: {
type: String, type: String,
}, },
@ -145,7 +149,7 @@ export default {
position: relative; position: relative;
box-sizing: border-box; box-sizing: border-box;
top: 20%; top: 20%;
margin: auto; // margin: auto;
padding-bottom: 20px; padding-bottom: 20px;
// margin: calc(var(--border-width) / 2); // margin: calc(var(--border-width) / 2);

39
ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/EarlyWarning.vue

@ -0,0 +1,39 @@
<template>
<div class="early_warning">
<p @click="onShowCtt">
<i class="el-icon-message-solid" v-if="isShowCtt"></i>
<i class="el-icon-bell" v-else></i>
</p>
<Dialog v-model="isShowCtt" title="事件预警" width="600px" top="100px" right="30px" noneMask>
<WarningList></WarningList>
</Dialog>
</div>
</template>
<script>
import Dialog from "@screen/components/Dialog/index.vue";
import WarningList from "./WarningList.vue";
export default {
data() {
return {
isShowCtt:false
};
},
components: {
Dialog, WarningList
},
computed: {
},
methods: {
onShowCtt(){
this.isShowCtt = !this.isShowCtt;
}
}
};
</script>
<style lang="scss" scoped>
.early_warning{
}
</style>

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

@ -2,7 +2,7 @@
<div class="operations"> <div class="operations">
<div class="opCon"> <div class="opCon">
<div class="menu_recent" @click="onSwitchRecent"> <div class="menu_recent" @click="onSwitchRecent">
<i class="iconfont icon-menuactive" v-if="menu.isRecentOpen"></i> <i class="iconfont icon-menuactive" v-if="menu.isRecentOpen"></i>
<i class="iconfont icon-menu" v-else></i> <i class="iconfont icon-menu" v-else></i>
</div> </div>
<el-dropdown class="userBox"> <el-dropdown class="userBox">

91
ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/WarningList.vue

@ -0,0 +1,91 @@
<template>
<div class="warning_list">
<el-tabs v-model="activeTab" @tab-click="onChangeTab">
<el-tab-pane label="告警事件" name="first" />
<el-tab-pane label="待确认事件" name="second" />
</el-tabs>
<div>
<Table :data="tableData" :show-header="false">
<ElTableColumn prop="remark" width="280" />
</Table>
</div>
<div class="footer">
<Pagination @current-change="getMainData" @size-change="onSizeChange" width="'100%'"
:page-sizes="[10, 20, 30, 40, 50]" :page-size="searchData.pageSize" :current-page.sync="searchData.pageNum"
layout="total, sizes, prev, pager, next" :total="total">
</Pagination>
</div>
</div>
</template>
<script>
import request from "@/utils/request";
import Table from '@screen/components/Table.vue';
import Pagination from '@screen/components/Pagination.vue';
export default {
data() {
return {
activeTab: "first",
tableData: [],
total: 10,
searchData: {
pageSize: 10,
pageNum: 1,
},
};
},
components: {
Table,
Pagination
},
computed: {
},
mounted() {
this.getMainData();
},
methods: {
onChangeTab(tab, event) {
console.log(tab, event);
this.getMainData();
},
getMainData() {
if (this.activeTab == 'first') {
request({
url: `perceivedEvents/warning/perceivedEventsList?pageNum=${this.searchData.pageNum}&pageSize=${this.searchData.pageSize}`,
method: "POST",
data: {}
})
.then((result) => {
if (result.code != 200) return;
this.tableData = result.rows;
this.total = result.total;
})
} else if (this.activeTab == 'second') {
request({
url: `dc/system/event/list?eventState=0&pageSize=${this.searchData.pageSize}&pageNum=${this.searchData.pageNum}`,
method: "GET",
// params: {}
})
.then((result) => {
if (result.code != 200) return;
result.rows.forEach(item => {
item.remark = item.occurrenceTime + " " + item.stakeMark + " " + item.direction + " 发生" + item.stringEventType + "( " + item.eventSubclass + ")事件"
})
this.tableData = result.rows;
this.total = result.total;
})
}
},
onSizeChange(pageSize) {
this.searchData.pageSize = pageSize;
this.getMainData();
},
}
};
</script>
<style lang="scss" scoped>
.warning_list {}
</style>

56
ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/index.vue

@ -4,7 +4,7 @@
<Clock class="time"></Clock> <Clock class="time"></Clock>
<!-- 左侧菜单 --> <!-- 左侧菜单 -->
<CustomMenu :menuData="menuLeft" prefix="l" class="leftMenu"> <CustomMenu :menuData="menuLeft" prefix="l" class="leftMenu">
<!--@onChange="onChange" :activeIndex="activeIndex" --> <!--@onChange="onChange" :activeIndex="activeIndex" -->
</CustomMenu> </CustomMenu>
<!-- 中间标题 --> <!-- 中间标题 -->
<div class="vis-title"> <div class="vis-title">
@ -12,9 +12,11 @@
<img class="title-img" src="../../images/title.png" /> <img class="title-img" src="../../images/title.png" />
</div> </div>
<!-- 右侧菜单 --> <!-- 右侧菜单 -->
<CustomMenu :menuData="menuRight" prefix="r" class="rightMenu"> <CustomMenu :menuData="menuRight" prefix="r" class="rightMenu">
<!-- @onChange="onChange" :activeIndex="activeIndex" --> <!-- @onChange="onChange" :activeIndex="activeIndex" -->
</CustomMenu> </CustomMenu>
<!-- 预警 -->
<EarlyWarning class="early_warning"></EarlyWarning>
<UserArea class="topButton"></UserArea> <UserArea class="topButton"></UserArea>
</div> </div>
<RecentPages class="recent"></RecentPages> <RecentPages class="recent"></RecentPages>
@ -24,6 +26,7 @@
import menuData from "@/common/menuData"; import menuData from "@/common/menuData";
import CustomMenu from "./CustomMenu.vue"; import CustomMenu from "./CustomMenu.vue";
import Clock from "./Clock.vue"; import Clock from "./Clock.vue";
import EarlyWarning from './EarlyWarning.vue'
import UserArea from './UserArea.vue' import UserArea from './UserArea.vue'
import RecentPages from "../RecentPages/index.vue"; import RecentPages from "../RecentPages/index.vue";
export default { export default {
@ -36,6 +39,7 @@ export default {
}; };
}, },
components: { components: {
EarlyWarning,
CustomMenu, CustomMenu,
Clock, Clock,
UserArea, UserArea,
@ -116,53 +120,9 @@ export default {
width: 500px; width: 500px;
} }
.early_warning{ width: 26px; overflow: hidden;}
.topButton{ .topButton{
width: 190px; width: 164px;
}
.user {
width: 200px;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
font-weight: normal;
color: #fff;
line-height: 16px;
.name {
display: inline-block;
margin: 0 10px;
}
.icon {
display: inline-block;
margin: 0 13px;
}
.icon-001 {
display: inline-block;
width: 12px;
height: 14px;
}
.icon-002 {
display: inline-block;
width: 9px;
height: 5px;
}
.icon-003 {
display: inline-block;
width: 18px;
height: 16px;
}
.icon-004 {
display: inline-block;
width: 15px;
height: 15px;
}
} }
} }
.recent{ .recent{

4
ruoyi-ui/src/views/JiHeExpressway/components/Video/videoStream.js

@ -93,7 +93,7 @@ async function getUrl({ camId, url, pileNum, rangeIndex } = {}) {
if (camId) { if (camId) {
const { code, data } = await getCameraStream(camId).catch(() => ({})); const { code, data } = await getCameraStream(camId).catch(() => ({}));
if (code != 200) { if (code != 200) {
Message.warning("未获取到当前相机的播放地址"); // Message.warning("未获取到当前相机的播放地址");
return; return;
} }
@ -101,7 +101,7 @@ async function getUrl({ camId, url, pileNum, rangeIndex } = {}) {
} }
if (!url) { if (!url) {
Message.warning("未获取到当前相机的播放地址"); // Message.warning("未获取到当前相机的播放地址");
return Promise.reject("获取 url 失败!"); return Promise.reject("获取 url 失败!");
} }

9
ruoyi-ui/src/views/JiHeExpressway/components/VideoMulti/videoStream.js

@ -34,6 +34,7 @@ const testFlvUrl =
* @returns * @returns
*/ */
export async function openVideoStream(container, { camId, url } = {}) { export async function openVideoStream(container, { camId, url } = {}) {
console.log(camId,333)
if (camId) { if (camId) {
const { code, data } = await getCameraStream(camId).catch(() => ({})); const { code, data } = await getCameraStream(camId).catch(() => ({}));
@ -65,16 +66,18 @@ export async function openVideoStream(container, { camId, url } = {}) {
} }
async function getUrl({ camId} = {}) { async function getUrl({ camId} = {}) {
if(!camId){
return
}
const { code, data } = await getCameraStream(camId).catch(() => ({})); const { code, data } = await getCameraStream(camId).catch(() => ({}));
if (code != 200) { if (code != 200) {
Message.warning("未获取到当前相机的播放地址"); // Message.warning("未获取到当前相机的播放地址");
return; return;
} }
let url = data.liveUrl; let url = data.liveUrl;
if (!url) { if (!url) {
Message.warning("未获取到当前相机的播放地址"); // Message.warning("未获取到当前相机的播放地址");
return Promise.reject("获取 url 失败!"); return Promise.reject("获取 url 失败!");
} }

1
ruoyi-ui/src/views/JiHeExpressway/components/infoBoard/BoardInfoEditor.vue

@ -483,6 +483,7 @@ export default {
this.mode this.mode
); );
} else { } else {
console.log(this.tpl , "tttttttttppplllll")
this.dataForm = infoBoardUtils.dialogSourceFormat( this.dataForm = infoBoardUtils.dialogSourceFormat(
this.tpl, this.tpl,
this.type, this.type,

3
ruoyi-ui/src/views/JiHeExpressway/components/infoBoard/BoardRecordPreview.vue

@ -1,7 +1,8 @@
<template> <template>
<div class="boardPreview" ref="compBox"> <div class="boardPreview" ref="compBox">
<div class="boardBox" :style="boardStyle" v-if="isReady"> <div class="boardBox" :style="boardStyle" v-if="isReady">
<p class="boardTxt" v-for="item,index in contentArr" :key="index" :style="boardTxtStyle" v-html="item" v-if="(index + 1) <= lineTotal"> <p class="boardTxt" v-for="item,index in contentArr" :key="index" :style="boardTxtStyle" v-html="item"
v-if="(index + 1) <= lineTotal">
</p> </p>
</div> </div>
</div> </div>

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

@ -1,6 +1,3 @@
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Frame"> <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"/>
<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> </svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

6
ruoyi-ui/src/views/JiHeExpressway/images/home-FrameControl/FrameControl1.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

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

@ -5,13 +5,24 @@
<Video class="video-stream" :pileNum="dialogData.stakeMark" rangeIndex="upCamera" :showHeader="false" /> <Video class="video-stream" :pileNum="dialogData.stakeMark" rangeIndex="upCamera" :showHeader="false" />
<Video class="video-stream" :pileNum="dialogData.stakeMark" rangeIndex="downCamera" :showHeader="false" /> <Video class="video-stream" :pileNum="dialogData.stakeMark" rangeIndex="downCamera" :showHeader="false" />
</div> </div>
<Descriptions labelWidth="72px" :list="list" :data="data" style="gap: 18px" column="7" /> <Descriptions labelWidth="72px" :list="list" :data="data" style="gap: 18px" column="7" />
</div> </div>
<div class="foote">
<Button @click.native="handleEventRelieve" style="width: 100px;">
事件解除
</Button>
<Button @click.native="goStrategy" style="width: 100px;">
设备管控
</Button>
<Button @click.native="goDispatch" style="width: 100px;">
调度处置
</Button>
</div>
</Dialog> </Dialog>
</template> </template>
<script> <script>
import Button from "@screen/components/Buttons/Button.vue";
import Dialog from "@screen/components/Dialog/index.vue"; import Dialog from "@screen/components/Dialog/index.vue";
import Descriptions from "@screen/components/Descriptions.vue"; import Descriptions from "@screen/components/Descriptions.vue";
// import { getRoadInfoByStakeMark, getProduct } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js" // import { getRoadInfoByStakeMark, getProduct } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"
@ -19,7 +30,9 @@ import Video from "@screen/components/VideoMulti";
import request from "@/utils/request"; import request from "@/utils/request";
import { dialogDelayVisible } from "./../mixin"; import { dialogDelayVisible } from "./../mixin";
import {
postCompleteEvent,
} from "@/api/commandDispatch";
// //
export default { export default {
name: "TrafficIncidents", name: "TrafficIncidents",
@ -28,6 +41,7 @@ export default {
Dialog, Dialog,
Descriptions, Descriptions,
Video, Video,
Button
}, },
data() { data() {
return { return {
@ -119,12 +133,36 @@ export default {
if (code != 200) return; if (code != 200) return;
this.data = { ...data, ...this.data }; this.data = { ...data, ...this.data };
console.log("trafficIncidents", data);
}) })
.catch((err) => { }); .catch((err) => { });
}, },
methods: { methods: {
handleClickTabs() { }, handleClickTabs() { },
goDispatch(){
this.$router.push(`/control/event/commandDispatch`);
},
goStrategy(){
this.$router.push(`/control/device/strategy`);
},
handleEventRelieve() {
this.$confirm("确定解除事件吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
let data = new FormData();
data.append("eventId", this.dialogData.id);
postCompleteEvent(data).then((result) => {
console.log('--------',result)
if (result.code != 200) return [];
this.$message.success("事件解除成功");
this.$emit('traffic-relieve',this.data);
});
})
.catch(() => {});
},
}, },
}; };
</script> </script>
@ -179,4 +217,13 @@ export default {
} }
} }
} }
.foote{
display: flex;
align-items: center;
gap: 9px;
width: 100%;
justify-content: flex-end;
margin:20px 0px -20px 0px;
}
</style> </style>

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

@ -6,31 +6,87 @@
@click.native="handleClick('FrameControl')"> @click.native="handleClick('FrameControl')">
<img src="@screen/images/home-FrameControl/FrameControl.svg" /> <img src="@screen/images/home-FrameControl/FrameControl.svg" />
</Button> </Button>
<el-tabs v-model="tabAction" @tab-click="tabClick">
<el-tab-pane label="批量管控" name="1"></el-tab-pane>
<el-tab-pane label="定时管控" name="2"></el-tab-pane>
<el-tab-pane label="管控记录" name="3"></el-tab-pane>
</el-tabs>
<div class="body"> <div class="body">
<div class="title">批量控制</div> <div class="title">批量控制</div>
<span class="close" @click="() => { this.activeIcon = null; }"> <span class="close" @click="() => { this.activeIcon = null; }">
<i class="el-icon-close" /> <i class="el-icon-close" />
</span> </span>
<Form v-model="data" labelWidth="90px" column="2" class="form" ref="FormConfigRef" :formList="formList" /> <div v-if="tabAction === '1'" style="width:70vw;">
<component ref="ControlComponent" :is="componentMap[DeviceTopics[data.deviceType]]" :isMultiControl="true" <Form v-model="data" labelWidth="90px" column="2" class="form" ref="FormConfigRef" :formList="formList" />
:visible="true" :selectItems="data.childType" @update:activeIcon="(val) => { this.activeIcon = val }" <component ref="ControlComponent" :is="componentMap[DeviceTopics[data.deviceType]]" :isMultiControl="true"
@update:submitting="(val) => { submitting = val }"></component> :visible="true" :selectItems="data.childType" @update:activeIcon="(val) => { this.activeIcon = val }"
<div v-if="hiddenDevices.indexOf(componentMap[DeviceTopics[data.deviceType]]) == -1" class="footer"> @update:submitting="(val) => { submitting = val }"></component>
<Button @click.native="submitClick" :loading="submitting"> <div v-if="hiddenDevices.indexOf(componentMap[DeviceTopics[data.deviceType]]) == -1" class="footer">
确认 <Button @click.native="submitClick" :loading="submitting">
</Button> 确认
<Button style="background-color: rgba(0, 179, 204, 0.3)" @click.native="cancelClick"> 取消 </Button> </Button>
<Button style="background-color: rgba(0, 179, 204, 0.3)" @click.native="cancelClick"> 取消 </Button>
</div>
</div>
<div v-if="tabAction === '2'" style="width:70vw;height: 500px; overflow-y:auto" class="cardPanel">
<Empty v-if="!data.length" class="no-data" style="position: absolute">暂无数据</Empty>
<template v-else>
<div class="cardBox" v-for="(item, index) in data" :key="index">
<Card :buttonIcon="null" :keyMap="keyMap" :cardData="item" class="card" buttonText="详情">
<template #form-remark="{ data }">
<div class="remark">
{{ data.remark }}
</div>
</template>
<template #button>
<el-switch v-model="item.status" active-color="#0BD" inactive-color="#999" active-value="1"
inactive-value="0" @change="(value) => handleSwitcherChange(value, item) ">
</el-switch>
<Button @click.native="() => goStrategy(item)">
查看
</Button>
</template>
</Card>
</div>
</template>
</div>
<div v-if="tabAction === '3'" style="width:70vw;height: 500px;display: flex;flex-direction: column; justify-content: center;align-items: flex-start;" >
<Form v-model="dataRecord" style="width:100%;" labelWidth="90px" column="2" class="form" ref="FormRecordRef" :formList="formRecord" />
<Table :data="tableData" height="500px" style="margin: 20px;width:95%">
<ElTableColumn label="管控时间" prop="operTime" width="300"/>
<ElTableColumn label="管控方式" prop="operType" width="200"/>
<ElTableColumn label="操作人" prop="operName" width="200"/>
<ElTableColumn label="执行结果" prop="stakeMark" >
<template slot-scope="scope">
<el-popover
placement="top-start"
width="400"
trigger="hover"
:content="scope.row.jsonResult">
<el-button slot="reference" class="btnResult">查看</el-button>
</el-popover>
</template>
</ElTableColumn>
</Table>
<!-- 分页 -->
<div class="footer" style="margin-top:-20px;margin-bottom: 30px">
<ElPagination @current-change="bindResult" @size-change="onSizeChange" width="'100%'" :page-sizes="[10, 20, 30, 40, 50]"
:page-size="searchData.pageSize" :current-page.sync="searchData.pageNum" layout="total, sizes, prev, pager, next"
:total="tableTotal" class="Pagination">
</ElPagination>
</div>
</div> </div>
</div> </div>
</ElPopover> </ElPopover>
</div> </div>
</template> </template>
<script> <script>
import Button from "@screen/components/Buttons/Button.vue"; import Button from "@screen/components/Buttons/Button.vue";
import Form from "@screen/components/FormConfig"; import Form from "@screen/components/FormConfig";
import Card from "@screen/components/Card1/index.vue";
import * as PresetFormItems from "@screen/common/PresetFormItems.js"; import * as PresetFormItems from "@screen/common/PresetFormItems.js";
import { merge, cloneDeep } from "lodash"; import { merge, cloneDeep } from "lodash";
import { markerClusterIns } from "@screen/pages/Home/components/RoadAndEvents/utils/map.js" import { markerClusterIns } from "@screen/pages/Home/components/RoadAndEvents/utils/map.js"
@ -43,9 +99,13 @@ import BroadcastParam from "@screen/pages/Home/components/Dialogs/Broadcast/comp
import FatigueWakesUpParam from "@screen/pages/Home/components/Dialogs/FatigueWakesUp/components/DeviceParam.vue"; import FatigueWakesUpParam from "@screen/pages/Home/components/Dialogs/FatigueWakesUp/components/DeviceParam.vue";
import DrivingGuidanceParam from "@screen/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceParam.vue"; import DrivingGuidanceParam from "@screen/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceParam.vue";
import InfoBoardParam from "@screen/pages/Home/components/InfoBoard/InfoBoard.vue"; import InfoBoardParam from "@screen/pages/Home/components/InfoBoard/InfoBoard.vue";
import request from "@/utils/request";
import { DeviceForMap } from "@screen/pages/Home/components/RoadAndEvents/utils/buttonEvent"; import { DeviceForMap } from "@screen/pages/Home/components/RoadAndEvents/utils/buttonEvent";
import { Message } from "element-ui";
import Table from '@screen/components/Table.vue';
import moment from "moment";
import _ from "lodash";
import Pagination from '@screen/components/Pagination.vue';
const componentMap = { const componentMap = {
"设备箱": "SmartDeviceParams", "语音广播": "BroadcastParam", "疲劳唤醒": "FatigueWakesUpParam", "设备箱": "SmartDeviceParams", "语音广播": "BroadcastParam", "疲劳唤醒": "FatigueWakesUpParam",
@ -82,14 +142,27 @@ export default {
components: { components: {
Button, Button,
Form, Form,
Card,
Table,
SmartDeviceParams, SmartDeviceParams,
BroadcastParam, BroadcastParam,
FatigueWakesUpParam, FatigueWakesUpParam,
DrivingGuidanceParam, DrivingGuidanceParam,
InfoBoardParam InfoBoardParam
}, },
watch: {
dataRecord(e) {
console.log(e)
},
},
data() { data() {
return { return {
Enum_ControlType: [
{ key: "0", label: "手动控制" },
{ key: "1", label: "定时控制" },
{ key: "2", label: "批量控制" },
{ key: "3", label: "预案控制" }
],
activeIcon: null, activeIcon: null,
data: {}, data: {},
hiddenDevices, hiddenDevices,
@ -265,7 +338,57 @@ export default {
// }, // },
], ],
DeviceTopics, DeviceTopics,
componentMap componentMap,
tabAction: "1",
data:[],
keyMap: [
{
key: "groupName",
label: "标题",
},
{
key: "remark",
label: "描述",
},
],
dataRecord:{
operType: "0",
operTime:[]
},
formRecord:[
{
label: "管控方式:",
key: "operType",
type: "select",
options: {
options: [
{ key: "0", label: "手动控制" },
{ key: "1", label: "定时控制" },
{ key: "2", label: "批量控制" },
{ key: "3", label: "预案控制" }
],
},
},
{
label: "管控时间:",
key: "operTime",
required: false,
type: "datePicker",
options: {
style: "width: auto",
type: "datetimerange",
format: "yyyy-MM-dd HH:mm:ss",
valueFormat: "yyyy-MM-dd HH:mm:ss",
},
},
],
tableTotal: 0,
tableData:[],
searchData: {
pageSize: 20,
pageNum: 1,
},
digResultVisible: false
} }
}, },
// inject: ["activeDeviceTypes"], // inject: ["activeDeviceTypes"],
@ -298,6 +421,25 @@ export default {
cancelClick() { cancelClick() {
this.activeIcon = null; this.activeIcon = null;
}, },
tabClick() {
if(this.tabAction === '2'){
request({
url: `/business/dcBatchFunctionsJobGroup/list`,
method: "get",
params: {},
})
.then((result) => {
if (result.code != 200) return;
this.tableTotal = result.total;
this.data = result.rows;
})
.finally(() => {
});
} else if(this.tabAction === '3'){
this.dataRecord.operTime = [moment().startOf('month').format('YYYY-MM-DD 00:00:00'),moment().endOf('month').format('YYYY-MM-DD 23:59:59'),]
this.bindResult();
}
},
handleClick(type) { handleClick(type) {
this.activeIcon = this.activeIcon === type ? null : type; this.activeIcon = this.activeIcon === type ? null : type;
}, },
@ -306,6 +448,55 @@ export default {
// this.filterData = data; // this.filterData = data;
this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data); this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data);
}, },
goStrategy(item){
this.$router.push(`/control/device/strategy?id=${item.id}`);
},
async handleSwitcherChange(value, item) {
request({
url: `/business/dcBatchFunctionsJobGroup`,
method: "PUT",
data: {
id:item.id,
status:value
},
})
.then((result) => {
item.status = result.data.status;
if (result.code != 200) return;
Message.success(`操作成功!`);
})
},
bindResult(){
// dataRecord:{
// operType: "0",
// operTime:['2024-04-01 00:00:00','2024-04-25 23:59:59']
// },
request({
url: `/business/dcOperLog/list`,
method: "get",
params: {...this.searchData,operType:this.dataRecord.operType},
})
.then((result) => {
if (result.code != 200) return;
result.rows.forEach(e => {
e.operTime = moment(e.operTime).format('YYYY-MM-DD HH:mm:ss')
e.operType = _.find(this.Enum_ControlType,{key:e.operType}).label
});
this.tableData = result.rows;
this.tableTotal = result.total;
})
.finally(() => {
});
},
onSizeChange(pageSize) {
this.tableData = [];
this.searchData.pageSize = pageSize;
this.searchData.pageNum = 1;
this.bindResult();
},
showResult(res){
this.digResultVisible = true
}
}, },
}; };
</script> </script>
@ -364,4 +555,105 @@ div.el-popper.global-input-search-popover {
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
} }
} }
.cardPanel{
display: flex;
flex-wrap: wrap;
}
.cardBox {
flex-basis: percentage(1/4);
padding-right: 10px;
padding-bottom: 10px;
}
.remark {
font-size: 14px; line-height: 20px; height: 40px; overflow: hidden;
color: #00b3cc;
}
.btnResult{
background-color:#00b3cc;
color: white;
border: none;
padding: 5px 20px;
}
</style> </style>
<style lang="scss" scoped>
.Pagination {
// color: #fff;
::v-deep {
> button,
> ul li {
background: #064258;
border-radius: 2px 2px 2px 2px;
opacity: 1;
color: #fff;
}
> button {
padding: 0 3px;
border: 1px solid #00b3cc;
}
> ul li {
background: linear-gradient(180deg, #004960 0%, #004b62 100%);
margin: 0 1.5px;
&.active {
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
}
}
.el-pagination__total {
color: #fff;
}
.el-pagination__sizes {
.el-select {
.el-input {
width: 81px;
.el-input__inner {
font-size: 12px;
height: 23px;
background-color: #064258 !important;
}
}
.el-input__suffix {
.el-input__icon {
line-height: 23px;
}
}
}
}
.el-pagination__jump {
margin-left: 10px;
color: #fff;
font-size: 12px;
.el-input {
width: 27px;
margin: 0 3px;
.el-input__inner {
font-size: 12px;
background-color: #064258 !important;
border-radius: 2px 2px 2px 2px;
}
}
}
.btn-next {
margin-left: 6px;
}
.btn-prev {
margin-right: 6px;
}
}
::v-deep .el-pagination__total {
margin-left: 10px;
}
}
</style>

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

@ -28,7 +28,7 @@
<!-- 摄像机 G35 K094+079 下行可控 枪机 可打开--> <!-- 摄像机 G35 K094+079 下行可控 枪机 可打开-->
<!-- <Camera :data="dialogConfig.data" :visible="dialogConfig.visibleType === 1" /> --> <!-- <Camera :data="dialogConfig.data" :visible="dialogConfig.visibleType === 1" /> -->
<component :dialogData="dialogConfig.data" visible :selectedDevice="dialogConfig.data" :is="dialogConfig.component" <component :dialogData="dialogConfig.data" visible :selectedDevice="dialogConfig.data" :is="dialogConfig.component"
@change="handleCameraChange" @update:visible="handleCameraChange" /> @change="handleCameraChange" @update:visible="handleCameraChange" @traffic-relieve="handleTrafficRelieve" />
</Bg1> </Bg1>
</template> </template>
@ -272,7 +272,7 @@ export default {
window.infoWindow.close(); window.infoWindow.close();
}, },
// // traffic-relieve
handleCameraChange() { handleCameraChange() {
this.dialogConfig = { this.dialogConfig = {
// 0 ControlCamera | 1 Camera // 0 ControlCamera | 1 Camera
@ -287,6 +287,17 @@ export default {
gridRowStart: Math.floor(index / columns) + 1, gridRowStart: Math.floor(index / columns) + 1,
gridColumnStart: (index % columns) + 1, gridColumnStart: (index % columns) + 1,
} }
},
async handleTrafficRelieve(e){
await this.handleDeviceImmediate(e._itemData)
setTimeout(async () => {
await this.handleDeviceImmediate(e._itemData)
}, 500);
this.dialogConfig = {
// 0 ControlCamera | 1 Camera
component: null,
data: null
}
} }
} }
} }

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

@ -30,7 +30,6 @@ export async function getCameraStream(camId, media = 1) {
data.data.liveUrl = data.data.liveUrl =
"https://10.0.81.202/camera?target=" + data.data.liveUrl.substring(7); "https://10.0.81.202/camera?target=" + data.data.liveUrl.substring(7);
}*/ }*/
return data; return data;
} }

3
ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/AddNEditDialog.vue

@ -34,6 +34,9 @@
</div> </div>
</div> </div>
<div> <div>
<!--
<p v-for="item, index1 in taskGroup.tasksEdit">
{{ item.jobId }}</p> -->
<TaskItem v-for="item, index1 in taskGroup.tasksEdit" :propData="item" :groupId="propData.id" <TaskItem v-for="item, index1 in taskGroup.tasksEdit" :propData="item" :groupId="propData.id"
:time="taskGroup.time" @onModify="newV=>onModifyItem(newV, item)"> :time="taskGroup.time" @onModify="newV=>onModifyItem(newV, item)">
</TaskItem> </TaskItem>

58
ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/TaskItem.vue

@ -3,16 +3,17 @@
<el-form> <el-form>
<div class="flex" style="justify-content: space-between;"> <div class="flex" style="justify-content: space-between;">
<div> <div>
设备类型:<span>{{ deviceTypeDic[editData.deviceType].label }}</span> 设备类型:
<span v-if="editData.deviceType">{{ deviceTypeDic[editData.deviceType].label }}</span>
</div> </div>
<div> <div>
设备: 设备:
<!-- {{ deviceDic }} --> <template v-if="editData.devices">
<span v-for="item,index in editData.devices"> <span v-for="item,index in editData.devices">
{{ deviceDic[item.id].deviceName }} {{ deviceDic[item.id].deviceName }}
</span>{{ editData.devices.length }}个设备 </span>{{ editData.devices.length }}
</template>
</div> </div>
<!-- <div>{{ editData.params }}</div> -->
<template v-if="editData.deviceType=='2'"> <template v-if="editData.deviceType=='2'">
<BoardRecordPreview :tpl="editData.params" style=" width:300px; height: 100%;"> <BoardRecordPreview :tpl="editData.params" style=" width:300px; height: 100%;">
</BoardRecordPreview> </BoardRecordPreview>
@ -37,13 +38,14 @@
</div> </div>
</el-form> </el-form>
<taskEditDialog v-model="isEditingTask" :groupId="groupId" :time="time" :deviceDic="deviceDic" :deviceList="deviceList" <taskEditDialog v-model="isEditingTask" :groupId="groupId" :time="time" :deviceDic="deviceDic"
:propData="editData" @onSubmit="onSubmit" /> :deviceList="deviceList" :propData="editData" @onSubmit="onSubmit" />
</div> </div>
</template> </template>
<script> <script>
import request from "@/utils/request";
import { deviceTypeDic } from "@screen/utils/enum.js" import { deviceTypeDic } from "@screen/utils/enum.js"
import { getDeviceList } from "@screen/utils/api/device.js" import { getDeviceList } from "@screen/utils/api/device.js"
import taskEditDialog from "./taskEditDialog.vue"; import taskEditDialog from "./taskEditDialog.vue";
@ -80,18 +82,21 @@ export default {
this.initBasicData().then(res=>{ this.initBasicData().then(res=>{
let temp = JSON.parse(this.propData.callParameter)[0]; //callParameter let temp = JSON.parse(this.propData.callParameter || '[{}]')[0]; //callParameter
//BoardRecordPreview //BoardRecordPreview
temp.functions[1].params.CONTENT = temp.functions[1].params.CONTENT.replaceAll(/\\n/g, '\\\\n').replaceAll(/=/g, '\\=').replaceAll(/,/g, '\\,').replaceAll(/&nbsp/g, ' '); if(temp.functions){
this.editData = { temp.functions[1].params.CONTENT = temp.functions[1].params.CONTENT.replaceAll(/\\n/g, '\\\\n').replaceAll(/=/g, '\\=').replaceAll(/,/g, '\\,').replaceAll(/&nbsp/g, ' ');
id: this.propData.jobId, this.editData = {
direction: temp.direction || temp.devices[0].direction, id: this.propData.jobId,
deviceType: temp.deviceType || temp.devices[0].deviceType, direction: temp.direction,
devices: temp.devices, deviceType: temp.deviceType,
params: temp.functions[1].params, devices: temp.devices,
screenSize: temp.screenSize || temp.devices[0].screenSize || this.deviceDic[temp.devices[0].id].screenSize params: temp.functions[1].params,
}; screenSize: temp.screenSize
console.log(this.editData , "+++======"); };
}else{
this.editData = {};
}
this.isCompReady = true; this.isCompReady = true;
}) })
}, },
@ -99,7 +104,8 @@ export default {
onModify(){ onModify(){
this.isEditingTask = true; this.isEditingTask = true;
}, },
onSubmit(){ onSubmit(para){
this.emit("onSubmit");
this.isEditingTask = false; this.isEditingTask = false;
// let devices = _.filter(this.deviceOptions, item=>{ // let devices = _.filter(this.deviceOptions, item=>{
// this.editData.devices.includes(item.id); // this.editData.devices.includes(item.id);
@ -108,7 +114,17 @@ export default {
// this.$emit("onModify", {devices}); // this.$emit("onModify", {devices});
}, },
onDelete(){ onDelete(){
request({
url: `/business/dcBatchFunctionsJob/` + this.propData.jobId,
method: "DELETE",
// params: {
// jobGroup: this.propData.id
// },
})
.then((result) => {
if (result.code != 200) return;
Message.success("删除成功");
})
}, },
initBasicData(){ initBasicData(){

12
ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/taskEditDialog.vue

@ -259,7 +259,7 @@ export default {
this.deviceArr.forEach((item,index)=>{ this.deviceArr.forEach((item,index)=>{
if (this.editData.devices.includes(item.id)){ if (this.editData.devices.includes(item.id)){
let temp = { let temp = {
jobId: item.id, id: item.id,
iotDeviceId: item.iotDeviceId, iotDeviceId: item.iotDeviceId,
deviceType: item.deviceType, deviceType: item.deviceType,
direction: item.direction direction: item.direction
@ -272,11 +272,12 @@ export default {
}); });
let params = this.processParams(); let params = this.processParams();
if(this.mode == "add"){ if(this.mode == "add"){
} }
addTaskRequest(devices, params, { deviceType: this.searchData.deviceType, screenSize: this.filterData.screenSize, jobGroup: this.groupId, time:this.time }).then(res=>{ alert(111)
addTaskRequest(this.groupId, this.time, devices, params, { deviceType: this.searchData.deviceType, screenSize: this.filterData.screenSize }).then(res=>{
console.log(res) console.log(res)
}); });
this.$emit("onSubmit") this.$emit("onSubmit")
@ -319,6 +320,11 @@ export default {
}, },
resetEditData(){ resetEditData(){
this.editData.devices = []; this.editData.devices = [];
let arr = this.filterData.screenSize.split("*");
this.editData.type2 = {
displayAreaWidth: +arr[0],
displayAreaHeight: +arr[1]
};
} }
} }
}; };

85
ruoyi-ui/src/views/JiHeExpressway/pages/perception/topology/index.vue

@ -0,0 +1,85 @@
<template>
<div class='topolog'>
<div class="list">
<div v-for="(item,index) in list" class="listItem keep-ratio">
{{ item.switchName }}
</div>
</div>
<div class="card">
<div class="title">
<view class="t-left">{{ list[selIndex].switchName }}</view>
</div>
</div>
</div>
</template>
<script>
import request from '@/utils/request'
import { Message } from "element-ui";
export default {
name: 'InDevelopment',
components: {
},
data() {
return {
list: [],
selIndex: 0
}
},
mounted() {
this.bind()
},
methods:{
bind(){
request({
url: '/business/switch/list',
method: 'get'
}).then(result=>{
if (result.code != 200) return Message.error(result?.msg);
this.list = result.data
console.log(this.list)
})
}
}
}
</script>
<style lang='scss' scoped>
.topolog {
width: 100%;
height: 100%;
position: relative;
z-index: 6;
color: white;
display: flex;
justify-content: center;
align-items: center;
p {
font-size: 200px;
}
}
.list{
width: 20vw;
height: 100%;
color: white;
margin: 0px 20px;
.listItem{
background-image: url(../topology/left-bg.png);
background-repeat: no-repeat;
background-size: 100% 100%;
height: 44px;
width: 100%;
text-align: center;
line-height: 44px;
margin-top: 20px;
}
}
.card{
flex: 1;
}
</style>

BIN
ruoyi-ui/src/views/JiHeExpressway/pages/perception/topology/left-bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

48
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/index.vue

@ -3,14 +3,7 @@
<InputSearch style="width: 100%" :formList="searchFormList" /> <InputSearch style="width: 100%" :formList="searchFormList" />
<div class="body"> <div class="body">
<ListItem <ListItem
v-for="item in list1" v-for="item in list.rows"
:key="item.id"
:data="item"
origin="left"
class="middle-ratio"
/>
<ListItem
v-for="item in list2"
:key="item.id" :key="item.id"
:data="item" :data="item"
origin="left" origin="left"
@ -18,7 +11,7 @@
/> />
</div> </div>
<div class="footer"> <div class="footer">
<Pagination layout="total,prev, pager, next, jumper" :total="90" /> <Pagination layout="total,prev, pager, next, jumper" :total="list.total" />
</div> </div>
</Card2> </Card2>
</template> </template>
@ -29,7 +22,9 @@ import Pagination from "@screen/components/Pagination.vue";
import InputSearch from "@screen/components/InputSearch/index.vue"; import InputSearch from "@screen/components/InputSearch/index.vue";
import { searchFormList } from "./data"; import { searchFormList } from "./data";
import ListItem from "./ListItem.vue"; import ListItem from "./ListItem.vue";
import { method } from "lodash";
import request from '@/utils/request'
import {DirectionTypes} from '@screen/utils/enum.js';
export default { export default {
name: "Auditlists", name: "Auditlists",
components: { components: {
@ -38,9 +33,24 @@ export default {
Pagination, Pagination,
ListItem, ListItem,
}, },
data() { data() {
return { return {
searchFormList, searchFormList,
list:{total:0,rows:[]},
eventType:[
'交通事故',
'车辆故障',
'交通管制',
'交通拥堵',
'非法上路',
'路障清除',
'施工建设',
'',
'',
'',
'',
],
list1: Array.from({ length: 3 }).map(() => ({ list1: Array.from({ length: 3 }).map(() => ({
title: "异常天气", title: "异常天气",
content: "2023.12.23 13:00:00 济南方向K100+000 中雪", content: "2023.12.23 13:00:00 济南方向K100+000 中雪",
@ -64,6 +74,7 @@ export default {
}; };
}, },
created() { created() {
this.bindList()
// axiosIns.get("/business/dcPublishInfo/list") // axiosIns.get("/business/dcPublishInfo/list")
// .then((result) => { // .then((result) => {
// console.log("%c [ result ]-39-index.vue", "font-size:15px; background:#4bd543; color:#8fff87;", result); // console.log("%c [ result ]-39-index.vue", "font-size:15px; background:#4bd543; color:#8fff87;", result);
@ -72,6 +83,23 @@ export default {
// }).catch((err) => { // }).catch((err) => {
// }); // });
}, },
methods:{
bindList(){
request({
url: '/business/manage/list',
method: 'get',
data: {}
}).then(res=>{
res.rows.forEach(e => {
console.log(e)
e.content = `${e.eventTime} ${e.stakeMark} ${DirectionTypes[e.direction]} ${e.contentDetails}`
e.type = e.eventType
e.isverify = e.eventState
});
this.list = res
})
}
}
}; };
</script> </script>

4
ruoyi-ui/src/views/JiHeExpressway/utils/api/batch.js

@ -1,7 +1,7 @@
import request from '@/utils/request' import request from '@/utils/request'
export function addTaskRequest(devices, params, others) { export function addTaskRequest(jobGroup, time, devices, params, others) {
let temp = [{ let temp = [{
...others, ...others,
devices: devices, devices: devices,
@ -27,6 +27,8 @@ export function addTaskRequest(devices, params, others) {
] ]
}]; }];
let data = { let data = {
jobGroup,
time,
callParameter: JSON.stringify(temp) callParameter: JSON.stringify(temp)
} }
// console.log(JSON.stringify(data)); // console.log(JSON.stringify(data));

6
ruoyi-ui/vue.config.js

@ -44,17 +44,17 @@ module.exports = {
// target: `http://10.0.81.201:8080`, // target: `http://10.0.81.201:8080`,
// target: `http://10.168.73.36:8080`, // 周乐 // target: `http://10.168.73.36:8080`, // 周乐
// target: `http://10.168.77.209:8087`, // 刘朋 // target: `http://10.168.77.209:8087`, // 刘朋
// target: `http://10.168.66.196:8080`, //刘文阁 target: `http://10.168.66.196:8087`, //刘文阁
// target: `http://10.168.56.206:8087`, //孟 // target: `http://10.168.56.206:8087`, //孟
// target: `http://10.168.78.135:8087`, //孟 // target: `http://10.168.78.135:8087`, //孟
// target: `http://10.168.78.135:8087`, // target: `http://10.168.78.135:8087`,
// target: `http://10.0.81.202:8087`, //现场后台 // target: `http://10.0.81.202:8087`, //现场后台s
// target: `http://10.0.81.204:8087`, //现场后台 刘文阁 // target: `http://10.0.81.204:8087`, //现场后台 刘文阁
// target: `http://10.168.69.255:8087`, //正晨后台 连现场物联 刘文阁 // target: `http://10.168.69.255:8087`, //正晨后台 连现场物联 刘文阁
// target: `http://10.168.78.135:8087`, //王钦 // target: `http://10.168.78.135:8087`, //王钦
// target: `http://10.168.66.196:8087`, //正晨后台 连现场物联 刘文阁2 // target: `http://10.168.66.196:8087`, //正晨后台 连现场物联 刘文阁2
// target: `http://10.168.68.42:8087`, //王思祥 // target: `http://10.168.68.42:8087`, //王思祥
target: `http://10.168.72.174:8087`, //赵祥龙 // target: `http://10.168.72.174:8087`, //赵祥龙
// target: `http://10.168.65.156:8097`, //孟 // target: `http://10.168.65.156:8097`, //孟
// target: `http://10.168.56.165:8087`, //王家宝 // target: `http://10.168.56.165:8087`, //王家宝
// target: `http://10.168.77.128:8087`, //王兴琳 // target: `http://10.168.77.128:8087`, //王兴琳

Loading…
Cancel
Save