zhangzhang 8 months ago
parent
commit
0d45d30288
  1. 31
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/ElCheckboxGroup.vue
  2. BIN
      ruoyi-ui/src/views/JiHeExpressway/images/home-Word/word.png
  3. 117
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeWord/index.vue
  4. 99
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue
  5. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js
  6. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js
  7. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/index.vue
  8. 326
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/deviceSummary/index.vue
  9. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/index.vue

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

@ -1,14 +1,26 @@
<template>
<ElCheckboxGroup v-bind="$attrs" v-on="$listeners" class="ElCheckboxGroup" :style="{ gap }">
<ElCheckbox v-for="item in options" :disabled="item.disabled" :label="item[id] || item[label]"
:key="item[id] || item[label]">
<slot :name="item[id] || item[label]" :data="item">{{
item[label]
}} </slot>
<ElCheckboxGroup
v-bind="$attrs"
v-on="$listeners"
class="ElCheckboxGroup"
:style="{ gap }"
>
<ElCheckbox
v-for="item in options"
:disabled="item.disabled"
:label="item[id] || item[label]"
:key="item[id] || item[label]"
>
<slot :name="item[id] || item[label]" :data="item"
>{{ item[label] }}
</slot>
<div v-if="showIcon">
<img v-if="item.deviceState == '0' || item.deviceState == null" src="@/assets/jihe/images/offline.svg"
class="state">
<img v-else src="@/assets/jihe/images/online.svg" class="state">
<img
v-if="item.deviceState == '0' || item.deviceState == null"
src="@/assets/jihe/images/offline.svg"
class="state"
/>
<img v-else src="@/assets/jihe/images/online.svg" class="state" />
</div>
</ElCheckbox>
</ElCheckboxGroup>
@ -58,6 +70,7 @@ export default {
display: flex;
align-items: center;
gap: 6px;
width: 87px;
.el-checkbox__input {
line-height: 0;

BIN
ruoyi-ui/src/views/JiHeExpressway/images/home-Word/word.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

117
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeWord/index.vue

@ -0,0 +1,117 @@
<template>
<div class="HomeVector">
<el-tooltip effect="light" content="高速运营快报" placement="left">
<Button
:class="['btn', { 'btn-active': activeIcon }]"
@click.native="handleClick('Vector')"
>
<div>
<img
src="@screen/images/home-Word/word.png"
style="width: 26px; height: 26px"
/>
</div>
</Button>
</el-tooltip>
</div>
</template>
<script>
import Button from "@screen/components/Buttons/Button.vue";
import Form from "@screen/components/FormConfig";
import { delay, exportFile, confirm } from "@screen/utils/common";
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: "HomeVector",
components: {
Button,
Form,
},
data() {
return {
activeIcon: null,
};
},
created() {
this.activeIcon = window.showStakeText ? "Vector" : null;
},
methods: {
handleClick(type) {
// this.activeIcon = this.activeIcon === type ? null : type;
// if (this.activeIcon) window.showStakeText = true;
// else window.showStakeText = false;
exportFile({
url: "/business/word/trafficSituationReport",
filename: "通行情况",
ext: "docx",
});
},
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;
}
.HomeVector {
.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>

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

@ -1,41 +1,54 @@
<template>
<div class="Home">
<AMapContainer ref="AMapContainerRef" @update:isGisCompleted="(data) => {
this.isGisCompleted = data;
}
" />
<section class="content">
<!-- 左侧 -->
<div class="content-l">
<!-- -->
<FocusedMonitoring class="card-menu" />
<!-- -->
<RoadAndEvents ref="RoadAndEventsRef" :isGisCompleted="isGisCompleted" class="content-l-b card-menu" />
</div>
<!-- 右侧 -->
<div class="content-r">
<div class="home-icons">
<HomeFilter class="item" />
<HomeFrame class="item" />
<HomeVector class="item" />
<!-- <HomeVectorControl class="item" /> -->
<!-- <HomeFrameControl class="item" /> -->
</div>
<ConditionStatistics class="right card-menu" />
</div>
</section>
<footer class="footer card-menu">
<div class="footer-title">
<span>济菏高速缩略图</span>
<i class="el-icon-s-fold" style="color: #2ad9fd; transform: rotate(-90deg)" @click.stop="handleShrink" />
</div>
<div class="footer-content">
<Thumbnail />
<AMapContainer
ref="AMapContainerRef"
@update:isGisCompleted="
(data) => {
this.isGisCompleted = data;
}
"
/>
<section class="content">
<!-- 左侧 -->
<div class="content-l">
<!-- -->
<FocusedMonitoring class="card-menu" />
<!-- -->
<RoadAndEvents
ref="RoadAndEventsRef"
:isGisCompleted="isGisCompleted"
class="content-l-b card-menu"
/>
</div>
<!-- 右侧 -->
<div class="content-r">
<div class="home-icons">
<HomeFilter class="item" />
<HomeFrame class="item" />
<HomeVector class="item" />
<HomeWord class="item" />
<!-- <HomeVectorControl class="item" /> -->
<!-- <HomeFrameControl class="item" /> -->
</div>
</footer>
<ConditionStatistics class="right card-menu" />
</div>
</section>
<footer class="footer card-menu">
<div class="footer-title">
<span>济菏高速缩略图</span>
<i
class="el-icon-s-fold"
style="color: #2ad9fd; transform: rotate(-90deg)"
@click.stop="handleShrink"
/>
</div>
<div class="footer-content">
<Thumbnail />
</div>
</footer>
</div>
</template>
@ -48,10 +61,11 @@ 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 HomeWord from "./components/HomeWord/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 Button from "@screen/components/Buttons/Button.vue";
import Vue from "vue";
// import InfoBoard from "./components/InfoBoard"
@ -69,6 +83,7 @@ export default {
HomeVector,
HomeFrameControl,
HomeVectorControl,
HomeWord,
// InfoBoard
},
data() {
@ -81,8 +96,8 @@ export default {
provide() {
return {
getMap: () => this.$refs.AMapContainerRef.getMapInstance(),
activeDeviceTypes: Vue.observable([])
}
activeDeviceTypes: Vue.observable([]),
};
},
methods: {
handleShrink(e) {
@ -132,7 +147,7 @@ export default {
height: min-content;
pointer-events: none;
>div {
> div {
pointer-events: auto;
}
@ -146,7 +161,7 @@ export default {
overflow: hidden;
height: 100%;
>div {
> div {
pointer-events: all;
flex: 1;
}
@ -170,8 +185,6 @@ export default {
.item {
padding-top: 15px;
}
}
.right {
@ -189,7 +202,7 @@ export default {
will-change: height;
bottom: 0;
>div {
> div {
pointer-events: all;
}

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js

@ -22,7 +22,7 @@ var options = {
grid: {
top: "15%", //上边距
right: "0", //右边距
left: "15px", //左边距
left: "30px", //左边距
bottom: "10%", //下边距
containLabel: true,
},

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js

@ -33,7 +33,7 @@ let options = {
},
grid: {
left: "0",
right: "0",
right: "30px",
top: "90px",
bottom: "-10px",
containLabel: true,

6
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/index.vue

@ -147,7 +147,7 @@ export default {
value: "4",
},
],
dateTime: "2024-01-01 00:00:00",
dateTime: moment().format("YYYY-MM-DD HH:mm:ss"),
};
},
@ -217,6 +217,7 @@ export default {
},
async searchQuery() {
let startTime = "";
console.log("searchQuery", this.type);
if (this.type == 3) {
let year = moment().year();
// console.log(year, this.quarter);
@ -237,6 +238,7 @@ export default {
// type: this.type,
// startTime: startTime,
// }
console.log("++++++++++++", startTime);
var formData = new FormData();
formData.append("direction", this.direction);
formData.append("type", this.type);
@ -319,7 +321,7 @@ export default {
display: flex;
align-items: center;
height: 40px;
width: 100%;
width: 500px;
font-size: 14px;
margin-bottom: 10px;
left: 20px;

326
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/deviceSummary/index.vue

@ -1,148 +1,201 @@
<template>
<Empty v-if="!dataList || dataList.length<=0" text="暂无数据..."></Empty>
<div v-else class='deviceSummary'>
<div class="item" v-for=" (item, index) in dataList" :key="index">
<div class="item_con">
<div class="title-tool">
<span class="text">{{ item.title }}</span>
<Empty v-if="!dataList || dataList.length <= 0" text="暂无数据..."></Empty>
<div v-else class="deviceSummary">
<draggable
tag="div"
:list="dataList"
@end="____onDragend"
ghostClass="ghost_class"
dragClass="drag_class"
chosenClass="chosen_class"
class="draggable"
>
<div class="item" v-for="(item, index) in dataList" :key="index">
<div class="item_con">
<div class="title-tool">
<span class="text">{{ item.title }}</span>
</div>
<div class="item-body">
<div class="left-body">
<div class="icon">
<i class="el-icon-menu" v-if="item.title.includes('全部')" />
<img
src="@screen/images/layer/路测设备/毫米波雷达.svg"
v-if="item.title.includes('雷达')"
/>
<img
src="@screen/images/layer/路测设备/情报板.svg"
v-if="item.title.includes('可变信息标志')"
/>
<img
src="@screen/images/layer/路测设备/摄像机.svg"
v-if="item.title.includes('枪型')"
/>
<img
src="@screen/images/layer/路测设备/设备箱.svg"
v-if="item.title.includes('设备箱')"
/>
<img
src="@screen/images/deviceType/ball.svg"
v-if="item.title.includes('球形摄像机')"
/>
<img
src="@screen/images/layer/路测设备/合流区.svg"
v-if="item.title.includes('合流区预警')"
/>
<img
src="@screen/images/layer/路测设备/行车诱导.svg"
v-if="item.title.includes('行车诱导')"
/>
<img
src="@screen/images/layer/路测设备/护栏碰撞.svg"
v-if="item.title.includes('碰撞')"
/>
<img
src="@screen/images/deviceType/ball.svg"
v-if="item.title.includes('全景摄像机')"
/>
<img
src="@screen/images/layer/路测设备/交调.svg"
v-if="item.title.includes('交通量调')"
/>
<img
src="@screen/images/layer/路测设备/气象检测器.svg"
v-if="item.title.includes('气象')"
/>
<img
src="@screen/images/layer/路测设备/语音广播.svg"
v-if="item.title.includes('语音广播')"
/>
<img
src="@screen/images/layer/路测设备/疲劳唤醒.svg"
v-if="item.title.includes('疲劳唤醒')"
/>
</div>
<div class="numUnit">
<span class="num">{{ item.total }}</span>
<span class="unit"></span>
</div>
</div>
<div class="line"></div>
<div class="right-list">
<div class="list-text">
<span class="title">在用</span>
<div class="value value4">
{{ item.sumUseState }}
</div>
</div>
<div class="item-body">
<div class="left-body">
<div class="icon">
<i class="el-icon-menu" v-if="item.title.includes('全部')"/>
<img src="@screen/images/layer/路测设备/毫米波雷达.svg" v-if="item.title.includes('雷达')" />
<img src="@screen/images/layer/路测设备/情报板.svg" v-if="item.title.includes('可变信息标志')" />
<img src="@screen/images/layer/路测设备/摄像机.svg" v-if="item.title.includes('枪型')" />
<img src="@screen/images/layer/路测设备/设备箱.svg" v-if="item.title.includes('设备箱')" />
<img src="@screen/images/deviceType/ball.svg" v-if="item.title.includes('球形摄像机')" />
<img src="@screen/images/layer/路测设备/合流区.svg" v-if="item.title.includes('合流区预警')" />
<img src="@screen/images/layer/路测设备/行车诱导.svg" v-if="item.title.includes('行车诱导')" />
<img src="@screen/images/layer/路测设备/护栏碰撞.svg" v-if="item.title.includes('碰撞')" />
<img src="@screen/images/deviceType/ball.svg" v-if="item.title.includes('全景摄像机')" />
<img src="@screen/images/layer/路测设备/交调.svg" v-if="item.title.includes('交通量调')" />
<img src="@screen/images/layer/路测设备/气象检测器.svg" v-if="item.title.includes('气象')" />
<img src="@screen/images/layer/路测设备/语音广播.svg" v-if="item.title.includes('语音广播')" />
<img src="@screen/images/layer/路测设备/疲劳唤醒.svg" v-if="item.title.includes('疲劳唤醒')" />
</div>
<div class="numUnit">
<span class="num">{{ item.total }}</span>
<span class="unit"></span>
</div>
<div class="list-text">
<span class="title">在线</span>
<div class="value value1">
{{ item.pctOnl }}
</div>
<div class="line"></div>
<div class="right-list">
<div class="list-text">
<span class="title">在用</span>
<div class="value value4">
{{ item.sumUseState }}
</div>
</div>
<div class="list-text">
<span class="title">在线</span>
<div class="value value1">
{{ item.pctOnl }}
</div>
</div>
<div class="list-text"><span class="title">离线</span>
<div class="value value2">
{{ item.pctOffl }}
</div>
</div>
<div class="list-text">
<span class="title">丢包</span>
<div class="value value3">
{{ item.pctLose }}
</div>
</div>
</div>
<div class="list-text">
<span class="title">离线</span>
<div class="value value2">
{{ item.pctOffl }}
</div>
</div>
<div class="list-text">
<span class="title">丢包</span>
<div class="value value3">
{{ item.pctLose }}
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: '',
components: {
},
props:{
dataList:{
type:Array,
default:()=>[],
}
},
data() {
return {
}
},
watch:{
</div>
</draggable>
</div>
</template>
<script>
import draggable from "vuedraggable";
export default {
name: "",
components: { draggable },
props: {
dataList: {
type: Array,
default: () => [],
},
created() {
},
methods: {
},
mounted() {
},
}
</script>
<style lang='scss' scoped>
.deviceSummary {
},
data() {
return {};
},
watch: {},
created() {},
methods: {
____onDragend() {},
},
mounted() {},
};
</script>
<style lang="scss" scoped>
.deviceSummary {
display: flex;
flex-direction: row;
flex-wrap: wrap;
margin-right: 0px;
overflow-y: scroll;
.draggable {
width: 100%;
display: flex;
flex-direction: row;
flex-wrap: wrap;
margin-right: 0px;
overflow-y: scroll;
>.item {
flex-basis:percentage(1/8);
width: 0;
margin: 0;
padding: 0 15px 15px 0;
height: 194px;
>.item_con{
width: 100%;
height: 100%;
display: flex;
position: relative;
flex-direction: column;
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 0%, #06425868 93%);
border-radius: 3px 3px 3px 3px;
}
.item {
flex-basis: percentage(1/8);
width: 0;
margin: 0;
padding: 0 15px 15px 0;
height: 194px;
> .item_con {
width: 100%;
height: 100%;
display: flex;
position: relative;
flex-direction: column;
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 0%, #06425868 93%);
border-radius: 3px 3px 3px 3px;
.item-body {
height: 90px;
margin-top: 30px;
display: flex;
flex-direction: row;
align-items: stretch;
.left-body {
display: flex;
width: 90px;
flex-direction: column;
justify-content: center;
align-items: center;
.icon{
.icon {
border-radius: 50%;
border: 1px solid #00D1FF;
border: 1px solid #00d1ff;
width: 30px;
height: 30px;
padding:8px;
padding: 8px;
box-sizing: content-box;
text-align: center;
img{
img {
width: 100%;
height: 100%;
}
i{ font-size: 26px; color: #00D1FF; line-height: 30px;}
i {
font-size: 26px;
color: #00d1ff;
line-height: 30px;
}
}
.numUnit{
.numUnit {
display: flex;
flex-direction: row;
justify-content: center;
@ -152,7 +205,7 @@
font-size: 19px;
font-family: PangMenZhengDao;
font-weight: 400;
color: #00D1FF;
color: #00d1ff;
}
.unit {
margin-left: 3px;
@ -160,17 +213,20 @@
padding-top: 3px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #FFFFFFF0;
color: #fffffff0;
}
}
}
.line {
width: 2px;
margin: 0 10px 0 5px;
background: linear-gradient(180deg, rgba(3, 60, 81, 0), rgba(0, 100, 137, 1), rgba(3, 60, 81, 0));
background: linear-gradient(
180deg,
rgba(3, 60, 81, 0),
rgba(0, 100, 137, 1),
rgba(3, 60, 81, 0)
);
}
.right-list {
@ -187,38 +243,35 @@
font-size: 12px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #FFFFFF;
color: #ffffff;
.title {
float: left;
width: 40px;
text-align: left;
}
.value{
.value {
font-size: 14px;
font-family: PangMenZhengDao;
font-weight: 800;
}
.value1 {
color: #00EBC1ee;
color: #00ebc1ee;
}
.value2 {
color: #FFFFFFee;
color: #ffffffee;
}
.value3 {
color: #FFD15Cee;
color: #ffd15cee;
}
.value4 {
color: #0D0;
color: #0d0;
}
}
}
}
.title-tool {
@ -227,16 +280,19 @@
justify-content: center;
align-items: center;
height: 36px;
background: linear-gradient(180deg, rgba(1, 139, 182, 0) 0%, #1FCAF160 100%);
background: linear-gradient(
180deg,
rgba(1, 139, 182, 0) 0%,
#1fcaf160 100%
);
border-radius: 3px 3px 0px 0px;
.text {
font-size: 15px;
font-family: "Arial","PingFang","Microsoft YaHei";
font-family: "Arial", "PingFang", "Microsoft YaHei";
font-weight: bold;
color: #FFFFFF;
color: #ffffff;
}
}
.title-tool::after {
@ -245,12 +301,14 @@
bottom: 1px;
width: 100%;
height: 1px;
background: linear-gradient(90deg, rgba(81, 181, 255, 0) 3%, #51B5FF 49%, rgba(81, 181, 255, 0) 100%);
background: linear-gradient(
90deg,
rgba(81, 181, 255, 0) 3%,
#51b5ff 49%,
rgba(81, 181, 255, 0) 100%
);
}
}
}
}
</style>
}
</style>

2
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/index.vue

@ -194,7 +194,7 @@ export default {
value: "4",
},
],
dateTime: "2024-01-01 00:00:00",
dateTime: moment().format("YYYY-MM-DD HH:mm:ss"),
dataList: [],
quarter: "",
year: "",

Loading…
Cancel
Save