Browse Source

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

wangqin
zhangzhang 7 months ago
parent
commit
7373c40ab2
  1. 29
      ruoyi-ui/src/assets/iconfont/demo_index.html
  2. 10
      ruoyi-ui/src/assets/iconfont/iconfont.css
  3. 2
      ruoyi-ui/src/assets/iconfont/iconfont.js
  4. 7
      ruoyi-ui/src/assets/iconfont/iconfont.json
  5. BIN
      ruoyi-ui/src/assets/iconfont/iconfont.ttf
  6. BIN
      ruoyi-ui/src/assets/iconfont/iconfont.woff
  7. BIN
      ruoyi-ui/src/assets/iconfont/iconfont.woff2
  8. 6
      ruoyi-ui/src/views/JiHeExpressway/components/Dialog/index.vue
  9. 46
      ruoyi-ui/src/views/JiHeExpressway/components/RoadStateCard/index.vue
  10. 7
      ruoyi-ui/src/views/JiHeExpressway/components/VideoMulti/index.vue
  11. 214
      ruoyi-ui/src/views/JiHeExpressway/index.vue
  12. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue
  13. 29
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/index.vue
  14. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/MeteorologicalDetection/index.vue
  15. 168
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/components/DialogBoard.vue
  16. 64
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/components/DialogCamera.vue
  17. 164
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/index.vue
  18. 50
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/index.vue
  19. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/emergencyProcessManagement/commonPhrases/index.vue
  20. 1
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue
  21. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/datav/roadNet/index.vue
  22. 4
      ruoyi-ui/vue.config.js

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

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

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

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

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

File diff suppressed because one or more lines are too long

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

@ -5,6 +5,13 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "28559895",
"name": "行人",
"font_class": "pedestrian",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "2718724",
"name": "关闭",

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

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

