Kaynağa Gözat

Merge branch 'master' of http://39.97.59.228:8013/hrx/hsq-pro

lxh 2 ay önce
ebeveyn
işleme
ae2c58c331

+ 1 - 1
.env.production

@@ -17,7 +17,7 @@ VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
 #VITE_PROXY = [["/jeecgsystem","http://10.248.223.116:9999"],["/upload","http://localhost:3300/upload"]]
 #VITE_PROXY = [["/jeecgsystem","http://10.248.210.152:9999"],["/upload","http://10.248.210.152:9999/upload"]]
 #VITE_PROXY = [["/jeecgsystem","http://182.92.126.35:9999"],["/upload","http://182.92.126.35:9999/upload"]]
-VITE_PROXY = [["/sw","http://10.246.167.205:6008"],["/modelreq","http://172.16.41.171:9999"],["/upload","http://172.16.41.171:9999/upload"],["/documents", "http://182.92.126.35:9050"],["/dataCenter", "http://39.97.59.228:10999"]]
+VITE_PROXY = [["/sw","http://10.246.167.205:6008"],["/modelreq","http://182.92.126.35:9999"],["/upload","http://172.16.41.171:9999/upload"],["/documents", "http://182.92.126.35:9050"],["/dataCenter", "http://39.97.59.228:10999"]]
 #VITE_PROXY = [["/jeecgsystem","http://172.16.41.171:9999"],["/upload","http://172.16.41.171:9999/upload"]]
 #VITE_PROXY = [["/jeecgsystem","http://10.120.120.163:9999"],["/upload","http://10.120.120.163:9999/upload"]]
 #VITE_PROXY = [["/jeecgsystem","http://192.168.1.4:9999"],["/upload","http://localhost:3300/upload"]]

+ 45 - 20
src/layouts/default/header/components/weatherBroadcast.vue

@@ -5,10 +5,10 @@
     <a-badge :count="10">
       <a href="#" class="head-example"></a>
     </a-badge> -->
-      <div style="display: flex; flex-direction: row;align-items: center;" class="btn-header">
-        <img :src="parseWeatherData(weatherObj.text)" class="weather-icon" />
-        <span class="unit">{{ weatherObj.pressure }}&nbsp;hPa</span>
-        <FileSearchOutlined style="font-size: 20px; color: #fff;" />
+      <div style="display: flex; flex-direction: row; align-items: center" class="btn-header">
+        <img :src="parseWeatherData(weatherObj?.text)" class="weather-icon" />
+        <span class="unit">{{ weatherObj?.pressure }}&nbsp;hPa</span>
+        <FileSearchOutlined style="font-size: 20px; color: #fff" />
       </div>
     </div>
     <div v-if="isShowWeatherBroad" class="broadcast" ref="VoiceBroadcastRef" id="VoiceBroadcast">
@@ -17,21 +17,36 @@
       </div>
       <div class="broadcast-context">
         <div class="context-tab">
-          <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 0 }" @click="toSelectList(0)">
-            温度</div>
-          <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 1 }" @click="toSelectList(1)">
-            气压</div>
-          <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 2 }" @click="toSelectList(2)">
-            风力</div>
+          <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 0 }" @click="toSelectList(0)"> 温度</div>
+          <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 1 }" @click="toSelectList(1)"> 气压</div>
+          <div class="context-tab-item" :class="{ 'context-tab-item-active': activeKey == 2 }" @click="toSelectList(2)"> 风力</div>
         </div>
         <div class="context-box">
           <div class="echarts-box">
-            <BarAndLine v-if="activeKey == 0" xAxisPropType="fxTime" height="240px" :dataSource="monitorData"
-              :chartsColumns="ChartsColumnsWD" :option="Option" />
-            <BarAndLine v-if="activeKey == 1" xAxisPropType="fxTime" height="240px" :dataSource="monitorData"
-              :chartsColumns="ChartsColumnsQY" :option="Option" />
-            <BarAndLine v-if="activeKey == 2" xAxisPropType="fxTime" height="240px" :dataSource="monitorData"
-              :chartsColumns="ChartsColumnsFL" :option="Option" />
+            <BarAndLine
+              v-if="activeKey == 0"
+              xAxisPropType="fxTime"
+              height="240px"
+              :dataSource="monitorData"
+              :chartsColumns="ChartsColumnsWD"
+              :option="Option"
+            />
+            <BarAndLine
+              v-if="activeKey == 1"
+              xAxisPropType="fxTime"
+              height="240px"
+              :dataSource="monitorData"
+              :chartsColumns="ChartsColumnsQY"
+              :option="Option"
+            />
+            <BarAndLine
+              v-if="activeKey == 2"
+              xAxisPropType="fxTime"
+              height="240px"
+              :dataSource="monitorData"
+              :chartsColumns="ChartsColumnsFL"
+              :option="Option"
+            />
           </div>
         </div>
       </div>
