济菏高速业务端
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.
 
 
 
 
 

256 lines
6.3 KiB

<template>
<Dialog v-model="visibleModel"
title="智能设备箱" width="470px" >
<Video class="video-stream" :camId="camId" img="设备箱" />
<div class="SmartDevice">
<ElTabs v-model="activeName" class="tabs">
<ElTabPane label="基本信息" name="first">
<!-- {{ dialogData }} -->
<Descriptions :list="list" :data="data" style="gap: 18px" />
</ElTabPane>
<ElTabPane label="设备参数" name="second">
<DeviceParams disabled :dialogData="dialogData" />
</ElTabPane>
<ElTabPane label="在线率统计" name="third">
<LineChart
v-if="activeName === 'third'"
:productId="dialogData.id"
style="height: 180px"
/>
</ElTabPane>
</ElTabs>
</div>
<template #footer>
<Button
v-if="
check(['business:home:equipmentBox']) &&
activeName != 'first' &&
data.deviceState == '1'
"
@click.native="deviceControlVisible = true"
>
设备操作
</Button>
<Button
v-else-if="
check(['business:home:equipmentBox']) && activeName != 'first'
"
style="background-color: #bbb"
>
设备离线
</Button>
</template>
<DeviceControlDialog
v-model="deviceControlVisible"
:dialogData="dialogData"
/>
</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 DeviceParams from "../Dialogs/SmartDevice/components/DeviceParams.vue";
import DeviceControlDialog from "../Dialogs/SmartDevice/components/DeviceControlDialog.vue";
import { checkPermi } from "@/utils/permission.js";
import request from "@/utils/request";
import {
getRoadInfoByStakeMark,
getProduct,
} from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js";
import { dialogDelayVisible } from "../Dialogs/mixin.js";
import { resolve } from "@antv/x6/lib/registry/node-anchor/util";
// 广播发布
export default {
name: "SmartDevice",
mixins: [dialogDelayVisible],
components: {
Dialog,
Descriptions,
LineChart,
Video,
Button,
DeviceParams,
DeviceControlDialog,
},
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,
deviceControlVisible: false,
data: {
deviceName: "LH24",
roadName: "济菏高速",
stakeMark: "k094+079",
direction: "1",
organizationName: "山东高速济南发展公司",
brand: "XXX厂家",
deviceState: "0",
},
list: [
{
label: "设备名称",
key: "deviceName",
},
{
label: "设备桩号",
key: "stakeMark",
},
{
label: "道路名称",
key: "roadName",
},
{
label: "设备方向",
key: "direction",
enum: "CameraDirectionEnum",
},
{
label: "设备状态",
key: "deviceState",
enum: "DeviceTypeEnum",
},
{
label: "设备厂商",
key: "manufacturer",
},
],
camId:null
};
},
async created() {
// if (!this.dialogData.iotDeviceId) this.dialogData.iotDeviceId = '10.0.36.146-1883';
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: '济菏高速' };
let deviceInfo;
if(this.dialogData.iotDeviceId!=null){
deviceInfo = await this.getDeviceInfo();
}
this.data = {
roadName: '济菏高速' ,
//deviceStateLiteral: deviceInfo?.data.formatValue.deviceState,
...this.data,
deviceStateName: (this.data.deviceState === '0'?'离线':'在线')
};
// console.log(
// "%c [ dialogData ]-103-「index.vue」",
// "font-size:15px; background:#36347c; color:#7a78c0;",
// this.dialogData,
// "+++========"
// );
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() { },
check(arr){
return checkPermi(arr);
},
async getDeviceInfo() {
return request({
url: `/business/device/properties/latest/${this.dialogData.iotDeviceId || "10.0.36.143-1883"
}/3`,
method: "get",
params: {},
});
},
},
};
</script>
<style lang="scss">
div.switcher {
font-size: 12px;
padding: 2px;
}
</style>
<style lang="scss" scoped>
.SmartDevice {
width: 420px;
// 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%;
}
}
}
}
.bottom {
margin-top: 12px;
display: flex;
gap: 9px;
align-items: center;
justify-content: end;
> div {
font-size: 16px;
padding: 6px 12px;
}
}
}
</style>