@ -10,7 +10,7 @@
<div class="dialog-title">
<img class="title-icon" src="@screen/images/dialog/title-icon.svg" />
<span>{{ title }}</span>
<img class="icon-close" @click.stop="modelVisible = false" src="@screen/images/dialog/icon-close.svg" />
<img class="icon-close" @click.stop="close()" src="@screen/images/dialog/icon-close.svg" />
</div>
<div class="dialog-content">
@ -86,6 +86,10 @@ export default {
},
},
methods: {
close(){
console.log('------')
this.modelVisible = false
},
updateDialogVisible(bool) {
this.modelVisible = bool;
},

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

@ -1,18 +1,11 @@
<template>
<BorderRadiusImage
class="RoadStateCard"
borderRadius="2px"
borderColor="linear-gradient(360deg, rgba(55, 231, 255, 0.3), rgba(55, 231, 255, 0))"
borderWidth="2px"
>
<div class="left">
<BorderRadiusImage class="RoadStateCard" borderRadius="2px"
borderColor="linear-gradient(360deg, rgba(55, 231, 255, 0.3), rgba(55, 231, 255, 0))" borderWidth="2px">
<div class="left" v-if="isShowLeft">
<!-- <img :src="(cardData.pictures ? cardData.pictures[0] : null) || require(`./test.png`)"> -->
<!-- <img :src="require(`./test.png`)"> -->
<ElImage
style="width: 212px; height: 159px"
:src="cardData.pictures ? cardData.pictures[0] : null"
:preview-src-list="cardData.pictures || []"
>
<ElImage style="width: 212px; height: 159px" :src="cardData.pictures ? cardData.pictures[0] : null"
:preview-src-list="cardData.pictures || []">
<div slot="error">
<i class="el-icon-picture-outline icon"></i>
</div>
@ -26,25 +19,14 @@
</p>
</div>
<div class="controls">
<Button
:style="{ background: firstBtnColor, width: '50%' }"
@click.native="$emit('firstBtnClick', cardData.id)"
>{{ getFirstBtnText(cardData.state) }}</Button
>
<Button
v-if="cardData.state == 4"
:style="{ background: lastBtnColor, width: '50%' }"
@click.native="$emit('lastBtnClick', cardData.id)"
>{{ getLastBtnText(cardData.state) }}</Button
>
<Button :style="{ background: firstBtnColor, width: isShowLeft ? '50%' : '25%' }"
@click.native="$emit('firstBtnClick', cardData.id)">{{ getFirstBtnText(cardData.state) }}</Button>
<Button v-if="cardData.state == 4" :style="{ background: lastBtnColor, width: isShowLeft ? '50%' : '25%' }"
@click.native="$emit('lastBtnClick', cardData.id)">{{ getLastBtnText(cardData.state) }}</Button>
</div>
</div>
<img
v-if="cardData.state"
class="status"
:src="require(`./images/${statusMap[cardData.state]}.svg`)"
/>
<img v-if="cardData.state" class="status" :src="require(`./images/${statusMap[cardData.state]}.svg`)" />
</BorderRadiusImage>
</template>
@ -106,6 +88,10 @@ export default {
},
],
},
isShowLeft: {
type: Boolean,
default: true
}
},
data() {
return {
@ -180,7 +166,7 @@ export default {
display: flex;
flex-direction: column;
> p {
>p {
font-size: 12px;
color: #f4f4f4;
line-height: 24px;
@ -212,7 +198,7 @@ export default {
display: flex;
gap: 9px;
> div {
>div {
// flex: 1;
}
}

7
ruoyi-ui/src/views/JiHeExpressway/components/VideoMulti/index.vue

@ -68,7 +68,12 @@ export default {
const changeItem = find(this.urls, { iotDeviceId: this.cameraId });
this.dialogData = { ...changeItem, parseOtherConfig: changeItem.otherConfig && JSON.parse(changeItem.otherConfig) };
console.log(this.cameraId, this.dialogData)
this.showVideo();
this.player?.destroy();
const self = this;
setTimeout(() => {
self.showVideo();
}, 500);
},
async playVideo() {
this.player?.destroy();

214
ruoyi-ui/src/views/JiHeExpressway/index.vue

@ -1,7 +1,7 @@
<template>
<div class="pageBox">
<HeaderMenu class="header" :style="headerStyle"/>
<!-- @onChange="handleChange" -->
<HeaderMenu class="header" :style="headerStyle" />
<!-- @onChange="handleChange" -->
<Adaptation class="content" :headerHeight="headerHeight">
<Transition name="fade">
<router-view v-if="isShowContent" />
@ -15,6 +15,7 @@ import HeaderMenu from "./components/HeaderMenu/index.vue";
import Adaptation from "./components/Adaptation.vue";
import getBoardBaseData from '@/common/getBoardBaseData'
import { mapGetters } from "vuex";
import moment from "moment";
export default {
name: "ji_ze_gao_su",
components: {
@ -24,6 +25,8 @@ export default {
},
data() {
return {
notifications: [],
notifyIndex:0,
isShowContent:false,
headerHeight:100,
header: {
@ -57,6 +60,102 @@ export default {
}
},
mounted(){
let _this = this;
document.onkeydown = function(e){
if(e.code == 'Space'){
let obj = {
content: "一个沙雕横穿马路导致堵车,他还不承认,不知道怎么办,请求指导,在线等。",
time:moment().format("yyyy-MM-DD hh:mm"),
type : "3",
level: ["info", "danger"][_this.notifyIndex%2]
}
_this.notifications[_this.notifyIndex] = _this.$notify({
title: '',
dangerouslyUseHTMLString: true,
duration: 0,
customClass: 'notify_whole',
offset: 50,
showClose: false,
message: _this.$createElement(
"div",
{class : "notify_box " + obj.level},
[
_this.$createElement(
"div",
{ class: 'nofify_head' },
[
_this.$createElement(
"p",
{ class:"title"},
[
_this.$createElement(
"i",
{ class: 'icon el-icon-warning' }
), _this.$createElement(
"span",
{ class: 'text' },
"告警"
)
]
)
, _this.$createElement(
"button",
{
class: 'btn_close el-icon-close',
on: {
click: _this.closeNotify.bind(_this, { type: obj.type, index: _this.notifyIndex }),
},
}
)
]
),
_this.$createElement(
"div",
{ class:'nofify_content'},
[
_this.$createElement(
"span",
{ class: 'type_icon' },
[
_this.$createElement(
"i",
{ class: 'iconfont icon-pedestrian' }
)
]
),
_this.$createElement(
"span",
{ class: 'info' },
[
_this.$createElement(
"span",
{ class: 'content' },
obj.content
)
,
_this.$createElement(
"div",
{class: 'time'},
obj.time
)
]
),
]
),
]
),
});
_this.notifyIndex ++;
}
}
// this.$store.commit("menu/resetRecent");
getBoardBaseData().then(res => {
this.isShowContent = true;
@ -71,6 +170,19 @@ export default {
this.calcHeaderScale();
},
methods: {
//
closeNotify(para) {
let type = para.type;
console.log("hahah");
console.log(type);
if (type === '2') {
console.log("自动关闭,流程。。");
}
if (type === '3') {
console.log("手动确认,流程。。");
}
this.notifications[para.index].close();
},
calcHeaderScale(){
let winW = window.innerWidth;
this.header.scale = winW / this.header.originW;
@ -135,3 +247,101 @@ export default {
}
}
</style>
<style lang="scss">
.notify_whole {
padding: 0;
width: 420px !important;
// height: 120px !important;
margin-top: 50px !important;
background: none;
border: none; border-radius: 0;
}
.el-notification__group {
width: 100%; height: 100%; margin: 0;
}
.el-notification__content {
width: 100%;
height: 100%;
margin: 0;
}
.notify_box{ width: 100%; height: 100%; background-image: linear-gradient(180deg, rgba(14, 69, 92, 0.9) 0%, rgba(20, 89, 119, 0.9) 100%);
border: 1px solid; border-image: linear-gradient(180deg, rgba(78, 174, 204, 1), rgba(78, 174, 204, 0)) 2 2;
.nofify_head{ display: flex; justify-content: space-between; height: 44px; align-items: center; margin: 0 12px;
.title{ display: flex; justify-content: flex-start; align-items: center;
.icon { font-size: 24px;}
.text{ font-size: 17px; margin-left: 4px; font-weight: bold;}
}
.btn_close{ background: none; border: none;
cursor: pointer;
font-size: 20px;
text-align: center;
}
}
.nofify_content{
display: flex; align-items: center; padding: 20px 20px 16px 0;
.type_icon{ width: 80px; display: flex; align-items: center; justify-content: center;
.iconfont{ font-size: 48px;}
}
.info{ flex: 1;
.content{ color:#FFF; font-size: 16px; word-wrap: break-word; white-space: wrap;}
.time{ color: #FFF; font-size: 14px; opacity: 0.5; text-align: right; margin-top: 8px;}
}
}
}
$infoColor: #3DE8FF;
$dangerColor: #FF5F5F;
.notify_box.info {
background-image: linear-gradient(180deg, rgba(14, 69, 92, 0.9) 0%, rgba(20, 89, 119, 0.9) 100%);
border-image: linear-gradient(180deg, rgba(78, 174, 204, 1), rgba(78, 174, 204, 0)) 2 2;
.nofify_head { border-bottom: 1px solid #FFFFFF33;
.title {
.icon { color: $infoColor;}
.text {color: $infoColor; }
}
.btn_close {color: $infoColor;}
}
.nofify_content {
.type_icon {
.iconfont{color: $infoColor;}
}
.info {
.content {}
.time {}
}
}
}
.notify_box.danger {
background-image: linear-gradient(180deg, rgba(30, 0, 0, 0.9) 0%, rgba(111, 0, 0, 0.9) 100%);
border-image: linear-gradient(180deg, rgba(237, 147, 128, 1), rgba(239, 146, 157, 0)) 2 2;
.nofify_head { border-bottom: 1px solid #FFFFFF33;
.title {
.icon { color: $dangerColor;}
.text {color: $dangerColor; }
}
.btn_close {color: $dangerColor;}
}
.nofify_content {
.type_icon {
.iconfont{color: $dangerColor;}
}
.info {
.content {}
.time {}
}
}
}
</style>

5
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue

@ -38,7 +38,7 @@ export default {
props: {
visible: Boolean,
deviceId: String,
id: String,
id: Number,
deviceType: String,
},
data() {
@ -49,6 +49,9 @@ export default {
computed: {
modelVisible: {
get() {
if(this.visible){
console.log('id',id)
}
return this.visible;
},
set(val) {

29
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/index.vue

@ -164,18 +164,23 @@ export default {
handleClickTabs() { },
requestURL(functionId = 52, options = {}) {
return new Promise((resolve, reject) => {
request
.post(
`business/device/functions/${this.dialogData.iotDeviceId}/${functionId}`,
options
)
.then((result) => {
if (result.code != 200) return reject();
resolve(result.data[0]);
})
.catch((err) => {
reject();
});
if (!this.dialogData.iotDeviceId) {
reject();
} else {
request
.post(
`business/device/functions/${this.dialogData.iotDeviceId}/${functionId}`,
options
)
.then((result) => {
if (result.code != 200) return reject();
resolve(result.data[0]);
})
.catch((err) => {
reject();
});
}
});
},
},

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/MeteorologicalDetection/index.vue

@ -139,7 +139,7 @@ export default {
},
{
label: "水膜厚度(mm)",
key: "waterFilmlceSnowValue",
key: "waterFilmIceSnowValue",
},
{
label: "大气压力(hPa)",

168
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/components/DialogBoard.vue

@ -0,0 +1,168 @@
<template>
<Dialog v-if="data" v-model="visibleModel" :title="data.deviceName" width="600px">
<div v-for="(itm, indx) in selectedBdMsg" :key="indx" class="tplItem">
<BoardPreview class="boardPreview" :boardWH="selectedSize" :tpl="itm"></BoardPreview>
</div>
</Dialog>
</template>
<script>
import Dialog from "@screen/components/Dialog/index.vue";
import Button from "@screen/components/Buttons/Button.vue";
import BoardPreview from "@screen/components/infoBoard/BoardPreview.vue";
import request from "@/utils/request";
import { getBoardDeviceInfo } from "@/api/board/board";
export default {
name: "DialogBoard",
components: {
Dialog,
Button,
BoardPreview,
},
props: {
visible: {
type: Boolean,
default: false,
},
data: {
type: Object,
default: null,
},
},
emit: ["close"],
data() {
return {
selectedBdMsg:[],
selectedSize:null
};
},
computed: {
visibleModel: {
get() {
if (this.visible) this.getData();
return this.visible;
},
set(bool) {
this.$emit("close", bool);
},
},
},
methods: {
getData() {
const deviceFrom = this.data;
if(deviceFrom.otherConfig){
this.selectedSize = JSON.parse(deviceFrom.otherConfig).screenSize
}
if (!deviceFrom.iotDeviceId || deviceFrom.iotDeviceId.includes("null_")) {
this.$message.warning("设备未接入!");
return;
}
this.selectedBdMsg = [];
getBoardDeviceInfo(deviceFrom.iotDeviceId, deviceFrom.id)
.then((res) => {
this.selectedBdMsg = res.data["3A"].content;
})
.catch((err) => { });
},
},
};
</script>
<style lang="scss" scoped>
.tplItem {
margin-right: 14px;
display: flex;
align-items: stretch;
padding-bottom: 10px;
.boardPreview {
border: 2px solid #004c64;
background-color: #133242;
// width: 560px;
// height:80px;
flex: 1;
}
.infoBtnBox {
width: 160px;
height: 80px;
display: flex;
margin-left: 10px;
/* // border: solid 1px #05afe3; */
border: 2px solid #004c64;
background-color: #133242;
display: flex;
justify-content: space-around;
align-items: center;
.btn {
background-repeat: no-repeat;
background-size: 100% 100%;
width: 40px;
height: 40px;
&.btnApply {
background-image: url(~@/assets/jihe/images/button/toLeft.svg);
}
&.btnEdit {
background-image: url(~@/assets/jihe/images/button/edit.svg);
}
&.btnDelete {
background-image: url(~@/assets/jihe/images/button/delete.svg);
}
}
i {
font-size: 24px;
color: #666;
padding-left: 4px;
cursor: pointer;
caret-color: rgba(0, 0, 0, 0);
user-select: none;
}
i:hover {
color: #05afe3;
}
.disabledClass {
pointer-events: none;
cursor: auto !important;
color: #ccc;
}
}
}
.tplItem.ghost_class {
.boardPreview,
.infoBtnBox {
border-color: #F00;
}
}
.tplItem.chosen_class {
.boardPreview,
.infoBtnBox {
border-color: #0A0;
}
}
.tplItem.drag_class {
.boardPreview,
.infoBtnBox {
border-color: #FF0;
}
}
</style>

64
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/components/DialogCamera.vue

@ -0,0 +1,64 @@
<template>
<Dialog v-if="data" v-model="visibleModel" :title="data.deviceName" width="600px">
<Video class="video-stream" :camId="data.iotDeviceId" />
</Dialog>
</template>
<script>
import Dialog from "@screen/components/Dialog/index.vue";
import Button from "@screen/components/Buttons/Button.vue";
import Video from "@screen/components/Video/Video.vue"
import request from "@/utils/request";
import { getBoardDeviceInfo } from "@/api/board/board";
export default {
name: "DialogCamera",
components: {
Dialog,
Button,
Video
},
props: {
visible: {
type: Boolean,
default: false,
},
data: {
type: Object,
default: null,
},
},
emit: ["close"],
data() {
return {
selectedBdMsg:[],
selectedSize:null
};
},
computed: {
visibleModel: {
get() {
if (this.visible) this.getData();
return this.visible;
},
set(bool) {
this.$emit("close", bool);
},
},
},
methods: {
getData() {
},
},
};
</script>
<style lang="scss" scoped>
.video-stream {
width: 100%;
height: 100%;
}
</style>

164
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/index.vue

@ -5,7 +5,7 @@
ref="AMapContainerRef"
v-if="delayLoad"
@update:isGisCompleted="(data) => {
this.bindMap(data)
this.bindMap(data)
}
"
style="z-index: 9"
@ -19,7 +19,7 @@
@click="handleClick(item)"
>
<div
v-if="item.key === 'bar'"
v-if="['bar','level','camera'].indexOf(item.key) !== -1"
class="label"
slot="reference"
:style="{
@ -57,21 +57,36 @@
</ElPopover>
</div>
</div>
<DialogBoard
:visible="dialogVisible"
@close="handledDialogBoard(false)"
:data="dialogData"
/>
<DialogCamera
:visible="dialogVisibleCamera"
@close="handledDialogCamera(false)"
:data="dialogDataCamera"
/>
</Card>
</template>
<script>
import Card from "@screen/components/Card2/Card.vue";
import DialogBoard from "./components/DialogBoard.vue";
import DialogCamera from "./components/DialogCamera.vue";
import AMapContainer from "@screen/pages/Home/components/AMapContainer/index.vue";
import { provideMixin } from "./../../mixin";
import { getWeatherForecast } from "@/api/commandDispatch";
import * as echarts from "echarts";
import { StatChartOption } from "./charts";
import request from "@/utils/request";
export default {
name: "CrowdnessIndicatorRankings",
components: {
Card,
DialogBoard,
DialogCamera,
AMapContainer,
},
mixins: [provideMixin],
@ -95,10 +110,6 @@ export default {
key: "level",
label: "情报板",
},
// {
// key: "car",
// label: "",
// },
{
key: "pie",
label: "断面车流量",
@ -106,12 +117,34 @@ export default {
],
delayLoad: true,
weatherData: {},
markerBoard:[],
dialogVisible:false,
dialogData: null,
markerCamera:[],
dialogVisibleCamera:false,
dialogDataCamera: null,
};
},
computed: {
isActive() {
return (item) => this.active.includes(item.key);
},
modelVisible: {
get() {
return this.visible;
},
set(val) {
this.$emit("update:value", val);
},
},
},
watch: {
modelVisible: {
immediate: true,
handler(bool) {
if (!bool) return;
},
},
},
methods: {
handleClick(item) {
@ -129,8 +162,90 @@ export default {
});
} else if (item.key === "bar") {
this.$refs.AMapContainerRef.showRoadConditions(findIndex === -1);
} else if (item.key === 'level'){
this.getBoard(findIndex === -1);
} else if (item.key === 'camera'){
this.getCamera(findIndex === -1);
}
},
getCamera(isShow){
if(isShow){
const self = this;
this.markerCamera = [];
request({
url: "/video/nearCamPileNum",
method: "get",
params: {
pileNum: this.detailData.stakeMark,
},
}).then(result=>{
if (result.code != 200) return Message.error(`查询失败!${result.msg}`);
const list = [...result.data.downCamera,...result.data.upCamera];
const icon = require(`@screen/images/layer/路测设备/摄像机_active.svg`);
const icon_f = require(`@screen/images/layer/路测设备/摄像机_fault.svg`);
list.forEach(e => {
const p = new AMap.LngLat(parseFloat(e.longitude), parseFloat(e.latitude));
const m = this.addMarker(p,e.useState?icon:icon_f,e.useState,function(){
console.log(e,'-------------')
if(e.useState === 1){
self.dialogDataCamera = e;
self.dialogVisibleCamera = true;
} else {
self.$message.warning("设备未接入!!");
}
})
this.markerCamera.push(m)
});
})
} else {
this.markerCamera.forEach(e => {
e.setMap(null);
e = null;
});
}
},
handledDialogCamera(bool) {
this.dialogVisibleCamera = bool;
},
getBoard(isShow){
if(isShow){
const self = this;
this.markerBoard = [];
const fileData = new FormData(); // new formData
fileData.append("stakeMark", this.detailData.stakeMark);
fileData.append("direction", this.detailData.direction ==='济南方向'?1:2);
request({
url: "/business/device/selectNearBoard",
method: "post",
data:fileData
}).then(result=>{
if (result.code != 200) return Message.error(`查询失败!${result.msg}`);
const icon = require(`@screen/images/layer/路测设备/情报板_active.svg`);
const icon_f = require(`@screen/images/layer/路测设备/情报板_fault.svg`);
result.data.forEach(e => {
const p = new AMap.LngLat(parseFloat(e.longitude), parseFloat(e.latitude));
const m = this.addMarker(p,e.useState?icon:icon_f,e.useState,function(){
if(e.useState === 1){
self.dialogData = e;
self.dialogVisible = true;
} else {
self.$message.warning("设备未接入!");
}
})
this.markerBoard.push(m)
});
})
} else {
this.markerBoard.forEach(e => {
e.setMap(null);
e = null;
});
}
},
handledDialogBoard(bool) {
this.dialogVisible = bool;
},
getWeather() {
getWeatherForecast(117.2, 36.65).then((res) => {
this.weatherData =
@ -138,24 +253,35 @@ export default {
console.log("气象", res);
});
},
//
bindMap(isLoaded){
if(!isLoaded){
return;
}
const self = this;
setTimeout(() => {
// map
const {AMap,mapIns} = self.$refs.AMapContainerRef.getMapInstance();
const {longitude,dimension,eventName} = self.detailData;
const icon = require(`@screen/images/layer/事件专题/${eventName}_active.svg`);
const center = new AMap.LngLat(parseFloat(longitude), parseFloat(dimension));
self.addMarker(center,icon, 1);
mapIns.setZoomAndCenter(12, center);
//
console.log(mapIns,AMap,'--------')
console.log(self.detailData,'############');
}, 500);
},
addMarker(position,icon, state, fn = null){
const {AMap,mapIns} = this.$refs.AMapContainerRef.getMapInstance();
const {longitude,dimension,eventName} = this.detailData;
const icon = require(`@screen/images/layer/事件专题/${eventName}_active.svg`);
const nowBg = require(`@screen/images/mapBg/active.svg`);
const center = new AMap.LngLat(parseFloat(longitude), parseFloat(dimension));
const nowBg_f = require(`@screen/images/mapBg/fault.svg`);
var marker = new AMap.Marker({
position:center,
position:position,
content: `
<div style="
background-image: url(${nowBg});
background-image: url(${state?nowBg:nowBg_f});
background-size: 100% 100%;
background-repeat: no-repeat;
width: 51px;
@ -176,11 +302,13 @@ export default {
`,
anchor: 'bottom-center',
});
marker.on("click", (e) => {
if(fn){
fn(e)
}
})
mapIns.add(marker);
mapIns.setZoomAndCenter(12, center);
//
console.log(mapIns,AMap,'--------')
console.log(this.detailData,'############');
return marker;
}
},
mounted() {

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

@ -9,51 +9,27 @@
刷新
</ButtonGradient>
<InputSearch
ref="searchComp"
style="width: 402px"
:formList="searchFormList"
:formConfigOptions="{ dFormData: { eventState: '0' } }"
@handleSearch="handleSearch"
/>
<InputSearch ref="searchComp" style="width: 402px" :formList="searchFormList"
:formConfigOptions="{ dFormData: { eventState: '0' } }" @handleSearch="handleSearch" />
</div>
<!-- 内容 -->
<div class="body">
<RoadStateCard
v-for="(item, index) in data"
:key="index"
:cardData="item"
@firstBtnClick="firstBtnClick"
@lastBtnClick="lastBtnClick"
/>
<RoadStateCard v-for="(item, index) in data" :key="index" :cardData="item" :isShowLeft="false" @firstBtnClick="firstBtnClick"
@lastBtnClick="lastBtnClick" />
</div>
<!-- 分页 -->
<div class="footer">
<Pagination
@current-change="initData"
@size-change="onSizeChange"
width="'100%'"
:page-sizes="[12, 16, 20, 30, 50]"
:page-size="searchData.pageSize"
:current-page.sync="searchData.pageNum"
layout="total, sizes, prev, pager, next"
:total="total"
>
<Pagination @current-change="initData" @size-change="onSizeChange" width="'100%'"
:page-sizes="[12, 16, 20, 30, 50]" :page-size="searchData.pageSize" :current-page.sync="searchData.pageNum"
layout="total, sizes, prev, pager, next" :total="total">
</Pagination>
</div>
<EventDetailDialog
:visible="eventDetailDialogVisible"
:formData="detailDialogFormData"
@update:value="handleClose"
/>
<EventDispatchDialog
:visible="eventDispatchDialogVisible"
@update:value="handleClose"
:eventId="eventId"
/>
<EventDetailDialog :visible="eventDetailDialogVisible" :formData="detailDialogFormData"
@update:value="handleClose" />
<EventDispatchDialog :visible="eventDispatchDialogVisible" @update:value="handleClose" :eventId="eventId" />
</div>
</template>
@ -104,7 +80,7 @@ export default {
this.initData();
},
methods: {
onRefreshForm(){
onRefreshForm() {
this.searchData.pageNum = 1;
this.$refs.searchComp.handleResetForm();
},
@ -205,8 +181,8 @@ export default {
display: flex;
// justify-content: flex-end;
justify-content: space-between;
.refresh-btn {
}
.refresh-btn {}
}
.body {

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/emergencyProcessManagement/commonPhrases/index.vue

@ -1,5 +1,5 @@
<template>
<Dialog v-model="modelVisible" title="配置常用语" width="880px">
<Dialog v-model="modelVisible" title="配置常用语" width="880px" top="8%">
<!-- <Button style="margin: 10px 0 20px 20px; width: 100px;" @click.native="onAdd">添加</Button> -->
<div class="header">
<el-form ref="form" label-width="120px">

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

@ -153,6 +153,7 @@ export default {
cardData: { ...item, state },
lastBtnColor: textColor,
lastBtnText: text,
isShowLeft: this.activeName == '-1'
};
},
queryData(flag) {

2
ruoyi-ui/src/views/JiHeExpressway/pages/datav/roadNet/index.vue

@ -24,7 +24,7 @@
<img class="arrow arrow_02" src="./img/arrowRight.svg" alt="">
<img class="arrow arrow_03" src="./img/arrowRight.svg" alt="">
<div class="manageTotal">
<h4 class="keep-ratio">运管中心</h4>
<h4 class="keep-ratio">运管中心</h4>
<p>内存<em>20.79</em>/62.36GB CPU<em>1.00</em>/12<br>存储<em>25.68</em>/2328.93GB</p>
</div>
<ul class="manageDetail">

4
ruoyi-ui/vue.config.js

@ -52,8 +52,8 @@ module.exports = {
// target: `http://10.0.81.204:8087`, //现场后台 刘文阁
// target: `http://10.168.69.255:8087`, //正晨后台 连现场物联 刘文阁
// target: `http://10.168.78.135:8087`, //王钦
target: `http://10.168.66.196:8087`, //正晨后台 连现场物联 刘文阁2
// target: `http://10.168.68.42:8087`, //王思祥
// target: `http://10.168.66.196:8087`, //正晨后台 连现场物联 刘文阁2
target: `http://10.168.68.42:8087`, //王思祥
// target: `http://10.168.72.174:8087`, //赵祥龙
// target: `http://10.168.65.156:8097`, //孟
// target: `http://10.168.56.165:8087`, //王家宝

Loading…
Cancel
Save