@@ -155,10 +170,20 @@ export default defineComponent({
       activeKey.value = key;
     }
     async function getWeatherInfo() {
-      const res = await getWeather();
-
-      weatherObj.value = JSON.parse(res.weatherDataNow);
-      monitorData.value = JSON.parse(res.weatherData);
+      try {
+        const res = await getWeather();
+        if (res?.weatherDataNow) {
+          // 判空
+          const parsed = JSON.parse(res.weatherDataNow);
+          if (parsed) weatherObj.value = parsed;
+        }
+        if (res?.weatherData) {
+          const parsed = JSON.parse(res.weatherData);
+          if (parsed) monitorData.value = parsed;
+        }
+      } catch (e) {
+        console.error('获取天气信息失败:', e);
+      }
     }
     onMounted(() => {
       nextTick(async () => {

+ 23 - 0
src/store/modules/linkRule.ts

@@ -0,0 +1,23 @@
+import { defineStore } from 'pinia';
+
+export const useLinkRuleStore = defineStore({
+  id: 'link-rule',
+  state: () => {
+    return {
+      selectedRow: null as any | null,
+    };
+  },
+  getters: {
+    getSelectedRow(): any | null {
+      return this.selectedRow;
+    },
+  },
+  actions: {
+    setSelectedRow(row: any | null) {
+      this.selectedRow = row;
+    },
+    clearSelectedRow() {
+      this.selectedRow = null;
+    },
+  },
+});

+ 119 - 0
src/views/vent/deviceManager/comment/warningTabel/RuleTableModal.vue

@@ -0,0 +1,119 @@
+<template>
+  <BasicModal @register="register" :title="title" :width="800" :min-height="400" v-bind="$attrs" @ok="onSubmit">
+    <BasicForm @register="registerForm">
+      <template #monitor="{ model, field }">
+        <div class="vent-flex-row-between">
+          <Select ref="selectRef" disabled v-model:value="pointData" :options="option" style="width: calc(100% - 65px)" />
+          <a-button class="vent-margin-b-5" type="primary" @click="selectPoint(model['strtype'])" style="position: absolute; right: 0; top: 1px"
+            >选择</a-button
+          >
+        </div>
+      </template>
+    </BasicForm>
+  </BasicModal>
+  <DevicePointTable @register="registerModal" :data-source="devicePointList" :selection-row-keys="pointData" @reload="setPoint" />
+</template>
+<script lang="ts" setup>
+import { onMounted, ref, defineEmits, unref, nextTick } from 'vue';
+import { BasicForm, useForm } from '/@/components/Form/index';
+import { BasicModal, useModalInner, useModal } from '/@/components/Modal';
+import type { FormSchema } from '/@/components/Form/src/types/form';
+import { Select, message } from 'ant-design-vue';
+import DevicePointTable from './DevicePointTable.vue';
+import { workFacePointList } from './warning.api';
+
+const props = defineProps({
+  formSchemas: {
+    type: Array as PropType<FormSchema[]>,
+    default: () => [],
+  },
+  deviceId: { type: String },
+  monitorType: {
+    type: String,
+    default: '2',
+  },
+});
+const emit = defineEmits(['add', 'update', 'register', 'success']);
+const option = ref<any[]>([]);
+const devicePointList = ref<any[]>([]);
+const pointData = ref<String[]>([]);
+const title = ref('');
+const isUpdate = ref(false);
+// 注册 form
+const [registerForm, { resetFields, setFieldsValue, validate, getFieldsValue }] = useForm({
+  schemas: props.formSchemas,
+  showActionButtonGroup: false,
+});
+
+// 注册 modal
+const [register, { setModalProps }] = useModalInner(async (data) => {
+  isUpdate.value = unref(data.isUpdate);
+  title.value = unref(data.title);
+  await resetFields();
+  if (data.isUpdate) {
+    await setFieldsValue({ ...data.record });
+    pointData.value = [data.record['monitorId']];
+  } else if (data.record) {
+    // 新增
+    await setFieldsValue({ relId: data.record['relId'] || data.record['id'], monitorId: '' });
+  }
+});
+
+const [registerModal, { openModal }] = useModal();
+
+async function getDevicePointList(strtype) {
+  try {
+    const result = await workFacePointList({ deviceType: strtype, valueTypes: '2,3,9,202,203,209' });
+    devicePointList.value = result;
+  } catch (error) {
+    devicePointList.value = [];
+  }
+}
+
+async function onSubmit() {
+  try {
+    const data = await getFieldsValue();
+    await setFieldsValue({ ...data, monitorId: pointData.value[0] });
+    const values = await validate();
+    setModalProps({ confirmLoading: true });
+    // 提交表单
+    if (!isUpdate.value) {
+      emit('add', 'add', values);
+    } else {
+      emit('update', 'update', values);
+      emit('success');
+    }
+    // //关闭弹窗
+    // closeModal();
+    // //刷新列表
+    // reload()
+  } finally {
+    setModalProps({ confirmLoading: false });
+  }
+}
+
+async function selectPoint(strtype) {
+  if (strtype) {
+    await getDevicePointList(strtype);
+    openModal();
+  } else {
+    message.info('请先选择设备!');
+  }
+}
+
+function setPoint(value) {
+  const data = value[0];
+  option.value = [
+    {
+      value: data.id,
+      label: data.valuename,
+    },
+  ];
+  nextTick(() => {
+    pointData.value = [data.id];
+  });
+}
+
+onMounted(async () => {});
+</script>
+<style scoped lang="less"></style>

+ 5 - 2
src/views/vent/home/configurable/components/ModuleCommonHsq.vue

@@ -16,6 +16,7 @@
             :moduleData="moduleData"
             :data="selectedData"
             :chartData="chartData"
+            @table-refresh="refreshTableData"
           />
         </slot>
       </template>
@@ -46,8 +47,10 @@ const props = defineProps<{
   visible: boolean;
   chartData?: any;
 }>();
-defineEmits(['close', 'click']);
-
+const emit = defineEmits(['close', 'click', 'table-refresh']);
+const refreshTableData = () => {
+  emit('table-refresh');
+};
 const { header } = props.moduleData;
 const selectedData = ref();
 

+ 214 - 32
src/views/vent/home/configurable/components/content.vue

@@ -4,40 +4,75 @@
   <div class="content">
     <!-- 背景 -->
     <img v-if="background.show && background.type === 'image'" class="content__background" :src="background.link" />
-    <video v-if="background.show && background.type === 'video' && background.isBoard" class="content__background"
-      width="100%" autoplay loop muted disablepictureinpicture playsinline>
+    <video
+      v-if="background.show && background.type === 'video' && background.isBoard"
+      class="content__background"
+      width="100%"
+      autoplay
+      loop
+      muted
+      disablepictureinpicture
+      playsinline
+    >
       <source :src="background.link" />
       Not Supportted Link Or Browser
     </video>
-    <video v-if="background.show && background.type === 'video' && !background.isBoard" class="content__background_1"
-      width="100%" autoplay loop muted disablepictureinpicture playsinline>
+    <video
+      v-if="background.show && background.type === 'video' && !background.isBoard"
+      class="content__background_1"
+      width="100%"
+      autoplay
+      loop
+      muted
+      disablepictureinpicture
+      playsinline
+    >
       <source :src="background.link" />
       Not Supportted Link Or Browser
     </video>
     <div class="flex w-full h-full" :style="{ flexDirection: layout.direction }">
-      <div v-for="config in layoutConfig" :key="config.name"
-        :style="{ flexBasis: config.basis, overflow: config.overflow ? 'auto' : 'hidden' }">
+      <div v-for="config in layoutConfig" :key="config.name" :style="{ flexBasis: config.basis, overflow: config.overflow ? 'auto' : 'hidden' }">
         <!-- 告示板部分 -->
         <template v-if="config.name === 'board'">
-          <div v-if="config.pageType == 'vent_New'" style="padding-top: 11%"
-            class="content__module content__module1 flex flex-justify-around flex-items-center flex-wrap">
-            <MiniBoard v-for="item in config.items" :key="item.prop" :label="item.label" :value="item.value"
-              :type="config.type" :layout="config.layout" />
+          <div
+            v-if="config.pageType == 'vent_New'"
+            style="padding-top: 11%"
+            class="content__module content__module1 flex flex-justify-around flex-items-center flex-wrap"
+          >
+            <MiniBoard
+              v-for="item in config.items"
+              :key="item.prop"
+              :label="item.label"
+              :value="item.value"
+              :type="config.type"
+              :layout="config.layout"
+            />
           </div>
-          <div v-else-if="config.pageType == 'New_fire'"
-            class="content__module flex flex-justify-around flex-items-center flex-wrap">
-            <MiniBoardNew v-for="item in config.items" :key="item.prop" :label="item.label" :value="item.value"
-              :type="config.type" :layout="config.layout" />
+          <div v-else-if="config.pageType == 'New_fire'" class="content__module flex flex-justify-around flex-items-center flex-wrap">
+            <MiniBoardNew
+              v-for="item in config.items"
+              :key="item.prop"
+              :label="item.label"
+              :value="item.value"
+              :type="config.type"
+              :layout="config.layout"
+            />
           </div>
           <div v-else class="content__module flex flex-justify-around flex-items-center flex-wrap">
-            <MiniBoard v-for="item in config.items" :key="item.prop" :label="item.label" :value="item.value"
-              :unit="item.unit" :type="config.type" :layout="config.layout" />
+            <MiniBoard
+              v-for="item in config.items"
+              :key="item.prop"
+              :label="item.label"
+              :value="item.value"
+              :unit="item.unit"
+              :type="config.type"
+              :layout="config.layout"
+            />
           </div>
         </template>
         <!-- 图表部分,这部分通常需要填充,有告示板、Header等内容需要填充父级 -->
         <template v-if="config.name === 'chart'">
-          <CustomChart v-if="config.pageType == 'New_dust'" class="content__module_dust" :chart-config="config.config"
-            :chart-data="config.data" />
+          <CustomChart v-if="config.pageType == 'New_dust'" class="content__module_dust" :chart-config="config.config" :chart-data="config.data" />
           <CustomChart v-else class="content__module" :chart-config="config.config" :chart-data="config.data" />
         </template>
         <!-- 通常列表部分 -->
@@ -61,8 +96,7 @@
         </template>
         <!-- 复杂列表部分 -->
         <template v-if="config.name === 'gallery_list'">
-          <GalleryList class="content__module" :type="config.type" :list-config="config.items"
-            :gallery-config="config.galleryItems" />
+          <GalleryList class="content__module" :type="config.type" :list-config="config.items" :gallery-config="config.galleryItems" />
         </template>
         <!-- 复杂列表部分 -->
         <template v-if="config.name === 'complex_list'">
@@ -70,41 +104,149 @@
         </template>
         <!-- 表格部分,这部分通常是占一整个模块的 -->
         <template v-if="config.name === 'table'">
-          <CustomTable class="content__module text-center overflow-auto" :type="config.type" :columns="config.columns"
-            :auto-scroll="config.autoScroll" :data="config.data" />
+          <CustomTable
+            class="content__module text-center overflow-auto"
+            :type="config.type"
+            :columns="config.columns"
+            :auto-scroll="config.autoScroll"
+            :data="config.data"
+          />
         </template>
         <template v-if="config.name === 'tabs'">
-          <CustomTabs class="content__module" :type="config.type" :tab-config="config.items"
-            :overflow="config.overflow" />
+          <CustomTabs class="content__module" :type="config.type" :tab-config="config.items" :overflow="config.overflow" />
         </template>
         <template v-if="config.name === 'blast_delta'">
-          <BlastDelta v-if="config.pageType === 'New_fire'" class="content__moduleFire" :pos-monitor="config.data"
-            :canvasSize="{ width: 250, height: 200 }" />
-          <BlastDelta v-else class="content__module" :pos-monitor="config.data"
-            :canvasSize="{ width: 250, height: 200 }" />
+          <BlastDelta
+            v-if="config.pageType === 'New_fire'"
+            class="content__moduleFire"
+            :pos-monitor="config.data"
+            :canvasSize="{ width: 250, height: 200 }"
+          />
+          <BlastDelta v-else class="content__module" :pos-monitor="config.data" :canvasSize="{ width: 250, height: 200 }" />
         </template>
         <template v-if="config.name === 'qh_curve'">
-          <QHCurve class="content__module" :mainfan="config.data" :fan1-prop="config.config.fan1Prop"
-            :fan2-prop="config.config.fan2Prop" />
+          <QHCurve class="content__module" :mainfan="config.data" :fan1-prop="config.config.fan1Prop" :fan2-prop="config.config.fan2Prop" />
         </template>
         <template v-if="config.name === 'ai_chat'">
           <AIChat class="content__module" />
         </template>
         <template v-if="config.name === 'device_alarm'">
           <DeviceAlarm class="content__module" :devicedata="config.data" :config="config.config" />
+<<<<<<< HEAD
         </template>  
+=======
+        </template>
+        <!-- lxh -->
+        <template v-if="config.name === 'select_cs'">
+          <SelectCs :devicedata="config.data" :config="config.config" />
+        </template>
+        <template v-if="config.name === 'measure_detail'">
+          <MeasureDetail
+            class="content__module"
+            :show-title="false"
+            :composite-data="config.data"
+            :topconfig="config.config.topconfig"
+            :btnconfig="config.config.btnconfig"
+          />
+        </template>
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c
         <template v-if="config.name === 'partition'">
           <Partition class="content__module" :type="config.type" :label="config.label" :icon="config.icon" />
         </template>
         <template v-if="config.name === 'selector_dual_chart'">
           <SelectorDualChart :data="config.data" :moduleData="props.moduleData" :config="config" />
         </template>
+<<<<<<< HEAD
+=======
+        <template v-if="config.name === 'radio_label'">
+          <RadioLabel class="content__module" :type="config.config.type" :config="config.config" />
+        </template>
+        <template v-if="config.name === 'button_list'">
+          <ButtonList class="content__module" :type="config.config.type" :config="config.config" :buttonList="config.config.buttonList" />
+        </template>
+        <template v-if="config.name === 'card_list'">
+          <cardList class="content__module" :cardData="config.data" />
+        </template>
+        <template v-else-if="config.name === 'generalist'">
+          <generalList class="content__module" :generalData="config.data" />
+        </template>
+
+        <template v-else-if="config.name === 'jk-video'">
+          <cameraModal class="content__module" :deviceId="config.data" />
+        </template>
+        <template v-if="config.name === 'gallery_new'">
+          <CustomGalleryNew class="content__module" :type="config.config.type" :option="config.config.items" :galleryData="config.data" />
+        </template>
+        <template v-if="config.name === 'card_new'">
+          <ImageCardNew :option="config.config.items" :cardData="config.data"></ImageCardNew>
+        </template>
+        <template v-if="config.name === 'btn_new'">
+          <BtnListNew :option="config.config.items" :data="config.data"></BtnListNew>
+        </template>
+        <template v-if="config.name === 'oerate_new'">
+          <OperateNew :option="config.config.items" :btnOption="config.config.option" :data="config.data"></OperateNew>
+        </template>
+        <template v-if="config.name === 'long_list'">
+          <LongList></LongList>
+        </template>
+        <template v-if="config.name === 'long_list1'">
+          <LongList1></LongList1>
+        </template>
+        <template v-if="config.name === 'long_list2'">
+          <LongList2></LongList2>
+        </template>
+        <template v-if="config.name === 'search_table'">
+          <SearchTable></SearchTable>
+        </template>
+        <template v-if="config.name === 'mixed_warn'">
+          <MixedWarn></MixedWarn>
+        </template>
+        <template v-if="config.name === 'rule_list'">
+          <RuleList></RuleList>
+        </template>
+        <template v-if="config.name === 'echart_bar_new'">
+          <EchartBarNew></EchartBarNew>
+        </template>
+        <template v-if="config.name === 'user_list'">
+          <UserList></UserList>
+        </template>
+        <template v-if="config.name === 'log_audit'">
+          <LogAudit></LogAudit>
+        </template>
+        <template v-if="config.name === 'user_edit'">
+          <UserEdit></UserEdit>
+        </template>
+        <template v-if="config.name === 'permission_info'">
+          <PermissionManager></PermissionManager>
+        </template>
+        <template v-if="config.name === 'permission_set'">
+          <PermissionSet></PermissionSet>
+        </template>
+        <template v-if="config.name === 'statistic_day'">
+          <StatisticDay></StatisticDay>
+        </template>
+        <template v-if="config.name === 'system_view'">
+          <SystemView></SystemView>
+        </template>
+        <template v-if="config.name === 'rule_table'">
+          <RuleTable
+            :config="config.config"
+            :data="config.data"
+            :selected-row="selectRuleRow"
+            @row-change="onRowClick"
+            @table-refresh="handleTableRefresh"
+          ></RuleTable>
+        </template>
+        <template v-if="config.name === 'link_log'"> <LinkLog></LinkLog> </template>
+        <template v-if="config.name === 'rule_num'"> <RuleNum></RuleNum> </template>
+        <template v-if="config.name === 'link_edit'"> <LinkRuleEdit :selected-row="selectRuleRow"> </LinkRuleEdit></template>
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c
       </div>
     </div>
   </div>
 </template>
 <script lang="ts" setup>
-import { computed, reactive, watch } from 'vue';
+import { computed, reactive, watch, ref } from 'vue';
 import {
   CommonItem,
   Config,
@@ -133,6 +275,37 @@ import DeviceAlarm from './preset/DeviceAlarm.vue';
 import MiniBoardNew from './detail/MiniBoard-New.vue';
 import Partition from './preset/partition.vue';
 import SelectorDualChart from './preset/selectorDualChart.vue';
+<<<<<<< HEAD
+=======
+import RadioLabel from './preset/radioLabel.vue';
+import ButtonList from './preset/buttonList.vue';
+import cardList from './preset/cardList.vue';
+import generalList from './preset/generalList.vue';
+
+import cameraModal from './preset/cameraModal.vue';
+import CustomGalleryNew from './preset/CustomGalleryNew.vue';
+import ImageCardNew from './preset/ImageCardNew.vue';
+import BtnListNew from './preset/BtnListNew.vue';
+import OperateNew from './preset/OperateNew.vue';
+import LongList from './preset/LongList.vue';
+import LongList1 from './preset/LongList1.vue';
+import LongList2 from './preset/LongList2.vue';
+import SearchTable from './preset/SearchTable.vue';
+import MixedWarn from './preset/MixedWarn.vue';
+import RuleList from './preset/RuleList.vue';
+import EchartBarNew from './preset/EchartBarNew.vue';
+import UserList from './preset/UserList.vue';
+import LogAudit from './preset/LogAudit.vue';
+import UserEdit from './preset/UserEdit.vue';
+import PermissionManager from './preset/PermissionManager.vue';
+import PermissionSet from './preset/PermissionSet.vue';
+import StatisticDay from './preset/StatisticDay.vue';
+import SystemView from './preset/SystemView.vue';
+import RuleTable from './preset/ruleTable.vue';
+import LinkLog from './preset/linkLog.vue';
+import RuleNum from './preset/ruleNum.vue';
+import LinkRuleEdit from './preset/linkRuleEdit.vue';
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c
 // import FIreWarn from './preset/FIreWarn.vue';
 // import FIreControl from './preset/FIreControl.vue';
 
@@ -143,7 +316,16 @@ const props = defineProps<{
 }>();
 
 const { background, layout } = props.moduleData;
-
+// 存储当前选中行
+const selectRuleRow = ref<null | Record<string, any>>(null);
+const onRowClick = (singleRow) => {
+  selectRuleRow.value = singleRow;
+};
+const emit = defineEmits(['table-refresh']);
+// 接收 RuleTable 子组件刷新信号,向上抛给顶层父组件
+const handleTableRefresh = () => {
+  emit('table-refresh');
+};
 // 获取当原始配置带 items 项时的最终 items 配置
 function getItems(raw, items: CommonItem[]) {
   return items.map((i) => {

+ 76 - 0
src/views/vent/home/configurable/components/preset/deviceModal.vue

@@ -0,0 +1,76 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="registerModal"
+    :title="title"
+    width="1000px"
+    :showCancelBtn="false"
+    :showOkBtn="false"
+    :footer="null"
+    :destroyOnClose="true"
+    :mask-closable="false"
+    @cancel="closeModalFn"
+  >
+    <a-tabs v-if="props.showTab" v-model:activeKey="activeKey">
+      <a-tab-pane key="5" tab="配置预警设备" force-render>
+        <template v-if="activeKey == '5'">
+          <BackWindDeviceTable :deviceId="selectSysId" />
+        </template>
+      </a-tab-pane>
+
+      <a-tab-pane key="6" tab="配置控制设备" force-render>
+        <template v-if="activeKey == '6'">
+          <ManagerWarningTable :deviceId="selectSysId" />
+        </template>
+      </a-tab-pane>
+    </a-tabs>
+  </BasicModal>
+</template>
+<script lang="ts" setup>
+import { computed, unref, inject, reactive, ref } from 'vue';
+import { BasicModal, useModalInner } from '/@/components/Modal';
+import FormModal from '../../../../deviceManager/comment/FormModal.vue';
+import BackWindDeviceTable from '../../../../deviceManager/comment/warningTabel/index3.vue';
+import ManagerWarningTable from '../../../../deviceManager/comment/warningTabel/index1.vue';
+
+const props = defineProps({
+  showTab: { type: Boolean, required: true },
+  deviceType: { type: String, default: '' },
+  selectSysId: { type: String, default: '' },
+  selectSysAlarmId: { type: String, default: '' },
+});
+
+const emit = defineEmits(['saveOrUpdate', 'register', 'closeModal']);
+const isUpdate = inject('isUpdate');
+const deviceData = inject('formData') as any;
+const deviceType = inject('deviceType') as any;
+const record = reactive({});
+const activeKey = ref('5');
+
+const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
+  setModalProps({ confirmLoading: false });
+  for (const key in deviceData) delete deviceData[key];
+  Object.assign(deviceData, data.record);
+  activeKey.value = '5';
+});
+
+// 标题
+const title = '编辑';
+
+const closeModalFn = () => {
+  activeKey.value = '5';
+  closeModal();
+  emit('closeModal');
+};
+</script>
+<style scoped lang="less">
+::v-deep .suffix {
+  height: 32px;
+  line-height: 32px;
+  margin-left: 5px;
+  color: #fff;
+}
+::v-deep .j-box-bottom-button-float {
+  background: none !important;
+}
+</style>

+ 154 - 4
src/views/vent/home/configurable/components/preset/linkLog.vue

@@ -6,7 +6,7 @@
     <div class="search-area">
       <div class="title-top">
         <a-input v-model:value="searchWarn" placeholder="搜索" size="small" class="zxm-input zxm-input-sm" />
-        <div class="search-btn">
+        <div class="search-btn" @click="openFilterModal">
           <div class="btn-item">筛选</div>
         </div>
       </div>
@@ -17,7 +17,6 @@
       <div class="btn" :class="{ active: timeType === 1 }" @click="timeType = 1">今日</div>
       <div class="btn" :class="{ active: timeType === 2 }" @click="timeType = 2">近三天</div>
       <div class="btn" :class="{ active: timeType === 3 }" @click="timeType = 3">近七天</div>
-      <div class="btn" :class="{ active: timeType === 4 }" @click="timeType = 4">自定义</div>
     </div>
     <div class="content-area">
       <div class="content-title">
@@ -35,12 +34,37 @@
         </div>
       </div>
     </div>
+
+    <!-- 筛选弹窗:日期选择 -->
+    <div class="filter-mask" v-if="filterVisible" @click.self="closeFilterModal">
+      <div class="filter-modal">
+        <div class="modal-header">
+          <span>自定义时间筛选</span>
+          <span class="close-icon" @click="closeFilterModal">×</span>
+        </div>
+        <div class="modal-form">
+          <div class="form-row">
+            <label class="form-label">开始日期:</label>
+            <a-date-picker v-model:value="filterForm.startDate" placeholder="请选择开始日期" class="date-picker" />
+          </div>
+          <div class="form-row">
+            <label class="form-label">结束日期:</label>
+            <a-date-picker v-model:value="filterForm.endDate" placeholder="请选择结束日期" class="date-picker" />
+          </div>
+        </div>
+        <div class="modal-footer">
+          <button class="btn-cancel" @click="closeFilterModal">取消</button>
+          <button class="btn-search" @click="confirmFilter">查询</button>
+        </div>
+      </div>
+    </div>
   </div>
 </template>
 
 <script setup lang="ts">
-import { ref } from 'vue';
-
+import { ref, reactive } from 'vue';
+import dayjs, { Dayjs } from 'dayjs';
+import { message } from 'ant-design-vue';
 let searchWarn = ref('');
 const timeType = ref(1);
 let tableData = ref<any[]>([
@@ -54,6 +78,44 @@ let tableData = ref<any[]>([
   { time: '14:31:22', rule: '001', grade: '触发', status: '温度65.3℃超过阈值' },
   { time: '14:31:22', rule: '001', grade: '触发', status: '温度65.3℃超过阈值' },
 ]);
+
+// 筛选弹窗控制
+const filterVisible = ref(false);
+// 筛选日期表单
+const filterForm = reactive<{ startDate: Dayjs | null; endDate: Dayjs | null }>({
+  startDate: null,
+  endDate: null,
+});
+
+// 打开筛选弹窗
+const openFilterModal = () => {
+  const today = dayjs();
+  const sevenDayAgo = dayjs().subtract(7, 'day');
+  filterForm.startDate = sevenDayAgo;
+  filterForm.endDate = today;
+  filterVisible.value = true;
+};
+
+// 关闭弹窗并重置日期
+const closeFilterModal = () => {
+  filterVisible.value = false;
+  filterForm.startDate = null;
+  filterForm.endDate = null;
+};
+
+// 确认筛选
+const confirmFilter = () => {
+  if (!filterForm.startDate || !filterForm.endDate) {
+    message.warning('请选择完整起止日期');
+    return;
+  }
+  if (filterForm.startDate.isAfter(filterForm.endDate)) {
+    message.warning('开始日期不能晚于结束日期');
+    return;
+  }
+  console.log('筛选参数:', searchWarn.value, filterForm.startDate.format('YYYY-MM-DD'), filterForm.endDate.format('YYYY-MM-DD'));
+  closeFilterModal();
+};
 </script>
 
 <style lang="less" scoped>
@@ -240,4 +302,92 @@ let tableData = ref<any[]>([
 .zxm-input-sm {
   padding: 0px 20px;
 }
+
+/* 筛选弹窗样式 */
+.filter-mask {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.6);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  z-index: 999;
+}
+.filter-modal {
+  width: 400px;
+  background: #0e3455;
+  border: 1px solid #01fefc;
+  border-radius: 6px;
+  color: #fff;
+}
+.modal-header {
+  height: 40px;
+  line-height: 40px;
+  padding: 0 16px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  border-bottom: 1px solid #114268;
+  color: #01fefc;
+  font-size: 14px;
+  font-weight: bold;
+}
+.close-icon {
+  font-size: 20px;
+  cursor: pointer;
+  color: #ccc;
+}
+.modal-form {
+  padding: 18px;
+}
+.form-row {
+  display: flex;
+  align-items: center;
+  margin-bottom: 16px;
+  .form-label {
+    width: 90px;
+    font-size: 13px;
+  }
+  .date-picker {
+    flex: 1;
+    :deep(.ant-picker) {
+      background: #114268;
+      border: 1px solid #01fefc;
+      color: #fff;
+    }
+    :deep(.ant-picker-input input) {
+      color: #fff;
+    }
+  }
+}
+.modal-footer {
+  height: 48px;
+  display: flex;
+  justify-content: flex-end;
+  gap: 12px;
+  align-items: center;
+  padding: 0 16px;
+  border-top: 1px solid #114268;
+  .btn-cancel {
+    width: 80px;
+    height: 30px;
+    background: transparent;
+    border: 1px solid #01fefc;
+    color: #fff;
+    border-radius: 3px;
+    cursor: pointer;
+  }
+  .btn-search {
+    width: 80px;
+    height: 30px;
+    background: rgba(32, 166, 169);
+    border: 1px solid #01fefc;
+    color: #fff;
+    border-radius: 3px;
+    cursor: pointer;
+  }
+}
 </style>

+ 394 - 107
src/views/vent/home/configurable/components/preset/ruleTable.vue

@@ -1,62 +1,330 @@
 <template>
   <div class="search-table">
-    <div class="search-area">
+    <div class="search-area" v-if="config.type === 'C'">
       <div class="list-title">
         <span>联动规则列表</span>
       </div>
-      <div class="search-btn">
-        <div class="btn-item">新增</div>
+      <div class="search-btn" @click="handleAdd">
+        <div class="btn-item">配置</div>
       </div>
     </div>
-    <div class="content-area">
-      <div class="content-title">
-        <div class="title-item" v-for="(item, index) in titleList" :key="index">{{ item.label }}</div>
+    <div v-if="config.type === 'D'" class="search-new">
+      <div class="list-title">
+        <span>联动日志</span>
+      </div>
+      <div class="time-picker-wrap">
+        <div class="form-row">
+          <label class="form-label">开始时间:</label>
+          <a-date-picker
+            v-model:value="filterForm.startDate"
+            placeholder="请选择开始时间"
+            class="date-picker"
+            show-time
+            format="YYYY-MM-DD HH:mm:ss"
+            style="width: 300px !important"
+          />
+        </div>
       </div>
-      <div class="history-content">
-        <div class="content-item" v-for="(item, index) in tableData" :key="index">
-          <div class="item-text">{{ item.time }}</div>
-          <div class="item-text">{{ item.address }} </div>
-          <div class="item-text item-text1">{{ item.grade }}</div>
-          <div class="item-text">{{ item.action }}</div>
-          <div class="item-text item-text2">{{ item.status }}</div>
-          <div class="item-text">
-            <span class="text-look">确认</span>
-          </div>
+      <div class="time-select">
+        <span class="span">快捷时间:</span>
+        <div class="btn" :class="{ active: timeType === 1 }" @click="setTimeRange(1)">今日</div>
+        <div class="btn" :class="{ active: timeType === 2 }" @click="setTimeRange(2)">近三天</div>
+        <div class="btn" :class="{ active: timeType === 3 }" @click="setTimeRange(3)">近一月</div>
+        <div class="search-btn" @click="confirmDetail">
+          <div class="btn-item">详情</div>
         </div>
       </div>
     </div>
+    <div class="content-area">
+      <div class="table-container">
+        <table class="warning-table">
+          <colgroup>
+            <col
+              v-for="col in config.type === 'C' ? config.columns : filterDeviceColumns"
+              :key="col.dataIndex || col.prop"
+              :style="{ width: col.width }"
+            />
+          </colgroup>
+          <thead class="table-header">
+            <tr>
+              <th v-for="col in config.type === 'C' ? config.columns : filterDeviceColumns" :key="col.dataIndex || col.prop">
+                {{ col.title || col.name }}
+              </th>
+            </tr>
+          </thead>
+          <tbody class="table-body">
+            <tr
+              v-for="(row, index) in realTableData"
+              :key="index"
+              class="table-row"
+              :class="config.type === 'C' ? { box_active: isCurrentSelectRow(row) } : ''"
+              @click="config.type === 'C' ? handleRowClick(row) : ''"
+            >
+              <td v-for="col in config.type === 'C' ? config.columns : filterDeviceColumns" :key="col.dataIndex || col.prop" class="table-cell">
+                <template v-if="config.type === 'C' && col.prop === 'operation'">
+                  <span class="text-look" @click="handleEditClick(row)">编辑</span>
+                </template>
+                <template v-else>
+                  <span class="text-ellipsis" :title="getCellText(row, col)">
+                    {{ getCellText(row, col) }}
+                  </span>
+                </template>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+    </div>
+    <DeviceModal
+      @register="registerModal"
+      :show-tab="true"
+      @saveOrUpdate="saveOrUpdateHandler"
+      :device-type="deviceType"
+      :select-sys-alarm-id="currentSelectInfo.alarmId"
+      :select-sys-id="currentSelectInfo.sysId"
+    />
+    <RuleTableModal
+      @register="register"
+      @update="onSubmit"
+      :destroy-on-close="true"
+      @success="handleModalSuccess"
+      :form-schemas="workFaceWarningSchemas"
+    />
   </div>
 </template>
 
 <script setup lang="ts">
-import { ref } from 'vue';
-
-let searchWarn = ref('');
-let titleList = ref<any[]>([
-  { label: '规则ID', value: '1' },
-  { label: '规则名称', value: '2' },
-  { label: '触发条件', value: '3' },
-  { label: '联动动作', value: '4' },
-  { label: '状态', value: '5' },
-  { label: '操作', value: '6' },
-]);
-let tableData = ref<any[]>([
-  { time: 'LINK001', address: '温度报警联动', grade: '温度>60℃', action: '声光报警', status: '启用' },
-  { time: 'LINK001', address: '温度报警联动', grade: '温度>60℃', action: '声光报警', status: '启用' },
-  { time: 'LINK001', address: '温度报警联动', grade: '温度>60℃', action: '声光报警', status: '启用' },
-  { time: 'LINK001', address: '温度报警联动', grade: '温度>60℃', action: '声光报警', status: '启用' },
-  { time: 'LINK001', address: '温度报警联动', grade: '温度>60℃', action: '声光报警', status: '启用' },
-  { time: 'LINK001', address: '温度报警联动', grade: '温度>60℃', action: '声光报警', status: '启用' },
-  { time: 'LINK001', address: '温度报警联动', grade: '温度>60℃', action: '声光报警', status: '启用' },
-]);
+import { ref, reactive, watch, onMounted, nextTick, computed } from 'vue';
+import dayjs, { Dayjs } from 'dayjs';
+import { message } from 'ant-design-vue';
+import DeviceModal from './deviceModal.vue';
+import { useModal } from '/@/components/Modal';
+import { getAlarmLogList } from '../../configurable.api';
+import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
+import { func } from 'vue-types';
+import { useLinkRuleStore } from '/@/store/modules/linkRule';
+import RuleTableModal from '../../../../deviceManager/comment/warningTabel/RuleTableModal.vue';
+import { FormSchema } from '/@/components/Table';
+import { warningLogEdit, warningLogList } from '../../../../deviceManager/comment/warningTabel/warning.api';
+import { workFaceWarningFormSchemas } from '../../../../deviceManager/comment/warningTabel/warning.data';
+const FIXED_STRTYPE = 'sys_openair_fire';
+const deviceType = ref('managesys');
+const isUpdate = ref(false);
+const instanceId = ref(`${Date.now()}_${Math.floor(Math.random() * 10000)}`);
+const [registerModal, { openModal, closeModal }] = useModal(instanceId.value);
+const linkRuleStore = useLinkRuleStore();
+const emit = defineEmits(['row-change', 'table-refresh']);
+const currentSelectInfo = ref({
+  sysId: '',
+  alarmId: '',
+});
+const alarmMap: Record<string, string> = {
+  '102': '黄色预警',
+  '103': '橙色预警',
+  '104': '红色预警',
+};
+// 获取单元格文本内容
+const getCellText = (row: any, col: any) => {
+  const field = col.dataIndex ?? col.prop;
+  const val = row[field];
+  if (field === 'alarmLevel' && alarmMap[val]) {
+    return alarmMap[val];
+  }
+  return val ?? '-';
+};
+const deviceColumns = getTableHeaderColumns('alarm_history') as [];
+
+// 过滤日志只展示指定4列
+const filterDeviceColumns = computed(() => {
+  const showKeys = ['devicename', 'wardescrip', 'starttime', 'warntime'];
+  return deviceColumns.filter((item) => showKeys.includes(item.dataIndex));
+});
+
+const realTableData = computed(() => {
+  return props.config.type === 'D' ? alarmList.value : tableList.value;
+});
+const props = defineProps<{
+  config: {
+    type: string;
+    tableReadFrom: string;
+    columns: {
+      name: string;
+      prop: string;
+      width?: string;
+    }[];
+  };
+  data: Record<string, any>;
+  selectedRow?: any | null;
+}>();
+
+const handleEditClick = (row: any) => {
+  openModalRule(true, {
+    isUpdate: true,
+    record: row,
+  });
+};
+// 弹窗保存成功触发
+const handleModalSuccess = () => {
+  emit('table-refresh');
+};
+const workFaceWarningSchemas: FormSchema[] = [
+  ...workFaceWarningFormSchemas,
+  {
+    label: '关联条目',
+    field: 'relatedEntries',
+    component: 'ApiSelect',
+    componentProps: {
+      labelField: 'alarmName',
+      valueField: 'id',
+      resultField: 'records',
+      api: warningLogList.bind(null, { sysId: currentSelectInfo.value.sysId }),
+    },
+  },
+  {
+    label: '预警后自动控制',
+    field: 'isAutoControl',
+    component: 'RadioGroup',
+    componentProps: {
+      //options里面由一个一个的radio组成,支持disabled
+      options: [
+        { label: '是', value: true },
+        { label: '否', value: false },
+      ],
+    },
+  },
+  {
+    label: '解除后自动复位',
+    field: 'isAutoReset',
+    component: 'RadioGroup',
+    componentProps: {
+      //options里面由一个一个的radio组成,支持disabled
+      options: [
+        { label: '是', value: true },
+        { label: '否', value: false },
+      ],
+    },
+  },
+];
+const [register, { openModal: openModalRule, closeModal: closeModalRule }] = useModal();
+async function onSubmit(flag, values) {
+  await warningLogEdit(values);
+  closeModalRule();
+  // 通知外层刷新表格
+  handleModalSuccess();
+}
+// C类型数据源
+const tableList = ref<any[]>([]);
+// D类型数据源
+const alarmList = ref<any[]>([]);
+
+const timeType = ref(3);
+const filterForm = reactive<{ startDate: Dayjs | null }>({
+  startDate: null,
+});
+// 默认选中第一条(仅Type='C'时执行)
+const autoSelectFirstRow = async () => {
+  await nextTick();
+  if (props.config.type !== 'C') return;
+
+  const list = realTableData.value;
+  if (list.length > 0) {
+    const firstRow = list[0];
+    emit('row-change', firstRow);
+    linkRuleStore.setSelectedRow(firstRow);
+    currentSelectInfo.value.sysId = firstRow.sysId ?? '';
+    currentSelectInfo.value.alarmId = firstRow.alarmId ?? '';
+  } else {
+    emit('row-change', null);
+    linkRuleStore.clearSelectedRow();
+    currentSelectInfo.value = { sysId: '', alarmId: '' };
+  }
+};
+const isCurrentSelectRow = (row: any) => {
+  if (!props.selectedRow) return false;
+  return props.selectedRow === row;
+};
+
+const handleRowClick = (row: any) => {
+  emit('row-change', row);
+  linkRuleStore.setSelectedRow(row);
+  currentSelectInfo.value.sysId = row.sysId ?? '';
+  currentSelectInfo.value.alarmId = row.alarmId ?? '';
+};
+
+async function getAlarmHistory() {
+  const res = await getAlarmLogList({
+    column: 'createTime',
+    deviceKind: null,
+    isOk: false,
+    pageNo: 1,
+    pageSize: 100,
+    startTime: filterForm.startDate?.format('YYYY-MM-DD HH:mm:ss'),
+    systemType: 'ventS',
+  });
+  alarmList.value = res.records || [];
+}
+
+onMounted(() => {
+  getAlarmHistory();
+  autoSelectFirstRow();
+  setTimeRange(3);
+});
+
+// 监听父组件传入数据,赋值给tableList(Type为C时生效)
+watch(
+  () => props.data,
+  (newData) => {
+    const list = newData?.[props.config.tableReadFrom];
+    tableList.value = list || [];
+    autoSelectFirstRow();
+  },
+  { deep: true, immediate: true }
+);
+
+async function handleAdd() {
+  isUpdate.value = false;
+  openModal(true, {});
+}
+
+const saveOrUpdateHandler = async () => {
+  try {
+    message.success(isUpdate.value ? '编辑成功' : '新增成功');
+    closeModal();
+  } catch (error) {
+    message.error('保存失败,请联系管理员');
+  }
+};
+
+const setTimeRange = (type: number) => {
+  timeType.value = type;
+  let start: Dayjs;
+  switch (type) {
+    case 1:
+      start = dayjs().startOf('day');
+      break;
+    case 2:
+      start = dayjs().subtract(3, 'day').startOf('day');
+      break;
+    case 3:
+      start = dayjs().subtract(30, 'day').startOf('day');
+      break;
+    default:
+      start = dayjs().startOf('day');
+  }
+  filterForm.startDate = start;
+  getAlarmHistory();
+};
+
+// 跳转详情
+function confirmDetail() {
+  window.open('/monitorChannel/device-monitor/warningHistory/home');
+}
 </script>
 
 <style lang="less" scoped>
 @import '/@/design/theme.less';
-
 .search-table {
   --image-box-bg: url('@/assets/images/home-container/configurable/hsq/2-5.png');
-  --image-box-bg1: url('@/assets/images/home-container/configurable/hsq/2-6.png');
   --image-box-bg2: url('@/assets/images/home-container/configurable/hsq/2-24.png');
   position: relative;
   width: 100%;
@@ -81,7 +349,6 @@ let tableData = ref<any[]>([
   align-items: center;
   margin-bottom: 5px;
 }
-
 .search-btn {
   width: 85px;
   height: 30px;
@@ -90,7 +357,55 @@ let tableData = ref<any[]>([
   padding: 3px;
   cursor: pointer;
 }
-
+.search-new .time-picker-wrap {
+  padding: 10px;
+  .form-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 8px;
+    .form-label {
+      width: 60px;
+      font-size: 13px;
+      color: #fff;
+      flex-shrink: 0;
+    }
+  }
+}
+:deep(.zxm-picker) {
+  border: 1px solid #3ae1ff !important;
+  background-color: #104064 !important;
+}
+:deep(.zxm-picker-input > input) {
+  color: #fff !important;
+}
+:deep(.zxm-picker-suffix) {
+  color: #fff !important;
+}
+.time-select {
+  display: flex;
+  align-items: center;
+  padding-left: 10px;
+  margin-bottom: 8px;
+  gap: 6px;
+  white-space: nowrap;
+  .span {
+    color: #fff;
+    font-size: 13px;
+  }
+  .btn {
+    padding: 3px 8px;
+    background: #114268;
+    border: 1px solid transparent;
+    border-radius: 4px;
+    color: #fff;
+    cursor: pointer;
+    font-size: 13px;
+    &.active {
+      background-color: #185f8e;
+      border-color: #2084c0;
+    }
+  }
+}
 .btn-item {
   display: flex;
   justify-content: center;
@@ -99,39 +414,27 @@ let tableData = ref<any[]>([
   height: 100%;
   background-color: rgba(32, 166, 169);
 }
-
 .content-area {
-  height: calc(100% - 47px);
-}
-
-.content-title {
-  display: flex;
-  align-items: center;
-  height: 34px;
-  background: var(--image-box-bg2) no-repeat;
-  background-size: 100% 100%;
-  margin-bottom: 6px;
-}
-
-.title-item {
-  display: flex;
-  flex: 1;
-  justify-content: center;
-  align-items: center;
-  color: #01fefc;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
+  height: 100%;
 }
-
-.history-content {
+.table-container {
+  width: 100%;
   height: 100%;
   overflow-y: auto;
 }
-
-.content-item {
-  display: flex;
-  align-items: center;
+.warning-table {
+  width: 100%;
+  table-layout: fixed;
+  border-collapse: collapse;
+}
+.table-header tr {
+  position: sticky;
+  top: 0;
+  z-index: 10;
+  background: var(--image-box-bg2) no-repeat;
+  background-size: 100% 100%;
+}
+.table-row {
   height: 36px;
   &:nth-child(odd) {
     background-color: #0e3455;
@@ -139,53 +442,37 @@ let tableData = ref<any[]>([
   &:nth-child(even) {
     background-color: #114268;
   }
+  &.box_active {
+    box-shadow: 2px 0 0 0 #ffa024, inset 0 0 0 2px #ffa024;
+  }
 }
 
-.item-text {
-  display: flex;
-  flex: 1;
-  justify-content: center;
-  align-items: center;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  padding: 0 4px;
-}
-.title-item:nth-child(2),
-.item-text:nth-child(2) {
-  flex: 1.8;
-}
-.title-item:nth-child(3),
-.item-text:nth-child(3) {
-  flex: 1.5;
-}
-.title-item:nth-child(4),
-.item-text:nth-child(4) {
-  flex: 1.5;
-}
-.item-text1 {
-  color: #f4933d;
+th,
+.table-cell {
+  text-align: center;
+  padding: 5px;
+  font-size: 14px;
+  box-sizing: border-box;
+  vertical-align: middle;
 }
-.item-text2 {
-  color: #4cf3a6;
+th {
+  font-weight: bold;
+  color: #38e4ef;
+  height: 30px;
 }
 .text-look {
-  padding: 0px 3px;
-  margin: 0px 2px;
+  padding: 0 3px;
+  margin: 0 2px;
   border-radius: 2px;
   background-color: #2484bc;
   cursor: pointer;
 }
-
-.zxm-input {
-  height: 42px;
-  color: #fff;
-  background-color: transparent;
-  border: none;
-  background: var(--image-box-bg1) no-repeat;
-  background-size: 100% 100%;
-}
-.zxm-input-sm {
-  padding: 0px 20px;
+/* 文字省略样式 */
+.text-ellipsis {
+  display: block;
+  width: 100%;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
 }
 </style>

+ 32 - 1
src/views/vent/home/configurable/configurable.api.ts

@@ -6,7 +6,38 @@ import { ref, reactive } from 'vue';
 import _ from 'lodash';
 import LongList from './components/preset/LongList.vue';
 
-enum Api {}
+enum Api {
+  list = '/safety/ventanalyDevice/homedata2',
+  getHomeData = '/safety/ventanalyDevice/homedata',
+  getDisHome = '/monitor/disaster/getDisHome',
+  getBDDustData = '/monitor/disaster/getDisDustHome',
+  // getBDFireData = '/monitor/disaster/getDisFireHome',
+  getDeviceSys = '/ventanaly-device/monitor/getSysFireHomeInfo',
+  getAlarmRecord = '/ventanaly-device/safety/ventanalyAlarmLog/sysLinkDevAlarmLog',
+  getTotal = '/safety/ventanalyAlarmLog/total',
+  sysTypeWarnList = '/safety/ventanalyAlarmLog/sysTypeWarn',
+  getDisasterProportion = '/safety/ventanalyAlarmLog/getDisasterProportion',
+  system = '/ventanaly-device/monitor/device',
+  getSystem = '/monitor/deviceForZhuQi',
+  listdays = '/safety/ventanalyMonitorData/listdaysFast',
+  todayDeviceRunStatus = '/safety/ventanalyMonitorData/todayDeviceRunStatus',
+  summary = '/safety/ventanalyAlarmStatistic/summary',
+  // 预警指标信息获取
+  getWarnInfo = '/ventanaly-device/monitor/disaster/findAlarmsBySystemAndMonitorType',
+  monitorAndAlertBelt = '/ventanaly-device/monitor/disaster/monitorAndAlertBelt',
+  //预警条目list
+  warningList = '/safety/managesysAlarmInfo/list',
+  // 设备预警历史查询
+  getAlarmLogList = '/monitor/groupCompany/getAlarmLogList',
+  //获取配置预警设备数据
+  getWarningDeviceList = '/safety/managesysAlarm/list',
+}
+export const warningList = (params) => defHttp.get({ url: Api.warningList, params });
+export const getWarningDeviceList = (params) => defHttp.get({ url: Api.getWarningDeviceList, params });
+export const getAlarmLogList = (params) => defHttp.post({ url: Api.getAlarmLogList, params });
+
+export const getWarnInfo = (params) => defHttp.post({ url: Api.getWarnInfo, params });
+export const getMonitorAndAlertBelt = (params) => defHttp.post({ url: Api.monitorAndAlertBelt, params });
 
 // 搞这个缓存是由于:目前代码上的设计是多个模块发出多次请求,每个模块自己负责消费前者的响应。
 // 这会导致相同的请求被同时发送多次。

+ 6507 - 5
src/views/vent/home/configurable/configurable.data.ts

@@ -47,12 +47,40 @@ export const testConfigLink: Config[] = [
       preset: [
         {
           readFrom: '',
+          type: 'C',
+          tableReadFrom: 'warnInfo',
+          columns: [
+            {
+              name: '报警条目',
+              prop: 'alarmName',
+            },
+            {
+              name: '预警等级',
+              prop: 'alarmLevel',
+            },
+            {
+              name: '所属系统',
+              prop: 'systemType_dictText',
+            },
+            {
+              name: '预警类型',
+              prop: 'alarmType_dictText',
+            },
+            {
+              name: '创建人',
+              prop: 'createBy',
+            },
+            {
+              name: '操作',
+              prop: 'operation',
+            },
+          ],
         },
       ],
       to: '',
     },
     showStyle: {
-      size: 'width:420px;height:calc(100% - 200px);',
+      size: 'width:500px;height:calc(100% - 200px);',
       version: '普通版',
       position: 'top:0px;left:10px;',
     },
@@ -104,9 +132,9 @@ export const testConfigLink: Config[] = [
       to: '',
     },
     showStyle: {
-      size: 'width:1020px;height:calc(100% - 76px);',
+      size: 'width:940px;height:calc(100% - 76px);',
       version: '普通版',
-      position: 'top:65px;left:440px;',
+      position: 'top:65px;left:520px;',
     },
   },
   {
@@ -136,7 +164,7 @@ export const testConfigLink: Config[] = [
         direction: 'column',
         items: [
           {
-            name: 'link_log',
+            name: 'rule_table',
             basis: '100%',
           },
         ],
@@ -151,6 +179,7 @@ export const testConfigLink: Config[] = [
       preset: [
         {
           readFrom: '',
+          type: 'D',
         },
       ],
       to: '',
@@ -208,9 +237,6482 @@ export const testConfigLink: Config[] = [
       to: '',
     },
     showStyle: {
-      size: 'width:420px;height:180px;',
+      size: 'width:500px;height:180px;',
       version: '普通版',
       position: 'bottom:10px;bottom:10px;',
     },
   },
 ];
+//系统管理
+export const testConfigSystem: Config[] = [
+  {
+    deviceType: 'listLeft',
+    moduleName: '',
+    pageType: 'gas_injection',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+          trans: {},
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'user_list',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: '',
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
+    },
+    showStyle: {
+      size: 'width:770px;height:calc(100% - 315px);',
+      version: '普通版',
+      position: 'top:65px;left:10px;',
+    },
+  },
+  {
+    deviceType: 'listLeft',
+    moduleName: '',
+    pageType: 'gas_injection',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+          trans: {},
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'user_edit',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: '',
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
+    },
+    showStyle: {
+      size: 'width:670px;height:calc(100% - 315px);',
+      version: '普通版',
+      position: 'top:65px;left:790px;',
+    },
+  },
+  {
+    deviceType: 'listLeft',
+    moduleName: '',
+    pageType: 'gas_injection',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+          trans: {},
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'permission_info',
+            basis: '50%',
+          },
+          {
+            name: 'permission_set',
+            basis: '50%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: '',
+        },
+        {
+          readFrom: '',
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
+    },
+    showStyle: {
+      size: 'width:420px;height:calc(100% - 251px);',
+      version: '普通版',
+      position: 'top:0px;right:10px;',
+    },
+  },
+  {
+    deviceType: 'listLeft',
+    moduleName: '',
+    pageType: 'gas_injection',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+          trans: {},
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'log_audit',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: '',
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
+    },
+    showStyle: {
+      size: 'width:770px;height:230px;',
+      version: '普通版',
+      position: 'bottom:10px;left:10px;',
+    },
+  },
+  {
+    deviceType: 'listLeft',
+    moduleName: '',
+    pageType: 'gas_injection',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+          trans: {},
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'statistic_day',
+            basis: '50%',
+          },
+          {
+            name: 'chart',
+            basis: '50%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      chart: [
+        {
+          type: 'bar_cylinder_wide',
+          readFrom: '',
+          grid: {
+            top: 55,
+            left: 20,
+            bottom: 35,
+            right: 50,
+          },
+          legend: { show: false },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '', position: 'left' }],
+          series: [{ readFrom: 'areaTemptureData', xprop: 'x', yprop: 'y', label: '温度' }],
+        },
+      ],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: '',
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
+    },
+    showStyle: {
+      size: 'width:670px;height:230px;',
+      version: '普通版',
+      position: 'bottom:10px;left:790px;',
+    },
+  },
+  {
+    deviceType: 'listLeft',
+    moduleName: '',
+    pageType: 'gas_injection',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+          trans: {},
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'system_view',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: '',
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
+    },
+    showStyle: {
+      size: 'width:420px;height:230px;',
+      version: '普通版',
+      position: 'bottom:10px;right:10px;',
+    },
+  },
+];
+export const testConfigVentSsl: Config[] = [
+  {
+    deviceType: 'fanmain',
+    moduleName: '主通风机系统',
+    pageType: 'vent',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: true,
+          value: '运行风机:${readData.Fan1StartStatus}',
+          trans: {
+            '1': '一号',
+            '0': '二号',
+          },
+        },
+      },
+      background: {
+        show: true,
+        type: 'video',
+        link: '/video/video.mp4',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '33%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'A',
+          readFrom: '',
+          layout: 'val-top',
+          items: [
+            {
+              label: '风量(m³/min)',
+              value: '${flow_merge}',
+            },
+            {
+              label: '负压(Pa)',
+              value: '${fy_merge}',
+            },
+            {
+              label: '漏风率(%)',
+              value: '${leakage}',
+            },
+          ],
+        },
+      ],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:60px;left:0;',
+    },
+  },
+  {
+    deviceType: 'fanlocal',
+    moduleName: '局部通风机系统',
+    pageType: 'vent',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: true,
+          value: '运行风机:${readData.Fan1StartStatus}',
+          trans: {
+            '1': '一号',
+            '0': '二号',
+          },
+        },
+      },
+      background: {
+        show: true,
+        type: 'video',
+        link: '/video/video.mp4',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '33%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'A',
+          readFrom: '',
+          layout: 'val-top',
+          items: [
+            {
+              label: '风量(m³/min)',
+              value: '${flow_merge}',
+            },
+            {
+              label: '负压(Pa)',
+              value: '${fy_merge}',
+            },
+            {
+              label: '漏风率(%)',
+              value: '${leakage}',
+            },
+          ],
+        },
+      ],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanlocal',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:350px;left:0;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '通风设施远程控制',
+    pageType: 'vent',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: true,
+        type: 'video',
+        link: '/video/video.mp4',
+      },
+      layout: {
+        direction: 'row',
+        items: [],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=gate_xinJianFuXieJin',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:640px;left:0;',
+    },
+  },
+  {
+    deviceType: 'sys_wind',
+    moduleName: '风量监测',
+    pageType: 'vent_new',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      table: [],
+      preset: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      chart: [
+        {
+          type: 'bar',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [
+            { show: true, name: '风量(m³/min)', position: 'left' },
+            { show: true, name: '风速(m/s)', position: 'right' },
+          ],
+          dataZoom: [
+            {
+              show: false,
+              end: 20,
+            },
+          ],
+          series: [
+            { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.m3', label: '风量' },
+            { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.va', label: '风速' },
+          ],
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=windrect',
+    },
+    showStyle: {
+      size: 'width:1100px;height:280px;',
+      version: '原版',
+      position: 'top:640px;left:410px;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '风窗监测',
+    pageType: 'vent',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: true,
+        type: 'video',
+        link: '/video/video.mp4',
+      },
+      layout: {
+        direction: 'row',
+        items: [],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=gate_xinJianFuXieJin',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:60px;right:0;',
+    },
+  },
+  {
+    deviceType: 'safetymonitor',
+    moduleName: '安全监控系统',
+    pageType: 'fire',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'table',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [
+        {
+          type: 'C',
+          readFrom: 'safetymonitor',
+          columns: [
+            {
+              name: '测点位置',
+              prop: 'strinstallpos',
+            },
+            {
+              name: '数据',
+              prop: 'readData.V',
+            },
+            {
+              name: '单位',
+              prop: 'readData.unit',
+            },
+          ],
+        },
+      ],
+      list: [],
+      complex_list: [],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:350px;right:0;',
+    },
+  },
+  {
+    deviceType: 'warn',
+    moduleName: '预警监测',
+    pageType: 'vent',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: true,
+          value: '网络异常:${warn[0].netstatus.val}',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'list',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [
+        {
+          type: 'timeline',
+          readFrom: 'warn[0]',
+          items: [
+            {
+              label: '报警',
+              value: '${alarm.val}',
+              info: '',
+              color: 'red',
+            },
+            {
+              label: '重大风险预警',
+              value: '${red.val}',
+              info: '',
+              color: 'red',
+            },
+            {
+              label: '较大风险预警',
+              value: '${orange.val}',
+              info: '',
+              color: 'orange',
+            },
+            {
+              label: '一般风险预警',
+              value: '${yellow.val}',
+              info: '',
+              color: 'yellow',
+            },
+            {
+              label: '低风险预警',
+              value: '${blue.val}',
+              info: '',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      preset: [],
+      table: [],
+      gallery: [],
+      chart: [],
+      gallery_list: [],
+      complex_list: [],
+      to: '/monitorChannel/monitor-alarm-home',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:640px;right:0;',
+    },
+  },
+];
+
+export const testConfigVent: Config[] = [
+  {
+    deviceType: 'fanmain',
+    moduleName: '主通风机系统',
+    pageType: 'vent',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: true,
+          value: '运行风机:${readData.Fan1StartStatus}',
+          trans: {
+            '1': '一号',
+            '0': '二号',
+          },
+        },
+      },
+      background: {
+        show: false,
+        type: 'image',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'qh_curve',
+            basis: '67%',
+          },
+          {
+            name: 'board',
+            basis: '33%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'D',
+          readFrom: '',
+          layout: 'label-top',
+          items: [
+            {
+              label: '风量(m³/min)',
+              value: '${flow_merge}',
+            },
+            {
+              label: '负压(Pa)',
+              value: '${fy_merge}',
+            },
+            {
+              label: '漏风率(%)',
+              value: '${leakage}',
+            },
+          ],
+        },
+      ],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: '',
+          fan1Prop: ['flow_merge', 'fy_merge'],
+          fan2Prop: ['flow_merge', 'fy_merge'],
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
+    },
+    showStyle: {
+      size: 'width:390px;height:260px;',
+      version: '原版',
+      position: 'top:15px;left:15px;',
+    },
+  },
+  {
+    deviceType: 'fanlocal',
+    moduleName: '局部通风机系统',
+    pageType: 'vent',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '运行风机:${readData.Fan1StartStatus}',
+          trans: {
+            '1': '一号',
+            '0': '二号',
+          },
+        },
+      },
+      background: {
+        show: false,
+        type: 'image',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      chart: [
+        {
+          type: 'bar_cylinder_wide',
+          readFrom: '',
+          legend: { show: false },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '(m³/min)', position: 'left' }],
+          series: [{ readFrom: 'chartData', xprop: 'x', yprop: 'y', label: '风量' }],
+        },
+      ],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanlocal',
+    },
+    showStyle: {
+      size: 'width:390px;height:260px;',
+      version: '原版',
+      position: 'top:295px;left:15px;',
+    },
+  },
+  // {
+  // deviceType: '',
+  // moduleName: '通风设施远程控制',
+  // pageType: 'vent',
+  // moduleData: {
+  // header: {
+  // show: false,
+  // readFrom: '',
+  // selector: {
+  // show: false,
+  // value: '',
+  // },
+  // slot: {
+  // show: false,
+  // value: '',
+  // },
+  // },
+  // background: {
+  // // show: true,
+  // show: false,
+  // type: 'video',
+  // link: '/video/gate.mp4',
+  // },
+  // layout: {
+  // direction: 'row',
+  // items: [
+  // {
+  // name: 'device_alarm',
+  // basis: '100%',
+  // },
+  // ],
+  // },
+  // board: [],
+  // list: [],
+  // chart: [],
+  // table: [],
+  // gallery: [],
+  // complex_list: [],
+  // gallery_list: [],
+  // preset: [
+  // {
+  // readFrom: 'device',
+  // },
+  // ],
+  // to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=gate_xinJianFuXieJin',
+  // },
+  // showStyle: {
+  // size: 'width:390px;height:260px;',
+  // version: '原版',
+  // position: 'top:555px;left:15px;',
+  // },
+  // },
+  {
+    deviceType: 'warn',
+    moduleName: '预警监测',
+    pageType: 'vent_realtime',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: true,
+          value: '网络异常:${warn[0].netstatus.val}',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'list',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [
+        {
+          type: 'timeline',
+          readFrom: 'warn[0]',
+          items: [
+            {
+              label: '报警',
+              value: '${alarm.val}',
+              info: '',
+              color: 'red',
+            },
+            {
+              label: '重大风险预警',
+              value: '${red.val}',
+              info: '',
+              color: 'red',
+            },
+            {
+              label: '较大风险预警',
+              value: '${orange.val}',
+              info: '',
+              color: 'orange',
+            },
+            {
+              label: '一般风险预警',
+              value: '${yellow.val}',
+              info: '',
+              color: 'yellow',
+            },
+            {
+              label: '低风险预警',
+              value: '${blue.val}',
+              info: '',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      preset: [],
+      table: [],
+      gallery: [],
+      chart: [],
+      gallery_list: [],
+      complex_list: [],
+      to: '/monitorChannel/monitor-alarm-home',
+    },
+    showStyle: {
+      size: 'width:390px;height:260px;',
+      version: '原版',
+      position: 'top:555px;left:15px;',
+    },
+  },
+  {
+    deviceType: 'sys_wind',
+    moduleName: '风量监测',
+    pageType: 'vent',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      table: [],
+      preset: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      chart: [
+        {
+          type: 'bar',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [
+            { show: true, name: '风量(m³/min)', position: 'left' },
+            { show: true, name: '风速(m/s)', position: 'right' },
+          ],
+          dataZoom: [
+            {
+              show: true,
+              end: 20,
+            },
+          ],
+          series: [
+            { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.m3', label: '风量' },
+            { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.va', label: '风速' },
+          ],
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=windrect',
+    },
+    showStyle: {
+      size: 'width:505px;height:260px;',
+      version: '原版',
+      position: 'bottom:15px;left:420px;',
+    },
+  },
+  {
+    deviceType: 'sys_majorpath',
+    moduleName: '关键通风路线',
+    pageType: 'vent',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${devicePos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'chart',
+            basis: '67%',
+          },
+          {
+            name: 'board',
+            basis: '33%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'D',
+          readFrom: 'readData',
+          layout: 'label-top',
+          items: [
+            {
+              label: '风量(m³/min)',
+              value: '${retM3_merge.value}',
+            },
+            {
+              label: '矿井阻力(Pa)',
+              value: '${fy_merge.value}',
+            },
+            {
+              label: '等积孔',
+              value: '${dengjikong_merge}',
+            },
+          ],
+        },
+      ],
+      complex_list: [],
+      gallery: [],
+      list: [],
+      table: [],
+      chart: [
+        {
+          type: 'pie_halo',
+          readFrom: '',
+          legend: { show: false, formatter: '{b}:{c}\n{d}%' },
+          xAxis: [{ show: false }],
+          yAxis: [{ show: false, name: '风量', position: 'left' }],
+          series: [{ readFrom: 'piechart', xprop: 'label', yprop: 'valMock', label: '' }],
+        },
+      ],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=sys_majorpath&deviceid=${deviceID}',
+    },
+    showStyle: {
+      size: 'width:460px;height:260px;',
+      version: '原版',
+      position: 'bottom:15px;left:940px;',
+    },
+  },
+  {
+    deviceType: 'sys_surface_caimei',
+    moduleName: '工作面智能监控',
+    pageType: 'vent',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${devicePos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'chart',
+            basis: '65%',
+          },
+          {
+            name: 'board',
+            basis: '35%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'B',
+          readFrom: '',
+          layout: 'label-top',
+          items: [
+            {
+              label: '进风(m³/min)',
+              value: '${faceIntM3}',
+            },
+            {
+              label: '回风(m³/min)',
+              value: '${faceRetM3}',
+            },
+            {
+              label: '需风量(m³/min)',
+              value: '${facePlanM3}',
+            },
+          ],
+        },
+      ],
+      list: [],
+      preset: [],
+      table: [],
+      gallery: [],
+      chart: [
+        {
+          type: 'line',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '风量(m³/min)', position: 'left' }],
+          series: [
+            { readFrom: 'history_report', xprop: 'time', yprop: 'faceIntM3', label: '进风' },
+            { readFrom: 'history_report', xprop: 'time', yprop: 'faceRetM3', label: '回风' },
+          ],
+        },
+      ],
+      gallery_list: [],
+      complex_list: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=sys_surface_caimei&deviceid=${deviceID}',
+    },
+    showStyle: {
+      size: 'width:460px;height:260px;',
+      version: '原版',
+      position: 'bottom:15px;right:15px;',
+    },
+  },
+];
+
+export const testConfigDust: Config[] = [
+  {
+    deviceType: '',
+    moduleName: '工作面风险监测',
+    pageType: 'dust',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'gallery',
+            basis: '20%',
+          },
+          {
+            name: 'complex_list',
+            basis: '80%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [
+        {
+          type: 'D',
+          readFrom: 'dustManageInfo',
+          items: [
+            {
+              label: '监测总数',
+              value: '${totalNum}',
+              color: 'blue',
+            },
+            {
+              label: '低风险',
+              value: '${dfxNum}',
+              color: 'blue',
+            },
+            {
+              label: '一般风险',
+              value: '${ybNum}',
+              color: 'blue',
+            },
+            {
+              label: '较大风险',
+              value: '${jdNum}',
+              color: 'blue',
+            },
+            {
+              label: '重大风险',
+              value: '${zdNum}',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      gallery_list: [],
+      table: [],
+      complex_list: [
+        {
+          type: 'C',
+          readFrom: 'dustManageInfo.sysList',
+          mapFromData: true,
+          items: [
+            {
+              title: '${sysNamme}',
+              contents: [
+                {
+                  label: '风险监测',
+                  value: '${warnLevel}',
+                  color: 'blue',
+                  info: '',
+                },
+                {
+                  label: '最高粉尘浓度',
+                  value: '${maxVal}',
+                  color: 'blue',
+                  info: '',
+                },
+              ],
+            },
+          ],
+        },
+      ],
+      preset: [],
+      // mock: BDdustMock,
+    },
+    showStyle: {
+      size: 'width:450px;height:860px;',
+      version: '新版',
+      position: 'top:60px;left:0;',
+    },
+  },
+  {
+    deviceType: 'dustDustGraph',
+    moduleName: '综放工作面粉尘浓度',
+    pageType: 'dust',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [
+        {
+          type: 'line_area',
+          readFrom: '',
+          legend: { show: false },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '浓度', position: 'left' }],
+          series: [
+            {
+              label: '${strinstallpos}',
+              readFrom: 'historyList',
+              xprop: 'time',
+              yprop: 'dustval',
+            },
+          ],
+        },
+      ],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+      // mock: BDdustMock,
+    },
+    showStyle: {
+      size: 'width:1000px;height:280px;',
+      version: '新版',
+      position: 'top:640px;left:460px;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '智能喷雾降尘装置',
+    pageType: 'dust',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'gallery',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [
+        {
+          type: 'A',
+          readFrom: 'atomObj',
+          items: [
+            {
+              label: '设备总数',
+              value: '${totalNum}',
+              color: 'blue',
+            },
+            {
+              label: '喷雾开启数',
+              value: '${atomOpenNum}',
+              color: 'blue',
+            },
+            {
+              label: '连网数量',
+              value: '${openNum}',
+              color: 'blue',
+            },
+            {
+              label: '断网数量',
+              value: '${breakNum}',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+      to: 'http://10.248.210.154:8801',
+      // mock: BDdustMock,
+    },
+    showStyle: {
+      size: 'width:450px;height:280px;',
+      version: '新版',
+      position: 'top:60px;right:0;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '隔爆设施管理台账',
+    pageType: 'dust',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'table',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [
+        {
+          type: 'C',
+          readFrom: 'devGbsb',
+          columns: [
+            {
+              name: '地点',
+              prop: 'strinstallpos',
+            },
+            {
+              name: '吊挂位置',
+              prop: 'addr',
+            },
+            {
+              name: '性质',
+              prop: 'kind',
+            },
+          ],
+        },
+      ],
+      list: [],
+      complex_list: [],
+      preset: [],
+      // mock: BDdustMock,
+    },
+    showStyle: {
+      size: 'width:450px;height:280px;',
+      version: '新版',
+      position: 'top:350px;right:0;',
+    },
+  },
+  {
+    deviceType: 'statics',
+    moduleName: '粉尘静态指标',
+    pageType: 'dust',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'board',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'E',
+          readFrom: '',
+          layout: 'label-top',
+          items: [
+            {
+              label: '火焰长度',
+              value: '>400mm',
+            },
+            {
+              label: '抑制煤层爆炸最低岩粉量',
+              value: '75%',
+            },
+            {
+              label: '鉴定结论',
+              value: '有煤层爆炸性',
+            },
+          ],
+        },
+      ],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+      // mock: BDdustMock,
+    },
+    showStyle: {
+      size: 'width:450px;height:280px;',
+      version: '新版',
+      position: 'top:640px;right:0;',
+    },
+  },
+];
+
+//粉尘绿色首页
+export const testConfigDustGreen: Config[] = [
+  {
+    deviceType: '',
+    moduleName: '工作面风险监测',
+    pageType: 'dust-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'gallery',
+            basis: '20%',
+          },
+          {
+            name: 'complex_list',
+            basis: '80%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [
+        {
+          type: 'D',
+          readFrom: 'dustManageInfo',
+          items: [
+            {
+              label: '监测总数',
+              value: '${totalNum}',
+              color: 'blue',
+            },
+            {
+              label: '低风险',
+              value: '${dfxNum}',
+              color: 'blue',
+            },
+            {
+              label: '一般风险',
+              value: '${ybNum}',
+              color: 'blue',
+            },
+            {
+              label: '较大风险',
+              value: '${jdNum}',
+              color: 'blue',
+            },
+            {
+              label: '重大风险',
+              value: '${zdNum}',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      gallery_list: [],
+      table: [],
+      complex_list: [
+        {
+          type: 'C',
+          readFrom: 'dustManageInfo.sysList',
+          mapFromData: true,
+          items: [
+            {
+              title: '${sysNamme}',
+              contents: [
+                {
+                  label: '风险监测',
+                  value: '${warnLevel}',
+                  color: 'blue',
+                  info: '',
+                },
+                {
+                  label: '最高粉尘浓度',
+                  value: '${maxVal}',
+                  color: 'blue',
+                  info: '',
+                },
+              ],
+            },
+          ],
+        },
+      ],
+      preset: [],
+      // mock: BDdustMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:815px;',
+      version: '新版',
+      position: 'top:0px;left:15px',
+    },
+  },
+  {
+    deviceType: 'dustDustGraph',
+    moduleName: '综放工作面粉尘浓度',
+    pageType: 'dust-green',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [
+        {
+          type: 'line_area',
+          readFrom: '',
+          legend: { show: false },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '浓度', position: 'left' }],
+          series: [
+            {
+              label: '${strinstallpos}',
+              readFrom: 'historyList',
+              xprop: 'time',
+              yprop: 'dustval',
+            },
+          ],
+        },
+      ],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+      // mock: BDdustMock,
+    },
+    showStyle: {
+      size: 'width:580px;height:260px;',
+      version: '新版',
+      position: 'bottom:0px;left:450px;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '智能喷雾降尘装置',
+    pageType: 'dust-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'gallery',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [
+        {
+          type: 'A',
+          readFrom: 'atomObj',
+          items: [
+            {
+              label: '设备总数',
+              value: '${totalNum}',
+              color: 'blue',
+            },
+            {
+              label: '喷雾开启数',
+              value: '${atomOpenNum}',
+              color: 'blue',
+            },
+            {
+              label: '连网数量',
+              value: '${openNum}',
+              color: 'blue',
+            },
+            {
+              label: '断网数量',
+              value: '${breakNum}',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+      to: 'http://10.248.210.154:8801',
+      // mock: BDdustMock,
+    },
+    showStyle: {
+      size: 'width:390px;height:260px;',
+      version: '新版',
+      position: 'bottom:0px;right:450px;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '隔爆设施管理台账',
+    pageType: 'dust-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'table',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [
+        {
+          type: 'C',
+          readFrom: 'devGbsb',
+          columns: [
+            {
+              name: '地点',
+              prop: 'strinstallpos',
+            },
+            {
+              name: '吊挂位置',
+              prop: 'addr',
+            },
+            {
+              name: '性质',
+              prop: 'kind',
+            },
+          ],
+        },
+      ],
+      list: [],
+      complex_list: [],
+      preset: [],
+      // mock: BDdustMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:530px;',
+      version: '新版',
+      position: 'top:0px;right:15px;',
+    },
+  },
+  {
+    deviceType: 'statics',
+    moduleName: '粉尘静态指标',
+    pageType: 'dust-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'board',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'E',
+          readFrom: '',
+          layout: 'label-top',
+          items: [
+            {
+              label: '火焰长度',
+              value: '>400mm',
+            },
+            {
+              label: '抑制煤层爆炸最低岩粉量',
+              value: '75%',
+            },
+            {
+              label: '鉴定结论',
+              value: '有煤层爆炸性',
+            },
+          ],
+        },
+      ],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+      // mock: BDdustMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:260px;',
+      version: '新版',
+      position: 'bottom:0px;right:15px;',
+    },
+  },
+];
+
+export const testConfigFireGreen: Config[] = [
+  {
+    deviceType: 'fireManageInfo',
+    moduleName: '重点区域风险监测',
+    pageType: 'fire-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '35%',
+          },
+          {
+            name: 'complex_list',
+            basis: '65%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'A',
+          readFrom: 'fireManageInfo',
+          layout: 'label-top',
+          items: [
+            {
+              label: '内因风险等级',
+              value: '${nyWarnLevel}',
+            },
+            {
+              label: '外因风险等级',
+              value: '${wyWarnLevel}',
+            },
+          ],
+        },
+      ],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [
+        {
+          type: 'D',
+          readFrom: 'fireManageInfo.sysList',
+          mapFromData: true,
+          items: [
+            {
+              title: '${sysNamme}',
+              contents: [
+                {
+                  label: '风险监测',
+                  value: '${warnLevel}',
+                  color: 'blue',
+                  info: '',
+                },
+                {
+                  label: '最高温度',
+                  value: '${maxVal}',
+                  color: 'blue',
+                  info: '',
+                },
+              ],
+            },
+          ],
+        },
+      ],
+      preset: [],
+      // mock: BDfireMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:400px;',
+      version: '原版',
+      position: 'top:0px;left:15px',
+    },
+  },
+  {
+    deviceType: 'pdArray',
+    moduleName: '带式输送机防灭火监控系统',
+    pageType: 'fire-green',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${systemname}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '25%',
+          },
+          {
+            name: 'chart',
+            basis: '75%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'F',
+          layout: 'val-top',
+          readFrom: 'arrayCount',
+          items: [
+            {
+              label: '光纤预警',
+              value: '${[0].val}℃',
+            },
+            {
+              label: '一氧化碳预警',
+              value: '${[1].val}ppm',
+            },
+            {
+              label: '烟雾预警',
+              value: '${[2].val}',
+            },
+          ],
+        },
+      ],
+      chart: [
+        {
+          type: 'line_smooth',
+          readFrom: 'arrayFiber',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '温度(℃)', position: 'left' }],
+          series: [
+            {
+              label: '${strinstallpos}',
+              readFrom: 'fibreTemperature',
+              xprop: 'pos',
+              yprop: 'value',
+            },
+          ],
+        },
+      ],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+      // mock: BDfireMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:400px;',
+      version: '原版',
+      position: 'top:415px;left:15px;',
+    },
+  },
+  {
+    deviceType: 'sgGxObj',
+    moduleName: '工作面光纤监测',
+    pageType: 'fire-green',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: 'devGxcw',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [
+        {
+          type: 'line_smooth',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '温度(℃)', position: 'left' }],
+          series: [
+            {
+              label: '${strinstallpos}',
+              readFrom: 'fibreTemperature',
+              xprop: 'pos',
+              yprop: 'value',
+            },
+          ],
+        },
+      ],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+      // mock: BDfireMock,
+    },
+    showStyle: {
+      size: 'width:990px;height:260px;',
+      version: '原版',
+      position: 'bottom:15px;left:450px;',
+    },
+  },
+  {
+    deviceType: 'sgGxObj',
+    moduleName: '工作面束管监测',
+    pageType: 'fire-green',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: 'devSgjc',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'gallery_list',
+            basis: '42%',
+          },
+          {
+            name: 'blast_delta',
+            basis: '58%',
+            overflow: false,
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [
+        {
+          type: 'B',
+          readFrom: '',
+          items: [
+            {
+              label: '一氧化碳',
+              value: '${coVal}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '二氧化碳',
+              value: '${co2Val}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '氧气',
+              value: '${o2Val}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '乙烯',
+              value: '${c2h4Val}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '甲烷',
+              value: '${ch4Val}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '乙炔',
+              value: '${c2h2Val}',
+              color: 'blue',
+              info: '',
+            },
+          ],
+          galleryItems: [
+            {
+              label: '风险等级',
+              value: '${warnLevel}',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      table: [],
+      list: [
+        {
+          type: 'E',
+          readFrom: 'arrayCount',
+          items: [
+            {
+              label: '一氧化碳',
+              value: '${coVal}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '二氧化碳',
+              value: '${co2Val}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '氧气',
+              value: '${o2Val}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '温度',
+              value: '${tempVal}',
+              color: 'blue',
+              info: '',
+            },
+          ],
+        },
+      ],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: '',
+        },
+      ],
+      // mock: BDfireMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:510px;',
+      version: '原版',
+      position: 'top:0px;right:15px',
+    },
+  },
+  {
+    deviceType: 'aqjkArray',
+    moduleName: '安全监控系统',
+    pageType: 'fire',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'table',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [
+        {
+          type: 'C',
+          readFrom: 'aqjkArray',
+          columns: [
+            {
+              name: '测点位置',
+              prop: 'strinstallpos',
+            },
+            {
+              name: '温度',
+              prop: 'nowVal',
+            },
+            {
+              name: '预警级别',
+              prop: 'warnLevel',
+            },
+          ],
+        },
+      ],
+      list: [],
+      complex_list: [],
+      preset: [],
+      // mock: BDfireMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:260px;',
+      version: '原版',
+      position: 'bottom:15px;right:15px',
+    },
+  },
+];
+export const testConfigVentRealtime: Config[] = [
+  {
+    deviceType: 'fanmain',
+    moduleName: '主通风机系统',
+    pageType: 'vent_realtime',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: true,
+          value: '运行风机:${readData.Fan1StartStatus}',
+          trans: {
+            '1': '一号',
+            '0': '二号',
+          },
+        },
+      },
+      background: {
+        show: false,
+        type: 'image',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'qh_curve',
+            basis: '67%',
+          },
+          {
+            name: 'board',
+            basis: '33%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'D',
+          readFrom: '',
+          layout: 'label-top',
+          items: [
+            {
+              label: '风量(m³/min)',
+              trans: {
+                '0': '${readData.Fan2_FanFlow}',
+                '1': '${readData.Fan1_FanFlow}',
+              },
+              value: '${readData.Fan1StartStatus}',
+            },
+            {
+              label: '负压(Pa)',
+              trans: {
+                '0': '${readData.Fan2FanPre}',
+                '1': '${readData.Fan1FanPre}',
+              },
+              value: '${readData.Fan1StartStatus}',
+            },
+            {
+              label: '漏风率(%)',
+              value: '${leakage}',
+            },
+          ],
+        },
+      ],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: '',
+          fan1Prop: ['readData.Fan1_FanFlow', 'readData.Fan1FanPre'],
+          fan2Prop: ['readData.Fan2_FanFlow', 'readData.Fan2FanPre'],
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
+    },
+    showStyle: {
+      size: 'width:470px;height:280px;',
+      version: '原版',
+      position: 'top:60px;left:0;',
+    },
+  },
+  {
+    deviceType: 'fanlocal',
+    moduleName: '局部通风机系统',
+    pageType: 'vent_realtime',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '运行风机:${readData.Fan1StartStatus}',
+          trans: {
+            '1': '一号',
+            '0': '二号',
+          },
+        },
+      },
+      background: {
+        show: false,
+        type: 'image',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      chart: [
+        {
+          type: 'bar_cylinder_wide',
+          readFrom: '',
+          legend: { show: false },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '(m³/min)', position: 'left' }],
+          series: [
+            { readFrom: 'chartData', xprop: 'x', yprop: 'yMock', label: '风量' },
+            // { readFrom: '', xprop: 'x', yprop: 'y2', label: '风量' },
+          ],
+        },
+      ],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanlocal',
+    },
+    showStyle: {
+      size: 'width:470px;height:280px;',
+      version: '原版',
+      position: 'top:350px;left:0;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '通风设施远程控制',
+    pageType: 'vent_realtime',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'image',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'device_alarm',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: 'device',
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=gate_xinJianFuXieJin',
+    },
+    showStyle: {
+      size: 'width:470px;height:280px;',
+      version: '原版',
+      position: 'top:640px;left:0;',
+    },
+  },
+  {
+    deviceType: 'sys_wind',
+    moduleName: '风量监测',
+    pageType: 'vent_realtime',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      table: [],
+      preset: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      chart: [
+        {
+          type: 'bar',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [
+            { show: true, name: '风量(m³/min)', position: 'left' },
+            { show: true, name: '风速(m/s)', position: 'right' },
+          ],
+          dataZoom: [
+            {
+              show: true,
+              end: 20,
+            },
+          ],
+          series: [
+            { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.m3', label: '风量' },
+            { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.va', label: '风速' },
+          ],
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=windrect',
+    },
+    showStyle: {
+      size: 'width:1000px;height:280px;',
+      version: '原版',
+      position: 'top:640px;left:460px;',
+    },
+  },
+  {
+    deviceType: 'sys_majorpath',
+    moduleName: '关键通风路线',
+    pageType: 'vent_realtime',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${devicePos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'chart',
+            basis: '67%',
+          },
+          {
+            name: 'board',
+            basis: '33%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'D',
+          readFrom: 'majorpath',
+          layout: 'label-top',
+          items: [
+            {
+              label: '风量(m³/min)',
+              value: '${m3_total}',
+            },
+            {
+              label: '矿井阻力(Pa)',
+              value: '${drag_total}',
+            },
+            {
+              label: '等积孔',
+              value: '${dengjikong}',
+            },
+          ],
+        },
+      ],
+      complex_list: [],
+      gallery: [],
+      list: [],
+      table: [],
+      chart: [
+        {
+          type: 'pie_drag',
+          readFrom: '',
+          legend: { show: false },
+          xAxis: [{ show: false }],
+          yAxis: [{ show: false, name: '风量', position: 'left' }],
+          series: [{ readFrom: 'piechart', xprop: 'label', yprop: 'val', label: '-' }],
+        },
+      ],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=sys_majorpath',
+    },
+    showStyle: {
+      size: 'width:470px;height:280px;',
+      version: '原版',
+      position: 'top:60px;right:0;',
+    },
+  },
+  {
+    deviceType: 'sys_surface_caimei',
+    moduleName: '工作面智能监控',
+    pageType: 'vent_realtime',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${devicePos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'chart',
+            basis: '65%',
+          },
+          {
+            name: 'board',
+            basis: '35%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'B',
+          readFrom: '',
+          layout: 'label-top',
+          items: [
+            {
+              label: '进风(m³/min)',
+              value: '${jin}',
+            },
+            {
+              label: '回风(m³/min)',
+              value: '${hui}',
+            },
+            // {
+            // label: '需风量(m³/min)',
+            // value: '${xufengliang}',
+            // },
+          ],
+        },
+      ],
+      list: [],
+      preset: [],
+      table: [],
+      gallery: [],
+      chart: [
+        {
+          type: 'line',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '风量(m³/min)', position: 'left' }],
+          series: [
+            { readFrom: 'history', xprop: 'time', yprop: 'jin', label: '进风' },
+            { readFrom: 'history', xprop: 'time', yprop: 'hui', label: '回风' },
+          ],
+        },
+      ],
+      gallery_list: [],
+      complex_list: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=sys_surface_caimei&deviceid=${deviceID}',
+    },
+    showStyle: {
+      size: 'width:470px;height:280px;',
+      version: '原版',
+      position: 'top:350px;right:0;',
+    },
+  },
+  {
+    deviceType: 'warn',
+    moduleName: '预警监测',
+    pageType: 'vent_realtime',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: true,
+          value: '网络异常:${warn[0].netstatus.val}',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'list',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [
+        {
+          type: 'timeline',
+          readFrom: 'warn[0]',
+          items: [
+            {
+              label: '报警',
+              value: '${alarm.val}',
+              info: '',
+              color: 'red',
+            },
+            {
+              label: '重大风险预警',
+              value: '${red.val}',
+              info: '',
+              color: 'red',
+            },
+            {
+              label: '较大风险预警',
+              value: '${orange.val}',
+              info: '',
+              color: 'orange',
+            },
+            {
+              label: '一般风险预警',
+              value: '${yellow.val}',
+              info: '',
+              color: 'yellow',
+            },
+            {
+              label: '低风险预警',
+              value: '${blue.val}',
+              info: '',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      preset: [],
+      table: [],
+      gallery: [],
+      chart: [],
+      gallery_list: [],
+      complex_list: [],
+      to: '/monitorChannel/monitor-alarm-home',
+    },
+    showStyle: {
+      size: 'width:470px;height:280px;',
+      version: '原版',
+      position: 'top:640px;right:0;',
+    },
+  },
+];
+
+export const testConfigFusionGreen: Config[] = [
+  {
+    deviceType: 'ventWarn',
+    moduleName: '通风监测预警',
+    pageType: 'fusion-warn-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '20%',
+          },
+          {
+            name: 'dz_chart',
+            basis: '80%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'J',
+          readFrom: 'ventWarn',
+          layout: 'val-top',
+          items: [
+            {
+              label: '总进风量',
+              dw: '(m³/min)',
+              value: '${ventJf}',
+            },
+            {
+              label: '总回风量',
+              dw: '(m³/min)',
+              value: '${ventHf}',
+            },
+            {
+              label: '总需风量',
+              dw: '(m³/min)',
+              value: '${ventXf}',
+            },
+          ],
+        },
+      ],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'ventData',
+          echartOption: {
+            colorList: ['#ff0000', '#ff7700', '#d8b66f', '#dbbf2e', '#61b4c5'],
+          },
+        },
+      ],
+      to: '/ventilate/warn/home',
+    },
+    showStyle: {
+      size: 'width:420px;height:400px;',
+      version: '原版',
+      position: 'top:0px;left:15px',
+    },
+  },
+  {
+    deviceType: 'deviceWarn',
+    moduleName: '设备监测预警',
+    pageType: 'fusion-warn-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'dz_list',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'deviceWarn',
+          listOption: {
+            fanmain: {
+              url: getThemifyImagesURL('vent/alarm-icons/zfj.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'fanmain_all',
+              warnCount: 'fanmain_warn',
+              closeCount: 'fanmain_close',
+            },
+            fanlocal: {
+              url: getThemifyImagesURL('vent/alarm-icons/jbfj.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'fanlocal_all',
+              warnCount: 'fanlocal_warn',
+              closeCount: 'fanlocal_close',
+            },
+            bundletube: {
+              url: getThemifyImagesURL('vent/alarm-icons/sgjc.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'bundletube_all',
+              warnCount: 'bundletube_warn',
+              closeCount: 'bundletube_close',
+            },
+            fanlocaldp: {
+              url: getThemifyImagesURL('vent/alarm-icons/jbfj-db.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'fanlocaldp_all',
+              warnCount: 'fanlocaldp_warn',
+              closeCount: 'fanlocaldp_close',
+            },
+            gate: {
+              url: getThemifyImagesURL('vent/alarm-icons/fm-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'gate_all',
+              warnCount: 'gate_warn',
+              closeCount: 'gate_close',
+            },
+            window: {
+              url: getThemifyImagesURL('vent/alarm-icons/fc-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'window_all',
+              warnCount: 'window_warn',
+              closeCount: 'window_close',
+            },
+            windrect: {
+              url: getThemifyImagesURL('vent/alarm-icons/dscf-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'windrect_all',
+              warnCount: 'windrect_warn',
+              closeCount: 'windrect_close',
+            },
+            forcFan: {
+              url: getThemifyImagesURL('vent/alarm-icons/yf-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'forcFan_all',
+              warnCount: 'forcFan_warn',
+              closeCount: 'forcFan_close',
+            },
+            spray: {
+              url: getThemifyImagesURL('vent/alarm-icons/pl-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'spray_all',
+              warnCount: 'spray_warn',
+              closeCount: 'spray_close',
+            },
+            dustdev: {
+              url: getThemifyImagesURL('vent/alarm-icons/pf-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'dustdev_all',
+              warnCount: 'dustdev_warn',
+              closeCount: 'dustdev_close',
+            },
+            nitrogen: {
+              url: getThemifyImagesURL('vent/alarm-icons/zd-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'nitrogen_all',
+              warnCount: 'nitrogen_warn',
+              closeCount: 'nitrogen_close',
+            },
+            pulping: {
+              url: getThemifyImagesURL('vent/alarm-icons/zj-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'pulping_all',
+              warnCount: 'pulping_warn',
+              closeCount: 'pulping_close',
+            },
+            atomizing: {
+              url: getThemifyImagesURL('vent/alarm-icons/pw-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'atomizing_all',
+              warnCount: 'atomizing_warn',
+              closeCount: 'atomizing_close',
+            },
+            dustsensor: {
+              url: getThemifyImagesURL('vent/alarm-icons/cgq-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'dustsensor_all',
+              warnCount: 'dustsensor_warn',
+              closeCount: 'dustsensor_close',
+            },
+            gas: {
+              url: getThemifyImagesURL('vent/alarm-icons/ccb-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'gas_all',
+              warnCount: 'gas_warn',
+              closeCount: 'gas_close',
+            },
+            pump: {
+              url: getThemifyImagesURL('vent/alarm-icons/ccb-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'pump_all',
+              warnCount: 'pump_warn',
+              closeCount: 'pump_close',
+            },
+            modelsensor: {
+              url: getThemifyImagesURL('vent/alarm-icons/cf-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'modelsensor_all',
+              warnCount: 'modelsensor_warn',
+              closeCount: 'modelsensor_close',
+            },
+          },
+        },
+      ],
+      to: '/device/warn/home',
+    },
+    showStyle: {
+      size: 'width:420px;height:400px;',
+      version: '原版',
+      position: 'top:415px;left:15px',
+    },
+  },
+  {
+    deviceType: 'fusionManageInfo',
+    moduleName: '火灾监测预警',
+    pageType: 'fireInfos',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '35%',
+          },
+          {
+            name: 'dz_card',
+            basis: '65%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'K',
+          readFrom: 'fireInfos',
+          layout: 'label-top',
+          items: [
+            {
+              label: '内因火灾',
+              value: '',
+            },
+            {
+              label: '外因火灾',
+              value: '',
+            },
+          ],
+        },
+      ],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'fireInfos',
+          leftTitle: {
+            address: '监测位置',
+            gradewarn: '预警等级',
+            smoke: '煤自燃阶段',
+          },
+          rightTitle: {
+            temp: '温度',
+            smokeing: '烟雾',
+            fire: '火焰',
+            comax: 'CO最大值(ppm)',
+          },
+        },
+      ],
+      to: '/fire/warn/home',
+    },
+    showStyle: {
+      size: 'width:420px;height:400px;',
+      version: '原版',
+      position: 'top:0px;right:15px',
+    },
+  },
+  {
+    deviceType: 'fusionManageInfo',
+    moduleName: '粉尘监测预警',
+    pageType: 'dustInfo',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'dz_dust',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'dustInfo',
+          echartOption: {
+            colorList: [
+              ['rgba(63, 124, 136, 1)', 'rgba(77, 193, 211, 1)'],
+              ['rgba(145, 129, 47, 1)', 'rgba(211, 184, 46, 1)'],
+              ['rgba(159, 121, 69, 1)', 'rgba(226, 173, 101, 1)'],
+              ['rgba(163, 90, 25, 1)', 'rgba(240, 114, 4, 1)'],
+              ['rgba(158, 13, 13, 1)', 'rgba(239, 2, 2, 1)'],
+            ],
+            grid: {
+              top: '8%',
+              left: '5%',
+              right: '5%',
+              bottom: '5%',
+              containLabel: true,
+            },
+            axisLineX: {
+              show: true,
+              lineStyle: {
+                // width: 1,
+                color: 'rgba(34, 55, 81,.7)',
+              },
+            },
+            axisLabelX: {
+              fontSize: 14,
+              interval: 0,
+              textStyle: {
+                color: '#FFF', //更改坐标轴文字颜色
+                fontSize: 12, //更改坐标轴文字大小
+              },
+            },
+            splitLineY: {
+              show: true,
+              lineStyle: {
+                // type: 'dashed',
+                color: 'rgba(34, 55, 81,.7)',
+              },
+            },
+            axisLabelY: {
+              fontSize: 14,
+              textStyle: {
+                color: '#FFF', //更改坐标轴文字颜色
+                fontSize: 12, //更改坐标轴文字大小
+              },
+            },
+          },
+        },
+      ],
+      to: '/dust/warn/home',
+    },
+    showStyle: {
+      size: 'width:420px;height:400px;',
+      version: '原版',
+      position: 'top:415px;right:15px',
+    },
+  },
+  {
+    deviceType: 'fusionManageInfo',
+    moduleName: '瓦斯监测预警',
+    pageType: 'gasData',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'dz_gas',
+            basis: '50%',
+          },
+          {
+            name: 'dz_gas',
+            basis: '50%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'gasData',
+          type: 'A',
+          titleData: {
+            label: '安全监测系统监测点',
+            value: 'safety_sum',
+          },
+        },
+        {
+          readFrom: 'gasData',
+          type: 'B',
+          titleData: {
+            label: '瓦斯抽采系统监测点',
+            value: 'gas_sum',
+          },
+        },
+      ],
+      to: '/gas/warn/home',
+    },
+    showStyle: {
+      size: 'width:990px;height:170px;',
+      version: '原版',
+      position: 'bottom:15px;left:450px',
+    },
+  },
+];
+
+export const testConfigVentNew: Config[] = [
+  {
+    deviceType: 'fanmain',
+    moduleName: '主通风机系统',
+    pageType: 'vent_new',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: true,
+          value: '风机:${readData.Fan1StartStatus}',
+          trans: {
+            '1': '1#风机',
+            '0': '2#风机',
+          },
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '/video/mainFan.mp4',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'qh_curve',
+            basis: '67%',
+          },
+          {
+            name: 'board',
+            basis: '33%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'New',
+          readFrom: 'readData',
+          layout: 'new-top',
+          items: [
+            {
+              label: '风量(m³/min)',
+              value: '${m3}',
+            },
+            {
+              label: '风压(Pa)',
+              value: '${DataPa}',
+              // trans: {
+              // '1': '${Fan1FreqHz}',
+              // '0': '${Fan1FreqHz}',
+              // },
+            },
+            {
+              label: '漏风率(%)',
+              value: '-',
+            },
+          ],
+        },
+      ],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: '',
+          fan1Prop: ['flow_merge', 'fy_merge'],
+          fan2Prop: ['flow_merge', 'fy_merge'],
+        },
+      ],
+    },
+    showStyle: {
+      size: 'width:440px;height:280px;',
+      version: '原版',
+      position: 'top:60px;left:0;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '通风设施远程控制',
+    pageType: 'vent_new',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '/video/fanLocal.webm',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'device_alarm',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: 'device',
+        },
+      ],
+      mock: {
+        device: {
+          fanmain: {
+            maxLevel: 0,
+            name: '主扇',
+            totalCount: 0,
+            count: 0,
+            netstatus: 0,
+          },
+          fanlocal: {
+            maxLevel: 0,
+            name: '局扇',
+            totalCount: 0,
+            count: 0,
+            netstatus: 0,
+          },
+          gate: {
+            maxLevel: 0,
+            name: '风门',
+            totalCount: 0,
+            count: 0,
+            netstatus: 0,
+          },
+          window: {
+            maxLevel: 0,
+            name: '风窗',
+            totalCount: 0,
+            count: 0,
+            netstatus: 0,
+          },
+        },
+      },
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=gate_xinJianFuXieJin',
+    },
+    showStyle: {
+      size: 'width:440px;height:280px;',
+      version: '原版',
+      position: 'top:350px;left:0;',
+    },
+  },
+  {
+    deviceType: 'warn',
+    moduleName: '预警监测',
+    pageType: 'vent_new',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: true,
+          value: '网络异常:${warn[0].netstatus.val}',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'list',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [
+        {
+          type: 'timelineNew',
+          readFrom: 'warn[0]',
+          items: [
+            {
+              label: '重大风险预警',
+              value: '${red.val}',
+              info: '',
+              color: 'red',
+            },
+            {
+              label: '较大风险预警',
+              value: '${orange.val}',
+              info: '',
+              color: 'orange',
+            },
+            {
+              label: '一般风险预警',
+              value: '${yellow.val}',
+              info: '',
+              color: 'yellow',
+            },
+            {
+              label: '低风险预警',
+              value: '${blue.val}',
+              info: '',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      preset: [],
+      table: [],
+      gallery: [],
+      chart: [],
+      gallery_list: [],
+      complex_list: [],
+      to: '/monitorChannel/monitor-alarm-home',
+    },
+    showStyle: {
+      size: 'width:440px;height:280px;',
+      version: '新版',
+      position: 'top:640px;left:0;',
+    },
+  },
+  {
+    deviceType: 'sys_wind',
+    moduleName: '风量监测',
+    pageType: 'vent_new',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      table: [],
+      preset: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      chart: [
+        {
+          type: 'bar',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [
+            { show: true, name: '风量(m³/min)', position: 'left' },
+            { show: true, name: '风速(m/s)', position: 'right' },
+          ],
+          dataZoom: [
+            {
+              show: true,
+              end: 20,
+            },
+          ],
+          series: [
+            { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.m3', label: '风量' },
+            { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.va', label: '风速' },
+          ],
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=windrect',
+    },
+    showStyle: {
+      size: 'width:1000px;height:260px;',
+      version: '原版',
+      position: 'bottom:8px;left:460px;',
+    },
+  },
+  {
+    deviceType: 'fanlocal',
+    moduleName: '局部通风机系统',
+    pageType: 'vent_new',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: true,
+          value: '风机:${readData.Fan1StartStatus}',
+          trans: {
+            '1': '1#风机',
+            '0': '2#风机',
+          },
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '/video/fanLocal.mp4',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          // {
+          // name: 'board',
+          // basis: '25%',
+          // },
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'New1',
+          readFrom: 'readData',
+          layout: 'new1-top',
+          items: [
+            {
+              label: '风筒出口风量',
+              value: '${windQuantity1}',
+            },
+            {
+              label: '风机吸入风量',
+              value: '${windQuantity2}',
+            },
+            {
+              label: '百米漏风率(%)',
+              value: '${windQuantity1}',
+            },
+          ],
+        },
+      ],
+      list: [],
+      chart: [
+        {
+          type: 'bar_cylinder_wide',
+          readFrom: '',
+          legend: { show: false },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '(m³/min)', position: 'left' }],
+          series: [{ readFrom: 'chartData', xprop: 'x', yprop: 'y', label: '风量' }],
+        },
+      ],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanlocal',
+    },
+    showStyle: {
+      size: 'width:440px;height:265px;',
+      version: '原版',
+      position: 'top:60px;right:0;',
+    },
+  },
+  {
+    deviceType: 'sys_majorpath',
+    moduleName: '关键通风路线',
+    pageType: 'vent_new',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${devicePos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: true,
+        type: 'image',
+        link: '/src/assets/images/vent/homeNew/gjBG.png',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '100%',
+            pageType: 'vent_New',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'New2',
+          readFrom: 'readData',
+          layout: 'new2-top',
+          items: [
+            {
+              label: '风量(m³/min)',
+              value: '${retM3_merge.value}',
+            },
+            {
+              label: '矿井阻力(Pa)',
+              value: '${fy_merge.value}',
+            },
+            {
+              label: '等积孔',
+              value: '${dengjikong.value}',
+            },
+          ],
+        },
+      ],
+      complex_list: [],
+      gallery: [],
+      list: [],
+      table: [],
+      chart: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=sys_majorpath&deviceid=${deviceID}',
+    },
+    showStyle: {
+      size: 'width:440px;height:310px;',
+      version: '新版',
+      position: 'top:335px;right:0;',
+    },
+  },
+  {
+    deviceType: 'sys_surface_caimei',
+    moduleName: '工作面智能监控',
+    pageType: 'vent_new',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${devicePos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+          // {
+          // name: 'board',
+          // basis: '25%',
+          // },
+        ],
+      },
+      board: [
+        {
+          type: 'New3',
+          readFrom: '',
+          layout: 'new3-top',
+          items: [
+            {
+              label: '进风(m³/min)',
+              value: '${faceIntM3}',
+            },
+            {
+              label: '回风(m³/min)',
+              value: '${faceRetM3}',
+            },
+          ],
+        },
+      ],
+      list: [],
+      preset: [],
+      table: [],
+      gallery: [],
+      chart: [
+        {
+          type: 'line_area',
+          readFrom: '',
+          legend: { show: false },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '', position: 'left' }],
+          series: [
+            { readFrom: 'history_report', xprop: 'time', yprop: 'faceIntM3', label: '进风' },
+            { readFrom: 'history_report', xprop: 'time', yprop: 'faceRetM3', label: '回风' },
+          ],
+        },
+      ],
+      gallery_list: [],
+      complex_list: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=sys_surface_caimei&deviceid=${deviceID}',
+    },
+    showStyle: {
+      size: 'width:440px;height:270px;',
+      version: '新版',
+      position: 'top:650px;right:0;',
+    },
+  },
+];
+
+export const testConfigWarnMonitor: Config[] = [
+  {
+    deviceType: 'ventWarn',
+    moduleName: '通风监测预警',
+    pageType: 'fusion-warn-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '25%',
+          },
+          {
+            name: 'yj_ventWarn',
+            basis: '75%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'U',
+          readFrom: 'ventWarn',
+          layout: 'label-top',
+          items: [
+            {
+              label: '总进风量',
+              dw: '(m³/min)',
+              value: '${ventJf}',
+            },
+            {
+              label: '总回风量',
+              dw: '(m³/min)',
+              value: '${ventHf}',
+            },
+            {
+              label: '总需风量',
+              dw: '(m³/min)',
+              value: '${ventXf}',
+            },
+          ],
+        },
+      ],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'ventData',
+        },
+      ],
+      // mock: BDfireMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:400px;',
+      version: '原版',
+      position: 'top:70px;left:15px',
+    },
+  },
+  {
+    deviceType: 'fireWarnInfo',
+    moduleName: '火灾监测预警',
+    pageType: 'fusion-warn-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '30%',
+          },
+          {
+            name: 'dz_card',
+            basis: '70%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'T',
+          readFrom: 'fireInfos',
+          layout: 'label-top',
+          items: [
+            {
+              label: '内因火灾',
+              value: '',
+            },
+            {
+              label: '外因火灾',
+              value: '',
+            },
+          ],
+        },
+      ],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'fireInfos',
+          leftTitle: {
+            address: '监测位置',
+            gradewarn: '预警等级',
+            smoke: '煤自燃阶段',
+          },
+          rightTitle: {
+            temp: '温度',
+            smokeing: '烟雾',
+            fire: '火焰',
+            comax: 'CO最大值(ppm)',
+          },
+        },
+      ],
+      // mock: BDfireMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:420px;',
+      version: '原版',
+      position: 'top:490px;left:15px',
+    },
+  },
+  {
+    deviceType: 'deviceWarn',
+    moduleName: '瓦斯监测预警',
+    pageType: 'gasData',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'yj_gas',
+            basis: '50%',
+          },
+          {
+            name: 'yj_gas',
+            basis: '50%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'gasData',
+          type: 'A',
+          titleData: {
+            label: '安全监测系统监测点',
+            value: 'safety_sum',
+          },
+        },
+        {
+          readFrom: 'gasData',
+          type: 'B',
+          titleData: {
+            label: '瓦斯抽采系统监测点',
+            value: 'gas_sum',
+          },
+        },
+      ],
+      // mock: BDfireMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:400px;',
+      version: '原版',
+      position: 'top:70px;right:15px',
+    },
+  },
+  {
+    deviceType: 'deviceManageInfo',
+    moduleName: '设备监测预警',
+    pageType: 'fusion-warn-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'dz_list',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'deviceWarn',
+          listOption: {
+            fanmain: {
+              url: getThemifyImagesURL('vent/alarm-icons/zfj.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'fanmain_all',
+              warnCount: 'fanmain_warn',
+              closeCount: 'fanmain_close',
+            },
+            fanlocal: {
+              url: getThemifyImagesURL('vent/alarm-icons/jbfj.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'fanlocal_all',
+              warnCount: 'fanlocal_warn',
+              closeCount: 'fanlocal_close',
+            },
+            bundletube: {
+              url: getThemifyImagesURL('vent/alarm-icons/sgjc.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'bundletube_all',
+              warnCount: 'bundletube_warn',
+              closeCount: 'bundletube_close',
+            },
+            fanlocaldp: {
+              url: getThemifyImagesURL('vent/alarm-icons/jbfj-db.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'fanlocaldp_all',
+              warnCount: 'fanlocaldp_warn',
+              closeCount: 'fanlocaldp_close',
+            },
+            gate: {
+              url: getThemifyImagesURL('vent/alarm-icons/fm-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'gate_all',
+              warnCount: 'gate_warn',
+              closeCount: 'gate_close',
+            },
+            window: {
+              url: getThemifyImagesURL('vent/alarm-icons/fc-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'window_all',
+              warnCount: 'window_warn',
+              closeCount: 'window_close',
+            },
+            windrect: {
+              url: getThemifyImagesURL('vent/alarm-icons/dscf-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'windrect_all',
+              warnCount: 'windrect_warn',
+              closeCount: 'windrect_close',
+            },
+            forcFan: {
+              url: getThemifyImagesURL('vent/alarm-icons/yf-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'forcFan_all',
+              warnCount: 'forcFan_warn',
+              closeCount: 'forcFan_close',
+            },
+            spray: {
+              url: getThemifyImagesURL('vent/alarm-icons/pl-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'spray_all',
+              warnCount: 'spray_warn',
+              closeCount: 'spray_close',
+            },
+            dustdev: {
+              url: getThemifyImagesURL('vent/alarm-icons/pf-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'dustdev_all',
+              warnCount: 'dustdev_warn',
+              closeCount: 'dustdev_close',
+            },
+            nitrogen: {
+              url: getThemifyImagesURL('vent/alarm-icons/zd-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'nitrogen_all',
+              warnCount: 'nitrogen_warn',
+              closeCount: 'nitrogen_close',
+            },
+            pulping: {
+              url: getThemifyImagesURL('vent/alarm-icons/zj-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'pulping_all',
+              warnCount: 'pulping_warn',
+              closeCount: 'pulping_close',
+            },
+            atomizing: {
+              url: getThemifyImagesURL('vent/alarm-icons/pw-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'atomizing_all',
+              warnCount: 'atomizing_warn',
+              closeCount: 'atomizing_close',
+            },
+            dustsensor: {
+              url: getThemifyImagesURL('vent/alarm-icons/cgq-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'dustsensor_all',
+              warnCount: 'dustsensor_warn',
+              closeCount: 'dustsensor_close',
+            },
+            gas: {
+              url: getThemifyImagesURL('vent/alarm-icons/ccb-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'gas_all',
+              warnCount: 'gas_warn',
+              closeCount: 'gas_close',
+            },
+            pump: {
+              url: getThemifyImagesURL('vent/alarm-icons/ccb-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'pump_all',
+              warnCount: 'pump_warn',
+              closeCount: 'pump_close',
+            },
+            modelsensor: {
+              url: getThemifyImagesURL('vent/alarm-icons/cf-green.png'),
+              text: '',
+              allText: '总数',
+              warnText: '报警数',
+              closeText: '断开数',
+              allCount: 'modelsensor_all',
+              warnCount: 'modelsensor_warn',
+              closeCount: 'modelsensor_close',
+            },
+          },
+        },
+      ],
+      // mock: BDfireMock,
+    },
+    showStyle: {
+      size: 'width:1020px;height:240px;',
+      version: '原版',
+      position: 'bottom:15px;left:450px',
+    },
+  },
+  {
+    deviceType: 'fusionManageInfo',
+    moduleName: '火灾监测预警',
+    pageType: 'fusion-warn-green',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'yj_chart',
+            basis: '90%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'dustInfo',
+          echartOption: {
+            colorList: [
+              ['rgba(78, 8, 10, 1)', 'rgba(255, 0, 0, 1)'],
+              ['rgba(78, 44, 10, 1)', 'rgba(255, 119, 0, 1)'],
+              ['rgba(72, 62, 41, 1)', 'rgba(234, 179, 105, 1)'],
+              ['rgba(78, 73, 10, 1)', 'rgba(255, 214, 0, 1)'],
+              ['rgba(24, 60, 76, 1)', 'rgba(78, 171, 217, 1)'],
+            ],
+            grid: {
+              top: '8%',
+              left: '5%',
+              right: '5%',
+              bottom: '5%',
+              containLabel: true,
+            },
+            axisLineX: {
+              show: true,
+              lineStyle: {
+                // width: 1,
+                color: 'rgba(34, 55, 81,.7)',
+              },
+            },
+            axisLabelX: {
+              fontSize: 14,
+              interval: 0,
+              textStyle: {
+                color: '#FFF', //更改坐标轴文字颜色
+                fontSize: 12, //更改坐标轴文字大小
+              },
+            },
+            splitLineY: {
+              show: true,
+              lineStyle: {
+                // type: 'dashed',
+                color: 'rgba(34, 55, 81,.7)',
+              },
+            },
+            axisLabelY: {
+              fontSize: 14,
+              textStyle: {
+                color: '#FFF', //更改坐标轴文字颜色
+                fontSize: 12, //更改坐标轴文字大小
+              },
+            },
+          },
+        },
+      ],
+      // mock: BDfireMock,
+    },
+    showStyle: {
+      size: 'width:420px;height:420px;',
+      version: '原版',
+      position: 'top:490px;right:15px',
+    },
+  },
+];
+
+export const menuList: any[] = [
+  { name: '灾害预警', MenuItemList: [] },
+  { name: '通风预警', MenuItemList: [] },
+  { name: '火灾预警', MenuItemList: [] },
+  { name: '粉尘预警', MenuItemList: [] },
+];
+export const testConfigBDFire: Config[] = [
+  {
+    deviceType: 'fireManageInfo',
+    moduleName: '重点区域风险监测',
+    pageType: 'BD_fire',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '50%',
+          },
+          {
+            name: 'complex_list',
+            basis: '50%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'H',
+          readFrom: 'fireManageInfo',
+          layout: 'label-top',
+          items: [
+            {
+              label: '内因风险等级',
+              value: '${nyWarnLevel}',
+            },
+            {
+              label: '外因风险等级',
+              value: '${wyWarnLevel}',
+            },
+          ],
+        },
+      ],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [
+        {
+          type: 'D',
+          readFrom: 'fireManageInfo.sysList',
+          mapFromData: true,
+          items: [
+            {
+              title: '${sysNamme}',
+              contents: [
+                {
+                  label: '风险监测',
+                  value: '${warnLevel}',
+                  color: 'lightgreen',
+                  info: '',
+                },
+                {
+                  label: '最高温度',
+                  value: '${maxVal}',
+                  color: 'lightgreen',
+                  info: '',
+                },
+              ],
+            },
+          ],
+        },
+      ],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:420px;height:270px;',
+      version: '保德',
+      position: 'top:105px;left:10px;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '开采煤层自燃发火特性',
+    pageType: 'BD_fire',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'table',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [
+        {
+          type: 'A',
+          readFrom: 'mockTable',
+          columns: [
+            {
+              name: '煤层',
+              prop: 'a',
+            },
+            {
+              name: '自燃倾向性',
+              prop: 'b',
+            },
+            {
+              name: '最短发火期',
+              prop: 'c',
+            },
+            {
+              name: '最小推进速度',
+              prop: 'd',
+            },
+          ],
+        },
+      ],
+      list: [],
+      complex_list: [],
+      preset: [],
+      mock: {
+        mockTable: [
+          {
+            a: '8煤',
+            b: '自燃',
+            c: '123天',
+            d: '0.87md',
+          },
+        ],
+      },
+    },
+    showStyle: {
+      size: 'width:420px;height:130px;',
+      version: '保德',
+      position: 'top:390px;left:10px;',
+    },
+  },
+  {
+    deviceType: 'pdArray',
+    moduleName: '带式输送机防灭火监控系统',
+    pageType: 'BD_fire',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${systemname}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '30%',
+          },
+          {
+            name: 'chart',
+            basis: '70%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'F',
+          layout: 'label-top',
+          readFrom: 'arrayCount',
+          items: [
+            {
+              label: '光纤预警',
+              value: '${[0].val}℃',
+            },
+            {
+              label: '一氧化碳预警',
+              value: '${[1].val}ppm',
+            },
+            {
+              label: '烟雾预警',
+              value: '${[2].val}',
+            },
+          ],
+        },
+      ],
+      chart: [
+        {
+          type: 'line_smooth',
+          readFrom: 'arrayFiber',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '温度(℃)', position: 'left' }],
+          series: [
+            {
+              label: '${strinstallpos}',
+              readFrom: 'fibreTemperatureArr',
+              xprop: 'pos',
+              yprop: 'value',
+            },
+          ],
+        },
+      ],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '保德',
+      position: 'top:535px;left:10px;',
+    },
+  },
+  {
+    deviceType: 'sgGxObj',
+    moduleName: '工作面束管监测',
+    pageType: 'BD_fire',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: 'devSgjc',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'list',
+            basis: '60%',
+          },
+          {
+            name: 'blast_delta',
+            basis: '40%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [
+        {
+          type: 'I',
+          readFrom: '',
+          items: [
+            {
+              label: 'CO',
+              value: '${coVal}',
+              color: 'lightgreen',
+              info: '一氧化碳',
+            },
+            {
+              label: 'CO₂',
+              value: '${co2Val}',
+              color: 'lightgreen',
+              info: '二氧化碳',
+            },
+            {
+              label: 'CH₄',
+              value: '${ch4Val}',
+              color: 'lightgreen',
+              info: '甲烷',
+            },
+            {
+              label: 'C₂H₂',
+              value: '${c2h2Val}',
+              color: 'lightgreen',
+              info: '乙炔',
+            },
+            {
+              // label: 'C₂H₄',
+              label: 'O₂',
+              value: '${o2Val}',
+              color: 'lightgreen',
+              info: '氧气',
+            },
+            {
+              // label: 'O₂',
+              label: 'C₂H₄',
+              value: '${c2h4Val}',
+              color: 'lightgreen',
+              info: '乙烯',
+            },
+            {
+              label: '温度',
+              value: '--',
+              color: 'lightgreen',
+              info: '',
+            },
+            {
+              label: '风险',
+              value: '${warnLevel}',
+              color: 'lightgreen',
+              info: '',
+            },
+          ],
+        },
+      ],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: '',
+        },
+      ],
+    },
+    showStyle: {
+      size: 'width:998px;height:286px;',
+      version: '保德',
+      position: 'bottom:10px;left:445px',
+    },
+  },
+  {
+    deviceType: 'sgGxObj',
+    moduleName: '工作面光纤监测',
+    pageType: 'BD_fire',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: 'devGxcw',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [
+        {
+          type: 'line_smooth',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '温度(℃)', position: 'left' }],
+          series: [
+            {
+              label: '${strinstallpos}',
+              readFrom: 'fibreTemperatureArr',
+              xprop: 'pos',
+              yprop: 'value',
+            },
+          ],
+        },
+      ],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:998px;height:286px;',
+      version: '保德',
+      position: 'bottom:10px;left:445px',
+    },
+  },
+  {
+    deviceType: 'obfObj',
+    moduleName: '密闭采空区监测区域',
+    pageType: 'BD_fire',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: 'obfObjModded',
+        selector: {
+          show: true,
+          value: '${objType}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [
+        {
+          type: 'bar_cylinder',
+          readFrom: '',
+          legend: { show: false },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '', position: 'left' }],
+          series: [
+            {
+              readFrom: 'arrayDev',
+              xprop: 'strinstallpos',
+              yprop: 'val',
+              label: '',
+            },
+          ],
+        },
+      ],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:420px;height:220px;',
+      version: '保德',
+      position: 'top:105px;right:10px;',
+    },
+  },
+  {
+    deviceType: 'dsArray',
+    moduleName: '变电硐室防灭火监控系统',
+    pageType: 'BD_fire',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${systemname}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'list',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [
+        {
+          type: 'H',
+          readFrom: 'arrayCount',
+          items: [
+            {
+              label: '光纤预警',
+              info: '最高温度',
+              value: '${[0].val}℃',
+              color: 'lightgreen',
+            },
+            {
+              label: '一氧化碳预警',
+              info: '最高浓度',
+              value: '${[1].val}ppm',
+              color: 'lightgreen',
+            },
+            {
+              label: '烟雾预警',
+              info: '最高浓度',
+              value: '${[2].val}',
+              color: 'lightgreen',
+            },
+          ],
+        },
+      ],
+      complex_list: [],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:420px;height:220px;',
+      version: '保德',
+      position: 'top:340px;right:10px;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '安全监控系统',
+    pageType: 'BD_fire',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'table',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [
+        {
+          type: 'A',
+          readFrom: 'aqjkArray',
+          columns: [
+            {
+              name: '测点位置',
+              prop: 'strinstallpos',
+            },
+            {
+              name: '温度',
+              prop: 'nowVal',
+            },
+            {
+              name: '预警级别',
+              prop: 'warnLevel',
+            },
+            // {
+            // name: '时间',
+            // prop: 'time',
+            // },
+          ],
+        },
+      ],
+      list: [],
+      complex_list: [],
+      preset: [],
+      mock: {
+        aqjkArray: [
+          {
+            strinstallpos: '安全监控A',
+            nowVal: '33',
+            warnLevel: '低',
+          },
+          {
+            strinstallpos: '安全监控B',
+            nowVal: '33',
+            warnLevel: '低',
+          },
+          {
+            strinstallpos: '安全监控C',
+            nowVal: '33',
+            warnLevel: '低',
+          },
+          {
+            strinstallpos: '安全监控D',
+            nowVal: '33',
+            warnLevel: '低',
+          },
+        ],
+      },
+    },
+    showStyle: {
+      size: 'width:420px;height:240px;',
+      version: '保德',
+      position: 'top:575px;right:10px;',
+    },
+  },
+];
+
+export const testConfigBDDust: Config[] = [
+  {
+    deviceType: 'dustManageInfo',
+    moduleName: '工作面风险监测',
+    pageType: 'BD_dust',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'gallery',
+            basis: '30%',
+          },
+          {
+            name: 'complex_list',
+            basis: '70%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [
+        {
+          type: 'I',
+          readFrom: 'dustManageInfo',
+          items: [
+            {
+              label: '',
+              value: '${totalNum}',
+              color: 'lightgreen',
+            },
+            {
+              label: '低风险',
+              value: '${dfxNum}',
+              color: 'lightgreen',
+            },
+            {
+              label: '一般风险',
+              value: '${ybNum}',
+              color: 'lightgreen',
+            },
+            {
+              label: '较大风险',
+              value: '${jdNum}',
+              color: 'lightgreen',
+            },
+            {
+              label: '重大风险',
+              value: '${zdNum}',
+              color: 'lightgreen',
+            },
+          ],
+        },
+      ],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [
+        {
+          type: 'E',
+          readFrom: 'dustManageInfo.sysList',
+          mapFromData: true,
+          items: [
+            {
+              title: '${sysNamme}',
+              contents: [
+                {
+                  label: '风险监测',
+                  value: '${warnLevel}',
+                  color: 'lightgreen',
+                  info: '',
+                },
+                {
+                  label: '最高粉尘浓度',
+                  value: '${maxVal}',
+                  color: 'lightgreen',
+                  info: '',
+                },
+              ],
+            },
+          ],
+        },
+      ],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:420px;height:430px;',
+      version: '保德',
+      position: 'top:105px;left:10px;',
+    },
+  },
+  {
+    deviceType: 'atomizing',
+    moduleName: '喷雾设备信息',
+    pageType: 'BD_dust',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'table',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [
+        {
+          type: 'A',
+          columns: [
+            {
+              name: '设备名称',
+              prop: 'strinstallpos',
+            },
+            {
+              name: '排污状态',
+              prop: 'airStatus_str',
+            },
+            {
+              name: '应用场景',
+              prop: 'appScenes_str',
+            },
+            {
+              name: '喷雾状态',
+              prop: 'stateSpray_str',
+            },
+          ],
+          readFrom: 'atomizingArray',
+        },
+      ],
+      list: [],
+      complex_list: [],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:420px;height:270px;',
+      version: '保德',
+      position: 'top:550px;left:10px;',
+    },
+  },
+  {
+    deviceType: 'dustDustGraph',
+    moduleName: '综放工作面粉尘浓度',
+    pageType: 'BD_dust',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [
+        {
+          type: 'line_area',
+          readFrom: '',
+          legend: { show: false },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '浓度', position: 'left' }],
+          series: [
+            {
+              label: '${strinstallpos}',
+              readFrom: 'historyList',
+              xprop: 'time',
+              yprop: 'dustval',
+            },
+          ],
+        },
+      ],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:998px;height:270px;',
+      version: '保德',
+      position: 'bottom:10px;left:445px',
+    },
+  },
+  {
+    deviceType: 'atomObj',
+    moduleName: '智能喷雾降尘装置',
+    pageType: 'BD_dust',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'gallery',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [
+        {
+          type: 'E',
+          readFrom: 'atomObj',
+          items: [
+            {
+              label: '设备总数',
+              value: '${totalNum}',
+              color: 'lightgreen',
+            },
+            {
+              label: '喷雾开启数',
+              value: '${atomOpenNum}',
+              color: 'lightgreen',
+            },
+            {
+              label: '连网数量',
+              value: '${openNum}',
+              color: 'lightgreen',
+            },
+            {
+              label: '断网数量',
+              value: '${breakNum}',
+              color: 'lightgreen',
+            },
+          ],
+        },
+      ],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+      to: 'http://10.248.210.154:8801',
+    },
+    showStyle: {
+      size: 'width:420px;height:270px;',
+      version: '保德',
+      position: 'top:0px;right:10px;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '煤尘爆炸性',
+    pageType: 'BD_dust',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '${name}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'board',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'E',
+          readFrom: '',
+          layout: 'val-top',
+          items: [
+            {
+              label: '火焰长度',
+              value: '>400mm',
+            },
+            {
+              label: '抑制煤层爆炸最低岩粉量',
+              value: '85%',
+            },
+            {
+              label: '鉴定结论',
+              value: '有煤层爆炸性',
+            },
+          ],
+        },
+      ],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:420px;height:250px;',
+      version: '保德',
+      position: 'top:285px;right:10px;',
+    },
+  },
+  {
+    deviceType: 'devGbsb',
+    moduleName: '隔爆设施管理台账',
+    pageType: 'BD_dust',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'table',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [
+        {
+          type: 'A',
+          readFrom: 'devGbsb',
+          columns: [
+            {
+              name: '地点',
+              prop: 'strinstallpos',
+            },
+            {
+              name: '吊挂位置',
+              prop: 'addr',
+            },
+            {
+              name: '性质',
+              prop: 'kind',
+            },
+          ],
+        },
+      ],
+      list: [],
+      complex_list: [],
+      preset: [],
+    },
+    showStyle: {
+      size: 'width:420px;height:270px;',
+      version: '保德',
+      position: 'top:550px;right:10px;',
+    },
+  },
+];
+
+//机电硐室
+export const testConfigElectro: Config[] = [
+  {
+    deviceType: 'datalist',
+    moduleName: '球阀',
+    pageType: 'electro-champer',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+          toggleIcon: true,
+        },
+
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'card_list',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      chart: [],
+      gallery: [],
+      gallery_list: [],
+      table: [],
+      list: [],
+      complex_list: [],
+      preset: [
+        {
+          readFrom: 'datalist',
+        },
+      ],
+      to: '/ventilate/warn/home',
+    },
+    showStyle: {
+      size: 'width:380px;height:590px;',
+      version: '原版',
+      position: 'left:0px;top:0px',
+    },
+  },
+  {
+    deviceType: 'coData',
+    moduleName: '一氧化碳',
+    pageType: 'electro-chamber',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'chart',
+            basis: '30%',
+          },
+          {
+            name: 'generalist',
+            basis: '70%',
+          },
+        ],
+      },
+      board: [],
+      list: [
+        {
+          type: 'N',
+          readFrom: 'arrayCount',
+          items: [
+            {
+              label: '分区1',
+              value: '${coVal}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '分区2',
+              value: '${co2Val}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '分区3',
+              value: '${o2Val}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '分区4',
+              value: '${tempVal}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '分区5',
+              value: '${coVal}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '分区6',
+              value: '${co2Val}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '分区7',
+              value: '${o2Val}',
+              color: 'blue',
+              info: '',
+            },
+            {
+              label: '分区8',
+              value: '${tempVal}',
+              color: 'blue',
+              info: '',
+            },
+          ],
+        },
+      ],
+      chart: [
+        {
+          type: 'line',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '(%)', position: 'left' }],
+          series: [
+            { readFrom: 'chartData', xprop: 'time', yprop: 'coRealTime', label: 'CO实时值' },
+            { readFrom: 'chartData', xprop: 'time', yprop: 'coWarn', label: 'CO报警阈值' },
+          ],
+        },
+      ],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [
+        {
+          readFrom: 'tempData',
+        },
+      ],
+      to: '',
+    },
+    showStyle: {
+      size: 'width:380px;height:590px;',
+      version: '原版',
+      position: 'top:0px;right:0px;',
+    },
+  },
+];
+
+export const testConfigVent182: Config[] = [
+  {
+    deviceType: 'fanmain',
+    moduleName: '主通风机系统',
+    pageType: 'vent_182',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: true,
+          value: '运行风机:${readData.Fan1StartStatus}',
+          trans: {
+            '1': '一号',
+            '0': '二号',
+          },
+        },
+      },
+      background: {
+        show: true,
+        type: 'video',
+        link: '/video/mainFan.mp4',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '33%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'A',
+          readFrom: '',
+          layout: 'val-top',
+          items: [
+            {
+              label: '风量(m³/min)',
+              value: '${flow_merge}',
+            },
+            {
+              label: '负压(Pa)',
+              value: '${fy_merge}',
+            },
+            {
+              label: '漏风率(%)',
+              value: '${leakage}',
+            },
+          ],
+        },
+      ],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:60px;left:0;',
+    },
+  },
+  {
+    deviceType: 'fanlocal',
+    moduleName: '局部通风机系统',
+    pageType: 'vent_182',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${strinstallpos}',
+        },
+        slot: {
+          show: true,
+          value: '运行风机:${readData.Fan1StartStatus}',
+          trans: {
+            '1': '一号',
+            '0': '二号',
+          },
+        },
+      },
+      background: {
+        show: true,
+        type: 'video',
+        link: '/video/fanLocal.mp4',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'board',
+            basis: '33%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'A',
+          readFrom: 'readData',
+          layout: 'val-top',
+          items: [
+            {
+              label: '风筒出口风量',
+              value: '${windQuantity1}',
+            },
+            {
+              label: '风机吸入风量',
+              value: '${windQuantity2}',
+            },
+            {
+              label: '频率(Hz)',
+              value: '${Fan1StartStatus}',
+              trans: {
+                '1': '${Fan1fHz}',
+                '0': '${Fan2fHz}',
+              },
+            },
+          ],
+        },
+      ],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanlocal',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:350px;left:0;',
+    },
+  },
+  {
+    deviceType: '',
+    moduleName: '通风设施远程控制',
+    pageType: 'vent_182',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: true,
+        type: 'video',
+        link: '/video/gate.mp4',
+      },
+      layout: {
+        direction: 'row',
+        items: [],
+      },
+      board: [],
+      list: [],
+      chart: [],
+      table: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=gate_xinJianFuXieJin',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:640px;left:0;',
+    },
+  },
+  {
+    deviceType: 'sys_wind',
+    moduleName: '风量监测',
+    pageType: 'vent_182',
+    moduleData: {
+      header: {
+        show: false,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'chart',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [],
+      table: [],
+      preset: [],
+      gallery: [],
+      complex_list: [],
+      gallery_list: [],
+      chart: [
+        {
+          type: 'bar',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [
+            { show: true, name: '风量(m³/min)', position: 'left' },
+            { show: true, name: '风速(m/s)', position: 'right' },
+          ],
+          dataZoom: [
+            {
+              show: true,
+              end: 20,
+            },
+          ],
+          series: [
+            { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.m3', label: '风量' },
+            { readFrom: 'sys_wind', xprop: 'strinstallpos', yprop: 'readData.va', label: '风速' },
+          ],
+        },
+      ],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=windrect',
+    },
+    showStyle: {
+      size: 'width:1100px;height:280px;',
+      version: '原版',
+      position: 'bottom: 8px;left:410px;',
+    },
+  },
+  {
+    deviceType: 'sys_majorpath',
+    moduleName: '关键通风路线',
+    pageType: 'vent_182',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${devicePos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'chart',
+            basis: '67%',
+          },
+          {
+            name: 'board',
+            basis: '33%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'D',
+          readFrom: 'readData',
+          layout: 'label-top',
+          items: [
+            {
+              label: '风量(m³/min)',
+              value: '${retM3_merge.value}',
+            },
+            {
+              label: '矿井阻力(Pa)',
+              value: '${fy_merge.value}',
+            },
+            {
+              label: '等积孔',
+              value: '${dengjikong_merge}',
+            },
+          ],
+        },
+      ],
+      complex_list: [],
+      gallery: [],
+      list: [],
+      table: [],
+      chart: [
+        {
+          type: 'pie_halo',
+          readFrom: '',
+          legend: { show: false, formatter: '{b}\n{primarytext|{c}(Pa)\n{d}%}' },
+          xAxis: [{ show: false }],
+          yAxis: [{ show: false, name: '风量', position: 'left' }],
+          series: [{ readFrom: 'piechart', xprop: 'label', yprop: 'valMock', label: '' }],
+        },
+      ],
+      gallery_list: [],
+      preset: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=sys_majorpath&deviceid=${deviceID}',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:60px;right:0;',
+    },
+  },
+  {
+    deviceType: 'sys_surface_caimei',
+    moduleName: '工作面智能监控',
+    pageType: 'vent_182',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: true,
+          value: '${devicePos}',
+        },
+        slot: {
+          show: false,
+          value: '',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'column',
+        items: [
+          {
+            name: 'chart',
+            basis: '65%',
+          },
+          {
+            name: 'board',
+            basis: '35%',
+          },
+        ],
+      },
+      board: [
+        {
+          type: 'B',
+          readFrom: '',
+          layout: 'label-top',
+          items: [
+            {
+              label: '进风(m³/min)',
+              value: '${faceIntM3}',
+            },
+            {
+              label: '回风(m³/min)',
+              value: '${faceRetM3}',
+            },
+            {
+              label: '需风量(m³/min)',
+              value: '${facePlanM3}',
+            },
+          ],
+        },
+      ],
+      list: [],
+      preset: [],
+      table: [],
+      gallery: [],
+      chart: [
+        {
+          type: 'line',
+          readFrom: '',
+          legend: { show: true },
+          xAxis: [{ show: true }],
+          yAxis: [{ show: true, name: '风量(m³/min)', position: 'left' }],
+          series: [
+            { readFrom: 'history_report', xprop: 'time', yprop: 'faceIntM3', label: '进风' },
+            { readFrom: 'history_report', xprop: 'time', yprop: 'faceRetM3', label: '回风' },
+          ],
+        },
+      ],
+      gallery_list: [],
+      complex_list: [],
+      to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=sys_surface_caimei&deviceid=${deviceID}',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:350px;right:0;',
+    },
+  },
+  {
+    deviceType: 'warn',
+    moduleName: '预警监测',
+    pageType: 'vent_182',
+    moduleData: {
+      header: {
+        show: true,
+        readFrom: '',
+        selector: {
+          show: false,
+          value: '',
+        },
+        slot: {
+          show: true,
+          value: '网络异常:${warn[0].netstatus.val}',
+        },
+      },
+      background: {
+        show: false,
+        type: 'video',
+        link: '',
+      },
+      layout: {
+        direction: 'row',
+        items: [
+          {
+            name: 'list',
+            basis: '100%',
+          },
+        ],
+      },
+      board: [],
+      list: [
+        {
+          type: 'timeline',
+          readFrom: 'warn[0]',
+          items: [
+            {
+              label: '报警',
+              value: '${alarm.val}',
+              info: '',
+              color: 'red',
+            },
+            {
+              label: '重大风险预警',
+              value: '${red.val}',
+              info: '',
+              color: 'red',
+            },
+            {
+              label: '较大风险预警',
+              value: '${orange.val}',
+              info: '',
+              color: 'orange',
+            },
+            {
+              label: '一般风险预警',
+              value: '${yellow.val}',
+              info: '',
+              color: 'yellow',
+            },
+            {
+              label: '低风险预警',
+              value: '${blue.val}',
+              info: '',
+              color: 'blue',
+            },
+          ],
+        },
+      ],
+      preset: [],
+      table: [],
+      gallery: [],
+      chart: [],
+      gallery_list: [],
+      complex_list: [],
+      to: '/monitorChannel/monitor-alarm-home',
+    },
+    showStyle: {
+      size: 'width:420px;height:280px;',
+      version: '原版',
+      position: 'top:640px;right:0;',
+    },
+  },
+];

