|
@@ -1,7 +1,7 @@
|
|
<template>
|
|
<template>
|
|
<div class="bg" style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
|
|
<div class="bg" style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
|
|
<a-spin :spinning="loading" />
|
|
<a-spin :spinning="loading" />
|
|
- <div id="window3D" class="window3D-bg" v-show="!loading" style="width: 100%; height: 100%; position: absolute; overflow: hidden"> </div>
|
|
|
|
|
|
+ <div id="window3D" v-show="!loading" style="width: 100%; height: 100%; position: absolute; overflow: hidden"> </div>
|
|
<!-- <div id="damper3DCSS" v-show="!loading" style="width: 100%; height: 100%; top:0; left: 0; position: absolute; overflow: hidden;">
|
|
<!-- <div id="damper3DCSS" v-show="!loading" style="width: 100%; height: 100%; top:0; left: 0; position: absolute; overflow: hidden;">
|
|
<div>
|
|
<div>
|
|
<div ref="elementContent" class="elementContent">
|
|
<div ref="elementContent" class="elementContent">
|
|
@@ -27,8 +27,9 @@
|
|
<div class="button-box" @click="setArea(2)">设定后窗面积</div>
|
|
<div class="button-box" @click="setArea(2)">设定后窗面积</div>
|
|
</div>
|
|
</div>
|
|
<div v-if="selectData.nwindownum == 1" class="row">
|
|
<div v-if="selectData.nwindownum == 1" class="row">
|
|
- <div class="button-box" @click="setArea(1)">设定风窗面积</div>
|
|
|
|
|
|
+ <div class="button-box" @click="setArea(1)">设定风窗面积</div>
|
|
</div>
|
|
</div>
|
|
|
|
+
|
|
</div>
|
|
</div>
|
|
<!-- <div class="top-right row">
|
|
<!-- <div class="top-right row">
|
|
<div class="control-type row">
|
|
<div class="control-type row">
|
|
@@ -56,7 +57,7 @@
|
|
{{ selectData.strname }}
|
|
{{ selectData.strname }}
|
|
</div>
|
|
</div>
|
|
<div class="bottom-tabs-box" @mousedown="setDivHeight($event, 250, scroll)">
|
|
<div class="bottom-tabs-box" @mousedown="setDivHeight($event, 250, scroll)">
|
|
- <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 100}px`">
|
|
|
|
|
|
+ <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 100}px`" >
|
|
<a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
|
|
<a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
|
|
<a-tab-pane key="1" tab="实时监测">
|
|
<a-tab-pane key="1" tab="实时监测">
|
|
<MonitorTable
|
|
<MonitorTable
|
|
@@ -96,23 +97,17 @@
|
|
</a-tab-pane>
|
|
</a-tab-pane>
|
|
<a-tab-pane key="3" tab="历史数据">
|
|
<a-tab-pane key="3" tab="历史数据">
|
|
<div class="tab-item" v-if="activeKey === '3'">
|
|
<div class="tab-item" v-if="activeKey === '3'">
|
|
- <HistoryTable columns-type="window" device-type="window" :device-list-api="baseList" designScope="window-history" :scroll="scroll" />
|
|
|
|
|
|
+ <HistoryTable columns-type="window" device-type="window" :device-list-api="baseList" designScope="window-history" :scroll="scroll"/>
|
|
</div>
|
|
</div>
|
|
</a-tab-pane>
|
|
</a-tab-pane>
|
|
<a-tab-pane key="4" tab="报警历史">
|
|
<a-tab-pane key="4" tab="报警历史">
|
|
<div class="tab-item" v-if="activeKey === '4'">
|
|
<div class="tab-item" v-if="activeKey === '4'">
|
|
- <AlarmHistoryTable columns-type="alarm" device-type="window" :device-list-api="baseList" designScope="alarm-history" :scroll="scroll" />
|
|
|
|
|
|
+ <AlarmHistoryTable columns-type="alarm" device-type="window" :device-list-api="baseList" designScope="alarm-history" :scroll="scroll"/>
|
|
</div>
|
|
</div>
|
|
</a-tab-pane>
|
|
</a-tab-pane>
|
|
<a-tab-pane key="5" tab="操作历史">
|
|
<a-tab-pane key="5" tab="操作历史">
|
|
<div class="tab-item" v-if="activeKey === '5'">
|
|
<div class="tab-item" v-if="activeKey === '5'">
|
|
- <HandlerHistoryTable
|
|
|
|
- columns-type="operatorhistory"
|
|
|
|
- device-type="window"
|
|
|
|
- :device-list-api="baseList"
|
|
|
|
- designScope="alarm-history"
|
|
|
|
- :scroll="scroll"
|
|
|
|
- />
|
|
|
|
|
|
+ <HandlerHistoryTable columns-type="operatorhistory" device-type="window" :device-list-api="baseList" designScope="alarm-history" :scroll="scroll"/>
|
|
</div>
|
|
</div>
|
|
</a-tab-pane>
|
|
</a-tab-pane>
|
|
</a-tabs>
|
|
</a-tabs>
|
|
@@ -141,17 +136,17 @@
|
|
import { setDivHeight } from '/@/utils/event';
|
|
import { setDivHeight } from '/@/utils/event';
|
|
import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
|
|
import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
|
|
import { useRouter } from 'vue-router';
|
|
import { useRouter } from 'vue-router';
|
|
- import { deviceCameraInit } from '/@/utils/ventutil.ts';
|
|
|
|
|
|
+ import { deviceCameraInit } from '/@/utils/ventutil.ts'
|
|
|
|
|
|
const { currentRoute } = useRouter();
|
|
const { currentRoute } = useRouter();
|
|
|
|
|
|
- const MonitorDataTable = ref();
|
|
|
|
|
|
+ const MonitorDataTable = ref()
|
|
|
|
|
|
const playerRef = ref();
|
|
const playerRef = ref();
|
|
- let webRtcServer: any[] = [];
|
|
|
|
|
|
+ let webRtcServer: any[] = []
|
|
const scroll = reactive({
|
|
const scroll = reactive({
|
|
- y: 240,
|
|
|
|
- });
|
|
|
|
|
|
+ y: 240
|
|
|
|
+ })
|
|
|
|
|
|
const modalIsShow = ref<boolean>(false); // 是否显示模态框
|
|
const modalIsShow = ref<boolean>(false); // 是否显示模态框
|
|
const modalTitle = ref(''); // 模态框标题显示内容,根据设备操作类型决定
|
|
const modalTitle = ref(''); // 模态框标题显示内容,根据设备操作类型决定
|
|
@@ -178,11 +173,12 @@
|
|
|
|
|
|
const tabChange = (activeKeyVal) => {
|
|
const tabChange = (activeKeyVal) => {
|
|
activeKey.value = activeKeyVal;
|
|
activeKey.value = activeKeyVal;
|
|
- if (activeKeyVal == 1) {
|
|
|
|
|
|
+ if(activeKeyVal == 1){
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
- MonitorDataTable.value.setSelectedRowKeys([selectData.deviceID]);
|
|
|
|
- });
|
|
|
|
|
|
+ MonitorDataTable.value.setSelectedRowKeys([selectData.deviceID])
|
|
|
|
+ })
|
|
}
|
|
}
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
const initData = {
|
|
const initData = {
|
|
@@ -200,7 +196,7 @@
|
|
frontRearDifference: '-',
|
|
frontRearDifference: '-',
|
|
rearPresentValue: '-',
|
|
rearPresentValue: '-',
|
|
maxarea: 0,
|
|
maxarea: 0,
|
|
- nwindownum: 0,
|
|
|
|
|
|
+ nwindownum: 0
|
|
};
|
|
};
|
|
|
|
|
|
// 监测数据
|
|
// 监测数据
|
|
@@ -210,19 +206,16 @@
|
|
let timer: null | NodeJS.Timeout = null;
|
|
let timer: null | NodeJS.Timeout = null;
|
|
const getMonitor = (flag?) => {
|
|
const getMonitor = (flag?) => {
|
|
if (Object.prototype.toString.call(timer) === '[object Null]') {
|
|
if (Object.prototype.toString.call(timer) === '[object Null]') {
|
|
- timer = setTimeout(
|
|
|
|
- async () => {
|
|
|
|
- const data = await getDataSource();
|
|
|
|
- Object.assign(selectData, data);
|
|
|
|
- playAnimation(selectData, selectData.maxarea);
|
|
|
|
- addMonitorText(selectData);
|
|
|
|
- if (timer) {
|
|
|
|
- timer = null;
|
|
|
|
- }
|
|
|
|
- getMonitor();
|
|
|
|
- },
|
|
|
|
- flag ? 0 : 1000
|
|
|
|
- );
|
|
|
|
|
|
+ timer = setTimeout(async () => {
|
|
|
|
+ const data = await getDataSource();
|
|
|
|
+ Object.assign(selectData, data);
|
|
|
|
+ playAnimation(selectData, selectData.maxarea);
|
|
|
|
+ addMonitorText(selectData);
|
|
|
|
+ if (timer) {
|
|
|
|
+ timer = null;
|
|
|
|
+ }
|
|
|
|
+ getMonitor();
|
|
|
|
+ }, flag ? 0 : 1000);
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
@@ -236,9 +229,9 @@
|
|
if (dataSource.value.length > 0 && selectRowIndex.value == -1) {
|
|
if (dataSource.value.length > 0 && selectRowIndex.value == -1) {
|
|
// 初始打开页面
|
|
// 初始打开页面
|
|
if (currentRoute.value['query'] && currentRoute.value['query']['id']) {
|
|
if (currentRoute.value['query'] && currentRoute.value['query']['id']) {
|
|
- MonitorDataTable.value.setSelectedRowKeys([currentRoute.value['query']['id']]);
|
|
|
|
|
|
+ MonitorDataTable.value.setSelectedRowKeys([currentRoute.value['query']['id']])
|
|
} else {
|
|
} else {
|
|
- MonitorDataTable.value.setSelectedRowKeys([dataSource.value[0]['deviceID']]);
|
|
|
|
|
|
+ MonitorDataTable.value.setSelectedRowKeys([dataSource.value[0]['deviceID']])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
const data: any = toRaw(dataSource.value[selectRowIndex.value]); //maxarea
|
|
const data: any = toRaw(dataSource.value[selectRowIndex.value]); //maxarea
|
|
@@ -253,31 +246,30 @@
|
|
};
|
|
};
|
|
|
|
|
|
async function getCamera() {
|
|
async function getCamera() {
|
|
- const res = await cameraList({ deviceid: selectData['deviceID'] });
|
|
|
|
- const cameras: [] = res.records || [];
|
|
|
|
- let cameraAddrs: any[] = [],
|
|
|
|
- cameraNames: string[] = [];
|
|
|
|
|
|
+ const res = await cameraList({ deviceid: selectData['deviceID'] })
|
|
|
|
+ const cameras: [] = res.records || []
|
|
|
|
+ let cameraAddrs: any[] = [], cameraNames: string[] = [];
|
|
if (cameras.length > 0) {
|
|
if (cameras.length > 0) {
|
|
- cameras.forEach((item) => {
|
|
|
|
|
|
+ cameras.forEach(item => {
|
|
if (item['devicekind'] == 'toRtsp' || item['devicekind'] == 'toHLS') {
|
|
if (item['devicekind'] == 'toRtsp' || item['devicekind'] == 'toHLS') {
|
|
- cameraNames.push(item['name']);
|
|
|
|
|
|
+ cameraNames.push(item['name'])
|
|
} else {
|
|
} else {
|
|
- cameraAddrs.push({ name: item['name'], addr: item['addr'] });
|
|
|
|
|
|
+ cameraAddrs.push({ name: item['name'], addr: item['addr'] })
|
|
}
|
|
}
|
|
- });
|
|
|
|
|
|
+ })
|
|
}
|
|
}
|
|
if (cameraNames.length > 0) {
|
|
if (cameraNames.length > 0) {
|
|
// 请求接口从装备院拿数据
|
|
// 请求接口从装备院拿数据
|
|
- const addrs: string[] = await cameraAddrList({ cameraNameList: cameraNames });
|
|
|
|
|
|
+ const addrs: string[] = await cameraAddrList({ cameraNameList: cameraNames })
|
|
for (let i = 0; i < addrs.length; i++) {
|
|
for (let i = 0; i < addrs.length; i++) {
|
|
- cameraAddrs.push({ name: '摄像头' + i, addr: addrs[i] });
|
|
|
|
|
|
+ cameraAddrs.push({ name: '摄像头' + i, addr: addrs[i] })
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- const obj = await deviceCameraInit(cameraAddrs, playerRef.value, webRtcServer);
|
|
|
|
- webRtcServer = obj.webRtcServerList;
|
|
|
|
- const playerDoms = obj.playerDoms;
|
|
|
|
|
|
+ const obj = await deviceCameraInit(cameraAddrs, playerRef.value, webRtcServer)
|
|
|
|
+ webRtcServer = obj.webRtcServerList
|
|
|
|
+ const playerDoms = obj.playerDoms
|
|
// 注意前后门适应需要对应 //[0] 后门 [1]前门
|
|
// 注意前后门适应需要对应 //[0] 后门 [1]前门
|
|
- await initCameraCanvas(...playerDoms);
|
|
|
|
|
|
+ await initCameraCanvas(...playerDoms)
|
|
}
|
|
}
|
|
|
|
|
|
// 切换检测数据
|
|
// 切换检测数据
|
|
@@ -294,7 +286,7 @@
|
|
playAnimation(selectRow, baseData.maxarea, true);
|
|
playAnimation(selectRow, baseData.maxarea, true);
|
|
loading.value = false;
|
|
loading.value = false;
|
|
});
|
|
});
|
|
- await getCamera();
|
|
|
|
|
|
+ await getCamera()
|
|
};
|
|
};
|
|
|
|
|
|
// 判断前后窗的面积是否发生改变,如果改变则开启动画
|
|
// 判断前后窗的面积是否发生改变,如果改变则开启动画
|
|
@@ -304,27 +296,9 @@
|
|
rotationParam.frontDeg1 = (90 / maxarea) * Number(data.forntArea) || 0;
|
|
rotationParam.frontDeg1 = (90 / maxarea) * Number(data.forntArea) || 0;
|
|
rotationParam.backDeg1 = (90 / maxarea) * Number(data.rearArea) || 0;
|
|
rotationParam.backDeg1 = (90 / maxarea) * Number(data.rearArea) || 0;
|
|
if (isFirst) {
|
|
if (isFirst) {
|
|
- console.log(
|
|
|
|
- '最大面积---->',
|
|
|
|
- maxarea,
|
|
|
|
- '前窗实际面积---->',
|
|
|
|
- selectData.forntArea,
|
|
|
|
- '后窗实际面积---->',
|
|
|
|
- selectData.rearArea,
|
|
|
|
- '计算的值---->',
|
|
|
|
- rotationParam
|
|
|
|
- );
|
|
|
|
|
|
+ console.log('最大面积---->', maxarea, '前窗实际面积---->', selectData.forntArea, '后窗实际面积---->', selectData.rearArea, '计算的值---->', rotationParam);
|
|
}
|
|
}
|
|
- console.log(
|
|
|
|
- '最大面积---->',
|
|
|
|
- maxarea,
|
|
|
|
- '前窗实际面积---->',
|
|
|
|
- selectData.forntArea,
|
|
|
|
- '后窗实际面积---->',
|
|
|
|
- selectData.rearArea,
|
|
|
|
- '计算的值---->',
|
|
|
|
- rotationParam
|
|
|
|
- );
|
|
|
|
|
|
+ console.log('最大面积---->', maxarea, '前窗实际面积---->', selectData.forntArea, '后窗实际面积---->', selectData.rearArea, '计算的值---->', rotationParam);
|
|
if (!rotationParam.frontDeg1 && !rotationParam.backDeg1) {
|
|
if (!rotationParam.frontDeg1 && !rotationParam.backDeg1) {
|
|
// 当返回值有误时默认关闭
|
|
// 当返回值有误时默认关闭
|
|
play(rotationParam, 0);
|
|
play(rotationParam, 0);
|
|
@@ -344,13 +318,13 @@
|
|
|
|
|
|
// 设置风窗面积
|
|
// 设置风窗面积
|
|
const setArea = (flag) => {
|
|
const setArea = (flag) => {
|
|
- if (selectData.nwindownum == 2) {
|
|
|
|
|
|
+ if(selectData.nwindownum == 2){
|
|
modalTitle.value = flag === 1 ? '设定前窗面积' : '设定后窗面积';
|
|
modalTitle.value = flag === 1 ? '设定前窗面积' : '设定后窗面积';
|
|
- } else {
|
|
|
|
- modalTitle.value = '设定风窗面积';
|
|
|
|
|
|
+ }else {
|
|
|
|
+ modalTitle.value = '设定风窗面积'
|
|
}
|
|
}
|
|
-
|
|
|
|
- modalType.value = flag + '';
|
|
|
|
|
|
+
|
|
|
|
+ modalType.value = flag+'';
|
|
modalIsShow.value = true;
|
|
modalIsShow.value = true;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -369,7 +343,7 @@
|
|
};
|
|
};
|
|
deviceControlApi(data)
|
|
deviceControlApi(data)
|
|
.then(() => {
|
|
.then(() => {
|
|
- message.success('设置成功');
|
|
|
|
|
|
+ message.success('设置成功')
|
|
})
|
|
})
|
|
.finally(() => {
|
|
.finally(() => {
|
|
handleCancel();
|
|
handleCancel();
|
|
@@ -382,6 +356,7 @@
|
|
modalType.value = '';
|
|
modalType.value = '';
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+
|
|
onBeforeMount(() => {
|
|
onBeforeMount(() => {
|
|
// const sendVal = JSON.stringify({ pagetype: 'normal', devicetype: 'window', orgcode: '', ids: '', systemID: '' });
|
|
// const sendVal = JSON.stringify({ pagetype: 'normal', devicetype: 'window', orgcode: '', ids: '', systemID: '' });
|
|
// initWebSocket(sendVal);
|
|
// initWebSocket(sendVal);
|
|
@@ -390,12 +365,13 @@
|
|
|
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
loading.value = true;
|
|
loading.value = true;
|
|
-
|
|
|
|
|
|
+
|
|
mountedThree().then(async () => {
|
|
mountedThree().then(async () => {
|
|
// await setModelType('singleWindow');
|
|
// await setModelType('singleWindow');
|
|
getMonitor(true);
|
|
getMonitor(true);
|
|
loading.value = false;
|
|
loading.value = false;
|
|
addMonitorText(selectData);
|
|
addMonitorText(selectData);
|
|
|
|
+
|
|
});
|
|
});
|
|
});
|
|
});
|
|
onUnmounted(() => {
|
|
onUnmounted(() => {
|
|
@@ -405,9 +381,9 @@
|
|
timer = undefined;
|
|
timer = undefined;
|
|
}
|
|
}
|
|
if (webRtcServer && webRtcServer.length > 0) {
|
|
if (webRtcServer && webRtcServer.length > 0) {
|
|
- webRtcServer.forEach((item) => {
|
|
|
|
- item.disconnect();
|
|
|
|
- });
|
|
|
|
|
|
+ webRtcServer.forEach(item => {
|
|
|
|
+ item.disconnect()
|
|
|
|
+ })
|
|
}
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
</script>
|
|
@@ -418,21 +394,6 @@
|
|
// :deep(.@{ventSpace}-tabs-tabpane-active) {
|
|
// :deep(.@{ventSpace}-tabs-tabpane-active) {
|
|
// height: 100%;
|
|
// height: 100%;
|
|
// }
|
|
// }
|
|
- .button-box {
|
|
|
|
- border: none !important; //lxh
|
|
|
|
- background: url('../../../../assets/images/vent/wind-doorbtn.png') no-repeat; //lxh
|
|
|
|
- background-size: 100% 100%; //lxh
|
|
|
|
- }
|
|
|
|
- .window3D-bg {
|
|
|
|
- background: url('../../../../assets/images/home-container/home-bg.png') no-repeat; //lxh
|
|
|
|
- background-size: 100% 100%; //lxh
|
|
|
|
- }
|
|
|
|
- :deep .zxm-tabs-tab {
|
|
|
|
- padding: 6px 12px !important; //lxh
|
|
|
|
- background: rgba(49, 252, 239, 0.4); //lxh
|
|
|
|
- border-top-left-radius: 8px; //lxh
|
|
|
|
- border-top-right-radius: 8px; //lxh
|
|
|
|
- }
|
|
|
|
.input-box {
|
|
.input-box {
|
|
display: flex;
|
|
display: flex;
|
|
align-items: center;
|
|
align-items: center;
|