Browse Source

Merge branch 'master' of http://182.92.126.35:3000/hrx/mky-vent-base

lxh 5 months ago
parent
commit
72c940531d

+ 0 - 1
src/components/Table/src/types/pagination.ts

@@ -98,5 +98,4 @@ export interface PaginationProps {
    * @type Function
    */
   itemRender?: (props: PaginationRenderProps) => VNodeChild | JSX.Element;
-
 }

+ 193 - 186
src/layouts/default/header/components/VoiceBroadcast.vue

@@ -19,248 +19,256 @@
       </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 v-if="broadcastList.length == 0" class="no-context">暂无内容</div>
-          <div class="context-detail" v-else v-for="(item, index) in broadcastList" :key="index"
-            :style="{ color: item['isok'] == 0 ? 'red' : '#eee' }">
+          <div
+            class="context-detail"
+            v-else
+            v-for="(item, index) in broadcastList"
+            :key="index"
+            :style="{ color: item['isok'] == 0 ? '#f73210' : '#eee', fontWeight: item['isok'] == 0 ? '600' : '500' }"
+          >
             <div>{{ item['createTime'] }}</div>
             <div>{{ item['devicekind_dictText'] }}</div>
             <div>{{ item['wardescrip'] || item['nwartype_dictText'] }}</div>
             <div>{{ item['isok'] ? '已解决' : '未解决' }}</div>
           </div>
-          <div v-if="broadcastList.length > 0" class="more" @click="toMore">更多>></div>
         </div>
+        <div v-if="broadcastList.length > 0" class="more" @click="toMore">更多>></div>
       </div>
     </div>
   </div>
 </template>
 <script lang="ts">
-import { Tooltip, Badge } from 'ant-design-vue';
-import { SoundOutlined, BellOutlined, WarningOutlined } from '@ant-design/icons-vue';
-import Icon from '/@/components/Icon';
-import { defineComponent, ref, unref, onMounted } from 'vue';
-import { defHttp } from '/@/utils/http/axios';
-import { useRouter } from 'vue-router';
-import { connectWebSocket, onWebSocket } from '/@/hooks/web/useWebSocket';
-import { getToken } from '/@/utils/auth';
-import { useUserStore } from '/@/store/modules/user';
-import { useGlobSetting } from '/@/hooks/setting';
-import SpeakVoice from './notify/speakVoice';
+  import { Tooltip, Badge } from 'ant-design-vue';
+  import { SoundOutlined, BellOutlined, WarningOutlined } from '@ant-design/icons-vue';
+  import Icon from '/@/components/Icon';
+  import { defineComponent, ref, unref, onMounted } from 'vue';
+  import { defHttp } from '/@/utils/http/axios';
+  import { useRouter } from 'vue-router';
+  import { connectWebSocket, onWebSocket } from '/@/hooks/web/useWebSocket';
+  import { getToken } from '/@/utils/auth';
+  import { useUserStore } from '/@/store/modules/user';
+  import { useGlobSetting } from '/@/hooks/setting';
+  import SpeakVoice from './notify/speakVoice';
 
