|
@@ -2,41 +2,61 @@
|
|
|
<div class="bg" style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
|
|
|
<a-spin :spinning="loading" />
|
|
|
<div id="fanLocal3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"> </div>
|
|
|
- <div
|
|
|
- v-if="globalConfig?.simulatedPassword"
|
|
|
- id="fanLocal3DCSS"
|
|
|
- class="threejs-Object-CSS"
|
|
|
- style="width: 100%; height: 100%; position: absolute; overflow: hidden; pointer-events: none"
|
|
|
- >
|
|
|
- <div style="z-index: -1; position: relative">
|
|
|
+ <div id="fanLocal3DCSS" class="threejs-Object-CSS" style="width: 100%; height: 100%; position: absolute; overflow: hidden; pointer-events: none">
|
|
|
+ <div style="z-index: -1; position: relative" v-if="hasPermission('show:sensorMonitor')">
|
|
|
<div class="elementTag" id="inputBox">
|
|
|
- <div class="elementContent">
|
|
|
- <p>风筒入口风速:{{ selectData.windSpeed1 ? selectData.windSpeed1 : '-' }}</p>
|
|
|
- <p>风筒入口瓦斯浓度 {{ selectData.gas2 ? selectData.gas2 : '-' }}</p>
|
|
|
+ <div class="elementContent" v-if="selectData.windSpeed1 || selectData.gas3">
|
|
|
+ <p v-if="selectData.windSpeed1"
|
|
|
+ >风筒入口风速:<span class="value">{{ selectData.windSpeed1 ? selectData.windSpeed1 : '-' }}</span> <span class="unit"> m/s</span></p
|
|
|
+ >
|
|
|
+ <p v-if="selectData.gas3"
|
|
|
+ >风筒入口瓦斯浓度: <span class="value">{{ selectData.gas3 ? selectData.gas3 : '-' }}</span> <span class="unit"> %</span></p
|
|
|
+ >
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="elementTag" id="outBox">
|
|
|
- <div class="elementContent elementContent-r">
|
|
|
- <p>迎头供风量:{{ selectData.windQuantity1 ? selectData.windQuantity2 : '-' }}</p>
|
|
|
- <p>迎头瓦斯浓度:{{ selectData.gas1 ? selectData.gas1 : '-' }}</p>
|
|
|
+ <div class="elementContent elementContent-r" v-if="selectData.windQuantity1 || selectData.gas1">
|
|
|
+ <p v-if="selectData.windQuantity1"
|
|
|
+ >迎头供风量:<span class="value">{{ selectData.windQuantity1 ? selectData.windQuantity2 : '-' }}</span>
|
|
|
+ <span class="unit"> m³/min</span></p
|
|
|
+ >
|
|
|
+ <p v-if="selectData.gas1"
|
|
|
+ >迎头瓦斯浓度:<span class="value">{{ selectData.gas1 ? selectData.gas1 : '-' }}</span> <span class="unit"> %</span></p
|
|
|
+ >
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="elementTag" id="returnBox">
|
|
|
- <div class="elementContent">
|
|
|
- <p>回风流瓦斯浓度:{{ selectData.gas3 ? selectData.gas3 : '-' }}</p>
|
|
|
+ <div class="elementContent elementContent-r" v-if="selectData.gas2">
|
|
|
+ <p v-if="selectData.gas2"
|
|
|
+ >回风流瓦斯浓度:<span class="value">{{ selectData.gas2 ? selectData.gas2 : '-' }}</span> <span class="unit"> %</span></p
|
|
|
+ >
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- <div class="elementTag" id="gateBox">
|
|
|
+ <div class="elementTag" id="gateBox">
|
|
|
<div class="elementContent">
|
|
|
<p>风门状态:关</p>
|
|
|
<p>风门过风面积:{{ selectData.gas1 ? selectData.gas1 : '-' }}</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="elementTag" id="windownBox">
|
|
|
- <div class="elementContent">
|
|
|
- <p>风窗全风压回风流:0</p>
|
|
|
+ <div class="elementTag" id="windownBox">
|
|
|
+ <div class="elementContent" v-if="modalType == 'fc'">
|
|
|
+ <p style="pointer-events: auto"
|
|
|
+ ><a class="action-link" @click="goDetailDevice('window_fWindowM3')">风窗详情</a> <ArrowRightOutlined :style="{ color: '#157DC8' }"
|
|
|
+ /></p>
|
|
|
+ <p v-if="selectData.windSpeed"
|
|
|
+ >风窗风流风速:<span class="value">{{ selectData.windSpeed ? selectData.windSpeed : '-' }}</span> <span class="unit"> m/s</span></p
|
|
|
+ >
|
|
|
+ <p v-if="selectData.fWindowM3"
|
|
|
+ >风窗过风量:<span class="value">{{ selectData.fWindowM3 ? selectData.fWindowM3 : '-' }}</span> <span class="unit"> m³/min</span></p
|
|
|
+ >
|
|
|
+ <p v-if="selectData.OpenDegree"
|
|
|
+ >风窗开度值:<span class="value">{{ selectData.OpenDegree ? selectData.OpenDegree : '-' }}</span> <span class="unit"> %</span></p
|
|
|
+ >
|
|
|
+ <p v-if="selectData.OpenDegree"
|
|
|
+ >风窗过风面积:<span class="value">{{ selectData.forntArea ? selectData.forntArea : '-' }}</span> <span class="unit"> m2</span></p
|
|
|
+ >
|
|
|
</div>
|
|
|
- </div> -->
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -263,7 +283,6 @@
|
|
|
<HistoryTable
|
|
|
:columns-type="`${selectData.deviceType}`"
|
|
|
:device-type="`${devicekide}`"
|
|
|
- :device-list-api="baseList"
|
|
|
designScope="fanlocal-history"
|
|
|
:scroll="scroll"
|
|
|
/>
|
|
@@ -292,8 +311,8 @@
|
|
|
</div>
|
|
|
</a-tab-pane>
|
|
|
</a-tabs>
|
|
|
- <!-- <a-button
|
|
|
- v-if="globalConfig.showReport"
|
|
|
+ <a-button
|
|
|
+ v-if="hasPermission('btn:reportDown')"
|
|
|
type="primary"
|
|
|
size="small"
|
|
|
preIcon="ant-design:download-outlined"
|
|
@@ -301,13 +320,10 @@
|
|
|
@click="reportDown"
|
|
|
>
|
|
|
报表导出
|
|
|
- </a-button> -->
|
|
|
+ </a-button>
|
|
|
</dv-border-box8>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- <div style="z-index: -1; position: absolute; top: 50px; right: 10px; width: 300px; height: 280px; margin: auto" class="player1">
|
|
|
- <LivePlayer id="jb-player1" ref="player1" :videoUrl="flvURL1()" muted live loading controls />
|
|
|
- </div> -->
|
|
|
<div
|
|
|
ref="playerRef"
|
|
|
style="z-index: 999; position: absolute; top: 100px; right: 15px; width: 100%; height: 100%; margin: auto; pointer-events: none"
|
|
@@ -319,7 +335,7 @@
|
|
|
<ExclamationCircleFilled style="color: #ffb700; font-size: 30px" />
|
|
|
<div class="warning-text">您是否要进行{{ modalTitle }}操作?</div>
|
|
|
</div>
|
|
|
- <div class="" v-if="modalType == 'startSmoke'">
|
|
|
+ <div class="" v-if="controlType == 'startSmoke'">
|
|
|
<div class="startSmoke-select">
|
|
|
<div class="label">主机:</div>
|
|
|
<a-radio-group v-model:value="mainWindIsShow1" @change="changeMotor" name="localWind1">
|
|
@@ -336,43 +352,43 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 调频 -->
|
|
|
- <div class="vent-flex-row input-box" v-if="modalType == 'Fan1Frequency'">
|
|
|
+ <div class="vent-flex-row input-box" v-if="controlType == 'Fan1Frequency'">
|
|
|
<div class="label">主风机运行频率(Hz):</div>
|
|
|
<a-input-number size="small" v-model:value="fan1FrequencyVal" :min="20" :max="50" :step="0.1" />
|
|
|
</div>
|
|
|
- <div class="vent-flex-row input-box" v-if="modalType == 'Fan2Frequency'">
|
|
|
+ <div class="vent-flex-row input-box" v-if="controlType == 'Fan2Frequency'">
|
|
|
<div class="label">备风机运行频率(Hz):</div>
|
|
|
<a-input-number size="small" v-model:value="fan2FrequencyVal" :min="20" :max="50" :step="0.1" />
|
|
|
</div>
|
|
|
- <div class="vent-flex-row input-box" v-if="modalType == 'FanFrequency'">
|
|
|
+ <div class="vent-flex-row input-box" v-if="controlType == 'FanFrequency'">
|
|
|
<div class="label">风机运行频率(Hz):</div>
|
|
|
<a-input-number size="small" v-model:value="fan1FrequencyVal" :min="20" :max="50" :step="0.1" />
|
|
|
</div>
|
|
|
- <div class="vent-flex-row input-box" v-if="modalType == 'needAir'">
|
|
|
+ <div class="vent-flex-row input-box" v-if="controlType == 'needAir'">
|
|
|
<div class="label">需风量(单位):</div>
|
|
|
<a-input-number size="small" v-model:value="frequencyVal" :min="30" :max="50" :step="0.1" />
|
|
|
</div>
|
|
|
- <div class="vent-flex-row input-box" v-if="modalType == 'disAirAlarm'">
|
|
|
+ <div class="vent-flex-row input-box" v-if="controlType == 'disAirAlarm'">
|
|
|
<div class="label">漏风率(%):</div>
|
|
|
<a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
|
|
|
</div>
|
|
|
- <div class="vent-flex-row input-box" v-if="modalType == 'diameter'">
|
|
|
+ <div class="vent-flex-row input-box" v-if="controlType == 'diameter'">
|
|
|
<div class="label">风筒直径(m):</div>
|
|
|
<a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
|
|
|
</div>
|
|
|
- <div class="vent-flex-row input-box" v-if="modalType == 'len'">
|
|
|
+ <div class="vent-flex-row input-box" v-if="controlType == 'len'">
|
|
|
<div class="label">风筒长度(m):</div>
|
|
|
<a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
|
|
|
</div>
|
|
|
- <div class="vent-flex-row input-box" v-if="modalType == 'windPowerLimit'">
|
|
|
+ <div class="vent-flex-row input-box" v-if="controlType == 'windPowerLimit'">
|
|
|
<div class="label">风电闭锁限值(m³/min):</div>
|
|
|
<a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
|
|
|
</div>
|
|
|
- <div class="vent-flex-row input-box" v-if="modalType == 'gasPowerLimit'">
|
|
|
+ <div class="vent-flex-row input-box" v-if="controlType == 'gasPowerLimit'">
|
|
|
<div class="label">瓦斯电闭锁限值(m³/min):</div>
|
|
|
<a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
|
|
|
</div>
|
|
|
- <div v-if="modalType == 'gasAlarm'">
|
|
|
+ <div v-if="controlType == 'gasAlarm'">
|
|
|
<div class="vent-flex-row input-box">
|
|
|
<div class="label">传感器名称:</div>
|
|
|
<a-select placeholder="传感器" @change="handleChangeSensor" :options="sensorList" v-model:value="modalSensor" />
|
|
@@ -382,7 +398,7 @@
|
|
|
<a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-if="modalType == 'airVolumeAlarm'">
|
|
|
+ <div v-if="controlType == 'airVolumeAlarm'">
|
|
|
<div class="vent-flex-row input-box">
|
|
|
<div class="label">风量上限(m³/min):</div>
|
|
|
<a-input-number size="small" v-model:value="modalTypeArr.rightBtnArr[3].min" :min="0" :max="50" :step="0.1" />
|
|
@@ -393,7 +409,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 启动或停止 -->
|
|
|
- <div class="" v-if="modalType == 'startSmoke'"> </div>
|
|
|
+ <div class="" v-if="controlType == 'startSmoke'"> </div>
|
|
|
<div v-if="!globalConfig?.simulatedPassword" class="vent-flex-row input-box">
|
|
|
<div class="label">操作密码:</div>
|
|
|
<a-input size="small" type="password" v-model:value="passWord" />
|
|
@@ -405,7 +421,7 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
- import { ExclamationCircleFilled } from '@ant-design/icons-vue';
|
|
|
+ import { ExclamationCircleFilled, ArrowRightOutlined } from '@ant-design/icons-vue';
|
|
|
import { onBeforeMount, ref, watch, onMounted, nextTick, toRaw, reactive, onUnmounted, inject, unref } from 'vue';
|
|
|
import BarSingle from '../../../../components/chart/BarSingle.vue';
|
|
|
import GroupMonitorTable from '../comment/GroupMonitorTable.vue';
|
|
@@ -440,6 +456,7 @@
|
|
|
const [registerModal, { openModal, closeModal }] = useModal();
|
|
|
const [registerModal1, { openModal: openModal1, closeModal: closeModal1 }] = useModal();
|
|
|
const { currentRoute } = useRouter();
|
|
|
+ const router = useRouter();
|
|
|
|
|
|
const modalTypeArr = reactive({
|
|
|
leftBtnArr: [
|
|
@@ -578,8 +595,8 @@
|
|
|
|
|
|
const xAxisDataGas = ref([]);
|
|
|
// 设备数据
|
|
|
- const controlType = ref(1);
|
|
|
- const modalType = ref('fm');
|
|
|
+ const controlType = ref('');
|
|
|
+ const modalType = ref('');
|
|
|
// 监测数据
|
|
|
const initData = {
|
|
|
deviceID: '',
|
|
@@ -595,6 +612,8 @@
|
|
|
};
|
|
|
const frequencyVal = ref(0);
|
|
|
const dataSource = ref([]);
|
|
|
+ // 关联设备信息
|
|
|
+ const linkDeviceInfo = ref({});
|
|
|
// 监测数据
|
|
|
let selectData = reactive(lodash.cloneDeep(initData));
|
|
|
const rightColumns = ref<BasicColumn[]>([]);
|
|
@@ -676,6 +695,15 @@
|
|
|
function goDetail() {
|
|
|
openModal();
|
|
|
}
|
|
|
+
|
|
|
+ function goDetailDevice(linkDeviceCode) {
|
|
|
+ let linkDeviceId = '';
|
|
|
+ if (linkDeviceCode.startsWith('window')) {
|
|
|
+ linkDeviceId = linkDeviceInfo.value[linkDeviceCode] ? linkDeviceInfo.value[linkDeviceCode]['id'] : '';
|
|
|
+ router.push({ path: '/monitorChannel/monitor-window', query: { id: linkDeviceId } });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//
|
|
|
async function getDataSource() {
|
|
|
if (devicekide.value) {
|
|
@@ -732,6 +760,7 @@
|
|
|
playSmoke(selectData);
|
|
|
addText(selectData);
|
|
|
}
|
|
|
+
|
|
|
if (timer) {
|
|
|
timer = null;
|
|
|
}
|
|
@@ -758,20 +787,20 @@
|
|
|
// loading.value = true;
|
|
|
const selectIndex: any = dataSource.value.findIndex((baseData: any) => baseData.deviceID == id);
|
|
|
selectRowIndex.value = selectIndex;
|
|
|
- modalType.value = selectIndex > 0 ? 'fm' : 'fc';
|
|
|
-
|
|
|
nextTick(() => {
|
|
|
const headEl = document.querySelector(`.zxm-table-thead`);
|
|
|
if (headEl) {
|
|
|
headElHeight.value = headEl.clientHeight;
|
|
|
}
|
|
|
|
|
|
- setModelType(modalType.value).then(() => {
|
|
|
- // loading.value = false;
|
|
|
- });
|
|
|
-
|
|
|
const data = dataSource.value[selectIndex];
|
|
|
if (data) {
|
|
|
+ if (selectData['linkInfo']) linkDeviceInfo.value = JSON.parse(selectData['linkInfo']);
|
|
|
+
|
|
|
+ if (linkDeviceInfo.value['window_fWindowM3']) {
|
|
|
+ modalType.value = 'fc';
|
|
|
+ }
|
|
|
+
|
|
|
if (data['Fan1StartStatus'] == '1') {
|
|
|
mainWindIsShow1.value = 'open';
|
|
|
mainWindIsShow2.value = 'stop';
|
|
@@ -791,6 +820,7 @@
|
|
|
}
|
|
|
xAxisDataGas.value = xAxisDataGasArr;
|
|
|
}
|
|
|
+ setModelType(modalType.value);
|
|
|
});
|
|
|
|
|
|
await getCamera(id, playerRef.value);
|
|
@@ -800,7 +830,7 @@
|
|
|
// 打开并设置modal的标题
|
|
|
function showModal(obj) {
|
|
|
if (!btnClick.value) return;
|
|
|
- modalType.value = obj.key;
|
|
|
+ controlType.value = obj.key;
|
|
|
modalTitle.value = obj.value;
|
|
|
passWord.value = '';
|
|
|
modalIsShow.value = true;
|
|
@@ -820,7 +850,7 @@
|
|
|
}
|
|
|
|
|
|
function handleOk(e: MouseEvent) {
|
|
|
- const handType = modalType.value;
|
|
|
+ const handType = controlType.value;
|
|
|
const data = {
|
|
|
deviceid: selectData.deviceID,
|
|
|
devicetype: selectData.deviceType,
|
|
@@ -1092,19 +1122,16 @@
|
|
|
padding-top: 2px;
|
|
|
color: #ffffff99;
|
|
|
cursor: pointer;
|
|
|
- &:hover {
|
|
|
- color: #ffffff;
|
|
|
- }
|
|
|
}
|
|
|
.tab-item-active-l {
|
|
|
- color: #ffffff;
|
|
|
+ color: #00ffea;
|
|
|
background-image: url('/@/assets/images/vent/l-tab-active.png');
|
|
|
background-repeat: no-repeat;
|
|
|
background-size: auto;
|
|
|
background-position: 6px 3px;
|
|
|
}
|
|
|
.tab-item-active-r {
|
|
|
- color: #ffffff;
|
|
|
+ color: #00ffea;
|
|
|
background-image: url('/@/assets/images/vent/r-tab-active.png');
|
|
|
background-repeat: no-repeat;
|
|
|
background-position: 0 3px;
|