|
@@ -46,28 +46,24 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
- <div class="tabs-box bottom-tabs-box " style="height: 290px;" @mousedown="setDivHeight($event, 230, scroll, 0)" id="monitorBox">
|
|
|
- <!-- <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 100}px`" > -->
|
|
|
+ <div class="tabs-box bottom-tabs-box" :class="{'table-hide': !tableShow, 'table-show': tableShow }" style="height:290px;" @mousedown="setDivHeight($event, 230, scroll, 0)" id="monitorBox">
|
|
|
<div :style="`padding: 5px; height: ${scroll.y + 100}px`">
|
|
|
- <div class="to-small" @click="toHome"></div>
|
|
|
+ <div class="to-small">
|
|
|
+ <div class="to-home" @click="toHome"></div>
|
|
|
+ <FullscreenOutlined v-if="!tableShow" class="table-show-icon" @click="toHide"/>
|
|
|
+ </div>
|
|
|
<div class="device-button-group" v-if="deviceList.length > 0">
|
|
|
+ <!-- 关联设备 -->
|
|
|
<div class="device-button" :class="{ 'device-active': deviceActive == device.deviceType }"
|
|
|
v-for="(device, index) in deviceList" :key="index" @click="monitorChange(index)">{{ device.deviceName }}
|
|
|
</div>
|
|
|
+ <!-- 场景详情进入 -->
|
|
|
<div v-if="haveSysDetailArr.find((item) => deviceType.startsWith(item))" class="enter-detail"
|
|
|
- @click="goDetail()">
|
|
|
+ @click.stop="goDetail()">
|
|
|
<send-outlined />
|
|
|
{{ treeNodeTitle }}详情
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div v-else-if="deviceType == 'forcFan'">
|
|
|
- <div class="device-button-group">
|
|
|
- <div class="enter-detail" @click="goDetail()">
|
|
|
- <send-outlined />
|
|
|
- {{ treeNodeTitle }}详情
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+
|
|
|
</div>
|
|
|
<div v-if="deviceType == 'gaspatrol'">
|
|
|
<div class="device-button-group">
|
|
@@ -77,6 +73,9 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div class="table-hide-icon" @click="toHide">
|
|
|
+ <FullscreenExitOutlined style="font-size: 18px;"/>
|
|
|
+ </div>
|
|
|
<!-- 是人员定位表单代码,由于放在tab中,表格对已知刷新,导致表单数据也在刷寻,造成输入一半的中文时会清空输入框的内容,导致的输入不上数据 -->
|
|
|
<div v-if="deviceType.startsWith('location')" class="location-form" style="position: absolute; z-index: 9999; top: 50px;">
|
|
|
<div class="location-form-item">
|
|
@@ -92,7 +91,6 @@
|
|
|
<Input style="width: 200px;" v-model:value="locationForm.stationname" />
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div style="color: #fff;">{{ deviceType }}</div>
|
|
|
<a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange" id="tabsBox">
|
|
|
<a-tab-pane key="1" tab="实时监测">
|
|
|
<template
|
|
@@ -123,16 +121,6 @@
|
|
|
:pagination="false"></a-table>
|
|
|
</template>
|
|
|
<template v-else-if="deviceType.startsWith('safetymonitor') && activeKey == '1'">
|
|
|
- <!-- <div class="location-form">
|
|
|
- <div class="location-form-item">
|
|
|
- <span class="location-form-label">设备类型:</span>
|
|
|
- <Select style="width: 300px;" v-model:value="safetymonitorForm.dataTypeName" placeholder="请选择设备类型" :option="safetyOption" labelField="name" valueField="code"/>
|
|
|
- </div>
|
|
|
- <div class="location-form-item">
|
|
|
- <span class="location-form-label">分站名称:</span>
|
|
|
- <Input style="width: 200px;" v-model:value="safetymonitorForm.strinstallpos" />
|
|
|
- </div>
|
|
|
- </div> -->
|
|
|
<MonitorTable ref="monitorTable" :columnsType="`${deviceType}_monitor`" :deviceType="deviceType"
|
|
|
:dataSource="dataSource" design-scope="device_monitor" :isShowActionColumn="true" :isShowSelect="false"
|
|
|
title="设备监测" :form-config="formConfig" :scroll="{ y: scroll.y - 110 }">
|
|
@@ -333,7 +321,6 @@
|
|
|
</div>
|
|
|
</a-tab-pane>
|
|
|
</a-tabs>
|
|
|
- <!-- </dv-border-box8> -->
|
|
|
</div>
|
|
|
</div>
|
|
|
<mainPath v-if="deviceType == 'majorpath'" :dataSource="majorPathEchartsData"
|
|
@@ -345,7 +332,7 @@
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
import { ref, onMounted, onUnmounted, ComponentOptions, shallowRef, reactive, defineProps, watch } from 'vue'
|
|
|
-import { SendOutlined } from '@ant-design/icons-vue';
|
|
|
+import { SendOutlined, FullscreenExitOutlined, FullscreenOutlined } from '@ant-design/icons-vue';
|
|
|
import { list, getDeviceList, getDeviceTypeList, devPosition, getDepartmentInfo,getExportUrl } from './device.api'
|
|
|
import AlarmHistoryTable from '../../../comment/AlarmHistoryTable.vue';
|
|
|
import HistoryTable from '../../../comment/HistoryTable.vue';
|
|
@@ -358,7 +345,7 @@ import { SvgIcon } from '/@/components/Icon';
|
|
|
import { getActions } from '/@/qiankun/state';
|
|
|
import { useRouter } from 'vue-router';
|
|
|
import { setDivHeight } from '/@/utils/event';
|
|
|
-import { majorColumns, haveSysDetailArr, haveDetailArr, haveHandlerArr, noWarningArr, surfaceChartsColumns, noHistoryArr, getMonitorComponent, locationFormConfig, vehicleFormConfig } from './device.data'
|
|
|
+import { majorColumns, haveSysDetailArr, haveDetailArr, haveHandlerArr, noWarningArr, surfaceChartsColumns, noHistoryArr, getMonitorComponent, vehicleFormConfig } from './device.data'
|
|
|
import mainPath from './modal/mainPath.vue'
|
|
|
import { formConfig } from '../../../safetyMonitor/safety.data'
|
|
|
import { getDictItemsByCode } from '/@/utils/dict';
|
|
@@ -367,6 +354,7 @@ import MTreeSelect from '/@/components/Form/src/jeecg/components/MTreeSelect.vue
|
|
|
// import ApiSelect from '/@/components/Form/src/components/ApiSelect.vue';
|
|
|
import { nextTick } from 'vue';
|
|
|
import { useMethods } from '/@/hooks/system/useMethods';
|
|
|
+import { useGo } from '/@/hooks/web/usePage';
|
|
|
// import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
|
|
|
|
|
|
const { FiberModal, BundleModal, DustModal, BallvalveModal, AtomizingModal, GaspatrolModal } = getMonitorComponent()
|
|
@@ -379,6 +367,7 @@ const props = defineProps({
|
|
|
}
|
|
|
})
|
|
|
const { handleExportXls } = useMethods();
|
|
|
+const go = useGo()
|
|
|
const echatsOption = {
|
|
|
grid: {
|
|
|
top: '35',
|
|
@@ -419,6 +408,7 @@ const modalVisible = ref<Boolean>(false); // 模态框是否可见
|
|
|
|
|
|
// const drawerHeight = ref(240) // 监测框最小高度
|
|
|
const treeShow = ref(true) //是否显示树形菜单
|
|
|
+const tableShow = ref(true) //是否显示树形菜单
|
|
|
const locationSettingShow = ref(false) //是否显示树形菜单
|
|
|
const treeNodeTitle = ref('') // 选中的树形标题
|
|
|
|
|
@@ -453,11 +443,11 @@ const onSelect: TreeProps['onSelect'] = (keys, e) => {
|
|
|
if(deviceType.value != e.node.parent.node.type)deviceType.value = e.node.parent.node.type
|
|
|
systemID.value = e.node.type
|
|
|
// 传递工作面id信息,用于定位
|
|
|
- actions.setGlobalState({ locationObj: { pageType: deviceType.value, deviceid: systemID.value }, pageObj: null });
|
|
|
+ go(`/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=${deviceType.value}&deviceid=${systemID.value}`)
|
|
|
} else {
|
|
|
systemType.value = e.node.type
|
|
|
if(deviceType.value != e.node.type)deviceType.value = e.node.type
|
|
|
- actions.setGlobalState({ locationObj: { pageType: deviceType.value }, pageObj: null });
|
|
|
+ go(`/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=${deviceType.value}&deviceid=`)
|
|
|
}
|
|
|
clearTimeout(timer)
|
|
|
timer = undefined
|
|
@@ -786,7 +776,20 @@ function toHome() {
|
|
|
if (timer) clearTimeout(timer)
|
|
|
timer = undefined
|
|
|
deviceType.value = ''
|
|
|
- actions.setGlobalState({ pageObj: { pageType: 'home' } });
|
|
|
+ go(`/micro-vent-3dModal/dashboard/analysis`)
|
|
|
+ // actions.setGlobalState({ pageObj: { pageType: 'home' } });
|
|
|
+}
|
|
|
+
|
|
|
+function toHide() {
|
|
|
+ tableShow.value = !tableShow.value;
|
|
|
+ document.getElementById("monitorBox").addEventListener("animationend", ()=>{
|
|
|
+ if(!tableShow.value){
|
|
|
+ document.getElementById('monitorBox').style.height = '0px';
|
|
|
+ }else{
|
|
|
+ document.getElementById('monitorBox').style.height = '290px';
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
}
|
|
|
|
|
|
async function findTreeDataValue(obj) {
|
|
@@ -1246,6 +1249,7 @@ onUnmounted(() => {
|
|
|
}
|
|
|
|
|
|
.location-select-hide {
|
|
|
+
|
|
|
right: -2px;
|
|
|
animation-name: locationHide;
|
|
|
/* 持续时间 */
|
|
@@ -1271,29 +1275,39 @@ onUnmounted(() => {
|
|
|
.tabs-box{
|
|
|
height: 290px;
|
|
|
}
|
|
|
+
|
|
|
.bottom-tabs-box {
|
|
|
position: relative;
|
|
|
.tabs-box {
|
|
|
width: calc(100% - 12px) !important;
|
|
|
bottom: 3px !important;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.to-small {
|
|
|
- width: 60px;
|
|
|
- height: 60px;
|
|
|
- background: url('/@/assets/images/vent/home/tosmall.png') no-repeat center;
|
|
|
- background-size: auto;
|
|
|
position: absolute;
|
|
|
top: -65px;
|
|
|
right: 36px;
|
|
|
- border-radius: 10px;
|
|
|
- padding: 8px;
|
|
|
- backdrop-filter: blur(10px);
|
|
|
- background-color: rgba(45, 86, 137, 0.418);
|
|
|
-
|
|
|
- &:hover {
|
|
|
- background-color: rgba(79, 104, 134, 0.418);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ .to-home{
|
|
|
+ width: 60px;
|
|
|
+ height: 60px;
|
|
|
+ background: url('/@/assets/images/vent/home/tohome.png') no-repeat center;
|
|
|
+ background-size: auto;
|
|
|
+ padding: 8px;
|
|
|
+ &:hover {
|
|
|
+ background-color: rgba(79, 104, 134, 0.418);
|
|
|
+ }
|
|
|
}
|
|
|
+ .table-show-icon{
|
|
|
+ width: 30px;
|
|
|
+ height: 30px;
|
|
|
+ font-size: 30px;
|
|
|
+ color: #fff;
|
|
|
+ margin-left: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
.device-button-group {
|
|
@@ -1414,6 +1428,15 @@ onUnmounted(() => {
|
|
|
box-shadow: 1px 1px 3px 1px #0efcff inset;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ }
|
|
|
+ .table-hide-icon{
|
|
|
+ color: #fff;
|
|
|
+ cursor: pointer;
|
|
|
+ position: absolute;
|
|
|
+ right: 20px;
|
|
|
+ top: 10px;
|
|
|
+ z-index: 9999
|
|
|
}
|
|
|
|
|
|
.enter-detail {
|
|
@@ -1456,7 +1479,20 @@ onUnmounted(() => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+.table-hide{
|
|
|
+ height: 0px;
|
|
|
+ animation-name: tableHide;
|
|
|
+ /* 持续时间 */
|
|
|
+ animation-duration: 1s;
|
|
|
+ transition: all 1s ;
|
|
|
+}
|
|
|
+.table-show{
|
|
|
+ height: 290px;
|
|
|
+ animation-name: tableShow;
|
|
|
+ /* 持续时间 */
|
|
|
+ animation-duration: 1s;
|
|
|
+ transition: all 1s ;
|
|
|
+}
|
|
|
.location-form{
|
|
|
display: flex;
|
|
|
margin: 8px;
|
|
@@ -1478,7 +1514,28 @@ onUnmounted(() => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+@keyframes tableShow {
|
|
|
+ 0% {
|
|
|
+ height: 0px;
|
|
|
+ opacity: 0;
|
|
|
+ }
|
|
|
|
|
|
+ 100% {
|
|
|
+ height: 290px;
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes tableHide {
|
|
|
+ 0% {
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ 100% {
|
|
|
+ height: 0px ;
|
|
|
+ opacity: 0 ;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
@keyframes treeShow {
|
|
|
0% {
|