fix : 修复预览隧道时切换报错bug

This commit is contained in:
2024-09-02 15:45:01 +08:00
parent 02194afce4
commit 00a04d0d79
4 changed files with 100 additions and 225 deletions

View File

@@ -71,20 +71,20 @@
<div class="current" @click="handleOpenChart(item)"> <div class="current" @click="handleOpenChart(item)">
<fan-info-item :wp="transducerData[index]"/> <fan-info-item :wp="transducerData[index]"/>
</div> </div>
<div class="line"></div> <div class="line" v-if="index!=socketData.length-1"></div>
</div>
<div class="shunt-box">
<div class="shuntThreshold" v-for="(item,index) in shuntList">
<div class="fenliu-icon"></div>
{{ index + 1 }}号分流阀值
<span class="units"
><input
type="number"
min="0"
v-model="item.shuntThreshold"
/></span>
</div>
</div> </div>
<!-- <div class="shunt-box">-->
<!-- <div class="shuntThreshold" v-for="(item,index) in shuntList">-->
<!-- <div class="fenliu-icon"></div>-->
<!-- {{ index + 1 }}号分流阀值-->
<!-- <span class="units"-->
<!-- ><input-->
<!-- type="number"-->
<!-- min="0"-->
<!-- v-model="item.shuntThreshold"-->
<!-- /></span>-->
<!-- </div>-->
<!-- </div>-->
</div> </div>
<div class="digital-tunnel"> <div class="digital-tunnel">

View File