+ 108 - 0
src/views/vent/home/configurable/gasInjection.vue

@@ -0,0 +1,108 @@
+<template>
+  <div class="deviceManger">
+    <div class="top-bg">
+      <div class="main-title">{{ mainTitle }}</div>
+    </div>
+    <div class="nav">
+      <navMenu @changeMenu="changeMenu"></navMenu>
+    </div>
+    <div class="main-container">
+      <component :is="activeComponente"></component>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue';
+import { useInitConfigs, useInitPage } from './hooks/useInit';
+import navMenu from './components/navMenu.vue';
+import fireMonitor from './fireMonitor.vue';
+import deviceManger from './deviceManger.vue';
+import warnMonitor from './warnMonitor.vue';
+import systemManger from './systemManger.vue';
+import largeScreen from './largeScreen.vue';
+import linkConfiguration from './linkConfiguration.vue';
+const { mainTitle, data, updateData } = useInitPage('红沙泉露天煤矿系统');
+//当前激活界面
+const activeComponente = ref<any>(fireMonitor);
+
+//menu选项切换
+function changeMenu(param) {
+  switch (param) {
+    case 'yzt':
+      activeComponente.value = fireMonitor;
+      break;
+    case 'jcyj':
+      activeComponente.value = warnMonitor;
+      break;
+    case 'sbgl':
+      activeComponente.value = deviceManger;
+      break;
+    case 'ldpz':
+      activeComponente.value = linkConfiguration;
+      break;
+    case 'xtgl':
+      activeComponente.value = systemManger;
+      break;
+    case 'dpzs':
+      activeComponente.value = largeScreen;
+      break;
+  }
+}
+</script>
+
+<style lang="less" scoped>
+@import '/@/design/theme.less';
+
+@{theme-deepblue} {
+  .deviceManger {
+  }
+}
+
+.deviceManger {
+  --image-modal-top: url('@/assets/images/vent/vent-header1.png');
+  position: relative;
+  width: 100%;
+  height: 100%;
+  color: #fff;
+  /* background: url('@/assets/images/vent/homeNew/bg.png') no-repeat center; */
+
+  .top-bg {
+    width: 100%;
+    height: 80px;
+    background: var(--image-modal-top) no-repeat center;
+    background-size: 100% 100%;
+    position: absolute;
+    z-index: 1;
+
+    .main-title {
+      height: 80px;
+      line-height: 62px;
+      font-family: 'douyuFont';
+      font-size: 22px;
+      letter-spacing: 2px;
+      display: flex;
+      justify-content: center;
+    }
+  }
+
+  .nav {
+    position: absolute;
+    left: 54%;
+    top: 60px;
+    transform: translate(-50%, 0);
+    width: 1000px;
+    height: 68px;
+    z-index: 9999;
+  }
+
+  .main-container {
+    position: absolute;
+    top: 70px;
+    width: 100%;
+    height: calc(100% - 70px);
+    padding: 0px 10px;
+    box-sizing: border-box;
+  }
+}
+</style>

