You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
6.1 KiB
250 lines
6.1 KiB
<template>
|
|
<Dialog v-model="visibleModel"
|
|
title="护栏碰撞弹窗" width="600px" style="z-index:3000">
|
|
<Video class="video-stream" :camId="camId" img="护栏碰撞预警系统" />
|
|
|
|
<div class="GuardrailCollision">
|
|
<ElTabs v-model="activeName" class="tabs">
|
|
<ElTabPane label="基本信息" name="first">
|
|
<Descriptions :list="list" :data="data" style="gap: 18px" />
|
|
<div class="jsdcontrol" v-hasPermi="['business:home:guardrailCollision']">
|
|
<span style="
|
|
color: #3de8ff;
|
|
font-size: 12px;
|
|
font-family: PingFang SC, PingFang SC;
|
|
font-weight: 400;
|
|
line-height: 25px;
|
|
">
|
|
警示灯:
|
|
</span>
|
|
<Button style="margin-left: 5px" @click.native="controlClick(30)">开</Button>
|
|
<Button style="margin-left: 5px" @click.native="controlClick(31)">关</Button>
|
|
<Button style="margin-left: 5px" @click.native="controlClick(34)">退出</Button>
|
|
</div>
|
|
</ElTabPane>
|
|
|
|
<ElTabPane label="在线率统计" name="third">
|
|
<LineChart v-if="activeName === 'third'" :productId="dialogData.id" />
|
|
</ElTabPane>
|
|
</ElTabs>
|
|
</div>
|
|
</Dialog>
|
|
</template>
|
|
|
|
<script>
|
|
import Dialog from "@screen/components/Dialog/index.vue";
|
|
import Button from "@screen/components/Buttons/Button.vue";
|
|
import Descriptions from "@screen/components/Descriptions.vue";
|
|
import Video from "@screen/components/Video";
|
|
import LineChart from "../LineChart/index.vue";
|
|
|
|
import Switcher from "@screen/pages/service/PublishingChannelManagement/components/Switcher.vue";
|
|
|
|
import { dialogDelayVisible } from "../Dialogs/mixin.js";
|
|
import request from "@/utils/request";
|
|
|
|
import RadioGroup from "@screen/components/FormConfig/components/RadioGroup/index.vue";
|
|
|
|
// 广播发布
|
|
export default {
|
|
name: "GuardrailCollision",
|
|
mixins: [dialogDelayVisible],
|
|
components: {
|
|
Dialog,
|
|
Button,
|
|
Descriptions,
|
|
LineChart,
|
|
Video,
|
|
Switcher,
|
|
RadioGroup,
|
|
},
|
|
props: {
|
|
visible: {
|
|
type: Boolean,
|
|
default: true,
|
|
},
|
|
data: {
|
|
type: Object,
|
|
default: null,
|
|
},
|
|
},
|
|
emit: ["close"],
|
|
computed: {
|
|
visibleModel: {
|
|
get() {
|
|
if (this.visible) this.getData();
|
|
return this.visible;
|
|
},
|
|
set(bool) {
|
|
this.$emit("close", bool);
|
|
},
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
activeName: "first",
|
|
releaseVisible: false,
|
|
secondLoading: true,
|
|
data: {
|
|
deviceName: "LH24",
|
|
roadName: "济菏高速",
|
|
stakeMark: "k094+079",
|
|
direction: "1",
|
|
organizationName: "山东高速济南发展公司",
|
|
brand: "XXX厂家",
|
|
deviceState: "0",
|
|
},
|
|
|
|
roadTypeList: [
|
|
{ key: "1", label: "菏泽方向" },
|
|
{ key: "3", label: "济南方向" },
|
|
],
|
|
roadType: "1",
|
|
list: [
|
|
{
|
|
label: "设备名称",
|
|
key: "deviceName",
|
|
},
|
|
{
|
|
label: "设备桩号",
|
|
key: "stakeMark",
|
|
},
|
|
{
|
|
label: "道路名称",
|
|
key: "roadName",
|
|
},
|
|
{
|
|
label: "设备方向",
|
|
key: "direction",
|
|
enum: "CameraDirectionEnum",
|
|
},
|
|
{
|
|
label: "设备状态",
|
|
key: "deviceState",
|
|
enum: "DeviceTypeEnum",
|
|
},
|
|
// {
|
|
// label: '设备厂商',
|
|
// key: "brand",
|
|
// },
|
|
],
|
|
activeOption: {
|
|
active: {
|
|
text: "开",
|
|
},
|
|
unActive: {
|
|
text: "关",
|
|
},
|
|
},
|
|
devicesList: [],
|
|
camId:null
|
|
};
|
|
},
|
|
async created() {
|
|
// if (!this.dialogData.iotDeviceId) this.dialogData.iotDeviceId = '10.0.36.146-1883';
|
|
|
|
// 修改camid
|
|
if(typeof this.data.otherConfig === 'string'){
|
|
const oConfig = JSON.parse(this.data.otherConfig)
|
|
if(oConfig && oConfig.camId){
|
|
this.camId = oConfig.camId
|
|
}
|
|
}
|
|
this.data = { ...this.dialogData, roadName: '济菏高速' };
|
|
if(this.dialogData.productId!=null){
|
|
getProduct(this.dialogData.productId)
|
|
.then(data => {
|
|
this.dialogData.brand = data.brand;
|
|
})
|
|
}
|
|
|
|
|
|
// const roadInfo = await getRoadInfoByStakeMark(this.dialogData.stakeMark);
|
|
|
|
// if (roadInfo) this.data.roadName = roadInfo.roadName;
|
|
},
|
|
methods:{
|
|
getData() {
|
|
|
|
},
|
|
controlClick(id){
|
|
request({
|
|
url: `/business/device/functions/${this.dialogData.iotDeviceId}/A3`,
|
|
method: "POST",
|
|
data: {
|
|
function:id
|
|
}
|
|
}).then(res=>{
|
|
if (result.code != 200) {
|
|
this.$message.error(result.msg);
|
|
return;
|
|
};
|
|
this.$message.success('设备请求完成')
|
|
})
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
div.switcher {
|
|
font-size: 12px;
|
|
padding: 2px;
|
|
}
|
|
</style>
|
|
<style lang="scss" scoped>
|
|
.GuardrailCollision {
|
|
width: 510px;
|
|
height: 240px;
|
|
color: #fff;
|
|
display: flex;
|
|
flex-direction: column;
|
|
|
|
.camera-video {
|
|
flex: 1.5;
|
|
}
|
|
|
|
.tabs {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
|
|
::v-deep {
|
|
.el-tabs__content {
|
|
flex: 1;
|
|
|
|
.el-tab-pane {
|
|
height: 100%;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.content-second {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
overflow: hidden;
|
|
gap: 9px;
|
|
}
|
|
|
|
.bottom {
|
|
margin-top: 12px;
|
|
display: flex;
|
|
gap: 9px;
|
|
align-items: center;
|
|
justify-content: end;
|
|
|
|
> div {
|
|
font-size: 16px;
|
|
padding: 6px 12px;
|
|
}
|
|
}
|
|
}
|
|
.jsdcontrol{
|
|
display:flex;
|
|
margin-top:20px;
|
|
align-content: center;
|
|
}
|
|
</style>
|
|
|