hongrunxia 3 месяцев назад
Родитель
Сommit
c3733f6a69

BIN
src/assets/images/vent/home/2.5D.png


BIN
src/assets/images/vent/home/3D.png


+ 0 - 1
src/main.ts

@@ -75,7 +75,6 @@ async function bootstrap() {
   initTHREE();
 
   app.component('GlobalConfig', GlobalConfig);
-  debugger;
   app.provide('globalConfig', {
     // 你的全局配置
     simulatedPassword: VENT_PARAM['simulatedPassword'],

+ 199 - 173
src/views/vent/deviceManager/comment/DeviceModal.vue

@@ -1,10 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" width="1000px" :showCancelBtn="false"
-    :showOkBtn="false" :footer="null" :destroyOnClose="true" :mask-closable="false" @cancel="closeModalFn">
+  <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="1" tab="基本信息" force-render>
-        <FormModal :deviceType="deviceType" :record="deviceData"
-          @saveOrUpdate="(values) => emit('saveOrUpdate', values)" />
+        <FormModal :deviceType="deviceType" :record="deviceData" @save-or-update="(values) => emit('saveOrUpdate', values)" />
       </a-tab-pane>
       <!-- <a-tab-pane key="10" v-if="deviceType == 'fanlocal' || deviceType == 'fanmain'" tab="风机曲线" force-render>
         <FanLineModal :record="deviceData" />
@@ -13,16 +22,27 @@
         <DeviceReportInfo v-if="activeKey == '11'" />
       </a-tab-pane>
       <a-tab-pane key="2" tab="点表关联">
-        <PointTable :columns="pointColumns" :pointType="deviceData.strtype" :deviceId="deviceData.id" :valuetype="9"
-          @save="savePointData" @delete="deletePointById" />
+        <PointTable
+          :columns="pointColumns"
+          :pointType="deviceData.strtype"
+          :deviceId="deviceData.id"
+          :valuetype="9"
+          @save="savePointData"
+          @delete="deletePointById"
+        />
       </a-tab-pane>
       <a-tab-pane key="8" tab="虚拟点表配置">
-        <PointTable :columns="simulationColumns" :pointType="deviceData.strtype" :deviceId="deviceData.id"
-          :valuetype="4" @save="savePointData" @delete="deletePointById" />
+        <PointTable
+          :columns="simulationColumns"
+          :pointType="deviceData.strtype"
+          :deviceId="deviceData.id"
+          :valuetype="4"
+          @save="savePointData"
+          @delete="deletePointById"
+        />
       </a-tab-pane>
       <a-tab-pane key="3" tab="关联设备" v-if="deviceType == 'managesys'">
-        <WorkFacePointTable :columns="linkColumns" :deviceId="deviceData.id" @save="savePointData"
-          @delete="deletePointById" />
+        <WorkFacePointTable :columns="linkColumns" :deviceId="deviceData.id" @save="savePointData" @delete="deletePointById" />
       </a-tab-pane>
       <a-tab-pane key="12" tab="关联报表" v-if="deviceType == 'managesys'">
         <WorkFaceReportTable :columns="reportColumns" :device="deviceData" />
@@ -43,8 +63,14 @@
         </template>
       </a-tab-pane>
       <a-tab-pane key="7" tab="摄像头配置">
-        <EditRowTable :columns="cameraColumns" :list="cameraList" :params="{ deviceid: deviceData.id }"
-          @saveOrUpdate="saveCameraData" @deleteById="deleteCameraById" :isAdd="true" />
+        <EditRowTable
+          :columns="cameraColumns"
+          :list="cameraList"
+          :params="{ deviceid: deviceData.id }"
+          @save-or-update="saveCameraData"
+          @delete-by-id="deleteCameraById"
+          :isAdd="true"
+        />
       </a-tab-pane>
       <a-tab-pane key="9" :tab="'预案管理'">
         <AccidentPlanTable :deviceId="deviceData.id" />
@@ -54,7 +80,7 @@
       </a-tab-pane>
 
       <a-tab-pane key="13" :tab="'故障配置管理'">
-        <FaultConfigTable :deviceId="deviceData.id"></FaultConfigTable>
+        <FaultConfigTable :deviceId="deviceData.id" />
       </a-tab-pane>
 
       <!-- <a-tab-pane key="9" tab="预警指标修改">
@@ -63,180 +89,180 @@
         </template>
       </a-tab-pane> -->
     </a-tabs>
-    <FormModal v-else :record="record" @saveOrUpdate="(values) => emit('saveOrUpdate', values)" />
+    <FormModal v-else :record="record" @save-or-update="(values) => emit('saveOrUpdate', values)" />
   </BasicModal>
 </template>
 <script lang="ts" setup>
-import { computed, unref, inject, reactive, ref, watch } from 'vue';
-import { BasicModal, useModalInner } from '/@/components/Modal';
-import EditRowTable from '../../comment/EditRowTable.vue';
-import PointTable from './pointTabel/PointTable.vue';
-import WarningTable from './warningTabel/index.vue';
-import ManagerWarningTable from './warningTabel/index1.vue';
-import ManagerWarningDeviceTable from './warningTabel/index2.vue';
-import BackWindDeviceTable from './warningTabel/index3.vue';
-import AccidentPlanTable from './warningTabel/index4.vue';
-import LEDPlaylistTable from './warningTabel/index5.vue';
-import WorkFacePointTable from './pointTabel/WorkFacePointTable.vue';
-import WorkFaceReportTable from './pointTabel/WorkFaceReportTable.vue';
-import DeviceReportInfo from './DeviceReportInfo.vue';
-import FaultConfigTable from './faultConfigTable/index.vue'
-// import editWarnTable from './editWarnTable/index.vue'
-import FanLineModal from './FanLineModal .vue';
-import FormModal from './FormModal.vue';
-import { cloneDeep } from 'lodash-es';
-import { columns as pointColumns, workFaceColumns, simulationColumns, reportColumns } from './pointTabel/point.data';
-import { saveOrUpdate as pointSaveOrUpdate, deleteById as pointDeleteById } from './pointTabel/point.api';
-import { columns as cameraColumns } from './cameraTabel/camera.data';
+  import { computed, unref, inject, reactive, ref, watch } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import EditRowTable from '../../comment/EditRowTable.vue';
+  import PointTable from './pointTabel/PointTable.vue';
+  import WarningTable from './warningTabel/index.vue';
+  import ManagerWarningTable from './warningTabel/index1.vue';
+  import ManagerWarningDeviceTable from './warningTabel/index2.vue';
+  import BackWindDeviceTable from './warningTabel/index3.vue';
+  import AccidentPlanTable from './warningTabel/index4.vue';
+  import LEDPlaylistTable from './warningTabel/index5.vue';
+  import WorkFacePointTable from './pointTabel/WorkFacePointTable.vue';
+  import WorkFaceReportTable from './pointTabel/WorkFaceReportTable.vue';
+  import DeviceReportInfo from './DeviceReportInfo.vue';
+  import FaultConfigTable from './faultConfigTable/index.vue';
+  // import editWarnTable from './editWarnTable/index.vue'
+  import FanLineModal from './FanLineModal .vue';
+  import FormModal from './FormModal.vue';
+  import { cloneDeep } from 'lodash-es';
+  import { columns as pointColumns, workFaceColumns, simulationColumns, reportColumns } from './pointTabel/point.data';
+  import { saveOrUpdate as pointSaveOrUpdate, deleteById as pointDeleteById } from './pointTabel/point.api';
+  import { columns as cameraColumns } from './cameraTabel/camera.data';
 
-import { list as cameraList, saveOrUpdate as cameraSaveOrUpdate, deleteById as cameraDeleteById } from './cameraTabel/camera.api';
+  import { list as cameraList, saveOrUpdate as cameraSaveOrUpdate, deleteById as cameraDeleteById } from './cameraTabel/camera.api';
 
-const props = defineProps({
-  showTab: { type: Boolean, required: true },
-  // deviceType: { type: String },
-});
-// 声明Emits
-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('1');
-const linkColumns = ref<any[]>([]);
+  const props = defineProps({
+    showTab: { type: Boolean, required: true },
+    // deviceType: { type: String },
+  });
+  // 声明Emits
+  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('1');
+  const linkColumns = ref<any[]>([]);
 
-//表单赋值
-const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-  //重置表单
-  setModalProps({ confirmLoading: false });
-  Object.assign(deviceData, data.record);
-  // 判断是否是关键阻力路线
-});
+  //表单赋值
+  const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
+    //重置表单
+    setModalProps({ confirmLoading: false });
+    Object.assign(deviceData, data.record);
+    // 判断是否是关键阻力路线
+  });
 