+ 24 - 18
src/views/vent/home/configurable/linkConfiguration.vue

@@ -9,40 +9,46 @@
       :device-type="cfg.deviceType"
       :data="data"
       :visible="true"
+      @table-refresh="handleTableRefresh"
     />
   </div>
 </template>
 <script lang="ts" setup>
-import { onMounted, onUnmounted, ref, computed, nextTick, onBeforeMount, watch } from 'vue';
+import { onMounted, onUnmounted, ref, watch } from 'vue';
 import { useInitConfigs, useInitPage } from './hooks/useInit';
 import ModuleCommonHsq from './components/ModuleCommonHsq.vue';
-import { getSystemApi } from './configurable.api';
+import { getAlarmLogList, warningList } from './configurable.api';
 import { testConfigLink } from './configurable.data';
 
 const { configs, fetchConfigs } = useInitConfigs();
+<<<<<<< HEAD
 const { data, updateData } = useInitPage('红沙泉露天煤矿火灾监测预警系统');
+=======
+const { data, updateData } = useInitPage('红沙泉露天煤矿系统');
+const warnResult = ref({
+  warnInfo: [] as any[],
+});
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c
 let interval: number | undefined;
-
-// https获取监测数据
-let timer: null | NodeJS.Timeout = null;
-function getMonitor() {
-  // timer = setTimeout(async () => {
-  //   getSystemApi({ devicetype: 'sys', systemID: '2036323791827165185' }).then(updateData);
-  //   if (timer) {
-  //     timer = null;
-  //   }
-  //   getMonitor();
-  // }, 10000);
-}
-
 onMounted(() => {
   fetchConfigs('gas_injection').then(() => {
     configs.value = testConfigLink;
-    // getSystemApi({ devicetype: 'sys', systemID: '2036323791827165185' }).then(updateData);
+    refresh();
   });
-  getMonitor();
 });