-export default defineComponent({
-  name: 'VoiceBroadcast',
-  components: { Icon, Tooltip, Badge, SoundOutlined, BellOutlined, WarningOutlined },
+  export default defineComponent({
+    name: 'VoiceBroadcast',
+    components: { Icon, Tooltip, Badge, SoundOutlined, BellOutlined, WarningOutlined },
 
-  setup() {
-    const speakVoice = new SpeakVoice();
-    const userStore = useUserStore();
-    const glob = useGlobSetting();
-    const router = useRouter();
-    const list = (params) => defHttp.get({ url: '/safety/ventanalyAlarmLog/list', params });
-    const activeKey = ref(0);
-    const isShowWarningBroad = ref(false);
-    const isBroad = ref(true);
-    const isWarningDot = ref(false);
-    const broadcastList = ref([]);
-    function showWarningBroad() {
-      isShowWarningBroad.value = !isShowWarningBroad.value;
-      if (isShowWarningBroad.value) {
-        toSelectList(0);
+    setup() {
+      const speakVoice = new SpeakVoice();
+      const userStore = useUserStore();
+      const glob = useGlobSetting();
+      const router = useRouter();
+      const list = (params) => defHttp.get({ url: '/safety/ventanalyAlarmLog/list', params });
+      const activeKey = ref(0);
+      const isShowWarningBroad = ref(false);
+      const isBroad = ref(true);
+      const isWarningDot = ref(false);
+      const broadcastList = ref([]);
+      function showWarningBroad() {
+        isShowWarningBroad.value = !isShowWarningBroad.value;
+        if (isShowWarningBroad.value) {
+          toSelectList(0);
+        }
       }
-    }
 
-    function handleBroad() {
-      isBroad.value = !isBroad.value;
-    }
+      function handleBroad() {
+        isBroad.value = !isBroad.value;
+      }
 
-    async function toSelectList(key) {
-      activeKey.value = key;
-      const res = await list({ pageSize: 20, devicetype: '', isok: key == 1 ? 0 : key == 2 ? 1 : null });
-      broadcastList.value = res['records'];
-      // const isHasWarning = broadcastList.value.findIndex((item) => !item['isok']);
-      // isWarningDot.value = isHasWarning > -1 ? true : false;
-    }
+      async function toSelectList(key) {
+        activeKey.value = key;
+        const res = await list({ pageSize: 20, devicetype: '', isok: key == 1 ? 0 : key == 2 ? 1 : null });
+        broadcastList.value = res['records'];
+        // const isHasWarning = broadcastList.value.findIndex((item) => !item['isok']);
+        // isWarningDot.value = isHasWarning > -1 ? true : false;
+      }
 
-    async function toMore() {
-      await router.push({ path: '/monitorChannel/device-monitor/warningHistory' });
-      showWarningBroad();
-    }
+      async function toMore() {
+        await router.push({ path: '/monitorChannel/device-monitor/warningHistory' });
+        showWarningBroad();
+      }
 
-    // 初始化 WebSocket
-    function initWebSocket() {
-      let token = getToken();
-      //将登录token生成一个短的标识
-      // let wsClientId = md5(token);
-      // let userId = unref(userStore.getUserInfo).id + '_' + wsClientId;
-      let userId = unref(userStore.getUserInfo).id + '?token=' + token;
-      // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https
-      let url = glob.wsUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/websocket/' + userId;
-      connectWebSocket(url);
-      onWebSocket(onWebSocketMessage);
-    }
+      // 初始化 WebSocket
+      function initWebSocket() {
+        let token = getToken();
+        //将登录token生成一个短的标识
+        // let wsClientId = md5(token);
+        // let userId = unref(userStore.getUserInfo).id + '_' + wsClientId;
+        let userId = unref(userStore.getUserInfo).id + '?token=' + token;
+        // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https
+        let url = glob.wsUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/websocket/' + userId;
+        connectWebSocket(url);
+        onWebSocket(onWebSocketMessage);
+      }
 
-    function onWebSocketMessage(data) {
-      // console.log('WebSocket 监测消息--------------》', data);
-      if (data.topic === 'warn' || data.cmd === 'user') {
-        if (isBroad.value) {
-          const messageText = data['warndata'];
-          // const messageText = '这是一个测试';
-          speakVoice.handleReply(messageText);
-        }
-        if (!isShowWarningBroad.value) {
-          isWarningDot.value = true;
-        } else {
-          isWarningDot.value = false;
-        }
-        setTimeout(() => {
-          if (isShowWarningBroad.value) {
-            toSelectList(0);
+      function onWebSocketMessage(data) {
+        // console.log('WebSocket 监测消息--------------》', data);
+        if (data.topic === 'warn' || data.cmd === 'user') {
+          if (isBroad.value) {
+            const messageText = data['warndata'];
+            // const messageText = '这是一个测试';
+            speakVoice.handleReply(messageText);
           }
-        }, 0);
+          if (!isShowWarningBroad.value) {
+            isWarningDot.value = true;
+          } else {
+            isWarningDot.value = false;
+          }
+          setTimeout(() => {
+            if (isShowWarningBroad.value) {
+              toSelectList(0);
+            }
+          }, 0);
+        }
       }
-    }
-    onMounted(() => {
-      initWebSocket();
-    });
+      onMounted(() => {
+        initWebSocket();
+      });
 
-    return { showWarningBroad, isShowWarningBroad, activeKey, toSelectList, broadcastList, toMore, isBroad, handleBroad, isWarningDot };
-  },
-});
+      return { showWarningBroad, isShowWarningBroad, activeKey, toSelectList, broadcastList, toMore, isBroad, handleBroad, isWarningDot };
+    },
+  });
 </script>
 <style lang="less" scoped>
-.btn {
-  line-height: 30px;
-  margin-right: 20px;
-  cursor: pointer;
-  display: flex;
-}
+  .btn {
+    line-height: 30px;
+    margin-right: 20px;
+    cursor: pointer;
+    display: flex;
+  }
 
-.no-play {
-  background: linear-gradient(to bottom left,
+  .no-play {
+    background: linear-gradient(
+      to bottom left,
       transparent 0%,
       transparent calc(50% - 1px),
       #000000 50%,
       transparent calc(50% + 1px),
-      transparent 100%);
-}
-
-.broadcast {
-  width: 400px;
-  height: 250px;
-  border-radius: 4px;
-  position: fixed;
-  top: 50px;
-  right: 20px;
-  background-color: rgb(255, 255, 255);
-  background: url('../../../../assets/images/warn-dialog-bg.png') no-repeat center;
-  background-size: 100% 100%;
-  z-index: 9999999;
-  color: #FFF;
-
-  .title {
-    height: 32px;
-    padding: 0 20px;
-
-    :deep(.ant-badge:not(.ant-badge-status)) {
-      margin-right: 40px !important;
-    }
-
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    margin-bottom: 5px;
+      transparent 100%
+    );
+  }
 
-    .message-title {
-      font-size: 16px;
-    }
+  .broadcast {
+    width: 500px;
+    height: 350px;
+    border-radius: 4px;
+    position: fixed;
+    top: 50px;
+    right: 20px;
+    background-color: rgb(255, 255, 255);
+    background: url('../../../../assets/images/warn-dialog-bg.png') no-repeat center;
+    background-size: 100% 100%;
+    z-index: 9999999;
+    color: #fff;
 
-    .badge-box {
-      display: flex;
-      align-items: center;
+    .title {
+      height: 32px;
+      padding: 0 20px;
 
-      .badge-title {
-        display: inline-block;
-        width: 62px;
-        line-height: 32px;
-        background-color: #2174f0;
-        border-radius: 26px;
-        text-align: center;
-        color: #fff;
-        padding-bottom: 2px;
+      :deep(.ant-badge:not(.ant-badge-status)) {
+        margin-right: 40px !important;
       }
-    }
-  }
 
-  .broadcast-context {
-    .context-tab {
       display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin-bottom: 5px;
 
-      .context-tab-item {
-        line-height: 24px;
-        background-color: #6b6b6b;
-        border-radius: 24px;
-        text-align: center;
-        padding: 0 10px;
-        color: #fff;
-        margin: 5px;
-        cursor: pointer;
-        font-size: 14px;
+      .message-title {
+        font-size: 18px;
+        padding-top: 10px;
       }
 
-      .context-tab-item-active {
-        background-color: #2174f0;
+      .badge-box {
+        display: flex;
+        align-items: center;
+        padding-top: 10px;
+        .badge-title {
+          display: inline-block;
+          width: 62px;
+          line-height: 32px;
+          background-color: #2174f0;
+          border-radius: 26px;
+          text-align: center;
+          color: #fff;
+          padding-bottom: 2px;
+        }
       }
     }
 
-    .context-box {
-      flex: 1;
-      padding: 0 10px;
-      height: 178px;
-      overflow-y: auto;
-
-      .no-context {
+    .broadcast-context {
+      .context-tab {
         display: flex;
-        justify-content: center;
-        padding-top: 30px;
-        font-size: 16px;
+        padding: 20px;
+        .context-tab-item {
+          line-height: 24px;
+          background-color: #6b6b6b;
+          border-radius: 24px;
+          text-align: center;
+          padding: 0 10px;
+          color: #fff;
+          margin: 5px;
+          cursor: pointer;
+          font-size: 14px;
+        }
+
+        .context-tab-item-active {
+          background-color: #2174f0;
+        }
       }
 
-      .context-detail {
-        display: flex;
-        justify-content: space-between;
-        line-height: 24px;
-        padding: 0px 3px;
+      .context-box {
+        flex: 1;
+        padding: 0 10px;
+        height: 200px;
+        overflow-y: auto;
 
-        div {
+        .no-context {
           display: flex;
-          justify-content: flex-start;
+          justify-content: center;
+          padding-top: 30px;
+          font-size: 16px;
+        }
 
-          &:nth-child(1) {
-            width: 40%;
-          }
+        .context-detail {
+          display: flex;
+          justify-content: space-between;
+          line-height: 24px;
+          padding: 0px 16px;
 
-          &:nth-child(2) {
-            width: 20%;
-          }
+          div {
+            display: flex;
+            justify-content: flex-start;
 
-          &:nth-child(3) {
-            width: 25%;
-          }
+            &:nth-child(1) {
+              width: 40%;
+            }
 
-          &:nth-child(4) {
-            width: 15%;
+            &:nth-child(2) {
+              width: 20%;
+            }
+
+            &:nth-child(3) {
+              width: 25%;
+            }
+
+            &:nth-child(4) {
+              width: 15%;
+            }
           }
         }
       }
-
       .more {
+        position: absolute;
+        left: 24px;
+        bottom: 10px;
         cursor: pointer;
 
         &:hover {
@@ -269,5 +277,4 @@ export default defineComponent({
       }
     }
   }
-}
 </style>

+ 1 - 1
src/utils/threejs/main.worker.ts

@@ -75,7 +75,7 @@ export function initModalWorker() {
     // 'workFace/workFace-hui_2024-03-04.glb',
     'workFace/workFace1-1_2024-04-09.glb',
     'workFace/workFace2-1_2024-04-09.glb',
-    'workFace/workFace_2024-09-19.glb',
+    'workFace/workFace_2024-09-20.glb',
   ];
 
   const db: any = new Dexie('DB');

+ 14 - 0
src/views/vent/deviceManager/substationTabel/substation.data.ts

@@ -178,6 +178,20 @@ export const formSchema: FormSchema[] = [
     component: 'Input',
   },
   {
+    label: '是否从0开始',
+    field: 'isZeroStart',
+    component: 'RadioGroup',
+    defaultValue: 1,
+    componentProps: () => {
+      return {
+        options: [
+          { label: '是', value: 1, key: '1' },
+          { label: '否', value: 0, key: '2' },
+        ],
+      };
+    },
+  },
+  {
     label: '请求方式',
     field: 'reqtype',
     component: 'JDictSelectTag',

+ 6 - 8
src/views/vent/gas/gasReport/gas-report.api.ts

@@ -1,26 +1,24 @@
 import { defHttp } from '/@/utils/http/axios';
 
 enum Api {
-    getGasAddressList = '/safety/gasDayReport/getGasAddressList',
-    getList='/safety/gasDayReport/list',
-    expComReportByParam='/safety/reportInfo/expComReportByParam'
+  getGasAddressList = '/safety/gasDayReport/getGasAddressList',
+  getList = '/safety/gasDayReport/list',
+  expComReportByParam = '/safety/reportInfo/expComReportByParam',
 }
 /**
  * 获取瓦斯日报区队,检测地点下拉选项
  * @param params
  */
-export const getGasAddressList = (params) => defHttp.get({ url: Api.getGasAddressList,params });
-
-
+export const getGasAddressList = (params) => defHttp.get({ url: Api.getGasAddressList, params });
 
 /**
  * 获取瓦斯日报列表数据
  * @param params
  */
-export const getList = (params) => defHttp.get({ url: Api.getList,params });
+export const getList = (params) => defHttp.get({ url: Api.getList, params });
 
 /**
  * 导出瓦斯日报
  * @param params
  */
-export const expComReportByParam = (params) => defHttp.post({ url: Api.expComReportByParam, params, responseType: 'blob' });
+export const expComReportByParam = (params) => defHttp.post({ url: Api.expComReportByParam, params, responseType: 'blob' });

+ 490 - 496
src/views/vent/gas/gasReport/gas-report.data.ts

@@ -1,506 +1,500 @@
 import { BasicColumn } from '/@/components/Table';
 export const columns: BasicColumn[] = [
-    {
-        title: '瓦斯日报',
+  {
+    title: '瓦斯日报',
+    children: [
+      {
+        title: '早班',
         children: [
-            {
-                title: '早班',
-                children: [
-                    {
-                        title: '第一次',
-                        children: [
-                            {
-                                title: '区队',
-                                dataIndex: 'districtTeam_dictText',
-                                key: 'districtTeam_dictText',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '检测地点',
-                                dataIndex: 'strInstallPos',
-                                key: 'strInstallPos',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '检查工',
-                                dataIndex: 'checkPersonEarly',
-                                key: 'checkPersonEarly',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '检测时间',
-                                dataIndex: 'timeEarly1',
-                                key: 'timeEarly1',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '温度',
-                                dataIndex: 'tEarly1',
-                                key: 'tEarly1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '便携仪',
-                                dataIndex: 'bxySdzEarly1',
-                                key: 'bxySdzEarly1',
-                                width: 100,
-                                align: 'center',
-                            },
-                            {
-                                title: '光瓦',
-                                dataIndex: 'gwSdzEarly1',
-                                key: 'gwSdzEarly1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '甲烷传感器',
-                                dataIndex: 'jwSdzEarly1',
-                                key: 'jwSdzEarly1',
-                                width: 110,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CH4(%)',
-                                dataIndex: 'ch4Early1',
-                                key: 'ch4Early1',
-                                width: 100,
-                                align: 'center'
-                            },
+          {
+            title: '第一次',
+            children: [
+              {
+                title: '区队',
+                dataIndex: 'districtTeam_dictText',
+                key: 'districtTeam_dictText',
+                width: 100,
+                align: 'center',
+              },
+              {
+                title: '检测地点',
+                dataIndex: 'strInstallPos',
+                key: 'strInstallPos',
+                width: 120,
+                align: 'center',
+              },
+              {
+                title: '检查工',
+                dataIndex: 'checkPersonEarly',
+                key: 'checkPersonEarly',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '检测时间',
+                dataIndex: 'timeEarly1',
+                key: 'timeEarly1',
+                width: 100,
+                align: 'center',
+              },
+              {
+                title: '温度',
+                dataIndex: 'tEarly1',
+                key: 'tEarly1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '便携仪',
+                dataIndex: 'bxySdzEarly1',
+                key: 'bxySdzEarly1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '光瓦',
+                dataIndex: 'gwSdzEarly1',
+                key: 'gwSdzEarly1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '甲烷传感器',
+                dataIndex: 'jwSdzEarly1',
+                key: 'jwSdzEarly1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: 'CH4(%)',
+                dataIndex: 'ch4Early1',
+                key: 'ch4Early1',
+                width: 60,
+                align: 'center',
+              },
 
-                            {
-                                title: 'CO2(%)',
-                                dataIndex: 'co2Early1',
-                                key: 'co2Early1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CO(ppm)',
-                                dataIndex: 'coEarly1',
-                                key: 'coEarly1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'o2(%)',
-                                dataIndex: 'o2Early1',
-                                key: 'o2Early1',
-                                width: 100,
-                                align: 'center'
-                            },
-                        ]
-                    },
-                    {
-                        title: '第二次',
-                        children: [
-                            {
-                                title: '检测时间',
-                                dataIndex: 'timeEarly2',
-                                key: 'timeEarly2',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '温度',
-                                dataIndex: 'tEarly2',
-                                key: 'tEarly2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '便携仪',
-                                dataIndex: 'bxySdzEarly2',
-                                key: 'bxySdzEarly2',
-                                width: 100,
-                                align: 'center',
-                            },
-                            {
-                                title: '光瓦',
-                                dataIndex: 'gwSdzEarly2',
-                                key: 'gwSdzEarly2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '甲烷传感器',
-                                dataIndex: 'jwSdzEarly2',
-                                key: 'jwSdzEarly2',
-                                width: 110,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CH4(%)',
-                                dataIndex: 'ch4Early2',
-                                key: 'ch4Early2',
-                                width: 100,
-                                align: 'center'
-                            },
+              {
+                title: 'CO2(%)',
+                dataIndex: 'co2Early1',
+                key: 'co2Early1',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'CO(ppm)',
+                dataIndex: 'coEarly1',
+                key: 'coEarly1',
+                width: 65,
+                align: 'center',
+              },
+              {
+                title: 'o2(%)',
+                dataIndex: 'o2Early1',
+                key: 'o2Early1',
+                width: 60,
+                align: 'center',
+              },
+            ],
+          },
+          {
+            title: '第二次',
+            children: [
+              {
+                title: '检测时间',
+                dataIndex: 'timeEarly2',
+                key: 'timeEarly2',
+                width: 100,
+                align: 'center',
+              },
+              {
+                title: '温度',
+                dataIndex: 'tEarly2',
+                key: 'tEarly2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '便携仪',
+                dataIndex: 'bxySdzEarly2',
+                key: 'bxySdzEarly2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '光瓦',
+                dataIndex: 'gwSdzEarly2',
+                key: 'gwSdzEarly2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '甲烷传感器',
+                dataIndex: 'jwSdzEarly2',
+                key: 'jwSdzEarly2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: 'CH4(%)',
+                dataIndex: 'ch4Early2',
+                key: 'ch4Early2',
+                width: 60,
+                align: 'center',
+              },
 
-                            {
-                                title: 'CO2(%)',
-                                dataIndex: 'co2Early2',
-                                key: 'co2Early2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CO(ppm)',
-                                dataIndex: 'coEarly2',
-                                key: 'coEarly2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'o2(%)',
-                                dataIndex: 'o2Early2',
-                                key: 'o2Early2',
-                                width: 100,
-                                align: 'center'
-                            },
-                        ]
-                    },
-
-                ]
-            },
-            {
-                title: '午班',
-                children: [
-                    {
-                        title: '第一次',
-                        children: [
-                            {
-                                title: '区队',
-                                dataIndex: 'districtTeam',
-                                key: 'districtTeam',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '检测地点',
-                                dataIndex: 'strInstallPos',
-                                key: 'strInstallPos',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '检查工',
-                                dataIndex: 'checkPersonNoon',
-                                key: 'checkPersonNoon',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '检测时间',
-                                dataIndex: 'timeNoon1',
-                                key: 'timeNoon1',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '温度',
-                                dataIndex: 'tNoon1',
-                                key: 'tNoon1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '便携仪',
-                                dataIndex: 'bxySdzNoon1',
-                                key: 'bxySdzNoon1',
-                                width: 100,
-                                align: 'center',
-                            },
-                            {
-                                title: '光瓦',
-                                dataIndex: 'gwSdzNoon1',
-                                key: 'gwSdzNoon1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '甲烷传感器',
-                                dataIndex: 'jwSdzNoon1',
-                                key: 'jwSdzNoon1',
-                                width: 110,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CH4(%)',
-                                dataIndex: 'ch4Noon1',
-                                key: 'ch4Noon1',
-                                width: 100,
-                                align: 'center'
-                            },
-
-                            {
-                                title: 'CO2(%)',
-                                dataIndex: 'co2Noon1',
-                                key: 'co2Noon1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CO(ppm)',
-                                dataIndex: 'coNoon1',
-                                key: 'coNoon1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'o2(%)',
-                                dataIndex: 'o2Noon1',
-                                key: 'o2Noon1',
-                                width: 100,
-                                align: 'center'
-                            },
-                        ]
-                    },
-                    {
-                        title: '第二次',
-                        children: [
-                            {
-                                title: '检测时间',
-                                dataIndex: 'timeNoon2',
-                                key: 'timeNoon2',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '温度',
-                                dataIndex: 'tNoon2',
-                                key: 'tNoon2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '便携仪',
-                                dataIndex: 'bxySdzNoon2',
-                                key: 'bxySdzNoon2',
-                                width: 100,
-                                align: 'center',
-                            },
-                            {
-                                title: '光瓦',
-                                dataIndex: 'gwSdzNoon2',
-                                key: 'gwSdzNoon2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '甲烷传感器',
-                                dataIndex: 'jwSdzNoon2',
-                                key: 'jwSdzNoon2',
-                                width: 110,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CH4(%)',
-                                dataIndex: 'ch4Noon2',
-                                key: 'ch4Noon2',
-                                width: 100,
-                                align: 'center'
-                            },
-
-                            {
-                                title: 'CO2(%)',
-                                dataIndex: 'co2Noon2',
-                                key: 'co2Noon2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CO(ppm)',
-                                dataIndex: 'coNoon2',
-                                key: 'coNoon2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'o2(%)',
-                                dataIndex: 'o2Noon2',
-                                key: 'o2Noon2',
-                                width: 100,
-                                align: 'center'
-                            },
-                        ]
-                    },
-
-                ]
-            },
-            {
-                title: '晚班',
-                children: [
-                    {
-                        title: '第一次',
-                        children: [
-                            {
-                                title: '区队',
-                                dataIndex: 'districtTeam',
-                                key: 'districtTeam',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '检测地点',
-                                dataIndex: 'strInstallPos',
-                                key: 'strInstallPos',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '检查工',
-                                dataIndex: 'checkPersonNight',
-                                key: 'checkPersonNight',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '检测时间',
-                                dataIndex: 'timeNight1',
-                                key: 'timeNight1',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '温度',
-                                dataIndex: 'tNight1',
-                                key: 'tNight1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '便携仪',
-                                dataIndex: 'bxySdzNight1',
-                                key: 'bxySdzNight1',
-                                width: 100,
-                                align: 'center',
-                            },
-                            {
-                                title: '光瓦',
-                                dataIndex: 'gwSdzNight1',
-                                key: 'gwSdzNight1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '甲烷传感器',
-                                dataIndex: 'jwSdzNight1',
-                                key: 'jwSdzNight1',
-                                width: 110,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CH4(%)',
-                                dataIndex: 'ch4Night1',
-                                key: 'ch4Night1',
-                                width: 100,
-                                align: 'center'
-                            },
-
-                            {
-                                title: 'CO2(%)',
-                                dataIndex: 'co2Night1',
-                                key: 'co2Night1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CO(ppm)',
-                                dataIndex: 'coNight1',
-                                key: 'coNight1',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'o2(%)',
-                                dataIndex: 'o2Night1',
-                                key: 'o2Night1',
-                                width: 100,
-                                align: 'center'
-                            },
-                        ]
-                    },
-                    {
-                        title: '第二次',
-                        children: [
-                            {
-                                title: '检测时间',
-                                dataIndex: 'timeNight2',
-                                key: 'timeNight2',
-                                width: 160,
-                                align: 'center'
-                            },
-                            {
-                                title: '温度',
-                                dataIndex: 'tNight2',
-                                key: 'tNight2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '便携仪',
-                                dataIndex: 'bxySdzNight2',
-                                key: 'bxySdzNight2',
-                                width: 100,
-                                align: 'center',
-                            },
-                            {
-                                title: '光瓦',
-                                dataIndex: 'gwSdzNight2',
-                                key: 'gwSdzNight2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: '甲烷传感器',
-                                dataIndex: 'jwSdzNight2',
-                                key: 'jwSdzNight2',
-                                width: 110,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CH4(%)',
-                                dataIndex: 'ch4Night2',
-                                key: 'ch4Night2',
-                                width: 100,
-                                align: 'center'
-                            },
+              {
+                title: 'CO2(%)',
+                dataIndex: 'co2Early2',
+                key: 'co2Early2',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'CO(ppm)',
+                dataIndex: 'coEarly2',
+                key: 'coEarly2',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'o2(%)',
+                dataIndex: 'o2Early2',
+                key: 'o2Early2',
+                width: 60,
+                align: 'center',
+              },
+            ],
+          },
+        ],
+      },
+      {
+        title: '午班',
+        children: [
+          {
+            title: '第一次',
+            children: [
+              {
+                title: '区队',
+                dataIndex: 'districtTeam',
+                key: 'districtTeam',
+                width: 100,
+                align: 'center',
+              },
+              {
+                title: '检测地点',
+                dataIndex: 'strInstallPos',
+                key: 'strInstallPos',
+                width: 120,
+                align: 'center',
+              },
+              {
+                title: '检查工',
+                dataIndex: 'checkPersonNoon',
+                key: 'checkPersonNoon',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '检测时间',
+                dataIndex: 'timeNoon1',
+                key: 'timeNoon1',
+                width: 100,
+                align: 'center',
+              },
+              {
+                title: '温度',
+                dataIndex: 'tNoon1',
+                key: 'tNoon1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '便携仪',
+                dataIndex: 'bxySdzNoon1',
+                key: 'bxySdzNoon1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '光瓦',
+                dataIndex: 'gwSdzNoon1',
+                key: 'gwSdzNoon1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '甲烷传感器',
+                dataIndex: 'jwSdzNoon1',
+                key: 'jwSdzNoon1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: 'CH4(%)',
+                dataIndex: 'ch4Noon1',
+                key: 'ch4Noon1',
+                width: 60,
+                align: 'center',
+              },
 
-                            {
-                                title: 'CO2(%)',
-                                dataIndex: 'co2Night2',
-                                key: 'co2Night2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'CO(ppm)',
-                                dataIndex: 'coNight2',
-                                key: 'coNight2',
-                                width: 100,
-                                align: 'center'
-                            },
-                            {
-                                title: 'o2(%)',
-                                dataIndex: 'o2Night2',
-                                key: 'o2Night2',
-                                width: 100,
-                                align: 'center'
-                            },
-                        ]
-                    },
+              {
+                title: 'CO2(%)',
+                dataIndex: 'co2Noon1',
+                key: 'co2Noon1',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'CO(ppm)',
+                dataIndex: 'coNoon1',
+                key: 'coNoon1',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'o2(%)',
+                dataIndex: 'o2Noon1',
+                key: 'o2Noon1',
+                width: 60,
+                align: 'center',
+              },
+            ],
+          },
+          {
+            title: '第二次',
+            children: [
+              {
+                title: '检测时间',
+                dataIndex: 'timeNoon2',
+                key: 'timeNoon2',
+                width: 100,
+                align: 'center',
+              },
+              {
+                title: '温度',
+                dataIndex: 'tNoon2',
+                key: 'tNoon2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '便携仪',
+                dataIndex: 'bxySdzNoon2',
+                key: 'bxySdzNoon2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '光瓦',
+                dataIndex: 'gwSdzNoon2',
+                key: 'gwSdzNoon2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '甲烷传感器',
+                dataIndex: 'jwSdzNoon2',
+                key: 'jwSdzNoon2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: 'CH4(%)',
+                dataIndex: 'ch4Noon2',
+                key: 'ch4Noon2',
+                width: 60,
+                align: 'center',
+              },
 
-                ]
-            },
+              {
+                title: 'CO2(%)',
+                dataIndex: 'co2Noon2',
+                key: 'co2Noon2',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'CO(ppm)',
+                dataIndex: 'coNoon2',
+                key: 'coNoon2',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'o2(%)',
+                dataIndex: 'o2Noon2',
+                key: 'o2Noon2',
+                width: 60,
+                align: 'center',
+              },
+            ],
+          },
+        ],
+      },
+      {
+        title: '晚班',
+        children: [
+          {
+            title: '第一次',
+            children: [
+              {
+                title: '区队',
+                dataIndex: 'districtTeam',
+                key: 'districtTeam',
+                width: 100,
+                align: 'center',
+              },
+              {
+                title: '检测地点',
+                dataIndex: 'strInstallPos',
+                key: 'strInstallPos',
+                width: 120,
+                align: 'center',
+              },
+              {
+                title: '检查工',
+                dataIndex: 'checkPersonNight',
+                key: 'checkPersonNight',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '检测时间',
+                dataIndex: 'timeNight1',
+                key: 'timeNight1',
+                width: 100,
+                align: 'center',
+              },
+              {
+                title: '温度',
+                dataIndex: 'tNight1',
+                key: 'tNight1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '便携仪',
+                dataIndex: 'bxySdzNight1',
+                key: 'bxySdzNight1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '光瓦',
+                dataIndex: 'gwSdzNight1',
+                key: 'gwSdzNight1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '甲烷传感器',
+                dataIndex: 'jwSdzNight1',
+                key: 'jwSdzNight1',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: 'CH4(%)',
+                dataIndex: 'ch4Night1',
+                key: 'ch4Night1',
+                width: 60,
+                align: 'center',
+              },
 
+              {
+                title: 'CO2(%)',
+                dataIndex: 'co2Night1',
+                key: 'co2Night1',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'CO(ppm)',
+                dataIndex: 'coNight1',
+                key: 'coNight1',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'o2(%)',
+                dataIndex: 'o2Night1',
+                key: 'o2Night1',
+                width: 60,
+                align: 'center',
+              },
+            ],
+          },
+          {
+            title: '第二次',
+            children: [
+              {
+                title: '检测时间',
+                dataIndex: 'timeNight2',
+                key: 'timeNight2',
+                width: 100,
+                align: 'center',
+              },
+              {
+                title: '温度',
+                dataIndex: 'tNight2',
+                key: 'tNight2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '便携仪',
+                dataIndex: 'bxySdzNight2',
+                key: 'bxySdzNight2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '光瓦',
+                dataIndex: 'gwSdzNight2',
+                key: 'gwSdzNight2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: '甲烷传感器',
+                dataIndex: 'jwSdzNight2',
+                key: 'jwSdzNight2',
+                width: 80,
+                align: 'center',
+              },
+              {
+                title: 'CH4(%)',
+                dataIndex: 'ch4Night2',
+                key: 'ch4Night2',
+                width: 60,
+                align: 'center',
+              },
 
+              {
+                title: 'CO2(%)',
+                dataIndex: 'co2Night2',
+                key: 'co2Night2',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'CO(ppm)',
+                dataIndex: 'coNight2',
+                key: 'coNight2',
+                width: 60,
+                align: 'center',
+              },
+              {
+                title: 'o2(%)',
+                dataIndex: 'o2Night2',
+                key: 'o2Night2',
+                width: 60,
+                align: 'center',
+              },
+            ],
+          },
         ],
-    },
-
-]
+      },
+    ],
+  },
+];

+ 148 - 161
src/views/vent/gas/gasReport/index.vue

@@ -1,181 +1,169 @@
 <template>
-    <div class="gasReport">
-        <customHeader>瓦斯日报监测</customHeader>
-        <div class="report-container">
-            <div class="search-area">
-                <a-row>
-                    <a-col :span="5">
-                        <div class="area-item">
-                            <div class="item-text">填报日期:</div>
-                            <a-date-picker style="width:220px" v-model="searchData.reportTime" placeholder="请选择填报日期"
-                                @change="onChange" />
-                        </div>
-                    </a-col>
-                    <a-col :span="5">
-                        <div class="area-item">
-                            <div class="item-text">区队:</div>
-                            <a-select v-model:value="searchData.districtTeam" style="width: 220px" placeholder="请选择区队">
-                                <a-select-option v-for="item in qdList" :key="item" :value="item.value">{{ item.label
-                                    }}</a-select-option>
-                            </a-select>
-                        </div>
-                    </a-col>
-                    <a-col :span="5">
-                        <div class="area-item">
-                            <div class="item-text">上报人:</div>
-                            <a-input style="width: 220px" v-model:value="searchData.sbr" placeholder="请输入上报人" />
-                        </div>
-                    </a-col>
-                    <a-col :span="5">
-                        <div class="area-item">
-                            <div class="item-text">上报地点:</div>
-                            <a-select v-model:value="searchData.strInstallPos" style="width: 220px"
-                                placeholder="请选择上报地点">
-                                <a-select-option v-for="item in addressList" :key="item" :value="item.value">{{
-                                    item.label
-                                }}</a-select-option>
-                            </a-select>
-                        </div>
-                    </a-col>
-
-                    <a-button type="primary" preIcon="ant-design:search-outlined" 
-                        @click="getSearch">查询</a-button>
-                    <a-button preIcon="ant-design:sync-outlined" style="margin:0px 15px" @click="onReset">重置</a-button>
-                    <a-button type="primary" preIcon="ant-design:download-outlined" 
-                        @click="getExport">导出</a-button>
-                </a-row>
+  <div class="gasReport">
+    <customHeader>瓦斯日报监测</customHeader>
+    <div class="report-container">
+      <div class="search-area">
+        <a-row>
+          <a-col :span="5">
+            <div class="area-item">
+              <div class="item-text">填报日期:</div>
+              <a-date-picker style="width: 220px" v-model="searchData.reportTime" placeholder="请选择填报日期" @change="onChange" />
+            </div>
+          </a-col>
+          <a-col :span="5">
+            <div class="area-item">
+              <div class="item-text">区队:</div>
+              <a-select v-model:value="searchData.districtTeam" style="width: 220px" placeholder="请选择区队">
+                <a-select-option v-for="item in qdList" :key="item" :value="item.value">{{ item.label }}</a-select-option>
+              </a-select>
+            </div>
+          </a-col>
+          <a-col :span="5">
+            <div class="area-item">
+              <div class="item-text">上报人:</div>
+              <a-input style="width: 220px" v-model:value="searchData.sbr" placeholder="请输入上报人" />
             </div>
-            <a-table :columns="columns" :data-source="tableData" :scroll="{ y: 500 }" class="tableW"
-                :pagination="pagination" @change="pageChange">
-                <template #bodyCell="{ column, text }"></template>
-            </a-table>
-        </div>
+          </a-col>
+          <a-col :span="5">
+            <div class="area-item">
+              <div class="item-text">上报地点:</div>
+              <a-select v-model:value="searchData.strInstallPos" style="width: 220px" placeholder="请选择上报地点">
+                <a-select-option v-for="item in addressList" :key="item" :value="item.value">{{ item.label }}</a-select-option>
+              </a-select>
+            </div>
+          </a-col>
+
+          <a-button type="primary" preIcon="ant-design:search-outlined" @click="getSearch">查询</a-button>
+          <a-button preIcon="ant-design:sync-outlined" style="margin: 0px 15px" @click="onReset">重置</a-button>
+          <a-button type="primary" preIcon="ant-design:download-outlined" @click="getExport">导出</a-button>
+        </a-row>
+      </div>
+      <a-table :columns="columns" :data-source="tableData" :scroll="{ y: 500 }" class="tableW" :pagination="pagination" @change="pageChange">
+        <template #bodyCell="{ column, text }"></template>
+      </a-table>
     </div>
+  </div>
 </template>
 
 <script setup lang="ts">
-import { ref, onMounted, computed, reactive } from 'vue';
-import { columns } from './gas-report.data'
-import { getGasAddressList, getList, expComReportByParam } from './gas-report.api'
-import customHeader from '/@/components/vent/customHeader.vue';
-import { message } from 'ant-design-vue';
+  import { ref, onMounted, computed, reactive } from 'vue';
+  import { columns } from './gas-report.data';
+  import { getGasAddressList, getList, expComReportByParam } from './gas-report.api';
+  import customHeader from '/@/components/vent/customHeader.vue';
+  import { message } from 'ant-design-vue';
 
-let searchData = reactive({
+  let searchData = reactive({
     reportTime: '',
     districtTeam: '',
     sbr: '',
     strInstallPos: '',
-})
-let qdList = reactive<any[]>([])//区队下拉列表
-let addressList = reactive<any[]>([])//上报地点下拉列表
-let pagination = reactive({
+  });
+  let qdList = reactive<any[]>([]); //区队下拉列表
+  let addressList = reactive<any[]>([]); //上报地点下拉列表
+  let pagination = reactive({
     current: 1, // 当前页码
     pageSize: 10, // 每页显示条数
     total: 0, // 总条目数,后端返回
     // showTotal: (total, range) => `${range[0]}-${range[1]} 条,总共 ${total} 条`, // 分页右下角显示信息
     showSizeChanger: true, // 是否可改变每页显示条数
     pageSizeOptions: ['10', '20', '50'], // 可选的每页显示条数
-});
-let tableData = ref<any[]>([])
-
-
-function onChange(val, time) {
-    searchData.reportTime = time
-}
-//获取日报列表数据
-async function getTableList() {
-    let res = await getList({ pageNo: pagination.current, pageSize: pagination.pageSize, ...searchData })
-    console.log(res, '瓦斯日报列表数据-----------')
-    tableData.value = res.records
-    pagination.total = res.total
-}
-//查询
-function getSearch() {
-    pagination.current = 1
-    getTableList()
-}
-//重置
-function onReset() {
-    pagination.current = 1
-    searchData.districtTeam = ''
-    searchData.reportTime = ''
-    searchData.strInstallPos = ''
-    searchData.sbr = ''
-    getTableList()
-}
-//分页切换
-function pageChange(val) {
+  });
+  let tableData = ref<any[]>([]);
+
+  function onChange(val, time) {
+    searchData.reportTime = time;
+  }
+  //获取日报列表数据
+  async function getTableList() {
+    let res = await getList({ pageNo: pagination.current, pageSize: pagination.pageSize, ...searchData });
+    console.log(res, '瓦斯日报列表数据-----------');
+    tableData.value = res.records;
+    pagination.total = res.total;
+  }
+  //查询
+  function getSearch() {
+    pagination.current = 1;
+    getTableList();
+  }
+  //重置
+  function onReset() {
+    pagination.current = 1;
+    searchData.districtTeam = '';
+    searchData.reportTime = '';
+    searchData.strInstallPos = '';
+    searchData.sbr = '';
+    getTableList();
+  }
+  //分页切换
+  function pageChange(val) {
     pagination.current = val.current;
     pagination.pageSize = val.pageSize;
-    getTableList()
-}
-function uniqueObjectsArray(arr) {
+    getTableList();
+  }
+  function uniqueObjectsArray(arr) {
     const map = new Map();
     return arr.filter((item) => {
-        const key = JSON.stringify(item);
-        const isNew = !map.has(key);
-        map.set(key, item);
-        return isNew;
+      const key = JSON.stringify(item);
+      const isNew = !map.has(key);
+      map.set(key, item);
+      return isNew;
     });
-}
-//获取安装位置下拉选项
-async function getSelectList() {
-    let res = await getGasAddressList({ devicekind: 'gasDayReport' })
-    console.log(res, '区队下拉选项--------')
-    qdList.length = 0
-    addressList.length = 0
+  }
+  //获取安装位置下拉选项
+  async function getSelectList() {
+    let res = await getGasAddressList({ devicekind: 'gasDayReport' });
+    console.log(res, '区队下拉选项--------');
+    qdList.length = 0;
+    addressList.length = 0;
     if (res.length != 0) {
-        res.forEach(el => {
-            qdList.push({ label: el.devgroup_dictText, value: el.devgroup_dictText })
-            addressList.push({ label: el.strinstallpos, value: el.strinstallpos })
-        })
-        qdList = uniqueObjectsArray(qdList)
+      res.forEach((el) => {
+        qdList.push({ label: el.devgroup_dictText, value: el.devgroup_dictText });
+        addressList.push({ label: el.strinstallpos, value: el.strinstallpos });
+      });
+      qdList = uniqueObjectsArray(qdList);
     }
-
-}
-//导出
-async function getExport() {
+  }
+  //导出
+  async function getExport() {
     if (searchData.reportTime) {
-        let res = await expComReportByParam({ tempName: 'wsrb', reportTime: searchData.reportTime })
-        console.log(res, '导出------------')
-        let filename = searchData.reportTime+'.xlsx';
-        downFilePublic(res, filename);
+      let res = await expComReportByParam({ tempName: 'wsrb', reportTime: searchData.reportTime });
+      console.log(res, '导出------------');
+      let filename = searchData.reportTime + '.xlsx';
+      downFilePublic(res, filename);
     } else {
-        message.warning('请选择需要导出数据的填报日期!');
+      message.warning('请选择需要导出数据的填报日期!');
     }
-}
+  }
 
-// 下载公用方法
-function downFilePublic(content, fileName) {
+  // 下载公用方法
+  function downFilePublic(content, fileName) {
     const blob = new Blob([content], { type: 'application/xlsx;charset=UTF-8' }); // 构造一个blob对象来处理数据
     // 对于<a>标签,只有 Firefox 和 Chrome(内核) 支持 download 属性
     // IE10以上支持blob但是依然不支持download
     if ('download' in document.createElement('a')) {
-        // 支持a标签download的浏览器
-        const link = document.createElement('a'); // 创建a标签
-        link.download = fileName; // a标签添加属性
-        link.style.display = 'none';
-        link.href = URL.createObjectURL(blob);
-        document.body.appendChild(link);
-        link.click(); // 执行下载
-        URL.revokeObjectURL(link.href); // 释放url
-        document.body.removeChild(link); // 释放标签
+      // 支持a标签download的浏览器
+      const link = document.createElement('a'); // 创建a标签
+      link.download = fileName; // a标签添加属性
+      link.style.display = 'none';
+      link.href = URL.createObjectURL(blob);
+      document.body.appendChild(link);
+      link.click(); // 执行下载
+      URL.revokeObjectURL(link.href); // 释放url
+      document.body.removeChild(link); // 释放标签
     } else {
-        // 其他浏览器
-        navigator.msSaveBlob(blob, fileName);
+      // 其他浏览器
+      navigator.msSaveBlob(blob, fileName);
     }
-}
-
-onMounted(() => {
-    getSelectList()
-    getTableList()
-})
-
+  }
 
+  onMounted(() => {
+    getSelectList();
+    getTableList();
+  });
 </script>
 
 <style lang="less" scoped>
-.gasReport {
+  .gasReport {
     width: 100%;
     height: 100%;
     padding: 80px 10px 15px 10px;
@@ -183,41 +171,40 @@ onMounted(() => {
     position: relative;
 
     .search-area {
-        margin: 20px 0px;
+      margin: 20px 0px;
 
-        .area-item {
-            display: flex;
-            align-items: center;
+      .area-item {
+        display: flex;
+        align-items: center;
 
-            .item-text {
-                color: #FFF;
-            }
+        .item-text {
+          color: #fff;
         }
+      }
     }
 
     .zxm-picker,
     .zxm-input {
-        border: 1px solid #3ad8ff77 !important;
-        background-color: #ffffff00 !important;
-        color: #fff !important;
+      border: 1px solid #3ad8ff77 !important;
+      background-color: #ffffff00 !important;
+      color: #fff !important;
     }
+  }
 
-}
-
-:deep(.zxm-table-thead > tr > th:last-child) {
+  :deep(.zxm-table-thead > tr > th:last-child) {
     border-right: 1px solid #91e9fe !important;
-}
+  }
 
-:deep(.zxm-picker-input > input) {
+  :deep(.zxm-picker-input > input) {
     color: #fff;
-}
+  }
 
-:deep(.zxm-select:not(.zxm-select-customize-input) .zxm-select-selector) {
+  :deep(.zxm-select:not(.zxm-select-customize-input) .zxm-select-selector) {
     border: 1px solid #3ad8ff77 !important;
     background-color: #ffffff00 !important;
-}
+  }
 
-:deep(.zxm-select-selection-item) {
+  :deep(.zxm-select-selection-item) {
     color: #fff !important;
-}
-</style>
+  }
+</style>

+ 19 - 10
src/views/vent/monitorManager/comment/HistoryTable.vue

@@ -117,17 +117,25 @@
         // getForm().updateSchema();
         // getForm();
       }
-      await getDeviceList();
       dataSource.value = [];
-      const column = getTableHeaderColumns(newVal.includes('_history') ? newVal : newVal + '_history');
-      if (column && column.length < 1) {
-        const arr = newVal.split('_');
-        console.log('历史记录列表表头------------>', arr[0] + '_monitor');
-        columns.value = getTableHeaderColumns(arr[0] + '_history');
-      } else {
-        columns.value = column;
-      }
-      getDataSource();
+      // const column = getTableHeaderColumns(newVal.includes('_history') ? newVal : newVal + '_history');
+      // if (column && column.length < 1) {
+      //   const arr = newVal.split('_');
+      //   console.log('历史记录列表表头------------>', arr[0] + '_monitor');
+      //   columns.value = getTableHeaderColumns(arr[0] + '_history');
+      //   if (columns.value.length < 1) {
+      //     if (historyType.value) {
+      //       columns.value = getTableHeaderColumns(historyType.value + '_history');
+      //     }
+      //   }
+      // } else {
+      //   columns.value = column;
+      // }
+      await getDeviceList();
+      nextTick(() => {
+        getDataSource();
+      });
+
       if (historyTable.value) reload();
     },
     {
@@ -222,6 +230,7 @@
         };
       });
       stationType.value = deviceOptions.value[0]['stationtype'];
+      historyType.value = deviceOptions.value[0]['strtype'] || deviceOptions.value[0]['devicekind'];
     }
     await getForm().setFieldsValue({ gdeviceid: props.deviceId ? props.deviceId : deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '' });
   }

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

@@ -309,8 +309,8 @@
             </template>
           </a-tab-pane>
           <a-tab-pane key="2" tab="历史数据" v-if="!noHistoryArr().find((item) => deviceType.startsWith(item))">
-            <div class="tab-item">
-              <template v-if="activeKey == '2' && deviceType.startsWith('firemon_normal')">
+            <div class="tab-item" v-if="activeKey == '2'">
+              <template v-if="deviceType.startsWith('firemon_normal')">
                 <HistoryBall :dataSource="dataSource"></HistoryBall>
               </template>
               <template v-else>

+ 4 - 4
src/views/vent/monitorManager/fanLocalMonitor/index.vue

@@ -1187,13 +1187,13 @@
         } else if (control === 'Fan2Open') {
           data.paramcode = 'CtrlFan2Start';
         } else if (control === 'Fan1Stop') {
-          data.paramcode = 'Fan1Stop';
+          data.paramcode = 'CtrlFan1Stop';
         } else if (control === 'Fan2Stop') {
-          data.paramcode = 'Fan2Stop';
+          data.paramcode = 'CtrlFan2Stop';
         } else if (control === 'Fan1Reset') {
-          data.paramcode = 'Fan1Reset';
+          data.paramcode = 'CtrlFan1Reset';
         } else if (control === 'Fan2Reset') {
-          data.paramcode = 'Fan2Reset';
+          data.paramcode = 'CtrlFan2Reset';
         }
         deviceControlApi(data)
           .then((res) => {

+ 5 - 5
src/views/vent/monitorManager/fanLocalMonitor1/fanLocal.data.ts

@@ -24,11 +24,11 @@ export const navList = ref([
     pathName: 'fanLocal-operate',
     isHover: false,
   },
-  {
-    title: '风量实时曲线',
-    pathName: 'fanLocal-wind',
-    isHover: false,
-  },
+  // {
+  //   title: '风量实时曲线',
+  //   pathName: 'fanLocal-wind',
+  //   isHover: false,
+  // },
 ]);
 export const columns: BasicColumn[] = [
   {

+ 0 - 3961
src/views/vent/monitorManager/fanLocalMonitor1/fanLocal.data2.ts

@@ -1,3961 +0,0 @@
-import { BasicColumn } from '/@/components/Table';
-import { FormSchema } from '/@/components/Table';
-import { rules } from '/@/utils/helper/validator';
-import { ref, reactive } from 'vue';
-import { cloneDeep } from 'lodash-es';
-export const columns: BasicColumn[] = [
-  {
-    title: '名称',
-    dataIndex: 'strname',
-    width: 120,
-  },
-  {
-    title: '安装位置',
-    dataIndex: 'strinstallpos',
-    width: 100,
-  },
-  {
-    title: '是否为常闭型',
-    dataIndex: 'bnormalclose',
-    width: 100,
-    // customRender: render.renderAvatar,
-  },
-  {
-    title: '净宽',
-    dataIndex: 'fclearwidth',
-    width: 80,
-  },
-  {
-    title: '净高',
-    dataIndex: 'fclearheight',
-    width: 100,
-  },
-  {
-    title: '风门道数',
-    dataIndex: 'ndoorcount',
-    width: 100,
-  },
-  {
-    title: '所属分站',
-    width: 150,
-    dataIndex: 'stationname',
-  },
-  {
-    title: '点表',
-    width: 100,
-    dataIndex: 'strtype',
-  },
-  {
-    title: '监测类型',
-    dataIndex: 'monitorflag',
-    width: 100,
-  },
-  {
-    title: '是否模拟数据',
-    dataIndex: 'testflag',
-    width: 100,
-  },
-];
-
-export const recycleColumns: BasicColumn[] = [
-  {
-    title: '名称',
-    dataIndex: 'strname',
-    width: 100,
-  },
-  {
-    title: '是否为常闭型',
-    dataIndex: 'bnormalclose',
-    width: 100,
-  },
-];
-
-export const searchFormSchema: FormSchema[] = [
-  {
-    label: '名称',
-    field: 'strname',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '安装位置',
-    field: 'strinstallpos',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '是否为常闭型',
-    field: 'bnormalclose',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'user_status',
-      placeholder: '请选择读写类型',
-      stringToNumber: true,
-    },
-    colProps: { span: 6 },
-  },
-];
-
-export const formSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    label: '名称',
-    field: 'strname',
-    component: 'Input',
-  },
-  {
-    label: '安装位置',
-    field: 'strinstallpos',
-    component: 'Input',
-  },
-  {
-    label: '是否为常闭型',
-    field: 'bnormalclose',
-    component: 'RadioGroup',
-    defaultValue: 1,
-    componentProps: () => {
-      return {
-        options: [
-          { label: '是', value: 1, key: '1' },
-          { label: '否', value: 0, key: '2' },
-        ],
-      };
-    },
-  },
-  {
-    label: '净宽',
-    field: 'fclearwidth',
-    component: 'Input',
-  },
-  {
-    label: '净高',
-    field: 'fclearheight',
-    component: 'Input',
-  },
-  {
-    label: '风门道数',
-    field: 'ndoorcount',
-    component: 'Input',
-  },
-  {
-    label: '所属分站',
-    field: 'stationname',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'user_status',
-      placeholder: '请选择状态',
-      stringToNumber: true,
-    },
-  },
-  {
-    label: '点表',
-    field: 'strtype',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'user_status',
-      placeholder: '请选择状态',
-      stringToNumber: true,
-    },
-  },
-  {
-    label: '监测类型',
-    field: 'monitorflag',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'user_status',
-      placeholder: '请选择状态',
-      stringToNumber: true,
-    },
-  },
-  {
-    label: '是否模拟数据',
-    field: 'testflag',
-    component: 'RadioGroup',
-    defaultValue: 1,
-    componentProps: () => {
-      return {
-        options: [
-          { label: '是', value: 1, key: '1' },
-          { label: '否', value: 0, key: '2' },
-        ],
-      };
-    },
-  },
-];
-
-export const formPasswordSchema: FormSchema[] = [
-  {
-    label: '用户账号',
-    field: 'username',
-    component: 'Input',
-    componentProps: { readOnly: true },
-  },
-  {
-    label: '登录密码',
-    field: 'password',
-    component: 'StrengthMeter',
-    componentProps: {
-      placeholder: '请输入登录密码',
-    },
-    rules: [
-      {
-        required: true,
-        message: '请输入登录密码',
-      },
-    ],
-  },
-  {
-    label: '确认密码',
-    field: 'confirmPassword',
-    component: 'InputPassword',
-    dynamicRules: ({ values }) => rules.confirmPassword(values, true),
-  },
-];
-
-export const formAgentSchema: FormSchema[] = [
-  {
-    label: '',
-    field: 'id',
-    component: 'Input',
-    show: false,
-  },
-  {
-    field: 'userName',
-    label: '用户名',
-    component: 'Input',
-    componentProps: {
-      readOnly: true,
-      allowClear: false,
-    },
-  },
-  {
-    field: 'agentUserName',
-    label: '代理人用户名',
-    required: true,
-    component: 'JSelectUser',
-    componentProps: {
-      rowKey: 'username',
-      labelKey: 'realname',
-      maxSelectCount: 10,
-    },
-  },
-  {
-    field: 'startTime',
-    label: '代理开始时间',
-    component: 'DatePicker',
-    required: true,
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      placeholder: '请选择代理开始时间',
-    },
-  },
-  {
-    field: 'endTime',
-    label: '代理结束时间',
-    component: 'DatePicker',
-    required: true,
-    componentProps: {
-      showTime: true,
-      valueFormat: 'YYYY-MM-DD HH:mm:ss',
-      placeholder: '请选择代理结束时间',
-    },
-  },
-  {
-    field: 'status',
-    label: '状态',
-    component: 'JDictSelectTag',
-    defaultValue: '1',
-    componentProps: {
-      dictCode: 'valid_status',
-      type: 'radioButton',
-    },
-  },
-];
-
-export const chartsColumns = [
-  {
-    legend: '瓦斯浓度',
-    seriesName: '瓦斯浓度(%)',
-    ymax: 100,
-    yname: '%',
-    linetype: 'bar',
-    yaxispos: 'left',
-    color: '#cd5fff',
-    sort: 1,
-    dataIndex: '',
-    xRotate: 0,
-  },
-];
-export const chartsColumns1 = [
-  {
-    legend: '风量',
-    seriesName: 'm³/min',
-    ymax: 1000,
-    yname: '',
-    linetype: 'bar',
-    yaxispos: 'left',
-    color: '#755cf8',
-    sort: 1,
-    dataIndex: '',
-    xRotate: 0,
-  },
-];
-
-export const transformMobileH = [
-  {
-    title: 'A相电流(A)',
-    code: '',
-  },
-  {
-    title: 'B相电流(A)',
-    code: '',
-  },
-  {
-    title: 'C相电流(A)',
-    code: '',
-  },
-  {
-    title: '电压(V)',
-    code: '',
-  },
-  {
-    title: '温度(℃)',
-    code: '',
-  },
-  {
-    title: '额定电流(A)',
-    code: '',
-  },
-  {
-    title: '短路电流(A)',
-    code: '',
-  },
-];
-
-export const transformMobileL = [
-  {
-    title: 'A相电流(A)',
-    code: '',
-  },
-  {
-    title: 'B相电流(A)',
-    code: '',
-  },
-  {
-    title: 'C相电流(A)',
-    code: '',
-  },
-  {
-    title: '电压(V)',
-    code: '',
-  },
-  {
-    title: '功率(KW)',
-    code: '',
-  },
-  {
-    title: '额定电流(A)',
-    code: '',
-  },
-  {
-    title: '短路电流(A)',
-    code: '',
-  },
-];
-
-export const protectionEnableH = [
-  {
-    title: '短路',
-    code: '',
-    value: '使能',
-  },
-  {
-    title: '不平衡',
-    code: '',
-    value: '未使能',
-  },
-  {
-    title: '过载',
-    code: '',
-    value: '使能',
-  },
-  {
-    title: '过压',
-    code: '',
-    value: '使能',
-  },
-  {
-    title: '欠压',
-    code: '',
-    value: '使能',
-  },
-  {
-    title: '短路延时(ms)',
-    code: '',
-    value: 0,
-  },
-  {
-    title: '过压延时(s)',
-    code: '',
-    value: 10,
-  },
-  {
-    title: '欠压延时(s)',
-    code: '',
-    value: 10,
-  },
-];
-
-export const protectionEnableL = [
-  {
-    title: '短路',
-    code: '',
-    value: '使能',
-  },
-  {
-    title: '不平衡',
-    code: '',
-    value: '未使能',
-  },
-  {
-    title: '过载',
-    code: '',
-    value: '使能',
-  },
-  {
-    title: '过压',
-    code: '',
-    value: '使能',
-  },
-  {
-    title: '欠压',
-    code: '',
-    value: '使能',
-  },
-  {
-    title: '漏电',
-    code: '',
-    value: '使能',
-  },
-  {
-    title: '漏电闭锁',
-    code: '',
-    value: '使能',
-  },
-  {
-    title: '漏电延时(ms)',
-    code: '',
-    value: 10,
-  },
-  {
-    title: '短路延时(ms)',
-    code: '',
-    value: 1,
-  },
-  {
-    title: '过压延时(s)',
-    code: '',
-    value: 10,
-  },
-  {
-    title: '欠压延时(s)',
-    code: '',
-    value: 10,
-  },
-];
-
-export const electricMonitor = {
-  电流: [
-    {
-      title: 'A相电流 (A)',
-      code: '',
-    },
-    {
-      title: 'B相电流 (A)',
-      code: '',
-    },
-    {
-      title: 'C相电流 (A)',
-      code: '',
-    },
-    {
-      title: '额定电流 (A)',
-      code: '',
-    },
-  ],
-  电压: [
-    {
-      title: 'Uac (V)',
-      code: '',
-    },
-    {
-      title: '功率 (KW)',
-      code: '',
-    },
-  ],
-  保护状态: [
-    {
-      title: '短路',
-      code: '',
-      value: 1,
-    },
-    {
-      title: '失压',
-      code: '',
-      value: 1,
-    },
-    {
-      title: '过载',
-      code: '',
-      value: 1,
-    },
-    {
-      title: '过压',
-      code: '',
-      value: 1,
-    },
-    {
-      title: '缺相',
-      code: '',
-      value: 1,
-    },
-    {
-      title: '漏电保护',
-      code: '',
-      value: 1,
-    },
-    {
-      title: '相不平衡',
-      code: '',
-      value: 1,
-    },
-    {
-      title: '漏电闭锁',
-      code: '',
-      value: 1,
-    },
-    {
-      title: '瓦斯闭锁',
-      code: '',
-      value: 1,
-    },
-    {
-      title: '选择性漏电保护',
-      code: '',
-      value: 1,
-    },
-  ],
-};
-
-export const electricState = [
-  {
-    title: '额定电流(A)',
-    code: '',
-    value: 100.0,
-  },
-  {
-    title: '额定电压(V)',
-    code: '',
-    value: 660,
-  },
-  {
-    title: '短路倍数',
-    code: '',
-    value: 8,
-  },
-  {
-    title: '欠压倍数',
-    code: '',
-    value: 0.85,
-  },
-  {
-    title: '漏电延时(s)',
-    code: '',
-    value: 5.0,
-  },
-  {
-    title: '不平衡倍数',
-    code: '',
-    value: 0.0,
-  },
-  {
-    title: '漏电闭锁(KΩ)',
-    code: '',
-    value: 11,
-  },
-  {
-    title: '末端短路倍数',
-    code: '',
-    value: 1.0,
-  },
-  {
-    title: '相敏倍数',
-    code: '',
-    value: 41.0,
-  },
-  {
-    title: '过压延时(s)',
-    code: '',
-    value: 1.2,
-  },
-  {
-    title: '过压定值',
-    code: '',
-    value: 1.2,
-  },
-];
-
-export const fanControlState1 = {
-  电流电压: {
-    'la1(A)': [
-      {
-        code: '',
-        value: 0.0,
-      },
-      {
-        code: '',
-        value: 0.0,
-      },
-    ],
-    'lb1(A)': [
-      {
-        code: '',
-        value: 0.0,
-      },
-      {
-        code: '',
-        value: 0.0,
-      },
-    ],
-    'lc1(A)': [
-      {
-        code: '',
-        value: 0.0,
-      },
-      {
-        code: '',
-        value: 0.0,
-      },
-    ],
-    '额定电流(A)': [
-      {
-        code: '',
-        value: 55.0,
-      },
-      {
-        code: '',
-        value: 55.0,
-      },
-    ],
-    'Uac(V)': [
-      {
-        code: '',
-        value: 658,
-      },
-    ],
-  },
-  功率: {
-    '功率(KW)': [
-      {
-        code: '',
-        value: 0.0,
-      },
-      {
-        code: '',
-        value: 0.0,
-      },
-    ],
-  },
-  运行状态: {
-    开合闸状态: [
-      {
-        code: '',
-        value: 0,
-      },
-      {
-        code: '',
-        value: 0,
-      },
-    ],
-  },
-};
-export const fanControlState2 = {
-  电流电压: {
-    'la1(A)': [
-      {
-        code: '',
-        value: 35.0,
-      },
-      {
-        code: '',
-        value: 28.0,
-      },
-    ],
-    'lb1(A)': [
-      {
-        code: '',
-        value: 34.0,
-      },
-      {
-        code: '',
-        value: 28.0,
-      },
-    ],
-    'lc1(A)': [
-      {
-        code: '',
-        value: 34.0,
-      },
-      {
-        code: '',
-        value: 29.0,
-      },
-    ],
-    '额定电流(A)': [
-      {
-        code: '',
-        value: 75.0,
-      },
-      {
-        code: '',
-        value: 75.0,
-      },
-    ],
-    'Uac(V)': [
-      {
-        code: '',
-        value: 697,
-      },
-    ],
-  },
-  功率: {
-    '功率(KW)': [
-      {
-        code: '',
-        value: 42,
-      },
-      {
-        code: '',
-        value: 34,
-      },
-    ],
-  },
-  运行状态: {
-    开合闸状态: [
-      {
-        code: '',
-        value: 1,
-      },
-      {
-        code: '',
-        value: 1,
-      },
-    ],
-  },
-};
-
-export const fanSetting1 = [
-  {
-    title: 'I额定电流(A)',
-    code: '',
-    value: '55',
-  },
-  {
-    title: 'II额定电流(A)',
-    code: '',
-    value: '55',
-  },
-  {
-    title: '电压等级(V)',
-    code: '',
-    value: '660',
-  },
-  {
-    title: 'I速断定值',
-    code: '',
-    value: '8',
-  },
-  {
-    title: 'II速断定值',
-    code: '',
-    value: '8',
-  },
-  {
-    title: '欠压定值',
-    code: '',
-    value: '1',
-  },
-  {
-    title: '欠压延时',
-    code: '',
-    value: '6',
-  },
-  {
-    title: '过压定值',
-    code: '',
-    value: '1',
-  },
-  {
-    title: '过压延时',
-    code: '',
-    value: '6',
-  },
-  {
-    title: 'I启动II延时(s)',
-    code: '',
-    value: '5',
-  },
-  {
-    title: '启动对侧延时(s)',
-    code: '',
-    value: '5',
-  },
-  {
-    title: '风电瓦斯延时(s)',
-    code: '',
-    value: '0',
-  },
-];
-
-export const fanSetting2 = [
-  {
-    title: 'I额定电流(A)',
-    code: '',
-    value: '75',
-  },
-  {
-    title: 'II额定电流(A)',
-    code: '',
-    value: '75',
-  },
-  {
-    title: '电压等级(V)',
-    code: '',
-    value: '660',
-  },
-  {
-    title: 'I速断定值',
-    code: '',
-    value: '8',
-  },
-  {
-    title: 'II速断定值',
-    code: '',
-    value: '9',
-  },
-  {
-    title: '欠压定值',
-    code: '',
-    value: '0',
-  },
-  {
-    title: '欠压延时',
-    code: '',
-    value: '6',
-  },
-  {
-    title: '过压定值',
-    code: '',
-    value: '1',
-  },
-  {
-    title: '过压延时',
-    code: '',
-    value: '6',
-  },
-  {
-    title: 'I启动II延时(s)',
-    code: '',
-    value: '5',
-  },
-  {
-    title: '启动对侧延时(s)',
-    code: '',
-    value: '5',
-  },
-  {
-    title: '风电瓦斯延时(s)',
-    code: '',
-    value: '0',
-  },
-];
-
-export const data_model = ref<any>({
-  layout_center: { x: 727, y: 226 },
-  config: {
-    background_color: '#00000000',
-    scale: 0.9,
-    position_center: { x: 0, y: 0 },
-    svg_position_center: { x: 50, y: 50 },
-    grid: true,
-    ruler: false,
-  },
-  done_json: [
-    {
-      id: 'connection_lineSAVIxZbu1U',
-      x: -322,
-      y: 297,
-      client: { x: -345, y: 316 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -345.5, y: 292 },
-        tc: { x: -345, y: 292 },
-        tr: { x: -344.5, y: 292 },
-        l: { x: -345.5, y: 316 },
-        r: { x: -344.5, y: 316 },
-        bl: { x: -345.5, y: 340 },
-        bc: { x: -345, y: 340 },
-        br: { x: -344.5, y: 340 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 47 },
-            { x: 50, y: 20 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text662jqUKDwd' }, end: null },
-    },
-    {
-      id: 'connection_lineYOym7m1COw',
-      x: -499,
-      y: 293,
-      client: { x: -499, y: 313 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -499.5, y: 289 },
-        tc: { x: -499, y: 289 },
-        tr: { x: -498.5, y: 289 },
-        l: { x: -499.5, y: 313 },
-        r: { x: -498.5, y: 313 },
-        bl: { x: -499.5, y: 337 },
-        bc: { x: -499, y: 337 },
-        br: { x: -498.5, y: 337 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 51, y: 53 },
-            { x: 51, y: 21 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text662jqUKDwd' }, end: null },
-    },
-    {
-      id: 'arrowWVIq74qgBO',
-      x: -520.5,
-      y: -143,
-      client: { x: -520.5, y: -143 },
-      scale_x: 0.45,
-      scale_y: 0.44799998632812543,
-      rotate: 179.9812559818536,
-      actual_bound: { x: 0.0000014901161193847656, y: 14.285714149475098, width: 100, height: 71.42857360839844 },
-      point_coordinate: {
-        tl: { x: -497.9947668868031, y: -127.00736161477208 },
-        tc: { x: -520.494765682786, y: -127.00000085618991 },
-        tr: { x: -542.994764478769, y: -126.99264009760776 },
-        l: { x: -498.00000120401705, y: -143.00736075858217 },
-        r: { x: -542.999998795983, y: -142.99263924141783 },
-        bl: { x: -498.00523552123104, y: -159.00735990239224 },
-        bc: { x: -520.505234317214, y: -158.99999914381007 },
-        br: { x: -543.0052331131969, y: -158.99263838522793 },
-      },
-      name: 'arrow',
-      title: '箭头',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: { fill: { title: '填充色', type: 'Color', val: '#ff0000' } },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'arrowUFvMb6HR6G',
-      x: -298.5,
-      y: -142,
-      client: { x: -302.5, y: -142 },
-      scale_x: 0.45,
-      scale_y: 0.44799998632812543,
-      rotate: 0,
-      actual_bound: { x: 0.0000014901161193847656, y: 14.285714149475098, width: 100, height: 71.42857360839844 },
-      point_coordinate: {
-        tl: { x: -325, y: -158 },
-        tc: { x: -302.5, y: -158 },
-        tr: { x: -280, y: -158 },
-        l: { x: -325, y: -142 },
-        r: { x: -280, y: -142 },
-        bl: { x: -325, y: -126 },
-        bc: { x: -302.5, y: -126 },
-        br: { x: -280, y: -126 },
-      },
-      name: 'arrow',
-      title: '箭头-copy',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: { fill: { title: '填充色', type: 'Color', val: '#ff0000' } },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'straight-lineTy3uyr5DOv',
-      x: 508,
-      y: 177,
-      client: { x: 508, y: 177 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -551.999998795983, y: -137.99263924141783 },
-        tc: { x: -551.999998795983, y: -137.99263924141783 },
-        tr: { x: -551.999998795983, y: -137.99263924141783 },
-        l: { x: -551.999998795983, y: -137.99263924141783 },
-        r: { x: -551.999998795983, y: -137.99263924141783 },
-        bl: { x: -551.999998795983, y: -137.99263924141783 },
-        bc: { x: -551.999998795983, y: -137.99263924141783 },
-        br: { x: -551.999998795983, y: -137.99263924141783 },
-      },
-      name: 'connection_line',
-      title: '连接线',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#ff0000' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: { title: '点坐标', type: 'JsonEdit', val: [{ x: 50, y: 50 }] },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'Right', target_id: 'arrowWVIq74qgBO' }, end: null },
-    },
-    {
-      id: 'rect3OD1llFsFbQ',
-      x: -688,
-      y: -224.5,
-      client: { x: -688, y: -224.5 },
-      scale_x: 1.9694118000598109,
-      scale_y: 0.3599999890136722,
-      rotate: 0,
-      actual_bound: { x: 2.777777671813965, y: 41.66666793823242, width: 94.44444274902344, height: 13.88888931274414 },
-      point_coordinate: {
-        tl: { x: -781, y: -227 },
-        tc: { x: -688, y: -227 },
-        tr: { x: -595, y: -227 },
-        l: { x: -781, y: -224.5 },
-        r: { x: -595, y: -224.5 },
-        bl: { x: -781, y: -222 },
-        bc: { x: -688, y: -222 },
-        br: { x: -595, y: -222 },
-      },
-      name: 'rect3',
-      title: '矩形',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: { fill: { title: '填充色', type: 'Color', val: '#ff0000' } },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'rect3z6ep3DMpbX',
-      x: -138,
-      y: -226.5,
-      client: { x: -138, y: -226.5 },
-      scale_x: 1.9694118000598109,
-      scale_y: 0.3599999890136722,
-      rotate: 0,
-      actual_bound: { x: 2.777777671813965, y: 41.66666793823242, width: 94.44444274902344, height: 13.88888931274414 },
-      point_coordinate: {
-        tl: { x: -231, y: -229 },
-        tc: { x: -138, y: -229 },
-        tr: { x: -45, y: -229 },
-        l: { x: -231, y: -226.5 },
-        r: { x: -45, y: -226.5 },
-        bl: { x: -231, y: -224 },
-        bc: { x: -138, y: -224 },
-        br: { x: -45, y: -224 },
-      },
-      name: 'rect3',
-      title: '矩形-copy',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: { fill: { title: '填充色', type: 'Color', val: '#ff0000' } },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'straight-lineYTEQVhroc2',
-      x: -542.999998795983,
-      y: -142.99263924141783,
-      client: { x: 588, y: 224 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -585.999998795983, y: -185.99263924141783 },
-        tc: { x: -542.999998795983, y: -185.99263924141783 },
-        tr: { x: -499.99999879598295, y: -185.99263924141783 },
-        l: { x: -585.999998795983, y: -142.99263924141783 },
-        r: { x: -499.99999879598295, y: -142.99263924141783 },
-        bl: { x: -585.999998795983, y: -99.99263924141783 },
-        bc: { x: -542.999998795983, y: -99.99263924141783 },
-        br: { x: -499.99999879598295, y: -99.99263924141783 },
-      },
-      name: 'connection_line',
-      title: '连接线',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#ff0000' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 50 },
-            { x: -36, y: 51 },
-            { x: -36, y: -35 },
-            { x: -34, y: -34 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'Right', target_id: 'arrowWVIq74qgBO' }, end: null },
-    },
-    {
-      id: 'connection_lineHE0iHAc7sh',
-      x: -107.99999879598295,
-      y: -139.99263924141783,
-      client: { x: -107.99999879598295, y: -139.99263924141783 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -150.99999879598295, y: -182.99263924141783 },
-        tc: { x: -107.99999879598295, y: -182.99263924141783 },
-        tr: { x: -64.99999879598295, y: -182.99263924141783 },
-        l: { x: -150.99999879598295, y: -139.99263924141783 },
-        r: { x: -64.99999879598295, y: -139.99263924141783 },
-        bl: { x: -150.99999879598295, y: -96.99263924141783 },
-        bc: { x: -107.99999879598295, y: -96.99263924141783 },
-        br: { x: -64.99999879598295, y: -96.99263924141783 },
-      },
-      name: 'connection_line',
-      title: '连接线-copy',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#ff0000' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: -124, y: 49 },
-            { x: -35, y: 49 },
-            { x: -36, y: -35 },
-            { x: -34, y: -34 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'Right', target_id: 'arrowWVIq74qgBO' }, end: null },
-    },
-    {
-      id: 'straight-lineGewWfZACIy',
-      x: -688,
-      y: -222,
-      client: { x: 452, y: 146 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -688.5, y: -284 },
-        tc: { x: -688, y: -284 },
-        tr: { x: -687.5, y: -284 },
-        l: { x: -688.5, y: -222 },
-        r: { x: -687.5, y: -222 },
-        bl: { x: -688.5, y: -160 },
-        bc: { x: -688, y: -160 },
-        br: { x: -687.5, y: -160 },
-      },
-      name: 'connection_line',
-      title: '连接线',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#ff0000' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 50 },
-            { x: 49, y: 174 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'BottomCenter', target_id: 'rect3OD1llFsFbQ' }, end: null },
-    },
-    {
-      id: 'connection_linekOe9aqybJ7',
-      x: -132,
-      y: -227,
-      client: { x: -132, y: -227 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -132.5, y: -289 },
-        tc: { x: -132, y: -289 },
-        tr: { x: -131.5, y: -289 },
-        l: { x: -132.5, y: -227 },
-        r: { x: -131.5, y: -227 },
-        bl: { x: -132.5, y: -165 },
-        bc: { x: -132, y: -165 },
-        br: { x: -131.5, y: -165 },
-      },
-      name: 'connection_line',
-      title: '连接线-copy',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#ff0000' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 50 },
-            { x: 50, y: 180 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'BottomCenter', target_id: 'rect3OD1llFsFbQ' }, end: null },
-    },
-    {
-      id: 'rect1u3AJvpzHYv',
-      x: -689.5,
-      y: -63,
-      client: { x: -689.5, y: -63 },
-      scale_x: 0.7082353259023925,
-      scale_y: 0.7259259095159254,
-      rotate: 0,
-      actual_bound: { x: 19.64285659790039, y: 1.7857142686843872, width: 60.71428298950195, height: 96.42857360839844 },
-      point_coordinate: {
-        tl: { x: -711, y: -98 },
-        tc: { x: -689.5, y: -98 },
-        tr: { x: -668, y: -98 },
-        l: { x: -711, y: -63 },
-        r: { x: -668, y: -63 },
-        bl: { x: -711, y: -28 },
-        bc: { x: -689.5, y: -28 },
-        br: { x: -668, y: -28 },
-      },
-      name: 'rect1',
-      title: '矩形',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {},
-      state: {
-        OnOff: {
-          title: '开关',
-          default: false,
-          props: { stroke: { openVal: '#ff0000', closeVal: '#ff0000' }, fill: { openVal: '#ff0000', closeVal: '#ff000000' } },
-        },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'rect1sMuXufr2Gk',
-      x: -133.5,
-      y: -63,
-      client: { x: -133.5, y: -69 },
-      scale_x: 0.7082353259023925,
-      scale_y: 0.7259259095159254,
-      rotate: 0,
-      actual_bound: { x: 19.64285659790039, y: 1.7857142686843872, width: 60.71428298950195, height: 96.42857360839844 },
-      point_coordinate: {
-        tl: { x: -155, y: -104 },
-        tc: { x: -133.5, y: -104 },
-        tr: { x: -112, y: -104 },
-        l: { x: -155, y: -69 },
-        r: { x: -112, y: -69 },
-        bl: { x: -155, y: -34 },
-        bc: { x: -133.5, y: -34 },
-        br: { x: -112, y: -34 },
-      },
-      name: 'rect1',
-      title: '矩形-copy',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {},
-      state: {
-        OnOff: {
-          title: '开关',
-          default: false,
-          props: { stroke: { openVal: '#ff0000', closeVal: '#ff0000' }, fill: { openVal: '#ff0000', closeVal: '#ff000000' } },
-        },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'straight-linevfbRmEjOka',
-      x: -689.5,
-      y: -28,
-      client: { x: 452, y: 336 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -690, y: -57.5 },
-        tc: { x: -689.5, y: -57.5 },
-        tr: { x: -689, y: -57.5 },
-        l: { x: -690, y: -28 },
-        r: { x: -689, y: -28 },
-        bl: { x: -690, y: 1.5 },
-        bc: { x: -689.5, y: 1.5 },
-        br: { x: -689, y: 1.5 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 50 },
-            { x: 49, y: 109 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'BottomCenter', target_id: 'rect1u3AJvpzHYv' }, end: null },
-    },
-    {
-      id: 'connection_line8SKNmdI7NY',
-      x: -133.5,
-      y: -27,
-      client: { x: -133.5, y: -27 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -134, y: -56.5 },
-        tc: { x: -133.5, y: -56.5 },
-        tr: { x: -133, y: -56.5 },
-        l: { x: -134, y: -27 },
-        r: { x: -133, y: -27 },
-        bl: { x: -134, y: 2.5 },
-        bc: { x: -133.5, y: 2.5 },
-        br: { x: -133, y: 2.5 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 50 },
-            { x: 49, y: 109 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'BottomCenter', target_id: 'rect1u3AJvpzHYv' }, end: null },
-    },
-    {
-      id: 'electric-transformerRBBJGgk12b',
-      x: -687,
-      y: 81,
-      client: { x: -687, y: 81 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 1, y: 1, width: 88, height: 160 },
-      point_coordinate: {
-        tl: { x: -731, y: 1 },
-        tc: { x: -687, y: 1 },
-        tr: { x: -643, y: 1 },
-        l: { x: -731, y: 81 },
-        r: { x: -643, y: 81 },
-        bl: { x: -731, y: 161 },
-        bc: { x: -687, y: 161 },
-        br: { x: -643, y: 161 },
-      },
-      name: 'electric-transformer',
-      title: '变压器',
-      tag: 'electric-transformer',
-      type: 'CustomSvg',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: { isOpen: { title: '开关', type: 'Switch', val: false } },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'electric-transformerWFdpgdmG1o',
-      x: -129,
-      y: 80,
-      client: { x: -129, y: 80 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 1, y: 1, width: 88, height: 160 },
-      point_coordinate: {
-        tl: { x: -173, y: 0 },
-        tc: { x: -129, y: 0 },
-        tr: { x: -85, y: 0 },
-        l: { x: -173, y: 80 },
-        r: { x: -85, y: 80 },
-        bl: { x: -173, y: 160 },
-        bc: { x: -129, y: 160 },
-        br: { x: -85, y: 160 },
-      },
-      name: 'electric-transformer',
-      title: '变压器-copy',
-      tag: 'electric-transformer',
-      type: 'CustomSvg',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: { isOpen: { title: '开关', type: 'Switch', val: false } },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'straight-lineQunQ4hosc2',
-      x: -692,
-      y: 193,
-      client: { x: -692, y: 193 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -692, y: 114.5 },
-        tc: { x: -692, y: 114.5 },
-        tr: { x: -692, y: 114.5 },
-        l: { x: -692, y: 193 },
-        r: { x: -692, y: 193 },
-        bl: { x: -692, y: 271.5 },
-        bc: { x: -692, y: 271.5 },
-        br: { x: -692, y: 271.5 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 50 },
-            { x: 50, y: 207 },
-            { x: 50, y: 207 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'BottomCenter', target_id: 'electric-transformerRBBJGgk12b' }, end: null },
-    },
-    {
-      id: 'connection_lineVp68SNcEFL',
-      x: -132,
-      y: 192,
-      client: { x: -134, y: 193 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -134, y: 114.5 },
-        tc: { x: -134, y: 114.5 },
-        tr: { x: -134, y: 114.5 },
-        l: { x: -134, y: 193 },
-        r: { x: -134, y: 193 },
-        bl: { x: -134, y: 271.5 },
-        bc: { x: -134, y: 271.5 },
-        br: { x: -134, y: 271.5 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 50 },
-            { x: 50, y: 207 },
-            { x: 50, y: 207 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'BottomCenter', target_id: 'electric-transformerRBBJGgk12b' }, end: null },
-    },
-    {
-      id: 'rect2b2ua906HAT',
-      x: -695,
-      y: 266.5,
-      client: { x: -695, y: 266.5 },
-      scale_x: 0.677647070988322,
-      scale_y: 0.5039999846191411,
-      rotate: 0,
-      actual_bound: { x: 2.777777671813965, y: 41.66666793823242, width: 94.44444274902344, height: 13.88888931274414 },
-      point_coordinate: {
-        tl: { x: -727, y: 263 },
-        tc: { x: -695, y: 263 },
-        tr: { x: -663, y: 263 },
-        l: { x: -727, y: 266.5 },
-        r: { x: -663, y: 266.5 },
-        bl: { x: -727, y: 270 },
-        bc: { x: -695, y: 270 },
-        br: { x: -663, y: 270 },
-      },
-      name: 'rect2',
-      title: '矩形',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {},
-      state: { OnOff: { title: '开关', default: false, props: { fill: { openVal: '#ff0000', closeVal: '#ffff00' } } } },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'rect2iNmTsLMCnq',
-      x: -132,
-      y: 268.5,
-      client: { x: -132, y: 268.5 },
-      scale_x: 0.677647070988322,
-      scale_y: 0.5039999846191411,
-      rotate: 0,
-      actual_bound: { x: 2.777777671813965, y: 41.66666793823242, width: 94.44444274902344, height: 13.88888931274414 },
-      point_coordinate: {
-        tl: { x: -164, y: 265 },
-        tc: { x: -132, y: 265 },
-        tr: { x: -100, y: 265 },
-        l: { x: -164, y: 268.5 },
-        r: { x: -100, y: 268.5 },
-        bl: { x: -164, y: 272 },
-        bc: { x: -132, y: 272 },
-        br: { x: -100, y: 272 },
-      },
-      name: 'rect2',
-      title: '矩形-copy',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {},
-      state: { OnOff: { title: '开关', default: false, props: { fill: { openVal: '#ff0000', closeVal: '#ffff00' } } } },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'rectiQQbMJHYM9',
-      x: -692.5,
-      y: 388.5,
-      client: { x: -692.5, y: 388.5 },
-      scale_x: 0.7411765038513409,
-      scale_y: 0.7777777601956344,
-      rotate: 0,
-      actual_bound: { x: 19.64285659790039, y: 1.7857142686843872, width: 60.71428298950195, height: 96.42857360839844 },
-      point_coordinate: {
-        tl: { x: -715, y: 351 },
-        tc: { x: -692.5, y: 351 },
-        tr: { x: -670, y: 351 },
-        l: { x: -715, y: 388.5 },
-        r: { x: -670, y: 388.5 },
-        bl: { x: -715, y: 426 },
-        bc: { x: -692.5, y: 426 },
-        br: { x: -670, y: 426 },
-      },
-      name: 'rect',
-      title: '矩形',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {},
-      state: {
-        OnOff: {
-          title: '开关',
-          default: false,
-          props: { stroke: { openVal: '#00ff00', closeVal: '#ffff00' }, fill: { openVal: '#00ff00', closeVal: '#ff000000' } },
-        },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'rectjl8XE7uvYW',
-      x: -132.5,
-      y: 387.5,
-      client: { x: -132.5, y: 382.5 },
-      scale_x: 0.7411765038513409,
-      scale_y: 0.7777777601956344,
-      rotate: 0,
-      actual_bound: { x: 19.64285659790039, y: 1.7857142686843872, width: 60.71428298950195, height: 96.42857360839844 },
-      point_coordinate: {
-        tl: { x: -155, y: 345 },
-        tc: { x: -132.5, y: 345 },
-        tr: { x: -110, y: 345 },
-        l: { x: -155, y: 382.5 },
-        r: { x: -110, y: 382.5 },
-        bl: { x: -155, y: 420 },
-        bc: { x: -132.5, y: 420 },
-        br: { x: -110, y: 420 },
-      },
-      name: 'rect',
-      title: '矩形-copy',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {},
-      state: {
-        OnOff: {
-          title: '开关',
-          default: false,
-          props: { stroke: { openVal: '#00ff00', closeVal: '#ffff00' }, fill: { openVal: '#00ff00', closeVal: '#ff000000' } },
-        },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'arrow-linetgtW9T3tlM',
-      x: -693,
-      y: 477,
-      client: { x: -693, y: 477 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 40.88562774658203, y: -0.0006357083912007511, width: 18.227031707763672, height: 95.88262176513672 },
-      point_coordinate: {
-        tl: { x: -702.1135158538818, y: 429.05868911743164 },
-        tc: { x: -693, y: 429.05868911743164 },
-        tr: { x: -683.8864841461182, y: 429.05868911743164 },
-        l: { x: -702.1135158538818, y: 477 },
-        r: { x: -683.8864841461182, y: 477 },
-        bl: { x: -702.1135158538818, y: 524.9413108825684 },
-        bc: { x: -693, y: 524.9413108825684 },
-        br: { x: -683.8864841461182, y: 524.9413108825684 },
-      },
-      name: 'arrow-line',
-      title: '箭头1',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      state: {
-        OnOff: {
-          title: '开关',
-          default: false,
-          props: { stroke: { openVal: '#00ff00', closeVal: '#ffff00' }, fill: { openVal: '#00ff00', closeVal: '#ff000000' } },
-        },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'arrow-lineB8uDtRCKgx',
-      x: -133,
-      y: 477,
-      client: { x: -134, y: 476 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 40.88562774658203, y: -0.0006357083912007511, width: 18.227031707763672, height: 95.88262176513672 },
-      point_coordinate: {
-        tl: { x: -143.11351585388184, y: 428.05868911743164 },
-        tc: { x: -134, y: 428.05868911743164 },
-        tr: { x: -124.88648414611816, y: 428.05868911743164 },
-        l: { x: -143.11351585388184, y: 476 },
-        r: { x: -124.88648414611816, y: 476 },
-        bl: { x: -143.11351585388184, y: 523.9413108825684 },
-        bc: { x: -134, y: 523.9413108825684 },
-        br: { x: -124.88648414611816, y: 523.9413108825684 },
-      },
-      name: 'arrow-line',
-      title: '箭头1-copy',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      state: {
-        OnOff: {
-          title: '开关',
-          default: false,
-          props: { stroke: { openVal: '#00ff00', closeVal: '#ffff00' }, fill: { openVal: '#00ff00', closeVal: '#ff000000' } },
-        },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'straight-linewAYhKBlISA',
-      x: -693,
-      y: 524.9413108825684,
-      client: { x: 450, y: 889 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -742, y: 393.94131088256836 },
-        tc: { x: -693, y: 393.94131088256836 },
-        tr: { x: -644, y: 393.94131088256836 },
-        l: { x: -742, y: 524.9413108825684 },
-        r: { x: -644, y: 524.9413108825684 },
-        bl: { x: -742, y: 655.9413108825684 },
-        bc: { x: -693, y: 655.9413108825684 },
-        br: { x: -644, y: 655.9413108825684 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 50 },
-            { x: 134, y: 50 },
-            { x: 135, y: -205 },
-            { x: 140, y: -209 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'BottomCenter', target_id: 'arrow-linetgtW9T3tlM' }, end: null },
-    },
-    {
-      id: 'connection_linezKEzYcoJeW',
-      x: -335,
-      y: 524.9413108825684,
-      client: { x: -335, y: 524.9413108825684 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -388, y: 393.94131088256836 },
-        tc: { x: -335, y: 393.94131088256836 },
-        tr: { x: -282, y: 393.94131088256836 },
-        l: { x: -388, y: 524.9413108825684 },
-        r: { x: -282, y: 524.9413108825684 },
-        bl: { x: -388, y: 655.9413108825684 },
-        bc: { x: -335, y: 655.9413108825684 },
-        br: { x: -282, y: 655.9413108825684 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 253, y: 50 },
-            { x: 172, y: 51 },
-            { x: 173, y: -208 },
-            { x: 173, y: -208 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'BottomCenter', target_id: 'arrow-linetgtW9T3tlM' }, end: null },
-    },
-    {
-      id: 'rect20w5PJBsB2x',
-      x: -539.5,
-      y: 268.5,
-      client: { x: -539.5, y: 268.5 },
-      scale_x: 1.810588267796923,
-      scale_y: 0.5039999846191411,
-      rotate: 0,
-      actual_bound: { x: 2.777777671813965, y: 41.66666793823242, width: 94.44444274902344, height: 13.88888931274414 },
-      point_coordinate: {
-        tl: { x: -625, y: 265 },
-        tc: { x: -539.5, y: 265 },
-        tr: { x: -454, y: 265 },
-        l: { x: -625, y: 268.5 },
-        r: { x: -454, y: 268.5 },
-        bl: { x: -625, y: 272 },
-        bc: { x: -539.5, y: 272 },
-        br: { x: -454, y: 272 },
-      },
-      name: 'rect2',
-      title: '矩形',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {},
-      state: { OnOff: { title: '开关', default: false, props: { fill: { openVal: '#ff0000', closeVal: '#ffff00' } } } },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'rect2RxYeI9K6JU',
-      x: -272.5,
-      y: 267.5,
-      client: { x: -272.5, y: 267.5 },
-      scale_x: 1.810588267796923,
-      scale_y: 0.5039999846191411,
-      rotate: 0,
-      actual_bound: { x: 2.777777671813965, y: 41.66666793823242, width: 94.44444274902344, height: 13.88888931274414 },
-      point_coordinate: {
-        tl: { x: -358, y: 264 },
-        tc: { x: -272.5, y: 264 },
-        tr: { x: -187, y: 264 },
-        l: { x: -358, y: 267.5 },
-        r: { x: -187, y: 267.5 },
-        bl: { x: -358, y: 271 },
-        bc: { x: -272.5, y: 271 },
-        br: { x: -187, y: 271 },
-      },
-      name: 'rect2',
-      title: '矩形-copy',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {},
-      state: { OnOff: { title: '开关', default: false, props: { fill: { openVal: '#ff0000', closeVal: '#ffff00' } } } },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-text662jqUKDwd',
-      x: -102,
-      y: -64,
-      client: { x: -102, y: -64 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -117.5, y: -74 },
-        tc: { x: -102, y: -74 },
-        tr: { x: -86.5, y: -74 },
-        l: { x: -117.5, y: -64 },
-        r: { x: -86.5, y: -64 },
-        bl: { x: -117.5, y: -54 },
-        bc: { x: -102, y: -54 },
-        br: { x: -86.5, y: -54 },
-      },
-      name: 'custom-svg-text',
-      title: '文字',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '主风机移变' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#FFFFFF' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'straight-lineqQLg7eRl0i',
-      x: -502,
-      y: 295,
-      client: { x: -485, y: 314 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -512, y: 314 },
-        tc: { x: -485, y: 314 },
-        tr: { x: -458, y: 314 },
-        l: { x: -512, y: 314 },
-        r: { x: -458, y: 314 },
-        bl: { x: -512, y: 314 },
-        bc: { x: -485, y: 314 },
-        br: { x: -458, y: 314 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 51, y: 50 },
-            { x: 97, y: 50 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text662jqUKDwd' }, end: null },
-    },
-    {
-      id: 'connection_linek2NgvxH4Nd',
-      x: -554,
-      y: 294,
-      client: { x: -538, y: 313 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -565, y: 313 },
-        tc: { x: -538, y: 313 },
-        tr: { x: -511, y: 313 },
-        l: { x: -565, y: 313 },
-        r: { x: -511, y: 313 },
-        bl: { x: -565, y: 313 },
-        bc: { x: -538, y: 313 },
-        br: { x: -511, y: 313 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 59, y: 51 },
-            { x: 103, y: 51 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text662jqUKDwd' }, end: null },
-    },
-    {
-      id: 'connection_lineZu9slDCUUd',
-      x: -321,
-      y: 293,
-      client: { x: -321, y: 314 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -343.5, y: 314 },
-        tc: { x: -321, y: 314 },
-        tr: { x: -298.5, y: 314 },
-        l: { x: -343.5, y: 314 },
-        r: { x: -298.5, y: 314 },
-        bl: { x: -343.5, y: 314 },
-        bc: { x: -321, y: 314 },
-        br: { x: -298.5, y: 314 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 50 },
-            { x: 95, y: 50 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text662jqUKDwd' }, end: null },
-    },
-    {
-      id: 'connection_linelZOGc5aG2N',
-      x: -375,
-      y: 292,
-      client: { x: -399, y: 313 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -426, y: 313 },
-        tc: { x: -399, y: 313 },
-        tr: { x: -372, y: 313 },
-        l: { x: -426, y: 313 },
-        r: { x: -372, y: 313 },
-        bl: { x: -426, y: 313 },
-        bc: { x: -399, y: 313 },
-        br: { x: -372, y: 313 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 61, y: 51 },
-            { x: 103, y: 51 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text662jqUKDwd' }, end: null },
-    },
-    {
-      id: 'connection_linePOFwnnzvAq',
-      x: -546,
-      y: 343,
-      client: { x: -546, y: 365 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -546.5, y: 342.5 },
-        tc: { x: -546, y: 342.5 },
-        tr: { x: -545.5, y: 342.5 },
-        l: { x: -546.5, y: 365 },
-        r: { x: -545.5, y: 365 },
-        bl: { x: -546.5, y: 387.5 },
-        bc: { x: -546, y: 387.5 },
-        br: { x: -545.5, y: 387.5 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 51, y: 32 },
-            { x: 51, y: 2 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text662jqUKDwd' }, end: null },
-    },
-    {
-      id: 'electric-breakerfztlV6HGOI',
-      x: -568,
-      y: 375,
-      client: { x: -568, y: 393 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 28.222497940063477, y: 0.8181726336479187, width: 44.1177978515625, height: 98.3599624633789 },
-      point_coordinate: {
-        tl: { x: -590.0588989257812, y: 343.82001876831055 },
-        tc: { x: -568, y: 343.82001876831055 },
-        tr: { x: -545.9411010742188, y: 343.82001876831055 },
-        l: { x: -590.0588989257812, y: 393 },
-        r: { x: -545.9411010742188, y: 393 },
-        bl: { x: -590.0588989257812, y: 442.17998123168945 },
-        bc: { x: -568, y: 442.17998123168945 },
-        br: { x: -545.9411010742188, y: 442.17998123168945 },
-      },
-      name: 'electric-breaker',
-      title: '电源断路器',
-      tag: 'electric-breaker',
-      type: 'CustomSvg',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {
-        stroke: { title: '边框色', type: 'Color', val: '#00ff00' },
-        fill: { title: '填充色', type: 'Color', val: '#00ff00' },
-        isOpen: { title: '开关', type: 'Switch', val: false },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'connection_line26MoSsACzZ',
-      x: -456,
-      y: 343,
-      client: { x: -456, y: 365 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -456.5, y: 342.5 },
-        tc: { x: -456, y: 342.5 },
-        tr: { x: -455.5, y: 342.5 },
-        l: { x: -456.5, y: 365 },
-        r: { x: -455.5, y: 365 },
-        bl: { x: -456.5, y: 387.5 },
-        bc: { x: -456, y: 387.5 },
-        br: { x: -455.5, y: 387.5 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 33 },
-            { x: 51, y: 2 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text662jqUKDwd' }, end: null },
-    },
-    {
-      id: 'electric-breakeraE7ngUn8TD',
-      x: -478,
-      y: 374,
-      client: { x: -478, y: 391 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 28.222497940063477, y: 0.8181726336479187, width: 44.1177978515625, height: 98.3599624633789 },
-      point_coordinate: {
-        tl: { x: -500.05889892578125, y: 341.82001876831055 },
-        tc: { x: -478, y: 341.82001876831055 },
-        tr: { x: -455.94110107421875, y: 341.82001876831055 },
-        l: { x: -500.05889892578125, y: 391 },
-        r: { x: -455.94110107421875, y: 391 },
-        bl: { x: -500.05889892578125, y: 440.17998123168945 },
-        bc: { x: -478, y: 440.17998123168945 },
-        br: { x: -455.94110107421875, y: 440.17998123168945 },
-      },
-      name: 'electric-breaker',
-      title: '电源断路器-copy',
-      tag: 'electric-breaker',
-      type: 'CustomSvg',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {
-        stroke: { title: '边框色', type: 'Color', val: '#00ff00' },
-        fill: { title: '填充色', type: 'Color', val: '#00ff00' },
-        isOpen: { title: '开关', type: 'Switch', val: false },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'connection_lineibxBHM0S9F',
-      x: -364,
-      y: 339,
-      client: { x: -367, y: 363 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -367.5, y: 340.5 },
-        tc: { x: -367, y: 340.5 },
-        tr: { x: -366.5, y: 340.5 },
-        l: { x: -367.5, y: 363 },
-        r: { x: -366.5, y: 363 },
-        bl: { x: -367.5, y: 385.5 },
-        bc: { x: -367, y: 385.5 },
-        br: { x: -366.5, y: 385.5 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 36 },
-            { x: 51, y: 2 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text662jqUKDwd' }, end: null },
-    },
-    {
-      id: 'connection_lineJUvw4pt6ft',
-      x: -277,
-      y: 339,
-      client: { x: -277, y: 360 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -277.5, y: 337.5 },
-        tc: { x: -277, y: 337.5 },
-        tr: { x: -276.5, y: 337.5 },
-        l: { x: -277.5, y: 360 },
-        r: { x: -276.5, y: 360 },
-        bl: { x: -277.5, y: 382.5 },
-        bc: { x: -277, y: 382.5 },
-        br: { x: -276.5, y: 382.5 },
-      },
-      name: 'connection_line',
-      title: 'changeLine',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#FFFF00' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: {
-          title: '点坐标',
-          type: 'JsonEdit',
-          val: [
-            { x: 50, y: 37 },
-            { x: 51, y: 2 },
-          ],
-        },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text662jqUKDwd' }, end: null },
-    },
-    {
-      id: 'electric-breakerO6pjkUkcp7',
-      x: -386,
-      y: 376,
-      client: { x: -386, y: 392 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 28.222497940063477, y: 0.8181726336479187, width: 44.1177978515625, height: 98.3599624633789 },
-      point_coordinate: {
-        tl: { x: -408.05889892578125, y: 342.82001876831055 },
-        tc: { x: -386, y: 342.82001876831055 },
-        tr: { x: -363.94110107421875, y: 342.82001876831055 },
-        l: { x: -408.05889892578125, y: 392 },
-        r: { x: -363.94110107421875, y: 392 },
-        bl: { x: -408.05889892578125, y: 441.17998123168945 },
-        bc: { x: -386, y: 441.17998123168945 },
-        br: { x: -363.94110107421875, y: 441.17998123168945 },
-      },
-      name: 'electric-breaker',
-      title: '电源断路器-copy-copy',
-      tag: 'electric-breaker',
-      type: 'CustomSvg',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {
-        stroke: { title: '边框色', type: 'Color', val: '#00ff00' },
-        fill: { title: '填充色', type: 'Color', val: '#00ff00' },
-        isOpen: { title: '开关', type: 'Switch', val: false },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'electric-breakerzbNanrnQvI',
-      x: -301,
-      y: 375,
-      client: { x: -301, y: 375 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 28.222497940063477, y: 0.8181726336479187, width: 44.1177978515625, height: 98.3599624633789 },
-      point_coordinate: {
-        tl: { x: -323.05889892578125, y: 325.82001876831055 },
-        tc: { x: -301, y: 325.82001876831055 },
-        tr: { x: -278.94110107421875, y: 325.82001876831055 },
-        l: { x: -323.05889892578125, y: 375 },
-        r: { x: -278.94110107421875, y: 375 },
-        bl: { x: -323.05889892578125, y: 424.17998123168945 },
-        bc: { x: -301, y: 424.17998123168945 },
-        br: { x: -278.94110107421875, y: 424.17998123168945 },
-      },
-      name: 'electric-breaker',
-      title: '电源断路器-copy-copy-copy',
-      tag: 'electric-breaker',
-      type: 'CustomSvg',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      props: {
-        stroke: { title: '边框色', type: 'Color', val: '#00ff00' },
-        fill: { title: '填充色', type: 'Color', val: '#00ff00' },
-        isOpen: { title: '开关', type: 'Switch', val: false },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'arrow-line5bLLa1fo6m',
-      x: -547,
-      y: 471,
-      client: { x: -547, y: 488 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 40.88562774658203, y: -0.0006357083912007511, width: 18.227031707763672, height: 95.88262176513672 },
-      point_coordinate: {
-        tl: { x: -556.1135158538818, y: 440.05868911743164 },
-        tc: { x: -547, y: 440.05868911743164 },
-        tr: { x: -537.8864841461182, y: 440.05868911743164 },
-        l: { x: -556.1135158538818, y: 488 },
-        r: { x: -537.8864841461182, y: 488 },
-        bl: { x: -556.1135158538818, y: 535.9413108825684 },
-        bc: { x: -547, y: 535.9413108825684 },
-        br: { x: -537.8864841461182, y: 535.9413108825684 },
-      },
-      name: 'arrow-line',
-      title: '箭头1',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      state: {
-        OnOff: {
-          title: '开关',
-          default: false,
-          props: { stroke: { openVal: '#00ff00', closeVal: '#ffff00' }, fill: { openVal: '#00ff00', closeVal: '#ff000000' } },
-        },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'arrow-lineqPB3ix7BkL',
-      x: -457,
-      y: 472,
-      client: { x: -457, y: 472 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 40.88562774658203, y: -0.0006357083912007511, width: 18.227031707763672, height: 95.88262176513672 },
-      point_coordinate: {
-        tl: { x: -466.11351585388184, y: 424.05868911743164 },
-        tc: { x: -457, y: 424.05868911743164 },
-        tr: { x: -447.88648414611816, y: 424.05868911743164 },
-        l: { x: -466.11351585388184, y: 472 },
-        r: { x: -447.88648414611816, y: 472 },
-        bl: { x: -466.11351585388184, y: 519.9413108825684 },
-        bc: { x: -457, y: 519.9413108825684 },
-        br: { x: -447.88648414611816, y: 519.9413108825684 },
-      },
-      name: 'arrow-line',
-      title: '箭头1-copy',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      state: {
-        OnOff: {
-          title: '开关',
-          default: false,
-          props: { stroke: { openVal: '#00ff00', closeVal: '#ffff00' }, fill: { openVal: '#00ff00', closeVal: '#ff000000' } },
-        },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'arrow-lineBoydWOHHmr',
-      x: -366,
-      y: 471,
-      client: { x: -366, y: 471 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 40.88562774658203, y: -0.0006357083912007511, width: 18.227031707763672, height: 95.88262176513672 },
-      point_coordinate: {
-        tl: { x: -375.11351585388184, y: 423.05868911743164 },
-        tc: { x: -366, y: 423.05868911743164 },
-        tr: { x: -356.88648414611816, y: 423.05868911743164 },
-        l: { x: -375.11351585388184, y: 471 },
-        r: { x: -356.88648414611816, y: 471 },
-        bl: { x: -375.11351585388184, y: 518.9413108825684 },
-        bc: { x: -366, y: 518.9413108825684 },
-        br: { x: -356.88648414611816, y: 518.9413108825684 },
-      },
-      name: 'arrow-line',
-      title: '箭头1-copy-copy',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      state: {
-        OnOff: {
-          title: '开关',
-          default: false,
-          props: { stroke: { openVal: '#00ff00', closeVal: '#ffff00' }, fill: { openVal: '#00ff00', closeVal: '#ff000000' } },
-        },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'arrow-line5waKsA7PHF',
-      x: -280,
-      y: 473,
-      client: { x: -282, y: 473 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 40.88562774658203, y: -0.0006357083912007511, width: 18.227031707763672, height: 95.88262176513672 },
-      point_coordinate: {
-        tl: { x: -291.11351585388184, y: 425.05868911743164 },
-        tc: { x: -282, y: 425.05868911743164 },
-        tr: { x: -272.88648414611816, y: 425.05868911743164 },
-        l: { x: -291.11351585388184, y: 473 },
-        r: { x: -272.88648414611816, y: 473 },
-        bl: { x: -291.11351585388184, y: 520.9413108825684 },
-        bc: { x: -282, y: 520.9413108825684 },
-        br: { x: -272.88648414611816, y: 520.9413108825684 },
-      },
-      name: 'arrow-line',
-      title: '箭头1-copy-copy-copy',
-      type: 'File',
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      display: true,
-      state: {
-        OnOff: {
-          title: '开关',
-          default: false,
-          props: { stroke: { openVal: '#00ff00', closeVal: '#ffff00' }, fill: { openVal: '#00ff00', closeVal: '#ff000000' } },
-        },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-text9mE6DlRsxq',
-      x: -662,
-      y: -63,
-      client: { x: -662, y: -63 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -700, y: -73 },
-        tc: { x: -662, y: -73 },
-        tr: { x: -624, y: -73 },
-        l: { x: -700, y: -63 },
-        r: { x: -624, y: -63 },
-        bl: { x: -700, y: -53 },
-        bc: { x: -662, y: -53 },
-        br: { x: -624, y: -53 },
-      },
-      name: 'custom-svg-text',
-      title: '文字-copy',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '备风机移变' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#FFFFFF' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textffQAK2KK7l',
-      x: -512,
-      y: 313,
-      client: { x: -512, y: 313 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -524.4000005722046, y: 297 },
-        tc: { x: -512, y: 297 },
-        tr: { x: -499.5999994277954, y: 297 },
-        l: { x: -524.4000005722046, y: 313 },
-        r: { x: -499.5999994277954, y: 313 },
-        bl: { x: -524.4000005722046, y: 329 },
-        bc: { x: -512, y: 329 },
-        br: { x: -499.5999994277954, y: 329 },
-      },
-      name: 'custom-svg-text',
-      title: '文字',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '备' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 24 },
-        fill: { title: '文字颜色', type: 'Color', val: '#00DDFF' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textErE3B1l7S1',
-      x: -334,
-      y: 312,
-      client: { x: -334, y: 312 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -346.4000005722046, y: 296 },
-        tc: { x: -334, y: 296 },
-        tr: { x: -321.5999994277954, y: 296 },
-        l: { x: -346.4000005722046, y: 312 },
-        r: { x: -321.5999994277954, y: 312 },
-        bl: { x: -346.4000005722046, y: 328 },
-        bc: { x: -334, y: 328 },
-        br: { x: -321.5999994277954, y: 328 },
-      },
-      name: 'custom-svg-text',
-      title: '文字-copy',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '主' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 24 },
-        fill: { title: '文字颜色', type: 'Color', val: '#00DDFF' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textIjsFbs6fID',
-      x: -675,
-      y: -172,
-      client: { x: -675, y: -172 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -782.466552734375, y: -182 },
-        tc: { x: -675, y: -182 },
-        tr: { x: -567.533447265625, y: -182 },
-        l: { x: -782.466552734375, y: -172 },
-        r: { x: -567.533447265625, y: -172 },
-        bl: { x: -782.466552734375, y: -162 },
-        bc: { x: -675, y: -162 },
-        br: { x: -567.533447265625, y: -162 },
-      },
-      name: 'custom-svg-text',
-      title: '文字',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '来在12煤三盘区变电所G1211柜' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#FFFFFF' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textWilG5jRH7w',
-      x: -353,
-      y: -172,
-      client: { x: -353, y: -172 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -460.466552734375, y: -182 },
-        tc: { x: -353, y: -182 },
-        tr: { x: -245.533447265625, y: -182 },
-        l: { x: -460.466552734375, y: -172 },
-        r: { x: -245.533447265625, y: -172 },
-        bl: { x: -460.466552734375, y: -162 },
-        bc: { x: -353, y: -162 },
-        br: { x: -245.533447265625, y: -162 },
-      },
-      name: 'custom-svg-text',
-      title: '文字-copy',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '来在12煤三盘区变电所G1107柜' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#FFFFFF' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textcxjU8wN810',
-      x: -137,
-      y: 553,
-      client: { x: -137, y: 553 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -152.5, y: 543 },
-        tc: { x: -137, y: 543 },
-        tr: { x: -121.5, y: 543 },
-        l: { x: -152.5, y: 553 },
-        r: { x: -121.5, y: 553 },
-        bl: { x: -152.5, y: 563 },
-        bc: { x: -137, y: 563 },
-        br: { x: -121.5, y: 563 },
-      },
-      name: 'custom-svg-text',
-      title: '文字',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '主风机馈电' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#FFFFFF' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textHXkhPmUMWE',
-      x: -742,
-      y: 551,
-      client: { x: -742, y: 551 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -779.6000022888184, y: 541 },
-        tc: { x: -742, y: 541 },
-        tr: { x: -704.3999977111816, y: 541 },
-        l: { x: -779.6000022888184, y: 551 },
-        r: { x: -704.3999977111816, y: 551 },
-        bl: { x: -779.6000022888184, y: 561 },
-        bc: { x: -742, y: 561 },
-        br: { x: -704.3999977111816, y: 561 },
-      },
-      name: 'custom-svg-text',
-      title: '文字-copy',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '备风机馈电' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#FFFFFF' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textH6apeUpS25',
-      x: -280,
-      y: -100,
-      client: { x: -280, y: -100 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -325.5, y: -110 },
-        tc: { x: -280, y: -110 },
-        tr: { x: -234.5, y: -110 },
-        l: { x: -325.5, y: -100 },
-        r: { x: -234.5, y: -100 },
-        bl: { x: -325.5, y: -90 },
-        bc: { x: -280, y: -90 },
-        br: { x: -234.5, y: -90 },
-      },
-      name: 'custom-svg-text',
-      title: '文字',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '高压运行状态' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#FFA600' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textdlSMN5CrsK',
-      x: -281,
-      y: 127,
-      client: { x: -281, y: 127 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -326.5, y: 117 },
-        tc: { x: -281, y: 117 },
-        tr: { x: -235.5, y: 117 },
-        l: { x: -326.5, y: 127 },
-        r: { x: -235.5, y: 127 },
-        bl: { x: -326.5, y: 137 },
-        bc: { x: -281, y: 137 },
-        br: { x: -235.5, y: 137 },
-      },
-      name: 'custom-svg-text',
-      title: '文字-copy',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '低压运行状态' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#FFA600' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-text8hfqYu7qCf',
-      x: -838,
-      y: 127,
-      client: { x: -838, y: 127 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -883.5, y: 117 },
-        tc: { x: -838, y: 117 },
-        tr: { x: -792.5, y: 117 },
-        l: { x: -883.5, y: 127 },
-        r: { x: -792.5, y: 127 },
-        bl: { x: -883.5, y: 137 },
-        bc: { x: -838, y: 137 },
-        br: { x: -792.5, y: 137 },
-      },
-      name: 'custom-svg-text',
-      title: '文字-copy-copy',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '低压运行状态' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#FFA600' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textYN6br3c8mY',
-      x: -835,
-      y: -100,
-      client: { x: -835, y: -105 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -880.5, y: -115 },
-        tc: { x: -835, y: -115 },
-        tr: { x: -789.5, y: -115 },
-        l: { x: -880.5, y: -105 },
-        r: { x: -789.5, y: -105 },
-        bl: { x: -880.5, y: -95 },
-        bc: { x: -835, y: -95 },
-        br: { x: -789.5, y: -95 },
-      },
-      name: 'custom-svg-text',
-      title: '文字-copy-copy-copy',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '高压运行状态' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#FFA600' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-text9OtB4BD8tx',
-      x: -811,
-      y: -75,
-      client: { x: -811, y: -78 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -826.1000003814697, y: -88 },
-        tc: { x: -811, y: -88 },
-        tr: { x: -795.8999996185303, y: -88 },
-        l: { x: -826.1000003814697, y: -78 },
-        r: { x: -795.8999996185303, y: -78 },
-        bl: { x: -826.1000003814697, y: -68 },
-        bc: { x: -811, y: -68 },
-        br: { x: -795.8999996185303, y: -68 },
-      },
-      name: 'custom-svg-text',
-      title: 'b-state',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '正常' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#00FF00' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textifb0BW0nZX',
-      x: -252,
-      y: -74,
-      client: { x: -252, y: -74 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -267.1000003814697, y: -84 },
-        tc: { x: -252, y: -84 },
-        tr: { x: -236.89999961853027, y: -84 },
-        l: { x: -267.1000003814697, y: -74 },
-        r: { x: -236.89999961853027, y: -74 },
-        bl: { x: -267.1000003814697, y: -64 },
-        bc: { x: -252, y: -64 },
-        br: { x: -236.89999961853027, y: -64 },
-      },
-      name: 'custom-svg-text',
-      title: 'z-state',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '正常' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#00FF00' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'straight-lineFGURWExYla',
-      x: -811,
-      y: -88,
-      client: { x: 347, y: 258 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 50, y: 50, width: 0, height: 0 },
-      point_coordinate: {
-        tl: { x: -811, y: -88 },
-        tc: { x: -811, y: -88 },
-        tr: { x: -811, y: -88 },
-        l: { x: -811, y: -88 },
-        r: { x: -811, y: -88 },
-        bl: { x: -811, y: -88 },
-        bc: { x: -811, y: -88 },
-        br: { x: -811, y: -88 },
-      },
-      name: 'connection_line',
-      title: '连接线',
-      type: 'ConnectionLine',
-      config: { can_zoom: false, have_anchor: false, actual_rect: false },
-      display: true,
-      props: {
-        stroke: { title: '线条颜色', type: 'Color', val: '#ff0000' },
-        'stroke-width': { title: '线条宽度', type: 'InputNumber', val: 2 },
-        point_position: { title: '点坐标', type: 'JsonEdit', val: [{ x: 50, y: 50 }] },
-      },
-      animations: {
-        type: {
-          title: '动画类型',
-          type: 'Select',
-          val: 'None',
-          options: [
-            { label: '无', value: 'None' },
-            { label: '电流', value: 'Electricity' },
-            { label: '轨迹', value: 'Track' },
-            { label: '水珠', value: 'WaterDrop' },
-          ],
-        },
-        dur: { title: '持续时间', type: 'InputNumber', val: 20 },
-        repeatCount: { title: '循环次数', type: 'Input', val: 'indefinite', disabled: true },
-        color: { title: '颜色', type: 'Color', val: '#0a7ae2' },
-        reverse: { title: '反转动画', type: 'Switch', val: false },
-      },
-      bind_anchors: { start: { type: 'TopCenter', target_id: 'custom-svg-text9OtB4BD8tx' }, end: null },
-    },
-    {
-      id: 'custom-svg-textlqc2YZTzyI',
-      x: -815,
-      y: 153,
-      client: { x: -815, y: 153 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -830.1000003814697, y: 143 },
-        tc: { x: -815, y: 143 },
-        tr: { x: -799.8999996185303, y: 143 },
-        l: { x: -830.1000003814697, y: 153 },
-        r: { x: -799.8999996185303, y: 153 },
-        bl: { x: -830.1000003814697, y: 163 },
-        bc: { x: -815, y: 163 },
-        br: { x: -799.8999996185303, y: 163 },
-      },
-      name: 'custom-svg-text',
-      title: 'b-state1',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '正常' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#00FF00' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-    {
-      id: 'custom-svg-textwo1kl0CsXG',
-      x: -249,
-      y: 151,
-      client: { x: -249, y: 151 },
-      scale_x: 1,
-      scale_y: 1,
-      rotate: 0,
-      actual_bound: { x: 49.20000076293945, y: 39, width: 31, height: 20 },
-      point_coordinate: {
-        tl: { x: -264.1000003814697, y: 141 },
-        tc: { x: -249, y: 141 },
-        tr: { x: -233.89999961853027, y: 141 },
-        l: { x: -264.1000003814697, y: 151 },
-        r: { x: -233.89999961853027, y: 151 },
-        bl: { x: -264.1000003814697, y: 161 },
-        bc: { x: -249, y: 161 },
-        br: { x: -233.89999961853027, y: 161 },
-      },
-      name: 'custom-svg-text',
-      title: 'z-state1',
-      tag: 'custom-svg-text',
-      type: 'CustomSvg',
-      display: true,
-      config: { can_zoom: true, have_anchor: true, actual_rect: true },
-      props: {
-        text: { title: '文字内容', type: 'Input', val: '正常' },
-        fontFamily: {
-          title: '字体',
-          type: 'Select',
-          val: 'Microsoft YaHei',
-          options: [
-            { value: 'Microsoft YaHei', label: '微软雅黑' },
-            { value: 'NSimSun', label: '新宋体' },
-          ],
-        },
-        fontSize: { title: '文字大小', type: 'InputNumber', val: 15 },
-        fill: { title: '文字颜色', type: 'Color', val: '#00FF00' },
-      },
-      common_animations: { val: '', delay: 'delay-0s', speed: 'slow', repeat: 'infinite' },
-    },
-  ],
-});
-
-export const option = reactive<EChartsOption>({
-  title: {
-    text: '局部通风机运行工况智能决策',
-    textStyle: {
-      color: '#BF954D',
-    },
-    left: 'center',
-    top: 0,
-  },
-  // backgroundColor: '#39deff',
-  tooltip: {
-    trigger: 'axis',
-    axisPointer: {
-      type: 'cross',
-      label: {
-        backgroundColor: '#6a7985',
-      },
-    },
-  },
-  toolbox: {
-    show: true,
-  },
-  grid: {
-    left: 8,
-    right: 50,
-    bottom: 0,
-    containLabel: true,
-  },
-  xAxis: {
-    type: 'category',
-    name: 'm³/min',
-    nameTextStyle: {
-      fontWeight: 600,
-      fontSize: 13,
-    },
-    splitLine: { show: true, lineStyle: { color: 'rgba(21,80,126,.5)' } },
-    axisLabel: {
-      margin: 10,
-      fontSize: 14,
-      color: '#f1f1f199',
-    },
-    boundaryGap: false,
-    data: [],
-  },
-  yAxis: {
-    type: 'value',
-    axisLine: {
-      show: true,
-      lineStyle: {
-        color: '#006c9d',
-      },
-    },
-    splitLine: { show: true, lineStyle: { color: 'rgba(21,80,126,.5)' } },
-    axisLabel: {
-      show: true,
-      fontSize: 14,
-      formatter: '{value}',
-      color: '#0071A5',
-    },
-    min: 360,
-    max: 9000,
-    name: 'Pa',
-    nameTextStyle: {
-      fontWeight: 600,
-      fontSize: 13,
-    },
-  },
-  series: [],
-});
-export const echatsOption = {
-  // tooltip: {
-  //   show: true,
-  //   formatter: function (datas: []) {
-  //     return datas.map((item) => {
-  //       item['data'] = item['data'].toFixed(2);
-  //       return item;
-  //     });
-  //   },
-  // },
-  legend: {
-    top: -10,
-  },
-  grid: {
-    top: '15%',
-    left: '20',
-    right: '25',
-    bottom: '0',
-    containLabel: true,
-  },
-  toolbox: {
-    feature: {
-      saveAsImage: {
-        show: false,
-      },
-    },
-  },
-  xAxis: {
-    type: 'category',
-    axisLabel: {
-      margin: 10,
-      color: '#f1f1f199',
-    },
-    name: 'm³/min',
-  },
-  yAxis: {
-    axisLabel: {
-      color: '#0071A5',
-    },
-  },
-};
-
-export const chartsColumnList = [
-  {
-    legend: '瓦斯浓度',
-    seriesName: '(%)',
-    ymax: 0.8,
-    yname: '%',
-    linetype: 'line',
-    yaxispos: 'left',
-    color: '#00FFA8',
-    sort: 1,
-    xRotate: 0,
-    dataIndex: 'gas',
-  },
-  {
-    legend: '风量',
-    seriesName: '(m³/min)',
-    ymax: 1100,
-    yname: 'm³/min',
-    linetype: 'line',
-    yaxispos: 'right',
-    color: '#FDB146',
-    sort: 2,
-    xRotate: 0,
-    dataIndex: 'm3',
-  },
-  {
-    legend: '频率',
-    seriesName: '(Hz)',
-    ymax: 50,
-    yname: 'Hz',
-    linetype: 'line',
-    yaxispos: 'right',
-    color: '#AE19FF',
-    sort: 3,
-    xRotate: 0,
-    dataIndex: 'Hz',
-  },
-];
-
-export const initData = () => {
-  const num = 3;
-  const obj = {
-    angle: 0,
-    Hz: 35.0,
-    a: -0.0626027929595192,
-    b: 44.737585902203136,
-    c: -4047.5601190339376,
-    min: 300,
-    max: 1100.0,
-  };
-  const a = -0.0626,
-    m = 44.737589,
-    n = -4047.56012;
-
-  const maxList = [519, 587, 659.4, 737, 820.7];
-  const minList = [264, 303.7, 346, 387.2, 429.1];
-  const data = [];
-  for (let i = -1; i <= num; i++) {
-    const item = cloneDeep(obj);
-    item['a'] = Math.round((a + 0.003 * i) * 10000) / 10000;
-    item['Hz'] = 35 + i * 5;
-    item['c'] = n + 0.6 * i;
-    item['b'] = m + i * 1.9;
-    item['max'] = maxList[i + 1];
-    item['min'] = minList[i + 1];
-    data.push(item);
-  }
-  return data;
-};
-
-export const fanInfoData = reactive({
-  fj: '一号回风井',
-  xh: 'FBCDZ No.29',
-  gl: '2×500',
-  edgl: '740',
-  eddy: '10000',
-  eddl: '38.4',
-  flfw: '110~260',
-  fyfw: '200~4100',
-  fbdj: 'ExdI',
-  ccrq: '2010.07',
-  sccj: '南阳防爆',
-  tjfs: '变频调节',
-  plfw: '30~50',
-});
-
-export const fanInfo = [
-  {
-    title: '风井',
-    code: 'fj',
-    value: '一号回风井',
-  },
-  {
-    title: '型号',
-    code: 'xh',
-    value: 'FBCDZ No.29',
-  },
-  {
-    title: '功率(kW)',
-    code: 'gl',
-    value: '2×500',
-  },
-  {
-    title: '额定转速(r/min)',
-    code: 'edgl',
-    value: '740',
-  },
-  {
-    title: '额定电压(V)',
-    code: 'eddy',
-    value: '10000',
-  },
-  {
-    title: '额定电流(A)',
-    code: 'eddl',
-    value: '38.4',
-  },
-  {
-    title: '风量范围(m³/s)',
-    code: 'flfw',
-    value: '110~260',
-  },
-  {
-    title: '风压范围(Pa)',
-    code: 'fyfw',
-    value: '200~4100',
-  },
-  {
-    title: '防爆等级',
-    code: 'fbdj',
-    value: 'ExdI',
-  },
-  {
-    title: '出厂日期',
-    code: 'ccrq',
-    value: '2010.07',
-  },
-  {
-    title: '生产厂家',
-    code: 'sccj',
-    value: '南阳防爆',
-  },
-  {
-    title: '调节方式',
-    code: 'tjfs',
-    value: '变频调节',
-  },
-  {
-    title: '频率可调范围(Hz)',
-    code: 'plfw',
-    value: '30~50',
-  },
-];
-
-export const getSchamas = (): FormSchema[] => {
-  return [
-    {
-      field: 'fj',
-      component: 'Input',
-      label: '风井',
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'xh',
-      component: 'Input',
-      label: '型号',
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'gl',
-      component: 'Input',
-      label: '功率(kW)',
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'edgl',
-      component: 'Input',
-      label: '额定转速(r/min)',
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'eddy',
-      component: 'Input',
-      label: '额定电压(V)',
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'eddl',
-      component: 'Input',
-      label: '额定电流(A)',
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'flfw',
-      component: 'Input',
-      label: '风量范围(m³/s)',
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'fyfw',
-      component: 'Input',
-      label: '风压范围(Pa)',
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'fbdj',
-      component: 'Select',
-      label: '防爆等级',
-      colProps: {
-        span: 6,
-      },
-      componentProps: {
-        options: [
-          {
-            label: 'ExdI',
-            value: 'ExdI',
-            key: '1',
-          },
-        ],
-      },
-    },
-    {
-      field: 'ccrq',
-      component: 'Input',
-      label: '出厂日期',
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'sccj',
-      component: 'Input',
-      label: '生产厂家',
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'tjfs',
-      component: 'Select',
-      label: '调节方式',
-      colProps: {
-        span: 6,
-      },
-      componentProps: {
-        options: [
-          {
-            label: '变频调节',
-            value: '变频调节',
-            key: '1',
-          },
-        ],
-      },
-    },
-    {
-      field: 'plfw',
-      component: 'Input',
-      label: '频率可调范围(Hz)',
-      colProps: {
-        span: 6,
-      },
-    },
-  ];
-};
-
-export const getSchamas1 = (): FormSchema[] => {
-  return [
-    {
-      field: 'Hz',
-      component: 'InputNumber',
-      label: '频率(Hz)',
-      required: true,
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'a',
-      component: 'InputNumber',
-      label: '二次项系数',
-      required: true,
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'b',
-      component: 'InputNumber',
-      label: '一次项系数',
-      required: true,
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'c',
-      component: 'InputNumber',
-      label: '常数项系数',
-      required: true,
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'min',
-      component: 'InputNumber',
-      label: '风量下限(m³/s)',
-      required: true,
-      colProps: {
-        span: 6,
-      },
-    },
-    {
-      field: 'max',
-      component: 'InputNumber',
-      label: '风量上限(m³/s)',
-      required: true,
-      colProps: {
-        span: 6,
-      },
-    },
-  ];
-};
-
-export const lineFormData = reactive({
-  Hz: null,
-  a: null,
-  b: null,
-  c: null,
-  min: null,
-  max: null,
-});