-//设置标题
-const title = computed(() => {
-  if (!unref(isUpdate)) {
-    if (deviceData.strname || deviceData.systemname) {
-      return `新增(${deviceData.strname || deviceData.systemname})`;
-    }
-    return `新增`;
-  } else {
-    if (deviceData['strtype'] == 'sys_majorpath') {
-      linkColumns.value = [
-        ...workFaceColumns,
-        ...[
-          {
-            title: '是否在关键通风路线上',
-            width: 100,
-            dataIndex: 'pathflag',
-            edit: true,
-            editComponent: 'Switch',
-            editValueMap: (value) => {
-              return value ? '是' : '否';
+  //设置标题
+  const title = computed(() => {
+    if (!unref(isUpdate)) {
+      if (deviceData.strname || deviceData.systemname) {
+        return `新增(${deviceData.strname || deviceData.systemname})`;
+      }
+      return `新增`;
+    } else {
+      if (deviceData['strtype'] == 'sys_majorpath') {
+        linkColumns.value = [
+          ...workFaceColumns,
+          ...[
+            {
+              title: '是否在关键通风路线上',
+              width: 100,
+              dataIndex: 'pathflag',
+              edit: true,
+              editComponent: 'Switch',
+              editValueMap: (value) => {
+                return value ? '是' : '否';
+              },
             },
-          },
-          {
-            title: '传感器类型',
-            width: 100,
-            dataIndex: 'sensorType',
-            edit: true,
-            editComponent: 'Select',
-            editComponentProps: {
-              options: [
-                {
-                  label: '多参',
-                  value: '1',
-                },
-                {
-                  label: '测风',
-                  value: '2',
-                },
-              ],
+            {
+              title: '传感器类型',
+              width: 100,
+              dataIndex: 'sensorType',
+              edit: true,
+              editComponent: 'Select',
+              editComponentProps: {
+                options: [
+                  {
+                    label: '多参',
+                    value: '1',
+                  },
+                  {
+                    label: '测风',
+                    value: '2',
+                  },
+                ],
+              },
             },
-          },
-          {
-            title: '风向',
-            width: 100,
-            dataIndex: 'winddir',
-            edit: true,
-            editComponent: 'Select',
-            editComponentProps: {
-              options: [
-                {
-                  label: '进风',
-                  value: '1',
-                },
-                {
-                  label: '用风',
-                  value: '2',
-                },
-                {
-                  label: '回风',
-                  value: '3',
-                },
-              ],
+            {
+              title: '风向',
+              width: 100,
+              dataIndex: 'winddir',
+              edit: true,
+              editComponent: 'Select',
+              editComponentProps: {
+                options: [
+                  {
+                    label: '进风',
+                    value: '1',
+                  },
+                  {
+                    label: '用风',
+                    value: '2',
+                  },
+                  {
+                    label: '回风',
+                    value: '3',
+                  },
+                ],
+              },
             },
-          },
-          {
-            title: '是否总风量',
-            width: 100,
-            dataIndex: 'windflag',
-            edit: true,
-            editComponent: 'Switch',
-            editValueMap: (value) => {
-              return value ? '是' : '否';
+            {
+              title: '是否总风量',
+              width: 100,
+              dataIndex: 'windflag',
+              edit: true,
+              editComponent: 'Switch',
+              editValueMap: (value) => {
+                return value ? '是' : '否';
+              },
             },
-          },
-          {
-            title: '路线名称',
-            width: 100,
-            dataIndex: 'des',
-            edit: true,
-            editComponent: 'Input',
-          },
-          {
-            title: ' 阻力值',
-            width: 100,
-            dataIndex: 'testDrag',
-            edit: true,
-            editComponent: 'InputNumber',
-          },
-        ],
-      ];
-    } else {
-      linkColumns.value = [...workFaceColumns];
-    }
-    if (deviceData.strname || deviceData.systemname) {
-      return `编辑(${deviceData.strname || deviceData.systemname})`;
+            {
+              title: '路线名称',
+              width: 100,
+              dataIndex: 'des',
+              edit: true,
+              editComponent: 'Input',
+            },
+            {
+              title: ' 阻力值',
+              width: 100,
+              dataIndex: 'testDrag',
+              edit: true,
+              editComponent: 'InputNumber',
+            },
+          ],
+        ];
+      } else {
+        linkColumns.value = [...workFaceColumns];
+      }
+      if (deviceData.strname || deviceData.systemname) {
+        return `编辑(${deviceData.strname || deviceData.systemname})`;
+      }
+      return `编辑`;
     }
-    return `编辑`;
-  }
-});
+  });
 
-const closeModalFn = () => {
-  activeKey.value = '1';
-  closeModal();
-  emit('closeModal');
-};
+  const closeModalFn = () => {
+    activeKey.value = '1';
+    closeModal();
+    emit('closeModal');
+  };
 
-const savePointData = (data) => {
-  const record = cloneDeep(data.editValueRefs);
-  pointSaveOrUpdate(Object.assign(record, { id: data.id, deviceId: deviceData.id }), data.id);
-};
-const saveCameraData = (data: any, reload: Function) => {
-  cameraSaveOrUpdate(Object.assign({ ...data }, { id: data.id, deviceid: deviceData.id }), data.id);
-};
-const deletePointById = (id, reload) => {
-  pointDeleteById({ id: id }, reload);
-};
-const deleteCameraById = (id, reload) => {
-  cameraDeleteById({ id: id }, reload);
-};
+  const savePointData = (data) => {
+    const record = cloneDeep(data.editValueRefs);
+    pointSaveOrUpdate(Object.assign(record, { id: data.id, deviceId: deviceData.id }), data.id);
+  };
+  const saveCameraData = (data: any, reload: Function) => {
+    cameraSaveOrUpdate(Object.assign({ ...data }, { id: data.id, deviceid: deviceData.id }), data.id);
+  };
+  const deletePointById = (id, reload) => {
+    pointDeleteById({ id: id }, reload);
+  };
+  const deleteCameraById = (id, reload) => {
+    cameraDeleteById({ id: id }, reload);
+  };
 </script>
 <style scoped lang="less">
-::v-deep .suffix {
-  height: 32px;
-  line-height: 32px;
-  margin-left: 5px;
-  color: #fff;
-}
+  ::v-deep .suffix {
+    height: 32px;
+    line-height: 32px;
+    margin-left: 5px;
+    color: #fff;
+  }
 </style>

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

@@ -36,10 +36,10 @@
           newP: { x: -2.211555197992825, y: 27.130029732875393, z: 2.3018919451652007 },
           newT: { x: -2.211555197992825, y: -8.604453425019353, z: 2.301856157557903 },
         },
-          jdds: {
+        jdds: {
           render: null,
           group: modalGroup ? modalGroup : null,
-          newP: { x: 0.22197787154285728, y: 29.010792085965782, z:  2.477736279196267},
+          newP: { x: 0.22197787154285728, y: 29.010792085965782, z: 2.477736279196267 },
           newT: { x: 0.22197787154285728, y: -8.604453177192061, z: 2.477698375233975 },
         },
       };

+ 318 - 318
src/views/vent/monitorManager/comment/components/DeviceBaseInfo.vue

@@ -11,344 +11,344 @@
   </BasicModal>
 </template>
 <script lang="ts" setup>
-import { onMounted, ref, defineEmits, onUnmounted, watch, computed } from 'vue';
-import { BasicModal, useModalInner } from '/@/components/Modal';
-import { BasicForm, useForm } from '/@/components/Form/index';
-import { FormSchema } from '/@/components/Form';
-import { getFormSchemaColumns } from '/@/hooks/web/useWebColumns';
-import { list as substationList } from '/@/views/vent/deviceManager/substationTabel/substation.api';
-import { getRegulation as getRegulationList } from '/@/views/vent/deviceManager/substationTabel/substation.api';
-import { list, updateDeviceInfo, updateReportInfo } from '../comment.api';
-import { getAutoScrollContainer } from '/@/utils/common/compUtils';
-import { on } from 'events';
+  import { onMounted, ref, defineEmits, onUnmounted, watch, computed } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, useForm } from '/@/components/Form/index';
+  import { FormSchema } from '/@/components/Form';
+  import { getFormSchemaColumns } from '/@/hooks/web/useWebColumns';
+  import { list as substationList } from '/@/views/vent/deviceManager/substationTabel/substation.api';
+  import { getRegulation as getRegulationList } from '/@/views/vent/deviceManager/substationTabel/substation.api';
+  import { list, updateDeviceInfo, updateReportInfo } from '../comment.api';
+  import { getAutoScrollContainer } from '/@/utils/common/compUtils';
+  import { on } from 'events';
 
-const emit = defineEmits(['close', 'register']);
-const props = defineProps({
-  // formSchema: {
-  //   type: Array as PropType<FormSchema[]>,
-  //   default: () => [],
-  // },
-  deviceType: {
-    type: String,
-    default: '',
-  },
-});
-const FormRef = ref();
-const tabType = ref('deviceInfo');
-const formSchema = ref<Array<FormSchema>>([]);
-const formData = ref({});
-// const props.deviceType ref('');
-const deviceType = computed(() => props.deviceType);
-// const arrToFormColumns = (tableHeaderColumns = [], devicetype) => {
-//   const columnList: any[] = [];
-//   tableHeaderColumns.forEach((item: any) => {
-//     let columnsItem;
-//     if (item.type == 1 || item.type == 10) {
-//       columnsItem = {
-//         label: item.des, //_dictText
-//         field: item.monitorcode,
-//         component: item.type == 1 ? 'Input' : item.type == 10 ? 'InputTextArea' : '',
-//       };
-//     } else {
-//       if (item.type == 2 && item['monitorcode'] == 'nsubstationid') {
-//         columnsItem = {
-//           label: item.des, //_dictText
-//           field: item.monitorcode,
-//           component: 'ApiSelect',
-//           componentProps: {
-//             api: substationList,
-//             labelField: 'strname',
-//             valueField: 'id',
-//           },
-//         };
-//       }
-//       if (item.type == 3) {
-//         columnsItem = {
-//           label: item.des, //_dictText
-//           field: item.monitorcode,
-//           component: 'RadioGroup',
-//           defaultValue: 1,
-//           componentProps: () => {
-//             return {
-//               options: [
-//                 { label: '是', value: 1, key: '1' },
-//                 { label: '否', value: 0, key: '2' },
-//               ],
-//               stringToNumber: true,
-//             };
-//           },
-//         };
-//       }
-//       if (item.type == 4) {
-//         columnsItem = {
-//           label: item.des, //_dictText
-//           field: item.monitorcode,
-//           component: 'JDictSelectTag',
-//           componentProps: {
-//             dictCode: item.dict,
-//             placeholder: '请选择',
-//             stringToNumber: true,
-//           },
-//         };
-//       }
-//     }
-//     columnList.push(columnsItem);
-//   });
-//   formSchema.value = columnList
-//   if(tabType.value === 'deviceInfo'){
-//     formSchema.value.unshift(
-//       {
-//         label: '设备id', //_dictText
-//         field: 'id',
-//         component: 'Input',
-//         componentProps: {
-//           disabled: true,
-//           show: false
-//         },
-//       },
-//       {
-//         label: '点表',
-//         field: 'strtype',
-//         component: 'JDictSelectTag',
-//         componentProps: {
-//           dictCode: `${devicetype.split('_')[0]}kind`,
-//           placeholder: '请选择点表',
-//         },
-//       })
-//       formSchema.value.push(
-//       {
-//         label: '备用分站',
-//         field: 'stationids',
-//         component: 'ApiSelect',
-//         componentProps: {
-//           api: substationList,
-//           labelField: 'strname',
-//           valueField: 'id',
-//         },
-//       },
-//     )
-//   }else{
-//     formSchema.value.unshift(
-//       {
-//         label: '设备id', //_dictText
-//         field: 'id',
-//         component: 'Input',
-//         componentProps: {
-//           disabled: true,
-//           show: false
-//         },
-//       })
-//   }
-// };
+  const emit = defineEmits(['close', 'register']);
+  const props = defineProps({
+    // formSchema: {
+    //   type: Array as PropType<FormSchema[]>,
+    //   default: () => [],
+    // },
+    deviceType: {
+      type: String,
+      default: '',
+    },
+  });
+  const FormRef = ref();
+  const tabType = ref('deviceInfo');
+  const formSchema = ref<Array<FormSchema>>([]);
+  const formData = ref({});
+  // const props.deviceType ref('');
+  const deviceType = computed(() => props.deviceType);
+  // const arrToFormColumns = (tableHeaderColumns = [], devicetype) => {
+  //   const columnList: any[] = [];
+  //   tableHeaderColumns.forEach((item: any) => {
+  //     let columnsItem;
+  //     if (item.type == 1 || item.type == 10) {
+  //       columnsItem = {
+  //         label: item.des, //_dictText
+  //         field: item.monitorcode,
+  //         component: item.type == 1 ? 'Input' : item.type == 10 ? 'InputTextArea' : '',
+  //       };
+  //     } else {
+  //       if (item.type == 2 && item['monitorcode'] == 'nsubstationid') {
+  //         columnsItem = {
+  //           label: item.des, //_dictText
+  //           field: item.monitorcode,
+  //           component: 'ApiSelect',
+  //           componentProps: {
+  //             api: substationList,
+  //             labelField: 'strname',
+  //             valueField: 'id',
+  //           },
+  //         };
+  //       }
+  //       if (item.type == 3) {
+  //         columnsItem = {
+  //           label: item.des, //_dictText
+  //           field: item.monitorcode,
+  //           component: 'RadioGroup',
+  //           defaultValue: 1,
+  //           componentProps: () => {
+  //             return {
+  //               options: [
+  //                 { label: '是', value: 1, key: '1' },
+  //                 { label: '否', value: 0, key: '2' },
+  //               ],
+  //               stringToNumber: true,
+  //             };
+  //           },
+  //         };
+  //       }
+  //       if (item.type == 4) {
+  //         columnsItem = {
+  //           label: item.des, //_dictText
+  //           field: item.monitorcode,
+  //           component: 'JDictSelectTag',
+  //           componentProps: {
+  //             dictCode: item.dict,
+  //             placeholder: '请选择',
+  //             stringToNumber: true,
+  //           },
+  //         };
+  //       }
+  //     }
+  //     columnList.push(columnsItem);
+  //   });
+  //   formSchema.value = columnList
+  //   if(tabType.value === 'deviceInfo'){
+  //     formSchema.value.unshift(
+  //       {
+  //         label: '设备id', //_dictText
+  //         field: 'id',
+  //         component: 'Input',
+  //         componentProps: {
+  //           disabled: true,
+  //           show: false
+  //         },
+  //       },
+  //       {
+  //         label: '点表',
+  //         field: 'strtype',
+  //         component: 'JDictSelectTag',
+  //         componentProps: {
+  //           dictCode: `${devicetype.split('_')[0]}kind`,
+  //           placeholder: '请选择点表',
+  //         },
+  //       })
+  //       formSchema.value.push(
+  //       {
+  //         label: '备用分站',
+  //         field: 'stationids',
+  //         component: 'ApiSelect',
+  //         componentProps: {
+  //           api: substationList,
+  //           labelField: 'strname',
+  //           valueField: 'id',
+  //         },
+  //       },
+  //     )
+  //   }else{
+  //     formSchema.value.unshift(
+  //       {
+  //         label: '设备id', //_dictText
+  //         field: 'id',
+  //         component: 'Input',
+  //         componentProps: {
+  //           disabled: true,
+  //           show: false
+  //         },
+  //       })
+  //   }
+  // };
 
-const arrToFormColumns = (tableHeaderColumns = []) => {
-  const columnList: any[] = [];
-  tableHeaderColumns.forEach((item: any) => {
-    let columnsItem;
-    if (item.type == 1 || item.type == 10) {
-      columnsItem = {
-        label: item.des, //_dictText
-        field: item.monitorcode,
-        component: item.type == 1 ? 'Input' : item.type == 10 ? 'InputTextArea' : '',
-      };
-    } else {
-      if (item.type == 2 && item['monitorcode'] == 'nsubstationid') {
-        columnsItem = {
-          label: item.des, //_dictText
-          field: item.monitorcode,
-          component: 'ApiSelect',
-          componentProps: {
-            api: substationList,
-            labelField: 'strname',
-            valueField: 'id',
-          },
-        };
-      }
-      if (item.type == 3) {
-        columnsItem = {
-          label: item.des, //_dictText
-          field: item.monitorcode,
-          component: 'RadioGroup',
-          defaultValue: 1,
-          componentProps: () => {
-            return {
-              options: [
-                { label: '是', value: 1, key: '1' },
-                { label: '否', value: 0, key: '2' },
-              ],
-              stringToNumber: true,
-            };
-          },
-        };
-      }
-      if (item.type == 4) {
+  const arrToFormColumns = (tableHeaderColumns = []) => {
+    const columnList: any[] = [];
+    tableHeaderColumns.forEach((item: any) => {
+      let columnsItem;
+      if (item.type == 1 || item.type == 10) {
         columnsItem = {
           label: item.des, //_dictText
           field: item.monitorcode,
-          component: 'JDictSelectTag',
-          componentProps: {
-            dictCode: item.dict,
-            placeholder: '请选择',
-            // stringToNumber: true,
-          },
+          component: item.type == 1 ? 'Input' : item.type == 10 ? 'InputTextArea' : '',
         };
+      } else {
+        if (item.type == 2 && item['monitorcode'] == 'nsubstationid') {
+          columnsItem = {
+            label: item.des, //_dictText
+            field: item.monitorcode,
+            component: 'ApiSelect',
+            componentProps: {
+              api: substationList,
+              labelField: 'strname',
+              valueField: 'id',
+            },
+          };
+        }
+        if (item.type == 3) {
+          columnsItem = {
+            label: item.des, //_dictText
+            field: item.monitorcode,
+            component: 'RadioGroup',
+            defaultValue: 1,
+            componentProps: () => {
+              return {
+                options: [
+                  { label: '是', value: 1, key: '1' },
+                  { label: '否', value: 0, key: '2' },
+                ],
+                stringToNumber: true,
+              };
+            },
+          };
+        }
+        if (item.type == 4) {
+          columnsItem = {
+            label: item.des, //_dictText
+            field: item.monitorcode,
+            component: 'JDictSelectTag',
+            componentProps: {
+              dictCode: item.dict,
+              placeholder: '请选择',
+              // stringToNumber: true,
+            },
+          };
+        }
+        // date日期
+        if (item.type == 8) {
+          columnsItem = {
+            label: item.des, //_dictText
+            field: item.monitorcode,
+            component: 'DatePicker',
+            componentProps: {
+              showTime: false,
+              valueFormat: 'YYYY-MM-DD',
+              getPopupContainer: getAutoScrollContainer,
+            },
+          };
+        }
+        // 日期+时间
+        if (item.type == 9) {
+          columnsItem = {
+            label: item.des, //_dictText
+            field: item.monitorcode,
+            component: 'DatePicker',
+            componentProps: {
+              showTime: true,
+              valueFormat: 'YYYY-MM-DD HH:mm:ss',
+              getPopupContainer: getAutoScrollContainer,
+            },
+          };
+        }
       }
-      // date日期
-      if (item.type == 8) {
-        columnsItem = {
-          label: item.des, //_dictText
-          field: item.monitorcode,
-          component: 'DatePicker',
-          componentProps: {
-            showTime: false,
-            valueFormat: 'YYYY-MM-DD',
-            getPopupContainer: getAutoScrollContainer,
-          },
-        };
-      }
-      // 日期+时间
-      if (item.type == 9) {
-        columnsItem = {
-          label: item.des, //_dictText
-          field: item.monitorcode,
-          component: 'DatePicker',
-          componentProps: {
-            showTime: true,
-            valueFormat: 'YYYY-MM-DD HH:mm:ss',
-            getPopupContainer: getAutoScrollContainer,
-          },
-        };
-      }
-    }
-    columnList.push(columnsItem);
-  });
-  formSchema.value = columnList;
-  formSchema.value.unshift(
-    {
-      label: '设备id', //_dictText
-      field: 'id',
-      component: 'Input',
-      componentProps: {
-        disabled: true,
+      columnList.push(columnsItem);
+    });
+    formSchema.value = columnList;
+    formSchema.value.unshift(
+      {
+        label: '设备id', //_dictText
+        field: 'id',
+        component: 'Input',
+        componentProps: {
+          disabled: true,
+        },
       },
-    },
-    {
-      label: '点表',
-      field: 'strtype',
-      component: 'JDictSelectTag',
-      componentProps: {
-        dictCode: `${deviceType.value.split('_')[0]}kind`, //${deviceType.value}kind
-        placeholder: '请选择点表',
-        // stringToNumber: true,
+      {
+        label: '点表',
+        field: 'strtype',
+        component: 'JDictSelectTag',
+        componentProps: {
+          dictCode: `${deviceType.value.split('_')[0]}kind`, //${deviceType.value}kind
+          placeholder: '请选择点表',
+          // stringToNumber: true,
+        },
       },
-    },
-    {
-      label: '规程值',
-      field: 'regulation',
-      component: 'ApiSelect',
-      // componentProps: {
-      //   api: getRegulationList({ deviceKind: deviceType.value.split('_')[0] }),
-      //   labelField: 'name',
-      //   valueField: 'id',
-      // },
-      componentProps: ({ formModel }) => {
-        return {
-          api: getRegulationList.bind(null, { deviceKind: deviceType.value.split('_')[0] }),
-          labelField: 'name',
+      {
+        label: '规程值',
+        field: 'regulation',
+        component: 'ApiSelect',
+        // componentProps: {
+        //   api: getRegulationList({ deviceKind: deviceType.value.split('_')[0] }),
+        //   labelField: 'name',
+        //   valueField: 'id',
+        // },
+        componentProps: ({ formModel }) => {
+          return {
+            api: getRegulationList.bind(null, { deviceKind: deviceType.value.split('_')[0] }),
+            labelField: 'name',
+            valueField: 'id',
+            onChange: (e, option) => {
+              if (option) formModel['regulation'] = option['name'];
+            },
+          };
+        },
+      }
+    );
+
+    formSchema.value.push(
+      {
+        label: '备用分站',
+        field: 'stationids',
+        component: 'ApiSelect',
+        componentProps: {
+          api: substationList,
+          labelField: 'strname',
           valueField: 'id',
-          onChange: (e, option) => {
-            if (option) formModel['regulation'] = option['name'];
-          },
-        };
+        },
       },
+      {
+        label: '是否显示',
+        field: 'linkId',
+        component: 'RadioGroup',
+        defaultValue: 1,
+        componentProps: () => {
+          return {
+            options: [
+              { label: '是', value: 1, key: '1' },
+              { label: '否', value: 0, key: '2' },
+            ],
+            stringToNumber: true,
+          };
+        },
+      }
+    );
+  };
+  // 注册 modal
+  const [register, { closeModal, setModalProps }] = useModalInner(async (data) => {
+    tabType.value = data.type;
+    const deviceId = data.deviceId;
+    if (FormRef.value) {
+      setModalProps({ confirmLoading: false });
+      getColumns();
+      resetSchema(formSchema.value);
+      resetFields();
+      const result = await list({ id: deviceId });
+      formData.value = result['records'][0];
+      await setFieldsValue({
+        ...formData.value,
+      });
     }
-  );
+  });
 
-  formSchema.value.push(
-    {
-      label: '备用分站',
-      field: 'stationids',
-      component: 'ApiSelect',
-      componentProps: {
-        api: substationList,
-        labelField: 'strname',
-        valueField: 'id',
-      },
-    },
-    {
-      label: '是否显示',
-      field: 'linkId',
-      component: 'RadioGroup',
-      defaultValue: 1,
-      componentProps: () => {
-        return {
-          options: [
-            { label: '是', value: 1, key: '1' },
-            { label: '否', value: 0, key: '2' },
-          ],
-          stringToNumber: true,
-        };
-      },
+  const [registerForm, { resetSchema, getFieldsValue, setFieldsValue, resetFields }] = useForm({
+    schemas: formSchema.value,
+    showActionButtonGroup: false,
+  });
+
+  function getColumns() {
+    let formSchemaArr = getFormSchemaColumns(tabType.value === 'deviceInfo' ? `${props.deviceType}_edit` : `${props.deviceType}_input`) || [];
+    if (formSchemaArr && formSchemaArr.length < 1) {
+      const arr = props.deviceType.split('_');
+      formSchemaArr = getFormSchemaColumns(tabType.value === 'deviceInfo' ? arr[0] + '_edit' : arr[0] + '_input') || [];
     }
-  );
-};
-// 注册 modal
-const [register, { closeModal, setModalProps }] = useModalInner(async (data) => {
-  tabType.value = data.type;
-  const deviceId = data.deviceId;
-  if (FormRef.value) {
-    setModalProps({ confirmLoading: false });
-    getColumns();
-    resetSchema(formSchema.value);
-    resetFields();
-    const result = await list({ id: deviceId });
-    formData.value = result['records'][0];
-    await setFieldsValue({
-      ...formData.value,
-    });
+    arrToFormColumns(formSchemaArr);
   }
-});
 
-const [registerForm, { resetSchema, getFieldsValue, setFieldsValue, resetFields }] = useForm({
-  schemas: formSchema.value,
-  showActionButtonGroup: false,
-});
-
-function getColumns() {
-  let formSchemaArr = getFormSchemaColumns(tabType.value === 'deviceInfo' ? `${props.deviceType}_edit` : `${props.deviceType}_input`) || [];
-  if (formSchemaArr && formSchemaArr.length < 1) {
-    const arr = props.deviceType.split('_');
-    formSchemaArr = getFormSchemaColumns(tabType.value === 'deviceInfo' ? arr[0] + '_edit' : arr[0] + '_input') || [];
-  }
-  arrToFormColumns(formSchemaArr);
-}
+  watch(
+    () => props.deviceType,
+    () => {
+      getColumns();
+      if (FormRef.value) resetSchema(formSchema.value);
+    }
+  );
 
-watch(
-  () => props.deviceType,
-  () => {
-    getColumns();
-    if (FormRef.value) resetSchema(formSchema.value);
-  }
-);
+  async function onSubmit() {
+    let formValue = getFieldsValue();
+    setModalProps({ confirmLoading: true });
+    if (tabType.value === 'deviceInfo') {
+      await updateDeviceInfo(formValue);
+    } else {
+      await updateReportInfo(formValue);
+    }
 
-async function onSubmit() {
-  let formValue = getFieldsValue();
-  setModalProps({ confirmLoading: true });
-  if (tabType.value === 'deviceInfo') {
-    await updateDeviceInfo(formValue);
-  } else {
-    await updateReportInfo(formValue);
+    setModalProps({ confirmLoading: false });
+    emit('close');
+    closeModal();
   }
 
-  setModalProps({ confirmLoading: false });
-  emit('close');
-  closeModal();
-}
-
-onMounted(async () => {});
-onUnmounted(() => {});
+  onMounted(async () => {});
+  onUnmounted(() => {});
 </script>
 <style scoped lang="less">
-@import '/@/design/theme.less';
-@import '/@/design/vent/modal.less';
+  @import '/@/design/theme.less';
+  @import '/@/design/vent/modal.less';
 </style>

+ 2 - 2
src/views/vent/monitorManager/compressor/nitrogen.data.ts

@@ -253,8 +253,8 @@ export function getMonitorComponent() {
     default:
       // nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_blt.vue'));
       // nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_bet.vue'));
-     // nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome.vue'));
-      nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_ln.vue'));
+      nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome.vue'));
+      // nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_ln.vue'));
       return nitrogenHome;
   }
 }

+ 4 - 3
src/views/vent/monitorManager/deviceMonitor/components/device/index.vue

@@ -65,8 +65,8 @@
       <div :style="`padding: 5px; height: ${scroll.y + 100}px`">
         <div class="to-small">
           <div class="to-home" @click="toHome()"></div>
-          <div class="to-2D" @click="toHome('2D')"></div>
           <div class="to-3D" @click="toHome('3D')"></div>
+          <div v-if="hasPermission('show:modalChange')" class="to-2D" @click="toHome('2D')"></div>
           <FullscreenOutlined v-if="!tableShow" class="table-show-icon" @click="toHide" />
         </div>
         <div class="device-button-group" v-if="deviceList.length > 0">
@@ -1068,7 +1068,7 @@
 
               // 首次请求获取去所有regulation数据
               if (allRegulations === null) {
-                console.log(allRegulations, 'sssssssss');
+                // console.log(allRegulations, 'sssssssss');
                 const regulationRes = await getRegulation({
                   deviceKind: deviceType.value,
                 });
@@ -1909,7 +1909,7 @@
         padding: 8px;
         backdrop-filter: blur(10px);
         background-color: rgba(30, 58, 117, 0.418);
-        margin-right: 10px;
+
         cursor: pointer;
         &::after {
           width: 34px;
@@ -1933,6 +1933,7 @@
         padding: 8px;
         backdrop-filter: blur(10px);
         background-color: rgba(30, 58, 117, 0.418);
+        margin-right: 10px;
         cursor: pointer;
         &::after {
           width: 34px;

+ 1 - 1
src/views/vent/monitorManager/fanLocalMonitor/components/conditionAssistance.vue

@@ -212,7 +212,7 @@
       const item = assistanceData.value[key];
       assistanceDataList.push(item);
       lineEquationList.push(
-        `H${parseInt(item['Hz'])} = ${item['a']}Q² ${Number(item['b']) > 0 ? '+' : '-'} ${Math.abs(Number(item['b'])).toFixed(4)}Q ${
+        `F${parseInt(item['Hz'])} = ${item['a']}Q² ${Number(item['b']) > 0 ? '+' : '-'} ${Math.abs(Number(item['b'])).toFixed(4)}Q ${
           Number(item['c']) > 0 ? '+' : '-'
         } ${Math.abs(Number(item['c'])).toFixed(4)}`
       );

+ 4 - 4
src/views/vent/monitorManager/fanLocalMonitor/components/entryThree.vue

@@ -58,10 +58,10 @@
                 selectData.windQuantity2
                   ? selectData.windQuantity2
                   : selectData.m3
-                  ? selectData.m3
-                  : selectData.ductOutletAirVolume_merge
-                  ? selectData.ductOutletAirVolume_merge
-                  : '-'
+                    ? selectData.m3
+                    : selectData.ductOutletAirVolume_merge
+                      ? selectData.ductOutletAirVolume_merge
+                      : '-'
               }}</span>
               <span class="unit"> m³/min</span>
             </p>

+ 15 - 3
src/views/vent/monitorManager/fanLocalMonitor/fanLocal.data.ts

@@ -3585,9 +3585,9 @@ export const option = reactive<EChartsOption>({
       formatter: '{value}',
       color: '#0071A5',
     },
-    min: 360,
-    max: 9000,
-    name: 'Pa',
+    min: 15,
+    max: 60,
+    name: 'Hz',
     nameTextStyle: {
       fontWeight: 600,
       fontSize: 13,
@@ -3804,6 +3804,18 @@ export const initData = () => {
   return data;
 };
 
+export const initDataCY = () => {
+  const data: any[] = [];
+  data.push({
+    a: 0,
+    b: 0.16832181672974755,
+    c: 0.8547171776797801,
+    min: 111,
+    max: 295,
+  });
+  return data;
+};
+
 export const fanInfoData = reactive({
   fj: '一号回风井',
   xh: 'FBCDZ No.29',

+ 4 - 4
src/views/vent/monitorManager/fanLocalMonitor/fanLocalDual.threejs.base.ts

@@ -525,10 +525,10 @@ class ModelContext {
           selectData.airSupplyDistence_merge
             ? selectData.airSupplyDistence_merge
             : selectData.fchimenylength
-            ? selectData.fchimenylength
-            : selectData.airSupplyDistence_merge
-            ? selectData.airSupplyDistence_merge
-            : '-'
+              ? selectData.fchimenylength
+              : selectData.airSupplyDistence_merge
+                ? selectData.airSupplyDistence_merge
+                : '-'
         }`,
         font: 'normal 30px Arial',
         color: '#009900',

+ 6 - 5
src/views/vent/monitorManager/fanLocalMonitor/index.vue

@@ -193,8 +193,8 @@
                                 selectData[state.dataIndex.replace('Fan', 'Fan1')] === undefined
                                   ? '无状态'
                                   : selectData[state.dataIndex.replace('Fan', 'Fan1')] == '0'
-                                  ? '正常'
-                                  : '异常'
+                                    ? '正常'
+                                    : '异常'
                               }}</div>
                             </div>
                             <div class="signal-item" v-if="warningMonitorRowIndex == 1">
@@ -212,8 +212,8 @@
                                 selectData[state.dataIndex.replace('Fan', 'Fan2')] == undefined
                                   ? '无状态'
                                   : selectData[state.dataIndex.replace('Fan', 'Fan2')] == '0'
-                                  ? '正常'
-                                  : '异常'
+                                    ? '正常'
+                                    : '异常'
                               }}</div>
                             </div>
                           </div>
@@ -584,6 +584,7 @@
   import { message } from 'ant-design-vue';
   import { useCamera } from '/@/hooks/system/useCamera';
   import { CaretRightOutlined } from '@ant-design/icons-vue';
+  // import ConditionAssistance from './components/conditionAssistanceCY.vue';
   import ConditionAssistance from './components/conditionAssistance.vue';
   import DischargeGas from './components/dischargeGas.vue';
   import SupplyAir from './components/supplyAir.vue';
@@ -1071,7 +1072,7 @@
             if (dataSource.value.length > 0 && dataSource.value[selectRowIndex.value]) {
               Object.assign(selectData, dataSource.value[selectRowIndex.value]);
             }
-            selectData['modalTyoe'] == selectData['install_kind'];
+            selectData['modalTyoe'] = selectData['install_kind'];
             playSmoke(selectData);
             modelRef.value?.animate?.(selectData);
             addText(selectData, fanDualArray.value);

+ 117 - 25
src/views/vent/monitorManager/mainFanMonitor/components/entryThree.vue

@@ -7,7 +7,7 @@
       style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 1; top: 0"
     >
       <div style="position: relative" v-if="selectData['modalTyoe']">
-        <div class="elementTag" id="inputBox1" v-if="backMonitorIsShow && false">
+        <div class="elementTag" id="inputBox1" v-if="backMonitorIsShow">
           <div class="elementContent elementContent-r">
             <!-- <div class="element-item"><span class="data-title">风机气压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div> -->
             <div class="element-item"
@@ -18,7 +18,7 @@
             >
           </div>
         </div>
-        <div class="elementTag" id="inputBox" v-if="frontMonitorIsShow && false">
+        <div class="elementTag" id="inputBox" v-if="frontMonitorIsShow">
           <div class="elementContent elementContent-r">
             <!-- <div class="element-item"><span class="data-title">风机全压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div> -->
             <div class="element-item"
@@ -29,7 +29,7 @@
             >
           </div>
         </div>
-        <div class="elementTag" id="inputBox2" v-if="centerMonitorIsShow && false">
+        <div class="elementTag" id="inputBox2" v-if="centerMonitorIsShow">
           <div class="elementContent elementContent-r">
             <!-- <div class="element-item"><span class="data-title">风机气压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div> -->
             <div class="element-item"
@@ -41,29 +41,29 @@
           </div>
         </div>
         <!-- 18模拟反风锁井 -->
-        <!-- <div v-if="hasPermission('mainFan:ffsjMonitor')" class="elementTag" id="fbm">
+        <div v-if="hasPermission('mainFan:ffsjMonitor_ljh')" class="elementTag" id="fbm">
           <div class="elementContent elementContent-r fbm-box">
             <div class="fbm-video">
-              <LivePlayer id="main-player2" ref="player2" :videoUrl="flvURL2()" muted live />
               <div class="vent-flex-row-between vent-margin-t-20">
                 <span class="data-title">风门开启状态:</span>
-                <template v-if="selectData['ExplosionVentOpen'] == 1 && selectData['ExplosionVentClose'] == 0">
+                <template v-if="explosionDoorData['openGate'] == 1 && explosionDoorData['closeGate'] == 0">
                   <span class="data-title"><span class="signal-round signal-round-blue vent-margin-r-8"></span>开启</span>
                 </template>
-                <template v-else-if="selectData['ExplosionVentOpen'] == 0 && selectData['ExplosionVentClose'] == 1">
+                <template v-else-if="explosionDoorData['openGate'] == 0 && explosionDoorData['closeGate'] == 1">
                   <span class="data-title"><span class="signal-round signal-round-gry vent-margin-r-8"></span>关闭</span>
                 </template>
                 <template v-else>
-                  <div class="vent-margin-l-10"
-                    ><span class="signal-round signal-round-warning vent-margin-r-8"></span>防爆门正在运行 或 数据异常</div
-                  >
+                  <div class="vent-margin-l-10"><span class="signal-round signal-round-warning vent-margin-r-8"></span>正在运行 或 数据异常</div>
                 </template>
               </div>
               <div class="vent-flex-row-between vent-margin-t-10">
                 <span class="data-title">反风锁紧状态:</span>
                 <template
                   v-if="
-                    selectData['Lock1Open'] == 1 && selectData['Lock1Close'] == 0 && selectData['Lock2Open'] == 1 && selectData['Lock2Close'] == '0'
+                    explosionDoorData['lock1Open'] == 1 &&
+                    explosionDoorData['lock1Close'] == 0 &&
+                    explosionDoorData['lock2Open'] == 1 &&
+                    explosionDoorData['lock2Close'] == 0
                   "
                 >
                   <span class="data-title"><span class="signal-round signal-round-blue vent-margin-r-8"></span>锁1开</span>
@@ -71,36 +71,70 @@
                 </template>
                 <template
                   v-else-if="
-                    selectData['Lock1Open'] == '0' && selectData['Lock1Close'] == 1 && selectData['Lock2Open'] == '0' && selectData['Lock2Close'] == 1
+                    explosionDoorData['lock1Open'] == 0 &&
+                    explosionDoorData['lock1Close'] == 1 &&
+                    explosionDoorData['lock2Open'] == 0 &&
+                    explosionDoorData['lock2Close'] == 1
                   "
                 >
                   <span class="data-title"><span class="signal-round signal-round-gry vent-margin-r-8"></span>锁1关</span>
                   <span class="data-title"><span class="signal-round signal-round-gry vent-margin-r-8"></span>锁2关</span>
                 </template>
                 <template v-else>
-                  <div class="vent-margin-l-10"
-                    ><span class="signal-round signal-round-warning vent-margin-r-8"></span>反风锁紧正在运行 或 数据异常</div
-                  >
+                  <div class="vent-margin-l-10"><span class="signal-round signal-round-warning vent-margin-r-8"></span>正在运行 或 数据异常</div>
                 </template>
               </div>
             </div>
             <div class="fbm-data">
-              <div class="element-item"
+              <!-- <div class="element-item"
                 ><span class="data-title">井口负压(kPa):</span
                 ><span>{{ selectData.Fan1FanPre ? selectData.Fan1FanPre : selectData.Fan2FanPre ? selectData.Fan2FanPre : '-' }}</span></div
+              > -->
+              <div class="element-item"
+                ><span class="data-title">井口正压(kPa):</span><span>{{ get(explosionDoorData, 'zhengya') }}</span></div
               >
-              <div class="element-item"><span class="data-title">井口正压(kPa):</span><span>0</span></div>
-              <div class="element-item"><span class="data-title">井口温度(℃):</span><span>19.132</span></div>
-              <div class="element-item"><span class="data-title">甲烷浓度(%):</span><span>0.36</span></div>
-              <div class="element-item"><span class="data-title">CO浓度(%):</span><span>0</span></div>
-              <div class="vent-flex-row-between">
-                <span class="data-title">操作方式:</span>
-                <span class="data-title"><span class="signal-round signal-round-blue vent-margin-r-8"></span>远程</span>
-                <span class="data-title"><span class="signal-round signal-round-gry vent-margin-r-8"></span>就地</span>
+              <div class="element-item"
+                ><span class="data-title">井口温度(℃):</span><span>{{ get(explosionDoorData, 'tempreture') }}</span></div
+              >
+              <div class="element-item"
+                ><span class="data-title">甲烷浓度(%):</span><span>{{ get(explosionDoorData, 'ch4') }}</span></div
+              >
+              <div class="element-item"
+                ><span class="data-title">CO浓度(%):</span><span>{{ get(explosionDoorData, 'co') }}</span></div
+              >
+              <div class="fbm-data">
+                <div class="vent-flex-row-between">
+                  <span class="data-title">操作方式:</span>
+                  <span class="data-title"
+                    ><span
+                      class="signal-round signal-round-blue vent-margin-r-8"
+                      :class="{ 'signal-round-blue': get(explosionDoorData, 'isRemote') == 1 }"
+                    ></span
+                    >远程</span
+                  >
+                  <span class="data-title"
+                    ><span class="signal-round vent-margin-r-8" :class="{ 'signal-round-blue': get(explosionDoorData, 'isRemote') == 0 }"></span
+                    >就地</span
+                  >
+                </div>
+                <div class="vent-flex-row-between">
+                  <span class="data-title">是否检修:</span>
+                  <span class="data-title"
+                    ><span
+                      class="signal-round signal-round-blue vent-margin-r-8"
+                      :class="{ 'signal-round-blue': get(explosionDoorData, 'isrun') == 1 }"
+                    ></span
+                    >正常</span
+                  >
+                  <span class="data-title"
+                    ><span class="signal-round vent-margin-r-8" :class="{ 'signal-round-blue': get(explosionDoorData, 'isrun') == 0 }"></span
+                    >检修</span
+                  >
+                </div>
               </div>
             </div>
           </div>
-        </div> -->
+        </div>
         <div v-if="hasPermission('mainFan:ffsjMonitor')">
           <div class="elementContent elementContent-r fbm-box">
             <div class="fbm-video">
@@ -236,6 +270,7 @@
 </template>
 <script lang="ts" setup>
   import { usePermission } from '/@/hooks/web/usePermission';
+  import { get } from '@/utils/ventutil';
 
   defineProps<{
     loading: boolean;
@@ -249,4 +284,61 @@
 </script>
 <style scoped lang="less">
   @import '/@/design/vent/modal.less';
+  .threejs-Object-CSS {
+    .elementTag {
+      .elementContent {
+        backdrop-filter: blur(2px);
+        width: 220px;
+        background-color: #00000099;
+        box-shadow: 0px 0px 40px #005a838c inset;
+        border: 2px solid #99b0c38c;
+        padding: 15px 20px 15px 20px;
+        font-size: 15px;
+
+        .element-item {
+          line-height: 38px;
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+        }
+
+        span {
+          color: #f2a500;
+        }
+
+        .data-title {
+          max-width: 190px;
+          display: inline-block;
+          color: var(--vent-font-color);
+        }
+      }
+
+      .elementContent-r {
+        &::before {
+          right: 120px;
+        }
+
+        &::after {
+          right: 270px;
+          border: 4px solid #00ddff;
+          background: #a7a7a766;
+        }
+      }
+
+      .fbm-box {
+        width: auto;
+        display: flex;
+        justify-content: space-between;
+
+        .fbm-video {
+          width: 240px;
+          margin-right: 20px;
+        }
+
+        .fbm-data {
+          width: 200px;
+        }
+      }
+    }
+  }
 </style>

+ 17 - 57
src/views/vent/monitorManager/mainFanMonitor/index.vue

@@ -521,6 +521,13 @@
           <div :class="{ 'button-box': true, 'button-disable': false }" @click="handleOk('Fan3Stop')">停止</div>
         </div>
       </div>
+      <div class="" v-if="modalType == 'sdyc' && hasPermission('fan:sdyc')">
+        <!-- 不互斥控制 -->
+        <div class="startSmoke-select">
+          <div :class="{ 'button-box': true, 'button-disable': false }" @click="handleOk('zdms')">自动模式</div>
+          <div :class="{ 'button-box': true, 'button-disable': false }" @click="handleOk('sdms')">手动模式</div>
+        </div>
+      </div>
       <!-- 防爆门控制 -->
       <!-- <div class="" v-if="modalType == 'fbm'">
         <div class="vent-margin-t-20">
@@ -669,6 +676,7 @@
   import { useMessage } from '/@/hooks/web/useMessage';
   import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
   import { useRouter } from 'vue-router';
+  // import ConditionAssistance from './components/conditionAssistanceCY.vue';
   import ConditionAssistance from './components/conditionAssistance.vue';
   import setValueSetting from './components/setValueSetting.vue';
   import AnalysisTable from './components/AnalysisTable.vue';
@@ -961,7 +969,7 @@
         linkDevices.filter((item) => {
           if (item.deviceType == 'faultEqu') {
             faultDevice = item;
-          } else if (item.deviceType == 'antiwindLock') {
+          } else if (item.deviceType == 'antiwindLock' || item.deviceType == 'explosionProof') {
             // 反风锁井
             doorDevice = item;
           }
@@ -1594,6 +1602,14 @@
           .catch((err) => {
             createMessage.error(err.message);
           });
+      } else {
+        start(flag ? flag : modalType.value)
+          .then(() => {
+            createMessage.success('指令下发成功');
+          })
+          .catch((err) => {
+            createMessage.error(err.message);
+          });
       }
       modalIsShow.value = false;
     };
@@ -2252,62 +2268,6 @@
     font-size: 28px;
   }
 
-  .threejs-Object-CSS {
-    .elementTag {
-      .elementContent {
-        backdrop-filter: blur(2px);
-        width: 220px;
-        background-color: #00000099;
-        box-shadow: 0px 0px 40px #005a838c inset;
-        border: 2px solid #99b0c38c;
-        padding: 15px 20px 15px 20px;
-        font-size: 15px;
-
-        .element-item {
-          line-height: 38px;
-          display: flex;
-          justify-content: space-between;
-        }
-
-        span {
-          color: #f2a500;
-        }
-
-        .data-title {
-          display: inline-block;
-          color: var(--vent-font-color);
-        }
-      }
-
-      .elementContent-r {
-        &::before {
-          right: 120px;
-        }
-
-        &::after {
-          right: 270px;
-          border: 4px solid #00ddff;
-          background: #a7a7a766;
-        }
-      }
-
-      .fbm-box {
-        width: auto;
-        display: flex;
-        justify-content: space-between;
-
-        .fbm-video {
-          width: 240px;
-          margin-right: 20px;
-        }
-
-        .fbm-data {
-          width: 200px;
-        }
-      }
-    }
-  }
-
   .btn {
     padding: 4px 12px;
     position: relative;

+ 252 - 4
src/views/vent/monitorManager/mainFanMonitor/main.data.ts

@@ -418,6 +418,16 @@ export const modalTypeArr = {
       value: '自主联控',
       permission: 'fan:zhlk',
     },
+    {
+      key: 'sdyc',
+      value: '手动/远程',
+      permission: 'fan:sdyc',
+    },
+    {
+      key: 'zzcz',
+      value: '终止操作',
+      permission: 'fan:zzcz',
+    },
   ],
 };
 
@@ -811,7 +821,8 @@ export const assistanceData = {
 };
 
 export const setOption = (deviceType?) => {
-  let yMax = 4500;
+  let yMax = 4500,
+    yMin = 0;
   const { sysOrgCode } = useGlobSetting();
   // const sysOrgCode = 'yjmdhswmk';
   if (sysOrgCode == 'sdmtjtdltmk') {
@@ -851,6 +862,9 @@ export const setOption = (deviceType?) => {
     yMax = 5000;
   } else if (sysOrgCode == 'yjmdhswmk') {
     yMax = 5000;
+  } else if (deviceType == 'cy') {
+    yMax = 4000;
+    yMin = 800;
   } else {
     yMax = 4500;
   }
@@ -913,8 +927,8 @@ export const setOption = (deviceType?) => {
         formatter: '{value}',
         color: '#0071A5',
       },
-      min: 0,
-      max: yMax, //武当沟
+      min: yMin,
+      max: yMax,
       name: 'Pa',
       nameTextStyle: {
         fontWeight: 600,
@@ -1159,6 +1173,240 @@ export const initData1 = () => {
   return data;
 };
 
+export const initData2 = () => {
+  const assistanceData = {
+    // '30': {
+    //   angle: 0,
+    //   Hz: 30.0, //频率
+    //   a: -0.17624, //二次项系数
+    //   b: 43.40947, //一次项系数
+    //   c: 97.60705999999982, //常数项系数
+    //   min: 93.0, //风量下限
+    //   max: 171.0, //风量上限
+    // },
+    // '31': {
+    //   angle: 0,
+    //   Hz: 31.0,
+    //   a: -0.17624,
+    //   b: 43.427094,
+    //   c: 95.43614590000016,
+    //   min: 96.1,
+    //   max: 174.4,
+    // },
+    // '32': {
+    //   angle: 0,
+    //   Hz: 32.0,
+    //   a: -0.17624,
+    //   b: 43.444718,
+    //   c: 93.26435059999994,
+    //   min: 99.2,
+    //   max: 177.8,
+    // },
+    // '33': {
+    //   angle: 0,
+    //   Hz: 33.0,
+    //   a: -0.17624,
+    //   b: 43.462342,
+    //   c: 91.09167409999964,
+    //   min: 102.3,
+    //   max: 180.2,
+    // },
+    // '34': {
+    //   angle: 0,
+    //   Hz: 34.0,
+    //   a: -0.17624,
+    //   b: 43.479966000000005,
+    //   c: 88.91811639999969,
+    //   min: 105.4,
+    //   max: 182.0,
+    // },
+    // '35': {
+    //   angle: 0,
+    //   Hz: 35.0,
+    //   a: -0.17624,
+    //   b: 43.49759,
+    //   c: 86.74367749999965,
+    //   min: 108.5,
+    //   max: 184.5,
+    // },
+    '36': {
+      angle: 0,
+      Hz: 36.0,
+      a: -0.014,
+      b: 11.01024,
+      c: 414.6167,
+      min: 330,
+      max: 710,
+    },
+    // '37': {
+    //   angle: 0,
+    //   Hz: 37.0,
+    //   a: -0.17624,
+    //   b: 43.532838,
+    //   c: 82.3921561000002,
+    //   min: 114.7,
+    //   max: 190.8,
+    // },
+    // '38': {
+    //   angle: 0,
+    //   Hz: 38.0,
+    //   a: -0.17624,
+    //   b: 43.550462,
+    //   c: 80.21507359999941,
+    //   min: 117.8,
+    //   max: 193.0,
+    // },
+    '39': {
+      angle: 0,
+      Hz: 39.0,
+      a: -0.0132,
+      b: 10.500657,
+      c: 785.54678,
+      min: 370,
+      max: 760,
+    },
+    // '40': {
+    //   angle: 0,
+    //   Hz: 40.0,
+    //   a: -0.17624,
+    //   b: 43.58571,
+    //   c: 75.85826499999985,
+    //   min: 123.0,
+    //   max: 197.0,
+    // },
+    // '41': {
+    //   angle: 0,
+    //   Hz: 41.0,
+    //   a: -0.17624,
+    //   b: 43.603334,
+    //   c: 73.67853890000015,
+    //   min: 125.1,
+    //   max: 199.4,
+    // },
+    '42': {
+      angle: 0,
+      Hz: 42.0,
+      a: -0.012,
+      b: 10.03424,
+      c: 971.438895,
+      min: 390,
+      max: 820,
+    },
+    // '43': {
+    //   angle: 0,
+    //   Hz: 43.0,
+    //   a: -0.17624,
+    //   b: 43.638582,
+    //   c: 69.31644309999956,
+    //   min: 130.3,
+    //   max: 205.8,
+    // },
+    // '44': {
+    //   angle: 0,
+    //   Hz: 44.0,
+    //   a: -0.17624,
+    //   b: 43.656206000000005,
+    //   c: 67.13407339999958,
+    //   min: 132.4,
+    //   max: 208.5,
+    // },
+    // '45': {
+    //   angle: 0,
+    //   Hz: 45.0,
+    //   a: -0.17624,
+    //   b: 43.67383,
+    //   c: 64.9508224999995,
+    //   min: 134.5,
+    //   max: 211.8,
+    // },
+    '46': {
+      angle: 0,
+      Hz: 46.0,
+      a: -0.012,
+      b: 10.551334,
+      c: 967.32433,
+      min: 430,
+      max: 865,
+    },
+    // '47': {
+    //   angle: 0,
+    //   Hz: 47.0,
+    //   a: -0.17624,
+    //   b: 43.709078,
+    //   c: 60.58167709999998,
+    //   min: 138.7,
+    //   max: 217.8,
+    // },
+    // '48': {
+    //   angle: 0,
+    //   Hz: 48.0,
+    //   a: -0.17624,
+    //   b: 43.726702,
+    //   c: 58.39578259999962,
+    //   min: 140.8,
+    //   max: 219.2,
+    // },
+    '49': {
+      angle: 0,
+      Hz: 49.0,
+      a: -0.0115,
+      b: 10.8013546,
+      c: 913.4355668,
+      min: 460,
+      max: 921,
+    },
+    // '50': {
+    //   angle: 0,
+    //   Hz: 50.0,
+    //   a: -0.17624,
+    //   b: 43.76195,
+    //   c: 54.021349999999984,
+    //   min: 146.0,
+    //   max: 223.0,
+    // },
+  };
+  // const num = 21;
+  // const a = -0.17624; //-0.17624,
+  // const m = 2770.6411125432646,
+  //   n = -124.15442010894235;
+  // let i = 21;
+  const data = [];
+  for (const key in assistanceData) {
+    // i -= 1;
+    // const p = i;
+    const item = assistanceData[key];
+    // item['b'] = 2 * a * (n + p);
+    // item['c'] = a * (n + p) * (n + p) + m - i * 50;
+    // if (sysOrgCode == 'sdmtjtdltmk') {
+    //   // 大柳塔井整体向右下移动
+    //   item['min'] = item['min'] + 20;
+    //   item['max'] = item['max'] + 20;
+    //   item['b'] = 2 * a * (n + p) + 3;
+    //   item['c'] = a * (n + p) * (n + p) + m - i * 60;
+    // } else {
+    //   item['b'] = 2 * a * (n + p);
+    //   item['c'] = a * (n + p) * (n + p) + m - i * 50;
+    //   // //白家渠
+    //   // a = -0.13424;
+    //   // item['a'] = Math.round((a + 0.002 * (num - i)) * 10000) / 10000;
+    //   // item['min'] = item['min'] + 50 + (num - i) * 2;
+    //   // item['max'] = item['max'] + 65 + (num - i) * 3.5;
+    //   // item['b'] = 2 * item['a'] * (n + p) + 8.8;
+    //   // item['c'] = item['a'] * (n + p) * (n + p) + m - i * 60;
+    //   // //武当沟
+    //   // a = -0.17724;
+    //   // item['a'] = Math.round((a - 0.002 * (num - i)) * 10000) / 10000;
+    //   // item['min'] = item['min'] - 40 - (num - i) * 1;
+    //   // item['max'] = item['max'] - 60 - (num - i) * 0.5;
+    //   // item['b'] = 2 * item['a'] * (n + p) - 16.5;
+    //   // item['c'] = item['a'] * (n + p) * (n + p) + m - i * 40;
+    // }
+    data.push(item);
+  }
+  console.log(data);
+  return data;
+};
+
 // 大柳塔武当沟
 export const initData = (deviceType?) => {
   const { sysOrgCode } = useGlobSetting();
@@ -1193,7 +1441,7 @@ export const initData = (deviceType?) => {
     //海石湾
     return initDataHsw();
   } else {
-    return initData1();
+    // return initData1();
   }
 };
 // 柳塔