@@ -1,12 +1,16 @@
<template> <template>
<div id="main"> <div id="main">
<div class="box-top"> <div class="box-top">
<manage-btn v-model="selectIndex" @select="manageSelect" :list="routeList" v-if="showMenu&&isPreview" /> <!-- <manage-btn v-model="selectIndex" @select="manageSelect" :list="routeList" v-if="showMenu&&isPreview" />-->
<tunnel-title v-if="showTunnelTitle" /> <tunnel-title v-if="showTunnelTitle"/>
<div class="top-length"> <div class="top-length">
<span>隧道总长度: {{ tunnelLength }}</span> <span>隧道总长度: {{ tunnelLength }}</span>
<span class="all-btn" @click="startSimulate">开始模拟</span> <span class="all-btn" @click="startSimulate" v-if="isStartSimulate">开始模拟</span>
<!-- <span class="all-btn" :style="{color:!isPreview?'#f7b500':'#0BE9FA'}" @click="changeTunnelSimulateMode(false)">编辑模式</span>--> <div v-else>
<span class="all-btn" @click="simulatedBlasting">模拟爆破</span>
<span class="all-btn" @click="endSimulate">结束模拟</span>
</div>
<!-- <span class="all-btn" :style="{color:!isPreview?'#f7b500':'#0BE9FA'}" @click="changeTunnelSimulateMode(false)">编辑模式</span>-->
</div> </div>
<div class="top-right" v-if="isPreview"> <div class="top-right" v-if="isPreview">
<div class="current-site"> <div class="current-site">
@@ -16,15 +20,15 @@
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item v-for="item in siteList" :key="item.value" :command="item">{{ <el-dropdown-item v-for="item in siteList" :key="item.value" :command="item">{{
item.label item.label
}} }}
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
<el-icon size="50" color="#0BE9FA" style="margin-left: 50px;cursor: pointer" <el-icon size="50" color="#0BE9FA" style="margin-left: 50px;cursor: pointer"
@click="isVisited = true; getAlarmList()"> @click="isVisited = true; getAlarmList()">
<Bell /> <Bell/>
</el-icon> </el-icon>
</div> </div>
<div class="current-user"> <div class="current-user">
@@ -36,27 +40,27 @@
</div> </div>
<!-- <tunnel-scene id="tunnel-box" :isedit="false" /> --> <!-- <tunnel-scene id="tunnel-box" :isedit="false" /> -->
<!-- 一进去的话应该是预览模式所以引入这个组件1 --> <!-- 一进去的话应该是预览模式所以引入这个组件1 -->
<preview-scene id="tunnel-box" :isedit="false" :tunnelId="tunnelId" :key="tunnelId" :tunnelLen="tunnelLen" <preview-scene id="tunnel-box" :isedit="false" :tunnelId="tunnelId" :key="tunnelId" :tunnelLen="tunnelLen"
:largeScreen="largeScreen" :fanList="socketData.leftData"></preview-scene> :largeScreen="largeScreen" :fanList="socketData.leftData"></preview-scene>
<div class="left" v-if="isPreview"> <div class="left" v-if="isPreview">
<el-drawer v-model="drawerLeft" direction="ltr" modal-class="modal-box" :modal="false" :show-close="false" <el-drawer v-model="drawerLeft" direction="ltr" modal-class="modal-box" :modal="false" :show-close="false"
:close-on-click-modal="false" :close-on-press-escape="false"> :close-on-click-modal="false" :close-on-press-escape="false">
<fan-info v-if="showFan" :list="socketData.leftData" :fan-data="largeScreenData" <fan-info v-if="showFan" :list="socketData.leftData" :fan-data="largeScreenData"
:transducer-data="largeScreenData" :loading="showFanLoading" :tunnel-id="tunnelId" /> :transducer-data="largeScreenData" :loading="showFanLoading" :tunnel-id="tunnelId"/>
<used-ele v-if="showFan" :list="socketData.leftData" :loading="showUsedLoading" :ele-data="largeScreenData" /> <used-ele v-if="showFan" :list="socketData.leftData" :loading="showUsedLoading" :ele-data="largeScreenData"/>
</el-drawer> </el-drawer>
<div v-if="drawerLeft" class="left-arrow" @click="closeLeft"></div> <div v-if="drawerLeft" class="left-arrow" @click="closeLeft"></div>
<div v-else class="shrink-left" @click="closeLeft"></div> <div v-else class="shrink-left" @click="closeLeft"></div>
</div> </div>
<div class="right" v-if="isPreview"> <div class="right" v-if="isPreview">
<el-drawer v-model="drawerRight" direction="rtl" modal-class="modal-box" :modal="false" :show-close="false" <el-drawer v-model="drawerRight" direction="rtl" modal-class="modal-box" :modal="false" :show-close="false"
:close-on-click-modal="false" :close-on-press-escape="false"> :close-on-click-modal="false" :close-on-press-escape="false">
<wind-pressure-list v-if="showFan" :list="socketData.windPressure" :win-data="largeScreenData" <wind-pressure-list v-if="showFan" :list="socketData.windPressure" :win-data="largeScreenData"
:loading="showWindLoading" /> :loading="showWindLoading"/>
<air-info v-if="showFan" :list="socketData.sensor" :windSpeed="socketData.windSpeed" <air-info v-if="showFan" :list="socketData.sensor" :windSpeed="socketData.windSpeed"
:air-data="largeScreenData" /> :air-data="largeScreenData"/>
<bad-gas-info v-if="showFan" :list="socketData.sensor" :bad-gas-data="largeScreenData" :tunnelId="tunnelId" <bad-gas-info v-if="showFan" :list="socketData.sensor" :bad-gas-data="largeScreenData" :tunnelId="tunnelId"
:loading="showBadLoading" /> :loading="showBadLoading"/>
</el-drawer> </el-drawer>
<div v-if="drawerRight" class="right-arrow" @click="closeRight"></div> <div v-if="drawerRight" class="right-arrow" @click="closeRight"></div>
<div v-else class="shrink-right" @click="closeRight"></div> <div v-else class="shrink-right" @click="closeRight"></div>
@@ -64,7 +68,7 @@
<div class="switch-btn"> <div class="switch-btn">
<div class="arrow" @click="previousBtn"></div> <div class="arrow" @click="previousBtn"></div>
<el-carousel height="150px" type="card" ref="tunnelBtn" :autoplay="false" :initial-index="initialIndex" <el-carousel height="150px" type="card" ref="tunnelBtn" :autoplay="false" :initial-index="initialIndex"
@change="changeTunnel"> @change="changeTunnel">
<div class="btn"> <div class="btn">
<el-carousel-item v-for="item in tunnelList" :key="item.value"> <el-carousel-item v-for="item in tunnelList" :key="item.value">
{{ item.label }} {{ item.label }}
@@ -91,12 +95,12 @@
<div class="left-top-icon"></div> <div class="left-top-icon"></div>
<div class="right-top-icon"></div> <div class="right-top-icon"></div>
<el-form :model="queryParams" inline class="query-form" ref="queryForm" @submit.prevent="getAlarmList" <el-form :model="queryParams" inline class="query-form" ref="queryForm" @submit.prevent="getAlarmList"
v-if="roleKey !== 'administrator'"> v-if="roleKey !== 'administrator'">
<el-form-item label="查阅状态" prop="lookupStatus"> <el-form-item label="查阅状态" prop="lookupStatus">
<el-select v-model="queryParams.lookupStatus" placeholder="请选择查阅状态" :fit-input-width="true" <el-select v-model="queryParams.lookupStatus" placeholder="请选择查阅状态" :fit-input-width="true"
:teleported="false" clearable filterable> :teleported="false" clearable filterable>
<el-option label="已读" :value="true" /> <el-option label="已读" :value="true"/>
<el-option label="未读" :value="false" /> <el-option label="未读" :value="false"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@@ -106,14 +110,14 @@
</el-form> </el-form>
<div class="device-table" :style="{ marginTop: roleKey === 'administrator' ? '40px' : '0' }"> <div class="device-table" :style="{ marginTop: roleKey === 'administrator' ? '40px' : '0' }">
<el-table stripe v-loading="loading" :empty-text="tableEmptyText" <el-table stripe v-loading="loading" :empty-text="tableEmptyText"
style="background-color: #011c29;--el-table-border-color: none;" style="background-color: #011c29;--el-table-border-color: none;"
:header-cell-style="{ backgroundColor: '#064B66', color: '#fff', fontSize: '40px', borderBottom: 'none' }" :header-cell-style="{ backgroundColor: '#064B66', color: '#fff', fontSize: '40px', borderBottom: 'none' }"
:data="alarmList"> :data="alarmList">
<el-table-column prop="tunnelName" label="隧道名称" align="center" width="400px" /> <el-table-column prop="tunnelName" label="隧道名称" align="center" width="400px"/>
<el-table-column prop="alarmContent" label="告警信息" align="center" /> <el-table-column prop="alarmContent" label="告警信息" align="center"/>
<el-table-column prop="alarmTime" label="告警时间" align="center" width="480px" /> <el-table-column prop="alarmTime" label="告警时间" align="center" width="480px"/>
<el-table-column prop="lookupStatus" label="查阅状态" align="center" width="200px" <el-table-column prop="lookupStatus" label="查阅状态" align="center" width="200px"
v-if="roleKey !== 'administrator'"> v-if="roleKey !== 'administrator'">
<template #default="scope"> <template #default="scope">
<el-tag :type="scope.row.lookupStatus ? 'success' : 'warning'">{{ scope.row.lookupStatus ? '已读' : '未读' }} <el-tag :type="scope.row.lookupStatus ? 'success' : 'warning'">{{ scope.row.lookupStatus ? '已读' : '未读' }}
@@ -125,15 +129,15 @@
<el-button type="primary" size="mini" style="font-weight: bold" @click="handleView(scope.row)" link>详情 <el-button type="primary" size="mini" style="font-weight: bold" @click="handleView(scope.row)" link>详情
</el-button> </el-button>
<el-button type="danger" size="mini" v-if="roleKey !== 'administrator'" @click="handleDelete(scope.row)" <el-button type="danger" size="mini" v-if="roleKey !== 'administrator'" @click="handleDelete(scope.row)"
link>删除 link>删除
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination" :style="{ bottom: roleKey === 'administrator' ? '40px' : '0' }"> <div class="pagination" :style="{ bottom: roleKey === 'administrator' ? '40px' : '0' }">
<el-pagination background v-model:current-page="pageInfo.pageNum" v-model:page-size="pageInfo.pageSize" <el-pagination background v-model:current-page="pageInfo.pageNum" v-model:page-size="pageInfo.pageSize"
:total="total" prev-text="上一页" next-text="下一页" layout="prev, pager, next" :total="total" prev-text="上一页" next-text="下一页" layout="prev, pager, next"
@current-change="handleCurrentChange" :hide-on-single-page="true" /> @current-change="handleCurrentChange" :hide-on-single-page="true"/>
</div> </div>
</div> </div>
<div class="left-bottom-icon"></div> <div class="left-bottom-icon"></div>
@@ -151,9 +155,9 @@ import AirInfo from "@/components/content/airInfo/AirInfo.vue";
import BadGasInfo from "@/components/content/badGasInfo/BadGasInfo.vue"; import BadGasInfo from "@/components/content/badGasInfo/BadGasInfo.vue";
import ManageBtn from "@/components/manageBtn/index.vue"; import ManageBtn from "@/components/manageBtn/index.vue";
import TunnelTitle from "@/components/tunnelTitle/index.vue"; import TunnelTitle from "@/components/tunnelTitle/index.vue";
import { dateFormat } from "@/utils/date.js"; import {dateFormat} from "@/utils/date.js";
import { getToken } from "@/utils/auth"; import {getToken} from "@/utils/auth";
import { useAuthStore } from "@/store/userstore.js"; import {useAuthStore} from "@/store/userstore.js";
import { import {
getLargeScreen, getLargeScreen,
getLargeScreenInfo, getLargeScreenInfo,
@@ -164,10 +168,10 @@ import {
updateAlarmState updateAlarmState
} from "@/api/largeScreen"; } from "@/api/largeScreen";
import {ElLoading, ElMessage, ElMessageBox} from "element-plus"; import {ElLoading, ElMessage, ElMessageBox} from "element-plus";
import { getUserInfo } from "@/api/login"; import {getUserInfo} from "@/api/login";
import { initSceneData } from "@/api/tunnelScene"; import {initSceneData} from "@/api/tunnelScene";
import { getTunnelList } from "@/api/tunnelManage"; import {getTunnelList} from "@/api/tunnelManage";
import { debounce } from 'lodash' import {debounce} from 'lodash'
const authStore = useAuthStore(); const authStore = useAuthStore();
@@ -189,6 +193,7 @@ const showFanLoading = ref(0)
const showUsedLoading = ref(0) const showUsedLoading = ref(0)
const showWindLoading = ref(0) const showWindLoading = ref(0)
const showBadLoading = ref(0) const showBadLoading = ref(0)
const isStartSimulate = ref(true);
const drawerRight = ref(true); const drawerRight = ref(true);
const showMenu = ref(false); const showMenu = ref(false);
const currentSiteId = ref(0); const currentSiteId = ref(0);
@@ -269,8 +274,8 @@ onMounted(() => {
showFan.value = true; showFan.value = true;
}); });
}); });
const startSimulate=()=>{ const startSimulate = () => {
isStartSimulate.value = false
} }
const changeName = (id) => { const changeName = (id) => {
for (let item of equipmentOption.value) { for (let item of equipmentOption.value) {
@@ -419,13 +424,13 @@ const getScreenInfo = (id) => {
// }) // })
res.data.sensorList.forEach((item) => { res.data.sensorList.forEach((item) => {
if ( if (
item.equipmentType === "dust" || item.equipmentType === "dust" ||
item.equipmentType === "carbonDioxide" || item.equipmentType === "carbonDioxide" ||
item.equipmentType === "carbonMonoxide" || item.equipmentType === "carbonMonoxide" ||
item.equipmentType === "hydrogenSulfide" || item.equipmentType === "hydrogenSulfide" ||
item.equipmentType === "sulfurDioxide" || item.equipmentType === "sulfurDioxide" ||
item.equipmentType === "sulfurMonoxide" || item.equipmentType === "sulfurMonoxide" ||
item.equipmentType === "nitrogenDioxide" item.equipmentType === "nitrogenDioxide"
) { ) {
showBadLoading.value = 0 showBadLoading.value = 0
} else { } else {
@@ -493,7 +498,9 @@ const getTunnel = (id) => {
}); });
} }
const changeTunnel = (e) => { const changeTunnel = (e) => {
socket.close() if(socket){
socket.close()
}
let newObj = {} let newObj = {}
tunnelList.value.forEach((item, index) => { tunnelList.value.forEach((item, index) => {
if (index === e) { if (index === e) {
@@ -527,10 +534,14 @@ const manageSelect = (index) => {
router.push("/user/" + localStorage.getItem('currentSiteId')); router.push("/user/" + localStorage.getItem('currentSiteId'));
} }
} }
socket.close() if(socket){
socket.close()
}
}; };
const handleChangeSite = debounce((item) => { const handleChangeSite = debounce((item) => {
socket.close() if(socket){
socket.close()
}
currentSite.value = item.label currentSite.value = item.label
currentSiteId.value = item.value currentSiteId.value = item.value
getTunnel(item.value) getTunnel(item.value)
@@ -685,10 +696,12 @@ const initWebSocket = () => {
text-align: center; text-align: center;
margin-left: 40px; margin-left: 40px;
font-size: 38px; font-size: 38px;
&:hover{
&:hover {
color: #f7b500; color: #f7b500;
} }
} }
#main { #main {
height: 100%; height: 100%;
width: 100%; width: 100%;
@@ -796,7 +809,7 @@ const initWebSocket = () => {
height: 70px !important; height: 70px !important;
line-height: 70px !important; line-height: 70px !important;
>span { > span {
color: #FFFFFF; color: #FFFFFF;
} }
} }
@@ -870,7 +883,7 @@ const initWebSocket = () => {
line-height: 40px; line-height: 40px;
font-size: 36px; font-size: 36px;
&>div { & > div {
flex: 1; flex: 1;
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;
@@ -959,11 +972,11 @@ const initWebSocket = () => {
} }
} }
>span:first-child { > span:first-child {
margin-right: 60px; margin-right: 60px;
} }
>span:last-child { > span:last-child {
margin-left: 71px; margin-left: 71px;
} }

View File

@@ -8,16 +8,6 @@
<div class="site-name"> <div class="site-name">
{{ siteName }} {{ siteName }}
</div> </div>
<!-- <div class="model-change">-->
<!-- <div class="model" @click="clickModel=1;showNull=false">-->
<!-- <div class="card-bg"></div>-->
<!-- <span>卡片模式</span>-->
<!-- </div>-->
<!-- <div class="model" @click="clickModel=2;getSiteImg()">-->
<!-- <div class="img-bg"></div>-->
<!-- <span>图纸导航</span>-->
<!-- </div>-->
<!-- </div>-->
<tunnel-title/> <tunnel-title/>
<div class="all-del-btn" v-if="showOperation"> <div class="all-del-btn" v-if="showOperation">
<div class="all-btn" style=" margin-right: 40px;" v-if="showAddIcon" @click="handleAdd"> <div class="all-btn" style=" margin-right: 40px;" v-if="showAddIcon" @click="handleAdd">
@@ -31,7 +21,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="box-content" v-if="clickModel===1"> <div class="box-content" >
<div class="site-box" v-for="item in tunnelList" :key="item.tunnelId"> <div class="site-box" v-for="item in tunnelList" :key="item.tunnelId">
<div class="top"> <div class="top">
<span>{{ item.tunnelName }}</span> <span>{{ item.tunnelName }}</span>
@@ -48,17 +38,9 @@
<div class="edit-icon"></div> <div class="edit-icon"></div>
<div>去模拟</div> <div>去模拟</div>
</div> </div>
<!-- <div class="edit-btn" @click.stop="handleEditDevice(item.tunnelId)">-->
<!-- <div class="edit-icon-two"></div>-->
<!-- <div>设备管理</div>-->
<!-- </div>-->
</div> </div>
</div> </div>
<div class="tunnel-right"> <div class="tunnel-right">
<div>
<!-- <div class="fan-icon"></div>-->
<!-- <span>风机异常</span>-->
</div>
<div class="icons-block"> <div class="icons-block">
<div v-for="equItem in iconsList" :key="item.icon" class="icon-text"> <div v-for="equItem in iconsList" :key="item.icon" class="icon-text">
<div :style="{ backgroundImage: 'url(' +getImageUrl(equItem.icon)+')' }" class="icon"></div> <div :style="{ backgroundImage: 'url(' +getImageUrl(equItem.icon)+')' }" class="icon"></div>
@@ -68,26 +50,11 @@
</div> </div>
</div> </div>
</div> </div>
<!--/* <div style="width: 925px; height: 0" v-for="n in 8" :key="n"></div>*/-->
<div class="site-box add-box" @click="handleAdd" v-if="showOperation"> <div class="site-box add-box" @click="handleAdd" v-if="showOperation">
<div class="add-icon"></div> <div class="add-icon"></div>
<div style="cursor: pointer">添加隧道</div> <div style="cursor: pointer">添加隧道</div>
</div> </div>
</div> </div>
<div v-else>
<div v-if="showNull" class="showNull">
暂无图纸~ 请前往站点管理上传图纸~
</div>
<div class="img-box" v-else>
<!-- @/assets/images/tunnel/img.png-->
<!-- <img :src="'data:image/png;base64,'+siteImage" style="width:3500px;height:1789px" id="imgModel" usemap="#image"-->
<!-- alt="" @click="clickHandler">-->
<map name="image" id="image">
<area shape="poly" v-for="(item,index) in coordsList" :coords="item.coords" :key="index" alt=""
:title="item.tunnelId+'隧道'" :href="'/' + item.tunnelId + '/' + siteId" @click="clickHot(item.tunnelId)">
</map>
</div>
</div>
<el-dialog :close-on-click-modal="false" v-model="isVisited" width="1958px"> <el-dialog :close-on-click-modal="false" v-model="isVisited" width="1958px">
<div class="siteId"> <div class="siteId">
<span>{{ title }}</span> <span>{{ title }}</span>
@@ -99,94 +66,18 @@
<el-form-item label="隧道简称" prop="tunnelAlias"> <el-form-item label="隧道简称" prop="tunnelAlias">
<el-input v-model="form.tunnelAlias" placeholder="请输入隧道简称"/> <el-input v-model="form.tunnelAlias" placeholder="请输入隧道简称"/>
</el-form-item> </el-form-item>
<el-form-item label="序列号前缀" prop="serialNumberPrefix">
<el-input v-model="form.serialNumberPrefix" placeholder="请输入序列号前缀"/>
</el-form-item>
<!-- <el-form-item label="序列号1" prop="serialNumber">-->
<!-- <el-input v-model="form.serialNumber" placeholder="请输入序列号1"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="序列号2" prop="serialNumberOne">-->
<!-- <el-input v-model="form.serialNumberOne" placeholder="请输入序列号2"/>-->
<!-- </el-form-item>-->
<el-form-item label="PLC序列号" prop="serialNumber">
<el-input v-model="form.serialNumber" placeholder="请输入PLC序列号"/>
</el-form-item>
<div style="display: flex;flex-direction: column">
<div style="display:flex;align-items:center;justify-content:flex-end;font-size: 38px;color: #08B7B8;">
<span style="cursor: pointer;" @click="addSerialNumber">添加序列号</span>
<el-icon size="74" color="#08B7B8" style="margin-left: 20px;cursor: pointer;" @click="addSerialNumber">
<CirclePlus/>
</el-icon>
</div>
<div v-for="(item,index) in serialNumberList" :key="index">
<el-form-item label="序列号名称">
<div style="flex: 1;display: flex;">
<el-input v-model="item.serialNumberType" placeholder="请输入序列号名称"/>
<!-- <el-icon size="74" color="#08B7B8" style="margin-left: 20px;cursor: pointer" @click="addSerialNumber"-->
<!-- v-if="index===0">-->
<!-- <CirclePlus/>-->
<!-- </el-icon>-->
<el-icon size="74" color="#08B7B8" style="margin-left: 20px;cursor: pointer"
@click="delSerialNumber(index)">
<Remove/>
</el-icon>
</div>
</el-form-item>
<el-form-item :label="item.serialNumberType+'序列号'" class="serialNumber-name-overflow-hidden">
<el-input v-model="item.serialNumber" :placeholder="'请输入'+item.serialNumberType+'序列号'"
style="margin-right: 94px"/>
</el-form-item>
</div>
</div>
<!-- <div style="display: flex;flex-direction: column">-->
<!-- <div v-for="(item,index) in serialNumberList" :key="index" >-->
<!-- <el-form-item :label="'序列号'+(index+2)">-->
<!-- <div style="flex: 1;display: flex;">-->
<!-- <el-input v-model="item.serialNumber" :placeholder="'请输入序列号'+(index+2)" />-->
<!-- <el-icon size="74" color="#08B7B8" style="margin-left: 20px;cursor: pointer" @click="addSerialNumber" v-if="index===0">-->
<!-- <CirclePlus/>-->
<!-- </el-icon>-->
<!-- <el-icon v-else size="74" color="#08B7B8" style="margin-left: 20px;cursor: pointer" @click="delSerialNumber(index)" >-->
<!-- <Remove/>-->
<!-- </el-icon>-->
<!-- </div>-->
<!-- </el-form-item>-->
<!-- </div>-->
<!-- </div>-->
<el-form-item label="隧道长度" prop="totalLength"> <el-form-item label="隧道长度" prop="totalLength">
<el-input type="number" v-model="form.totalLength" placeholder="请输入隧道长度"/> <el-input type="number" v-model="form.totalLength" placeholder="请输入隧道长度"/>
</el-form-item> </el-form-item>
<el-form-item label="施工长度" prop="constructionLength"> <el-form-item label="施工长度" prop="constructionLength">
<el-input type="number" v-model="form.constructionLength" placeholder="请输入施工长度"/> <el-input type="number" v-model="form.constructionLength" placeholder="请输入施工长度"/>
</el-form-item> </el-form-item>
<el-form-item label="基准频率" prop="referenceFrequency"> <el-form-item label="风机初始频率" prop="fanInitialFrequency">
<el-input type="number" v-model="form.referenceFrequency" placeholder="请输入基准频率"/> <el-input type="number" v-model="form.fanInitialFrequency" placeholder="请输入风机初始频率"/>
</el-form-item>
<el-form-item label="爆破量级" prop="burstLevel">
<el-input type="number" v-model="form.burstLevel" placeholder="请输入爆破量级"/>
</el-form-item> </el-form-item>
<div style="display: flex">
<el-form-item label="升频时间(分钟)" prop="upTime" label-width="300px">
<el-input-number v-model="form.upTime" :min="0" :max="60"/>
</el-form-item>
<el-form-item label="升频率" prop="upFrequency">
<el-input type="number" v-model="form.upFrequency" placeholder="请输入升频率">
<template #suffix>
<span>Hz</span>
</template>
</el-input>
</el-form-item>
</div>
<div style="display: flex">
<el-form-item label="降频时间(分钟)" prop="dropTime" label-width="300px">
<el-input-number v-model="form.dropTime" :min="0" :max="60"/>
</el-form-item>
<el-form-item label="降频率" prop="dropFrequency">
<el-input type="number" v-model="form.dropFrequency" placeholder="请输入降频率">
<template #suffix>
<span>Hz</span>
</template>
</el-input>
</el-form-item>
</div>
<el-form-item label="是否默认"> <el-form-item label="是否默认">
<el-radio-group v-model="form.isDefault"> <el-radio-group v-model="form.isDefault">
<el-radio :label="true"></el-radio> <el-radio :label="true"></el-radio>
@@ -248,48 +139,13 @@ const type = reactive(params.type)
const formRules = ref({ const formRules = ref({
tunnelName: [{required: true, message: '请输入隧道名称', trigger: ['blur', 'change']}], tunnelName: [{required: true, message: '请输入隧道名称', trigger: ['blur', 'change']}],
tunnelAlias: [{required: true, message: '请输入隧道简称', trigger: ['blur', 'change']}], tunnelAlias: [{required: true, message: '请输入隧道简称', trigger: ['blur', 'change']}],
serialNumberPrefix: [
{required: true, message: '请输入序列号前缀', trigger: ['blur', 'change']},
{validator: validateNumber, message: '请输入英文、数字、英文数字组合的序列号前缀', trigger: ['blur', 'change']},
{min: 14, max: 14, message: '隧道序列号前缀长度为14位', trigger: ['blur', 'change']},
],
serialNumber: [
{required: true, message: '请输入PLC序列号', trigger: ['blur', 'change']},
{validator: validateNumber, message: '请输入英文、数字、英文数字组合的PLC序列号', trigger: ['blur', 'change']},
{min: 16, max: 16, message: '隧道PLC序列号长度为16位', trigger: ['blur', 'change']},
{validator: validateSerialNumberPrefix, message: '同一隧道的序列号前缀需相同', trigger: ['blur', 'change']}
],
serialNumberOne: [
// {required: true, message: '请输入序列号2', trigger: ['blur', 'change']},
// {validator: validateNumber, message: '请输入英文、数字、英文数字组合的序列号2', trigger: ['blur', 'change']},
// { min:16,max:16,message: '隧道序列号2长度为16位',trigger: ['blur', 'change']},
// {validator: validateSerialNumberOnePrefix, message: '同一隧道的序列号前缀需相同', trigger: ['blur', 'change']}
],
totalLength: [{required: true, message: '请输入隧道长度', trigger: ['blur', 'change']}], totalLength: [{required: true, message: '请输入隧道长度', trigger: ['blur', 'change']}],
constructionLength: [{required: true, message: '请输入施工长度', trigger: ['blur', 'change']}], constructionLength: [{required: true, message: '请输入施工长度', trigger: ['blur', 'change']}],
referenceFrequency: [{required: true, message: '请输入基准频率', trigger: ['blur', 'change']}],
upTime: [{required: true, message: '请选择升频时间', trigger: ['blur', 'change']}],
upFrequency: [{required: true, message: '请输入升频率', trigger: ['blur', 'change']}],
dropTime: [{required: true, message: '请选择降频时间', trigger: ['blur', 'change']}],
dropFrequency: [{required: true, message: '请输入降频率', trigger: ['blur', 'change']}]
}) })
let clickModel = ref(1)
const showFirst = ref(false) const showFirst = ref(false)
const showOperation = ref(true) const showOperation = ref(true)
const formInstance = ref() const formInstance = ref()
const tunnelList = ref([]) const tunnelList = ref([])
const coordsList = ref([
{
tunnelId: 1,
coords: '767,1117,793,1182,2379,682,2437,454,2349,505,2298,666,2221,531,2153,578,2212,692,765,1126',
}, {
tunnelId: 1,
coords: '863,1475,1135,1494,2321,1078,3023,801,3214,703,3288,752,2300,1154,1560,1438,1170,1554,844,1529',
}, {
tunnelId: 94,
coords: '1181,1364,2105,622,2005,589,1116,1324'
}
])
const iconsList = ref([ const iconsList = ref([
{ {
icon: 'sd_icon_fj.png', icon: 'sd_icon_fj.png',
@@ -370,7 +226,7 @@ const total = ref(0);
onMounted(() => { onMounted(() => {
showOperation.value = localStorage.getItem('roleKey') !== 'tunnel_admin'; showOperation.value = localStorage.getItem('roleKey') !== 'tunnel_admin';
}) })
const handleGoToSimulateTunnel=(tunnelId)=>{ const handleGoToSimulateTunnel = (tunnelId) => {
router.push('/simulate/' + tunnelId) router.push('/simulate/' + tunnelId)
} }
const addSerialNumber = () => { const addSerialNumber = () => {

View File

@@ -61,7 +61,7 @@
<div v-else class="shrink-right" @click="closeRight"></div> <div v-else class="shrink-right" @click="closeRight"></div>
</div> </div>
<div class="switch-btn"> <div class="switch-btn">
<div class="arrow" @click="previousBtn"></div> <div class="arrow" @click="previousBtn"></div>{{initialIndex}}
<el-carousel height="150px" type="card" ref="tunnelBtn" :autoplay="false" :initial-index="initialIndex" <el-carousel height="150px" type="card" ref="tunnelBtn" :autoplay="false" :initial-index="initialIndex"
@change="changeTunnel"> @change="changeTunnel">
<div class="btn"> <div class="btn">
@@ -113,7 +113,6 @@
<el-table-column prop="alarmTime" label="告警时间" align="center" width="480px" /> <el-table-column prop="alarmTime" label="告警时间" align="center" width="480px" />
<el-table-column prop="lookupStatus" label="查阅状态" align="center" width="200px" <el-table-column prop="lookupStatus" label="查阅状态" align="center" width="200px"
v-if="roleKey !== 'administrator'"> v-if="roleKey !== 'administrator'">
<template #default="scope"> <template #default="scope">
<el-tag :type="scope.row.lookupStatus ? 'success' : 'warning'">{{ scope.row.lookupStatus ? '已读' : '未读' }} <el-tag :type="scope.row.lookupStatus ? 'success' : 'warning'">{{ scope.row.lookupStatus ? '已读' : '未读' }}
</el-tag> </el-tag>
@@ -485,7 +484,10 @@ const getTunnel = (id) => {
}); });
} }
const changeTunnel = (e) => { const changeTunnel = (e) => {
socket.close() console.info("🚀 ~method:'socket' -----", socket)
if(socket){
socket.close()
}
let newObj = {} let newObj = {}
tunnelList.value.forEach((item, index) => { tunnelList.value.forEach((item, index) => {
if (index === e) { if (index === e) {
@@ -519,10 +521,14 @@ const manageSelect = (index) => {
router.push("/user/" + localStorage.getItem('currentSiteId')); router.push("/user/" + localStorage.getItem('currentSiteId'));
} }
} }
socket.close() if(socket){
socket.close()
}
}; };
const handleChangeSite = debounce((item) => { const handleChangeSite = debounce((item) => {
socket.close() if(socket){
socket.close()
}
currentSite.value = item.label currentSite.value = item.label
currentSiteId.value = item.value currentSiteId.value = item.value
getTunnel(item.value) getTunnel(item.value)