+ 4 - 4
src/views/vent/monitorManager/fanLocalMonitor1/index.vue

@@ -925,13 +925,13 @@
         } else if (control === 'Fan2Open') {
           data.paramcode = 'CtrlFan2Start';
         } else if (control === 'Fan1Stop') {
-          data.paramcode = 'Fan1Stop';
+          data.paramcode = 'CtrlFan1Stop';
         } else if (control === 'Fan2Stop') {
-          data.paramcode = 'Fan2Stop';
+          data.paramcode = 'CtrlFan2Stop';
         } else if (control === 'Fan1Reset') {
-          data.paramcode = 'Fan1Reset';
+          data.paramcode = 'CtrlFan1Reset';
         } else if (control === 'Fan2Reset') {
-          data.paramcode = 'Fan2Reset';
+          data.paramcode = 'CtrlFan2Reset';
         }
         deviceControlApi(data)
           .then((res) => {

+ 1 - 1
src/views/vent/monitorManager/workFaceMonitor/wokeFace.threejs.ts

@@ -72,7 +72,7 @@ export const setModelType = (type, n = Math.ceil(Math.random() * 4), isShowPlane
       showOrHideGasPlane(isShowPlane);
       const oldControlsPosition = { x: 0.055, y: 0.062, z: 0.117 };
       const oldCameraPosition = { x: 0.055, y: 0.062, z: 0.117 };
-      const newCameraPosition = { x: -1.6761668545944788, y: 26.453479850280285, z: 47.001334651484676 };
+      const newCameraPosition = { x: 0.019426503104799448, y: 30.779998695745917, z: 44.32480656959464 };
       const newControlsPosition = { x: 0.021191, y: 0.077857, z: 0.069123 };
 
       if (model.scene.getObjectByName('workFace')) {

+ 186 - 32
src/views/vent/monitorManager/workFaceMonitor/workFace.threejs.base.ts

@@ -8,6 +8,7 @@ import { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPa
 import { OutputPass } from 'three/examples/jsm/postprocessing/OutputPass.js';
 import { setModalCenter, setTag3D, gradientColors } from '/@/utils/threejs/util';
 import { CSS3DObject } from 'three/examples/jsm/renderers/CSS3DRenderer.js';
+import { number } from 'vue-types';
 
 // import * as dat from 'dat.gui';
 // const gui = new dat.GUI();
@@ -347,62 +348,215 @@ class WorkFace {
   mouseUpModel() {
     //
   }
-
+  setThreePlane() {
+    const gltfModal = this.group.getObjectByName('workFace');
+    const PouMian01 = gltfModal?.getObjectByName('PouMian01');
+    const DiXing = PouMian01?.getObjectByName('DiXing');
+    // 绘制采空区三带
+    // new THREE.Vector3(934.695, -141.85, -365.375),
+    // new THREE.Vector3(934.695, 623.933, -365.375),
+    //-365.355
+    const material1 = new THREE.MeshBasicMaterial({ side: THREE.DoubleSide, vertexColors: true });
+    const offeset = 10;
+    const yellowLen = offeset * 8;
+    // 红=》红
+    const curveRed = new THREE.CatmullRomCurve3([new THREE.Vector3(-477.721, -141.83, -365.375), new THREE.Vector3(-477.721, 623.933, -365.375)]);
+    const curve0 = new THREE.CatmullRomCurve3([
+      new THREE.Vector3(-231.811 - 150, -141.83, -365.375),
+      new THREE.Vector3(-121.899 - 150, 67.201, -365.375),
+      new THREE.Vector3(-242.441 - 150, 408.812, -365.375),
+      new THREE.Vector3(-179.811 - 150, 620.836, -365.375),
+    ]);
+    const pointsRed = curveRed.getPoints(80);
+    const points0 = curve0.getPoints(80);
+    const newPointRed: number[] = [];
+    const normalsRed: number[] = [];
+    const colorsRed: number[] = [];
+    for (let i = 0; i < 80; i++) {
+      newPointRed.push(pointsRed[i].x, pointsRed[i].y, pointsRed[i].z);
+      newPointRed.push(points0[i].x, points0[i].y, points0[i].z);
+      newPointRed.push(points0[i + 1].x, points0[i + 1].y, points0[i + 1].z);
+      newPointRed.push(points0[i + 1].x, points0[i + 1].y, points0[i + 1].z);
+      newPointRed.push(pointsRed[i + 1].x, pointsRed[i + 1].y, pointsRed[i + 1].z);
+      newPointRed.push(pointsRed[i].x, pointsRed[i].y, pointsRed[i].z);
+      normalsRed.push(0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1);
+      colorsRed.push(1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0);
+    }
+    const geometryRed = new THREE.BufferGeometry();
+    geometryRed.setAttribute('position', new THREE.BufferAttribute(new Float32Array(newPointRed), 3));
+    geometryRed.setAttribute('normal', new THREE.BufferAttribute(new Float32Array(normalsRed), 3));
+    geometryRed.setAttribute('color', new THREE.BufferAttribute(new Float32Array(colorsRed), 3));
+    const meshRed = new THREE.Mesh(geometryRed, material1);
+    meshRed.position.setZ(-1);
+    DiXing?.add(meshRed);
+
+    // 红=》黄
+
+    const curve1 = new THREE.CatmullRomCurve3([
+      new THREE.Vector3(-231.811 - yellowLen, -141.83, -365.375),
+      new THREE.Vector3(-121.899 - yellowLen, 67.201, -365.375),
+      new THREE.Vector3(-242.441 - yellowLen, 408.812, -365.375),
+      new THREE.Vector3(-179.811 - yellowLen, 620.836, -365.375),
+    ]);
+
+    const points1 = curve1.getPoints(80);
+    const newPoints0: number[] = [];
+    const normals0: number[] = [];
+    const colors0: number[] = [];
+    for (let i = 0; i < 80; i++) {
+      newPoints0.push(points0[i].x, points0[i].y, points0[i].z);
+      newPoints0.push(points1[i].x, points1[i].y, points1[i].z);
+      newPoints0.push(points1[i + 1].x, points1[i + 1].y, points1[i + 1].z);
+      newPoints0.push(points1[i + 1].x, points1[i + 1].y, points1[i + 1].z);
+      newPoints0.push(points0[i + 1].x, points0[i + 1].y, points0[i + 1].z);
+      newPoints0.push(points0[i].x, points0[i].y, points0[i].z);
+      normals0.push(0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1);
+      colors0.push(1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0);
+    }
+    const geometry0 = new THREE.BufferGeometry();
+    geometry0.setAttribute('position', new THREE.BufferAttribute(new Float32Array(newPoints0), 3));
+    geometry0.setAttribute('normal', new THREE.BufferAttribute(new Float32Array(normals0), 3));
+    geometry0.setAttribute('color', new THREE.BufferAttribute(new Float32Array(colors0), 3));
+    geometry0.computeBoundingBox();
+
+    // const material1 = new THREE.MeshBasicMaterial({ side: THREE.DoubleSide, color: '#fff' });
+    const mesh0 = new THREE.Mesh(geometry0, material1);
+    mesh0.name = 'yellow';
+    mesh0.position.setZ(-1);
+    DiXing?.add(mesh0);
+    // 黄=》黄
+    const curveYellow1 = new THREE.CatmullRomCurve3([
+      new THREE.Vector3(-179.811 + offeset, 620.836, -365.375),
+      new THREE.Vector3(-242.441 + offeset, 408.812, -365.375),
+      new THREE.Vector3(-121.899 + offeset, 67.201, -365.375),
+      new THREE.Vector3(-231.811 + offeset, -141.83, -365.375),
+    ]);
+    const curveYellow2 = new THREE.CatmullRomCurve3([
+      new THREE.Vector3(-179.811 - yellowLen, 620.836, -365.375),
+      new THREE.Vector3(-242.441 - yellowLen, 408.812, -365.375),
+      new THREE.Vector3(-121.899 - yellowLen, 67.201, -365.375),
+      new THREE.Vector3(-231.811 - yellowLen, -141.83, -365.375),
+    ]);
+    const pointsYellow1 = curveYellow1.getPoints(80);
+    const pointsYellow2 = curveYellow2.getPoints(80);
+    const newPointYellow: number[] = [];
+    const normalsYellow: number[] = [];
+    const colorsYellow: number[] = [];
+    for (let i = 0; i < 80; i++) {
+      newPointYellow.push(pointsYellow1[i].x, pointsYellow1[i].y, pointsYellow1[i].z);
+      newPointYellow.push(pointsYellow2[i].x, pointsYellow2[i].y, pointsYellow2[i].z);
+      newPointYellow.push(pointsYellow2[i + 1].x, pointsYellow2[i + 1].y, pointsYellow2[i + 1].z);
+      newPointYellow.push(pointsYellow2[i + 1].x, pointsYellow2[i + 1].y, pointsYellow2[i + 1].z);
+      newPointYellow.push(pointsYellow1[i + 1].x, pointsYellow1[i + 1].y, pointsYellow1[i + 1].z);
+      newPointYellow.push(pointsYellow1[i].x, pointsYellow1[i].y, pointsYellow1[i].z);
+      normalsYellow.push(0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1);
+      colorsYellow.push(1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0);
+    }
+    const geometryYellow = new THREE.BufferGeometry();
+    geometryYellow.setAttribute('position', new THREE.BufferAttribute(new Float32Array(newPointYellow), 3));
+    geometryYellow.setAttribute('normal', new THREE.BufferAttribute(new Float32Array(normalsYellow), 3));
+    geometryYellow.setAttribute('color', new THREE.BufferAttribute(new Float32Array(colorsYellow), 3));
+    const meshYellow = new THREE.Mesh(geometryYellow, material1);
+    meshYellow.position.setZ(-1);
+    DiXing?.add(meshYellow);
+
+    // 蓝 =》 蓝
+    const curve3 = new THREE.CatmullRomCurve3([
+      new THREE.Vector3(784.664, 623.933, -365.355),
+      new THREE.Vector3(167.212, 450.517, -365.355),
+      new THREE.Vector3(7.587, 262.225, -365.355),
+      new THREE.Vector3(426.499, 31.416, -365.355),
+      new THREE.Vector3(261.665, -139.495, -365.355),
+    ]);
+
+    const points = curve3.getPoints(80);
+    points.unshift(new THREE.Vector3(934.695, 623.933, -365.375));
+    points.unshift(new THREE.Vector3(934.695, -141.85, -365.375));
+    points.push(new THREE.Vector3(934.695, -141.85, -365.375));
+    const newPoints: THREE.Vector2[] = [];
+    for (let i = 0; i < points.length; i++) {
+      const point = points[i];
+      newPoints.push(new THREE.Vector2(point.x, point.y));
+    }
+    const shape = new THREE.Shape(newPoints);
+    const geometry = new THREE.ShapeGeometry(shape);
+
+    const material = new THREE.MeshBasicMaterial({ side: THREE.BackSide, color: '#00F' });
+    const mesh = new THREE.Mesh(geometry, material);
+    mesh.position.setZ(-366.485);
+    DiXing?.add(mesh);
+
+    // 黄色-》蓝色
+    const curve2 = new THREE.CatmullRomCurve3([
+      new THREE.Vector3(-179.811 + offeset, 620.836, -365.375),
+      new THREE.Vector3(-242.441 + offeset, 408.812, -365.375),
+      new THREE.Vector3(-121.899 + offeset, 67.201, -365.375),
+      new THREE.Vector3(-231.811 + offeset, -141.83, -365.375),
+    ]);
+    const points2 = curve2.getPoints(80);
+    const points3 = curve3.getPoints(80);
+    const newPoints1: number[] = [];
+    const normals: number[] = [];
+    const colors: number[] = [];
+    for (let i = 0; i < 80; i++) {
+      newPoints1.push(points2[i].x, points2[i].y, points2[i].z);
+      newPoints1.push(points3[i].x, points3[i].y, points3[i].z);
+      newPoints1.push(points3[i + 1].x, points3[i + 1].y, points3[i + 1].z);
+      newPoints1.push(points3[i + 1].x, points3[i + 1].y, points3[i + 1].z);
+      newPoints1.push(points2[i + 1].x, points2[i + 1].y, points2[i + 1].z);
+      newPoints1.push(points2[i].x, points2[i].y, points2[i].z);
+      normals.push(0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1);
+      colors.push(1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0);
+    }
+    const geometry1 = new THREE.BufferGeometry();
+    geometry1.setAttribute('position', new THREE.BufferAttribute(new Float32Array(newPoints1), 3));
+    geometry1.setAttribute('normal', new THREE.BufferAttribute(new Float32Array(normals), 3));
+    geometry1.setAttribute('color', new THREE.BufferAttribute(new Float32Array(colors), 3));
+    geometry1.computeBoundingBox();
+    const mesh1 = new THREE.Mesh(geometry1, material1);
+    mesh1.name = 'blue';
+    mesh1.position.setZ(-1);
+    DiXing?.add(mesh1);
+  }
   setModalType(modalType) {
     // debugger;
-    const workFace2 = this.group.getObjectByName('workFace2-1');
-    const workFace1 = this.group.getObjectByName('workFace1-1');
-    // const workFace3 = this.group.getObjectByName('workFace2-2');
-    if (workFace2 && workFace1) {
+    const gltfModal = this.group.getObjectByName('workFace');
+    const workFace1 = gltfModal?.getObjectByName('YiJinYiHui');
+    const workFace2 = gltfModal?.getObjectByName('LiangJinYiHui');
+    const workFace3 = gltfModal?.getObjectByName('LiangJinLiangHui');
+    if (workFace1 && workFace2 && workFace3) {
       if (modalType === 'workFace1') {
         // 单进单回
-        workFace2.visible = false;
-        // workFace3.visible = false;
         workFace1.visible = true;
-        workFace1.add(this.planeGroup);
-        this.planeGroup.visible = false;
-        this.planeGroup.position.set(-0.35, 0.14, -0.21);
+        workFace2.visible = false;
+        workFace3.visible = false;
       } else if (modalType === 'workFace3') {
         // 双进单回
         workFace1.visible = false;
-        // workFace3.visible = false;
         workFace2.visible = true;
-        workFace2.add(this.planeGroup);
-        this.planeGroup.visible = false;
-        this.planeGroup.position.set(-0.35, 0.14, -0.21);
+        workFace3.visible = false;
+      } else if (modalType === 'workFace4') {
+        workFace1.visible = false;
+        workFace2.visible = false;
+        workFace3.visible = true;
       }
-      // else if (modalType === 'workFace4') {
-      //   // 双进双回
-      //   workFace2.visible = false;
-      //   workFace3.visible = true;
-      //   workFace1.visible = false;
-      // }
-      setModalCenter(this.group);
     }
   }
 
   mountedThree() {
     return new Promise(async (resolve) => {
       this.model.renderer.sortObjects = true;
-      // this.model.camera.position.set(0, 3.1, 500);
-      // this.setRenderPass();
       this.model.orbitControls.update();
       this.model.setGLTFModel('workFace').then(async (gltf) => {
         const gltfModal = gltf[0];
-        gltfModal.name = 'workFace';
-        this.group?.add(gltfModal);
-        this.group.children.forEach((object: THREE.Object3D) => {
-          if (object.name.startsWith('workFace')) {
-            setModalCenter(object);
-          }
-        });
+        this.group = gltfModal;
         this.group.name = this.modelName;
-
-        // this.group.position.set(-1.67, 26.45, 47.0);
+        setModalCenter(this.group);
         this.group.scale.set(2.5, 2.5, 2.5);
         // this.resetMesh();
         this.getPositions(this.glob.N);
         this.addLight();
+        this.setThreePlane();
         // this.drawSpheres();
 
         resolve(null);