ソースを参照

1. 网络实时解算页面调整
2. 掘金工作面模型加载逻辑调整
3. 公司端主页面地图定位样式调整

hongrunxia 9 ヶ月 前
コミット
bc4c51bd81

+ 1 - 1
src/components/chart/BarAndLine.vue

@@ -80,7 +80,7 @@
       let optionUtil;
 
       watchEffect(() => {
-        props.dataSource && option.series && initCharts();
+        props.dataSource && props.xAxisPropType && option.series && initCharts();
       });
 
       watch([() => props.chartsType, () => props.chartsColumns], ([newChartsType, newChartsColumns]) => {

+ 49 - 9
src/views/vent/home/clique/components/icon-light.vue

@@ -27,11 +27,35 @@
       ? [
           { code: 'sdmtjtltmk', imgSrc: warningLevel1, label: 'lt', leftV: '327px', topV: '40px', textColor: '#fff', align: 'left' },
           { code: 'sdmtjtcctrk', imgSrc: warningLevel1, label: 'cce', leftV: '291px', topV: '69px', textColor: '#fff', align: 'left' },
-          { code: 'sdmtjtbetmk', imgSrc: warningLevel1, label: 'bet', leftV: '286px', topV: '97px', textColor: 'rgba(255, 231, 83,.9)', align: 'left' },
+          {
+            code: 'sdmtjtbetmk',
+            imgSrc: warningLevel1,
+            label: 'bet',
+            leftV: '286px',
+            topV: '97px',
+            textColor: 'rgba(255, 231, 83,.9)',
+            align: 'left',
+          },
           { code: 'sdmtjtwlmlmk', imgSrc: warningLevel1, label: 'wlml', leftV: '327px', topV: '115px', textColor: '#fff', align: 'left' },
-          { code: 'sdmtjtcctmk', imgSrc: warningLevel1, label: 'cc', leftV: '346px', topV: '132px', textColor: 'rgba(255, 231, 83,.9)', align: 'left' },
+          {
+            code: 'sdmtjtcctmk',
+            imgSrc: warningLevel1,
+            label: 'cc',
+            leftV: '346px',
+            topV: '132px',
+            textColor: 'rgba(255, 231, 83,.9)',
+            align: 'left',
+          },
           { code: 'sdmtjtsgtmk', imgSrc: warningLevel1, label: 'skt', leftV: '373px', topV: '149px', textColor: '#fff', align: 'left' },
-          { code: 'sdmtjtbltmk', imgSrc: warningLevel1, label: 'blt', leftV: '408px', topV: '184px', textColor: 'rgba(255, 231, 83,.9)', align: 'left' },
+          {
+            code: 'sdmtjtbltmk',
+            imgSrc: warningLevel1,
+            label: 'blt',
+            leftV: '408px',
+            topV: '184px',
+            textColor: 'rgba(255, 231, 83,.9)',
+            align: 'left',
+          },
           { code: 'sdmtjthlgmk', imgSrc: warningLevel1, label: 'hlg', leftV: '445px', topV: '214px', textColor: '#fff', align: 'left' },
           {
             code: 'sdmtjtswmk',
@@ -44,12 +68,28 @@
           },
           { code: 'sdmtjtdltmkhjtj', imgSrc: warningLevel1, label: 'hjt', leftV: '398px', topV: '265px', textColor: '#fff', align: 'left' },
           { code: 'sdmtjtdltmk', imgSrc: warningLevel1, label: 'dlt', leftV: '492px', topV: '260px', textColor: '#fff', align: 'left' },
-          { code: 'sdmtjtjjmk', imgSrc: warningLevel1, label: 'jj', leftV: '565px', topV: '413px', textColor: 'rgba(255, 231, 83,.9)', align: 'left' },
+          {
+            code: 'sdmtjtjjmk',
+            imgSrc: warningLevel1,
+            label: 'jj',
+            leftV: '565px',
+            topV: '413px',
+            textColor: 'rgba(255, 231, 83,.9)',
+            align: 'left',
+          },
           { code: 'sdmtjtyjlmk', imgSrc: warningLevel1, label: 'yjl', leftV: '669px', topV: '308px', textColor: '#fff', align: 'left' },
-          { code: 'sdmtjtbdmk', imgSrc: warningLevel1, label: 'bd', leftV: '862px', topV: '340px', textColor: 'rgba(255, 231, 83,.9)', align: 'left' },
+          {
+            code: 'sdmtjtbdmk',
+            imgSrc: warningLevel1,
+            label: 'bd',
+            leftV: '862px',
+            topV: '340px',
+            textColor: 'rgba(255, 231, 83,.9)',
+            align: 'left',
+          },
         ]
       : [
-          { code: 'sdmtjtltmk', imgSrc: warningLevel4, label: '柳塔矿', leftV: '375px', topV: '135px', textColor: '#fff', align: 'right' },
+          { code: 'sdmtjtltmk', imgSrc: warningLevel1, label: '柳塔矿', leftV: '375px', topV: '135px', textColor: '#fff', align: 'right' },
           { code: 'sdmtjtcctrk', imgSrc: warningLevel1, label: '寸草塔二矿', leftV: '269px', topV: '116px', textColor: '#fff', align: 'left' },
           {
             code: 'sdmtjtbetmk',
@@ -60,7 +100,7 @@
             textColor: 'rgba(255, 231, 83,.9)',
             align: 'left',
           },
-          { code: 'sdmtjtwlmlmk', imgSrc: warningLevel3, label: '乌兰木伦矿', leftV: '432px', topV: '178px', textColor: '#fff', align: 'right' },
+          { code: 'sdmtjtwlmlmk', imgSrc: warningLevel1, label: '乌兰木伦矿', leftV: '432px', topV: '178px', textColor: '#fff', align: 'right' },
           {
             code: 'sdmtjtcctmk',
             imgSrc: warningLevel1,
@@ -80,7 +120,7 @@
             textColor: 'rgba(255, 231, 83,.9)',
             align: 'left',
           },
-          { code: 'sdmtjthlgmk', imgSrc: warningLevel2, label: '哈拉沟矿', leftV: '511px', topV: '302px', textColor: '#fff', align: 'right' },
+          { code: 'sdmtjthlgmk', imgSrc: warningLevel1, label: '哈拉沟矿', leftV: '511px', topV: '302px', textColor: '#fff', align: 'right' },
           {
             code: 'sdmtjtswmk',
             imgSrc: warningLevel1,
@@ -104,7 +144,7 @@
           { code: 'sdmtjtyjlmk', imgSrc: warningLevel1, label: '榆家梁矿', leftV: '699px', topV: '307px', textColor: '#fff', align: 'center' },
           {
             code: 'sdmtjtbdmk',
-            imgSrc: warningLevel4,
+            imgSrc: warningLevel1,
             label: '保德矿',
             leftV: '892px',
             topV: '200px',

+ 3 - 0
src/views/vent/monitorManager/deviceMonitor/components/device/device.api.ts

@@ -12,6 +12,7 @@ enum Api {
   listdays = '/safety/ventanalyMonitorData/listdays',
   getHistoryData = '/ventanaly-device/history/getHistoryData',
   safetyDeviceList = '/ventanaly-device/monitor/codeDict',
+  exportXlsUrl = '/ventanaly-device/monitor/exportXls',
 }
 /**
  * 列表接口
@@ -35,3 +36,5 @@ export const getDepartmentInfo = (params) => defHttp.get({ url: Api.getDepartmen
 export const listdays = (params) => defHttp.get({ url: Api.listdays, params });
 export const getHistoryData = (params) => defHttp.post({ url: Api.getHistoryData, params });
 export const safetyDeviceList = (params) => defHttp.post({ url: Api.safetyDeviceList, params });
+
+export const getExportUrl = Api.exportXlsUrl;

+ 20 - 6
src/views/vent/monitorManager/deviceMonitor/components/device/index.vue

@@ -69,6 +69,14 @@
             </div>
           </div>
         </div>
+        <div v-if="deviceType == 'gaspatrol'">
+          <div class="device-button-group">
+            <div class="enter-detail" @click="exportXls()">
+              <send-outlined />
+              导出
+            </div>
+          </div>
+        </div>
         <!-- 是人员定位表单代码,由于放在tab中,表格对已知刷新,导致表单数据也在刷寻,造成输入一半的中文时会清空输入框的内容,导致的输入不上数据 -->
         <div v-if="deviceType.startsWith('location')" class="location-form" style="position: absolute; z-index: 9999; top: 50px;">
           <div class="location-form-item">
@@ -332,7 +340,7 @@
 <script setup lang="ts">
 import { ref, onMounted, onUnmounted, ComponentOptions, shallowRef, reactive, defineProps, watch } from 'vue'
 import { SendOutlined } from '@ant-design/icons-vue';
-import { list, getDeviceList, getDeviceTypeList, devPosition, getDepartmentInfo,safetyDeviceList } from './device.api'
+import { list, getDeviceList, getDeviceTypeList, devPosition, getDepartmentInfo,getExportUrl } from './device.api'
 import AlarmHistoryTable from '../../../comment/AlarmHistoryTable.vue';
 import HistoryTable from '../../../comment/HistoryTable.vue';
 import HandlerHistoryTable from '../../../comment/HandlerHistoryTable.vue';
@@ -352,6 +360,7 @@ import BarAndLine from '/@/components/chart/BarAndLine.vue';
 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 { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
 
 const { FiberModal, BundleModal, DustModal, BallvalveModal, AtomizingModal, GaspatrolModal } = getMonitorComponent()
@@ -363,6 +372,7 @@ const props = defineProps({
     default: () => { }
   }
 })
+const { handleExportXls } = useMethods();
 const echatsOption = {
   grid: {
     top: '35',
@@ -761,6 +771,10 @@ function goDetail(record?) {
   }
 }
 
+function exportXls() {
+  handleExportXls('瓦斯巡检记录', getExportUrl, { devicetype: deviceType.value })
+}
+
 function toHome() {
   deviceList.value = []
   if (timer) clearTimeout(timer)
@@ -939,7 +953,7 @@ onUnmounted(() => {
 
 .select-node {
   position: fixed;
-  top: 60px;
+  top: 100px;
   left: 10px;
   color: #fff;
   display: flex;
@@ -969,7 +983,7 @@ onUnmounted(() => {
   height: 500px;
   background: url('/@/assets/images/vent/home/tree-bg.png') no-repeat;
   position: fixed;
-  top: 60px;
+  top: 100px;
   left: 10px;
   background-size: contain;
   pointer-events: auto;
@@ -1078,7 +1092,7 @@ onUnmounted(() => {
   width: 46px;
   height: 178px;
   position: absolute;
-  top: 60px;
+  top: 100px;
   // right: 0;
   background: url('/@/assets/images/vent/home/location-bg.png') no-repeat;
   background-size: contain;
@@ -1102,7 +1116,7 @@ onUnmounted(() => {
 
 .location-select {
   position: fixed;
-  top: 60px;
+  top: 100px;
   // right: 240px;
   pointer-events: auto;
 
@@ -1249,7 +1263,7 @@ onUnmounted(() => {
 
 .bottom-tabs-box {
   position: relative;
-
+  height: 290px !important; 
   .tabs-box {
     width: calc(100% - 12px) !important;
     bottom: 3px !important;

+ 9 - 8
src/views/vent/monitorManager/deviceMonitor/components/device/modal/bundle.modal.vue

@@ -102,7 +102,7 @@
           <div class="echarts-box">
             <BarAndLine
               class="echarts-line"
-              xAxisPropType="time"
+              :xAxisPropType="xAxisPropType"
               :dataSource="historyList"
               height="100%"
               width="65%"
@@ -163,7 +163,7 @@
 
       const chartsColumnArr = getTableHeaderColumns('bundletube_chart');
       const chartsColumns = chartsColumnArr.length > 0 ? chartsColumnArr : chartsColumnList;
-
+      const xAxisPropType = ref('ttime');
       const [register, { setModalProps, closeModal }] = useModalInner();
 
       function handleVisibleChange(visible) {
@@ -203,10 +203,9 @@
       //获取历史数据
       async function getListdays() {
         if (posMonitor.value.stationtype && posMonitor.value.stationtype != 'redis') {
-          // const ttime_begin = dayjs(new Date().getTime() - 3 * 24 * 60 * 60 * 1000).format('YYYY-MM-DD hh:mm:ss');
-          // const ttime_end = dayjs(new Date().getTime()).format('YYYY-MM-DD hh:mm:ss');
-          const ttime_begin = dayjs().startOf('date').format('YYYY-MM-DD hh:mm:ss');
-          const ttime_end = dayjs().format('YYYY-MM-DD hh:mm:ss');
+          xAxisPropType.value = 'ttime';
+          const ttime_begin = dayjs().startOf('date').format('YYYY-MM-DD HH:mm:ss');
+          const ttime_end = dayjs().format('YYYY-MM-DD HH:mm:ss');
           const pageNo = 1;
           const pageSize = 100;
           const skip = 8;
@@ -233,12 +232,13 @@
           const params = {
             pageNum: 1,
             pageSize: 100,
-            startTime: dayjs(new Date().getTime() - 3 * 24 * 60 * 60 * 1000).format('YYYY-MM-DD hh:mm:ss'),
-            endTime: dayjs(new Date().getTime()).format('YYYY-MM-DD hh:mm:ss'),
+            startTime: dayjs(new Date().getTime() - 3 * 24 * 60 * 60 * 1000).format('YYYY-MM-DD HH:mm:ss'),
+            endTime: dayjs(new Date().getTime()).format('YYYY-MM-DD HH:mm:ss'),
             deviceId: activeDeviceID.value,
             interval: '1h',
             isEmployee: true,
           };
+          xAxisPropType.value = 'time';
           const result = await getHistoryData({ ...params });
           if (result['records'].length != 0) {
             result['records'].forEach((el) => {
@@ -291,6 +291,7 @@
         echatsOption,
         posList,
         chartsColumns,
+        xAxisPropType,
       };
     },
   });

+ 1 - 1
src/views/vent/monitorManager/fiberMonitor/index.vue

@@ -37,7 +37,7 @@
       </div>
     </div>
     <div class="title-text">
-      {{ selectData.strname }}
+      {{ selectData.strinstallpos || selectData.strname }}
     </div>
     <div class="bottom-tabs-box">
       <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">

+ 1 - 1
src/views/vent/monitorManager/gateMonitor/index.vue

@@ -63,7 +63,7 @@
       </div>
     </div>
     <div class="title-text">
-      {{ selectData.supplyAirAddr || selectData.stationname || selectData.strname }}
+      {{ selectData.supplyAirAddr || selectData.strinstallpos || selectData.strname }}
     </div>
     <div class="bottom-tabs-box" @mousedown="setDivHeight($event, 350, scroll)">
       <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 120}px`">

+ 174 - 116
src/views/vent/monitorManager/mainFanMonitor/index.vue

@@ -1,26 +1,32 @@
 <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" /> -->
-    <div id="main3DCSS" class="threejs-Object-CSS"
-      style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 1; top: 0">
+    <div
+      id="main3DCSS"
+      class="threejs-Object-CSS"
+      style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 1; top: 0"
+    >
       <div style="position: relative">
         <div class="elementTag" id="inputBox">
           <div class="elementContent elementContent-r" v-if="selectData.DataPa && backMonitorIsShow">
             <!-- <div class="element-item"><span class="data-title">风机气压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div> -->
-            <div class="element-item"><span class="data-title">风机负压(Pa):</span><span>{{ selectData.Fan2FanPre ?
-                selectData.Fan2FanPre : '-' }}</span></div>
-            <div class="element-item"><span class="data-title">风机风量(m³/s):</span><span>{{ selectData.Fan2m3 ?
-                selectData.Fan2m3 : '-' }}</span></div>
+            <div class="element-item"
+              ><span class="data-title">风机负压(Pa):</span><span>{{ selectData.Fan2FanPre ? selectData.Fan2FanPre : '-' }}</span></div
+            >
+            <div class="element-item"
+              ><span class="data-title">风机风量(m³/s):</span><span>{{ selectData.Fan2m3 ? selectData.Fan2m3 : '-' }}</span></div
+            >
           </div>
         </div>
         <div class="elementTag" id="inputBox1">
           <div class="elementContent elementContent-r" v-if="selectData.DataPa && frontMonitorIsShow">
             <!-- <div class="element-item"><span class="data-title">风机全压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div> -->
-            <div class="element-item"><span class="data-title">风机负压(Pa):</span><span>{{ selectData.Fan1FanPre ?
-                selectData.Fan1FanPre : '-' }}</span></div>
-            <div class="element-item"><span class="data-title">风机风量(m³/s):</span><span>{{ selectData.Fan1m3 ?
-                selectData.Fan1m3 : '-' }}</span></div>
+            <div class="element-item"
+              ><span class="data-title">风机负压(Pa):</span><span>{{ selectData.Fan1FanPre ? selectData.Fan1FanPre : '-' }}</span></div
+            >
+            <div class="element-item"
+              ><span class="data-title">风机风量(m³/s):</span><span>{{ selectData.Fan1m3 ? selectData.Fan1m3 : '-' }}</span></div
+            >
           </div>
         </div>
         <div v-if="globalConfig?.simulatedPassword" class="elementTag" id="fbm">
@@ -36,43 +42,52 @@
                   <span class="data-title"><span class="signal-round signal-round-gry vent-margin-r-8"></span>关闭</span>
                 </template>
                 <template v-else>
-                  <div class="vent-margin-l-10"><span
-                      class="signal-round signal-round-warning vent-margin-r-8"></span>防爆门正在运行 或 数据异常</div>
+                  <div class="vent-margin-l-10"
+                    ><span class="signal-round signal-round-warning vent-margin-r-8"></span>防爆门正在运行 或 数据异常</div
+                  >
                 </template>
               </div>
               <div class="vent-flex-row-between vent-margin-t-10">
                 <span class="data-title">反风锁紧状态:</span>
-                <template v-if="
+                <template
+                  v-if="
                     selectData['Lock1Open'] == 1 && selectData['Lock1Close'] == 0 && selectData['Lock2Open'] == 1 && selectData['Lock2Close'] == '0'
-                  ">
-                  <span class="data-title"><span
-                      class="signal-round signal-round-blue vent-margin-r-8"></span>锁1开</span>
-                  <span class="data-title"><span
-                      class="signal-round signal-round-blue vent-margin-r-8"></span>锁2开</span>
+                  "
+                >
+                  <span class="data-title"><span class="signal-round signal-round-blue vent-margin-r-8"></span>锁1开</span>
+                  <span class="data-title"><span class="signal-round signal-round-blue vent-margin-r-8"></span>锁2开</span>
                 </template>
-                <template v-else-if="
+                <template
+                  v-else-if="
                     selectData['Lock1Open'] == '0' && selectData['Lock1Close'] == 1 && selectData['Lock2Open'] == '0' && selectData['Lock2Close'] == 1
-                  ">
+                  "
+                >
                   <span class="data-title"><span class="signal-round signal-round-gry vent-margin-r-8"></span>锁1关</span>
                   <span class="data-title"><span class="signal-round signal-round-gry vent-margin-r-8"></span>锁2关</span>
                 </template>
                 <template v-else>
-                  <div class="vent-margin-l-10"><span
-                      class="signal-round signal-round-warning vent-margin-r-8"></span>反风锁紧正在运行 或 数据异常</div>
+                  <div class="vent-margin-l-10"
+                    ><span class="signal-round signal-round-warning vent-margin-r-8"></span>反风锁紧正在运行 或 数据异常</div
+                  >
                 </template>
               </div>
             </div>
             <div class="fbm-data">
-              <div class="element-item"><span class="data-title">井口负压(kPa):</span><span>{{ selectData.DataPa ?
-                  selectData.DataPa : '-' }}</span></div>
-              <div class="element-item"><span class="data-title">井口正压(kPa):</span><span>{{ selectData.DataPa ?
-                  selectData.DataPa : '-' }}</span></div>
-              <div class="element-item"><span class="data-title">井口温度(℃):</span><span>{{ selectData.DataPa ?
-                  selectData.DataPa : '-' }}</span></div>
-              <div class="element-item"><span class="data-title">甲烷浓度(%):</span><span>{{ selectData.Fan1Negative ?
-                  selectData.Fan1Negative : '-' }}</span></div>
-              <div class="element-item"><span class="data-title">CO浓度(%):</span><span>{{ selectData.Fan1m3 ?
-                  selectData.Fan1m3 : '-' }}</span></div>
+              <div class="element-item"
+                ><span class="data-title">井口负压(kPa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div
+              >
+              <div class="element-item"
+                ><span class="data-title">井口正压(kPa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div
+              >
+              <div class="element-item"
+                ><span class="data-title">井口温度(℃):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div
+              >
+              <div class="element-item"
+                ><span class="data-title">甲烷浓度(%):</span><span>{{ selectData.Fan1Negative ? selectData.Fan1Negative : '-' }}</span></div
+              >
+              <div class="element-item"
+                ><span class="data-title">CO浓度(%):</span><span>{{ selectData.Fan1m3 ? selectData.Fan1m3 : '-' }}</span></div
+              >
               <div class="vent-flex-row-between">
                 <span class="data-title">操作方式:</span>
                 <span class="data-title"><span class="signal-round signal-round-blue vent-margin-r-8"></span>远程</span>
@@ -90,7 +105,7 @@
   <div class="scene-box" style="z-index: 999">
     <div class="title-text" style="position: absolute; z-index: 9999; width: 100%; text-align: center">{{
       selectData.supplyAirAddr || selectData.strinstallpos || selectData.stationname
-      }}</div>
+    }}</div>
 
     <div v-if="hasPermission('btn:show')" class="top-box control-group">
       <template v-for="(item, index) in modalTypeArr.centerBtnArr" :key="index">
@@ -103,10 +118,12 @@
         <div class="item-header">设备监测</div>
         <div class="item-container">
           <div class="tab">
-            <div class="tab-item" :class="{ 'tab-item-active-r': dataMonitorRowIndex == 0 }"
-              @click="selectDevice('dataMonitorRowIndex', 0)">1#风机</div>
-            <div class="tab-item" :class="{ 'tab-item-active-r': dataMonitorRowIndex == 1 }"
-              @click="selectDevice('dataMonitorRowIndex', 1)">2#风机</div>
+            <div class="tab-item" :class="{ 'tab-item-active-r': dataMonitorRowIndex == 0 }" @click="selectDevice('dataMonitorRowIndex', 0)"
+              >1#风机</div
+            >
+            <div class="tab-item" :class="{ 'tab-item-active-r': dataMonitorRowIndex == 1 }" @click="selectDevice('dataMonitorRowIndex', 1)"
+              >2#风机</div
+            >
           </div>
           <div class="container-group container-group-l">
             <template v-if="deviceType">
@@ -118,18 +135,18 @@
                 <div v-if="data.dataIndex.startsWith('Fan')">
                   <div class="item-value" v-if="dataMonitorRowIndex == 0">{{
                     selectData['Fan1StartStatus'] == '0' && globalConfig?.simulatedPassword
-                    ? '-'
-                    : selectData[data.dataIndex.replace('Fan', 'Fan1')]
-                    ? selectData[data.dataIndex.replace('Fan', 'Fan1')]
-                    : '-'
-                    }}</div>
+                      ? '-'
+                      : selectData[data.dataIndex.replace('Fan', 'Fan1')]
+                      ? selectData[data.dataIndex.replace('Fan', 'Fan1')]
+                      : '-'
+                  }}</div>
                   <div class="item-value" v-if="dataMonitorRowIndex == 1">{{
                     selectData['Fan2StartStatus'] == '0' && globalConfig?.simulatedPassword
-                    ? '-'
-                    : selectData[data.dataIndex.replace('Fan', 'Fan2')]
-                    ? selectData[data.dataIndex.replace('Fan', 'Fan2')]
-                    : '-'
-                    }}</div>
+                      ? '-'
+                      : selectData[data.dataIndex.replace('Fan', 'Fan2')]
+                      ? selectData[data.dataIndex.replace('Fan', 'Fan2')]
+                      : '-'
+                  }}</div>
                 </div>
                 <div v-else>
                   <div class="item-value">{{ selectData[data.dataIndex] ? selectData[data.dataIndex] : '-' }}</div>
@@ -143,10 +160,12 @@
         <div class="item-header">设备报警</div>
         <div class="item-container">
           <div class="tab">
-            <div class="tab-item" :class="{ 'tab-item-active-r': warningMonitorRowIndex === 0 }"
-              @click="selectDevice('warningMonitorRowIndex', 0)">1#风机</div>
-            <div class="tab-item" :class="{ 'tab-item-active-r': warningMonitorRowIndex === 1 }"
-              @click="selectDevice('warningMonitorRowIndex', 1)">2#风机</div>
+            <div class="tab-item" :class="{ 'tab-item-active-r': warningMonitorRowIndex === 0 }" @click="selectDevice('warningMonitorRowIndex', 0)"
+              >1#风机</div
+            >
+            <div class="tab-item" :class="{ 'tab-item-active-r': warningMonitorRowIndex === 1 }" @click="selectDevice('warningMonitorRowIndex', 1)"
+              >2#风机</div
+            >
           </div>
           <div class="container-group">
             <div class="warning-header">
@@ -156,16 +175,13 @@
               </div> -->
               <div class="header-item">
                 <div class="header-title"> 未处理数</div>
-                <div class="header-value">{{ selectData['warnLogNotOkCount'] }}
-                </div>
+                <div class="header-value">{{ selectData['warnLogNotOkCount'] }} </div>
               </div>
             </div>
             <div class="warning-group">
               <template v-if="deviceType">
                 <div class="warning-item" v-for="(state, index) in rightColumns" :key="index">
-                  <div class="item-name">
-                    <div class="icon"></div> {{ state.title }}
-                  </div>
+                  <div class="item-name"> <div class="icon"></div> {{ state.title }} </div>
                   <div v-if="state.dataIndex.startsWith('Fan')">
                     <div class="signal-item" v-if="warningMonitorRowIndex == 0">
                       <template v-if="selectData['Fan1StartStatus'] == '0' && globalConfig?.simulatedPassword">
@@ -173,20 +189,23 @@
                         <div class="vent-margin-l-8">无状态</div>
                       </template>
                       <template v-else>
-                        <div class="signal-round" :class="{
+                        <div
+                          class="signal-round"
+                          :class="{
                             'signal-round-run': selectData[state.dataIndex.replace('Fan', 'Fan1')] == '0',
                             'signal-round-warning':
                               selectData[state.dataIndex.replace('Fan', 'Fan1')] !== undefined &&
                               selectData[state.dataIndex.replace('Fan', 'Fan1')] == '1',
                             'signal-round-gry': selectData[state.dataIndex.replace('Fan', 'Fan1')] === undefined,
-                          }"></div>
+                          }"
+                        ></div>
                         <div class="vent-margin-l-8">{{
                           selectData[state.dataIndex.replace('Fan', 'Fan1')] === undefined
-                          ? '无状态'
-                          : selectData[state.dataIndex.replace('Fan', 'Fan1')] == '0'
-                          ? '正常'
-                          : '异常'
-                          }}</div>
+                            ? '无状态'
+                            : selectData[state.dataIndex.replace('Fan', 'Fan1')] == '0'
+                            ? '正常'
+                            : '异常'
+                        }}</div>
                       </template>
                     </div>
                     <div class="signal-item" v-if="warningMonitorRowIndex == 1">
@@ -195,34 +214,39 @@
                         <div class="vent-margin-l-8">无状态</div>
                       </template>
                       <template v-else>
-                        <div class="signal-round" :class="{
+                        <div
+                          class="signal-round"
+                          :class="{
                             'signal-round-run': selectData[state.dataIndex.replace('Fan', 'Fan2')] == '0',
                             'signal-round-warning':
                               selectData[state.dataIndex.replace('Fan', 'Fan2')] != undefined &&
                               selectData[state.dataIndex.replace('Fan', 'Fan2')] == '1',
                             'signal-round-gry': selectData[state.dataIndex.replace('Fan', 'Fan2')] == undefined,
-                          }"></div>
+                          }"
+                        ></div>
                         <div class="vent-margin-l-8">{{
                           selectData[state.dataIndex.replace('Fan', 'Fan2')] == undefined
-                          ? '无状态'
-                          : selectData[state.dataIndex.replace('Fan', 'Fan2')] == '0'
-                          ? '正常'
-                          : '异常'
-                          }}</div>
+                            ? '无状态'
+                            : selectData[state.dataIndex.replace('Fan', 'Fan2')] == '0'
+                            ? '正常'
+                            : '异常'
+                        }}</div>
                       </template>
                     </div>
                   </div>
                   <div v-else>
                     <div class="signal-item">
-                      <div class="signal-round vent-margin-l-8" :class="{
+                      <div
+                        class="signal-round vent-margin-l-8"
+                        :class="{
                           'signal-round-run': selectData[state.dataIndex] == '0',
                           'signal-round-warning': selectData[state.dataIndex] !== undefined && selectData[state.dataIndex] == '1',
                           'signal-round-gry': selectData[state.dataIndex] === undefined,
-                        }"></div>
+                        }"
+                      ></div>
                       <div class="vent-margin-l-8">{{
-                        selectData[state.dataIndex] === undefined ? '无状态' : selectData[state.dataIndex] == '0' ? '正常' :
-                        '异常'
-                        }}</div>
+                        selectData[state.dataIndex] === undefined ? '无状态' : selectData[state.dataIndex] == '0' ? '正常' : '异常'
+                      }}</div>
                     </div>
                   </div>
                 </div>
@@ -233,17 +257,27 @@
       </div>
     </div>
     <div class="bottom-tabs-box" @mousedown="setDivHeight($event, 250, scroll, 170)">
+      <!-- 保德视频及系统外界,保德特有 -->
+      <div v-if="sysOrgCode === 'sdmtjtbdmk'" class="bd-control">
+        <div class="button-box" @click="goOutLink('1')">视频查看</div>
+        <div class="button-box" @click="goOutLink('2')">主风机故障智能诊断预警系统</div>
+      </div>
       <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 120}px`">
         <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
           <a-tab-pane key="1" tab="实时监测">
-            <GroupMonitorTable ref="MonitorDataTable" :dataSource="dataSource" columnsType="fanmain_monitor"
-              @selectRow="getSelectRow" :scroll="{ y: scroll.y - (headElHeight - 56) }" :is-action="true">
+            <GroupMonitorTable
+              ref="MonitorDataTable"
+              :dataSource="dataSource"
+              columnsType="fanmain_monitor"
+              @selectRow="getSelectRow"
+              :scroll="{ y: scroll.y - (headElHeight - 56) }"
+              :is-action="true"
+            >
               <template #bodyCell="{ column, record }">
                 <!-- <a-tag :color="record.netStatus == '0' ? '#f00' : 'green'">{{ record.netStatus == '1' ? '报警' : '正常' }}</a-tag> -->
               </template>
               <template #action="{ record }">
-                <a v-if="globalConfig?.showReport" class="table-action-link"
-                  @click="deviceEdit($event, 'reportInfo', record)">报表录入</a>
+                <a v-if="globalConfig?.showReport" class="table-action-link" @click="deviceEdit($event, 'reportInfo', record)">报表录入</a>
                 <a class="table-action-link" @click="deviceEdit($event, 'deviceInfo', record)">设备编辑</a>
               </template>
             </GroupMonitorTable>
@@ -259,11 +293,10 @@
                 <template #filterCell="{ column, record }">
                   <a-tag v-if="column.dataIndex === 'warnFlag'" :color="record.warnFlag == '0' ? 'green' : 'red'">{{
                     record.warnFlag == '0' ? '正常' : '报警'
-                    }}</a-tag>
-                  <a-tag v-if="column.dataIndex === 'netStatus'"
-                    :color="record.netStatus == '0' ? 'default' : 'green'">{{
+                  }}</a-tag>
+                  <a-tag v-if="column.dataIndex === 'netStatus'" :color="record.netStatus == '0' ? 'default' : 'green'">{{
                     record.netStatus == '0' ? '断开' : '连接'
-                    }}</a-tag>
+                  }}</a-tag>
                   <div v-if="record.nwindownum == 1 && column.dataIndex === 'rearArea'">/</div>
                 </template>
               </HistoryTable>
@@ -271,29 +304,41 @@
           </a-tab-pane>
           <a-tab-pane key="4" tab="报警历史">
             <div class="tab-item" v-if="activeKey === '4'">
-              <AlarmHistoryTable columns-type="alarm" :device-type="deviceType" designScope="alarm-history"
-                :scroll="scroll" />
+              <AlarmHistoryTable columns-type="alarm" :device-type="deviceType" designScope="alarm-history" :scroll="scroll" />
             </div>
           </a-tab-pane>
           <a-tab-pane key="5" tab="操作历史">
             <div v-if="hasPermission('show:handlerHistory') && activeKey == '5'" class="tab-item">
-              <HandlerHistoryTable columns-type="operator_history" device-type="fanmain" :device-list-api="baseList"
-                designScope="alarm-history" :scroll="scroll" />
+              <HandlerHistoryTable
+                columns-type="operator_history"
+                device-type="fanmain"
+                :device-list-api="baseList"
+                designScope="alarm-history"
+                :scroll="scroll"
+              />
             </div>
           </a-tab-pane>
         </a-tabs>
       </dv-border-box8>
     </div>
   </div>
-  <div style="z-index: -1; position: absolute; top: -100px; right: 10px; width: 300px; height: 280px; margin: auto"
-    class="palyer">
+  <div style="z-index: -1; position: absolute; top: -100px; right: 10px; width: 300px; height: 280px; margin: auto" class="palyer">
     <LivePlayer id="main-player1" ref="player1" :videoUrl="flvURL1()" muted loop 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">
+  <div
+    ref="playerRef"
+    style="z-index: 999; position: absolute; top: 100px; right: 15px; width: 100%; height: 100%; margin: auto; pointer-events: none"
+  >
   </div>
-  <a-modal v-model:visible="modalIsShow" :centered="true" :maskClosable="false" :title="modalTitle" @ok="handleOk"
-    @cancel="handleCancel" :destroyOnClose="true">
+  <a-modal
+    v-model:visible="modalIsShow"
+    :centered="true"
+    :maskClosable="false"
+    :title="modalTitle"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    :destroyOnClose="true"
+  >
     <template #footer v-if="modalType == 'fbm'">
       <a-button key="back" @click="handleCancel">取消</a-button>
     </template>
@@ -348,24 +393,20 @@
         <div class="vent-margin-t-20">
           <span class="data-title vent-margin-r-8">反风锁紧状态:</span>
           <template
-            v-if="selectData['Lock1Open'] == 1 && selectData['Lock1Close'] == 0 && selectData['Lock2Open'] == 1 && selectData['Lock2Close'] == 0">
-            <span class="data-title vent-margin-l-10"><span
-                class="signal-round signal-round-blue vent-margin-r-8"></span>锁1开到位</span>
-            <span class="data-title vent-margin-l-20"><span
-                class="signal-round signal-round-blue vent-margin-r-8"></span>锁2开到位</span>
+            v-if="selectData['Lock1Open'] == 1 && selectData['Lock1Close'] == 0 && selectData['Lock2Open'] == 1 && selectData['Lock2Close'] == 0"
+          >
+            <span class="data-title vent-margin-l-10"><span class="signal-round signal-round-blue vent-margin-r-8"></span>锁1开到位</span>
+            <span class="data-title vent-margin-l-20"><span class="signal-round signal-round-blue vent-margin-r-8"></span>锁2开到位</span>
           </template>
           <template
-            v-else-if="selectData['Lock1Open'] == 0 && selectData['Lock1Close'] == 1 && selectData['Lock2Open'] == 0 && selectData['  '] == 1">
-            <span class="data-title vent-margin-l-10"><span
-                class="signal-round signal-round-gry vent-margin-r-8"></span>锁1关到位</span>
-            <span class="data-title vent-margin-l-20"><span
-                class="signal-round signal-round-gry vent-margin-r-8"></span>锁2关到位</span>
+            v-else-if="selectData['Lock1Open'] == 0 && selectData['Lock1Close'] == 1 && selectData['Lock2Open'] == 0 && selectData['  '] == 1"
+          >
+            <span class="data-title vent-margin-l-10"><span class="signal-round signal-round-gry vent-margin-r-8"></span>锁1关到位</span>
+            <span class="data-title vent-margin-l-20"><span class="signal-round signal-round-gry vent-margin-r-8"></span>锁2关到位</span>
           </template>
           <template v-else>
-            <span class="data-title vent-margin-l-10"><span
-                class="signal-round signal-round-gry vent-margin-r-8"></span>锁1-</span>
-            <span class="data-title vent-margin-l-20"><span
-                class="signal-round signal-round-gry vent-margin-r-8"></span>锁2-</span>
+            <span class="data-title vent-margin-l-10"><span class="signal-round signal-round-gry vent-margin-r-8"></span>锁1-</span>
+            <span class="data-title vent-margin-l-20"><span class="signal-round signal-round-gry vent-margin-r-8"></span>锁2-</span>
           </template>
         </div>
         <div class="vent-flex-row btn-box vent-margin-t-20">
@@ -375,8 +416,9 @@
             <span class="btn btn2" @click="handleOk('closeLock')">关锁</span>
           </div>
           <!-- <a-switch v-if="fbmControlData.CtrlLockOpen !== undefined" style="margin-left: 5px;" v-model:checked="fbmControlData.CtrlLockOpen" checked-children="开锁" un-checked-children="关锁" /> -->
-          <div v-else class="vent-margin-l-10"><span
-              class="signal-round signal-round-warning vent-margin-r-8"></span>反风锁紧正在运行 或 数据异常</div>
+          <div v-else class="vent-margin-l-10"
+            ><span class="signal-round signal-round-warning vent-margin-r-8"></span>反风锁紧正在运行 或 数据异常</div
+          >
         </div>
         <div class="vent-flex-row btn-box vent-margin-t-20">
           <span class="data-title vent-margin-r-8">防爆门扇控制:</span>
@@ -385,8 +427,7 @@
             <span class="btn btn2" @click="handleOk('closeGate')">关门</span>
           </div>
           <!-- <a-switch v-if="fbmControlData.CtrlExplosionVentOpen !== undefined" style="margin-left: 5px;" v-model:checked="fbmControlData.CtrlExplosionVentOpen" checked-children="开门" un-checked-children="关门" /> -->
-          <div class="vent-margin-l-10" v-else><span
-              class="signal-round signal-round-warning vent-margin-r-8"></span>防爆门正在运行 或 数据异常</div>
+          <div class="vent-margin-l-10" v-else><span class="signal-round signal-round-warning vent-margin-r-8"></span>防爆门正在运行 或 数据异常</div>
         </div>
       </div>
     </div>
@@ -422,6 +463,7 @@
   import type { BasicColumn } from '/@/components/Table/src/types/table';
   import { useCamera } from '/@/hooks/system/useCamera';
   import DeviceBaseInfo from '../comment/components/DeviceBaseInfo.vue';
+  import { useGlobSetting } from '/@/hooks/setting';
   import { usePermission } from '/@/hooks/web/usePermission';
   const { hasPermission } = usePermission();
 
@@ -431,6 +473,7 @@
   const [registerModalDeviceEdit, { openModal: openModalDeviceEdit }] = useModal();
   const { currentRoute } = useRouter();
   const { createMessage, createConfirm } = useMessage();
+  const { sysOrgCode } = useGlobSetting();
   const scroll = reactive({
     y: 180,
   });
@@ -978,9 +1021,7 @@
           createMessage.error(err.message);
         });
       }
-    }
-
-    
+    };
   };
 
   // 取消
@@ -1006,6 +1047,16 @@
     });
   }
 
+  // 保德特有
+  function goOutLink(type: string) {
+    if (type === '1') {
+      // 视频
+      window.open('http://10.248.210.154/', '_blank');
+    } else {
+      window.open('http://10.248.210.154/', '_blank');
+    }
+  }
+
   onBeforeMount(() => {
     // document.body.addEventListener('mousedown', addPlayVideo, true);
     getDeviceBaseList();
@@ -1327,6 +1378,13 @@
     .tabs-box {
       position: relative !important;
     }
+    .bd-control {
+      position: absolute;
+      z-index: 9999;
+      display: flex;
+      right: 0px;
+      top: 10px;
+    }
   }
 
   .threejs-Object-CSS {

+ 1 - 1
src/views/vent/monitorManager/sensorMonitor/index.vue

@@ -87,7 +87,7 @@
         </a-tab-pane>
       </a-tabs>
       <div class="title-text">
-        {{ selectData.strname }}
+        {{ selectData.strinstallpos || selectData.strname }}
       </div>
     </a-spin>
   </div>

+ 23 - 19
src/views/vent/monitorManager/tunFaceMonitor/index.vue

@@ -110,25 +110,27 @@ function deviceChange(index) {
 // 查询关联设备列表
 async function getDeviceList() {
   const res = await systemList({ devicetype: 'sys', systemID: optionValue.value });
-  const result = res.msgTxt;
-  const deviceArr = <DeviceType[]>[]
-  result.forEach(item => {
-    const data = item['datalist'].filter((data: any) => {
-      const readData = data.readData;
-      return Object.assign(data, readData);
+  if(res && res.msgTxt && res.msgTxt.length){
+    const result = res.msgTxt;
+    const deviceArr = <DeviceType[]>[]
+    result.forEach(item => {
+      const data = item['datalist'].filter((data: any) => {
+        const readData = data.readData;
+        return Object.assign(data, readData);
+      })
+      if (item.type != 'sys') {
+        deviceArr.unshift({ deviceType: item.type, deviceName: item['typeName'] ? item['typeName'] : item['datalist'][0]['typeName'], datalist: data })
+      }
     })
-    if (item.type != 'sys') {
-      deviceArr.unshift({ deviceType: item.type, deviceName: item['typeName'] ? item['typeName'] : item['datalist'][0]['typeName'], datalist: data })
-    }
-  })
-  deviceList.value = deviceArr
-  deviceActive.value = deviceArr[0].deviceType
-  deviceChange(0)
+    deviceList.value = deviceArr
+    deviceActive.value = deviceArr[0].deviceType
+    deviceChange(0)
+  }
 };
 
 async function getSysDataSource() {
   const res = await getTableList({ strtype: 'sys_surface_juejin', pagetype: 'normal' });
-  if (!options.value) {
+  if (!options.value && res) {
     // 初始时选择第一条数据
     options.value = res.records || [];
     if (!optionValue.value) {
@@ -165,16 +167,18 @@ onBeforeMount(() => {
 
 });
 
-onMounted(async() => {
-  if (currentRoute.value && currentRoute.value['query'] && currentRoute.value['query']['id']) optionValue.value = currentRoute.value['query']['id']
-  await getSysDataSource()
-  await getDeviceList()
-  
+onMounted(async() => { 
   loading.value = true;
   mountedThree().then(async () => {
     setModelType('tunFace')
     loading.value = false;
   });
+  if (currentRoute.value && currentRoute.value['query'] && currentRoute.value['query']['id']) {
+    optionValue.value = currentRoute.value['query']['id']
+  }
+  await getSysDataSource()
+  await getDeviceList()
+
 });
 
 onUnmounted(() => {

+ 1 - 1
src/views/vent/monitorManager/windowMonitor/index.vue

@@ -53,7 +53,7 @@
       </div>
     </div>
     <div class="title-text">
-      {{ selectData.strname }}
+      {{ selectData.strinstallpos || selectData.strname }}
     </div>
     <div class="bottom-tabs-box" @mousedown="setDivHeight($event, 350, scroll)">
       <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 120}px`">

+ 1 - 1
src/views/vent/monitorManager/windowMonitorBet/index.vue

@@ -54,7 +54,7 @@
       </div>
     </div>
     <div class="title-text">
-      {{ selectData.strname }}
+      {{ selectData.strinstallpos || selectData.strname }}
     </div>
     <div class="bottom-tabs-box" @mousedown="setDivHeight($event, 350, scroll)">
       <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 120}px`">

+ 1 - 1
src/views/vent/monitorManager/windrectMonitor/index.vue

@@ -41,7 +41,7 @@
       </div> -->
     </div>
     <div class="title-text">
-      {{ selectData.supplyAirAddr || selectData.strname }}
+      {{ selectData.supplyAirAddr || selectData.strinstallpos || selectData.strname }}
     </div>
     <div class="bottom-tabs-box" @mousedown="setDivHeight($event, 350, scroll)">
       <dv-border-box8 :dur="5" :style="`padding: 5px; height: ${scroll.y + 120}px`">