-
+// 刷新数据
+async function refresh() {
+  const res = await warningList({ sysId: '2074416476136718337' });
+  const newWarnData = {
+    ...warnResult.value,
+    warnInfo: res.records,
+  };
+  warnResult.value = newWarnData;
+  updateData(newWarnData);
+}
+const handleTableRefresh = async () => {
+  await refresh();
+};
 watch(
   () => data.value,
   (newData, oldData) => {}

+ 184 - 6
src/views/vent/monitorManager/hsqHome/components/LinkRuleEditor.vue

@@ -6,6 +6,7 @@
     <div class="basic-box">
       <basicBorder title="触发条件设置">
         <div class="edit-wrap">
+<<<<<<< HEAD:src/views/vent/monitorManager/hsqHome/components/LinkRuleEditor.vue
           <div class="edit-left">
             <div class="edit-item" v-for="(field, index) in formFields" :key="index">
               <div class="item-label">{{ field.label }} :</div>
@@ -22,6 +23,20 @@
               <div class="right-item">THEN 执行联动动作</div>
               <div class="right-item">【优先级:高】</div>
               <div class="right-item">此规则触发后将阻断低优先级</div>
+=======
+          <div class="edit-right">
+            <div class="right-title">条件逻辑说明</div>
+            <div class="right-content">
+              <div v-for="(item, index) in formData" :key="index" class="right-item-row">
+                <span class="right-item index-label">{{ index + 1 }}</span>
+                <span class="right-item">设备名称: {{ item.alarmName }}</span>
+                <span class="right-item">监测地点: {{ item.devicePos }}</span>
+                <span class="right-item">IF {{ getConditionText(item) }}</span>
+                <span class="right-item">AND 持续时间:{{ item.cxTime ?? '' }}s</span>
+                <span class="right-item">AND 时间在生效范围内</span>
+                <span class="right-item">THEN 执行联动动作</span>
+              </div>
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c:src/views/vent/home/configurable/components/preset/linkRuleEdit.vue
             </div>
           </div>
         </div>
@@ -81,8 +96,21 @@
 </template>
 
 <script setup lang="ts">
+<<<<<<< HEAD:src/views/vent/monitorManager/hsqHome/components/LinkRuleEditor.vue
 import { reactive, ref, onMounted } from 'vue';
 import basicBorder from './basicBorder.vue';
+=======
+import { reactive, ref, onMounted, watch, computed } from 'vue';
+import basicBorder from '../BasicBorder.vue';
+import { useLinkRuleStore } from '/@/store/modules/linkRule';
+import { getWarningDeviceList } from '../../configurable.api';
+const props = defineProps<{
+  selectedRow?: any | null;
+}>();
+
+const linkRuleStore = useLinkRuleStore();
+const currentSelectedRow = computed(() => linkRuleStore.getSelectedRow);
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c:src/views/vent/home/configurable/components/preset/linkRuleEdit.vue
 
 interface ITitleItem {
   label: string;
@@ -132,6 +160,7 @@ const steps = ref<IStepItem[]>([
   { id: 'log', name: '记录日志', status: 0 },
 ]);
 
+<<<<<<< HEAD:src/views/vent/monitorManager/hsqHome/components/LinkRuleEditor.vue
 const formFields: IFormField[] = [
   { label: '规则名称', key: 'gzmc' },
   { label: '报警级别', key: 'bjjb' },
@@ -156,7 +185,100 @@ function toggleSwitch(item: IActionItem) {
 
 onMounted(() => {
   // 模拟流程状态
+=======
+// 模拟接口请求获取步骤状态
+const fetchStepStatus = async () => {
+  const apiResponse = {
+    alarmTrigger: 1, // 报警触发为 1
+    conditionJudge: 0, // 条件判断为 1
+    searchRule: 0, // 查找规则为 0
+    executeAction: 0, // 执行动作为 0
+    recordLog: 0, // 记录日志为 0
+  };
+
+  // 根据接口返回数据更新状态
+  steps.value[0].status = apiResponse.alarmTrigger;
+  steps.value[1].status = apiResponse.conditionJudge;
+  steps.value[2].status = apiResponse.searchRule;
+  steps.value[3].status = apiResponse.executeAction;
+  steps.value[4].status = apiResponse.recordLog;
+};
+const formData = ref([]);
+// 获取预警条目数据
+const getWarningList = async (val) => {
+  const params = {
+    sysId: val.sysId,
+    monitorType: 2,
+    alarmId: val.id,
+    pageSize: 1000,
+  };
+  const res = await getWarningDeviceList(params);
+  formData.value = res.records;
+};
+// 获取单位
+const getSensorUnit = (item: any) => {
+  const type = item.deviceType;
+  if (type === 'modelsensor_co' || type === 'modelsensor_hcl') return 'ppm';
+  if (type === 'modelsensor_temperature') return '℃';
+  return '%';
+};
+// 拼接IF条件文本
+const getConditionText = (item: any) => {
+  const { fmin, fmax, deviceType } = item;
+  const unit = getSensorUnit(item);
+  const minVal = fmin ?? '';
+  const maxVal = fmax ?? '';
+
+  // 同时存在最小值、最大值:区间 fmin~fmax
+  if (minVal !== '' && maxVal !== '') {
+    return `${minVal}~${maxVal} ${unit}`;
+  }
+
+  // 只有最大值,无最小值
+  if (maxVal !== '' && minVal === '') {
+    if (deviceType === 'modelsensor_co') {
+      // CO:大于fmax
+      return `> ${maxVal} ${unit}`;
+    } else if (deviceType === 'modelsensor_hcl' || deviceType === 'modelsensor_temperature') {
+      // HCl / 温度:大于等于fmax
+      return `≥ ${maxVal} ${unit}`;
+    } else {
+      return `≥ ${maxVal} ${unit}`;
+    }
+  }
+  // 只有最小值(无最大值),直接显示最小值+单位
+  if (minVal !== '' && maxVal === '') {
+    return `${minVal} ${unit}`;
+  }
+  // 两者都为空兜底
+  return '';
+};
+onMounted(() => {
+  fetchStepStatus();
+  if (currentSelectedRow.value) {
+    updateFormData(currentSelectedRow.value);
+    getWarningList(currentSelectedRow.value);
+  }
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c:src/views/vent/home/configurable/components/preset/linkRuleEdit.vue
 });
+
+watch(
+  currentSelectedRow,
+  (newVal) => {
+    console.log(newVal, 'newVal from store');
+    if (newVal) {
+      updateFormData(newVal);
+      getWarningList(newVal);
+    }
+  },
+  { deep: true }
+);
+
+const updateFormData = (row: any) => {
+  console.log('更新表单数据:', row);
+  // 在这里根据 row 数据更新表单或其他逻辑
+  // 例如: formData.gzmc = row.alarmName;
+};
 </script>
 
 <style lang="less" scoped>
@@ -173,6 +295,7 @@ onMounted(() => {
   box-sizing: border-box;
   display: flex;
   flex-direction: column;
+<<<<<<< HEAD:src/views/vent/monitorManager/hsqHome/components/LinkRuleEditor.vue
 
   .item-input {
     background: transparent !important;
@@ -200,6 +323,18 @@ onMounted(() => {
   .basic-box1 {
     flex: 0.85;
     min-height: 0;
+=======
+  .basic-box {
+    height: 30%;
+    margin-top: 10px;
+  }
+  .basic-box1 {
+    flex: 1;
+
+    margin-top: 10px;
+  }
+  .basic-box2 {
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c:src/views/vent/home/configurable/components/preset/linkRuleEdit.vue
     margin-top: 10px;
 
     :deep(.basic-border) {
@@ -224,6 +359,7 @@ onMounted(() => {
     gap: 10px;
     box-sizing: border-box;
   }
+<<<<<<< HEAD:src/views/vent/monitorManager/hsqHome/components/LinkRuleEditor.vue
 
   .edit-left {
     flex: 1;
@@ -242,6 +378,8 @@ onMounted(() => {
     padding: 0 10px;
     box-sizing: border-box;
   }
+=======
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c:src/views/vent/home/configurable/components/preset/linkRuleEdit.vue
 
   .item-label {
     width: 80px;
@@ -252,8 +390,8 @@ onMounted(() => {
 
   .edit-right {
     background: #0e395d;
-    width: 50%;
-    height: 93%;
+    width: 100%;
+    height: 100%;
     display: flex;
     flex-direction: column;
     margin-right: 20px;
@@ -274,16 +412,44 @@ onMounted(() => {
   }
 
   .right-content {
-    flex: 1;
     display: flex;
     flex-direction: column;
-    margin-top: 5px;
-    margin-left: 10px;
+    gap: 6px;
+    max-height: 300px;
+    overflow-y: auto;
+  }
+
+  .right-item-row {
+    display: flex;
+    flex-wrap: wrap;
+    align-items: center;
+    gap: 8px;
+    padding: 6px 20px;
+    background: rgba(255, 255, 255, 0.03);
+    border-radius: 4px;
+    border: 1px solid rgba(255, 255, 255, 0.06);
   }
 
   .right-item {
-    color: #fff;
     font-size: 14px;
+    color: #e0f2fe;
+    white-space: nowrap;
+  }
+
+  /* 方案二:序号样式 */
+  .index-label {
+    color: #7dd3fc;
+    font-weight: 600;
+    min-width: 30px;
+  }
+
+  /* 方案三:内联样式 */
+  .right-item.inline {
+    display: inline-block;
+  }
+  .right-item {
+    color: #29a1d4;
+    font-size: 12px;
     line-height: 25px;
     font-weight: bold;
     padding: 0 5px;
@@ -306,7 +472,19 @@ onMounted(() => {
       margin-top: 10px;
     }
   }
+<<<<<<< HEAD:src/views/vent/monitorManager/hsqHome/components/LinkRuleEditor.vue
 
+=======
+  .right-item:nth-child(4) {
+    color: #fc002a;
+  }
+  .right-item:first-child {
+    color: #fff;
+  }
+  .right-item:last-child {
+    color: #46e8a3;
+  }
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c:src/views/vent/home/configurable/components/preset/linkRuleEdit.vue
   .list-title {
     width: 177px;
     height: 30px;

+ 29 - 7
src/views/vent/monitorManager/hsqHome/components/navMenu.vue

@@ -1,13 +1,19 @@
 <template>
   <div class="nav-menu">
-    <div  :class="activeIndex == index ? 'menu-item-active' : 'menu-item'" v-for="(item, index) in menuList" :key="index"
-      @click="handlerClick(item, index)">{{ item.label }}</div>
+    <div
+      :class="activeIndex == index ? 'menu-item-active' : 'menu-item'"
+      v-for="(item, index) in menuList"
+      :key="index"
+      @click="handlerClick(item, index)"
+      >{{ item.label }}</div
+    >
   </div>
 </template>
 
 <script setup lang="ts">
-import { ref } from 'vue'
+import { ref } from 'vue';
 
+<<<<<<< HEAD:src/views/vent/monitorManager/hsqHome/components/navMenu.vue
 let props=defineProps({
   activeIndex: {
     type: Number,
@@ -15,12 +21,17 @@ let props=defineProps({
   }
 })
 
+=======
+//当前激活menu选项索引
+let activeIndex = ref(0);
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c:src/views/vent/home/configurable/components/navMenu.vue
 let menuList = ref<any[]>([
   { label: '一张图', value: 'yzt' },
   { label: '监测预警', value: 'jcyj' },
   { label: '设备管理', value: 'sbgl' },
   { label: '联动配置', value: 'ldpz' },
   { label: '系统管理', value: 'xtgl' },
+<<<<<<< HEAD:src/views/vent/monitorManager/hsqHome/components/navMenu.vue
   // { label: '大屏展示', value: 'dpzs' },
 ])
 let $emit=defineEmits(['changeMenu'])
@@ -28,6 +39,16 @@ let $emit=defineEmits(['changeMenu'])
 //menu选项切换
 function handlerClick(item, index) {
   $emit('changeMenu',item.value)
+=======
+  { label: '大屏展示', value: 'dpzs' },
+]);
+let $emit = defineEmits(['changeMenu']);
+
+//menu选项切换
+function handlerClick(item, index) {
+  activeIndex.value = index;
+  $emit('changeMenu', item.value);
+>>>>>>> d4e15216fce51d59af4718cd7ee6406d7a85b86c:src/views/vent/home/configurable/components/navMenu.vue
 }
 </script>
 
@@ -35,7 +56,8 @@ function handlerClick(item, index) {
 @import '/@/design/theme.less';
 
 @{theme-deepblue} {
-  .nav-menu {}
+  .nav-menu {
+  }
 }
 
 .nav-menu {
@@ -46,7 +68,7 @@ function handlerClick(item, index) {
   justify-content: space-around;
   align-items: center;
   position: relative;
-  width: 100%;
+  width: 90%;
   height: 100%;
   background: var(--image-modal-nav) no-repeat;
   background-size: 100% 100%;
@@ -62,7 +84,7 @@ function handlerClick(item, index) {
     background: var(--image-modal-nav1) no-repeat;
     background-size: 100% 100%;
     cursor: pointer;
-     user-select: none; /* 禁止选择文本 */
+    user-select: none; /* 禁止选择文本 */
   }
 
   .menu-item-active {
@@ -74,7 +96,7 @@ function handlerClick(item, index) {
     background: var(--image-modal-nav2) no-repeat;
     background-size: 100% 100%;
     cursor: pointer;
-     user-select: none; /* 禁止选择文本 */
+    user-select: none; /* 禁止选择文本 */
   }
 }
 </style>